mirror of
https://github.com/openfaas/faas.git
synced 2025-06-09 00:36:46 +00:00
Note, not all `alexellis/github` references should be changed, there are a number of repos which are not part of the openfaas org, this commit excludes those. Signed-off-by: John McCabe <john@johnmccabe.net>
68 lines
1.8 KiB
Go
68 lines
1.8 KiB
Go
// Copyright (c) Alex Ellis 2017. All rights reserved.
|
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
|
|
package handlers
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"strings"
|
|
|
|
"github.com/openfaas/faas/gateway/metrics"
|
|
"github.com/openfaas/faas/gateway/requests"
|
|
"github.com/docker/docker/api/types"
|
|
"github.com/docker/docker/api/types/filters"
|
|
"github.com/docker/docker/client"
|
|
)
|
|
|
|
// MakeFunctionReader gives a summary of Function structs with Docker service stats overlaid with Prometheus counters.
|
|
func MakeFunctionReader(metricsOptions metrics.MetricOptions, c *client.Client) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
serviceFilter := filters.NewArgs()
|
|
|
|
options := types.ServiceListOptions{
|
|
Filters: serviceFilter,
|
|
}
|
|
|
|
services, err := c.ServiceList(context.Background(), options)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
|
|
// TODO: Filter only "faas" functions (via metadata?)
|
|
var functions []requests.Function
|
|
|
|
for _, service := range services {
|
|
|
|
if len(service.Spec.TaskTemplate.ContainerSpec.Labels["function"]) > 0 {
|
|
var envProcess string
|
|
|
|
for _, env := range service.Spec.TaskTemplate.ContainerSpec.Env {
|
|
if strings.Contains(env, "fprocess=") {
|
|
envProcess = env[len("fprocess="):]
|
|
}
|
|
}
|
|
|
|
f := requests.Function{
|
|
Name: service.Spec.Name,
|
|
Image: service.Spec.TaskTemplate.ContainerSpec.Image,
|
|
InvocationCount: 0,
|
|
Replicas: *service.Spec.Mode.Replicated.Replicas,
|
|
EnvProcess: envProcess,
|
|
}
|
|
|
|
functions = append(functions, f)
|
|
}
|
|
}
|
|
|
|
functionBytes, _ := json.Marshal(functions)
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.WriteHeader(200)
|
|
w.Write(functionBytes)
|
|
}
|
|
}
|