X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=huawei%2Fvnfmadapter%2FVnfmadapterService%2Fservice%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fvfc%2Fnfvo%2Fvnfm%2Fsvnfm%2Fvnfmadapter%2Fservice%2Fcsm%2Fvnf%2FScaleManager.java;fp=huawei%2Fvnfmadapter%2FVnfmadapterService%2Fservice%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fvfc%2Fnfvo%2Fvnfm%2Fsvnfm%2Fvnfmadapter%2Fservice%2Fcsm%2Fvnf%2FScaleManager.java;h=7b0a4db65d25909b004f4c21cca38171ef38f28b;hb=427ff5037a70052a524095fb6a1cba53dfb8e8f5;hp=0000000000000000000000000000000000000000;hpb=89ad26af6134b817ac2a04eb861d7c5a68f9885d;p=vfc%2Fnfvo%2Fdriver%2Fvnfm%2Fsvnfm.git diff --git a/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/onap/vfc/nfvo/vnfm/svnfm/vnfmadapter/service/csm/vnf/ScaleManager.java b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/onap/vfc/nfvo/vnfm/svnfm/vnfmadapter/service/csm/vnf/ScaleManager.java new file mode 100644 index 00000000..7b0a4db6 --- /dev/null +++ b/huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/onap/vfc/nfvo/vnfm/svnfm/vnfmadapter/service/csm/vnf/ScaleManager.java @@ -0,0 +1,154 @@ +/* + * Copyright 2018 Huawei Technologies Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.csm.vnf; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.restclient.SystemEnvVariablesFactory; +import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.Constant; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import net.sf.json.JSONArray; +import net.sf.json.JSONException; +import net.sf.json.JSONObject; + +/** + *
+ *

+ *

+ * + * @author + * @version VFC 1.0 2018年5月17日 + */ +public abstract class ScaleManager { + + private static final Logger LOG = LoggerFactory.getLogger(ScaleManager.class); + + private static String VM_IDS_PATH = + SystemEnvVariablesFactory.getInstance().getAppRoot() + System.getProperty(Constant.FILE_SEPARATOR) + "etc" + + System.getProperty(Constant.FILE_SEPARATOR) + "vnfpkginfo" + + System.getProperty(Constant.FILE_SEPARATOR) + "vms" + System.getProperty(Constant.FILE_SEPARATOR); + + public static void beforeScaleOut(JSONObject queryVms, String vnfId) { + try { + JSONArray vms = queryVms.getJSONObject("data").getJSONArray("vms"); + writeVmIdsToFile(vnfId, vms); + } catch(JSONException e) { + LOG.error("function=beforeScaleOut, msg=recode current vms JSONException"); + } + } + + public static JSONArray beforeScaleIn(JSONObject queryVms, String vnfId) { + JSONArray vmList = new JSONArray(); + try { + JSONArray vms = queryVms.getJSONObject("data").getJSONArray("vms"); + JSONArray recodeVms = readVmIdsFile(vnfId); + if(!recodeVms.isEmpty()) { + for(int i = 0; i < vms.size(); i++) { + JSONObject obj = vms.getJSONObject(i); + String vmId = obj.getString("id"); + if(isScaleOutVm(recodeVms, vmId)) { + JSONObject vmIdObj = new JSONObject(); + vmIdObj.put("vm_id", vmId); + vmList.add(vmIdObj); + } + } + } + } catch(JSONException e) { + LOG.error("function=beforeScaleIn, msg=recode current vms JSONException"); + } + return vmList; + } + + private static boolean isScaleOutVm(JSONArray recodeVms, String vmId) { + for(int i = 0; i < recodeVms.size(); i++) { + JSONObject obj = recodeVms.getJSONObject(i); + String oldVmId = obj.getString("id"); + if(oldVmId.equalsIgnoreCase(vmId)) { + return false; + } + } + return true; + } + + private static String getVmIdsFilePath(String vnfId) { + return VM_IDS_PATH + vnfId + ".json"; + } + + private static void writeVmIdsToFile(String vnfId, JSONArray vms) { + String filePath = getVmIdsFilePath(vnfId); + FileOutputStream outStream = null; + try { + File destFile = FileUtils.getFile(filePath); + + File parentFile = destFile.getParentFile(); + if(parentFile != null) { + if(!parentFile.mkdirs() && !parentFile.isDirectory()) { + throw new IOException("Destination '" + parentFile + "' directory cannot be created"); + } + } + if(!destFile.exists()) { + destFile.createNewFile(); + } + outStream = new FileOutputStream(destFile); + outStream.write(vms.toString().getBytes()); + } catch(IOException e) { + LOG.error("function=writeVmIdsToFile, msg=write vms to file ioexception, e : {}", e); + } finally { + IOUtils.closeQuietly(outStream); + } + } + + private static JSONArray readVmIdsFile(String vnfId) { + String filePath = getVmIdsFilePath(vnfId); + InputStream ins = null; + BufferedInputStream bins = null; + String fileContent = ""; + try { + ins = FileUtils.openInputStream(FileUtils.getFile(filePath)); + bins = new BufferedInputStream(ins); + + byte[] contentByte = new byte[ins.available()]; + int num = bins.read(contentByte); + + + if(num > 0) { + fileContent = new String(contentByte); + } + + if(StringUtils.isNotEmpty(fileContent)) { + return JSONArray.fromObject(fileContent); + } + } catch(IOException e) { + LOG.error("function=readVmIdsFile, msg=read vms from file IOException, filePath : {}", filePath); + } catch(JSONException e) { + LOG.error("function=readVmIdsFile, msg=read vms from file JSONException, fileContent : {}", fileContent); + } finally { + IOUtils.closeQuietly(bins); + IOUtils.closeQuietly(ins); + } + return new JSONArray(); + } +}