func()

in clusterloader2/pkg/measurement/common/etcd_metrics.go [63:109]


func (e *etcdMetricsMeasurement) Execute(config *measurement.Config) ([]measurement.Summary, error) {
	provider := config.ClusterFramework.GetClusterConfig().Provider
	// Etcd is only exposed on localhost level. We are using ssh method
	if !provider.Features().SupportSSHToMaster {
		klog.Warningf("not grabbing etcd metrics through master SSH: unsupported for provider, %s", config.ClusterFramework.GetClusterConfig().Provider.Name())
		return nil, nil
	}

	action, err := util.GetString(config.Params, "action")
	if err != nil {
		return nil, err
	}

	hosts := config.ClusterFramework.GetClusterConfig().MasterIPs
	if len(hosts) < 1 {
		klog.Warningf("ETCD measurements will be disabled due to no MasterIps: %v", hosts)
		return nil, nil
	}

	etcdInsecurePort := config.ClusterFramework.GetClusterConfig().EtcdInsecurePort
	switch action {
	case "start":
		klog.V(2).Infof("%s: starting etcd metrics collecting...", e)
		waitTime, err := util.GetDurationOrDefault(config.Params, "waitTime", time.Minute)
		if err != nil {
			return nil, err
		}
		for _, h := range hosts {
			e.startCollecting(h, provider, waitTime, etcdInsecurePort)
		}
		return nil, nil
	case "gather":
		for _, h := range hosts {
			if err = e.stopAndSummarize(h, provider, etcdInsecurePort); err != nil {
				return nil, err
			}
		}
		content, err := util.PrettyPrintJSON(e.metrics)
		if err != nil {
			return nil, err
		}
		summary := measurement.CreateSummary(etcdMetricsMetricName, "json", content)
		return []measurement.Summary{summary}, nil
	default:
		return nil, fmt.Errorf("unknown action %v", action)
	}
}