1
uploader_tools/internal/context/context.go

119 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 filess mass downloader
// Created for Uploaders group
// Copyright (c) 2012-2019 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...)
}