github.com/openfga/openfga@v1.5.4-rc1/internal/condition/metrics/metrics.go (about) 1 // Package metrics provides various metric and telemetry definitions for OpenFGA Conditions. 2 package metrics 3 4 import ( 5 "time" 6 7 "github.com/prometheus/client_golang/prometheus" 8 "github.com/prometheus/client_golang/prometheus/promauto" 9 10 "github.com/openfga/openfga/internal/build" 11 "github.com/openfga/openfga/internal/server/config" 12 "github.com/openfga/openfga/internal/utils" 13 ) 14 15 // Metrics provides access to Condition metrics. 16 var Metrics *ConditionMetrics 17 18 func init() { 19 m := &ConditionMetrics{ 20 compilationTime: promauto.NewHistogram(prometheus.HistogramOpts{ 21 Namespace: build.ProjectName, 22 Name: "condition_compilation_duration_ms", 23 Help: "A histogram measuring the compilation time (in milliseconds) of a Condition.", 24 Buckets: []float64{1, 5, 15, 50, 100, 250, 500, 1000}, 25 }), 26 27 evaluationTime: promauto.NewHistogram(prometheus.HistogramOpts{ 28 Namespace: build.ProjectName, 29 Name: "condition_evaluation_duration_ms", 30 Help: "A histogram measuring the evaluation time (in milliseconds) of a Condition.", 31 Buckets: []float64{0.1, 0.25, 0.5, 1, 5, 15, 50, 100, 250, 500}, 32 }), 33 34 evaluationCost: promauto.NewHistogram(prometheus.HistogramOpts{ 35 Namespace: build.ProjectName, 36 Name: "condition_evaluation_cost", 37 Help: "A histogram of the CEL evaluation cost of a Condition in a Relationship Tuple", 38 Buckets: utils.LinearBuckets(0, config.DefaultMaxConditionEvaluationCost, 10), 39 NativeHistogramBucketFactor: 1.1, 40 NativeHistogramMaxBucketNumber: config.DefaultMaxConditionEvaluationCost, 41 NativeHistogramMinResetDuration: time.Hour, 42 }), 43 } 44 45 Metrics = m 46 } 47 48 type ConditionMetrics struct { 49 compilationTime prometheus.Histogram 50 evaluationTime prometheus.Histogram 51 evaluationCost prometheus.Histogram 52 } 53 54 // ObserveCompilationDuration records the duration (in milliseconds) that Condition compilation took. 55 func (m *ConditionMetrics) ObserveCompilationDuration(elapsed time.Duration) { 56 m.compilationTime.Observe(float64(elapsed.Milliseconds())) 57 } 58 59 // ObserveEvaluationDuration records the duration (in milliseconds) that Condition evaluation took. 60 func (m *ConditionMetrics) ObserveEvaluationDuration(elapsed time.Duration) { 61 m.evaluationTime.Observe(float64(elapsed.Milliseconds())) 62 } 63 64 // ObserveEvaluationCost records the CEL evaluation cost the Condition required to resolve the expression. 65 func (m *ConditionMetrics) ObserveEvaluationCost(cost uint64) { 66 m.evaluationCost.Observe(float64(cost)) 67 }