func serviceStatusFromLaunchd(g *libkb.GlobalContext, ls launchd.Service, infoPath string) (status keybase1.ServiceStatus, err error) { status = keybase1.ServiceStatus{ Label: ls.Label(), } launchdStatus, err := ls.LoadStatus() if err != nil { status.InstallStatus = keybase1.InstallStatus_ERROR status.InstallAction = keybase1.InstallAction_NONE status.Status = keybase1.StatusFromCode(keybase1.StatusCode_SCServiceStatusError, err.Error()) return } if launchdStatus == nil { status.InstallStatus = keybase1.InstallStatus_NOT_INSTALLED status.InstallAction = keybase1.InstallAction_INSTALL status.Status = keybase1.Status{Name: "OK"} return } status.Label = launchdStatus.Label() status.Pid = launchdStatus.Pid() status.LastExitStatus = launchdStatus.LastExitStatus() // Check service info file (if present) and if the service is running (has a PID) var serviceInfo *libkb.ServiceInfo if infoPath != "" { if status.Pid != "" { serviceInfo, err = libkb.WaitForServiceInfoFile(g, infoPath, status.Label, status.Pid, 40, 500*time.Millisecond, "service status") if err != nil { status.InstallStatus = keybase1.InstallStatus_ERROR status.InstallAction = keybase1.InstallAction_REINSTALL status.Status = keybase1.StatusFromCode(keybase1.StatusCode_SCServiceStatusError, err.Error()) return } } if serviceInfo != nil { status.Version = serviceInfo.Version } } if status.Pid == "" { status.InstallStatus = keybase1.InstallStatus_ERROR status.InstallAction = keybase1.InstallAction_REINSTALL err = fmt.Errorf("%s is not running", status.Label) status.Status = keybase1.StatusFromCode(keybase1.StatusCode_SCServiceStatusError, err.Error()) return } status.Status = keybase1.Status{Name: "OK"} return }
func serviceStatusFromLaunchd(ls launchd.Service, infoPath string) (keybase1.ServiceStatus, bool) { status := keybase1.ServiceStatus{ Label: ls.Label(), } st, err := ls.LoadStatus() if err != nil { status.Status = errorStatus("LAUNCHD_ERROR", err.Error()) return status, true } if st == nil { status.InstallStatus = keybase1.InstallStatus_NOT_INSTALLED status.InstallAction = keybase1.InstallAction_INSTALL status.Status = keybase1.Status{Name: "OK"} return status, true } status.Label = st.Label() status.Pid = st.Pid() status.LastExitStatus = st.LastExitStatus() // Check service info file (if present) and if the service is running (has a PID) var serviceInfo *libkb.ServiceInfo if infoPath != "" { if status.Pid != "" { serviceInfo, err = libkb.WaitForServiceInfoFile(infoPath, status.Pid, 20, 200*time.Millisecond, "service status") if err != nil { status.InstallStatus = keybase1.InstallStatus_ERROR status.InstallAction = keybase1.InstallAction_REINSTALL status.Status = errorStatus("LAUNCHD_ERROR", err.Error()) return status, true } } if serviceInfo != nil { status.Version = serviceInfo.Version } } if status.Pid == "" { status.InstallStatus = keybase1.InstallStatus_ERROR status.InstallAction = keybase1.InstallAction_REINSTALL status.Status = errorStatus("LAUNCHD_ERROR", fmt.Sprintf("%s is not running", st.Label())) return status, true } return status, false }