mirror of
https://github.com/SigNoz/signoz.git
synced 2026-02-03 08:33:26 +00:00
87 lines
2.9 KiB
Go
87 lines
2.9 KiB
Go
package telemetrymetadata
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/SigNoz/signoz/pkg/instrumentation/instrumentationtest"
|
|
"github.com/SigNoz/signoz/pkg/telemetrylogs"
|
|
"github.com/SigNoz/signoz/pkg/telemetrymeter"
|
|
"github.com/SigNoz/signoz/pkg/telemetrymetrics"
|
|
"github.com/SigNoz/signoz/pkg/telemetrystore"
|
|
"github.com/SigNoz/signoz/pkg/telemetrystore/telemetrystoretest"
|
|
"github.com/SigNoz/signoz/pkg/telemetrytraces"
|
|
"github.com/SigNoz/signoz/pkg/types/telemetrytypes"
|
|
cmock "github.com/srikanthccv/ClickHouse-go-mock"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestGetFirstSeenFromMetricMetadata(t *testing.T) {
|
|
mockTelemetryStore := telemetrystoretest.New(telemetrystore.Config{}, ®exMatcher{})
|
|
mock := mockTelemetryStore.Mock()
|
|
|
|
metadata := NewTelemetryMetaStore(
|
|
instrumentationtest.New().ToProviderSettings(),
|
|
mockTelemetryStore,
|
|
telemetrytraces.DBName,
|
|
telemetrytraces.TagAttributesV2TableName,
|
|
telemetrytraces.SpanAttributesKeysTblName,
|
|
telemetrytraces.SpanIndexV3TableName,
|
|
telemetrymetrics.DBName,
|
|
telemetrymetrics.AttributesMetadataTableName,
|
|
telemetrymeter.DBName,
|
|
telemetrymeter.SamplesAgg1dTableName,
|
|
telemetrylogs.DBName,
|
|
telemetrylogs.LogsV2TableName,
|
|
telemetrylogs.TagAttributesV2TableName,
|
|
telemetrylogs.LogAttributeKeysTblName,
|
|
telemetrylogs.LogResourceKeysTblName,
|
|
DBName,
|
|
AttributesMetadataLocalTableName,
|
|
)
|
|
|
|
lookupKeys := []telemetrytypes.MetricMetadataLookupKey{
|
|
{
|
|
MetricName: "metric1",
|
|
AttributeName: "attr1",
|
|
AttributeValue: "val1",
|
|
},
|
|
{
|
|
MetricName: "metric2",
|
|
AttributeName: "attr2",
|
|
AttributeValue: "val2",
|
|
},
|
|
}
|
|
|
|
// ClickHouse tuple syntax is (x, y, z)
|
|
// the structure should lead to:
|
|
// SELECT ... WHERE (metric_name, attr_name, attr_string_value) IN ((?, ?, ?), (?, ?, ?)) ...
|
|
|
|
expectedQuery := `SELECT metric_name, attr_name, attr_string_value, min\(first_reported_unix_milli\) AS first_seen FROM signoz_metrics.distributed_metadata WHERE \(metric_name, attr_name, attr_string_value\) IN \(\(\?, \?, \?\), \(\?, \?, \?\)\) GROUP BY metric_name, attr_name, attr_string_value ORDER BY first_seen`
|
|
|
|
// Note: regexMatcher uses regexp.MatchString, so we escape parens and ?
|
|
|
|
mock.ExpectQuery(expectedQuery).
|
|
WithArgs("metric1", "attr1", "val1", "metric2", "attr2", "val2").
|
|
WillReturnRows(cmock.NewRows([]cmock.ColumnType{
|
|
{Name: "metric_name", Type: "String"},
|
|
{Name: "attr_name", Type: "String"},
|
|
{Name: "attr_string_value", Type: "String"},
|
|
{Name: "first_seen", Type: "UInt64"},
|
|
}, [][]any{
|
|
{"metric1", "attr1", "val1", uint64(1000)},
|
|
{"metric2", "attr2", "val2", uint64(2000)},
|
|
}))
|
|
|
|
result, err := metadata.GetFirstSeenFromMetricMetadata(context.Background(), lookupKeys)
|
|
require.NoError(t, err)
|
|
|
|
assert.Equal(t, int64(1000), result[lookupKeys[0]])
|
|
assert.Equal(t, int64(2000), result[lookupKeys[1]])
|
|
|
|
if err := mock.ExpectationsWereMet(); err != nil {
|
|
t.Errorf("there were unfulfilled expectations: %s", err)
|
|
}
|
|
}
|