From 2609923a0ca138a820201a6b78023b37fabb4420 Mon Sep 17 00:00:00 2001 From: Kevin Petremann Date: Fri, 18 Aug 2023 13:10:41 +0200 Subject: [PATCH 1/3] fix: build variable not matching goreleaser ldflags --- .gitignore | 1 + cmd/data-aggregation-api/main.go | 12 +++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 65d2bcf..600db49 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,4 @@ settings.yaml # Build /.build/ +/dist/ diff --git a/cmd/data-aggregation-api/main.go b/cmd/data-aggregation-api/main.go index ad94f26..f7c9a4b 100644 --- a/cmd/data-aggregation-api/main.go +++ b/cmd/data-aggregation-api/main.go @@ -32,9 +32,10 @@ func configureLogging(logLevel string, pretty bool) error { } var ( - version = "" - buildTime = "unknown" - buildUser = "unknown" + version = "" + date = "unknown" + commit = "unknown" + builtBy = "unknown" ) func run() error { @@ -49,8 +50,9 @@ func run() error { } log.Info().Str("version", version).Send() - log.Info().Str("build-time", buildTime).Send() - log.Info().Str("build-user", buildUser).Send() + log.Info().Str("commit", commit).Send() + log.Info().Str("build-time", date).Send() + log.Info().Str("build-user", builtBy).Send() deviceRepo := device.NewSafeRepository() reports := report.NewRepository() From ea9be6b824cbb604b7dad988466ba63787993b60 Mon Sep 17 00:00:00 2001 From: Kevin Petremann Date: Fri, 18 Aug 2023 13:03:08 +0200 Subject: [PATCH 2/3] feat(api): expose app version --- cmd/data-aggregation-api/main.go | 6 ++++++ internal/api/router/endpoints.go | 6 ++++++ internal/api/router/manager.go | 1 + internal/app/version.go | 10 ++++++++++ 4 files changed, 23 insertions(+) create mode 100644 internal/app/version.go diff --git a/cmd/data-aggregation-api/main.go b/cmd/data-aggregation-api/main.go index f7c9a4b..c0c9b36 100644 --- a/cmd/data-aggregation-api/main.go +++ b/cmd/data-aggregation-api/main.go @@ -11,6 +11,7 @@ import ( "github.com/rs/zerolog/log" "github.com/criteo/data-aggregation-api/internal/api/router" + "github.com/criteo/data-aggregation-api/internal/app" "github.com/criteo/data-aggregation-api/internal/config" "github.com/criteo/data-aggregation-api/internal/convertor/device" "github.com/criteo/data-aggregation-api/internal/job" @@ -68,6 +69,11 @@ func run() error { } func main() { + app.Info.Version = version + app.Info.BuildTime = date + app.Info.BuildUser = builtBy + app.Info.Commit = commit + if err := run(); err != nil { log.Fatal().Err(err).Send() } diff --git a/internal/api/router/endpoints.go b/internal/api/router/endpoints.go index 17a3da5..bf71201 100644 --- a/internal/api/router/endpoints.go +++ b/internal/api/router/endpoints.go @@ -7,6 +7,7 @@ import ( "github.com/rs/zerolog/log" + "github.com/criteo/data-aggregation-api/internal/app" "github.com/criteo/data-aggregation-api/internal/convertor/device" "github.com/julienschmidt/httprouter" ) @@ -21,6 +22,11 @@ func healthCheck(w http.ResponseWriter, _ *http.Request, _ httprouter.Params) { fmt.Fprintf(w, `{"status": "ok"}`) } +func getVersion(w http.ResponseWriter, _ *http.Request, _ httprouter.Params) { + w.Header().Set(contentType, applicationJSON) + fmt.Fprintf(w, `{"version": "%s", "build_time": "%s", "build_user": "%s"}`, app.Info.Version, app.Info.BuildTime, app.Info.BuildUser) +} + func prometheusMetrics(h http.Handler) httprouter.Handle { return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { h.ServeHTTP(w, r) diff --git a/internal/api/router/manager.go b/internal/api/router/manager.go index 97883f6..b3d32b0 100644 --- a/internal/api/router/manager.go +++ b/internal/api/router/manager.go @@ -47,6 +47,7 @@ func (m *Manager) ListenAndServe(ctx context.Context, address string, port int) router := httprouter.New() router.GET("/metrics", prometheusMetrics(promhttp.Handler())) + router.GET("/api/version", getVersion) router.GET("/api/health", healthCheck) router.GET("/v1/devices/:hostname/afk_enabled", withAuth.Wrap(m.getAFKEnabled)) router.GET("/v1/devices/:hostname/openconfig", withAuth.Wrap(m.getDeviceOpenConfig)) diff --git a/internal/app/version.go b/internal/app/version.go new file mode 100644 index 0000000..a9dbe4a --- /dev/null +++ b/internal/app/version.go @@ -0,0 +1,10 @@ +package app + +type info struct { + Version string + BuildTime string + BuildUser string + Commit string +} + +var Info = info{} From 7ac71ff07518c1ca98696d604f8c98b5ca61a113 Mon Sep 17 00:00:00 2001 From: Kevin Petremann Date: Fri, 18 Aug 2023 14:03:49 +0200 Subject: [PATCH 3/3] feat(metrics): expose app version --- internal/metrics/registry.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/internal/metrics/registry.go b/internal/metrics/registry.go index d963f53..3dc0102 100644 --- a/internal/metrics/registry.go +++ b/internal/metrics/registry.go @@ -1,18 +1,30 @@ package metrics import ( + "github.com/criteo/data-aggregation-api/internal/app" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" ) type Registry struct { + AppInfo *prometheus.GaugeVec BuiltDevicesNumber *prometheus.GaugeVec lastBuildStatus *prometheus.GaugeVec buildTotal *prometheus.CounterVec } func NewRegistry() Registry { + appInfo := promauto.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "data_aggregation_api_info", + Help: "Version of the application", + }, + []string{"version", "commit", "build_time", "built_by"}, + ) + appInfo.WithLabelValues(app.Info.Version, app.Info.Commit, app.Info.BuildTime, app.Info.BuildUser).Set(1) + return Registry{ + AppInfo: appInfo, BuiltDevicesNumber: promauto.NewGaugeVec( prometheus.GaugeOpts{ Name: "built_devices_number",