github.com/weaviate/weaviate@v1.24.6/usecases/objects/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 objects 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 batchTime *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 batchTime: prom.BatchTime, 37 dimensions: prom.QueryDimensions, 38 dimensionsCombined: prom.QueryDimensionsCombined, 39 groupClasses: prom.Group, 40 } 41 } 42 43 func (m *Metrics) queriesInc(queryType string) { 44 if m == nil { 45 return 46 } 47 48 m.queriesCount.With(prometheus.Labels{ 49 "class_name": "n/a", 50 "query_type": queryType, 51 }).Inc() 52 } 53 54 func (m *Metrics) queriesDec(queryType string) { 55 if m == nil { 56 return 57 } 58 59 m.queriesCount.With(prometheus.Labels{ 60 "class_name": "n/a", 61 "query_type": queryType, 62 }).Dec() 63 } 64 65 func (m *Metrics) BatchInc() { 66 m.queriesInc("batch") 67 } 68 69 func (m *Metrics) BatchDec() { 70 m.queriesDec("batch") 71 } 72 73 func (m *Metrics) BatchRefInc() { 74 m.queriesInc("batch_references") 75 } 76 77 func (m *Metrics) BatchRefDec() { 78 m.queriesDec("batch_references") 79 } 80 81 func (m *Metrics) BatchDeleteInc() { 82 m.queriesInc("batch_delete") 83 } 84 85 func (m *Metrics) BatchDeleteDec() { 86 m.queriesDec("batch_delete") 87 } 88 89 func (m *Metrics) AddObjectInc() { 90 m.queriesInc("add_object") 91 } 92 93 func (m *Metrics) AddObjectDec() { 94 m.queriesDec("add_object") 95 } 96 97 func (m *Metrics) UpdateObjectInc() { 98 m.queriesInc("update_object") 99 } 100 101 func (m *Metrics) UpdateObjectDec() { 102 m.queriesDec("update_object") 103 } 104 105 func (m *Metrics) MergeObjectInc() { 106 m.queriesInc("merge_object") 107 } 108 109 func (m *Metrics) MergeObjectDec() { 110 m.queriesDec("merge_object") 111 } 112 113 func (m *Metrics) DeleteObjectInc() { 114 m.queriesInc("delete_object") 115 } 116 117 func (m *Metrics) DeleteObjectDec() { 118 m.queriesDec("delete_object") 119 } 120 121 func (m *Metrics) GetObjectInc() { 122 m.queriesInc("get_object") 123 } 124 125 func (m *Metrics) GetObjectDec() { 126 m.queriesDec("get_object") 127 } 128 129 func (m *Metrics) HeadObjectInc() { 130 m.queriesInc("head_object") 131 } 132 133 func (m *Metrics) HeadObjectDec() { 134 m.queriesDec("head_object") 135 } 136 137 func (m *Metrics) AddReferenceInc() { 138 m.queriesInc("add_reference") 139 } 140 141 func (m *Metrics) AddReferenceDec() { 142 m.queriesDec("add_reference") 143 } 144 145 func (m *Metrics) UpdateReferenceInc() { 146 m.queriesInc("update_reference") 147 } 148 149 func (m *Metrics) UpdateReferenceDec() { 150 m.queriesDec("update_reference") 151 } 152 153 func (m *Metrics) DeleteReferenceInc() { 154 m.queriesInc("delete_reference") 155 } 156 157 func (m *Metrics) DeleteReferenceDec() { 158 m.queriesDec("delete_reference") 159 } 160 161 func (m *Metrics) BatchOp(op string, startNs int64) { 162 if m == nil { 163 return 164 } 165 166 took := float64(time.Now().UnixNano()-startNs) / float64(time.Millisecond) 167 168 m.batchTime.With(prometheus.Labels{ 169 "operation": op, 170 "class_name": "n/a", 171 "shard_name": "n/a", 172 }).Observe(float64(took)) 173 } 174 175 func (m *Metrics) AddUsageDimensions(className, queryType, operation string, dims int) { 176 if m == nil { 177 return 178 } 179 180 if m.groupClasses { 181 className = "n/a" 182 } 183 184 m.dimensions.With(prometheus.Labels{ 185 "class_name": className, 186 "operation": operation, 187 "query_type": queryType, 188 }).Add(float64(dims)) 189 m.dimensionsCombined.Add(float64(dims)) 190 }