blob: d683ab47efa9a2d7a7fbae3df0c7dadcd2b2ccb4 [file] [log] [blame]
/*
* Copyright 2020-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Package main holds functions for init
package main
import (
"context"
"github.com/opencord/opendevice-manager/pkg/config"
"github.com/opencord/opendevice-manager/pkg/nbi"
"github.com/opencord/opendevice-manager/pkg/db"
"github.com/opencord/opendevice-manager/pkg/msgbus"
"fmt"
"os"
"os/signal"
"syscall"
"github.com/opencord/voltha-lib-go/v4/pkg/log"
)
// logger represents the log object
var logger log.CLogger
// init function for the package
func init() {
logger = config.Initlog()
}
func printBanner() {
fmt.Println("╔═╗╔═╗╔═╗╔╗╔ ╔╦╗╔═╗╦ ╦╦╔═╗╔═╗ ╔╦╗╔═╗╔╗╔╔═╗╔═╗╔═╗╦═╗")
fmt.Println("║ ║╠═╝║╣ ║║║ ║║║╣ ╚╗╔╝║║ ║╣ ║║║╠═╣║║║╠═╣║ ╦║╣ ╠╦╝")
fmt.Println("╚═╝╩ ╚═╝╝╚╝ ═╩╝╚═╝ ╚╝ ╩╚═╝╚═╝ ╩ ╩╩ ╩╝╚╝╩ ╩╚═╝╚═╝╩╚═")
}
func exitBanner() {
fmt.Println("╔═╗╦ ╔═╗╔═╗╦╔╗╔╔═╗")
fmt.Println("║ ║ ║ ║╚═╗║║║║║ ╦")
fmt.Println("╚═╝╩═╝╚═╝╚═╝╩╝╚╝╚═╝ooo")
}
func waitForExit(ctx context.Context) int {
signalChannel := make(chan os.Signal, 1)
signal.Notify(signalChannel,
syscall.SIGHUP,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT)
s := <-signalChannel
switch s {
case syscall.SIGHUP,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT:
logger.Infow(ctx, "closing-signal-received", log.Fields{"signal": s})
return 0
default:
logger.Infow(ctx, "unexpected-signal-received", log.Fields{"signal": s})
return 1
}
}
func main() {
printBanner()
coreFlags := config.NewCoreFlags()
coreFlags.ParseEnv()
core := config.NewCoreConfig()
ctx := config.GetNewContextFromGlobalContxt("main-service")
startServices(ctx, coreFlags, core)
}
func startServices(ctx context.Context, coreFlags *config.CoreFlags, core *config.Core) {
logger.Infow(ctx, "starting-core-services", log.Fields{"core-flags": coreFlags})
defer close(core.Stopped)
defer core.Cancel()
// setup kv client
logger.Debugw(ctx, "create-kv-client", log.Fields{"kvstore": config.KVStore})
kvClient, err := db.NewKVClient(ctx, config.KVStore, coreFlags.DbEndPoint, coreFlags.DbTimeout)
if err != nil {
logger.Fatal(ctx, log.Fields{"err": err})
}
defer db.StopKVClient(log.WithSpanFromContext(context.Background(), ctx), kvClient)
err = msgbus.InitMsgbusProducer(ctx)
if err != nil {
logger.Fatal(ctx, log.Fields{"err": err})
}
defer nbi.DeInitConnectMap(ctx)
defer msgbus.Close(ctx)
go nbi.StartGrpcServer(ctx)
defer nbi.StopGrpcServer(ctx)
waitForExit(core.Ctx)
exitBanner()
}