// systemctlUnitFileStatus checks whether or not the given unit file has the // given status: static | enabled | disabled func systemctlUnitFileStatus(parameters []string) (exitCode int, exitMessage string) { // getUnitFilesWithStatuses returns a pair of string slices that hold // the name of unit files with their current statuses. getUnitFilesWithStatuses := func() (units []string, statuses []string) { cmd := exec.Command("systemctl", "--no-pager", "list-unit-files") units = wrkutils.CommandColumnNoHeader(0, cmd) cmd = exec.Command("systemctl", "--no-pager", "list-unit-files") statuses = wrkutils.CommandColumnNoHeader(1, cmd) // last two are empty line and junk statistics we don't care about msg := fmt.Sprint(cmd.Args) + " didn't output enough lines" wrkutils.IndexError(msg, 2, units) wrkutils.IndexError(msg, 2, statuses) return units[:len(units)-2], statuses[:len(statuses)-2] } unit := parameters[0] status := parameters[1] units, statuses := getUnitFilesWithStatuses() var actualStatus string // TODO check if unit could be found at all for i, un := range units { if un == unit { actualStatus = statuses[i] if actualStatus == status { return 0, "" } } } msg := "Unit didn't have status" return wrkutils.GenericError(msg, status, []string{actualStatus}) }
// module checks to see if a kernel module is installed func module(parameters []string) (exitCode int, exitMessage string) { // kernelModules returns a list of all modules that are currently loaded // TODO just read from /proc/modules kernelModules := func() (modules []string) { cmd := exec.Command("/sbin/lsmod") return wrkutils.CommandColumnNoHeader(0, cmd) } name := parameters[0] modules := kernelModules() if tabular.StrIn(name, modules) { return 0, "" } return wrkutils.GenericError("Module is not loaded", name, modules) }
// running checks if a process is running using `ps aux`, and searching for the // process name, excluding this process (in case the process name is in the JSON // file name) func running(parameters []string) (exitCode int, exitMessage string) { // getRunningCommands returns the entries in the "COMMAND" column of `ps aux` getRunningCommands := func() (commands []string) { cmd := exec.Command("ps", "aux") return wrkutils.CommandColumnNoHeader(10, cmd) } proc := parameters[0] // remove this process from consideration commands := getRunningCommands() var filtered []string for _, cmd := range commands { if !strings.Contains(cmd, "distributive") { filtered = append(filtered, cmd) } } if tabular.StrIn(proc, filtered) { return 0, "" } return wrkutils.GenericError("Process not running", proc, filtered) }