From 599e22c1af483c8fed35043ec8b1ed7fed872bd5 Mon Sep 17 00:00:00 2001 From: Alex Grintsvayg Date: Mon, 23 Mar 2020 13:31:18 -0400 Subject: [PATCH] add buffer count metric --- api/routes.go | 3 ++- go.mod | 1 + internal/metrics/metrics.go | 8 ++++++++ internal/status/status.go | 23 ++++++++++++++++++++++- 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/api/routes.go b/api/routes.go index 98b877ce..f1dc30ee 100644 --- a/api/routes.go +++ b/api/routes.go @@ -6,9 +6,9 @@ import ( "github.com/lbryio/lbrytv/app/publish" "github.com/lbryio/lbrytv/app/users" "github.com/lbryio/lbrytv/internal/status" - "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/gorilla/mux" + "github.com/prometheus/client_golang/prometheus/promhttp" ) // InstallRoutes sets up global API handlers @@ -31,6 +31,7 @@ func InstallRoutes(proxyService *proxy.ProxyService, r *mux.Router) { internalRouter.Handle("/metrics", promhttp.Handler()) internalRouter.HandleFunc("/status", status.GetStatus) internalRouter.HandleFunc("/whoami", status.WhoAMI) + internalRouter.HandleFunc("/ui_metric", status.TrackUIMetric) player.InstallRoutes(r) } diff --git a/go.mod b/go.mod index 42f41348..f740f8c6 100644 --- a/go.mod +++ b/go.mod @@ -25,6 +25,7 @@ require ( github.com/rubenv/sql-migrate v0.0.0-20190618074426-f4d34eae5a5c github.com/sirupsen/logrus v1.4.2 github.com/spf13/afero v1.2.2 // indirect + github.com/spf13/cast v1.3.0 github.com/spf13/cobra v0.0.5 github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect diff --git a/internal/metrics/metrics.go b/internal/metrics/metrics.go index 61b28fb8..82e369a9 100644 --- a/internal/metrics/metrics.go +++ b/internal/metrics/metrics.go @@ -10,6 +10,7 @@ const ( nsIAPI = "iapi" nsProxy = "proxy" nsLbrynet = "lbrynet" + nsUI = "ui" LabelSource = "source" LabelInstance = "instance" @@ -120,4 +121,11 @@ var ( Name: "count", Help: "Number of wallets currently loaded", }, []string{LabelSource}) + + UIBufferCount = promauto.NewCounter(prometheus.CounterOpts{ + Namespace: nsUI, + Subsystem: "buffer", + Name: "count", + Help: "Video buffer events", + }) ) diff --git a/internal/status/status.go b/internal/status/status.go index 55a4ea0c..7fb5d371 100644 --- a/internal/status/status.go +++ b/internal/status/status.go @@ -7,6 +7,7 @@ import ( "time" "github.com/lbryio/lbrytv/app/router" + "github.com/lbryio/lbrytv/internal/metrics" "github.com/lbryio/lbrytv/internal/monitor" ljsonrpc "github.com/lbryio/lbry.go/v2/extras/jsonrpc" @@ -63,7 +64,7 @@ func GetStatus(w http.ResponseWriter, req *http.Request) { sdks := router.GetSDKServerList() for _, s := range sdks { c := ljsonrpc.NewClient(s.Address) - c.SetRPCTimeout(5*time.Second) + c.SetRPCTimeout(5 * time.Second) status, err := c.Status() srv := ServerItem{Address: s.Address, Status: StatusOK} if err != nil { @@ -118,3 +119,23 @@ func WhoAMI(w http.ResponseWriter, req *http.Request) { respByte, _ := json.MarshalIndent(&details, "", " ") w.Write(respByte) } + +func TrackUIMetric(w http.ResponseWriter, req *http.Request) { + w.Header().Add("content-type", "application/json; charset=utf-8") + resp := make(map[string]string) + + metricName := req.FormValue("name") + resp["name"] = metricName + + switch metricName { + case "buffer": + metrics.UIBufferCount.Inc() + resp["status"] = "ok" + default: + w.WriteHeader(http.StatusBadRequest) + resp["error"] = "Unknown metric" + } + + respByte, _ := json.MarshalIndent(&resp, "", " ") + w.Write(respByte) +}