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 | |
| } | |