74 lines
1.3 KiB
Go
74 lines
1.3 KiB
Go
// Copyright 2025 eat-pray-ai & OpenWaygate
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package pkg
|
|
|
|
import (
|
|
"log/slog"
|
|
"os"
|
|
"runtime"
|
|
)
|
|
|
|
var (
|
|
RootDir *string
|
|
Root *os.Root
|
|
logger *slog.Logger
|
|
)
|
|
|
|
func init() {
|
|
if logger == nil {
|
|
initLogger()
|
|
}
|
|
|
|
if RootDir == nil {
|
|
initRootDir()
|
|
}
|
|
}
|
|
|
|
func initLogger() {
|
|
logLevel := slog.LevelInfo
|
|
if lvl, ok := os.LookupEnv("YUTU_LOG_LEVEL"); ok {
|
|
switch lvl {
|
|
case "DEBUG", "debug":
|
|
logLevel = slog.LevelDebug
|
|
case "INFO", "info":
|
|
logLevel = slog.LevelInfo
|
|
case "WARN", "warn":
|
|
logLevel = slog.LevelWarn
|
|
case "ERROR", "error":
|
|
logLevel = slog.LevelError
|
|
}
|
|
}
|
|
logger = slog.New(
|
|
slog.NewTextHandler(
|
|
os.Stderr, &slog.HandlerOptions{
|
|
Level: logLevel,
|
|
},
|
|
),
|
|
)
|
|
|
|
slog.SetDefault(logger)
|
|
}
|
|
|
|
func initRootDir() {
|
|
var err error
|
|
rootDir, ok := os.LookupEnv("YUTU_ROOT")
|
|
if !ok {
|
|
rootDir, err = os.Getwd()
|
|
if err != nil {
|
|
rootDir = "/"
|
|
if runtime.GOOS == "windows" {
|
|
rootDir = os.Getenv("SystemDrive") + `\`
|
|
}
|
|
slog.Debug(getWdFailed, "error", err, "fallback", rootDir)
|
|
}
|
|
}
|
|
RootDir = &rootDir
|
|
Root, err = os.OpenRoot(*RootDir)
|
|
if err != nil {
|
|
slog.Error(openRootFailed, "dir", *RootDir, "error", err)
|
|
panic(err)
|
|
}
|
|
slog.Debug("Root directory set", "dir", *RootDir)
|
|
}
|