VES PNF Registration Request changes.
[o-du/l2.git] / src / o1 / O1App.cpp
1 /*******************************************************************************
2 ################################################################################
3 #   Copyright (c) [2020-2021] [HCL Technologies Ltd.]                          #
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 *******************************************************************************/
18
19 /* This file contains the O1App class which is responsible for running/starting
20    all the O1 modules in a thread. It inherits the Thread class and Singleton
21    class.
22 */
23
24 #include "O1App.hpp"
25 #include "GlobalDefs.hpp"
26 #include "SessionHandler.hpp"
27 #include "ConfigInterface.h"
28 #include <unistd.h>
29
30 #include "VesUtils.hpp"
31 #include "VesEventHandler.hpp"
32 /*******************************************************************
33  *
34  * @brief Constructor
35  *
36  * @details
37  *
38  *    Function : O1App
39  *
40  *    Functionality:
41  *      - Constructor intialization
42  *
43  * @params[in] None
44  * @return None
45  ******************************************************************/
46
47 O1App::O1App() : mUxSocketServer(O1::ALARM_SOCK_PATH)
48 {
49
50 }
51
52 /*******************************************************************
53  *
54  * @brief Destructor
55  *
56  * @details
57  *
58  *    Function : ~O1App
59  *
60  *    Functionality:
61  *      - Destructor
62  *
63  * @params[in] None
64  * @return None
65  ******************************************************************/
66
67 O1App::~O1App()
68 {
69
70 }
71
72 /*******************************************************************
73  *
74  * @brief Runs the O1 modules as a thread 
75  *
76  * @details
77  *
78  *    Function : run
79  *
80  *    Functionality:
81  *      - Implements the "run" function of Thread class.
82  *        Starts all the O1 modules.
83  *
84  *
85  * @params[in] void
86  * @return true  : success
87  *         false : failure
88  ******************************************************************/
89
90 bool O1App::run()
91 {
92     
93    SessionHandler sessHdlr;
94    /*send ves PNF registration request*/
95    VesEventHandler vesEvtHdr;
96    O1_LOG("\nO1 O1App : Sending VES Event");
97    if(!vesEvtHdr.send(VesEventType::PNF_REGISTRATION))
98    {
99       O1_LOG("\nO1 O1App : Could not send VES Request");
100       return false;
101    }
102
103    /* Start Netconf session and subscribe to yang modules */
104    try
105    {
106       if( !sessHdlr.init() )
107       {
108          O1_LOG("\nO1 O1App : SessionHandler initialization failed ");         
109          return false;
110       }
111    }
112    catch( const std::exception& e ) 
113    {
114       O1_LOG("\nO1 O1App : Exception : %s", e.what());
115       return false;
116    }
117    
118    /* Start the Unix Socket Server to listen for alarm messages */
119    if( mUxSocketServer.start() )
120    {  
121       
122       if(mUxSocketServer.setAffinity(O1::CPU_CORE))
123       {
124          O1_LOG("\nO1 O1App : CPU affinity set " );
125          mUxSocketServer.printAffinity();
126       }
127       
128       sleep(2);
129       if( mUxSocketServer.isRunning() )  
130       {
131          mStartupStatus = true;
132          O1_LOG("\nO1 O1App : Unix Socket server started\n");
133       }
134       else
135       {
136          O1_LOG("\nO1 O1App : Unix Socket server failed to start\n");
137          return false;
138       }
139       /* Wait for the Unix Socket Server thread to end*/
140       mUxSocketServer.join();
141    }
142    else
143    {
144       O1_LOG("\nO1 O1App : Unix Socket server failed to start\n");
145       return false;
146    }
147    return true;
148 }
149
150 /*******************************************************************
151  *
152  * @brief Check if the O1 Module is fully up and running
153  *
154  * @details
155  *
156  *    Function : getStartupStatus
157  *
158  *    Functionality:
159  *      - Returns the status of O1App whether it is fully up
160  *
161  *
162  * @params[in] void
163  * @return true  : started
164  *         false : not started
165  ******************************************************************/
166
167 bool O1App::getStartupStatus() const
168 {
169    return mStartupStatus;
170 }
171
172 /*******************************************************************
173  *
174  * @brief Cleanup O1App
175  *
176  * @details
177  *
178  *    Function : cleanUp
179  *
180  *    Functionality:
181  *      - Implements the "cleanUp" function of Thread class to
182  *        take care of any clean up required for O1 components 
183  *        before stopping the thread.
184  *
185  * @params[in] void
186  * @return void
187  ******************************************************************/
188
189 void O1App::cleanUp(void)
190 {
191    /* Stop the socket server thread */
192    mUxSocketServer.stop();   
193 }