summaryrefslogtreecommitdiff
path: root/cmd/server/main.go
blob: 58998ca132013ec07e870a7864c284d423202ae0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package main

import (
	"context"
	"flag"
	"log"
	"log/slog"
	"os"
	"os/signal"
	"path/filepath"
	"syscall"

	"github.com/kyren223/eko/internal/server"
	"github.com/kyren223/eko/internal/server/api"
	"github.com/kyren223/eko/internal/server/ctxkeys"
	"github.com/kyren223/eko/pkg/assert"
	"gopkg.in/natefinch/lumberjack.v2"
)

const port = 7223

var prod = true

func main() {
	prodFlag := flag.Bool("prod", true, "true for production mode, false for dev mode")
	flag.Parse()
	prod = !(*prodFlag)

	setupLogging()

	log.Println("Debugging prod", "prod", prod)

	api.ConnectToDatabase()
	assert.AddFlush(api.DB())
	defer api.DB().Close()

	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	signalChan := make(chan os.Signal, 1)
	signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
	go func() {
		signal := <-signalChan
		log.Println("signal:", signal.String())
		cancel()
	}()

	server := server.NewServer(ctx, port)
	if err := server.Run(); err != nil {
		log.Println(err)
	}
}

func setupLogging() {
	logDir := os.Getenv("EKO_SERVER_LOG_DIR")
	if logDir == "" {
		logDir = "logs"
	}
	err := os.MkdirAll(logDir, 0750)
	if err != nil {
		log.Fatalln(err)
	}

	rotator := &lumberjack.Logger{
		Filename: filepath.Join(logDir, "server.log"),
		MaxSize:  1,  // megabytes TODO: switch this to a more reasonable size (100?)
		MaxAge:   28, // days
	}

	level := slog.LevelDebug
	if prod {
		level = slog.LevelInfo
	}
	baseHandler := slog.NewJSONHandler(rotator, &slog.HandlerOptions{
		AddSource: true,
		Level:     level,
	})
	handler := ctxkeys.WrapLogHandler(baseHandler)

	logger := slog.New(handler)
	slog.SetDefault(logger)
	slog.SetLogLoggerLevel(level) // TODO: remove me after fully migrating to slog
}