package main import ( "context" "log" "net/http" "os" "os/signal" "syscall" "time" "gontrol/src/logger" "gontrol/src/server/database" "gontrol/src/server/webapp" websocketserver "gontrol/src/server/websocket" // _ "net/http/pprof" ) func main() { tmpl, err := webapp.ParseTemplates() if err != nil { log.Fatalf("Parse templates: %v", err) } db := database.InitSQLiteDB("/tmp/gontrol_agents.db") defer db.Close() logService, err := logger.Init("/tmp/gontrol_logs.db") if err != nil { log.Fatalf("Init log db: %v", err) } defer logService.Close() app := &webapp.App{Tmpl: tmpl, DB: db, Logger: logService} srv := &http.Server { Addr: ":3333", Handler: webapp.BuildRouter(app), ReadTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, } // go func () { // log.Println(http.ListenAndServe("localhost:6060", nil)) // }() go func() { log.Println("Web server is running on port :3333") if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("Listen: %v", err) } }() go func() { logLine := "Websocket server is running on port :5555" log.Println(logLine) websocketserver.SetLogger(logService) websocketServer := websocketserver.Server() if err := websocketServer.ListenAndServe(); err != http.ErrServerClosed { log.Fatalf("Websocket server failed: %s", err) } app.Logger.Log(logger.Info, logLine) }() stop := make(chan os.Signal, 1) signal.Notify(stop, os.Interrupt, syscall.SIGTERM) <-stop ctx, cancel := context.WithTimeout(context.Background(), 10 * time.Second) defer cancel() _ = srv.Shutdown(ctx) }