summaryrefslogtreecommitdiff
path: root/main.go
blob: acf82b6de6c8fb6493d4eac15425ac5e3ebe6213 (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 (
	log "github.com/sirupsen/logrus"
	"net/http"
	"os"
	"os/signal"
	"syscall"
)

var (
	serverConfig map[string]interface{}
	systemConfig map[string]interface{}
)

var (
	server     = http.Server{}
	executable string
)

var (
	r bool
	d bool
)

func init() {
	setFormatter()
	var err error
	executable, err = os.Executable()
	if err != nil {
		log.Warnf("Error while obtaining executable path, %s. Restarting will no longer work.", err)
	}
}

func main() {

	// Setup configuration stuff
	configSetup()

	// Initial config update
	setLevel()

	// Open store
	openStore()

	// Set up web
	webSetup()

	// Configure listener
	listenerSetup()

	// Register API and web handlers
	registerAPI()
	registerWebpage()

	// Signal handling
	signalChannel := make(chan os.Signal, 1)
	signal.Notify(signalChannel, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP, os.Interrupt, os.Kill)
	go func() {
		// Cleanup on function return
		defer func() { cleanup(false) }()
		for {
			currentSignal := <-signalChannel
			switch currentSignal {
			case os.Interrupt:
				println()
				log.Info("Gracefully exiting.")
				return
			default:
				log.Info("Gracefully exiting.")
				return
			}
		}
	}()

	// Start server
	runWebServer()

	// Restart if needed
	if r {
		restart()
	}
}