in internal/pacemaker/pacemakermetrics.go [640:692]
func collectASCSInstance(ctx context.Context, labels map[string]string, exists commandlineexecutor.Exists, exec commandlineexecutor.Execute) {
labels["ascs_instance"] = ""
labels["ers_instance"] = ""
var command string
switch {
case exists("crm"):
command = "crm"
case exists("pcs"):
command = "pcs"
default:
log.CtxLogger(ctx).Debug("Could not determine Pacemaker command-line tool. Skipping ascs_instance metric collection.")
return
}
result := exec(ctx, commandlineexecutor.Params{
Executable: command,
Args: []string{"status"},
})
if result.Error != nil {
log.CtxLogger(ctx).Debugw(fmt.Sprintf("Failed to get %s status. Skipping ascs_instance metric collection.", command), "error", result.Error)
}
lines := strings.Split(result.StdOut, "\n")
inASCSResourceGroup, inERSResourceGroup := false, false
for _, line := range lines {
switch {
case strings.Contains(line, "Resource Group: ascs"):
inASCSResourceGroup = true
inERSResourceGroup = false
case strings.Contains(line, "Resource Group: ers"):
inERSResourceGroup = true
inASCSResourceGroup = false
case strings.Contains(line, "Resource Group:"):
inASCSResourceGroup = false
inERSResourceGroup = false
case inASCSResourceGroup && strings.Contains(line, "ocf::heartbeat:SAPInstance"):
match := sapInstanceRegex.FindStringSubmatch(line)
if len(match) != 2 {
log.CtxLogger(ctx).Debugw(fmt.Sprintf("Unexpected output from %s status: could not parse ASCS instance name.", command), "line", line)
continue
}
labels["ascs_instance"] = match[1]
case inERSResourceGroup && strings.Contains(line, "ocf::heartbeat:SAPInstance"):
match := sapInstanceRegex.FindStringSubmatch(line)
if len(match) != 2 {
log.CtxLogger(ctx).Debugw(fmt.Sprintf("Unexpected output from %s status: could not parse ERS instance name.", command), "line", line)
continue
}
labels["ers_instance"] = match[1]
}
}
}