github.com/weaviate/weaviate@v1.24.6/usecases/traverser/metrics.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 package traverser 13 14 import ( 15 "time" 16 17 "github.com/prometheus/client_golang/prometheus" 18 "github.com/weaviate/weaviate/usecases/monitoring" 19 ) 20 21 type Metrics struct { 22 queriesCount *prometheus.GaugeVec 23 queriesDurations *prometheus.HistogramVec 24 dimensions *prometheus.CounterVec 25 dimensionsCombined prometheus.Counter 26 groupClasses bool 27 } 28 29 func NewMetrics(prom *monitoring.PrometheusMetrics) *Metrics { 30 if prom == nil { 31 return nil 32 } 33 34 return &Metrics{ 35 queriesCount: prom.QueriesCount, 36 queriesDurations: prom.QueriesDurations, 37 dimensions: prom.QueryDimensions, 38 dimensionsCombined: prom.QueryDimensionsCombined, 39 groupClasses: prom.Group, 40 } 41 } 42 43 func (m *Metrics) QueriesAggregateInc(className string) { 44 if m == nil { 45 return 46 } 47 48 if m.groupClasses { 49 className = "n/a" 50 } 51 52 m.queriesCount.With(prometheus.Labels{ 53 "class_name": className, 54 "query_type": "aggregate", 55 }).Inc() 56 } 57 58 func (m *Metrics) QueriesAggregateDec(className string) { 59 if m == nil { 60 return 61 } 62 63 if m.groupClasses { 64 className = "n/a" 65 } 66 67 m.queriesCount.With(prometheus.Labels{ 68 "class_name": className, 69 "query_type": "aggregate", 70 }).Dec() 71 } 72 73 func (m *Metrics) QueriesGetInc(className string) { 74 if m == nil { 75 return 76 } 77 78 if m.groupClasses { 79 className = "n/a" 80 } 81 82 m.queriesCount.With(prometheus.Labels{ 83 "class_name": className, 84 "query_type": "get_graphql", 85 }).Inc() 86 } 87 88 func (m *Metrics) QueriesObserveDuration(className string, startMs int64) { 89 if m == nil { 90 return 91 } 92 93 if m.groupClasses { 94 className = "n/a" 95 } 96 97 took := float64(time.Now().UnixMilli() - startMs) 98 99 m.queriesDurations.With(prometheus.Labels{ 100 "class_name": className, 101 "query_type": "get_graphql", 102 }).Observe(float64(took)) 103 } 104 105 func (m *Metrics) QueriesGetDec(className string) { 106 if m == nil { 107 return 108 } 109 110 if m.groupClasses { 111 className = "n/a" 112 } 113 114 m.queriesCount.With(prometheus.Labels{ 115 "class_name": className, 116 "query_type": "get_graphql", 117 }).Dec() 118 } 119 120 func (m *Metrics) AddUsageDimensions(className, queryType, operation string, dims int) { 121 if m == nil { 122 return 123 } 124 125 if m.groupClasses { 126 className = "n/a" 127 } 128 129 m.dimensions.With(prometheus.Labels{ 130 "class_name": className, 131 "operation": operation, 132 "query_type": queryType, 133 }).Add(float64(dims)) 134 m.dimensionsCombined.Add(float64(dims)) 135 }