/
main.go
73 lines (60 loc) · 1.9 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
package main
import (
"flag"
"fmt"
"net/http"
"github.com/Shopify/sarama"
"github.com/martin-helmich/cloudnativego-backend/src/eventservice/rest"
"github.com/martin-helmich/cloudnativego-backend/src/lib/configuration"
"github.com/martin-helmich/cloudnativego-backend/src/lib/msgqueue"
msgqueue_amqp "github.com/martin-helmich/cloudnativego-backend/src/lib/msgqueue/amqp"
"github.com/martin-helmich/cloudnativego-backend/src/lib/msgqueue/kafka"
"github.com/martin-helmich/cloudnativego-backend/src/lib/persistence/dblayer"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/streadway/amqp"
)
func main() {
var eventEmitter msgqueue.EventEmitter
confPath := flag.String("conf", `.\configuration\config.json`, "flag to set the path to the configuration json file")
flag.Parse()
//extract configuration
config, _ := configuration.ExtractConfiguration(*confPath)
switch config.MessageBrokerType {
case "amqp":
conn, err := amqp.Dial(config.AMQPMessageBroker)
if err != nil {
panic(err)
}
eventEmitter, err = msgqueue_amqp.NewAMQPEventEmitter(conn, "events")
if err != nil {
panic(err)
}
case "kafka":
conf := sarama.NewConfig()
conf.Producer.Return.Successes = true
conn, err := sarama.NewClient(config.KafkaMessageBrokers, conf)
if err != nil {
panic(err)
}
eventEmitter, err = kafka.NewKafkaEventEmitter(conn)
if err != nil {
panic(err)
}
default:
panic("Bad message broker type: " + config.MessageBrokerType)
}
fmt.Println("Connecting to database")
dbhandler, _ := dblayer.NewPersistenceLayer(config.Databasetype, config.DBConnection)
go func() {
fmt.Println("Serving metrics API")
h := http.NewServeMux()
h.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":9100", h)
}()
fmt.Println("Serving API")
//RESTful API start
err := rest.ServeAPI(config.RestfulEndpoint, dbhandler, eventEmitter)
if err != nil {
panic(err)
}
}