func main()

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)
	}
}