Skip to main content
Glama
persistence_utils.go3 kB
package discovery import ( "lunar/aggregation-plugin/common" sharedActions "lunar/shared-model/actions" sharedDiscovery "lunar/shared-model/discovery" "strings" "github.com/rs/zerolog/log" ) func ConvertToPersisted(aggregations Agg) sharedDiscovery.Output { output := sharedDiscovery.Output{ Interceptors: []sharedDiscovery.InterceptorOutput{}, Endpoints: map[string]sharedDiscovery.EndpointOutput{}, Consumers: map[string]map[string]sharedDiscovery.EndpointOutput{}, } for endpoint, agg := range aggregations.Endpoints { key := dumpEndpoint(endpoint) output.Endpoints[key] = convertEndpointToPersisted(agg) } for consumer, endpoints := range aggregations.Consumers { output.Consumers[consumer] = map[string]sharedDiscovery.EndpointOutput{} for endpoint, agg := range endpoints { key := dumpEndpoint(endpoint) output.Consumers[consumer][key] = convertEndpointToPersisted(agg) } } for interceptor, agg := range aggregations.Interceptors { output.Interceptors = append(output.Interceptors, sharedDiscovery.InterceptorOutput{ Type: interceptor.Type, Version: interceptor.Version, LastTransactionDate: sharedActions.TimestampToStringFromInt64( agg.Timestamp), }) } return output } func ConvertFromPersisted(output sharedDiscovery.Output) *Agg { aggregations := Agg{ Interceptors: map[common.Interceptor]InterceptorAgg{}, Endpoints: map[sharedDiscovery.Endpoint]sharedDiscovery.EndpointAgg{}, Consumers: map[string]sharedDiscovery.EndpointMapping{}, } aggregations.Endpoints = sharedDiscovery.ConvertEndpointsFromPersisted(output.Endpoints) aggregations.Consumers = sharedDiscovery.ConvertConsumersFromPersisted(output.Consumers) for _, interceptor := range output.Interceptors { timestamp, err := sharedActions.TimestampFromStringToInt64(interceptor.LastTransactionDate) if err != nil { log.Error().Msgf("Error converting timestamp: %v", err) timestamp = 0 } aggregations.Interceptors[common.Interceptor{ Type: interceptor.Type, Version: interceptor.Version, }] = InterceptorAgg{ Timestamp: timestamp, } } return &aggregations } func dumpEndpoint(endpoint sharedDiscovery.Endpoint) string { return strings.Join([]string{endpoint.Method, endpoint.URL}, sharedDiscovery.EndpointDelimiter) } func convertMapOfCountToInt(counts map[int]sharedDiscovery.Count) map[int]int { result := make(map[int]int) for key, value := range counts { result[key] = int(value) } return result } func convertEndpointToPersisted(agg sharedDiscovery.EndpointAgg) sharedDiscovery.EndpointOutput { return sharedDiscovery.EndpointOutput{ MinTime: sharedActions.TimestampToStringFromInt64(agg.MinTime), MaxTime: sharedActions.TimestampToStringFromInt64(agg.MaxTime), Count: int(agg.Count), StatusCodes: convertMapOfCountToInt(agg.StatusCodes), AverageDuration: agg.AverageDuration, AverageTotalDuration: agg.AverageTotalDuration, } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TheLunarCompany/lunar'

If you have feedback or need assistance with the MCP directory API, please join our Discord server