3cc2790709d85e8bd5c872841c660effd675239e
[policy/drools-pdp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * feature-state-management
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
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 org.onap.policy.drools.statemanagement;
22
23 import java.io.IOException;
24 import java.util.Observer;
25 import java.util.Properties;
26
27 import org.onap.policy.common.im.AllSeemsWellException;
28 import org.onap.policy.common.im.StateManagement;
29 import org.onap.policy.drools.core.PolicySessionFeatureAPI;
30 import org.onap.policy.drools.features.PolicyEngineFeatureAPI;
31 import org.onap.policy.drools.utils.PropertyUtil;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 /**
36  * If this feature is supported, there is a single instance of it.
37  * It adds persistence to Drools sessions, but it is also intertwined with
38  * active/standby state management and IntegrityMonitor. For now, they are
39  * all treated as a single feature, but it would be nice to separate them.
40  *
41  * The bulk of the code here was once in other classes, such as
42  * 'PolicyContainer' and 'Main'. It was moved here as part of making this
43  * a separate optional feature.
44  */
45
46 public class StateManagementFeature implements StateManagementFeatureAPI, 
47                                 PolicySessionFeatureAPI, PolicyEngineFeatureAPI
48 {
49         // get an instance of logger
50         private static final Logger logger =
51                         LoggerFactory.getLogger(StateManagementFeature.class);
52         
53         private DroolsPDPIntegrityMonitor droolsPdpIntegrityMonitor = null;
54         private StateManagement stateManagement = null;
55
56         /**************************/
57         /* 'FeatureAPI' interface */
58         /**************************/
59
60         public StateManagementFeature(){
61                 logger.debug("StateManagementFeature() constructor");
62         }
63         
64         @Override
65         public void globalInit(String[] args, String configDir)
66         {
67                 // Initialization code associated with 'PolicyContainer'
68                 logger.debug("StateManagementFeature.globalInit({}) entry", configDir);
69
70                 try
71                 {
72                         droolsPdpIntegrityMonitor = DroolsPDPIntegrityMonitor.init(configDir);
73                 }
74                 catch (Exception e)
75                 {
76                         logger.debug("DroolsPDPIntegrityMonitor initialization exception: ", e);
77                         logger.error("DroolsPDPIntegrityMonitor.init()", e);
78                 }
79
80                 initializeProperties(configDir);
81
82                 //At this point the DroolsPDPIntegrityMonitor instance must exist. Let's check it.
83                 try {
84                         droolsPdpIntegrityMonitor = DroolsPDPIntegrityMonitor.getInstance();
85                         stateManagement = droolsPdpIntegrityMonitor.getStateManager();
86                         
87                         logger.debug("StateManagementFeature.globalInit(): "
88                                 + "stateManagement.getAdminState(): {}", stateManagement.getAdminState());
89                         
90                         if(stateManagement == null){
91                                 logger.debug("StateManagementFeature.globalInit(): stateManagement is NULL!");
92                         }
93                 } catch (Exception e1) {
94                         logger.debug("StateManagementFeature.globalInit(): DroolsPDPIntegrityMonitor"
95                                 + " initialization failed with exception:", e1);
96                         logger.error("DroolsPDPIntegrityMonitor.init(): StateManagementFeature startup failed "
97                                         + "to get DroolsPDPIntegrityMonitor instance:", e1);
98                 }
99         }
100         
101         /**
102          * {@inheritDoc}
103          */
104         @Override
105         public void addObserver(Observer stateChangeObserver) {
106                 logger.debug("StateManagementFeature.addObserver() entry\n"
107                                 + "StateManagementFeature.addObserver(): "
108                                 + "stateManagement.getAdminState(): {}", stateManagement.getAdminState());
109                 
110                 stateManagement.addObserver(stateChangeObserver);
111                 
112                 logger.debug("StateManagementFeature.addObserver() exit");
113         }
114
115         /**
116          * {@inheritDoc}
117          */
118         @Override
119         public String getAdminState() {
120                 return stateManagement.getAdminState();
121         }
122         
123         /**
124          * {@inheritDoc}
125          */
126         @Override
127         public String getOpState() {
128                 return stateManagement.getOpState();
129         }
130
131         /**
132          * {@inheritDoc}
133          */
134         @Override
135         public String getAvailStatus() {
136                 return stateManagement.getAvailStatus();
137         }
138         
139         /**
140          * {@inheritDoc}
141          */
142         @Override
143         public String getStandbyStatus() {
144                 return stateManagement.getStandbyStatus();
145         }
146
147         /**
148          * {@inheritDoc}
149          */
150         @Override
151         public String getStandbyStatus(String resourceName) {
152                 return stateManagement.getStandbyStatus(resourceName);
153         }
154
155         /**
156          * {@inheritDoc}
157          */
158         @Override
159         public void disableFailed(String resourceName) throws Exception {
160                 stateManagement.disableFailed(resourceName);
161
162         }
163
164         /**
165          * {@inheritDoc}
166          */
167         @Override
168         public void disableFailed() throws Exception {
169                 stateManagement.disableFailed();
170         }
171
172         /**
173          * {@inheritDoc}
174          */
175         @Override
176         public void promote() throws Exception {
177                 stateManagement.promote();              
178         }
179
180         /**
181          * {@inheritDoc}
182          */
183         @Override
184         public void demote() throws Exception {
185                 stateManagement.demote();
186         }
187         
188         /**
189          * {@inheritDoc}
190          */
191         @Override
192         public String getResourceName() {
193                 return StateManagementProperties.getProperty(StateManagementProperties.NODE_NAME);
194         }
195         
196         /**
197          * {@inheritDoc}
198          * @return 
199          */
200         @Override
201         public boolean lock(){
202                 try{
203                         stateManagement.lock();
204                 }catch(Exception e){
205                         logger.error("StateManagementFeature.lock() failed with exception: {}", e);
206                         return false;
207                 }
208                 return true;
209         }
210         
211         /**
212          * {@inheritDoc}
213          * @throws Exception 
214          */
215         @Override
216         public boolean unlock(){
217                 try{
218                         stateManagement.unlock();
219                 }catch(Exception e){
220                         logger.error("StateManagementFeature.unlock() failed with exception: {}", e);
221                         return false;
222                 }
223                 return true;
224         }
225         
226         /**
227          * {@inheritDoc}
228          * @throws Exception 
229          */
230         @Override
231         public boolean isLocked(){
232                 return StateManagement.LOCKED.equals(stateManagement.getAdminState());
233         }
234         
235         @Override
236         public int getSequenceNumber() {
237                 return SEQ_NUM;
238         }
239
240         /**
241          * Read in the properties and initialize the StateManagementProperties.
242          */
243         private static void initializeProperties(String configDir)
244         {
245                 //Get the state management properties 
246                 try {
247                         Properties pIm =
248                                         PropertyUtil.getProperties(configDir + "/feature-state-management.properties");
249                         StateManagementProperties.initProperties(pIm);
250                         logger.info("initializeProperties: resourceName= {}", StateManagementProperties.getProperty(StateManagementProperties.NODE_NAME));
251                 } catch (IOException e1) {
252                         logger.error("initializeProperties", e1);
253                 }
254         }
255
256         @Override
257         public void allSeemsWell(String key, Boolean asw, String msg)
258                         throws AllSeemsWellException {
259
260                 droolsPdpIntegrityMonitor.allSeemsWell(key, asw, msg);
261                 
262         }
263 }