func listMetrics()

in cmd/listmd/main.go [53:103]


func listMetrics(projectID string, delete bool) error {
	ctx := context.Background()
	c, err := monitoring.NewMetricClient(ctx)
	if err != nil {
		return err
	}
	defer c.Close()

	deleteDescriptor := func(d *metricpb.MetricDescriptor) error {
		req := &monitoringpb.DeleteMetricDescriptorRequest{
			Name: "projects/" + projectID + "/metricDescriptors/" + d.GetType(),
		}
		return c.DeleteMetricDescriptor(ctx, req)
	}

	req := &monitoringpb.ListMetricDescriptorsRequest{
		Name: "projects/" + projectID,
	}
	iter := c.ListMetricDescriptors(ctx, req)

	for {
		resp, err := iter.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("Could not list metrics: %v", err)
		}
		m := resp.GetType()
		switch {
		case !strings.HasPrefix(m, metricPrefix):
			continue
		case strings.HasPrefix(m, metricPrefix+ignorePaths[0]),
			strings.HasPrefix(m, metricPrefix+ignorePaths[1]),
			strings.HasPrefix(m, metricPrefix+ignorePaths[2]):
			continue
		}
		if delete {
			fmt.Printf("Deleting %q: ", resp.GetType())
			err := deleteDescriptor(resp)
			if err == nil {
				fmt.Println("success")
			} else {
				fmt.Println("error: %w", err)
			}
		} else {
			fmt.Printf("%v (%v)\n", resp.GetType(), resp.GetMetricKind())
		}
	}
	return nil
}