This repository has been archived by the owner on Nov 23, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
main.go
105 lines (87 loc) · 2.66 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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package main
import (
"flag"
"github.com/everstake/teztracker/services/cmc"
"github.com/everstake/teztracker/services/mailer"
"os"
"strings"
"github.com/everstake/teztracker/api"
"github.com/everstake/teztracker/config"
"github.com/everstake/teztracker/gen/restapi"
"github.com/everstake/teztracker/gen/restapi/operations"
"github.com/everstake/teztracker/infrustructure"
"github.com/everstake/teztracker/models"
"github.com/everstake/teztracker/services"
"github.com/go-openapi/loads"
_ "github.com/jinzhu/gorm/dialects/postgres"
"github.com/roylee0704/gron"
log "github.com/sirupsen/logrus"
)
var cronDisableFlag = flag.Bool("crondisable", false, "disable cron for api tests")
func main() {
log.SetFormatter(&log.JSONFormatter{})
log.SetOutput(os.Stdout)
flag.Parse()
cfg := config.Parse()
networks := make(map[models.Network]config.NetworkConfig)
if cfg.Mainnet.SqlConnectionString != "" {
networks[models.NetworkMain] = cfg.Mainnet
}
if cfg.Florencenet.SqlConnectionString != "" {
networks[models.NetworkFlorence] = cfg.Florencenet
}
if len(networks) == 0 {
log.Fatalln("no networks are configured")
}
provider, err := infrustructure.New(networks, cfg)
if err != nil {
log.Fatalln(err.Error())
}
defer provider.Close()
// Enable log mode only on trace level. It's safe to set it to true always, but that'll be a little slower.
if strings.EqualFold(cfg.LogLevel, log.TraceLevel.String()) {
provider.EnableTraceLevel()
}
swaggerSpec, err := loads.Analyzed(restapi.SwaggerJSON, "")
if err != nil {
log.Fatalln(err)
}
apiServer := operations.NewTezTrackerAPI(swaggerSpec)
marketData := cmc.NewCoinGecko()
// pass services instance to API handlers
api.SetHandlers(apiServer, provider, marketData)
server := restapi.NewServer(apiServer)
server.ConfigureAPI()
defer func() {
if err := server.Shutdown(); err != nil {
log.Fatalln(err)
}
}()
if !*cronDisableFlag {
cron := gron.New()
for k := range networks {
db, err := provider.GetDb(k)
if err != nil {
log.Fatalln(err)
}
rpc, err := provider.GetRpcConfig(k)
if err != nil {
log.Fatalln(err)
}
ws, err := provider.GetWS(k)
if err != nil {
log.Fatalln(err)
}
mail := mailer.New(cfg.SmtpHost, cfg.SmtpPort, cfg.SmtpUser, cfg.SmtpPassword)
// Using models.NetworkMain instead of k due to stupid nodes configuration for florencenet.
// todo: if something is not workign for testnets, check this one.
services.AddToCron(cron, cfg, db, ws, mail, marketData, rpc, models.NetworkMain, k == models.NetworkFlorence)
}
cron.Start()
defer cron.Stop()
}
server.Port = cfg.Port
if err := server.Serve(); err != nil {
log.Fatalln(err)
}
}