fix:The query mode and operation mode are optimized 98/125298/1
authorzhaoyehua <zhaoyh6@asiainfo.com>
Mon, 25 Oct 2021 06:56:56 +0000 (14:56 +0800)
committer’zhaoyh6‘ <zhaoyh6@asiainfo.com>
Mon, 25 Oct 2021 06:59:26 +0000 (14:59 +0800)
Issue-ID: USECASEUI-605
Signed-off-by: ’zhaoyh6‘ <zhaoyh6@asiainfo.com>
Change-Id: Ib4c81d42897e420b68c65686ed3efe5d985b3d62
Signed-off-by: ’zhaoyh6‘ <zhaoyh6@asiainfo.com>
server/src/main/java/org/onap/usecaseui/server/bean/intent/InstancePerformance.java
server/src/main/java/org/onap/usecaseui/server/conf/intent/IntentScheduleTask.java
server/src/main/java/org/onap/usecaseui/server/controller/IntentController.java
server/src/main/java/org/onap/usecaseui/server/service/intent/IntentApiService.java
server/src/main/java/org/onap/usecaseui/server/service/intent/IntentInstanceService.java
server/src/main/java/org/onap/usecaseui/server/service/intent/impl/IntentInstanceServiceImpl.java
server/src/main/java/org/onap/usecaseui/server/service/intent/impl/IntentServiceImpl.java
server/src/test/java/org/onap/usecaseui/server/controller/IntentControllerTest.java
standalone/src/main/assembly/resources/dbscripts/postgres/uui_create_table.sql

