style(shared-sqs): fix formatting in goaws.go (blank lines)

This commit is contained in:
“Naeel”
2026-04-09 19:46:20 +03:00
parent 2c5871ab87
commit 990a89e7aa
+105 -105
View File
@@ -4,127 +4,127 @@
package main package main
import ( import (
"context" "context"
"flag" "flag"
"net/http" "net/http"
"os" "os"
"os/signal" "os/signal"
"syscall" "syscall"
"time" "time"
"shared-sqs/app/conf" "shared-sqs/app/conf"
"shared-sqs/app/gosqs" "shared-sqs/app/gosqs"
"shared-sqs/app/models" "shared-sqs/app/models"
"shared-sqs/app/router" "shared-sqs/app/router"
"shared-sqs/app/tenant" "shared-sqs/app/tenant"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
func main() { func main() {
var configFile string var configFile string
var adminToken string var adminToken string
var port string var port string
var debug bool var debug bool
var loglevel string var loglevel string
flag.StringVar(&configFile, "config", "", "config file location") flag.StringVar(&configFile, "config", "", "config file location")
flag.StringVar(&adminToken, "admin-token", "", "admin API bearer token") flag.StringVar(&adminToken, "admin-token", "", "admin API bearer token")
flag.StringVar(&port, "port", "4100", "listen port") flag.StringVar(&port, "port", "4100", "listen port")
flag.BoolVar(&debug, "debug", false, "set debug log level") flag.BoolVar(&debug, "debug", false, "set debug log level")
flag.StringVar(&loglevel, "loglevel", "info", "log level (info, debug, warn, error)") flag.StringVar(&loglevel, "loglevel", "info", "log level (info, debug, warn, error)")
flag.Parse() flag.Parse()
log.SetFormatter(&log.JSONFormatter{}) log.SetFormatter(&log.JSONFormatter{})
log.SetOutput(os.Stdout) log.SetOutput(os.Stdout)
if debug { if debug {
log.SetLevel(log.DebugLevel) log.SetLevel(log.DebugLevel)
} else { } else {
level, err := log.ParseLevel(loglevel) level, err := log.ParseLevel(loglevel)
if err != nil { if err != nil {
log.SetLevel(log.InfoLevel) log.SetLevel(log.InfoLevel)
log.Warnf("Failed to parse loglevel %v, defaulting to info", loglevel) log.Warnf("Failed to parse loglevel %v, defaulting to info", loglevel)
} else { } else {
log.SetLevel(level) log.SetLevel(level)
} }
} }
// Admin token: flag > env SHARED_SQS_ADMIN_TOKEN > fatal (Trap #13) // Admin token: flag > env SHARED_SQS_ADMIN_TOKEN > fatal (Trap #13)
if adminToken == "" { if adminToken == "" {
adminToken = os.Getenv("SHARED_SQS_ADMIN_TOKEN") adminToken = os.Getenv("SHARED_SQS_ADMIN_TOKEN")
} }
if adminToken == "" { if adminToken == "" {
log.Fatal("admin token required: use --admin-token flag or SHARED_SQS_ADMIN_TOKEN env var") log.Fatal("admin token required: use --admin-token flag or SHARED_SQS_ADMIN_TOKEN env var")
} }
// Загрузить конфиг (очереди, env — без SNS) // Загрузить конфиг (очереди, env — без SNS)
env := "Local" env := "Local"
if flag.NArg() > 0 { if flag.NArg() > 0 {
env = flag.Arg(0) env = flag.Arg(0)
} }
conf.LoadYamlConfig(configFile, env) conf.LoadYamlConfig(configFile, env)
if models.CurrentEnvironment.LogToFile { if models.CurrentEnvironment.LogToFile {
filename := models.CurrentEnvironment.LogFile filename := models.CurrentEnvironment.LogFile
file, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) file, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err == nil { if err == nil {
log.SetOutput(file) log.SetOutput(file)
} else { } else {
log.Infof("Failed to log to file: %s, using default stdout", filename) log.Infof("Failed to log to file: %s, using default stdout", filename)
} }
} }
// Инициализация in-memory TenantStore // Инициализация in-memory TenantStore
tenantStore := tenant.NewTenantStore() tenantStore := tenant.NewTenantStore()
// Автосид демо-данных при SHARED_SQS_SEED_DEMO=true // Автосид демо-данных при SHARED_SQS_SEED_DEMO=true
if os.Getenv("SHARED_SQS_SEED_DEMO") == "true" { if os.Getenv("SHARED_SQS_SEED_DEMO") == "true" {
seedDemoData(tenantStore) seedDemoData(tenantStore)
} }
// Роутер с tenant auth и admin API // Роутер с tenant auth и admin API
r := router.New(tenantStore, adminToken) r := router.New(tenantStore, adminToken)
// PeriodicTasks — visibility timeout, DLQ, deduplication // PeriodicTasks — visibility timeout, DLQ, deduplication
quit := make(chan bool) quit := make(chan bool)
go gosqs.PeriodicTasks(1*time.Second, quit) go gosqs.PeriodicTasks(1*time.Second, quit)
// HTTP сервер с таймаутами // HTTP сервер с таймаутами
srv := &http.Server{ srv := &http.Server{
Addr: "0.0.0.0:" + port, Addr: "0.0.0.0:" + port,
Handler: r, Handler: r,
ReadTimeout: 30 * time.Second, ReadTimeout: 30 * time.Second,
WriteTimeout: 35 * time.Second, // чуть больше чем max WaitTimeSeconds (20s) WriteTimeout: 35 * time.Second, // чуть больше чем max WaitTimeSeconds (20s)
IdleTimeout: 60 * time.Second, IdleTimeout: 60 * time.Second,
} }
// Запуск в горутине для graceful shutdown // Запуск в горутине для graceful shutdown
serverErr := make(chan error, 1) serverErr := make(chan error, 1)
go func() { go func() {
log.Infof("shared-sqs listening on 0.0.0.0:%s", port) log.Infof("shared-sqs listening on 0.0.0.0:%s", port)
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
serverErr <- err serverErr <- err
} }
}() }()
// Graceful shutdown по SIGTERM/SIGINT (Trap #13) // Graceful shutdown по SIGTERM/SIGINT (Trap #13)
sigCh := make(chan os.Signal, 1) sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, syscall.SIGTERM, syscall.SIGINT) signal.Notify(sigCh, syscall.SIGTERM, syscall.SIGINT)
select { select {
case sig := <-sigCh: case sig := <-sigCh:
log.Infof("Received signal %s, shutting down", sig) log.Infof("Received signal %s, shutting down", sig)
case err := <-serverErr: case err := <-serverErr:
log.Fatalf("Server error: %v", err) log.Fatalf("Server error: %v", err)
} }
// Остановить PeriodicTasks // Остановить PeriodicTasks
close(quit) close(quit)
// Дать 10 секунд на завершение текущих HTTP запросов // Дать 10 секунд на завершение текущих HTTP запросов
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel() defer cancel()
if err := srv.Shutdown(ctx); err != nil { if err := srv.Shutdown(ctx); err != nil {
log.Errorf("Server shutdown error: %v", err) log.Errorf("Server shutdown error: %v", err)
} }
log.Info("shared-sqs stopped") log.Info("shared-sqs stopped")
} }