Small refactor, move config file path detection out of main()

This commit is contained in:
eleksir
2024-04-29 13:20:00 +03:00
parent b5bacc5afe
commit 887643f62d
2 changed files with 34 additions and 19 deletions

19
main.go
View File

@@ -5,7 +5,6 @@ import (
"math" "math"
"os" "os"
"os/signal" "os/signal"
"os/user"
"runtime" "runtime"
"strings" "strings"
"syscall" "syscall"
@@ -40,22 +39,7 @@ func main() {
err error err error
) )
u, err := user.Current() cnf, err = readConf()
if err != nil {
log.Fatalf("Unable to get user info for current user: %s", err)
}
// Для рута и для других пользователей конфиги находятся в разных местах.
if u.Uid != "0" || runtime.GOOS == "darwin" {
if os.Getenv("HOME") == "" {
log.Fatalln("Unable to get HOME environment variable value")
}
cnf, err = readConf(os.Getenv("HOME") + "/.reniced.yaml")
} else {
cnf, err = readConf("/etc/reniced.yaml")
}
if err != nil { if err != nil {
log.Fatalf("unable to parse config: %s", err) log.Fatalf("unable to parse config: %s", err)
@@ -200,6 +184,7 @@ func sigHandler() {
continue continue
} }
// Закрываем пул воркеров и освобождаем ресурсы.
pool.StopAndWait() pool.StopAndWait()
os.Exit(0) os.Exit(0)

34
util.go
View File

@@ -4,14 +4,44 @@ import (
"fmt" "fmt"
"log" "log"
"os" "os"
"os/user"
"runtime"
"strings" "strings"
"syscall" "syscall"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
) )
// readConf парсит даденный конфиг в глобальную структуру, с которой работает программа. // readConf вычиляет, от какого пользователя запущен процесс и в зависимости от результата, скармливает readConfFile тот
func readConf(path string) (Config, error) { // или иной путь, по которому предположительно лежит конфиг.
func readConf() (Config, error) {
var (
cnf Config
err error
)
u, err := user.Current()
if err != nil {
log.Fatalf("Unable to get user info for current user: %s", err)
}
// Для рута и для других пользователей конфиги находятся в разных местах.
if u.Uid != "0" || runtime.GOOS == "darwin" {
if os.Getenv("HOME") == "" {
log.Fatalln("Unable to get HOME environment variable value")
}
cnf, err = readConfFile(os.Getenv("HOME") + "/.reniced.yaml")
} else {
cnf, err = readConfFile("/etc/reniced.yaml")
}
return cnf, err
}
// readConfFile парсит даденный конфиг в глобальную структуру, с которой работает программа.
func readConfFile(path string) (Config, error) {
var cfg Config var cfg Config
fileInfo, err := os.Stat(path) fileInfo, err := os.Stat(path)