85 lines
2.2 KiB
Go
85 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"time"
|
|
|
|
"github.com/go-redis/redis/v8"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// init производит некоторую инициализацию перед запуском main().
|
|
func init() {
|
|
log.SetFormatter(&log.TextFormatter{
|
|
DisableQuote: true,
|
|
DisableLevelTruncation: false,
|
|
DisableColors: true,
|
|
FullTimestamp: true,
|
|
TimestampFormat: "2006-01-02 15:04:05",
|
|
})
|
|
|
|
readConfig()
|
|
|
|
// no panic, no trace.
|
|
switch config.Loglevel {
|
|
case "fatal":
|
|
log.SetLevel(log.FatalLevel)
|
|
case "error":
|
|
log.SetLevel(log.ErrorLevel)
|
|
case "warn":
|
|
log.SetLevel(log.WarnLevel)
|
|
case "info":
|
|
log.SetLevel(log.InfoLevel)
|
|
case "debug":
|
|
log.SetLevel(log.DebugLevel)
|
|
default:
|
|
log.SetLevel(log.InfoLevel)
|
|
}
|
|
|
|
// Иницализируем клиента Редиски.
|
|
redisClient = redis.NewClient(&redis.Options{
|
|
Addr: fmt.Sprintf("%s:%d", config.Server, config.Port),
|
|
}).WithContext(ctx).WithTimeout(time.Duration(config.Timeout) * time.Second)
|
|
|
|
// Обозначим, что хотим после соединения подписаться на события из канала config.Channel.
|
|
subscriber = redisClient.Subscribe(ctx, config.Channel)
|
|
}
|
|
|
|
// main основная функция программы, не добавить и не убавить.
|
|
func main() {
|
|
// Откроем лог и скормим его логгеру.
|
|
if config.Log != "" {
|
|
logfile, err := os.OpenFile(config.Log, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
|
|
|
|
if err != nil {
|
|
log.Fatalf("Unable to open log file %s: %s", config.Log, err)
|
|
}
|
|
|
|
log.SetOutput(logfile)
|
|
}
|
|
|
|
// Самое время поставить траппер сигналов.
|
|
signal.Notify(sigChan,
|
|
syscall.SIGINT,
|
|
syscall.SIGTERM,
|
|
syscall.SIGQUIT)
|
|
|
|
go sigHandler()
|
|
|
|
// Начнём выгребать события из редиски (длина конвеера/буфера канала по-умолчанию - 100 сообщений).
|
|
ch := subscriber.Channel()
|
|
|
|
log.Infoln("Aleesa-misc-go started")
|
|
|
|
for msg := range ch {
|
|
if !shutdown {
|
|
msgParser(ctx, msg.Payload)
|
|
}
|
|
}
|
|
}
|
|
|
|
/* vim: set ft=go noet ai ts=4 sw=4 sts=4: */
|