74306e717be8c74411ef5678b54e175d17aa12f2
[ric-plt/resource-status-manager.git] / RSM / 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
21 package configuration
22
23 import (
24         "fmt"
25         "github.com/spf13/viper"
26 )
27
28 type Configuration struct {
29         Logging struct {
30                 LogLevel string
31         }
32         Http struct {
33                 Port int
34         }
35         Rmr struct {
36                 Port             int
37                 MaxMsgSize       int
38                 ReadyIntervalSec int
39         }
40         Rnib struct {
41                 MaxRnibConnectionAttempts int
42                 RnibRetryIntervalMs       int
43         }
44 }
45
46 func ParseConfiguration() (*Configuration, error) {
47         viper.SetConfigType("yaml")
48         viper.SetConfigName("configuration")
49         viper.AddConfigPath("RSM/resources/")
50         viper.AddConfigPath("./resources/")     //For production
51         viper.AddConfigPath("../resources/")    //For test under Docker
52         viper.AddConfigPath("../../resources/") //For test under Docker
53         if err := viper.ReadInConfig(); err != nil {
54                 return nil, fmt.Errorf("#configuration.parseConfiguration - failed to read configuration file: %s\n", err)
55         }
56
57         config := Configuration{}
58         if err := config.fillRmrConfig(viper.Sub("rmr")); err != nil {
59                 return nil, err
60         }
61         if err := config.fillHttpConfig(viper.Sub("http")); err != nil {
62                 return nil, err
63         }
64         if err := config.fillLoggingConfig(viper.Sub("logging")); err != nil {
65                 return nil, err
66         }
67         if err := config.fillRnibConfig(viper.Sub("rnib")); err != nil {
68                 return nil, err
69         }
70
71         return &config, nil
72 }
73
74 func (c *Configuration) fillLoggingConfig(logConfig *viper.Viper) error {
75         if logConfig == nil {
76                 return fmt.Errorf("#configuration.fillLoggingConfig - failed to fill logging configuration: The entry 'logging' not found\n")
77         }
78         c.Logging.LogLevel = logConfig.GetString("logLevel")
79         return nil
80 }
81
82 func (c *Configuration) fillHttpConfig(httpConfig *viper.Viper) error {
83         if httpConfig == nil {
84                 return fmt.Errorf("#configuration.fillHttpConfig - failed to fill HTTP configuration: The entry 'http' not found\n")
85         }
86         c.Http.Port = httpConfig.GetInt("port")
87         return nil
88 }
89
90 func (c *Configuration) fillRmrConfig(rmrConfig *viper.Viper) error {
91         if rmrConfig == nil {
92                 return fmt.Errorf("#configuration.fillRmrConfig - failed to fill RMR configuration: The entry 'rmr' not found\n")
93         }
94         c.Rmr.Port = rmrConfig.GetInt("port")
95         c.Rmr.MaxMsgSize = rmrConfig.GetInt("maxMsgSize")
96         c.Rmr.ReadyIntervalSec = rmrConfig.GetInt("readyIntervalSec")
97         return nil
98 }
99
100 func (c *Configuration) fillRnibConfig(rnibConfig *viper.Viper) error {
101         if rnibConfig == nil {
102                 return fmt.Errorf("#configuration.fillRnibConfig - failed to fill RNib configuration: The entry 'rnib' not found\n")
103         }
104         c.Rnib.MaxRnibConnectionAttempts = rnibConfig.GetInt("maxRnibConnectionAttempts")
105         c.Rnib.RnibRetryIntervalMs = rnibConfig.GetInt("rnibRetryIntervalMs")
106         return nil
107 }
108
109
110 func (c *Configuration) String() string {
111         return fmt.Sprintf("{logging.logLevel: %s, http.port: %d, rmr.port: %d, rmr.maxMsgSize: %d, rmr.readyIntervalSec: %d, rnib.maxRnibConnectionAttempts: %d, rnib.rnibRetryIntervalMs: %d, ",
112                 c.Logging.LogLevel,
113                 c.Http.Port,
114                 c.Rmr.Port,
115                 c.Rmr.MaxMsgSize,
116                 c.Rmr.ReadyIntervalSec,
117                 c.Rnib.MaxRnibConnectionAttempts,
118                 c.Rnib.RnibRetryIntervalMs,
119         )
120 }