in pkg/metrics/gcm.go [45:96]
func StartGCM(ctx context.Context, cfg common.Config) (*gcmProvider, error) {
client, err := monitoring.NewMetricClient(ctx, option.WithUserAgent(common.UserAgent))
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
client.CallOptions = &monitoring.MetricCallOptions{
CreateTimeSeries: []gax.CallOption{
gax.WithRetry(func() gax.Retryer {
return gax.OnCodes([]codes.Code{
codes.DeadlineExceeded,
codes.Unavailable,
}, gax.Backoff{
Initial: time.Second,
Max: 16 * time.Second,
Multiplier: 2,
})
}),
},
}
// Prepare metadata to specify the GCM "monitored resource"
var resource *monitoredrespb.MonitoredResource
if cfg.Mode == common.ModeCluster {
resource = &monitoredrespb.MonitoredResource{
Type: "k8s_cluster",
Labels: map[string]string{
"project_id": cfg.ProjectID,
"location": cfg.Location,
"cluster_name": cfg.Cluster,
},
}
} else {
resource = &monitoredrespb.MonitoredResource{
Type: "k8s_node",
Labels: map[string]string{
"project_id": cfg.ProjectID,
"location": cfg.Location,
"cluster_name": cfg.Cluster,
"node_name": cfg.NodeName,
},
}
}
provider := &gcmProvider{
// Prefer not to store context in a struct type, instead it should be passed as argument
// ctx: ctx,
client: client,
project: cfg.ProjectID,
resource: resource,
}
return provider, err
}