Spaces:
Configuration error
Configuration error
package services | |
import ( | |
"context" | |
"github.com/rs/zerolog/log" | |
"go.opentelemetry.io/otel/attribute" | |
"go.opentelemetry.io/otel/exporters/prometheus" | |
"go.opentelemetry.io/otel/metric" | |
metricApi "go.opentelemetry.io/otel/sdk/metric" | |
) | |
type LocalAIMetricsService struct { | |
Meter metric.Meter | |
ApiTimeMetric metric.Float64Histogram | |
} | |
func (m *LocalAIMetricsService) ObserveAPICall(method string, path string, duration float64) { | |
opts := metric.WithAttributes( | |
attribute.String("method", method), | |
attribute.String("path", path), | |
) | |
m.ApiTimeMetric.Record(context.Background(), duration, opts) | |
} | |
// setupOTelSDK bootstraps the OpenTelemetry pipeline. | |
// If it does not return an error, make sure to call shutdown for proper cleanup. | |
func NewLocalAIMetricsService() (*LocalAIMetricsService, error) { | |
exporter, err := prometheus.New() | |
if err != nil { | |
return nil, err | |
} | |
provider := metricApi.NewMeterProvider(metricApi.WithReader(exporter)) | |
meter := provider.Meter("github.com/mudler/LocalAI") | |
apiTimeMetric, err := meter.Float64Histogram("api_call", metric.WithDescription("api calls")) | |
if err != nil { | |
return nil, err | |
} | |
return &LocalAIMetricsService{ | |
Meter: meter, | |
ApiTimeMetric: apiTimeMetric, | |
}, nil | |
} | |
func (lams LocalAIMetricsService) Shutdown() error { | |
// TODO: Not sure how to actually do this: | |
//// setupOTelSDK bootstraps the OpenTelemetry pipeline. | |
//// If it does not return an error, make sure to call shutdown for proper cleanup. | |
log.Warn().Msgf("LocalAIMetricsService Shutdown called, but OTelSDK proper shutdown not yet implemented?") | |
return nil | |
} | |