// systemctlSock is an abstraction of systemctlSockPath and systemctlSockUnit, // it reads from `systemctl list-sockets` and sees if the value is in the // appropriate column. func systemctlSock(value string, column string) (exitCode int, exitMessage string) { outstr := wrkutils.CommandOutput(exec.Command("systemctl", "list-sockets")) lines := tabular.Lines(outstr) msg := "systemctl list-sockers didn't output enough rows" wrkutils.IndexError(msg, len(lines)-4, lines) unlines := tabular.Unlines(lines[:len(lines)-4]) table := tabular.SeparateOnAlignment(unlines) values := tabular.GetColumnByHeader(column, table) if tabular.StrIn(value, values) { return 0, "" } return wrkutils.GenericError("Socket not found", value, values) }
// getTimers returns of all the timers under the UNIT column of // `systemctl list-timers` func getTimers(all bool) []string { cmd := exec.Command("systemctl", "list-timers") if all { cmd = exec.Command("systemctl", "list-timers", "--all") } out, err := cmd.CombinedOutput() outstr := string(out) wrkutils.ExecError(cmd, outstr, err) // last three lines are junk lines := tabular.Lines(outstr) msg := fmt.Sprint(cmd.Args) + " didn't output enough lines" wrkutils.IndexError(msg, 3, lines) table := tabular.SeparateOnAlignment(tabular.Unlines(lines[:len(lines)-3])) column := tabular.GetColumnByHeader("UNIT", table) return column }
// Timers returns a list of the active systemd timers, as found under the // UNIT column of `systemctl list-timers`. It can optionally list all timers. func Timers(all bool) (timers []string, err error) { cmd := exec.Command("systemctl", "list-timers") if all { cmd = exec.Command("systemctl", "list-timers", "--all") } out, err := cmd.CombinedOutput() if err != nil { return timers, errors.New(err.Error() + ": output: " + string(out)) } // last three lines are junk lines := tabular.Lines(string(out)) if len(lines) <= 3 { msg := fmt.Sprint(cmd.Args) + " didn't output enough lines" return timers, errors.New(msg) } table := tabular.SeparateOnAlignment(tabular.Unlines(lines[:len(lines)-3])) column := tabular.GetColumnByHeader("UNIT", table) return column, nil }