Ctrl K
ComunidadGuías…

model/annotations.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package model

import (
	"github.com/coroot/coroot/timeseries"
	"github.com/coroot/coroot/utils"
)

type ApplicationAnnotation string

const (
	ApplicationAnnotationCategory                 ApplicationAnnotation = "application_category"
	ApplicationAnnotationCustomName               ApplicationAnnotation = "custom_application_name"
	ApplicationAnnotationSLOAvailabilityObjective ApplicationAnnotation = "slo_availability_objective"
	ApplicationAnnotationSLOLatencyObjective      ApplicationAnnotation = "slo_latency_objective"
	ApplicationAnnotationSLOLatencyThreshold      ApplicationAnnotation = "slo_latency_threshold"
	ApplicationAnnotationSLOLLMLatencyObjective   ApplicationAnnotation = "slo_llm_latency_objective"
	ApplicationAnnotationSLOLLMLatencyThreshold   ApplicationAnnotation = "slo_llm_latency_threshold"
)

var ApplicationAnnotationsList = []ApplicationAnnotation{
	ApplicationAnnotationCategory,
	ApplicationAnnotationCustomName,
	ApplicationAnnotationSLOAvailabilityObjective,
	ApplicationAnnotationSLOLatencyObjective,
	ApplicationAnnotationSLOLatencyThreshold,
	ApplicationAnnotationSLOLLMLatencyObjective,
	ApplicationAnnotationSLOLLMLatencyThreshold,
}

var ApplicationAnnotationLabels = map[string]ApplicationAnnotation{}

func init() {
	for _, aa := range ApplicationAnnotationsList {
		ApplicationAnnotationLabels["annotation_coroot_com_"+string(aa)] = aa
	}
}

type ApplicationAnnotations map[ApplicationAnnotation]*LabelLastValue

func (aas ApplicationAnnotations) UpdateFromLabels(ls Labels, ts *timeseries.TimeSeries) {
	for n, v := range ls {
		aa := ApplicationAnnotationLabels[n]
		if aa == "" || v == "" {
			continue
		}
		lv := aas[aa]
		if lv == nil {
			lv = &LabelLastValue{}
			aas[aa] = lv
		}
		lv.Update(ts, v)
	}
}

func (app *Application) GetAnnotation(aa ApplicationAnnotation) string {
	if lv := app.Annotations[aa]; lv != nil {
		return lv.Value()
	}
	var instanceAnnotations *utils.StringSet
	for _, i := range app.Instances {
		if i.IsObsolete() {
			continue
		}
		if lv := i.Annotations[aa]; lv != nil {
			if instanceAnnotations == nil {
				instanceAnnotations = utils.NewStringSet()
			}
			instanceAnnotations.Add(lv.Value())
		}
	}
	if instanceAnnotations == nil {
		return ""
	}
	return instanceAnnotations.GetFirst()
}