bring in ext color package, use new fin loading func
This commit is contained in:
parent
a2d9b0ad9f
commit
43b9dd7320
101
color/color.go
101
color/color.go
@ -1,101 +0,0 @@
|
|||||||
package color
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ANSI color codes
|
|
||||||
const (
|
|
||||||
resetCode = "\033[0m"
|
|
||||||
redCode = "\033[31m"
|
|
||||||
greenCode = "\033[32m"
|
|
||||||
yellowCode = "\033[33m"
|
|
||||||
blueCode = "\033[34m"
|
|
||||||
purpleCode = "\033[35m"
|
|
||||||
cyanCode = "\033[36m"
|
|
||||||
whiteCode = "\033[37m"
|
|
||||||
grayCode = "\033[90m"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
useColors bool
|
|
||||||
colorMu sync.RWMutex
|
|
||||||
)
|
|
||||||
|
|
||||||
// Color function; makes a call to makeColorFunc with the associated color code
|
|
||||||
var (
|
|
||||||
Reset = makeColorFunc(resetCode)
|
|
||||||
Red = makeColorFunc(redCode)
|
|
||||||
Green = makeColorFunc(greenCode)
|
|
||||||
Yellow = makeColorFunc(yellowCode)
|
|
||||||
Blue = makeColorFunc(blueCode)
|
|
||||||
Purple = makeColorFunc(purpleCode)
|
|
||||||
Cyan = makeColorFunc(cyanCode)
|
|
||||||
White = makeColorFunc(whiteCode)
|
|
||||||
Gray = makeColorFunc(grayCode)
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
useColors = DetectShellColors()
|
|
||||||
}
|
|
||||||
|
|
||||||
func makeColorFunc(code string) func(string) string {
|
|
||||||
return func(text string) string {
|
|
||||||
colorMu.RLock()
|
|
||||||
enabled := useColors
|
|
||||||
colorMu.RUnlock()
|
|
||||||
|
|
||||||
if enabled {
|
|
||||||
return code + text + resetCode
|
|
||||||
}
|
|
||||||
return text
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// DetectShellColors checks if the current shell supports colors
|
|
||||||
func DetectShellColors() bool {
|
|
||||||
// Check NO_COLOR environment variable (standard)
|
|
||||||
if os.Getenv("NO_COLOR") != "" {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check FORCE_COLOR environment variable
|
|
||||||
if os.Getenv("FORCE_COLOR") != "" {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if stdout is a terminal
|
|
||||||
if !isTerminal(os.Stdout) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check TERM environment variable
|
|
||||||
term := os.Getenv("TERM")
|
|
||||||
if term == "" || term == "dumb" {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Common color-supporting terminals
|
|
||||||
return strings.Contains(term, "color") ||
|
|
||||||
strings.Contains(term, "xterm") ||
|
|
||||||
strings.Contains(term, "screen") ||
|
|
||||||
strings.Contains(term, "tmux") ||
|
|
||||||
term == "linux" ||
|
|
||||||
isWindowsTerminal()
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetColors enables or disables colors globally
|
|
||||||
func SetColors(enabled bool) {
|
|
||||||
colorMu.Lock()
|
|
||||||
useColors = enabled
|
|
||||||
colorMu.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
// ColorsEnabled returns current global color setting
|
|
||||||
func ColorsEnabled() bool {
|
|
||||||
colorMu.RLock()
|
|
||||||
defer colorMu.RUnlock()
|
|
||||||
return useColors
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
//go:build !windows
|
|
||||||
// +build !windows
|
|
||||||
|
|
||||||
package color
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
const ioctlReadTermios = 0x5401
|
|
||||||
|
|
||||||
// isTerminal checks if the file is a terminal
|
|
||||||
func isTerminal(f *os.File) bool {
|
|
||||||
fd := f.Fd()
|
|
||||||
var termios syscall.Termios
|
|
||||||
|
|
||||||
r1, _, errno := syscall.Syscall6(
|
|
||||||
syscall.SYS_IOCTL,
|
|
||||||
fd,
|
|
||||||
ioctlReadTermios,
|
|
||||||
uintptr(unsafe.Pointer(&termios)),
|
|
||||||
0, 0, 0,
|
|
||||||
)
|
|
||||||
|
|
||||||
return r1 == 0 && errno == 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// isWindowsTerminal always returns false on Unix
|
|
||||||
func isWindowsTerminal() bool {
|
|
||||||
return false
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
//go:build windows
|
|
||||||
// +build windows
|
|
||||||
|
|
||||||
package color
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
kernel32 = syscall.NewLazyDLL("kernel32.dll")
|
|
||||||
procGetConsoleMode = kernel32.NewProc("GetConsoleMode")
|
|
||||||
)
|
|
||||||
|
|
||||||
// isTerminal checks if the file is a terminal on Windows
|
|
||||||
func isTerminal(f *os.File) bool {
|
|
||||||
handle := syscall.Handle(f.Fd())
|
|
||||||
var mode uint32
|
|
||||||
|
|
||||||
r1, _, _ := procGetConsoleMode.Call(uintptr(handle), uintptr(unsafe.Pointer(&mode)))
|
|
||||||
return r1 != 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// isWindowsTerminal checks for Windows Terminal
|
|
||||||
func isWindowsTerminal() bool {
|
|
||||||
return os.Getenv("WT_SESSION") != ""
|
|
||||||
}
|
|
3
go.mod
3
go.mod
@ -3,8 +3,9 @@ module Moonshark
|
|||||||
go 1.24.1
|
go 1.24.1
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
git.sharkk.net/Go/Color v1.1.0
|
||||||
git.sharkk.net/Go/LRU v1.0.0
|
git.sharkk.net/Go/LRU v1.0.0
|
||||||
git.sharkk.net/Sharkk/Fin v1.2.0
|
git.sharkk.net/Sharkk/Fin v1.3.0
|
||||||
git.sharkk.net/Sky/LuaJIT-to-Go v0.5.2
|
git.sharkk.net/Sky/LuaJIT-to-Go v0.5.2
|
||||||
github.com/VictoriaMetrics/fastcache v1.12.4
|
github.com/VictoriaMetrics/fastcache v1.12.4
|
||||||
github.com/alexedwards/argon2id v1.0.0
|
github.com/alexedwards/argon2id v1.0.0
|
||||||
|
6
go.sum
6
go.sum
@ -1,7 +1,9 @@
|
|||||||
|
git.sharkk.net/Go/Color v1.1.0 h1:1eyUwlcerJLo9/42GSnQxOY84/Htdwz/QTu3FGgLEXk=
|
||||||
|
git.sharkk.net/Go/Color v1.1.0/go.mod h1:cyZFLbUh+GkpsIABVxb5w9EZM+FPj+q9GkCsoECaeTI=
|
||||||
git.sharkk.net/Go/LRU v1.0.0 h1:/KqdRVhHldi23aVfQZ4ss6vhCWZqA3vFiQyf1MJPpQc=
|
git.sharkk.net/Go/LRU v1.0.0 h1:/KqdRVhHldi23aVfQZ4ss6vhCWZqA3vFiQyf1MJPpQc=
|
||||||
git.sharkk.net/Go/LRU v1.0.0/go.mod h1:8tdTyl85mss9a+KKwo+Wj9gKHOizhfLfpJhz1ltYz50=
|
git.sharkk.net/Go/LRU v1.0.0/go.mod h1:8tdTyl85mss9a+KKwo+Wj9gKHOizhfLfpJhz1ltYz50=
|
||||||
git.sharkk.net/Sharkk/Fin v1.2.0 h1:axhme8vHRYoaB3us7PNfXzXxKOxhpS5BMuNpN8ESe6U=
|
git.sharkk.net/Sharkk/Fin v1.3.0 h1:6/f7+h382jJOeo09cgdzH+PGb5XdvajZZRiES52sBkI=
|
||||||
git.sharkk.net/Sharkk/Fin v1.2.0/go.mod h1:ca0Ej9yCM/vHh1o3YMvBZspme3EtbwoEL2UXN5UPXMo=
|
git.sharkk.net/Sharkk/Fin v1.3.0/go.mod h1:ca0Ej9yCM/vHh1o3YMvBZspme3EtbwoEL2UXN5UPXMo=
|
||||||
git.sharkk.net/Sky/LuaJIT-to-Go v0.5.2 h1:BgsZPkoqJjQ7Rb+bSs7QQ24+wwLzyc2AALbnpB/n9Kw=
|
git.sharkk.net/Sky/LuaJIT-to-Go v0.5.2 h1:BgsZPkoqJjQ7Rb+bSs7QQ24+wwLzyc2AALbnpB/n9Kw=
|
||||||
git.sharkk.net/Sky/LuaJIT-to-Go v0.5.2/go.mod h1:HQz+D7AFxOfNbTIogjxP+shEBtz1KKrLlLucU+w07c8=
|
git.sharkk.net/Sky/LuaJIT-to-Go v0.5.2/go.mod h1:HQz+D7AFxOfNbTIogjxP+shEBtz1KKrLlLucU+w07c8=
|
||||||
github.com/VictoriaMetrics/fastcache v1.12.4 h1:2xvmwZBW+9QtHsXggfzAZRs1FZWCsBs8QDg22bMidf0=
|
github.com/VictoriaMetrics/fastcache v1.12.4 h1:2xvmwZBW+9QtHsXggfzAZRs1FZWCsBs8QDg22bMidf0=
|
||||||
|
@ -6,7 +6,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"Moonshark/color"
|
|
||||||
"Moonshark/config"
|
"Moonshark/config"
|
||||||
"Moonshark/logger"
|
"Moonshark/logger"
|
||||||
"Moonshark/metadata"
|
"Moonshark/metadata"
|
||||||
@ -14,6 +13,8 @@ import (
|
|||||||
"Moonshark/sessions"
|
"Moonshark/sessions"
|
||||||
"Moonshark/utils"
|
"Moonshark/utils"
|
||||||
|
|
||||||
|
"git.sharkk.net/Go/Color"
|
||||||
|
|
||||||
"github.com/valyala/fasthttp"
|
"github.com/valyala/fasthttp"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"Moonshark/color"
|
"git.sharkk.net/Go/Color"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Log levels
|
// Log levels
|
||||||
|
23
main.go
23
main.go
@ -1,7 +1,6 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"Moonshark/color"
|
|
||||||
"Moonshark/config"
|
"Moonshark/config"
|
||||||
"Moonshark/http"
|
"Moonshark/http"
|
||||||
"Moonshark/logger"
|
"Moonshark/logger"
|
||||||
@ -12,9 +11,10 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.sharkk.net/Go/Color"
|
||||||
|
|
||||||
fin "git.sharkk.net/Sharkk/Fin"
|
fin "git.sharkk.net/Sharkk/Fin"
|
||||||
"github.com/valyala/fasthttp"
|
"github.com/valyala/fasthttp"
|
||||||
)
|
)
|
||||||
@ -40,7 +40,7 @@ func main() {
|
|||||||
color.SetColors(color.DetectShellColors())
|
color.SetColors(color.DetectShellColors())
|
||||||
banner(sptMode)
|
banner(sptMode)
|
||||||
|
|
||||||
cfg = config.New(readConfig(*cfgPath))
|
cfg = config.New(fin.LoadFromFile(*cfgPath))
|
||||||
dbg = *dbgFlag || cfg.Server.Debug
|
dbg = *dbgFlag || cfg.Server.Debug
|
||||||
logger.Debug(dbg)
|
logger.Debug(dbg)
|
||||||
if dbg {
|
if dbg {
|
||||||
@ -69,23 +69,6 @@ func requestMux(ctx *fasthttp.RequestCtx) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Attempt to read the given path for config, or return an empty struct for defaults
|
|
||||||
func readConfig(path string) *fin.Data {
|
|
||||||
file, err := os.Open(path)
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("Failed to open config file %s, using defaults", color.Yellow(path))
|
|
||||||
return fin.NewData()
|
|
||||||
}
|
|
||||||
defer file.Close()
|
|
||||||
|
|
||||||
cfg, err := fin.Load(file)
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("Failed to load config file %s, using defaults", color.Yellow(path))
|
|
||||||
}
|
|
||||||
|
|
||||||
return cfg
|
|
||||||
}
|
|
||||||
|
|
||||||
// Print our super-awesome banner with the current version!
|
// Print our super-awesome banner with the current version!
|
||||||
func banner(scriptMode bool) {
|
func banner(scriptMode bool) {
|
||||||
if scriptMode {
|
if scriptMode {
|
||||||
|
@ -13,7 +13,6 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"Moonshark/color"
|
|
||||||
"Moonshark/config"
|
"Moonshark/config"
|
||||||
"Moonshark/http"
|
"Moonshark/http"
|
||||||
"Moonshark/logger"
|
"Moonshark/logger"
|
||||||
@ -22,6 +21,8 @@ import (
|
|||||||
"Moonshark/runner/lualibs"
|
"Moonshark/runner/lualibs"
|
||||||
"Moonshark/sessions"
|
"Moonshark/sessions"
|
||||||
"Moonshark/watchers"
|
"Moonshark/watchers"
|
||||||
|
|
||||||
|
"git.sharkk.net/Go/Color"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Moonshark struct {
|
type Moonshark struct {
|
||||||
|
@ -8,9 +8,10 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"Moonshark/color"
|
|
||||||
"Moonshark/logger"
|
"Moonshark/logger"
|
||||||
|
|
||||||
|
"git.sharkk.net/Go/Color"
|
||||||
|
|
||||||
lru "git.sharkk.net/Go/LRU"
|
lru "git.sharkk.net/Go/LRU"
|
||||||
luajit "git.sharkk.net/Sky/LuaJIT-to-Go"
|
luajit "git.sharkk.net/Sky/LuaJIT-to-Go"
|
||||||
"github.com/golang/snappy"
|
"github.com/golang/snappy"
|
||||||
|
@ -11,9 +11,10 @@ import (
|
|||||||
sqlite "zombiezen.com/go/sqlite"
|
sqlite "zombiezen.com/go/sqlite"
|
||||||
"zombiezen.com/go/sqlite/sqlitex"
|
"zombiezen.com/go/sqlite/sqlitex"
|
||||||
|
|
||||||
"Moonshark/color"
|
|
||||||
"Moonshark/logger"
|
"Moonshark/logger"
|
||||||
|
|
||||||
|
"git.sharkk.net/Go/Color"
|
||||||
|
|
||||||
luajit "git.sharkk.net/Sky/LuaJIT-to-Go"
|
luajit "git.sharkk.net/Sky/LuaJIT-to-Go"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -5,10 +5,11 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"Moonshark/color"
|
|
||||||
"Moonshark/logger"
|
"Moonshark/logger"
|
||||||
"Moonshark/router"
|
"Moonshark/router"
|
||||||
"Moonshark/runner"
|
"Moonshark/runner"
|
||||||
|
|
||||||
|
"git.sharkk.net/Go/Color"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Global watcher manager instance with explicit creation
|
// Global watcher manager instance with explicit creation
|
||||||
|
Loading…
x
Reference in New Issue
Block a user