Prometheus Kafka Writer Microservice
[demo.git] / vnfs / DAaaS / microservices / prom-kafka-writer / cmd / prom-kafka-writer / main.go
1 /*
2  *
3  * Copyright 2019 Intel Corporation.
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  * Unless required by applicable law or agreed to in writing, software
9  * distributed under the License is distributed on an "AS IS" BASIS,
10  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11  * See the License for the specific language governing permissions and
12  * limitations under the License.
13  *
14  */
15
16 package main
17
18 import (
19         "context"
20         "net/http"
21         "os"
22         "os/signal"
23         "time"
24
25         "prom-kafka-writer/pkg/api"
26         logger "prom-kafka-writer/pkg/config"
27         kw "prom-kafka-writer/pkg/kafkawriter"
28 )
29
30 const defaultAddr = ":8686"
31
32 // main starts an http server on the $PORT environment variable.
33 func main() {
34         log := logger.GetLoggerInstance()
35
36         addr := defaultAddr
37         // $PORT environment variable is provided in the Kubernetes deployment.
38         if p := os.Getenv("PORT"); p != "" {
39                 addr = ":" + p
40         }
41
42         log.Infow("Starting Prometheus Kafka writer", "addr", addr)
43         defer log.Infow("Prometheus Kafka writer Terminated")
44
45         s := &http.Server{
46                 Handler: api.NewRouter(),
47                 Addr:    addr,
48         }
49
50         // shutdown hook. Wait for clean up if the pod/container is killed
51         shutdownChannel := make(chan struct{})
52         go func() {
53                 log.Debug("msg", "Creating shutdown hooks")
54                 sigChan := make(chan os.Signal, 1)
55                 signal.Notify(sigChan, os.Interrupt)
56                 <-sigChan
57                 log.Debug("msg", "Received os.Interrupt")
58                 log.Debug("msg", "Initiate cleanup")
59                 //TODO: Cleanup here
60                 kw.Cleanup()
61                 time.Sleep(time.Second * 3)
62                 _ = s.Shutdown(context.Background())
63                 close(shutdownChannel)
64         }()
65
66         err := s.ListenAndServe()
67         if err != nil {
68                 log.Fatalw("Server Error - Shutting down", "error", err)
69         }
70         <-shutdownChannel
71 }