diff --git a/collector.v b/collector.v index 174603a..2f2f7c3 100644 --- a/collector.v +++ b/collector.v @@ -14,7 +14,7 @@ pub mut: } [heap] -struct DefaultMetricsCollector { +struct DefaultCollector { mut: // The mutex for counters also applies to counter_indexes. Both data // structuress are only ever updated together. Note that only registering a @@ -25,15 +25,15 @@ mut: histograms shared map[string]HistogramEntry } -pub fn new_default_metrics_collector() &DefaultMetricsCollector { - return &DefaultMetricsCollector{ +pub fn new_default_collector() &DefaultCollector { + return &DefaultCollector{ counters: []u64{} counter_indexes: map[string]CounterEntry{} histograms: map[string]HistogramEntry{} } } -pub fn (mut c DefaultMetricsCollector) counter_register(value u64, metric Metric) { +pub fn (mut c DefaultCollector) counter_register(value u64, metric Metric) { lock c.counters { c.counters << value @@ -44,7 +44,7 @@ pub fn (mut c DefaultMetricsCollector) counter_register(value u64, metric Metric } } -pub fn (mut c DefaultMetricsCollector) counter_increment(metric Metric) { +pub fn (mut c DefaultCollector) counter_increment(metric Metric) { rlock c.counters { entry := c.counter_indexes[metric.str()] @@ -52,7 +52,7 @@ pub fn (mut c DefaultMetricsCollector) counter_increment(metric Metric) { } } -pub fn (mut c DefaultMetricsCollector) counter_decrement(metric Metric) { +pub fn (mut c DefaultCollector) counter_decrement(metric Metric) { rlock c.counters { entry := c.counter_indexes[metric.str()] @@ -60,7 +60,7 @@ pub fn (mut c DefaultMetricsCollector) counter_decrement(metric Metric) { } } -pub fn (mut c DefaultMetricsCollector) counter_get(metric Metric) ?u64 { +pub fn (mut c DefaultCollector) counter_get(metric Metric) ?u64 { return rlock c.counters { entry := c.counter_indexes[metric.str()] or { return none } @@ -68,7 +68,7 @@ pub fn (mut c DefaultMetricsCollector) counter_get(metric Metric) ?u64 { } } -pub fn (mut c DefaultMetricsCollector) histogram_register(metric Metric) { +pub fn (mut c DefaultCollector) histogram_register(metric Metric) { lock c.histograms { c.histograms[metric.str()] = HistogramEntry{ metric: metric @@ -77,7 +77,7 @@ pub fn (mut c DefaultMetricsCollector) histogram_register(metric Metric) { } } -pub fn (mut c DefaultMetricsCollector) histogram_add(value f64, metric Metric) { +pub fn (mut c DefaultCollector) histogram_add(value f64, metric Metric) { entry := rlock c.histograms { c.histograms[metric.str()] } @@ -86,3 +86,15 @@ pub fn (mut c DefaultMetricsCollector) histogram_add(value f64, metric Metric) { entry.data << value } } + +pub fn (mut c DefaultCollector) histogram_get(metric Metric) ?[]f64 { + entry := rlock c.histograms { + c.histograms[metric.str()] or { return none } + } + + return rlock entry.data { + // Return a clone of the data to prevent user from altering + // internal structure + entry.data.clone() + } +} diff --git a/metrics.v b/metrics.v index 64702b3..744f069 100644 --- a/metrics.v +++ b/metrics.v @@ -23,4 +23,8 @@ interface MetricsCollector { counter_register(value u64, metric Metric) counter_increment(metric Metric) counter_decrement(metric Metric) + counter_get(metric Metric) ?u64 + histogram_register(metric Metric) + histogram_add(value f64, metric Metric) + histogram_get(metric Metric) ? }