2019-09-14 18:51:32 +04:00
// NNM-Club torrent filess mass downloader
// Created for Uploaders group
// Copyright (c) 2012-2019 Vladimir "fat0troll" Hodakov
package context
import (
"encoding/json"
"fmt"
"log"
2019-09-14 18:55:39 +04:00
"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
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 ( ) {
2019-09-28 19:59:02 +04:00
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 {
2019-09-28 19:59:02 +04:00
dlog . Fatal ( ) . Err ( err ) . Msg ( "Ошибка чтения конфигурации" )
2019-09-14 18:51:32 +04:00
}
defer fh . Close ( )
decoder := json . NewDecoder ( fh )
err = decoder . Decode ( & c . Config )
if err != nil {
2019-09-28 19:59:02 +04:00
dlog . Fatal ( ) . Err ( err ) . Msg ( "Ошибка декодирования конфигурации" )
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 } ) . With ( ) . Timestamp ( ) . Logger ( )
c . Logger = c . Logger . Hook ( zerolog . HookFunc ( c . getMemoryUsage ) )
2019-09-28 19:59:02 +04:00
dlog = c . Logger . With ( ) . Str ( "модуль" , "context" ) . Logger ( )
2019-09-14 18:51:32 +04:00
}
func ( c * Context ) InitConfig ( ) {
configPath := configdir . LocalConfig ( "uploader_tools" )
err := configdir . MakePath ( configPath )
if err != nil {
2019-09-28 19:59:02 +04:00
dlog . Fatal ( ) . Err ( err ) . Str ( "директория с конфигурационным файлом" , configPath ) . Msg ( "Н е получилось создать или обнаружить директорию для конфигурационных файлов" )
2019-09-14 18:51:32 +04:00
}
2019-09-28 19:59:02 +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
2019-09-28 19:59:02 +04:00
dlog . Debug ( ) . Msg ( "Генерируется новый конфигурационный файл" )
2019-09-14 18:51:32 +04:00
c . SaveConfig ( )
} else {
2019-09-28 19:59:02 +04:00
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 {
2019-09-28 19:59:02 +04:00
dlog . Fatal ( ) . Err ( err ) . Msg ( "Н е удалось создать файл конфигурации" )
2019-09-14 18:51:32 +04:00
}
defer fh . Close ( )
encoder := json . NewEncoder ( fh )
err = encoder . Encode ( & c . Config )
if err != nil {
2019-09-28 19:59:02 +04:00
dlog . Fatal ( ) . Err ( err ) . Msg ( "Н е удалось записать файл конфигурации" )
2019-09-14 18:51:32 +04:00
}
}
2019-09-14 18:55:39 +04:00
func ( c * Context ) SetCookies ( cookies [ ] * http . Cookie ) {
c . Cookies = append ( c . Cookies , cookies ... )
}