unpack_string/hw12_13_14_15_calendar/cmd/calendar/main.go

62 lines
1.3 KiB
Go
Raw Normal View History

2023-10-30 15:21:12 +03:00
package main
import (
"context"
"flag"
"os"
"os/signal"
"syscall"
"time"
"github.com/fixme_my_friend/hw12_13_14_15_calendar/internal/app"
"github.com/fixme_my_friend/hw12_13_14_15_calendar/internal/logger"
internalhttp "github.com/fixme_my_friend/hw12_13_14_15_calendar/internal/server/http"
memorystorage "github.com/fixme_my_friend/hw12_13_14_15_calendar/internal/storage/memory"
)
var configFile string
func init() {
flag.StringVar(&configFile, "config", "/etc/calendar/config.toml", "Path to configuration file")
}
func main() {
flag.Parse()
if flag.Arg(0) == "version" {
printVersion()
return
}
config := NewConfig()
logg := logger.New(config.Logger.Level)
storage := memorystorage.New()
calendar := app.New(logg, storage)
server := internalhttp.NewServer(logg, calendar)
ctx, cancel := signal.NotifyContext(context.Background(),
syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP)
defer cancel()
go func() {
<-ctx.Done()
ctx, cancel := context.WithTimeout(context.Background(), time.Second*3)
defer cancel()
if err := server.Stop(ctx); err != nil {
logg.Error("failed to stop http server: " + err.Error())
}
}()
logg.Info("calendar is running...")
if err := server.Start(ctx); err != nil {
logg.Error("failed to start http server: " + err.Error())
cancel()
os.Exit(1) //nolint:gocritic
}
}