Compare commits

...

5 Commits

Author SHA1 Message Date
Gregory Rudolph 5bf240b616
go fmt 1 year ago
Gregory Rudolph b06284f841
forgot to commit 1 year ago
Gregory Rudolph 7d8ef637b5
Bug, get proper log path 1 year ago
Gregory Rudolph 5106303181
Update logging 1 year ago
Gregory Rudolph d35d6d9ea4
Grammar fix 1 year ago
  1. 74
      main.go
  2. 2
      strings.go

74
main.go

@ -13,22 +13,27 @@ import ( @@ -13,22 +13,27 @@ import (
)
var (
daemon = false
serviceFile = "/adm/services"
services = make(map[string]Service)
controlSocket = "/adm/headless9/ctl/headless9.ctl"
logPath = "/adm/headless9/log/"
serviceFile = "/adm/services"
services = make(map[string]Service)
controlSocket = "/adm/headless9/ctl/headless9.ctl"
logPath = "/adm/headless9/log/"
execWait = false
headless9Start = time.Now()
)
func main() {
flag.Parse()
if flag.NArg() == 0 {
logFile, err := os.Create(fmt.Sprintf("%+v/%+v.log", logPath, "headless9"))
if err != nil {
panic(err)
}
log.SetOutput(logFile)
log.Println(DAEMON_START)
daemon = true
runDaemon()
}
if flag.NArg() != 2 {
fmt.Println(CMD_SYNTAX)
log.Println(CMD_SYNTAX)
return
}
verb := flag.Args()[0]
@ -37,41 +42,33 @@ func main() { @@ -37,41 +42,33 @@ func main() {
f := getCtl()
_, err := fmt.Fprintf(f, "%+v %+v", verb, service)
if err != nil {
fmt.Printf(CTL_UNABLE_WRITE, controlSocket)
log.Fatalf(CTL_UNABLE_WRITE, controlSocket)
}
f.Close()
err = watchFile(controlSocket)
if err != nil {
log.Println(err)
}
fmt.Println(strings.Join(sysTail(10, controlSocket), "\n"))
fmt.Println(sysTail(10, controlSocket))
}
func getCtl() *os.File {
f, err := os.OpenFile(controlSocket, os.O_TRUNC, 0660)
if err != nil {
if daemon {
log.Printf(CTL_NOT_OPEN, controlSocket)
} else {
fmt.Printf(CTL_NOT_OPEN, controlSocket)
}
log.Fatalf(CTL_NOT_OPEN, controlSocket)
}
err = f.Truncate(0)
if err != nil {
if daemon {
log.Printf(CTL_NOT_CLEAR, controlSocket)
} else {
fmt.Printf(CTL_NOT_CLEAR, controlSocket)
}
log.Fatalf(CTL_NOT_CLEAR, controlSocket)
}
_, err = f.Seek(0, 0)
if err != nil {
if daemon {
log.Printf(CTL_NOT_REWOUND, controlSocket)
} else {
fmt.Printf(CTL_NOT_REWOUND, controlSocket)
}
log.Fatalf(CTL_NOT_REWOUND, controlSocket)
}
f, err = os.OpenFile(controlSocket, os.O_RDWR, 0660)
if err != nil {
log.Fatalf(CTL_NOT_OPEN, controlSocket)
}
return f
}
@ -138,22 +135,28 @@ func headlessControls() { @@ -138,22 +135,28 @@ func headlessControls() {
}
func processCommand(cmd string) error {
defer PanicSafe()
parts := strings.Split(cmd, " ")
verb := parts[0]
svc := parts[1]
start := time.Now()
messages := 0
if verb == "restart" || verb == "stop" {
f, err := os.OpenFile(fmt.Sprintf("/proc/%d/ctl", services[svc].ProcessHandle.Pid), os.O_WRONLY, 0660)
if err != nil {
log.Printf("")
log.Printf(DAEMON_CTL_FAILED, err, time.Since(start))
messages++
}
defer f.Close()
_, err = f.WriteString("kill")
if err != nil {
log.Printf(DAEMON_CTL_FAILED, err, time.Since(start))
messages++
} else {
delete(services, svc)
log.Printf(DAEMON_CTL_PROCESSED, svc, time.Since(start))
messages++
}
}
if verb == "restart" || verb == "start" {
@ -168,10 +171,29 @@ func processCommand(cmd string) error { @@ -168,10 +171,29 @@ func processCommand(cmd string) error {
}
log.Printf(DAEMON_SVC_MISSING, svcArgs[0])
messages++
execWait = true
go execCommand(svcArgs[0], svcArgs[1:]...)
}
}
for execWait {
time.Sleep(5 * time.Millisecond)
}
ctlOut := ""
if verb == "status" {
ctlOut += fmt.Sprintf("%+v up %+v PID %+v\n", svc, time.Since(services[svc].StartTime), services[svc].ProcessHandle.Pid)
ctlOut += strings.Join(sysTail(5, fmt.Sprintf("%+v/%+v.log", logPath, svc)), "\n")
} else {
ctlOut += fmt.Sprintf("%+v up %+v\n", "headless9", time.Since(headless9Start))
ctlOut += strings.Join(sysTail(messages, fmt.Sprintf("%+v/%+v.log", logPath, "headless9")), "\n")
}
f := getCtl()
_, err := fmt.Fprintf(f, "%s", ctlOut)
if err != nil {
log.Printf(CTL_UNABLE_WRITE, controlSocket)
}
f.Close()
return nil
}
@ -210,6 +232,7 @@ func execCommand(cmd string, arg ...string) { @@ -210,6 +232,7 @@ func execCommand(cmd string, arg ...string) {
StartupArgs: arg,
StartTime: time.Now(),
}
execWait = false
proc.Wait()
}
@ -264,7 +287,6 @@ func PanicSafe(a ...interface{}) { @@ -264,7 +287,6 @@ func PanicSafe(a ...interface{}) {
func sysTail(count int, path string) []string {
c := exec.Command("tail", fmt.Sprintf("-%d", count+1), path)
output, _ := c.Output()
//log.Printf("SysTail call output: %+v\nEND", string(output))
lines := strings.Split(string(output), "\n")
return lines[:len(lines)-1]

2
strings.go

@ -3,7 +3,7 @@ package main @@ -3,7 +3,7 @@ package main
var (
DAEMON_START = "Starting headless9"
CMD_SYNTAX = "Command structure: \"headless9 $verb $service\""
CTL_UNABLE_WRITE = "Unable to write to Control Socket. Please check the file %+v and that it's permissions are 660"
CTL_UNABLE_WRITE = "Unable to write to Control Socket. Please check the file %+v exists and that its permissions are 660"
CTL_NOT_OPEN = "Unable to open Control Socket. Please check the file %+v and that its permissions are 660"
CTL_NOT_CLEAR = "Unable to clear Control Socket. Please check the file %+v and that its permissions are 660"
CTL_NOT_REWOUND = "Unable to rewind Control Socket. Please check the file %+v and that its permissions are 660"

Loading…
Cancel
Save