Small underhood changes, linter fixes
This commit is contained in:
@@ -23,7 +23,7 @@ import (
|
||||
)
|
||||
|
||||
// MsgParser горутинка, которая парсит json-чики прилетевшие из REDIS-ки.
|
||||
func MsgParser(cfg *config.MyConfig, ctx context.Context, msg string) {
|
||||
func MsgParser(cfg *config.MyConfig, ctx context.Context, msg string) { //nolint: revive
|
||||
var (
|
||||
sendTo string
|
||||
answer string
|
||||
@@ -419,7 +419,7 @@ func MsgParser(cfg *config.MyConfig, ctx context.Context, msg string) {
|
||||
} else {
|
||||
if answer, err := openweathermap.OwmClient(cfg, city, 0); err != nil {
|
||||
log.Errorf("Unable to handle city %s in openweartermap api: %s", city, err)
|
||||
j.Message = fmt.Sprintf("Я не знаю, какая погода в %s", city)
|
||||
j.Message = "Я не знаю, какая погода в " + city
|
||||
} else {
|
||||
j.Message = answer
|
||||
}
|
||||
@@ -433,14 +433,14 @@ func MsgParser(cfg *config.MyConfig, ctx context.Context, msg string) {
|
||||
if regexp.MustCompile(`5$`).MatchString(cmdStr) {
|
||||
if answer, err := openweathermap.OwmClient(cfg, city, 5); err != nil {
|
||||
log.Errorf("Unable to handle city %s in openweartermap api: %s", city, err)
|
||||
j.Message = fmt.Sprintf("Я не знаю, какая погода в %s", city)
|
||||
j.Message = "Я не знаю, какая погода в " + city
|
||||
} else {
|
||||
j.Message = answer
|
||||
}
|
||||
} else {
|
||||
if answer, err := openweathermap.OwmClient(cfg, city, 0); err != nil {
|
||||
log.Errorf("Unable to handle city %s in openweartermap api: %s", city, err)
|
||||
j.Message = fmt.Sprintf("Я не знаю, какая погода в %s", city)
|
||||
j.Message = "Я не знаю, какая погода в " + city
|
||||
} else {
|
||||
j.Message = answer
|
||||
}
|
||||
@@ -469,6 +469,7 @@ func MsgParser(cfg *config.MyConfig, ctx context.Context, msg string) {
|
||||
|
||||
// Настало время формировать json и засылать его в дальше
|
||||
var message SMsg
|
||||
|
||||
message.From = j.From
|
||||
message.Userid = j.Userid
|
||||
message.Chatid = j.Chatid
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"aleesa-webapp-go/internal/config"
|
||||
"aleesa-webapp-go/internal/log"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"unsafe"
|
||||
@@ -131,7 +132,7 @@ func ReadConfig() error {
|
||||
// sampleConfig.OpenWeatherMap.Country is false by default
|
||||
|
||||
// Теперь надо бы попробовать загрузить список User Agent-ов, с которыми ходить в разные апишки.
|
||||
uaFile := fmt.Sprintf("%s/useragents.txt", sampleConfig.DataDir)
|
||||
uaFile := sampleConfig.DataDir + "/useragents.txt"
|
||||
uaList, err := ReadLines(uaFile)
|
||||
|
||||
if err != nil {
|
||||
@@ -149,7 +150,7 @@ func ReadConfig() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
return fmt.Errorf("config was not loaded! Refusing to start")
|
||||
return errors.New("config was not loaded! Refusing to start")
|
||||
}
|
||||
|
||||
/* vim: set ft=go noet ai ts=4 sw=4 sts=4: */
|
||||
|
||||
58
internal/webapp/SigHandler.go
Normal file
58
internal/webapp/SigHandler.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package webapp
|
||||
|
||||
import (
|
||||
"aleesa-webapp-go/internal/config"
|
||||
"aleesa-webapp-go/internal/log"
|
||||
"os"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
// SigHandler хэндлер сигналов закрывает все бд и сваливает из приложения.
|
||||
func SigHandler(cfg *config.MyConfig) {
|
||||
var err error
|
||||
|
||||
for {
|
||||
var s = <-SigChan
|
||||
switch s {
|
||||
case syscall.SIGINT:
|
||||
log.Info("Got SIGINT, quitting")
|
||||
case syscall.SIGTERM:
|
||||
log.Info("Got SIGTERM, quitting")
|
||||
case syscall.SIGQUIT:
|
||||
log.Info("Got SIGQUIT, quitting")
|
||||
|
||||
// Заходим на новую итерацию, если у нас "неинтересный" сигнал
|
||||
default:
|
||||
continue
|
||||
}
|
||||
|
||||
Shutdown = true
|
||||
|
||||
// Отпишемся от всех каналов и закроем коннект к редиске
|
||||
if err = Subscriber.Unsubscribe(Ctx); err != nil {
|
||||
log.Errorf("Unable to unsubscribe from redis channels cleanly: %s", err)
|
||||
}
|
||||
|
||||
if err = Subscriber.Close(); err != nil {
|
||||
log.Errorf("Unable to close redis connection cleanly: %s", err)
|
||||
}
|
||||
|
||||
if len(cfg.PcacheDB) > 0 {
|
||||
log.Debug("Closing persistent cache db")
|
||||
|
||||
for dbName, db := range cfg.PcacheDB {
|
||||
if err := db.Flush(); err != nil {
|
||||
log.Errorf("Unable to flush %s db to disk: %s", dbName, err)
|
||||
}
|
||||
|
||||
if err := db.Close(); err != nil {
|
||||
log.Errorf("Unable to close %s db to disk: %s", dbName, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
os.Exit(0)
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set ft=go noet ai ts=4 sw=4 sts=4: */
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
// DefaultConfigFileLocations выдаёт варианты путей, по которым может находиться конфиг-файл.
|
||||
func DefaultConfigFileLocations() ([]string, error) {
|
||||
var locations []string
|
||||
|
||||
@@ -15,7 +16,7 @@ func DefaultConfigFileLocations() ([]string, error) {
|
||||
return locations, fmt.Errorf("unable to get my executable path: %w", err)
|
||||
}
|
||||
|
||||
configJSONPath := fmt.Sprintf("%s/data/config.json", filepath.Dir(executablePath))
|
||||
configJSONPath := filepath.Dir(executablePath) + "/data/config.json"
|
||||
|
||||
locations = []string{
|
||||
"~/.aleesa-webapp-go.json",
|
||||
|
||||
@@ -2,17 +2,48 @@ package webapp
|
||||
|
||||
import (
|
||||
"aleesa-webapp-go/internal/config"
|
||||
"context"
|
||||
"os"
|
||||
|
||||
"github.com/go-redis/redis/v8"
|
||||
)
|
||||
|
||||
var (
|
||||
ForwardMax int64 = 5
|
||||
// ForwardMax максимальное количество перенаправлений между сервисами бота, по-умолчанию, 5.
|
||||
ForwardMax int64 = 5
|
||||
|
||||
// ConfigFileSize максимальная длина конфиг-файла, предполагается что 64кб хватит всем.
|
||||
ConfigFileSize int64 = 65535
|
||||
DataDir = "data"
|
||||
Host = "localhost"
|
||||
Loglevel = "info"
|
||||
RedisPort = 6379
|
||||
NetworkTimeout = 10
|
||||
Config *config.MyConfig
|
||||
|
||||
// DataDir каталог с данными, в котором размещаются например, конфиг и кшт веб-клиентов, а также ключи flickr-а.
|
||||
DataDir = "data"
|
||||
|
||||
// Host хост, на котором работает сервер redis.
|
||||
Host = "localhost"
|
||||
|
||||
// Loglevel уровень логгирования, по-умолчанию, info.
|
||||
Loglevel = "info"
|
||||
|
||||
// RedisPort порт, на которм слушает сервер redis, по-умолчанию 6379.
|
||||
RedisPort = 6379
|
||||
|
||||
// NetworkTimeout таймаут сетевого соединения.
|
||||
NetworkTimeout = 10
|
||||
|
||||
// Config структурка, содержащая данные конфига.
|
||||
Config *config.MyConfig
|
||||
|
||||
// ctx контекст редиски.
|
||||
Ctx = context.Background()
|
||||
|
||||
// Subscriber объектик сабскрайбера редиски.
|
||||
Subscriber *redis.PubSub
|
||||
|
||||
// Shutdown ставится в true, если мы получили сигнал на выключение.
|
||||
Shutdown = false
|
||||
|
||||
// SigChan канал, в который приходят уведомления для хэндлера сигналов от траппера сигналов.
|
||||
SigChan = make(chan os.Signal, 1)
|
||||
)
|
||||
|
||||
/* vim: set ft=go noet ai ts=4 sw=4 sts=4: */
|
||||
|
||||
Reference in New Issue
Block a user