in observability/custom-metrics-autoscaling/direct-to-sd/sd_dummy_exporter.go [40:100]
func main() {
// Gather pod information
podId := flag.String("pod-id", "", "pod id")
namespace := flag.String("namespace", "", "namespace")
podName := flag.String("pod-name", "", "pod name")
metricName := flag.String("metric-name", "foo", "custom metric name")
metricValue := flag.Int64("metric-value", 0, "custom metric value")
metricLabelsArg := flag.String("metric-labels", "bar=1", "custom metric labels")
// Whether to use old Stackdriver resource model - use monitored resource "gke_container"
// For old resource model, podId flag has to be set.
useOldResourceModel := flag.Bool("use-old-resource-model", true, "use old stackdriver resource model")
// Whether to use new Stackdriver resource model - use monitored resource "k8s_pod"
// For new resource model, podName and namespace flags have to be set.
useNewResourceModel := flag.Bool("use-new-resource-model", false, "use new stackdriver resource model")
flag.Parse()
if *podId == "" && *useOldResourceModel {
log.Fatalf("No pod id specified.")
}
if *podName == "" && *useNewResourceModel {
log.Fatalf("No pod name specified.")
}
if *namespace == "" && *useNewResourceModel {
log.Fatalf("No pod namespace specified.")
}
stackdriverService, err := getStackDriverService()
if err != nil {
log.Fatalf("Error getting Stackdriver service: %v", err)
}
metricLabels := make(map[string]string)
for _, label := range strings.Split(*metricLabelsArg, ",") {
labelParts := strings.Split(label, "=")
metricLabels[labelParts[0]] = labelParts[1]
}
oldModelLabels := getResourceLabelsForOldModel(*podId)
newModelLabels := getResourceLabelsForNewModel(*namespace, *podName)
for {
if *useOldResourceModel {
err := exportMetric(stackdriverService, *metricName, *metricValue, metricLabels, "gke_container", oldModelLabels)
if err != nil {
log.Printf("Failed to write time series data for old resource model: %v\n", err)
} else {
log.Printf("Finished writing time series for new resource model with value: %v\n", metricValue)
}
}
if *useNewResourceModel {
err := exportMetric(stackdriverService, *metricName, *metricValue, metricLabels, "k8s_pod", newModelLabels)
if err != nil {
log.Printf("Failed to write time series data for new resource model: %v\n", err)
} else {
log.Printf("Finished writing time series for new resource model with value: %v\n", metricValue)
}
}
time.Sleep(5000 * time.Millisecond)
}
}