register SyncRestClient to work with new MetricLogClient Filter
[vid.git] / vid-app-common / src / main / java / org / onap / vid / mso / rest / MsoRestClientNew.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * VID
4  * ================================================================================
5  * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
6  * Modifications Copyright (C) 2018 - 2019 Nokia. All rights reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  * 
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  * 
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21 package org.onap.vid.mso.rest;
22
23 import com.google.common.collect.ImmutableMap;
24 import com.google.common.collect.Maps;
25 import io.joshworks.restclient.http.HttpResponse;
26 import io.joshworks.restclient.http.JsonNode;
27 import java.text.DateFormat;
28 import java.text.SimpleDateFormat;
29 import java.util.Date;
30 import java.util.HashMap;
31 import java.util.Map;
32 import javax.ws.rs.core.HttpHeaders;
33 import javax.ws.rs.core.MediaType;
34 import org.apache.commons.codec.binary.Base64;
35 import org.eclipse.jetty.util.security.Password;
36 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
37 import org.onap.portalsdk.core.util.SystemProperties;
38 import org.onap.vid.aai.HttpResponseWithRequestInfo;
39 import org.onap.vid.changeManagement.MsoRequestDetails;
40 import org.onap.vid.changeManagement.RequestDetailsWrapper;
41 import org.onap.vid.changeManagement.WorkflowRequestDetail;
42 import org.onap.vid.client.SyncRestClient;
43 import org.onap.vid.model.RequestReferencesContainer;
44 import org.onap.vid.model.SOWorkflowList;
45 import org.onap.vid.mso.MsoInterface;
46 import org.onap.vid.mso.MsoProperties;
47 import org.onap.vid.mso.MsoResponseWrapper;
48 import org.onap.vid.mso.MsoResponseWrapperInterface;
49 import org.onap.vid.mso.MsoUtil;
50 import org.onap.vid.mso.RestObject;
51 import org.onap.vid.utils.SystemPropertiesWrapper;
52 import org.springframework.http.HttpMethod;
53
54
55 /**
56  * Created by pickjonathan on 21/06/2017.
57  */
58 public class MsoRestClientNew implements MsoInterface {
59
60     /**
61      * The Constant dateFormat.
62      */
63     public static final String X_FROM_APP_ID = "X-FromAppId";
64     final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
65     private static final String START = " start";
66     private final SyncRestClient client;
67     private final String baseUrl;
68     private final SystemPropertiesWrapper systemProperties;
69     private final Map<String, String> commonHeaders;
70
71     /**
72      * The logger.
73      */
74     EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoRestClientNew.class);
75
76     public MsoRestClientNew(SyncRestClient client, String baseUrl, SystemPropertiesWrapper systemPropertiesWrapper) {
77         this.client = client;
78         this.baseUrl = baseUrl;
79         this.systemProperties = systemPropertiesWrapper;
80         this.commonHeaders = initCommonHeaders();
81     }
82
83     @Override
84     public MsoResponseWrapper createSvcInstance(RequestDetails requestDetails, String endpoint) {
85         String methodName = "createSvcInstance ";
86         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
87         String path = baseUrl + endpoint;
88
89         return createInstance(requestDetails, path);
90     }
91     
92     @Override
93     public MsoResponseWrapper createE2eSvcInstance(Object requestDetails, String endpoint) {
94         String methodName = "createE2eSvcInstance ";
95         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
96         String path = baseUrl + endpoint;
97
98         return createInstance(requestDetails, path);
99     }
100
101     @Override
102     public MsoResponseWrapper createVnf(RequestDetails requestDetails, String endpoint) {
103
104         String methodName = "createVnf";
105         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
106         String path = baseUrl + endpoint;
107
108         return createInstance(requestDetails, path);
109     }
110
111     @Override
112     public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String endpoint) {
113
114         String methodName = "createNwInstance";
115         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
116         String path = baseUrl + endpoint;
117
118         return createInstance(requestDetails, path);
119     }
120
121     @Override
122     public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
123         String methodName = "createVolumeGroupInstance";
124         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
125         String path = baseUrl + endpoint;
126
127         return createInstance(requestDetails, path);
128     }
129
130     @Override
131     public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String endpoint) {
132         String methodName = "createVfModuleInstance";
133         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
134         String path = baseUrl + endpoint;
135
136         return createInstance(requestDetails, path);
137     }
138
139     @Override
140     public MsoResponseWrapper scaleOutVFModuleInstance(RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
141         String methodName = "scaleOutVFModuleInstance";
142         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
143         String path = baseUrl + endpoint;
144         return createInstance(requestDetailsWrapper, path);
145     }
146
147     @Override
148     public MsoResponseWrapper createConfigurationInstance(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
149         String methodName = "createConfigurationInstance";
150         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
151         String path = baseUrl + endpoint;
152
153         return createInstance(requestDetailsWrapper, path);
154     }
155
156     @Override
157     public MsoResponseWrapper deleteE2eSvcInstance(Object requestDetails, String endpoint) {
158         String methodName = "deleteE2eSvcInstance";
159         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
160         String path = baseUrl + endpoint;
161         return deleteInstance(requestDetails, path);
162     }
163
164     @Override
165     public MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String endpoint) {
166         String methodName = "deleteSvcInstance";
167         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
168         String path = baseUrl + endpoint;
169         return deleteInstance(requestDetails, path);
170     }
171
172     @Override
173     public MsoResponseWrapper unassignSvcInstance(RequestDetails requestDetails, String endpoint) {
174         String methodName = "unassignSvcInstance";
175         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
176         String path = baseUrl + endpoint;
177
178         HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
179         return MsoUtil.wrapResponse(response);
180     }
181
182     @Override
183     public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String endpoint) {
184         String methodName = "deleteVnf";
185         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
186         String path = baseUrl + endpoint;
187
188         return deleteInstance(requestDetails, path);
189     }
190
191     @Override
192     public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String endpoint) {
193         String methodName = "deleteVfModule";
194         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
195         String path = baseUrl + endpoint;
196
197         return deleteInstance(requestDetails, path);
198     }
199
200     @Override
201     public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
202         String methodName = "deleteVolumeGroupInstance";
203         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
204         String path = baseUrl + endpoint;
205
206         return deleteInstance(requestDetails, path);
207     }
208
209     @Override
210     public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String endpoint) {
211         String methodName = "deleteNwInstance";
212         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
213         String path = baseUrl + endpoint;
214
215         return deleteInstance(requestDetails, path);
216     }
217
218     @Override
219     public HttpResponseWithRequestInfo<String> getOrchestrationRequest(String endpoint, boolean warpException) {
220         String path = baseUrl + endpoint;
221
222         HttpResponse<String> response = client.get(path, getHeaders(), new HashMap<>(), String.class);
223         return new HttpResponseWithRequestInfo<>(response, path, HttpMethod.GET);
224     }
225
226     @Override
227     public MsoResponseWrapper getOrchestrationRequest(String endpoint) {
228         String path = baseUrl + endpoint;
229
230         HttpResponse<String> response = client.get(path, getHeaders(), new HashMap<>(), String.class);
231         return MsoUtil.wrapResponse(response);
232     }
233
234     @Override
235     public MsoResponseWrapper getManualTasksByRequestId(String t, String sourceId, String endpoint, RestObject restObject) {
236         String methodName = "getManualTasksByRequestId";
237         logger.debug(methodName + START);
238
239         try {
240             String path = baseUrl + endpoint;
241
242             HttpResponse<String> response = client.get(path, getHeaders(), new HashMap<>(), String.class);
243             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
244
245             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
246             return w;
247
248         } catch (Exception e) {
249             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
250             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
251             throw e;
252         }
253     }
254
255     @Override
256     public MsoResponseWrapper completeManualTask(RequestDetails requestDetails, String t, String sourceId, String endpoint, RestObject restObject) {
257         String methodName = "completeManualTask";
258         logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Complete ");
259         try {
260             String path = baseUrl + endpoint;
261
262             HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
263             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
264
265             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
266             return w;
267
268         } catch (Exception e) {
269             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
270             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
271             throw e;
272         }
273     }
274
275     @Override
276     public MsoResponseWrapper replaceVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
277         String methodName = "replaceVnf";
278         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
279         String path = baseUrl + endpoint;
280         return replaceInstance(requestDetails, path);
281     }
282
283     @Override
284     public MsoResponseWrapper deleteConfiguration(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String pmc_endpoint) {
285         String methodName = "deleteConfiguration";
286         logger.debug(EELFLoggerDelegate.debugLogger,
287                 methodName + START);
288         String path = baseUrl + pmc_endpoint;
289
290         return deleteInstance(requestDetailsWrapper, path);
291     }
292
293     @Override
294     public MsoResponseWrapper setConfigurationActiveStatus(RequestDetails request, String endpoint) {
295         String methodName = "setConfigurationActiveStatus";
296         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
297
298         try {
299             String path = baseUrl + endpoint;
300
301             logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
302                   + methodName + " calling change configuration active status, path =[" + path + "]");
303             HttpResponse<String> response = client.post(path, getHeaders(), request, String.class);
304             return MsoUtil.wrapResponse(response);
305         } catch (Exception e) {
306             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
307             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
308             throw e;
309         }
310     }
311
312     @Override
313     public MsoResponseWrapper setPortOnConfigurationStatus(RequestDetails request, String endpoint) {
314         String methodName = "setPortOnConfigurationStatus";
315         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
316
317         try {
318             String path = baseUrl + endpoint;
319             logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
320                 + methodName + " calling change port configuration status, path =[" + path + "]");
321             HttpResponse<String> response = client.post(path, getHeaders(), request, String.class);
322             return MsoUtil.wrapResponse(response);
323         } catch (Exception e) {
324             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
325             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
326             throw e;
327         }
328     }
329
330     @Override
331     public MsoResponseWrapperInterface changeManagementUpdate(RequestDetailsWrapper requestDetails, String endpoint) {
332         String path = baseUrl + endpoint;
333         HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
334         return MsoUtil.wrapResponse2(response, RequestReferencesContainer.class);
335     }
336
337     public MsoResponseWrapper replaceInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
338         String methodName = "replaceInstance";
339         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
340
341         try {
342             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Replace VNF, path =[" + path + "]");
343             RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
344             requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
345
346             HttpResponse<String> response = client.post(path, getHeaders(), requestDetailsWrapper, String.class);
347             MsoResponseWrapper msoResponseWrapperObject = MsoUtil.wrapResponse(response);
348             int status = msoResponseWrapperObject.getStatus();
349             if (status == 202) {
350                 logger.debug(EELFLoggerDelegate.debugLogger, methodName +
351                         ",post succeeded, msoResponseWrapperObject response:" + msoResponseWrapperObject.getResponse());
352             } else {
353                 logger.error(EELFLoggerDelegate.debugLogger, methodName +
354                         ": post failed, msoResponseWrapperObject status" + status + ", response:" + msoResponseWrapperObject.getResponse());
355
356             }
357             return msoResponseWrapperObject;
358
359         } catch (Exception e) {
360             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
361             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
362             throw e;
363         }
364
365     }
366
367     @Override
368     public MsoResponseWrapper updateVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
369         String methodName = "updateVnf";
370         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
371         String path = baseUrl + endpoint;
372
373         RequestDetailsWrapper wrapper = new RequestDetailsWrapper();
374         wrapper.requestDetails = new MsoRequestDetails(requestDetails);
375         return updateInstance(requestDetails, path);
376     }
377
378     public MsoResponseWrapper updateInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
379         String methodName = "updateInstance";
380         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
381
382         try {
383             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
384
385             RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
386             requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
387             HttpResponse<String> response = client.put(path, getHeaders(), requestDetailsWrapper, String.class);
388             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
389
390             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
391             return w;
392
393         } catch (Exception e) {
394             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
395             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
396             throw e;
397         }
398
399     }
400
401     public MsoResponseWrapper setServiceInstanceStatus(RequestDetails requestDetails,
402         String endpoint) {
403         String methodName = "activateServiceInstance";
404         logger.debug(EELFLoggerDelegate.debugLogger, methodName + " start ");
405         try {
406             String path = baseUrl + endpoint;
407             HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
408             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
409             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w =" + w.getResponse());
410             return w;
411
412         } catch (Exception e) {
413             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
414             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
415             throw e;
416         }
417     }
418
419     @Override
420     public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String endpoint) {
421         String methodName = "removeRelationshipFromServiceInstance";
422         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
423
424         try {
425             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Remove relationship from service instance, path =[" + endpoint + "]");
426             String path = baseUrl + endpoint;
427             HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
428             return MsoUtil.wrapResponse(response);
429         } catch (Exception e) {
430             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
431             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
432             throw e;
433         }
434     }
435
436     @Override
437     public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String addRelationshipsPath) {
438         String methodName = "addRelationshipToServiceInstance";
439         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
440
441         try {
442             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Add relationship to service instance, path =[" + addRelationshipsPath + "]");
443             String path = baseUrl + addRelationshipsPath;
444
445             HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
446             return MsoUtil.wrapResponse(response);
447         } catch (Exception e) {
448             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
449             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
450             throw e;
451         }
452     }
453
454     @Override
455     public MsoResponseWrapper invokeWorkflow(WorkflowRequestDetail workflowRequestDetail, String invokeWorkflowsPath, Map<String, String> extraHeaders) {
456         String path = baseUrl + invokeWorkflowsPath;
457         Map<String, String> finalHeader = new HashMap<>();
458
459         finalHeader.putAll(getHeaders());
460         finalHeader.putAll(extraHeaders);
461
462         RequestDetailsWrapper<WorkflowRequestDetail> requestDetailsWrapper = new RequestDetailsWrapper<>(workflowRequestDetail);
463
464         HttpResponse<JsonNode> response = client.post(path, finalHeader, requestDetailsWrapper);
465         return MsoUtil.wrapResponse(response);
466     }
467
468     @Override
469     public <T> HttpResponse<T> get(String endpoint, Class<T> responseClass) {
470         String path = baseUrl + endpoint;
471         return client.get(path, getHeaders(), new HashMap<>(), responseClass);
472     }
473
474     @Override
475     public <T> HttpResponse<T> post(String endpoint, RequestDetailsWrapper<?> requestDetailsWrapper, Class<T> responseClass) {
476         String path = baseUrl + endpoint;
477
478         return client.post(path, getHeaders(), requestDetailsWrapper, responseClass);
479     }
480
481     public HttpResponse<SOWorkflowList> getWorkflowListByModelId(String endpoint){
482         String path = baseUrl + endpoint;
483
484         return client.get(path, getHeaders(), Maps.newHashMap(), SOWorkflowList.class);
485     }
486
487     protected MsoResponseWrapper createInstance(Object request, String path) {
488         String methodName = "createInstance";
489         logger.debug(methodName + START);
490
491         try {
492             HttpResponse<String> response = client.post(path, getHeaders(), request, String.class);
493             return MsoUtil.wrapResponse(response);
494         } catch (Exception e) {
495             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
496             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
497             throw e;
498         }
499     }
500
501     /**
502      * Delete instance.
503      *
504      * @param request the request
505      * @param path    the path
506      * @return the mso response wrapper
507      * @throws Exception the exception
508      */
509     private MsoResponseWrapper deleteInstance(Object request, String path) {
510         String methodName = "deleteInstance";
511         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
512
513         try {
514             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
515
516             HttpResponse<String> response = client.delete(path, getHeaders(), request, String.class);
517             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
518
519             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
520             return w;
521
522         } catch (Exception e) {
523             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
524             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
525             throw e;
526         }
527
528     }
529
530     private Map<String, String> getHeaders() {
531         Map<String, String> map = new HashMap<>();
532         map.putAll(commonHeaders);
533         return map;
534     }
535
536     private Map<String, String> initCommonHeaders() {
537         String username = systemProperties.getProperty(MsoProperties.MSO_USER_NAME);
538         String password = systemProperties.getProperty(MsoProperties.MSO_PASSWORD);
539         String decrypted_password = Password.deobfuscate(password);
540
541         String authString = username + ":" + decrypted_password;
542
543         byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
544         String authStringEnc = new String(authEncBytes);
545
546         Map<String, String> map = new HashMap<>();
547         map.put(HttpHeaders.AUTHORIZATION,  "Basic " + authStringEnc);
548         map.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
549         map.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
550         map.put(X_FROM_APP_ID, systemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME));
551         return ImmutableMap.copyOf(map);
552     }
553
554 }