/
main.go
75 lines (61 loc) · 1.76 KB
/
main.go
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
package main
import (
"github.com/crob1140/codewiz-server/log"
"github.com/crob1140/codewiz-server/config"
"github.com/crob1140/codewiz-server/config/keys"
"github.com/crob1140/codewiz-server/datastore"
_ "github.com/go-sql-driver/mysql"
_ "github.com/mattn/go-sqlite3"
)
func main() {
initLogger()
dbDriver := config.GetString(keys.DatabaseDriver)
assertConfigExists(keys.DatabaseDriver, dbDriver)
dbDSN := config.GetString(keys.DatabaseDSN)
assertConfigExists(keys.DatabaseDSN, dbDSN)
port := config.GetString(keys.Port)
assertConfigExists(keys.Port, port)
migrationsPath := config.GetString(keys.DatabaseMigrationsPath)
assertConfigExists(keys.DatabaseMigrationsPath, migrationsPath)
log.Debug("Opening database connection", log.Fields{"driver" : dbDriver, "dsn" : dbDSN})
ds, err := datastore.Open(dbDriver, dbDSN)
if err != nil {
log.Fatal("Failed to open database connection", log.Fields{
"error" : err,
})
}
errs, ok := ds.UpSync(migrationsPath)
if !ok {
for _, err := range errs {
log.Fatal("Failed to synchronise datastore tables", log.Fields{
"error" : err,
})
}
}
server := NewServer(ds)
log.Info("Server is now listening for requests", log.Fields{
"port" : port,
})
server.ListenAndServe(":" + port)
}
func initLogger() {
levelString := config.GetString(keys.LogLevel)
level := log.InfoLevel
if levelString != "" {
if parsedLevel, err := log.ParseLevel(levelString); err != nil {
log.Error("Unrecognised log level", log.Fields{
"level" : levelString,
})
} else {
level = parsedLevel
}
}
log.SetLevel(level)
}
func assertConfigExists(key string, value string) {
if value == "" {
log.Fatal("Missing environment variable.", log.Fields{
"variable": config.GetEnvironmentVariableName(key),
});
}
}