1
uploader_tools/internal/context/context.go

120 lines
3.3 KiB
Go
Raw Normal View History

// NNM-Club torrent files mass downloader
2019-09-14 18:51:32 +04:00
// Created for Uploaders group
// Copyright (c) 2012-2022 Vladimir "fat0troll" Hodakov
2019-09-14 18:51:32 +04:00
package context
import (
"encoding/json"
"fmt"
"log"
"net/http"
2019-09-14 18:51:32 +04:00
"os"
"path/filepath"
"runtime"
2019-09-28 16:28:59 +04:00
"github.com/kirsle/configdir"
"github.com/rs/zerolog"
"gitlab.com/pztrn/flagger"
2019-09-14 18:51:32 +04:00
)
// getMemoryUsage returns memory usage for logger.
func (c *Context) getMemoryUsage(e *zerolog.Event, level zerolog.Level, message string) {
var m runtime.MemStats
2020-02-22 18:33:33 +04:00
2019-09-14 18:51:32 +04:00
runtime.ReadMemStats(&m)
e.Str("memalloc", fmt.Sprintf("%dMB", m.Alloc/1024/1024))
e.Str("memsys", fmt.Sprintf("%dMB", m.Sys/1024/1024))
e.Str("numgc", fmt.Sprintf("%d", m.NumGC))
}
// initFlagger initializes flags parser
func (c *Context) initFlagger() {
c.Flagger = flagger.New("NNM-Club Uploader Tools", flagger.LoggerInterface(log.New(os.Stdout, "", log.Lshortfile)))
2019-09-14 18:51:32 +04:00
c.Flagger.Initialize()
}
func (c *Context) readConfig() {
fh, err := os.Open(c.configFilePath)
if err != nil {
dlog.Fatal().Err(err).Msg("Ошибка чтения конфигурации")
2019-09-14 18:51:32 +04:00
}
defer fh.Close()
decoder := json.NewDecoder(fh)
2019-09-14 18:51:32 +04:00
err = decoder.Decode(&c.Config)
if err != nil {
dlog.Fatal().Err(err).Msg("Ошибка декодирования конфигурации")
2019-09-14 18:51:32 +04:00
}
}
func (c *Context) setLogNoColor() bool {
return runtime.GOOS == "windows"
}
2019-09-14 18:51:32 +04:00
// Init is an initialization function for core context
// Without these parts of the application we can't start at all
func (c *Context) Init() {
c.initFlagger()
c.Logger = zerolog.New(
zerolog.ConsoleWriter{
Out: os.Stdout,
NoColor: c.setLogNoColor(),
},
).With().Timestamp().Logger()
2019-09-14 18:51:32 +04:00
c.Logger = c.Logger.Hook(zerolog.HookFunc(c.getMemoryUsage))
dlog = c.Logger.With().Str("модуль", "context").Logger()
2019-09-14 18:51:32 +04:00
}
func (c *Context) InitConfig() {
configPath := configdir.LocalConfig("uploader_tools")
2019-09-14 18:51:32 +04:00
err := configdir.MakePath(configPath)
if err != nil {
dlog.Fatal().Err(err).Str("директория с конфигурационным файлом", configPath).
Msg("Не получилось создать или обнаружить директорию для конфигурационных файлов")
2019-09-14 18:51:32 +04:00
}
dlog.Debug().Str("директория с конфигурационным файлом", configPath).
Msg("Найдена директория с конфигурационным файлом")
2019-09-14 18:51:32 +04:00
configFile := filepath.Join(configPath, "settings.json")
c.configFilePath = configFile
if _, err = os.Stat(configFile); os.IsNotExist(err) {
// Generating new config on first run
dlog.Debug().Msg("Генерируется новый конфигурационный файл")
2019-09-14 18:51:32 +04:00
c.SaveConfig()
} else {
dlog.Debug().Msg("Используется существующий конфигурационный файл")
2019-09-14 18:51:32 +04:00
c.readConfig()
}
}
func (c *Context) SaveConfig() {
fh, err := os.Create(c.configFilePath)
if err != nil {
dlog.Fatal().Err(err).Msg("Не удалось создать файл конфигурации")
2019-09-14 18:51:32 +04:00
}
2019-09-14 18:51:32 +04:00
defer fh.Close()
encoder := json.NewEncoder(fh)
2019-09-14 18:51:32 +04:00
err = encoder.Encode(&c.Config)
if err != nil {
dlog.Fatal().Err(err).Msg("Не удалось записать файл конфигурации")
2019-09-14 18:51:32 +04:00
}
}
func (c *Context) SetCookies(cookies []*http.Cookie) {
c.Cookies = append(c.Cookies, cookies...)
}