Update get operation status part
[vfc/nfvo/driver/vnfm/svnfm.git] / nokia / vnfmdriver / vfcadaptorservice / vfcadaptor / src / main / java / org / onap / vfc / nfvo / driver / vnfm / svnfm / cbam / impl / CbamMgmrImpl.java
1 /*
2  * Copyright 2016-2017, Nokia Corporation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.impl;
18
19 import java.io.BufferedReader;
20 import java.io.IOException;
21 import java.io.InputStream;
22 import java.io.InputStreamReader;
23 import java.util.HashMap;
24 import java.util.List;
25
26 import org.apache.http.client.ClientProtocolException;
27 import org.apache.log4j.Logger;
28 import org.json.JSONException;
29 import org.json.JSONObject;
30 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMCreateVnfRequest;
31 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMCreateVnfResponse;
32 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMHealVnfRequest;
33 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMHealVnfResponse;
34 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMInstantiateVnfRequest;
35 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMInstantiateVnfResponse;
36 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMModifyVnfRequest;
37 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMModifyVnfResponse;
38 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMQueryOperExecutionResponse;
39 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMQueryVnfResponse;
40 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMScaleVnfRequest;
41 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMScaleVnfResponse;
42 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMTerminateVnfRequest;
43 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMTerminateVnfResponse;
44 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.entity.VnfcResourceInfo;
45 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.inf.CbamMgmrInf;
46 import org.onap.vfc.nfvo.driver.vnfm.svnfm.common.bo.AdaptorEnv;
47 import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonConstants;
48 import org.onap.vfc.nfvo.driver.vnfm.svnfm.http.client.HttpClientProcessorInf;
49 import org.onap.vfc.nfvo.driver.vnfm.svnfm.http.client.HttpResult;
50 import org.springframework.beans.factory.annotation.Autowired;
51 import org.springframework.http.MediaType;
52 import org.springframework.stereotype.Component;
53 import org.springframework.web.bind.annotation.RequestMethod;
54
55 import com.google.common.reflect.TypeToken;
56 import com.google.gson.Gson;
57
58 @Component
59 public class CbamMgmrImpl implements CbamMgmrInf {
60         private static final Logger logger = Logger.getLogger(CbamMgmrImpl.class);
61         private Gson gson = new Gson();
62         
63         @Autowired 
64         private AdaptorEnv adaptorEnv;
65         
66         @Autowired
67         HttpClientProcessorInf httpClientProcessor;
68         
69         public String retrieveToken() throws ClientProtocolException, IOException, JSONException {
70                 String result = null;
71                 String url= adaptorEnv.getCbamApiUriFront() + CommonConstants.CbamRetrieveTokenPath;
72                 HashMap<String, String> map = new HashMap<>();
73                 map.put(CommonConstants.ACCEPT, "*/*");
74                 map.put(CommonConstants.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
75                 
76                 String bodyPostStr = String.format(CommonConstants.CbamRetrieveTokenPostStr, adaptorEnv.getClientId(), adaptorEnv.getClientSecret(), adaptorEnv.getCbamUserName(), adaptorEnv.getCbamPassword());
77                 
78                 logger.debug("CbamMgmrImpl -> retrieveToken, url is " + url);
79                 logger.debug("CbamMgmrImpl -> retrieveToken, bodyPostStr is " + bodyPostStr);
80                 
81                 String responseStr = httpClientProcessor.process(url, RequestMethod.POST, map, bodyPostStr).getContent();
82                 
83                 logger.info("CbamMgmrImpl -> retrieveToken, responseStr is " + responseStr);
84                 
85                 JSONObject tokenJsonObject = new JSONObject(responseStr);
86                 
87                 result = tokenJsonObject.getString(CommonConstants.CBAM_TOKEN_KEY);
88                 
89                 return result;
90         }
91         
92         public CBAMCreateVnfResponse createVnf(CBAMCreateVnfRequest cbamRequest) throws ClientProtocolException, IOException {
93                 String httpPath = CommonConstants.CbamCreateVnfPath;
94                 RequestMethod method = RequestMethod.POST;
95                         
96                 HttpResult httpResult = operateCbamHttpTask(cbamRequest, httpPath, method);
97                 String responseStr = httpResult.getContent();
98                 
99                 logger.info("CbamMgmrImpl -> createVnf, responseStr is " + responseStr);
100                 int code = httpResult.getStatusCode();
101                 if(code == 201) {
102                         logger.info("CbamMgmrImpl -> createVnf success");
103                 }else {
104                         logger.error("CbamMgmrImpl -> createVnf error ");
105                 }
106                 CBAMCreateVnfResponse response = gson.fromJson(responseStr, CBAMCreateVnfResponse.class);
107                 
108                 return response;
109         }
110         
111         public CBAMModifyVnfResponse modifyVnf(CBAMModifyVnfRequest cbamRequest, String vnfInstanceId)
112                         throws ClientProtocolException, IOException {
113                 String httpPath = String.format(CommonConstants.CbamModifyVnfPath, vnfInstanceId);
114                 
115                 RequestMethod method = RequestMethod.PATCH;
116                         
117                 HttpResult httpResult = operateCbamHttpTask(cbamRequest, httpPath, method);
118                 String responseStr = httpResult.getContent();
119                 
120                 logger.info("CbamMgmrImpl -> modifyVnf, responseStr is " + responseStr);
121                 int code = httpResult.getStatusCode();
122                 if(code == 201) {
123                         logger.info("CbamMgmrImpl -> modifyVnf success");
124                 }else {
125                         logger.error("CbamMgmrImpl -> modifyVnf error ");
126                 }
127                 CBAMModifyVnfResponse response = gson.fromJson(responseStr, CBAMModifyVnfResponse.class);
128                 return response;
129         }
130         
131         /* (non-Javadoc)
132          * @see com.nokia.vfcadaptor.cbam.impl.CbamMgmrInf#instantiateVnf(com.nokia.vfcadaptor.cbam.bo.CBAMInstantiateVnfRequest, java.lang.String)
133          */
134         public CBAMInstantiateVnfResponse instantiateVnf(CBAMInstantiateVnfRequest cbamRequest, String vnfInstanceId) throws ClientProtocolException, IOException {
135                 String httpPath = String.format(CommonConstants.CbamInstantiateVnfPath, vnfInstanceId);
136                 RequestMethod method = RequestMethod.POST;
137                         
138                 HttpResult httpResult = operateCbamHttpTask(cbamRequest, httpPath, method);
139                 String responseStr = httpResult.getContent();
140                 
141                 logger.info("CbamMgmrImpl -> instantiateVnf, responseStr is " + responseStr);
142                 int code = httpResult.getStatusCode();
143                 if(code == 202) {
144                         logger.info("CbamMgmrImpl -> instantiateVnf success " );
145                 }else {
146                         logger.error("CbamMgmrImpl -> instantiateVnf error " );
147                 }
148                 CBAMInstantiateVnfResponse response = gson.fromJson(responseStr, CBAMInstantiateVnfResponse.class);
149                 
150                 return response;
151         }
152         
153         public CBAMTerminateVnfResponse terminateVnf(CBAMTerminateVnfRequest cbamRequest, String vnfInstanceId) throws ClientProtocolException, IOException {
154                 String httpPath = String.format(CommonConstants.CbamTerminateVnfPath, vnfInstanceId);
155                 RequestMethod method = RequestMethod.POST;
156                 
157                 HttpResult httpResult = operateCbamHttpTask(cbamRequest, httpPath, method);
158                 String responseStr = httpResult.getContent();
159                 
160                 logger.info("CbamMgmrImpl -> terminateVnf, responseStr is " + responseStr);
161                 int code = httpResult.getStatusCode();
162                 if(code == 202) {
163                         logger.info("CbamMgmrImpl -> terminateVnf  sucess " );
164                 }else {
165                         logger.error("CbamMgmrImpl -> terminateVnf error " );
166                 }
167                 CBAMTerminateVnfResponse response = gson.fromJson(responseStr, CBAMTerminateVnfResponse.class);
168                 
169                 return response;
170         }
171         
172         public void deleteVnf(String vnfInstanceId) throws ClientProtocolException, IOException {
173                 String httpPath = String.format(CommonConstants.CbamDeleteVnfPath, vnfInstanceId);
174                 RequestMethod method = RequestMethod.DELETE;
175                 HttpResult httpResult = operateCbamHttpTask(null, httpPath, method);
176                 
177                 int code = httpResult.getStatusCode();
178                 if(code == 204) {
179                         logger.info("CbamMgmrImpl -> deleteVnf success.");
180                 }else {
181                     logger.error("CbamMgmrImpl -> deleteVnf error. detail info is " + httpResult.getContent());
182                 }
183                 
184         }
185         
186         public CBAMScaleVnfResponse scaleVnf(CBAMScaleVnfRequest cbamRequest, String vnfInstanceId) throws ClientProtocolException, IOException {
187                 String httpPath = String.format(CommonConstants.CbamScaleVnfPath, vnfInstanceId);
188                 RequestMethod method = RequestMethod.POST;
189                         
190                 HttpResult httpResult = operateCbamHttpTask(cbamRequest, httpPath, method);
191                 String responseStr = httpResult.getContent();
192                 int code = httpResult.getStatusCode();
193                 if(code == 202) {
194                         logger.info("CbamMgmrImpl -> scaleVnf success.");
195                 }else {
196                     logger.error("CbamMgmrImpl -> scaleVnf error. " );
197                 }
198                 CBAMScaleVnfResponse response = gson.fromJson(responseStr, CBAMScaleVnfResponse.class);
199                 
200                 return response;
201         }
202
203         public CBAMHealVnfResponse healVnf(CBAMHealVnfRequest cbamRequest, String vnfInstanceId) throws ClientProtocolException, IOException {
204                 String httpPath = String.format(CommonConstants.CbamHealVnfPath, vnfInstanceId);
205                 RequestMethod method = RequestMethod.POST;
206                         
207                 HttpResult httpResult = operateCbamHttpTask(cbamRequest, httpPath, method);
208                 String responseStr = httpResult.getContent();
209                 
210                 logger.info("CbamMgmrImpl -> healVnf, responseStr is " + responseStr);
211                 int code = httpResult.getStatusCode();
212                 if(code == 202) {
213                         logger.info("CbamMgmrImpl -> healVnf success.");
214                 }else {
215                     logger.error("CbamMgmrImpl -> healVnf error. " );
216                 }
217                 CBAMHealVnfResponse response = gson.fromJson(responseStr, CBAMHealVnfResponse.class);
218                 
219                 return response;
220         }
221         
222         public CBAMQueryVnfResponse queryVnf(String vnfInstanceId) throws ClientProtocolException, IOException {
223                 String httpPath = String.format(CommonConstants.CbamQueryVnfPath, vnfInstanceId);
224                 RequestMethod method = RequestMethod.GET;
225                 
226                 HttpResult httpResult = operateCbamHttpTask(null, httpPath, method);
227                 String responseStr = httpResult.getContent();
228                 
229                 logger.info("CbamMgmrImpl -> queryVnf, responseStr is " + responseStr);
230                 int code = httpResult.getStatusCode();
231                 if(code == 200) {
232                         logger.info("CbamMgmrImpl -> queryVnf success.");
233                 }else {
234                     logger.error("CbamMgmrImpl -> queryVnf error. " );
235                 }
236                 
237                 CBAMQueryVnfResponse response = gson.fromJson(responseStr, CBAMQueryVnfResponse.class);
238                 
239                 return response;
240         }
241         
242         public List<VnfcResourceInfo> queryVnfcResource(String vnfInstanceId) throws ClientProtocolException, IOException {
243                 String httpPath = String.format(CommonConstants.CbamQueryVnfcResourcePath, vnfInstanceId);
244                 RequestMethod method = RequestMethod.GET;
245                 
246                 HttpResult httpResult = operateCbamHttpTask(null, httpPath, method);
247                 String responseStr = httpResult.getContent();
248                 
249                 logger.info("CbamMgmrImpl -> queryVnfcResource, responseStr is " + responseStr);
250                 int code = httpResult.getStatusCode();
251                 if(code == 200) {
252                         logger.info("CbamMgmrImpl -> queryVnfcResource success.");
253                 }else {
254                         logger.error("CbamMgmrImpl -> queryVnfcResource error. " );
255                 }
256                 List<VnfcResourceInfo> response = gson.fromJson(responseStr, new TypeToken<List<VnfcResourceInfo>>(){}.getType());;
257                 
258                 return response;
259         }
260
261         public HttpResult operateCbamHttpTask(Object httpBodyObj, String httpPath, RequestMethod method) throws ClientProtocolException, IOException {
262                 String token = null;
263                 try {
264                         token = retrieveToken();
265                 } catch (JSONException e) {
266                         logger.error("retrieveTokenError ", e);
267                 }
268         
269                 String url= adaptorEnv.getCbamApiUriFront() + httpPath;
270                 
271                 HashMap<String, String> map = new HashMap<>();
272                 map.put(CommonConstants.AUTHORIZATION, "bearer " + token);
273                 map.put(CommonConstants.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
274                 
275                 return httpClientProcessor.process(url, method, map, gson.toJson(httpBodyObj));
276         }
277
278         public CBAMQueryOperExecutionResponse queryOperExecution(String execId) throws ClientProtocolException, IOException{
279                 String httpPath = String.format(CommonConstants.CbamGetOperStatusPath, execId);
280                 RequestMethod method = RequestMethod.GET;
281                 
282                 HttpResult httpResult = operateCbamHttpTask(null, httpPath, method);
283                 String responseStr = httpResult.getContent();
284                 
285                 logger.info("CbamMgmrImpl -> CBAMQueryOperExecutionResponse, responseStr is " + responseStr);
286                 
287                 int code = httpResult.getStatusCode();
288                 if(code == 200) {
289                         logger.info("CbamMgmrImpl -> CBAMQueryOperExecutionResponse, success" );
290                 }else if(code == 202) {
291                         logger.info("CbamMgmrImpl -> CBAMQueryOperExecutionResponse, ongoing" );
292                 }else {
293                         logger.error("CbamMgmrImpl -> CBAMQueryOperExecutionResponse, error" );
294                 }
295                 
296                 CBAMQueryOperExecutionResponse response = gson.fromJson(responseStr, CBAMQueryOperExecutionResponse.class);
297                 
298                 return response;
299         }
300
301         public void setAdaptorEnv(AdaptorEnv adaptorEnv) {
302                 this.adaptorEnv = adaptorEnv;
303         }
304
305         @Override
306         public void uploadVnfPackage(String cbamPackageFilePath) throws ClientProtocolException, IOException {
307                 String httpPath = CommonConstants.CbamUploadVnfPackagePath;
308                 RequestMethod method = RequestMethod.POST;
309                 
310                 HttpResult httpResult = operateCbamHttpUploadTask(cbamPackageFilePath, httpPath, method);
311                 String responseStr = httpResult.getContent();
312                 
313                 logger.info("CbamMgmrImpl -> uploadVnfPackage, statusCode is " + httpResult.getStatusCode() + ", cause is " + httpResult.getStatusCause() + ". responseStr is " + responseStr);
314                 
315                 int code = httpResult.getStatusCode();
316                 if(code == 200) {
317                         logger.info("CbamMgmrImpl -> uploadVnfPackage, success" );
318                         logger.info("Upload vnf package " + cbamPackageFilePath + " to CBAM is successful.");
319                 }else {
320                         logger.error("CbamMgmrImpl -> uploadVnfPackage, error" );
321                 }
322         }
323
324         public HttpResult operateCbamHttpUploadTask(String filePath, String httpPath, RequestMethod method) throws ClientProtocolException, IOException {
325                 String token = null;
326                 try {
327                         token = retrieveToken();
328                 } catch (JSONException e) {
329                         logger.error("retrieveTokenError ", e);
330                 }
331                 String url = adaptorEnv.getCbamApiUriFront() + httpPath;
332                 logger.info("start to upload file.");
333                 String command =  "/usr/bin/curl --insecure -X POST -H \"Authorization: bearer " + token + "\" --form content=@" + filePath + " " + url;
334                 StringBuffer respStr = execCommand(command);
335                 
336 //              HashMap<String, String> map = new HashMap<>();
337 //              map.put(CommonConstants.AUTHORIZATION, "bearer " + token);
338 //              map.put(CommonConstants.CONTENT_TYPE, "multipart/form-data, boundary=---CFSGSSGGSGdssdfsdhd---");
339 //              byte[] fileBytes = CommonUtil.getBytes(filePath);
340 //              logger.info("CbamMgmrImpl -> operateCbamHttpUploadTask, url is " + url);
341 //              logger.info("CbamMgmrImpl -> operateCbamHttpUploadTask, token is " + token);
342 //              logger.info("CbamMgmrImpl -> operateCbamHttpUploadTask, bodyPostStr byte lenth is " + fileBytes.length);
343                 
344 //              return httpClientProcessor.processBytes(url, method, map, fileBytes);
345                 
346                 HttpResult hResult = new HttpResult();
347                 hResult.setStatusCause(respStr.toString());
348                 hResult.setContent(respStr.toString());
349                 hResult.setStatusCode(200);
350                 return hResult;
351                 
352 //              String charset = "UTF-8";
353 //        File uploadFile1 = new File(filePath);
354 //        String requestURL = url;
355 //        HttpResult result = new HttpResult();
356 // 
357 //        try {
358 //            MultipartUtility multipart = new MultipartUtility(requestURL, charset);
359 //             
360 //            multipart.addHeaderField("User-Agent", "CodeJava");
361 //            multipart.addHeaderField(CommonConstants.AUTHORIZATION, "bearer " + token);
362 //             
363 //            multipart.addFilePart("fileUpload", uploadFile1);
364 // 
365 //            List<String> response = multipart.finish();
366 //             
367 //            result.setContent(Arrays.deepToString(response.toArray(new String[0])));
368 //            result.setStatusCode(200);
369 //        } catch (Exception ex) {
370 //              logger.error("CbamMgmrImpl -> operateCbamHttpUploadTask, error ", ex);
371 //            result.setStatusCode(500);
372 //        }
373 //        
374 //        return result;
375         }
376
377         private StringBuffer execCommand(String command) {
378                 logger.info("CbamMgmrImpl -> execCommand, command is " + command);
379                 StringBuffer respStr = new StringBuffer("\r\n");
380                 try {
381                         String os = System.getProperty("os.name"); 
382                         String[] cmd = {"cmd", "/c", command};
383                         if(!os.toLowerCase().startsWith("win")){
384                                 cmd = new String[]{"/bin/sh","-c", command};
385                         }  
386                         Process process = Runtime.getRuntime().exec(cmd);
387                         Thread t=new Thread(new InputStreamRunnable(process.getErrorStream(),"ErrorStream"));  
388             t.start(); 
389             Thread.sleep(3000);
390              InputStream fis=process.getInputStream();    
391              InputStreamReader isr=new InputStreamReader(fis);  
392              
393              BufferedReader br=new BufferedReader(isr);    
394              String line = null;
395             while((line = br.readLine())!=null)    
396              {    
397                 respStr.append(line + "\r\n");    
398              }
399             respStr.append("\r\n");
400             process.waitFor();
401             fis.close();
402             isr.close();
403             process.destroy();
404             logger.info("operateCbamHttpUploadTask respStr is: " + respStr);
405                 } catch (Exception e) {
406                         logger.error("operateCbamHttpUploadTask error", e);
407                 }
408                 return respStr;
409         }
410         
411 //      public static String postByHttps(String url, String body, Object contentType) {
412 //          String result = "";
413 //          Protocol https = new Protocol("https", new HTTPSSecureProtocolSocketFactory(), 443);
414 //          Protocol.registerProtocol("https", https);
415 //          PostMethod post = new PostMethod(url);
416 //          HttpClient client = new HttpClient();
417 //          try {
418 //              post.setRequestHeader("Content-Type", contentType);
419 //              post.setRequestBody(body);
420 //              client.executeMethod(post);
421 //              result = post.getResponseBodyAsString();
422 //              Protocol.unregisterProtocol("https");
423 //              return result;
424 //          } catch (HttpException e) {
425 //              e.printStackTrace();
426 //          } catch (IOException e) {
427 //              e.printStackTrace();
428 //          } catch(Exception e) {
429 //              e.printStackTrace();
430 //          }
431 //       
432 //          return "error";
433 //      }
434
435         public HttpClientProcessorInf getHttpClientProcessor() {
436                 return httpClientProcessor;
437         }
438
439         public void setHttpClientProcessor(HttpClientProcessorInf httpClientProcessor) {
440                 this.httpClientProcessor = httpClientProcessor;
441         }
442 }