mirror of
https://github.com/kopia/kopia.git
synced 2026-05-11 00:04:46 -04:00
This may be a breaking change for users who rely on particular kopia metrics (unlikely):
- introduced blob-level metrics:
* `kopia_blob_download_full_blob_bytes_total`
* `kopia_blob_download_partial_blob_bytes_total`
* `kopia_blob_upload_bytes_total`
* `kopia_blob_storage_latency_ms` - per-method latency distribution
* `kopia_blob_errors_total` - per-method error counter
- updated cache metrics to indicate particular cache
* `kopia_cache_hit_bytes_total{cache="CACHE_TYPE"}`
* `kopia_cache_hit_total{cache="CACHE_TYPE"}`
* `kopia_cache_malformed_total{cache="CACHE_TYPE"}`
* `kopia_cache_miss_total{cache="CACHE_TYPE"}`
* `kopia_cache_miss_errors_total{cache="CACHE_TYPE"}`
* `kopia_cache_miss_bytes_total{cache="CACHE_TYPE"}`
* `kopia_cache_store_errors_total{cache="CACHE_TYPE"}`
where `CACHE_TYPE` is one of `contents`, `metadata` or `index-blobs`
- reorganized and unified content-level metrics:
* `kopia_content_write_bytes_total`
* `kopia_content_write_duration_nanos_total`
* `kopia_content_compression_attempted_bytes_total`
* `kopia_content_compression_attempted_duration_nanos_total`
* `kopia_content_compression_savings_bytes_total`
* `kopia_content_compressible_bytes_total`
* `kopia_content_non_compressible_bytes_total`
* `kopia_content_after_compression_bytes_total`
* `kopia_content_decompressed_bytes_total`
* `kopia_content_decompressed_duration_nanos_total`
* `kopia_content_encrypted_bytes_total`
* `kopia_content_encrypted_duration_nanos_total`
* `kopia_content_hashed_bytes_total`
* `kopia_content_hashed_duration_nanos_total`
* `kopia_content_deduplicated_bytes_total`
* `kopia_content_read_bytes_total`
* `kopia_content_read_duration_nanos_total`
* `kopia_content_decrypted_bytes_total`
* `kopia_content_decrypted_duration_nanos_total`
* `kopia_content_uploaded_bytes_total`
Also introduced `internal/metrics` framework which constructs Prometheus metrics in a uniform way and will allow us to include some of these metrics in telemetry report in future PRs.
42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package metrics_test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
prommodel "github.com/prometheus/client_model/go"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/kopia/kopia/internal/metrics"
|
|
)
|
|
|
|
func TestThroughput_Nil(t *testing.T) {
|
|
var r *metrics.Registry
|
|
|
|
th := r.Throughput("some_throughput", "some-help", nil)
|
|
th.Observe(1, time.Second)
|
|
}
|
|
|
|
func TestThroughput_NotNil(t *testing.T) {
|
|
r := metrics.NewRegistry()
|
|
|
|
th := r.Throughput("some_throughput2", "some-help", nil)
|
|
|
|
require.Equal(t, 0.0,
|
|
mustFindMetric(t, "kopia_some_throughput2_bytes_total", prommodel.MetricType_COUNTER, nil).
|
|
GetCounter().GetValue())
|
|
require.Equal(t, 0.0,
|
|
mustFindMetric(t, "kopia_some_throughput2_duration_nanos_total", prommodel.MetricType_COUNTER, nil).
|
|
GetCounter().GetValue())
|
|
|
|
th.Observe(500, 500*time.Millisecond)
|
|
th.Observe(1, time.Second)
|
|
|
|
require.Equal(t, 501.0,
|
|
mustFindMetric(t, "kopia_some_throughput2_bytes_total", prommodel.MetricType_COUNTER, nil).
|
|
GetCounter().GetValue())
|
|
require.Equal(t, 1.5e9,
|
|
mustFindMetric(t, "kopia_some_throughput2_duration_nanos_total", prommodel.MetricType_COUNTER, nil).
|
|
GetCounter().GetValue())
|
|
}
|