Initial job creation
[nonrtric.git] / dmaap-mediator-producer / main.go
1 // -
2 //   ========================LICENSE_START=================================
3 //   O-RAN-SC
4 //   %%
5 //   Copyright (C) 2021: Nordix Foundation
6 //   %%
7 //   Licensed under the Apache License, Version 2.0 (the "License");
8 //   you may not use this file except in compliance with the License.
9 //   You may obtain a copy of the License at
10 //
11 //        http://www.apache.org/licenses/LICENSE-2.0
12 //
13 //   Unless required by applicable law or agreed to in writing, software
14 //   distributed under the License is distributed on an "AS IS" BASIS,
15 //   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 //   See the License for the specific language governing permissions and
17 //   limitations under the License.
18 //   ========================LICENSE_END===================================
19 //
20
21 package main
22
23 import (
24         "fmt"
25         "sync"
26
27         log "github.com/sirupsen/logrus"
28         "oransc.org/nonrtric/dmaapmediatorproducer/internal/config"
29         "oransc.org/nonrtric/dmaapmediatorproducer/internal/jobs"
30         "oransc.org/nonrtric/dmaapmediatorproducer/internal/server"
31 )
32
33 var configuration *config.Config
34 var supervisionCallbackAddress string
35 var jobInfoCallbackAddress string
36
37 func init() {
38         configuration = config.New()
39         if loglevel, err := log.ParseLevel(configuration.LogLevel); err == nil {
40                 log.SetLevel(loglevel)
41         } else {
42                 log.Warnf("Invalid log level: %v. Log level will be Info!", configuration.LogLevel)
43         }
44
45         log.Debug("Initializing DMaaP Mediator Producer")
46         if configuration.InfoProducerSupervisionCallbackHost == "" {
47                 log.Fatal("Missing INFO_PRODUCER_SUPERVISION_CALLBACK_HOST")
48         }
49         supervisionCallbackAddress = fmt.Sprintf("%v:%v", configuration.InfoProducerSupervisionCallbackHost, configuration.InfoProducerSupervisionCallbackPort)
50
51         if configuration.InfoJobCallbackHost == "" {
52                 log.Fatal("Missing INFO_JOB_CALLBACK_HOST")
53         }
54         jobInfoCallbackAddress = fmt.Sprintf("%v:%v", configuration.InfoJobCallbackHost, configuration.InfoJobCallbackPort)
55
56         registrator := config.NewRegistratorImpl(configuration.InfoCoordinatorAddress)
57         if types, err := jobs.GetTypes(); err == nil {
58                 if regErr := registrator.RegisterTypes(types); regErr != nil {
59                         log.Fatalf("Unable to register all types due to: %v", regErr)
60                 }
61         } else {
62                 log.Fatalf("Unable to get types to register due to: %v", err)
63         }
64         producer := config.ProducerRegistrationInfo{
65                 InfoProducerSupervisionCallbackUrl: supervisionCallbackAddress,
66                 SupportedInfoTypes:                 jobs.GetSupportedTypes(),
67                 InfoJobCallbackUrl:                 jobInfoCallbackAddress,
68         }
69         if err := registrator.RegisterProducer("DMaaP_Mediator_Producer", &producer); err != nil {
70                 log.Fatalf("Unable to register producer due to: %v", err)
71         }
72 }
73
74 func main() {
75         log.Debug("Starting DMaaP Mediator Producer")
76         wg := new(sync.WaitGroup)
77
78         // add two goroutines to `wg` WaitGroup, one for each avilable server
79         wg.Add(2)
80
81         log.Debugf("Starting status callback server at port %v", configuration.InfoProducerSupervisionCallbackPort)
82         go func() {
83                 server := server.CreateServer(configuration.InfoProducerSupervisionCallbackPort, server.StatusHandler)
84                 log.Warn(server.ListenAndServe())
85                 wg.Done()
86         }()
87
88         go func() {
89                 server := server.CreateServer(configuration.InfoJobCallbackPort, server.CreateInfoJobHandler)
90                 log.Warn(server.ListenAndServe())
91                 wg.Done()
92         }()
93
94         // wait until WaitGroup is done
95         wg.Wait()
96         log.Debug("Stopping DMaaP Mediator Producer")
97 }