Spruce up banner, add build info

This commit is contained in:
kayos@tcp.direct 2022-07-10 00:14:45 -07:00
parent d5762ad77c
commit 10d6048f4b
Signed by: kayos
GPG Key ID: 4B841471B4BEE979
8 changed files with 79 additions and 43 deletions

2
.gitignore vendored
View File

@ -5,3 +5,5 @@ logs/
data/
*.toml
*.log
*.art
tcp.ac

13
Makefile Normal file
View File

@ -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

View File

@ -7,6 +7,7 @@ import (
"os"
"path/filepath"
"runtime"
"runtime/debug"
"strings"
"sync"
@ -20,10 +21,28 @@ const (
Title = "tcp.ac"
)
var (
// Version roughly represents the applications current version.
Version = "0.0.0"
)
var binInfo map[string]string
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 (
BaseURL, HTTPPort, HTTPBind, DBDir, LogDir,
@ -35,16 +54,16 @@ var (
)
var usage = fmt.Sprintf(`
%s v%s
%s
brought to you by:
--> tcp.direct <--
-c <file> Specify config file
--nocolor disable color and banner
--banner show banner + version and exit
--genconfig write default config to 'config.toml' then exit
`, Title, Version)
--config <file> Specify custom config file
--nocolor Disable color and banner
--genconfig Write default config to stdout and exit
--version Show version info and exit
`, Title)
func printUsage() {
println(usage)
@ -76,6 +95,9 @@ func argParse() {
forceTrace = true
case "--nocolor":
noColorForce = true
case "--version":
PrintBanner()
os.Exit(0)
case "-c", "--config":
if len(os.Args) <= i-1 {
panic("syntax error! expected file after -c")
@ -128,13 +150,7 @@ func writeConfig() {
}
func init() {
var err error
home, err = os.UserHomeDir()
if err != nil {
println(err.Error())
os.Exit(1)
}
initDefaults()
}
var once = &sync.Once{}

26
config/misc.go Normal file
View File

@ -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
View File

@ -3,6 +3,7 @@ module git.tcp.direct/tcp.direct/tcp.ac
go 1.18
require (
git.tcp.direct/kayos/common v0.5.2
git.tcp.direct/kayos/putxt v0.0.0-20220707194005-5bc828145cc4
git.tcp.direct/tcp.direct/database v0.0.0-20220610180603-058d36edd7f0
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d

1
go.sum
View File

@ -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/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/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/go.mod h1:WInY1F5uGGRQ6Bzq36OFrB240FvP9EVCDn0vqv4mEBM=
git.tcp.direct/tcp.direct/database v0.0.0-20220610180603-058d36edd7f0 h1:p0DGzX6vm1xvj3OtmroTJ4eAX51FAcnYwpWmhkx6UA0=

19
main.go
View File

@ -1,20 +1,15 @@
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
"github.com/gin-gonic/gin"
"github.com/muesli/termenv"
"github.com/rs/zerolog/log"
"git.tcp.direct/tcp.direct/tcp.ac/config"
)
var Banner string = "CiAgLGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIDg4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKTU04OE1NTSAsYWRQUFliYSwgOGIsZFBQWWJhLCAgICAgICxhZFBQWVliYSwgICxhZFBQWWJhLCAgCiAgODggICBhOCIgICAgICIiIDg4UCcgICAgIjhhICAgICAiIiAgICAgYFk4IGE4IiAgICAgIiIgIAogIDg4ICAgOGIgICAgICAgICA4OCAgICAgICBkOCAgICAgLGFkUFBQUFA4OCA4YiAgICAgICAgICAKICA4OCwgICI4YSwgICAsYWEgODhiLCAgICxhOCIgODg4IDg4LCAgICAsODggIjhhLCAgICxhYSAgCiAgIlk4ODggYCJZYmJkOCInIDg4YFliYmRQIicgIDg4OCBgIjhiYmRQIlk4ICBgIlliYmQ4IicgIAogICAgICAgICAgICAgICAgICA4OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgODggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg=="
func makeDirectories() {
log.Trace().Msgf("establishing log directory presence at %s...", config.LogDir)
err := os.MkdirAll(config.LogDir, 0o740)
@ -35,21 +30,13 @@ func makeDirectories() {
}
}
func printBanner() {
out := termenv.String(b64d(Banner))
p := termenv.ColorProfile()
out = out.Foreground(p.Color("#948DB8"))
fmt.Println(out)
}
func waitFor(router *gin.Engine) {
func wait() {
c := make(chan os.Signal, 5)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
for {
select {
case <-c:
log.Warn().Msg("Interrupt detected, shutting down gracefully...")
router.
return
}
}
@ -57,7 +44,7 @@ func waitFor(router *gin.Engine) {
func main() {
config.Init()
printBanner()
config.PrintBanner()
makeDirectories()
log.Debug().Msg("debug enabled")
log.Trace().Msg("trace enabled")
@ -72,5 +59,5 @@ func main() {
}
}()
go serveTermbin()
waitFor(httpRouter())
wait()
}

10
util.go
View File

@ -1,8 +1,6 @@
package main
import (
"encoding/base64"
"github.com/gin-gonic/gin"
"github.com/rs/zerolog/log"
)
@ -14,11 +12,3 @@ func errThrow(c *gin.Context, respcode int, thrown error, msg string) {
Err(thrown).Msg(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)
}