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"
"os"
"os/signal"
"os/user"
"runtime"
"strings"
"syscall"
@@ -40,22 +39,7 @@ func main() {
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 = readConf(os.Getenv("HOME") + "/.reniced.yaml")
} else {
cnf, err = readConf("/etc/reniced.yaml")
}
cnf, err = readConf()
if err != nil {
log.Fatalf("unable to parse config: %s", err)
@@ -200,6 +184,7 @@ func sigHandler() {
continue
}
// Закрываем пул воркеров и освобождаем ресурсы.
pool.StopAndWait()
os.Exit(0)

34
util.go
View File

@@ -4,14 +4,44 @@ import (
"fmt"
"log"
"os"
"os/user"
"runtime"
"strings"
"syscall"
"gopkg.in/yaml.v3"
)
// readConf парсит даденный конфиг в глобальную структуру, с которой работает программа.
func readConf(path string) (Config, error) {
// readConf вычиляет, от какого пользователя запущен процесс и в зависимости от результата, скармливает readConfFile тот
// или иной путь, по которому предположительно лежит конфиг.
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
fileInfo, err := os.Stat(path)