62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
|
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
|
||
|
}
|
||
|
}
|