1
uploader_tools/internal/context/context.go
Vladimir Hodakov 32a2262e8c
Refactor and copyrights
Move domains to internal/services, remove unnecessary versioning for services.
Change copyright year.
2021-12-20 16:53:38 +04:00

120 lines
3.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// NNM-Club torrent files mass downloader
// Created for Uploaders group
// Copyright (c) 2012-2022 Vladimir "fat0troll" Hodakov
package context
import (
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"path/filepath"
"runtime"
"github.com/kirsle/configdir"
"github.com/rs/zerolog"
"gitlab.com/pztrn/flagger"
)
// getMemoryUsage returns memory usage for logger.
func (c *Context) getMemoryUsage(e *zerolog.Event, level zerolog.Level, message string) {
var m runtime.MemStats
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)))
c.Flagger.Initialize()
}
func (c *Context) readConfig() {
fh, err := os.Open(c.configFilePath)
if err != nil {
dlog.Fatal().Err(err).Msg("Ошибка чтения конфигурации")
}
defer fh.Close()
decoder := json.NewDecoder(fh)
err = decoder.Decode(&c.Config)
if err != nil {
dlog.Fatal().Err(err).Msg("Ошибка декодирования конфигурации")
}
}
func (c *Context) setLogNoColor() bool {
return runtime.GOOS == "windows"
}
// 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()
c.Logger = c.Logger.Hook(zerolog.HookFunc(c.getMemoryUsage))
dlog = c.Logger.With().Str("модуль", "context").Logger()
}
func (c *Context) InitConfig() {
configPath := configdir.LocalConfig("uploader_tools")
err := configdir.MakePath(configPath)
if err != nil {
dlog.Fatal().Err(err).Str("директория с конфигурационным файлом", configPath).
Msg("Не получилось создать или обнаружить директорию для конфигурационных файлов")
}
dlog.Debug().Str("директория с конфигурационным файлом", configPath).
Msg("Найдена директория с конфигурационным файлом")
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("Генерируется новый конфигурационный файл")
c.SaveConfig()
} else {
dlog.Debug().Msg("Используется существующий конфигурационный файл")
c.readConfig()
}
}
func (c *Context) SaveConfig() {
fh, err := os.Create(c.configFilePath)
if err != nil {
dlog.Fatal().Err(err).Msg("Не удалось создать файл конфигурации")
}
defer fh.Close()
encoder := json.NewEncoder(fh)
err = encoder.Encode(&c.Config)
if err != nil {
dlog.Fatal().Err(err).Msg("Не удалось записать файл конфигурации")
}
}
func (c *Context) SetCookies(cookies []*http.Cookie) {
c.Cookies = append(c.Cookies, cookies...)
}