KevinStephenson
Adding in weaviate code
b110593
raw
history blame
3.89 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package objects
import (
"time"
"github.com/prometheus/client_golang/prometheus"
"github.com/weaviate/weaviate/usecases/monitoring"
)
type Metrics struct {
queriesCount *prometheus.GaugeVec
batchTime *prometheus.HistogramVec
dimensions *prometheus.CounterVec
dimensionsCombined prometheus.Counter
groupClasses bool
}
func NewMetrics(prom *monitoring.PrometheusMetrics) *Metrics {
if prom == nil {
return nil
}
return &Metrics{
queriesCount: prom.QueriesCount,
batchTime: prom.BatchTime,
dimensions: prom.QueryDimensions,
dimensionsCombined: prom.QueryDimensionsCombined,
groupClasses: prom.Group,
}
}
func (m *Metrics) queriesInc(queryType string) {
if m == nil {
return
}
m.queriesCount.With(prometheus.Labels{
"class_name": "n/a",
"query_type": queryType,
}).Inc()
}
func (m *Metrics) queriesDec(queryType string) {
if m == nil {
return
}
m.queriesCount.With(prometheus.Labels{
"class_name": "n/a",
"query_type": queryType,
}).Dec()
}
func (m *Metrics) BatchInc() {
m.queriesInc("batch")
}
func (m *Metrics) BatchDec() {
m.queriesDec("batch")
}
func (m *Metrics) BatchRefInc() {
m.queriesInc("batch_references")
}
func (m *Metrics) BatchRefDec() {
m.queriesDec("batch_references")
}
func (m *Metrics) BatchDeleteInc() {
m.queriesInc("batch_delete")
}
func (m *Metrics) BatchDeleteDec() {
m.queriesDec("batch_delete")
}
func (m *Metrics) AddObjectInc() {
m.queriesInc("add_object")
}
func (m *Metrics) AddObjectDec() {
m.queriesDec("add_object")
}
func (m *Metrics) UpdateObjectInc() {
m.queriesInc("update_object")
}
func (m *Metrics) UpdateObjectDec() {
m.queriesDec("update_object")
}
func (m *Metrics) MergeObjectInc() {
m.queriesInc("merge_object")
}
func (m *Metrics) MergeObjectDec() {
m.queriesDec("merge_object")
}
func (m *Metrics) DeleteObjectInc() {
m.queriesInc("delete_object")
}
func (m *Metrics) DeleteObjectDec() {
m.queriesDec("delete_object")
}
func (m *Metrics) GetObjectInc() {
m.queriesInc("get_object")
}
func (m *Metrics) GetObjectDec() {
m.queriesDec("get_object")
}
func (m *Metrics) HeadObjectInc() {
m.queriesInc("head_object")
}
func (m *Metrics) HeadObjectDec() {
m.queriesDec("head_object")
}
func (m *Metrics) AddReferenceInc() {
m.queriesInc("add_reference")
}
func (m *Metrics) AddReferenceDec() {
m.queriesDec("add_reference")
}
func (m *Metrics) UpdateReferenceInc() {
m.queriesInc("update_reference")
}
func (m *Metrics) UpdateReferenceDec() {
m.queriesDec("update_reference")
}
func (m *Metrics) DeleteReferenceInc() {
m.queriesInc("delete_reference")
}
func (m *Metrics) DeleteReferenceDec() {
m.queriesDec("delete_reference")
}
func (m *Metrics) BatchOp(op string, startNs int64) {
if m == nil {
return
}
took := float64(time.Now().UnixNano()-startNs) / float64(time.Millisecond)
m.batchTime.With(prometheus.Labels{
"operation": op,
"class_name": "n/a",
"shard_name": "n/a",
}).Observe(float64(took))
}
func (m *Metrics) AddUsageDimensions(className, queryType, operation string, dims int) {
if m == nil {
return
}
if m.groupClasses {
className = "n/a"
}
m.dimensions.With(prometheus.Labels{
"class_name": className,
"operation": operation,
"query_type": queryType,
}).Add(float64(dims))
m.dimensionsCombined.Add(float64(dims))
}