mirror of
https://github.com/gravitational/teleport.git
synced 2026-09-24 16:17:11 +08:00
Set "events" for dynamo_* event metrics (#64749)
* Set "events" for dynamo_* event metrics * Ensure events label for dynamo events metric
This commit is contained in:
@@ -328,7 +328,7 @@ func New(ctx context.Context, cfg Config) (*Log, error) {
|
||||
},
|
||||
}),
|
||||
awsconfig.WithAPIOptions(awsmetrics.MetricsMiddleware()),
|
||||
awsconfig.WithAPIOptions(dynamometrics.MetricsMiddleware(dynamometrics.Backend)),
|
||||
awsconfig.WithAPIOptions(dynamometrics.MetricsMiddleware(dynamometrics.Events)),
|
||||
}
|
||||
|
||||
if cfg.CredentialsProvider != nil {
|
||||
|
||||
@@ -42,6 +42,8 @@ import (
|
||||
"github.com/google/uuid"
|
||||
"github.com/gravitational/trace"
|
||||
"github.com/jonboulle/clockwork"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
dto "github.com/prometheus/client_model/go"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
@@ -892,6 +894,73 @@ func TestEndpoints(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestNew_UsesEventsMetricsLabel(t *testing.T) {
|
||||
// Don't t.Parallel(), this test reads global Prometheus counters.
|
||||
ctx := context.Background()
|
||||
|
||||
before, err := getDynamoRequestsByTypeLabel("events")
|
||||
require.NoError(t, err)
|
||||
|
||||
mux := http.NewServeMux()
|
||||
mux.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusTeapot)
|
||||
}))
|
||||
|
||||
server := httptest.NewServer(mux)
|
||||
t.Cleanup(server.Close)
|
||||
|
||||
b, err := New(ctx, Config{
|
||||
Region: "us-west-1",
|
||||
Tablename: "teleport-test",
|
||||
UIDGenerator: utils.NewFakeUID(),
|
||||
// Intentionally pass endpoint without scheme to exercise normalization.
|
||||
Endpoint: strings.TrimPrefix(server.URL, "http://"),
|
||||
Insecure: true,
|
||||
CredentialsProvider: aws.CredentialsProviderFunc(func(ctx context.Context) (aws.Credentials, error) {
|
||||
return aws.Credentials{}, nil
|
||||
}),
|
||||
})
|
||||
assert.ErrorContains(t, err, fmt.Sprintf("StatusCode: %d", http.StatusTeapot))
|
||||
assert.Nil(t, b, "backend not nil")
|
||||
|
||||
after, err := getDynamoRequestsByTypeLabel("events")
|
||||
require.NoError(t, err)
|
||||
require.Greater(t, after, before, "expected dynamo metrics type=events to increase")
|
||||
}
|
||||
|
||||
func getDynamoRequestsByTypeLabel(typeLabel string) (float64, error) {
|
||||
families, err := prometheus.DefaultGatherer.Gather()
|
||||
if err != nil {
|
||||
return 0, trace.Wrap(err)
|
||||
}
|
||||
|
||||
var count float64
|
||||
for _, family := range families {
|
||||
if family.GetName() != "dynamo_requests_total" {
|
||||
continue
|
||||
}
|
||||
for _, metric := range family.GetMetric() {
|
||||
if getMetricLabelValue(metric, "type") != typeLabel {
|
||||
continue
|
||||
}
|
||||
if counter := metric.GetCounter(); counter != nil {
|
||||
count += counter.GetValue()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func getMetricLabelValue(metric *dto.Metric, name string) string {
|
||||
for _, label := range metric.GetLabel() {
|
||||
if label.GetName() == name {
|
||||
return label.GetValue()
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func TestStartKeyBackCompat(t *testing.T) {
|
||||
const (
|
||||
oldStartKey = `{"date":"2023-04-27","iterator":{"CreatedAt":{"B":null,"BOOL":null,"BS":null,"L":null,"M":null,"N":"1682583778","NS":null,"NULL":null,"S":null,"SS":null},"CreatedAtDate":{"B":null,"BOOL":null,"BS":null,"L":null,"M":null,"N":null,"NS":null,"NULL":null,"S":"2023-04-27","SS":null},"EventIndex":{"B":null,"BOOL":null,"BS":null,"L":null,"M":null,"N":"0","NS":null,"NULL":null,"S":null,"SS":null},"SessionID":{"B":null,"BOOL":null,"BS":null,"L":null,"M":null,"N":null,"NS":null,"NULL":null,"S":"4bc51fd7-4f0c-47ee-b9a5-da621fbdbabb","SS":null}}}`
|
||||
|
||||
Reference in New Issue
Block a user