blob: c9537fe1230f5a08c3244d734ad36af910694dd3 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package metrics
import (
"github.com/prometheus/client_golang/prometheus"
"sigs.k8s.io/controller-runtime/pkg/metrics"
)
var (
// ADC sync operation duration histogram
ADCSyncDuration = prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Name: "apisix_ingress_adc_sync_duration_seconds",
Help: "Time spent on ADC sync operations",
Buckets: prometheus.DefBuckets,
},
[]string{"config_name", "resource_type", "status"},
)
// ADC sync operation counter
ADCSyncTotal = prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "apisix_ingress_adc_sync_total",
Help: "Total number of ADC sync operations",
},
[]string{"config_name", "resource_type", "status"},
)
// ADC execution errors counter
ADCExecutionErrors = prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "apisix_ingress_adc_execution_errors_total",
Help: "Total number of ADC execution errors",
},
[]string{"config_name", "error_type"},
)
// Status update channel queue length gauge
StatusUpdateQueueLength = prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "apisix_ingress_status_update_queue_length",
Help: "Current length of the status update queue",
},
)
// File I/O operation duration histogram
FileIODuration = prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Name: "apisix_ingress_file_io_duration_seconds",
Help: "Time spent on file I/O operations",
Buckets: prometheus.DefBuckets,
},
[]string{"operation", "status"},
)
)
// init registers all metrics with the global prometheus registry
func init() {
// Register metrics with controller-runtime's metrics registry
metrics.Registry.MustRegister(
ADCSyncDuration,
ADCSyncTotal,
ADCExecutionErrors,
StatusUpdateQueueLength,
FileIODuration,
)
}
// RecordSyncDuration records the duration of an ADC sync operation
func RecordSyncDuration(configName, resourceType, status string, duration float64) {
ADCSyncDuration.WithLabelValues(configName, resourceType, status).Observe(duration)
ADCSyncTotal.WithLabelValues(configName, resourceType, status).Inc()
}
// RecordExecutionError records an ADC execution error
func RecordExecutionError(configName, errorType string) {
ADCExecutionErrors.WithLabelValues(configName, errorType).Inc()
}
// UpdateStatusQueueLength updates the status update queue length gauge
func UpdateStatusQueueLength(length float64) {
StatusUpdateQueueLength.Set(length)
}
// IncStatusQueueLength increments the status update queue length gauge by 1
func IncStatusQueueLength() {
StatusUpdateQueueLength.Inc()
}
// DecStatusQueueLength decrements the status update queue length gauge by 1
func DecStatusQueueLength() {
StatusUpdateQueueLength.Dec()
}
// RecordFileIODuration records the duration of a file I/O operation
func RecordFileIODuration(operation, status string, duration float64) {
FileIODuration.WithLabelValues(operation, status).Observe(duration)
}