// reportLiveStatus is used by the status command on a working connection to // distinguish between the server being in a normal 'started' state or the // 'drain' state. func reportLiveStatus(jq *jobqueue.Client) { sstats, err := jq.ServerStats() if err != nil { die("even though I was able to connect to the manager, it wasn't able to tell me about itself: %s", err) } mode := sstats.ServerInfo.Mode fmt.Println(mode) }
// eventualities we check the pid file first, try and terminate its pid, // then confirm we can't connect pid, err := daemon.ReadPidFile(config.ManagerPidFile) var stopped bool if err == nil { stopped = stopdaemon(pid, "pid file "+config.ManagerPidFile, "manager") } else { // probably no pid file, we'll see if the daemon is up by trying to // connect jq := connect(1 * time.Second) if jq == nil { die("wr manager does not seem to be running on port %s", config.ManagerPort) } } var jq *jobqueue.Client if stopped { // we'll do a quick test to confirm the daemon is down jq = connect(1 * time.Second) if jq != nil { warn("according to the pid file %s, wr manager was running with pid %d, and I terminated that pid, but the manager is still up on port %s!", config.ManagerPidFile, pid, config.ManagerPort) } else { info("wr manager running on port %s was gracefully shut down", config.ManagerPort) return } } else { // we failed to SIGTERM the pid in the pid file, let's take some // time to confirm the daemon is really up jq = connect(5 * time.Second) if jq == nil { die("according to the pid file %s, wr manager for port %s was running with pid %d, but that process could not be terminated and the manager could not be connected to; most likely the pid file is wrong and the manager is not running - after confirming, delete the pid file before trying to start the manager again", config.ManagerPidFile, config.ManagerPort, pid)