package main import ( "context" "github.com/fnproject/fn/api/agent" "github.com/fnproject/fn/api/agent/drivers/docker" "github.com/fnproject/fn/api/logs/s3" "github.com/fnproject/fn/api/server" // The trace package is imported in several places by different dependencies and if we don't import explicity here it is // initialized every time it is imported and that creates a panic at run time as we register multiple time the handler for // /debug/requests. For example see: https://github.com/GoogleCloudPlatform/google-cloud-go/issues/663 and https://github.com/bradleyfalzon/gopherci/issues/101 _ "golang.org/x/net/trace" // EXTENSIONS: Add extension imports here or use `fn build-server`. Learn more: https://github.com/fnproject/fn/blob/master/docs/operating/extending.md _ "github.com/fnproject/fn/api/server/defaultexts" ) func main() { ctx := context.Background() funcServer := server.NewFromEnv(ctx) registerViews() funcServer.Start(ctx) } func registerViews() { keys := []string{"fn_appname", "fn_path"} apiKeys := []string{"path", "method", "status"} latencyDist := []float64{1, 10, 50, 100, 250, 500, 1000, 10000, 60000, 120000} // IO buckets in Mbits (Using same buckets for network + disk) mb := float64(131072) ioDist := []float64{0, mb, 4 * mb, 8 * mb, 16 * mb, 32 * mb, 64 * mb, 128 * mb, 256 * mb, 512 * mb, 1024 * mb} // Memory buckets in MB mB := float64(1048576) memoryDist := []float64{0, 128 * mB, 256 * mB, 512 * mB, 1024 * mB, 2 * 1024 * mB, 4 * 1024 * mB, 8 * 1024 * mB} // 10% granularity buckets cpuDist := []float64{0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100} agent.RegisterAgentViews(keys, latencyDist) agent.RegisterDockerViews(keys, latencyDist, ioDist, ioDist, memoryDist, cpuDist) agent.RegisterContainerViews(keys, latencyDist) // Register docker client views docker.RegisterViews(keys, latencyDist) // Register s3 log views s3.RegisterViews(keys, latencyDist) server.RegisterAPIViews(apiKeys, latencyDist) }