Spruce up banner, add build info
This commit is contained in:
parent
d5762ad77c
commit
10d6048f4b
|
@ -5,3 +5,5 @@ logs/
|
||||||
data/
|
data/
|
||||||
*.toml
|
*.toml
|
||||||
*.log
|
*.log
|
||||||
|
*.art
|
||||||
|
tcp.ac
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
all: deps format check build
|
||||||
|
build:
|
||||||
|
go build -x -v -a -ldflags "-s -w -X config.sha1ver=$(gitrev) -X config.buildTime=$(now)"
|
||||||
|
clean:
|
||||||
|
rm -f tcp.ac
|
||||||
|
deps:
|
||||||
|
go mod tidy -v
|
||||||
|
run:
|
||||||
|
go run ./
|
||||||
|
check:
|
||||||
|
go vet ./...
|
||||||
|
format:
|
||||||
|
gofmt -s -l -w *.go config/*.go
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"runtime/debug"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
@ -20,10 +21,28 @@ const (
|
||||||
Title = "tcp.ac"
|
Title = "tcp.ac"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var binInfo map[string]string
|
||||||
// Version roughly represents the applications current version.
|
|
||||||
Version = "0.0.0"
|
func init() {
|
||||||
)
|
binInfo = make(map[string]string)
|
||||||
|
|
||||||
|
info, ok := debug.ReadBuildInfo()
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range info.Settings {
|
||||||
|
binInfo[v.Key] = v.Value
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
home, err = os.UserHomeDir()
|
||||||
|
if err != nil {
|
||||||
|
println(err.Error())
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
initDefaults()
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
BaseURL, HTTPPort, HTTPBind, DBDir, LogDir,
|
BaseURL, HTTPPort, HTTPBind, DBDir, LogDir,
|
||||||
|
@ -35,16 +54,16 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
var usage = fmt.Sprintf(`
|
var usage = fmt.Sprintf(`
|
||||||
%s v%s
|
%s
|
||||||
|
|
||||||
brought to you by:
|
brought to you by:
|
||||||
--> tcp.direct <--
|
--> tcp.direct <--
|
||||||
|
|
||||||
-c <file> Specify config file
|
--config <file> Specify custom config file
|
||||||
--nocolor disable color and banner
|
--nocolor Disable color and banner
|
||||||
--banner show banner + version and exit
|
--genconfig Write default config to stdout and exit
|
||||||
--genconfig write default config to 'config.toml' then exit
|
--version Show version info and exit
|
||||||
`, Title, Version)
|
`, Title)
|
||||||
|
|
||||||
func printUsage() {
|
func printUsage() {
|
||||||
println(usage)
|
println(usage)
|
||||||
|
@ -76,6 +95,9 @@ func argParse() {
|
||||||
forceTrace = true
|
forceTrace = true
|
||||||
case "--nocolor":
|
case "--nocolor":
|
||||||
noColorForce = true
|
noColorForce = true
|
||||||
|
case "--version":
|
||||||
|
PrintBanner()
|
||||||
|
os.Exit(0)
|
||||||
case "-c", "--config":
|
case "-c", "--config":
|
||||||
if len(os.Args) <= i-1 {
|
if len(os.Args) <= i-1 {
|
||||||
panic("syntax error! expected file after -c")
|
panic("syntax error! expected file after -c")
|
||||||
|
@ -128,13 +150,7 @@ func writeConfig() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
var err error
|
|
||||||
home, err = os.UserHomeDir()
|
|
||||||
if err != nil {
|
|
||||||
println(err.Error())
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
initDefaults()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var once = &sync.Once{}
|
var once = &sync.Once{}
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"git.tcp.direct/kayos/common/squish"
|
||||||
|
"github.com/muesli/termenv"
|
||||||
|
)
|
||||||
|
|
||||||
|
const Banner = "H4sIAAAAAAACA+OSjrY0szYxyH00rUE62hjK7AAjoIBBLggrKEBUmWGoIkYJkERWZWwOkgKxSNVJhBMMcrngNqB6B0kYyS2kKHg0rQXNNmxewdDRQZKFFHgAaBtBqzBCHaSiBaG4hQjHwoWJdAjQSwoq6ZklRallKgoKKimJJakqXABftjxAeAIAAA=="
|
||||||
|
|
||||||
|
func PrintBanner() {
|
||||||
|
if noColorForce {
|
||||||
|
println("tcp.ac\n")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
p := termenv.ColorProfile()
|
||||||
|
bnr, _ := squish.UnpackStr(Banner)
|
||||||
|
gr := termenv.String(binInfo["vcs.revision"][:7]).Foreground(termenv.ANSIBrightGreen).String()
|
||||||
|
born := termenv.String(binInfo["vcs.time"]).Foreground(p.Color("#1e9575")).String()
|
||||||
|
out := strings.Replace(bnr, "$gitrev$", gr, 1)
|
||||||
|
out = strings.Replace(out, "$date$", born, 1)
|
||||||
|
cout := termenv.String(out)
|
||||||
|
print(cout.Foreground(p.Color("#948DB8")).String())
|
||||||
|
|
||||||
|
}
|
1
go.mod
1
go.mod
|
@ -3,6 +3,7 @@ module git.tcp.direct/tcp.direct/tcp.ac
|
||||||
go 1.18
|
go 1.18
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
git.tcp.direct/kayos/common v0.5.2
|
||||||
git.tcp.direct/kayos/putxt v0.0.0-20220707194005-5bc828145cc4
|
git.tcp.direct/kayos/putxt v0.0.0-20220707194005-5bc828145cc4
|
||||||
git.tcp.direct/tcp.direct/database v0.0.0-20220610180603-058d36edd7f0
|
git.tcp.direct/tcp.direct/database v0.0.0-20220610180603-058d36edd7f0
|
||||||
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d
|
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d
|
||||||
|
|
1
go.sum
1
go.sum
|
@ -43,6 +43,7 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7
|
||||||
git.tcp.direct/Mirrors/bitcask-mirror v0.0.0-20220228092422-1ec4297c7e34 h1:tvoLGGLsQ0IYKKQPweMF5qRm3qO4gcTpuzi9jAr3Wkk=
|
git.tcp.direct/Mirrors/bitcask-mirror v0.0.0-20220228092422-1ec4297c7e34 h1:tvoLGGLsQ0IYKKQPweMF5qRm3qO4gcTpuzi9jAr3Wkk=
|
||||||
git.tcp.direct/Mirrors/bitcask-mirror v0.0.0-20220228092422-1ec4297c7e34/go.mod h1:NX/Gqm/iy6Tg2CfcmmB/kW/qzKKrGR6o2koOKA5KWnc=
|
git.tcp.direct/Mirrors/bitcask-mirror v0.0.0-20220228092422-1ec4297c7e34/go.mod h1:NX/Gqm/iy6Tg2CfcmmB/kW/qzKKrGR6o2koOKA5KWnc=
|
||||||
git.tcp.direct/kayos/common v0.5.2 h1:3+3POz5akWQDoWOQ+L8WHf+pCd5cbLgH/fZqQkRblIc=
|
git.tcp.direct/kayos/common v0.5.2 h1:3+3POz5akWQDoWOQ+L8WHf+pCd5cbLgH/fZqQkRblIc=
|
||||||
|
git.tcp.direct/kayos/common v0.5.2/go.mod h1:2PenBSSXY/kw0iO7ngPgowlU3OA9vak1obTJlxkO5nk=
|
||||||
git.tcp.direct/kayos/putxt v0.0.0-20220707194005-5bc828145cc4 h1:HhXghmJMzXSE/3clQRECP21OIcVv0za9dyzRlryaXno=
|
git.tcp.direct/kayos/putxt v0.0.0-20220707194005-5bc828145cc4 h1:HhXghmJMzXSE/3clQRECP21OIcVv0za9dyzRlryaXno=
|
||||||
git.tcp.direct/kayos/putxt v0.0.0-20220707194005-5bc828145cc4/go.mod h1:WInY1F5uGGRQ6Bzq36OFrB240FvP9EVCDn0vqv4mEBM=
|
git.tcp.direct/kayos/putxt v0.0.0-20220707194005-5bc828145cc4/go.mod h1:WInY1F5uGGRQ6Bzq36OFrB240FvP9EVCDn0vqv4mEBM=
|
||||||
git.tcp.direct/tcp.direct/database v0.0.0-20220610180603-058d36edd7f0 h1:p0DGzX6vm1xvj3OtmroTJ4eAX51FAcnYwpWmhkx6UA0=
|
git.tcp.direct/tcp.direct/database v0.0.0-20220610180603-058d36edd7f0 h1:p0DGzX6vm1xvj3OtmroTJ4eAX51FAcnYwpWmhkx6UA0=
|
||||||
|
|
19
main.go
19
main.go
|
@ -1,20 +1,15 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
"github.com/muesli/termenv"
|
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
|
|
||||||
"git.tcp.direct/tcp.direct/tcp.ac/config"
|
"git.tcp.direct/tcp.direct/tcp.ac/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Banner string = "CiAgLGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIDg4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKTU04OE1NTSAsYWRQUFliYSwgOGIsZFBQWWJhLCAgICAgICxhZFBQWVliYSwgICxhZFBQWWJhLCAgCiAgODggICBhOCIgICAgICIiIDg4UCcgICAgIjhhICAgICAiIiAgICAgYFk4IGE4IiAgICAgIiIgIAogIDg4ICAgOGIgICAgICAgICA4OCAgICAgICBkOCAgICAgLGFkUFBQUFA4OCA4YiAgICAgICAgICAKICA4OCwgICI4YSwgICAsYWEgODhiLCAgICxhOCIgODg4IDg4LCAgICAsODggIjhhLCAgICxhYSAgCiAgIlk4ODggYCJZYmJkOCInIDg4YFliYmRQIicgIDg4OCBgIjhiYmRQIlk4ICBgIlliYmQ4IicgIAogICAgICAgICAgICAgICAgICA4OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgODggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg=="
|
|
||||||
|
|
||||||
func makeDirectories() {
|
func makeDirectories() {
|
||||||
log.Trace().Msgf("establishing log directory presence at %s...", config.LogDir)
|
log.Trace().Msgf("establishing log directory presence at %s...", config.LogDir)
|
||||||
err := os.MkdirAll(config.LogDir, 0o740)
|
err := os.MkdirAll(config.LogDir, 0o740)
|
||||||
|
@ -35,21 +30,13 @@ func makeDirectories() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func printBanner() {
|
func wait() {
|
||||||
out := termenv.String(b64d(Banner))
|
|
||||||
p := termenv.ColorProfile()
|
|
||||||
out = out.Foreground(p.Color("#948DB8"))
|
|
||||||
fmt.Println(out)
|
|
||||||
}
|
|
||||||
|
|
||||||
func waitFor(router *gin.Engine) {
|
|
||||||
c := make(chan os.Signal, 5)
|
c := make(chan os.Signal, 5)
|
||||||
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
|
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-c:
|
case <-c:
|
||||||
log.Warn().Msg("Interrupt detected, shutting down gracefully...")
|
log.Warn().Msg("Interrupt detected, shutting down gracefully...")
|
||||||
router.
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,7 +44,7 @@ func waitFor(router *gin.Engine) {
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
config.Init()
|
config.Init()
|
||||||
printBanner()
|
config.PrintBanner()
|
||||||
makeDirectories()
|
makeDirectories()
|
||||||
log.Debug().Msg("debug enabled")
|
log.Debug().Msg("debug enabled")
|
||||||
log.Trace().Msg("trace enabled")
|
log.Trace().Msg("trace enabled")
|
||||||
|
@ -72,5 +59,5 @@ func main() {
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
go serveTermbin()
|
go serveTermbin()
|
||||||
waitFor(httpRouter())
|
wait()
|
||||||
}
|
}
|
||||||
|
|
10
util.go
10
util.go
|
@ -1,8 +1,6 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/base64"
|
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
@ -14,11 +12,3 @@ func errThrow(c *gin.Context, respcode int, thrown error, msg string) {
|
||||||
Err(thrown).Msg(msg)
|
Err(thrown).Msg(msg)
|
||||||
c.String(respcode, msg)
|
c.String(respcode, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func b64d(str string) string {
|
|
||||||
data, err := base64.StdEncoding.DecodeString(str)
|
|
||||||
if err != nil {
|
|
||||||
return err.Error()
|
|
||||||
}
|
|
||||||
return string(data)
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue