chore(2354): added preloaded metrics metadata at first api call

This commit is contained in:
aniket 2025-06-12 12:40:12 +05:30
parent d85a1a21ac
commit f96dda7c71
5 changed files with 27 additions and 64 deletions

View File

@ -227,17 +227,6 @@ func NewServer(serverOptions *ServerOptions) (*Server, error) {
&opAmpModel.AllAgents, agentConfMgr,
)
orgs, err := apiHandler.Signoz.Modules.OrgGetter.ListByOwnedKeyRange(context.Background())
if err != nil {
return nil, err
}
for _, org := range orgs {
errorList := reader.PreloadMetricsMetadata(context.Background(), org.ID)
for _, er := range errorList {
zap.L().Error("failed to preload metrics metadata", zap.Error(er))
}
}
return s, nil
}

View File

@ -6257,7 +6257,22 @@ func (r *ClickHouseReader) PreloadMetricsMetadata(ctx context.Context, orgID val
func (r *ClickHouseReader) GetUpdatedMetricsMetadata(ctx context.Context, orgID valuer.UUID, metricNames ...string) (map[string]*model.UpdateMetricsMetadata, *model.ApiError) {
cachedMetadata := make(map[string]*model.UpdateMetricsMetadata)
var missingMetrics []string
preCacheLoaded := new(model.CacheLoaded)
err := r.cache.Get(ctx, orgID, constants.METRICS_UPDATED_METADATA_CACHE_LOADED_KEY, preCacheLoaded, false)
if err != nil {
*preCacheLoaded = false
zap.L().Warn("Failed to get cached metrics updated metadata", zap.Error(err))
}
if !*preCacheLoaded {
r.PreloadMetricsMetadata(ctx, orgID)
*preCacheLoaded = true
err := r.cache.Set(ctx, orgID, constants.METRICS_UPDATED_METADATA_CACHE_LOADED_KEY, preCacheLoaded, -1)
if err != nil {
zap.L().Warn("Failed to set cached metrics updated metadata", zap.Error(err))
}
}
// First, try retrieving each metric from cache.
for _, metricName := range metricNames {
@ -6266,48 +6281,8 @@ func (r *ClickHouseReader) GetUpdatedMetricsMetadata(ctx context.Context, orgID
err := r.cache.Get(ctx, orgID, cacheKey, metadata, true)
if err == nil {
cachedMetadata[metricName] = metadata
} else {
missingMetrics = append(missingMetrics, metricName)
}
}
// If there are any metrics missing in the cache, query them from the database.
if len(missingMetrics) > 0 {
// Join the missing metric names; ensure proper quoting if needed.
metricList := "'" + strings.Join(metricNames, "', '") + "'"
query := fmt.Sprintf(`SELECT metric_name, type, description, temporality, is_monotonic, unit
FROM %s.%s
WHERE metric_name IN (%s);`, signozMetricDBName, signozUpdatedMetricsMetadataTable, metricList)
valueCtx := context.WithValue(ctx, "clickhouse_max_threads", constants.MetricsExplorerClickhouseThreads)
rows, err := r.db.Query(valueCtx, query)
if err != nil {
return cachedMetadata, &model.ApiError{Typ: "ClickhouseErr", Err: fmt.Errorf("error querying metrics metadata: %v", err)}
}
defer rows.Close()
for rows.Next() {
metadata := new(model.UpdateMetricsMetadata)
if err := rows.Scan(
&metadata.MetricName,
&metadata.MetricType,
&metadata.Description,
&metadata.Temporality,
&metadata.IsMonotonic,
&metadata.Unit,
); err != nil {
return cachedMetadata, &model.ApiError{Typ: "ClickhouseErr", Err: fmt.Errorf("error scanning metrics metadata: %v", err)}
}
// Cache the result for future requests.
cacheKey := constants.UpdatedMetricsMetadataCachePrefix + metadata.MetricName
if cacheErr := r.cache.Set(ctx, orgID, cacheKey, metadata, -1); cacheErr != nil {
zap.L().Error("Failed to store metrics metadata in cache", zap.String("metric_name", metadata.MetricName), zap.Error(cacheErr))
}
cachedMetadata[metadata.MetricName] = metadata
}
}
return cachedMetadata, nil
}

View File

@ -197,18 +197,7 @@ func NewServer(serverOptions *ServerOptions) (*Server, error) {
s.opampServer = opamp.InitializeServer(
&opAmpModel.AllAgents, agentConfMgr,
)
orgs, err := apiHandler.Signoz.Modules.OrgGetter.ListByOwnedKeyRange(context.Background())
if err != nil {
return nil, err
}
for _, org := range orgs {
errorList := reader.PreloadMetricsMetadata(context.Background(), org.ID)
for _, er := range errorList {
zap.L().Error("failed to preload metrics metadata", zap.Error(er))
}
}
return s, nil
}

View File

@ -668,3 +668,4 @@ func GetDefaultSiteURL() string {
}
const DotMetricsEnabled = "DOT_METRICS_ENABLED"
const METRICS_UPDATED_METADATA_CACHE_LOADED_KEY = "METRICS_UPDATED_METADATA_CACHE_LOADED"

View File

@ -22,3 +22,12 @@ func (c *UpdateMetricsMetadata) MarshalBinary() (data []byte, err error) {
func (c *UpdateMetricsMetadata) UnmarshalBinary(data []byte) error {
return json.Unmarshal(data, c)
}
type CacheLoaded bool
func (c *CacheLoaded) MarshalBinary() (data []byte, err error) {
return json.Marshal(c)
}
func (c *CacheLoaded) UnmarshalBinary(data []byte) error {
return json.Unmarshal(data, c)
}