Small underhood changes, linter fixes

This commit is contained in:
eleksir
2025-10-20 21:07:10 +03:00
parent 6c00224f64
commit ff57b0af7d
23 changed files with 218 additions and 172 deletions

View File

@@ -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

View File

@@ -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: */

View 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: */

View File

@@ -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",

View File

@@ -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: */