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