diff options
author | 2025-02-06 12:14:37 +0100 | |
---|---|---|
committer | 2025-02-06 12:14:37 +0100 | |
commit | dd094e401282e135989f57c0ca3dee7dea3f5207 (patch) | |
tree | 74cb77830f621840273255a17565ced73b4fa997 /internal/metrics/metrics.go | |
parent | [feature] Use `X-Robots-Tag` headers to instruct scrapers/crawlers (#3737) (diff) | |
download | gotosocial-dd094e401282e135989f57c0ca3dee7dea3f5207.tar.xz |
[chore] update otel libraries (#3740)
* chore: update otel dependencies
* refactor: combine tracing & metrics in observability package
* chore: update example tracing compose file
Diffstat (limited to 'internal/metrics/metrics.go')
-rw-r--r-- | internal/metrics/metrics.go | 138 |
1 files changed, 0 insertions, 138 deletions
diff --git a/internal/metrics/metrics.go b/internal/metrics/metrics.go deleted file mode 100644 index e22a67dad..000000000 --- a/internal/metrics/metrics.go +++ /dev/null @@ -1,138 +0,0 @@ -// GoToSocial -// Copyright (C) GoToSocial Authors admin@gotosocial.org -// SPDX-License-Identifier: AGPL-3.0-or-later -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -//go:build !nometrics - -package metrics - -import ( - "context" - "errors" - - "github.com/gin-gonic/gin" - "github.com/superseriousbusiness/gotosocial/internal/config" - "github.com/superseriousbusiness/gotosocial/internal/db" - "github.com/technologize/otel-go-contrib/otelginmetrics" - "github.com/uptrace/bun" - "github.com/uptrace/bun/extra/bunotel" - "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/exporters/prometheus" - "go.opentelemetry.io/otel/metric" - sdk "go.opentelemetry.io/otel/sdk/metric" - "go.opentelemetry.io/otel/sdk/resource" - semconv "go.opentelemetry.io/otel/semconv/v1.24.0" -) - -const ( - serviceName = "GoToSocial" -) - -func Initialize(db db.DB) error { - if !config.GetMetricsEnabled() { - return nil - } - - if config.GetMetricsAuthEnabled() { - if config.GetMetricsAuthPassword() == "" || config.GetMetricsAuthUsername() == "" { - return errors.New("metrics-auth-username and metrics-auth-password must be set when metrics-auth-enabled is true") - } - } - - r, _ := resource.Merge( - resource.Default(), - resource.NewSchemaless( - semconv.ServiceName(serviceName), - semconv.ServiceVersion(config.GetSoftwareVersion()), - ), - ) - - prometheusExporter, err := prometheus.New() - if err != nil { - return err - } - - meterProvider := sdk.NewMeterProvider( - sdk.WithResource(r), - sdk.WithReader(prometheusExporter), - ) - - otel.SetMeterProvider(meterProvider) - - meter := meterProvider.Meter(serviceName) - - thisInstance := config.GetHost() - - _, err = meter.Int64ObservableGauge( - "gotosocial.instance.total_users", - metric.WithDescription("Total number of users on this instance"), - metric.WithInt64Callback(func(c context.Context, o metric.Int64Observer) error { - userCount, err := db.CountInstanceUsers(c, thisInstance) - if err != nil { - return err - } - o.Observe(int64(userCount)) - return nil - }), - ) - if err != nil { - return err - } - - _, err = meter.Int64ObservableGauge( - "gotosocial.instance.total_statuses", - metric.WithDescription("Total number of statuses on this instance"), - metric.WithInt64Callback(func(c context.Context, o metric.Int64Observer) error { - statusCount, err := db.CountInstanceStatuses(c, thisInstance) - if err != nil { - return err - } - o.Observe(int64(statusCount)) - return nil - }), - ) - if err != nil { - return err - } - - _, err = meter.Int64ObservableGauge( - "gotosocial.instance.total_federating_instances", - metric.WithDescription("Total number of other instances this instance is federating with"), - metric.WithInt64Callback(func(c context.Context, o metric.Int64Observer) error { - federatingCount, err := db.CountInstanceDomains(c, thisInstance) - if err != nil { - return err - } - o.Observe(int64(federatingCount)) - return nil - }), - ) - if err != nil { - return err - } - - return nil -} - -func InstrumentGin() gin.HandlerFunc { - return otelginmetrics.Middleware(serviceName) -} - -func InstrumentBun() bun.QueryHook { - return bunotel.NewQueryHook( - bunotel.WithMeterProvider(otel.GetMeterProvider()), - ) -} |