[RICPLT-213] Print configurations to log on startup
[ric-plt/e2mgr.git] / E2Manager / configuration / configuration.go
1 //
2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //      http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16
17 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 //  platform project (RICP).
19
20 package configuration
21
22 import (
23         "fmt"
24         "github.com/spf13/viper"
25 )
26
27 type Configuration struct {
28         Logging struct {
29                 LogLevel string
30         }
31         Http struct {
32                 Port int
33         }
34         Rmr struct {
35                 Port       int
36                 MaxMsgSize int
37         }
38         RoutingManager struct {
39                 BaseUrl string
40         }
41         NotificationResponseBuffer   int
42         BigRedButtonTimeoutSec       int
43         MaxConnectionAttempts        int
44         MaxRnibConnectionAttempts    int
45         RnibRetryIntervalMs          int
46         KeepAliveResponseTimeoutMs   int
47         KeepAliveDelayMs             int
48         E2TInstanceDeletionTimeoutMs int
49         GlobalRicId                  struct {
50                 PlmnId      string
51                 RicNearRtId string
52         }
53 }
54
55 func ParseConfiguration() *Configuration {
56         viper.SetConfigType("yaml")
57         viper.SetConfigName("configuration")
58         viper.AddConfigPath("E2Manager/resources/")
59         viper.AddConfigPath("./resources/")     //For production
60         viper.AddConfigPath("../resources/")    //For test under Docker
61         viper.AddConfigPath("../../resources/") //For test under Docker
62         err := viper.ReadInConfig()
63         if err != nil {
64                 panic(fmt.Sprintf("#configuration.ParseConfiguration - failed to read configuration file: %s\n", err))
65         }
66
67         config := Configuration{}
68         config.populateRmrConfig(viper.Sub("rmr"))
69         config.populateHttpConfig(viper.Sub("http"))
70         config.populateLoggingConfig(viper.Sub("logging"))
71         config.populateRoutingManagerConfig(viper.Sub("routingManager"))
72         config.NotificationResponseBuffer = viper.GetInt("notificationResponseBuffer")
73         config.BigRedButtonTimeoutSec = viper.GetInt("bigRedButtonTimeoutSec")
74         config.MaxConnectionAttempts = viper.GetInt("maxConnectionAttempts")
75         config.MaxRnibConnectionAttempts = viper.GetInt("maxRnibConnectionAttempts")
76         config.RnibRetryIntervalMs = viper.GetInt("rnibRetryIntervalMs")
77         config.KeepAliveResponseTimeoutMs = viper.GetInt("keepAliveResponseTimeoutMs")
78         config.KeepAliveDelayMs = viper.GetInt("KeepAliveDelayMs")
79         config.E2TInstanceDeletionTimeoutMs = viper.GetInt("e2tInstanceDeletionTimeoutMs")
80         config.populateGlobalRicIdConfig(viper.Sub("globalRicId"))
81         return &config
82 }
83
84 func (c *Configuration) populateLoggingConfig(logConfig *viper.Viper) {
85         if logConfig == nil {
86                 panic(fmt.Sprintf("#configuration.populateLoggingConfig - failed to populate logging configuration: The entry 'logging' not found\n"))
87         }
88         c.Logging.LogLevel = logConfig.GetString("logLevel")
89 }
90
91 func (c *Configuration) populateHttpConfig(httpConfig *viper.Viper) {
92         if httpConfig == nil {
93                 panic(fmt.Sprintf("#configuration.populateHttpConfig - failed to populate HTTP configuration: The entry 'http' not found\n"))
94         }
95         c.Http.Port = httpConfig.GetInt("port")
96 }
97
98 func (c *Configuration) populateRmrConfig(rmrConfig *viper.Viper) {
99         if rmrConfig == nil {
100                 panic(fmt.Sprintf("#configuration.populateRmrConfig - failed to populate RMR configuration: The entry 'rmr' not found\n"))
101         }
102         c.Rmr.Port = rmrConfig.GetInt("port")
103         c.Rmr.MaxMsgSize = rmrConfig.GetInt("maxMsgSize")
104 }
105
106 func (c *Configuration) populateRoutingManagerConfig(rmConfig *viper.Viper) {
107         if rmConfig == nil {
108                 panic(fmt.Sprintf("#configuration.populateRoutingManagerConfig - failed to populate Routing Manager configuration: The entry 'routingManager' not found\n"))
109         }
110         c.RoutingManager.BaseUrl = rmConfig.GetString("baseUrl")
111 }
112
113 func (c *Configuration) populateGlobalRicIdConfig(globalRicIdConfig *viper.Viper) {
114         if globalRicIdConfig == nil {
115                 panic(fmt.Sprintf("#configuration.populateGlobalRicIdConfig - failed to populate Global RicId configuration: The entry 'globalRicId' not found\n"))
116         }
117         c.GlobalRicId.PlmnId = globalRicIdConfig.GetString("plmnId")
118         c.GlobalRicId.RicNearRtId = globalRicIdConfig.GetString("ricNearRtId")
119 }
120
121 func (c *Configuration) String() string {
122         return fmt.Sprintf("{logging.logLevel: %s, http.port: %d, rmr: { port: %d, maxMsgSize: %d}, routingManager.baseUrl: %s, "+
123                 "notificationResponseBuffer: %d, bigRedButtonTimeoutSec: %d, maxConnectionAttempts: %d, maxRnibConnectionAttempts: %d, "+
124                 "rnibRetryIntervalMs: %d, keepAliveResponseTimeoutMs: %d, keepAliveDelayMs: %d, e2tInstanceDeletionTimeoutMs: %d, "+
125                 "globalRicId: { plmnId: %s, ricNearRtId: %s}}",
126                 c.Logging.LogLevel,
127                 c.Http.Port,
128                 c.Rmr.Port,
129                 c.Rmr.MaxMsgSize,
130                 c.RoutingManager.BaseUrl,
131                 c.NotificationResponseBuffer,
132                 c.BigRedButtonTimeoutSec,
133                 c.MaxConnectionAttempts,
134                 c.MaxRnibConnectionAttempts,
135                 c.RnibRetryIntervalMs,
136                 c.KeepAliveResponseTimeoutMs,
137                 c.KeepAliveDelayMs,
138                 c.E2TInstanceDeletionTimeoutMs,
139                 c.GlobalRicId.PlmnId,
140                 c.GlobalRicId.RicNearRtId,
141         )
142 }