metrics/metrics.v

37 lines
801 B
V

module metrics
[params]
pub struct Metric {
name string [required]
labels [][2]string
}
[inline]
fn join_two_array(arr [2]string) string {
return arr[0] + '=' + arr[1]
}
pub fn (m &Metric) str() string {
if m.labels.len == 0 {
return m.name
}
return '$m.name{${m.labels.map(join_two_array(it)).join(',')}}'
}
pub interface MetricsCollector {
counter_increment(metric Metric)
counter_get(metric Metric) ?u64
counters() []Metric
histogram_record(value f64, metric Metric)
histogram_get(metric Metric) ?[]f64
gauge_add(value f64, metric Metric)
gauge_sub(value f64, metric Metric)
gauge_set(value f64, metric Metric)
gauge_get(metric Metric) ?f64
mut:
counter_register(value u64, metric Metric)
histogram_register(metric Metric)
gauge_register(value f64, metric Metric)
}