0
Files
aleesa-misc-go/main.go

83 lines
2.1 KiB
Go

package main
import (
"fmt"
"os"
"os/signal"
"syscall"
"time"
"github.com/go-redis/redis/v8"
log "github.com/sirupsen/logrus"
)
// Производит некоторую инициализацию перед запуском 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)
}
// Основная функция программы, не добавить и не убавить
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()
for msg := range ch {
if !shutdown {
msgParser(ctx, msg.Payload)
}
}
}
/* vim: set ft=go noet ai ts=4 sw=4 sts=4: */