blob: d683ab47efa9a2d7a7fbae3df0c7dadcd2b2ccb4 [file] [log] [blame]
Prince Pereirac1c21d62021-04-22 08:38:15 +00001/*
2 * Copyright 2020-present Open Networking Foundation
3 *
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 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17// Package main holds functions for init
18package main
19
20import (
21 "context"
22
23 "github.com/opencord/opendevice-manager/pkg/config"
24 "github.com/opencord/opendevice-manager/pkg/nbi"
25
26 "github.com/opencord/opendevice-manager/pkg/db"
27 "github.com/opencord/opendevice-manager/pkg/msgbus"
28
29 "fmt"
30 "os"
31 "os/signal"
32 "syscall"
33
34 "github.com/opencord/voltha-lib-go/v4/pkg/log"
35)
36
37// logger represents the log object
38var logger log.CLogger
39
40// init function for the package
41func init() {
42 logger = config.Initlog()
43}
44
45func printBanner() {
46 fmt.Println("╔═╗╔═╗╔═╗╔╗╔ ╔╦╗╔═╗╦ ╦╦╔═╗╔═╗ ╔╦╗╔═╗╔╗╔╔═╗╔═╗╔═╗╦═╗")
47 fmt.Println("║ ║╠═╝║╣ ║║║ ║║║╣ ╚╗╔╝║║ ║╣ ║║║╠═╣║║║╠═╣║ ╦║╣ ╠╦╝")
48 fmt.Println("╚═╝╩ ╚═╝╝╚╝ ═╩╝╚═╝ ╚╝ ╩╚═╝╚═╝ ╩ ╩╩ ╩╝╚╝╩ ╩╚═╝╚═╝╩╚═")
49}
50
51func exitBanner() {
52 fmt.Println("╔═╗╦ ╔═╗╔═╗╦╔╗╔╔═╗")
53 fmt.Println("║ ║ ║ ║╚═╗║║║║║ ╦")
54 fmt.Println("╚═╝╩═╝╚═╝╚═╝╩╝╚╝╚═╝ooo")
55}
56
57func waitForExit(ctx context.Context) int {
58 signalChannel := make(chan os.Signal, 1)
59 signal.Notify(signalChannel,
60 syscall.SIGHUP,
61 syscall.SIGINT,
62 syscall.SIGTERM,
63 syscall.SIGQUIT)
64
65 s := <-signalChannel
66 switch s {
67 case syscall.SIGHUP,
68 syscall.SIGINT,
69 syscall.SIGTERM,
70 syscall.SIGQUIT:
71 logger.Infow(ctx, "closing-signal-received", log.Fields{"signal": s})
72 return 0
73 default:
74 logger.Infow(ctx, "unexpected-signal-received", log.Fields{"signal": s})
75 return 1
76 }
77}
78
79func main() {
80 printBanner()
81 coreFlags := config.NewCoreFlags()
82 coreFlags.ParseEnv()
83 core := config.NewCoreConfig()
84 ctx := config.GetNewContextFromGlobalContxt("main-service")
85 startServices(ctx, coreFlags, core)
86}
87
88func startServices(ctx context.Context, coreFlags *config.CoreFlags, core *config.Core) {
89
90 logger.Infow(ctx, "starting-core-services", log.Fields{"core-flags": coreFlags})
91
92 defer close(core.Stopped)
93
94 defer core.Cancel()
95
96 // setup kv client
97 logger.Debugw(ctx, "create-kv-client", log.Fields{"kvstore": config.KVStore})
98
99 kvClient, err := db.NewKVClient(ctx, config.KVStore, coreFlags.DbEndPoint, coreFlags.DbTimeout)
100
101 if err != nil {
102 logger.Fatal(ctx, log.Fields{"err": err})
103 }
104
105 defer db.StopKVClient(log.WithSpanFromContext(context.Background(), ctx), kvClient)
106
107 err = msgbus.InitMsgbusProducer(ctx)
108
109 if err != nil {
110 logger.Fatal(ctx, log.Fields{"err": err})
111 }
112
113 defer nbi.DeInitConnectMap(ctx)
114
115 defer msgbus.Close(ctx)
116
117 go nbi.StartGrpcServer(ctx)
118
119 defer nbi.StopGrpcServer(ctx)
120
121 waitForExit(core.Ctx)
122 exitBanner()
123}