mirror of
https://github.com/hrfee/jfa-go.git
synced 2024-11-09 20:00:12 +00:00
Harvey Tindall
456c99d7db
another weird side effect of the line cache/logging stuff. The true stderr is now stored in the "stderr" global variable and is used to print the help screen.
160 lines
3.8 KiB
Go
160 lines
3.8 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"bytes"
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
func (app *appContext) loadArgs(firstCall bool) {
|
|
if firstCall {
|
|
flag.Usage = helpFunc
|
|
help := flag.Bool("help", false, "prints this message.")
|
|
flag.BoolVar(help, "h", false, "SHORTHAND")
|
|
|
|
DATA = flag.String("data", app.dataPath, "alternate path to data directory.")
|
|
flag.StringVar(DATA, "d", app.dataPath, "SHORTHAND")
|
|
CONFIG = flag.String("config", app.configPath, "alternate path to config file.")
|
|
flag.StringVar(CONFIG, "c", app.configPath, "SHORTHAND")
|
|
HOST = flag.String("host", "", "alternate address to host web ui on.")
|
|
PORT = flag.Int("port", 0, "alternate port to host web ui on.")
|
|
flag.IntVar(PORT, "p", 0, "SHORTHAND")
|
|
DEBUG = flag.Bool("debug", false, "Enables debug logging.")
|
|
PPROF = flag.Bool("pprof", false, "Exposes pprof profiler on /debug/pprof.")
|
|
SWAGGER = flag.Bool("swagger", false, "Enable swagger at /swagger/index.html")
|
|
|
|
flag.Parse()
|
|
if *help {
|
|
flag.Usage()
|
|
os.Exit(0)
|
|
}
|
|
if *SWAGGER {
|
|
os.Setenv("SWAGGER", "1")
|
|
}
|
|
if *DEBUG {
|
|
os.Setenv("DEBUG", "1")
|
|
}
|
|
if *PPROF {
|
|
os.Setenv("PPROF", "1")
|
|
}
|
|
}
|
|
|
|
if os.Getenv("SWAGGER") == "1" {
|
|
*SWAGGER = true
|
|
}
|
|
if os.Getenv("DEBUG") == "1" {
|
|
*DEBUG = true
|
|
}
|
|
if os.Getenv("PPROF") == "1" {
|
|
*PPROF = true
|
|
}
|
|
// attempt to apply command line flags correctly
|
|
if app.configPath == *CONFIG && app.dataPath != *DATA {
|
|
app.dataPath = *DATA
|
|
app.configPath = filepath.Join(app.dataPath, "config.ini")
|
|
} else if app.configPath != *CONFIG && app.dataPath == *DATA {
|
|
app.configPath = *CONFIG
|
|
} else {
|
|
app.configPath = *CONFIG
|
|
app.dataPath = *DATA
|
|
}
|
|
|
|
// Previously used for self-restarts but leaving them here as they might be useful.
|
|
if v := os.Getenv("JFA_CONFIGPATH"); v != "" {
|
|
app.configPath = v
|
|
}
|
|
if v := os.Getenv("JFA_DATAPATH"); v != "" {
|
|
app.dataPath = v
|
|
}
|
|
|
|
os.Setenv("JFA_CONFIGPATH", app.configPath)
|
|
os.Setenv("JFA_DATAPATH", app.dataPath)
|
|
}
|
|
|
|
/*
|
|
Adds start/stop/systemd to help message, and
|
|
|
|
also gets rid of usage for shorthand flags, and merge them with the full-length one.
|
|
implementation is 🤢, will clean this up eventually.
|
|
|
|
-h SHORTHAND
|
|
-help
|
|
prints this message.
|
|
|
|
becomes:
|
|
|
|
-help, -h
|
|
prints this message.
|
|
*/
|
|
func helpFunc() {
|
|
fmt.Fprint(stderr, `Usage of jfa-go:
|
|
start
|
|
start jfa-go as a daemon and run in the background.
|
|
stop
|
|
stop a daemonized instance of jfa-go.
|
|
systemd
|
|
generate a systemd .service file.
|
|
`)
|
|
shortHands := []string{"-help", "-data", "-config", "-port"}
|
|
var b bytes.Buffer
|
|
// Write defaults into buffer then remove any shorthands
|
|
flag.CommandLine.SetOutput(&b)
|
|
flag.PrintDefaults()
|
|
flag.CommandLine.SetOutput(stderr)
|
|
scanner := bufio.NewScanner(&b)
|
|
out := ""
|
|
line := scanner.Text()
|
|
eof := !scanner.Scan()
|
|
lastLine := false
|
|
for !eof || lastLine {
|
|
nextline := scanner.Text()
|
|
start := 0
|
|
if len(nextline) != 0 {
|
|
for nextline[start] == ' ' && start < len(nextline) {
|
|
start++
|
|
}
|
|
}
|
|
if strings.Contains(line, "SHORTHAND") || (len(nextline) != 0 && strings.Contains(nextline, "SHORTHAND") && nextline[start] != '-') {
|
|
line = nextline
|
|
if lastLine {
|
|
break
|
|
}
|
|
eof := !scanner.Scan()
|
|
if eof {
|
|
lastLine = true
|
|
}
|
|
continue
|
|
}
|
|
// if !strings.Contains(line, "SHORTHAND") && !(strings.Contains(nextline, "SHORTHAND") && !strings.Contains(nextline, "-")) {
|
|
match := false
|
|
for i, c := range line {
|
|
if c != '-' {
|
|
continue
|
|
}
|
|
for _, s := range shortHands {
|
|
if i+len(s) <= len(line) && line[i:i+len(s)] == s {
|
|
out += line[:i+len(s)] + ", " + s[:2] + line[i+len(s):] + "\n"
|
|
match = true
|
|
break
|
|
}
|
|
}
|
|
}
|
|
if !match {
|
|
out += line + "\n"
|
|
}
|
|
line = nextline
|
|
if lastLine {
|
|
break
|
|
}
|
|
eof := !scanner.Scan()
|
|
if eof {
|
|
lastLine = true
|
|
}
|
|
}
|
|
fmt.Fprint(stderr, out)
|
|
}
|