index 677f86f..25ddb6f 100644 (file)
@@ -35,14 +35,14 @@ public class InstancePerformance implements Serializable {
     private String resourceInstanceId;
 
     @Column(name = "bandwidth")
-    private String bandwidth;
+    private int bandwidth;
 
-    @Temporal(TemporalType.DATE)
+    @Temporal(TemporalType.TIMESTAMP)
     @Column(name = "date")
     private Date date;
 
     @Column(name = "max_bandwidth")
-    private String maxBandwidth;
+    private int maxBandwidth;
 
 
     public InstancePerformance() {
@@ -73,11 +73,11 @@ public class InstancePerformance implements Serializable {
         this.resourceInstanceId = resourceInstanceId;
     }
 
-    public String getBandwidth() {
+    public int getBandwidth() {
         return bandwidth;
     }
 
-    public void setBandwidth(String bandwidth) {
+    public void setBandwidth(int bandwidth) {
         this.bandwidth = bandwidth;
     }
 
@@ -89,11 +89,11 @@ public class InstancePerformance implements Serializable {
         this.date = date;
     }
 
-    public String getMaxBandwidth() {
+    public int getMaxBandwidth() {
         return maxBandwidth;
     }
 
-    public void setMaxBandwidth(String maxBandwidth) {
+    public void setMaxBandwidth(int maxBandwidth) {
         this.maxBandwidth = maxBandwidth;
     }
 }
\ No newline at end of file
index f35edf4..4f16880 100644 (file)
@@ -18,6 +18,7 @@ package org.onap.usecaseui.server.conf.intent;
 import org.onap.usecaseui.server.service.intent.IntentInstanceService;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
 
 import javax.annotation.Resource;
 import java.io.IOException;
@@ -30,11 +31,11 @@ public class IntentScheduleTask {
     @Resource(name = "IntentInstanceService")
     private IntentInstanceService intentInstanceService;
 
-//    @Scheduled(cron = "0/20 * * * * ?")
+    @Scheduled(cron = "0/20 * * * * ?")
     public void getIntentInstanceCompleteness() {
-        intentInstanceService.getIntentInstanceProgress();
+        intentInstanceService.getIntentInstanceCreateStatus();
     }
-//    @Scheduled(cron = "0/20 * * * * ?")
+    @Scheduled(cron = "0/20 * * * * ?")
     public void getIntentInstanceBandwidth() throws IOException {
         intentInstanceService.getIntentInstanceBandwidth();
     }
index 4a324a6..4dbed7b 100644 (file)
@@ -21,6 +21,7 @@ import java.text.ParseException;
 import java.util.*;
 import javax.annotation.Resource;
 
+import com.alibaba.fastjson.JSONArray;
 import org.apache.commons.collections.MapUtils;
 import org.onap.usecaseui.server.bean.HttpResponseResult;
 import org.onap.usecaseui.server.bean.intent.IntentInstance;
@@ -51,7 +52,13 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 public class IntentController {
     private final Logger logger = LoggerFactory.getLogger(IntentController.class);
     private final static String UPLOADPATH = "/home/uui/upload/";
-    private final static String NLPLOADPATH = "/home/run/bert-master/upload/";
+    private final static String NLPLOADPATH = "/home/uuihome/uui/bert-master/upload/";
+    private final static String[] QUESTIONS_CCVPN = {"bandwidth", "access point", "cloud point"};
+    private final static String[] QUESTIONS_5GS = {"Communication Service Name", "Max Number of UEs", "Data Rate Downlink", "Latency", "Data Rate Uplink", "Resource Sharing Level", "Mobility", "Area"};
+
+    private final static String MODEL_TYPE_CCVPN = "ccvpn";
+    private final static String MODEL_TYPE_5GS = "5gs";
+
 
     @Resource(name = "IntentService")
     private IntentService intentService;
@@ -232,11 +239,12 @@ public class IntentController {
         if (modelType == null || !modelType.equals(activeModelType)) {
             throw new RuntimeException("The active model file does not support parsing the current text");
         }
+        String[] questions = getQuestions(modelType);
 
         String url = "http://uui-nlp:33011/api/online/predict";
         HashMap<String, String> headers = new HashMap<>();
         String bodyStr = "{\"title\": \"predict\", \"text\": \"" + text
-                +  "\"}";
+                +  "\", \"questions\":" + new JSONArray(Arrays.asList(questions)).toJSONString() + "}";
         logger.info("request body: " + bodyStr);
 
         HttpResponseResult result = HttpUtil.sendPostRequestByJson(url, headers, bodyStr);
@@ -249,12 +257,32 @@ public class IntentController {
 
         JSONObject map2 = new JSONObject();
 
-        for (Map.Entry<String, Object> entry:map.entrySet()) {
-            logger.debug(entry.getKey()+","+entry.getValue());
-            String key = tranlateFieldName(entry.getKey());
-            String valueStr = (String) entry.getValue();
-            String value = intentService.calcFieldValue(key, valueStr);
-            map2.put(key, value);
+        if (MODEL_TYPE_CCVPN.equals(modelType)) {
+
+            String bandWidth = map.getString("bandwidth");
+            String accessPoint = map.getString("access point");
+            String cloudPoint = map.getString("cloud point");
+            String instanceId = getUUID();
+            String accessPointAlias = intentInstanceService.formatAccessPoint(accessPoint);
+            String bandwidthAlias = intentInstanceService.formatBandwidth(bandWidth);
+            String cloudPointAlias = intentInstanceService.formatCloudPoint(cloudPoint);
+
+            Map<String, Object> accessPointOne = new HashMap<>();
+            accessPointOne.put("name", accessPointAlias);
+            accessPointOne.put("bandwidth", bandwidthAlias);
+            map2.put("name", "");
+            map2.put("instanceId", instanceId);
+            map2.put("accessPointOne", accessPointOne);
+            map2.put("cloudPointName", cloudPointAlias);
+        }
+        else {
+            for (Map.Entry<String, Object> entry:map.entrySet()) {
+                logger.debug(entry.getKey()+","+entry.getValue());
+                String key = tranlateFieldName(entry.getKey());
+                String valueStr = (String) entry.getValue();
+                String value = intentService.calcFieldValue(key, valueStr);
+                map2.put(key, value);
+            }
         }
 
         logger.info("translate result: " + map2.toJSONString());
@@ -262,6 +290,13 @@ public class IntentController {
         return map2.toJSONString();
     }
 
+    private String[] getQuestions(String modelType) {
+        if (MODEL_TYPE_CCVPN.equals(modelType)) {
+            return QUESTIONS_CCVPN;
+        } else {
+            return QUESTIONS_5GS;
+        }
+    }
 
 
     private static String tranlateFieldName(String key){
@@ -270,14 +305,14 @@ public class IntentController {
             return ret;
 
         HashMap<String, String> map = new HashMap<>();
-        map.put("Communication service","name");
-        map.put("Maximum user devices","maxNumberofUEs");
-        map.put("Downlink data rate","expDataRateDL");
-        map.put("Time delay","latency");
-        map.put("Uplink data rate","expDataRateUL");
-        map.put("Resource","resourceSharingLevel");
+        map.put("Communication Service Name","name");
+        map.put("Max Number of UEs","maxNumberofUEs");
+        map.put("Data Rate Downlink","expDataRateDL");
+        map.put("Latency","latency");
+        map.put("Data Rate Uplink","expDataRateUL");
+        map.put("Resource Sharing Level","resourceSharingLevel");
         map.put("Mobility","uEMobilityLevel");
-        map.put("Region","coverageArea");
+        map.put("Area","coverageArea");
 
         ret = map.get(key.trim());
         return ret;
@@ -288,16 +323,22 @@ public class IntentController {
     @GetMapping(value = {"/getInstanceId"},
             produces = "application/json")
     public JSONObject getInstanceId() {
+        String instanceId = getUUID();
+        JSONObject result = new JSONObject();
+        result.put("instanceId", instanceId);
+        return result;
+    }
+
+    private String getUUID() {
         int first = new Random(10).nextInt(8) + 1;
         int hashCodeV = UUID.randomUUID().toString().hashCode();
-        if (hashCodeV < 0) {//有可能是负数
+        if (hashCodeV < 0) {
             hashCodeV = -hashCodeV;
         }
         String instanceId = first + String.format("%015d", hashCodeV);
-        JSONObject result = new JSONObject();
-        result.put("instanceId", instanceId);
-        return result;
+        return instanceId;
     }
+
     @IntentResponseBody
     @ResponseBody
     @PostMapping (value = {"/getInstanceList"},consumes = MediaType.APPLICATION_JSON_VALUE,
@@ -328,6 +369,7 @@ public class IntentController {
         intentInstance.setCloudPointName(cloudPointName);
         intentInstance.setAccessPointOneName(accessPointOneName);
         intentInstance.setAccessPointOneBandWidth(accessPointOneBandWidth);
+        intentInstance.setStatus("0");
 
         int flag = intentInstanceService.createIntentInstance(intentInstance);
 
@@ -355,11 +397,8 @@ public class IntentController {
     }
 
     @IntentResponseBody
-    @ResponseBody
-    @PostMapping(value = {"/deleteIntentInstance"}, consumes = MediaType.APPLICATION_JSON_VALUE,
-            produces = "application/json; charset=utf-8")
-    public Object deleteIntentInstance(@RequestBody Object body) {
-        String instanceId= (String) ((Map)body).get("instanceId");
+    @DeleteMapping(value = {"/deleteIntentInstance"}, produces = "application/json; charset=utf-8")
+    public Object deleteIntentInstance(@RequestParam String instanceId) {
         intentInstanceService.deleteIntentInstance(instanceId);
         return "ok";
     }
@@ -397,4 +436,14 @@ public class IntentController {
     public Object queryAccessNodeInfo() throws IOException{
         return intentInstanceService.queryAccessNodeInfo();
     }
+
+
+    @IntentResponseBody
+    @ResponseBody
+    @PostMapping(value = {"/getInstanceStatus"}, consumes = MediaType.APPLICATION_JSON_VALUE,
+            produces = "application/json; charset=utf-8")
+    public Object getInstanceStatus(@RequestBody Object body) {
+        JSONArray ids= new JSONObject((Map)body).getJSONArray("ids");
+        return intentInstanceService.getInstanceStatus(ids);
+    }
 }
index 2c63647..62f2381 100644 (file)
@@ -57,11 +57,20 @@ public interface IntentApiService {
     @GET("/aai/v24/business/customers/customer/IBNCustomer/service-subscriptions/service-subscription/IBN/service-instances/service-instance/{resource-service-id}/metadata")
     Call<JSONObject> getInstanceBandwidth(@Path("resource-service-id") String resourceServiceId);
 
+    @Headers({
+            "X-TransactionId: 9999",
+            "X-FromAppId: MSO",
+            "Authorization: Basic QUFJOkFBSQ==",
+            "Accept: application/json"
+    })
+    @GET("/aai/v24/business/customers/customer/IBNCustomer/service-subscriptions/service-subscription/IBN/service-instances/service-instance/{resource-service-id}")
+    Call<JSONObject> getInstanceInfo(@Path("resource-service-id") String resourceServiceId);
+
     @Headers({
             "Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==",
             "Accept: application/json"
     })
-    @DELETE("/so/infra/serviceIntent/v1/delete")
+    @HTTP(method="DELETE", path="/so/infra/serviceIntent/v1/delete", hasBody = true)
     Call<JSONObject> deleteIntentInstance(@Body RequestBody body);
 
     @Headers({
index dfc8683..ddbcb6e 100644 (file)
@@ -15,6 +15,8 @@
  */
 package org.onap.usecaseui.server.service.intent;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import org.onap.usecaseui.server.bean.intent.IntentInstance;
 import org.onap.usecaseui.server.util.Page;
 
@@ -26,6 +28,7 @@ public interface IntentInstanceService {
     Page<IntentInstance> queryIntentInstance(IntentInstance intentInstance, int currentPage, int pageSize);
     int createIntentInstance(IntentInstance intentInstance);
     void getIntentInstanceProgress();
+    void getIntentInstanceCreateStatus();
     List<IntentInstance> getFinishedInstanceInfo();
     void getIntentInstanceBandwidth() throws IOException;
 
@@ -38,4 +41,12 @@ public interface IntentInstanceService {
     Map<String, Object> queryInstancePerformanceData(String instanceId);
 
     Object queryAccessNodeInfo() throws IOException;
+
+    JSONObject getInstanceStatus(JSONArray ids);
+
+    String formatBandwidth(String strValue);
+
+    String formatCloudPoint(String cloudPoint);
+
+    String formatAccessPoint(String accessPoint);
 }
index fe8ee64..6b1e96c 100644 (file)
@@ -42,6 +42,8 @@ import javax.transaction.Transactional;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 @Service("IntentInstanceService")
 @Transactional
@@ -58,6 +60,12 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
 
     private SOService soService;
 
+    private final static int MAX_BANDWIDTH = 6000;
+    private final static int MIN_BANDWIDTH = 100;
+
+    private final static List<String> GB_COMPANY = Arrays.asList(new String[] {"gbps", "gb"});
+    private final static List<String> MB_COMPANY = Arrays.asList(new String[] {"mbps", "mb"});
+
     public IntentInstanceServiceImpl() {
         this(RestfulServices.create(IntentApiService.class),RestfulServices.create(SOService.class));
     }
@@ -106,6 +114,8 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
         } catch (Exception e) {
             logger.error("exception occurred while performing AlarmsHeaderServiceImpl queryAlarmsHeader. Details:" + e.getMessage());
             return null;
+        } finally {
+            session.close();
         }
     }
 
@@ -134,11 +144,15 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
         } catch (Exception e) {
             logger.error("exception occurred while performing IntentInstanceServiceImpl getAllCount. Details:" + e.getMessage());
             return -1;
+        } finally {
+            session.close();
         }
     }
 
     @Override
     public int createIntentInstance(IntentInstance intentInstance) {
+        Session session = getSession();
+        Transaction tx = null;
         try{
 
             if (null == intentInstance){
@@ -146,17 +160,25 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
                 return 0;
             }
             String jobId = createIntentInstanceToSO(intentInstance);
+            if (null == jobId){
+                logger.error("create Instance error:jobId is null");
+                return 0;
+            }
             intentInstance.setJobId(jobId);
             intentInstance.setResourceInstanceId("cll-"+intentInstance.getInstanceId());
-            Session session = getSession();
-            Transaction tx = session.beginTransaction();
+
+            tx = session.beginTransaction();
             session.save(intentInstance);
             tx.commit();
-//            session.flush();
             return 1;
         } catch (Exception e) {
+            if (tx != null) {
+                tx.rollback();
+            }
             logger.error("Details:" + e.getMessage());
             return 0;
+        } finally {
+            session.close();
         }
     }
 
@@ -207,7 +229,24 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
                 if (progress >=100) {
                     instance.setStatus("1");
                 }
-                instance.setProgress(progress);
+            }
+            catch (Exception e) {
+                logger.info("get progress exception:"+e);
+            }
+        }
+        saveProgress(instanceList);
+
+    }
+    @Override
+    public void getIntentInstanceCreateStatus() {
+        List<IntentInstance> instanceList = getInstanceByFinishedFlag("0");
+        for (IntentInstance instance: instanceList) {
+            try {
+
+                int flag = getCreateStatusByJobId(instance);
+                if (flag > 0) {
+                    instance.setStatus(flag + "");
+                }
             }
             catch (Exception e) {
                 logger.info("get progress exception:"+e);
@@ -218,14 +257,16 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
     }
 
     private void saveProgress(List<IntentInstance> instanceList) {
-        Transaction tx = null;
         if(instanceList == null || instanceList.isEmpty()) {
             return;
         }
-        try(Session session = getSession()) {
+        Session session = getSession();
+        Transaction tx = null;
+        try {
             tx = session.beginTransaction();
             for (IntentInstance instance : instanceList) {
-                session.save(instance);
+                session.update(instance);
+                session.flush();
             }
             tx.commit();
             logger.info("update progress ok");
@@ -236,12 +277,35 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
             }
             logger.error("update progress exception:"+e);
 
+        } finally {
+            session.close();
         }
     }
 
     private int getProgressByJobId(IntentInstance instance) throws IOException {
         Response<OperationProgressInformation> response = soService.queryOperationProgress(instance.getResourceInstanceId(), instance.getJobId()).execute();
-        return response.body().getOperationStatus().getProgress();
+        logger.debug(response.toString());
+        if (response.isSuccessful()) {
+            return response.body().getOperationStatus().getProgress();
+        }
+        return -1;
+    }
+
+    private int getCreateStatusByJobId(IntentInstance instance) throws IOException {
+        if (instance == null || instance.getResourceInstanceId() == null) {
+            return -1;
+        }
+        Response<JSONObject> response = intentApiService.getInstanceInfo(instance.getResourceInstanceId()).execute();
+        logger.debug(response.toString());
+        if (response.isSuccessful()) {
+            String status = response.body().getString("orchestration-status");
+            if ("created".equals(status)) {
+                return 1;
+            }
+            return 0;
+        }
+        logger.error("getIntentInstance Create Statue Error:" + response.toString());
+        return -1;
     }
 
     private List<IntentInstance> getInstanceByFinishedFlag(String flag) {
@@ -256,6 +320,8 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
         } catch (Exception e) {
             logger.error("exception occurred while performing IntentInstanceServiceImpl getNotFinishedJobId. Details:" + e.getMessage());
             return null;
+        } finally {
+            session.close();
         }
     }
 
@@ -273,6 +339,8 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
         } catch (Exception e) {
             logger.error("exception occurred while performing IntentInstanceServiceImpl getNotFinishedJobId. Details:" + e.getMessage());
             return null;
+        } finally {
+            session.close();
         }
     }
 
@@ -282,6 +350,10 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
         for (IntentInstance instance : instanceList) {
             String serviceInstanceId = instance.getResourceInstanceId();
             Response<JSONObject> response = intentApiService.getInstanceNetworkInfo(serviceInstanceId).execute();
+            if (!response.isSuccessful()) {
+                logger.error("get Intent-Instance Bandwidth error:" + response.toString());
+                continue;
+            }
             JSONObject responseBody = response.body();
             JSONObject allottedResource = responseBody.getJSONObject("allotted-resources").getJSONArray("allotted-resource").getJSONObject(0);
             JSONArray relationshipList = allottedResource.getJSONObject("relationship-list").getJSONArray("relationship");
@@ -302,25 +374,42 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
                 logger.error("get network Policy Id exception. serviceInstanceId:" + instance.getResourceInstanceId());
                 continue;
             }
-            JSONObject networkPolicyInfo = intentApiService.getInstanceNetworkPolicyInfo(networkPolicyId).execute().body();
-            String maxBandwidth =  networkPolicyInfo.getString("max-bandwidth");
+
+            Response<JSONObject> networkPolicyInfoResponse = intentApiService.getInstanceNetworkPolicyInfo(networkPolicyId).execute();
+            if (!networkPolicyInfoResponse.isSuccessful()) {
+                logger.error("get Intent-Instance networkPolicyInfo error:" + networkPolicyInfoResponse.toString());
+                continue;
+            }
+            JSONObject networkPolicyInfo = networkPolicyInfoResponse.body();
+            int maxBandwidth =  networkPolicyInfo.getIntValue("max-bandwidth");
             InstancePerformance instancePerformance = new InstancePerformance();
             instancePerformance.setMaxBandwidth(maxBandwidth);
             instancePerformance.setResourceInstanceId(instance.getResourceInstanceId());
             instancePerformance.setJobId(instance.getJobId());
             instancePerformance.setDate(new Date());
 
-            JSONObject metadatum = intentApiService.getInstanceBandwidth(serviceInstanceId).execute().body();
-            String metaval = metadatum.getJSONArray("metadatum").getJSONObject(0).getString("metaval");
+            Response<JSONObject> metadatumResponse = intentApiService.getInstanceBandwidth(serviceInstanceId).execute();
+            if (!metadatumResponse.isSuccessful()) {
+                logger.error("get Intent-Instance metadatum error:" + metadatumResponse.toString());
+                continue;
+            }
+            JSONObject metadatum = metadatumResponse.body();
+            int metaval = metadatum.getJSONArray("metadatum").getJSONObject(0).getIntValue("metaval");
             instancePerformance.setBandwidth(metaval);
 
+            Session session = getSession();
+            Transaction tx = null;
             try{
-                Session session = getSession();
-                Transaction tx = session.beginTransaction();
+                tx = session.beginTransaction();
                 session.save(instancePerformance);
                 tx.commit();
             } catch (Exception e) {
+                if(tx!=null){
+                    tx.rollback();
+                }
                 logger.error("Details:" + e.getMessage());
+            } finally {
+                session.close();
             }
 
 
@@ -330,8 +419,8 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
     @Override
     public void deleteIntentInstance(String instanceId) {
         IntentInstance result = null;
-
-        try(Session session = getSession()) {
+        Session session = getSession();
+        try {
 
             result = (IntentInstance)session.createQuery("from IntentInstance where deleteState = 0 and instanceId = :instanceId")
                     .setParameter("instanceId", instanceId).uniqueResult();
@@ -340,11 +429,13 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
         } catch (Exception e) {
             logger.error("getodel occur exception:"+e);
 
+        } finally {
+            session.close();
         }
         try {
             String serviceInstanceId = result.getResourceInstanceId();
             deleteInstanceToSO(serviceInstanceId);
-            deleteInstance(serviceInstanceId);
+            deleteInstance(result);
         }catch (Exception e) {
             logger.error("delete instance to SO error :" + e);
         }
@@ -363,20 +454,16 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
         okhttp3.RequestBody requestBody = okhttp3.RequestBody.create(okhttp3.MediaType.parse("application/json"), JSON.toJSONString(params));
         intentApiService.deleteIntentInstance(requestBody).execute();
     }
-    private String deleteInstance(String serviceInstanceId) {
+    private String deleteInstance(IntentInstance instance) {
         Transaction tx = null;
         String result="0";
-        if(serviceInstanceId==null || serviceInstanceId.trim().equals(""))
-            return  result;
-
-        try(Session session = getSession()) {
+        Session session = getSession();
+        try {
             tx = session.beginTransaction();
 
-            IntentInstance instance = new IntentInstance();
-            instance.setInstanceId(serviceInstanceId);
             session.delete(instance);
             tx.commit();
-            logger.info("delete instance OK, id=" + serviceInstanceId);
+            logger.info("delete instance OK, id=" + instance.getInstanceId());
 
             result="1";
         } catch (Exception e) {
@@ -385,6 +472,8 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
             }
             logger.error("delete instance occur exception:"+e);
 
+        } finally {
+            session.close();
         }
         return result;
     }
@@ -392,75 +481,79 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
     @Override
     public void activeIntentInstance(String instanceId) {
         IntentInstance instance = null;
-
-        try(Session session = getSession()) {
+        Session session = getSession();
+        Transaction tx = null;
+        try {
 
             instance = (IntentInstance)session.createQuery("from IntentInstance where deleteState = 0 and instanceId = :instanceId and status = :status")
                     .setParameter("instanceId", instanceId).setParameter("status", "3").uniqueResult();
             logger.info("get instance OK, id=" + instanceId);
 
-        } catch (Exception e) {
-            logger.error("getodel occur exception:"+e);
+            if (null == instance) {
+                logger.error("intentInstance is null!");
+                return;
+            }
 
-        }
-        if (null == instance) {
-            logger.error("intentInstance is null!");
-            return;
-        }
-        try {
             String jobId = createIntentInstanceToSO(instance);
             instance.setStatus("0");
             instance.setJobId(jobId);
-            Session session = getSession();
-            Transaction tx = session.beginTransaction();
+            tx = session.beginTransaction();
             session.save(instance);
             tx.commit();
 
         }catch (Exception e) {
+            if(tx!=null){
+                tx.rollback();
+            }
             logger.error("active instance to SO error :" + e);
+        } finally {
+            session.close();
         }
     }
 
     public void invalidIntentInstance(String instanceId) {
         IntentInstance instance = null;
-
-        try(Session session = getSession()) {
+        Session session = getSession();
+        Transaction tx = null;
+        try {
             instance = (IntentInstance)session.createQuery("from IntentInstance where deleteState = 0 and instanceId = :instanceId")
                     .setParameter("instanceId", instanceId).uniqueResult();
             logger.info("get instance OK, id=" + instanceId);
 
-        } catch (Exception e) {
-            logger.error("get instance occur exception:"+e);
-
-        }
-        if (null == instance) {
-            logger.error("intentInstance is null!");
-            return;
-        }
-        try {
+            if (null == instance) {
+                logger.error("intentInstance is null!");
+                return;
+            }
             deleteInstanceToSO(instance.getInstanceId());
             instance.setStatus("3");
-            Session session = getSession();
-            Transaction tx = session.beginTransaction();
+            tx = session.beginTransaction();
             session.save(instance);
+            session.flush();
             tx.commit();
 
         }catch (Exception e) {
+            if(tx!=null){
+                tx.rollback();
+            }
             logger.error("invalid instance to SO error :" + e);
+        } finally {
+            session.close();
         }
     }
 
     @Override
     public Map<String, Object> queryInstancePerformanceData(String instanceId) {
-        try(Session session = getSession()) {
+        Session session = getSession();
+        try {
             String hql = "from IntentInstance i, InstancePerformance p where i.resourceInstanceId = p.resourceInstanceId and  i.instanceId = :instanceId and i.deleteState = 0 order by p.date";
             Query query = session.createQuery(hql).setParameter("instanceId", instanceId);
             List<Object[]> queryResult= query.list();
             List<String> date = new ArrayList<>();
-            List<String> bandwidth = new ArrayList<>();
-            List<String> maxBandwidth = new ArrayList<>();
-            SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
-            for (Object[] o : queryResult) {
+            List<Integer> bandwidth = new ArrayList<>();
+            List<Integer> maxBandwidth = new ArrayList<>();
+            SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            for (int i = queryResult.size() > 50? queryResult.size() - 50 : 0; i < queryResult.size(); i++) {
+                Object[] o = queryResult.get(i);
                 InstancePerformance performance = (InstancePerformance) o[1];
                 date.add(ft.format(performance.getDate()));
                 bandwidth.add(performance.getBandwidth());
@@ -484,6 +577,8 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
         }catch (Exception e) {
             logger.error("invalid instance to SO error :" + e);
             throw e;
+        } finally {
+            session.close();
         }
     }
 
@@ -493,6 +588,10 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
         List<String> accessNodeList = new ArrayList<>();
         List<String> cloudAccessNodeList = new ArrayList<>();
         Response<JSONObject> response = intentApiService.queryNetworkRoute().execute();
+        if (!response.isSuccessful()) {
+            logger.error(response.toString());
+            throw new RuntimeException("Query Access Node Info Error");
+        }
         JSONObject body = response.body();
         JSONArray data = body.getJSONArray("network-route");
         for (int i = 0; i<data.size(); i++) {
@@ -508,4 +607,82 @@ public class IntentInstanceServiceImpl implements IntentInstanceService {
         result.put("cloudAccessNodeList",cloudAccessNodeList);
         return result;
     }
+
+    @Override
+    public JSONObject getInstanceStatus(JSONArray ids) {
+        Session session = getSession();
+        try {
+            JSONObject result = new JSONObject();
+            JSONArray instanceInfos = new JSONArray();
+            String hql = "from IntentInstance i where i.instanceId in (:ids)";
+            Query query = session.createQuery(hql).setParameter("ids", ids);
+            List<IntentInstance> queryResult= query.list();
+            if (queryResult != null && queryResult.size() > 0) {
+                for (IntentInstance instance : queryResult) {
+                    JSONObject instanceInfo = new JSONObject();
+                    instanceInfo.put("id", instance.getInstanceId());
+                    instanceInfo.put("status", instance.getStatus());
+                    instanceInfos.add(instanceInfo);
+                }
+            }
+            result.put("IntentInstances",instanceInfos);
+            return result;
+
+        } catch (Exception e) {
+            logger.error("get Instance status error : " + e.getMessage());
+            throw e;
+        } finally {
+            session.close();
+        }
+    }
+
+
+    public String formatBandwidth(String strValue) {
+        String ret;
+        Pattern pattern = Pattern.compile("(\\d+)([\\w ]*)");
+        Matcher matcher = pattern.matcher(strValue);
+
+
+        int dataRate = 100;
+        if (matcher.matches()) {
+            dataRate = Integer.parseInt(matcher.group(1));
+            String company = matcher.group(2).trim().toLowerCase();
+            if (GB_COMPANY.contains(company)) {
+                dataRate = dataRate * 1000;
+            }
+            else if (!MB_COMPANY.contains(company)) {
+                dataRate = 100;
+            }
+            dataRate = dataRate < MIN_BANDWIDTH ? MIN_BANDWIDTH : (dataRate > MAX_BANDWIDTH ? MAX_BANDWIDTH : dataRate);
+        }
+        ret = dataRate + "";
+        return ret;
+    }
+
+
+    public String formatCloudPoint(String cloudPoint) {
+        String cloudPointAlias = "";
+        switch (cloudPoint) {
+            case "Cloud one" :
+                cloudPointAlias = "tranportEp_dst_ID_212_1";
+                break;
+        }
+        return cloudPointAlias;
+    }
+
+    public String formatAccessPoint(String accessPoint) {
+        String accessPointAlias = "";
+        switch (accessPoint) {
+            case "Access one" :
+                accessPointAlias = "tranportEp_src_ID_111_1";
+                break;
+            case "Access two" :
+                accessPointAlias = "tranportEp_src_ID_111_2";
+                break;
+            case "Access three" :
+                accessPointAlias = "tranportEp_src_ID_113_1";
+                break;
+        }
+        return accessPointAlias;
+    }
 }
index c2994db..137b77a 100644 (file)
@@ -383,7 +383,7 @@ public class IntentServiceImpl implements IntentService {
 
     private String formatValueForResourcesSharingLevel(String strValue) {
         String ret;
-        ret = "no-shared";
+        ret = "non-shared";
         if("shared".equalsIgnoreCase(strValue)){
             ret = "shared";
         }
index 7727420..4093d56 100644 (file)
@@ -172,7 +172,7 @@ public class IntentControllerTest {
         Map<String, Object> body = new HashMap<>();
         body.put("instanceId", "instanceId");
         Mockito.doNothing().when(intentInstanceService).deleteIntentInstance(anyString());
-        assertEquals(intentController.deleteIntentInstance(body), "ok");
+        assertEquals(intentController.deleteIntentInstance("instanceId"), "ok");
     }
     @Test
     public void activeIntentInstance() {
index 1a29c37..e6a4c1e 100644 (file)
@@ -153,13 +153,14 @@ CREATE TABLE sort_master  (
 DROP TABLE IF EXISTS instance_performance;
 CREATE TABLE instance_performance
 (
-    id                   integer not null,
+    id                   serial not null
+        constraint instance_performance_pk
+            primary key,
     job_id               varchar(36),
     resource_instance_id varchar(36),
     bandwidth            numeric,
-    date                 date,
-    max_bandwidth        numeric,
-    CONSTRAINT instance_performance_pk PRIMARY KEY (id)
+    date                 timestamp,
+    max_bandwidth        numeric
 );
 
 -- ----------------------------
@@ -174,7 +175,7 @@ CREATE TABLE intent_instance
     instance_id                 varchar(16),
     job_id                      varchar(36),
     progress                    integer,
-    status                      char,
+    status                      char default 0,
     resource_instance_id        varchar(36),
     name                        varchar(255),
     cloud_point_name            varchar(255),