* ============LICENSE_START=======================================================
* ONAP CLAMP
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
* reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* limitations under the License.
* ============LICENSE_END============================================
* ===================================================================
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ *
*/
package org.onap.clamp.clds.dao;
import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
-import java.io.IOException;
import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.sql.Blob;
-import java.sql.ResultSet;
-import java.sql.SQLException;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.sql.DataSource;
-import org.onap.clamp.clds.model.CldsDBServiceCache;
+import org.onap.clamp.clds.model.CldsDbServiceCache;
import org.onap.clamp.clds.model.CldsEvent;
import org.onap.clamp.clds.model.CldsModel;
import org.onap.clamp.clds.model.CldsModelInstance;
+import org.onap.clamp.clds.model.CldsModelProp;
+import org.onap.clamp.clds.model.CldsMonitoringDetails;
import org.onap.clamp.clds.model.CldsServiceData;
import org.onap.clamp.clds.model.CldsTemplate;
import org.onap.clamp.clds.model.ValueItem;
+import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
@Repository("cldsDao")
public class CldsDao {
- protected static final EELFLogger logger = EELFManager.getInstance().getLogger(CldsDao.class);
- protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
-
- private JdbcTemplate jdbcTemplateObject;
- private SimpleJdbcCall procGetModel;
- private SimpleJdbcCall procGetModelTemplate;
- private SimpleJdbcCall procSetModel;
- private SimpleJdbcCall procInsEvent;
- private SimpleJdbcCall procUpdEvent;
- private SimpleJdbcCall procSetTemplate;
- private SimpleJdbcCall procGetTemplate;
- private SimpleJdbcCall procDelAllModelInstances;
- private SimpleJdbcCall procInsModelInstance;
- private SimpleJdbcCall procDelModelInstance;
-
- private static final String HEALTHCHECK = "Select 1";
-
+ private static final EELFLogger logger = EELFManager.getInstance().getLogger(CldsDao.class);
+ private JdbcTemplate jdbcTemplateObject;
+ private SimpleJdbcCall procGetModel;
+ private SimpleJdbcCall procGetModelTemplate;
+ private SimpleJdbcCall procSetModel;
+ private SimpleJdbcCall procInsEvent;
+ private SimpleJdbcCall procUpdEvent;
+ private SimpleJdbcCall procSetTemplate;
+ private SimpleJdbcCall procGetTemplate;
+ private SimpleJdbcCall procDelAllModelInstances;
+ private SimpleJdbcCall procInsModelInstance;
+ private SimpleJdbcCall procDeleteModel;
+ private static final String HEALTHCHECK = "Select 1";
+ private static final String V_CONTROL_NAME_PREFIX = "v_control_name_prefix";
+ private static final String V_CONTROL_NAME_UUID = "v_control_name_uuid";
+
/**
* Log message when instantiating
*/
/**
* When dataSource is provided, instantiate spring jdbc objects.
- *
- * @param dataSource
*/
public void setDataSource(DataSource dataSource) {
this.jdbcTemplateObject = new JdbcTemplate(dataSource);
this.procGetTemplate = new SimpleJdbcCall(dataSource).withProcedureName("get_template");
this.procSetTemplate = new SimpleJdbcCall(dataSource).withProcedureName("set_template");
this.procInsModelInstance = new SimpleJdbcCall(dataSource).withProcedureName("ins_model_instance");
- this.procDelModelInstance = new SimpleJdbcCall(dataSource).withProcedureName("del_model_instance");
this.procDelAllModelInstances = new SimpleJdbcCall(dataSource).withProcedureName("del_all_model_instances");
+ this.procDeleteModel = new SimpleJdbcCall(dataSource).withProcedureName("del_model");
}
/**
* Get a model from the database given the model name.
- *
- * @param modelName
- * @return model
*/
public CldsModel getModel(String modelName) {
return getModel(modelName, null);
/**
* Get a model from the database given the controlNameUuid.
- *
- * @param controlNameUuid
- * @return model
*/
public CldsModel getModelByUuid(String controlNameUuid) {
return getModel(null, controlNameUuid);
}
- /**
- * Get a model from the database given the model name or a controlNameUuid.
- *
- * @param modelName
- * @return model
- */
+ // Get a model from the database given the model name or a controlNameUuid.
private CldsModel getModel(String modelName, String controlNameUuid) {
CldsModel model = new CldsModel();
model.setName(modelName);
SqlParameterSource in = new MapSqlParameterSource().addValue("v_model_name", modelName)
- .addValue("v_control_name_uuid", controlNameUuid);
+ .addValue(V_CONTROL_NAME_UUID, controlNameUuid);
Map<String, Object> out = logSqlExecution(procGetModel, in);
- model.setControlNamePrefix((String) out.get("v_control_name_prefix"));
- model.setControlNameUuid((String) out.get("v_control_name_uuid"));
- model.setId((String) (out.get("v_model_id")));
- model.setTemplateId((String) (out.get("v_template_id")));
- model.setTemplateName((String) (out.get("v_template_name")));
- model.setBpmnId((String) (out.get("v_template_bpmn_id")));
- model.setBpmnUserid((String) out.get("v_template_bpmn_user_id"));
- model.setBpmnText((String) out.get("v_template_bpmn_text"));
- model.setPropId((String) (out.get("v_model_prop_id")));
- model.setPropUserid((String) out.get("v_model_prop_user_id"));
- model.setPropText((String) out.get("v_model_prop_text"));
- model.setImageId((String) (out.get("v_template_image_id")));
- model.setImageUserid((String) out.get("v_template_image_user_id"));
- model.setImageText((String) out.get("v_template_image_text"));
- model.setDocId((String) (out.get("v_template_doc_id")));
- model.setDocUserid((String) out.get("v_template_doc_user_id"));
- model.setDocText((String) out.get("v_template_doc_text"));
- model.setBlueprintText((String) out.get("v_model_blueprint_text"));
- model.getEvent().setId((String) (out.get("v_event_id")));
- model.getEvent().setActionCd((String) out.get("v_action_cd"));
- model.getEvent().setActionStateCd((String) out.get("v_action_state_cd"));
- model.getEvent().setProcessInstanceId((String) out.get("v_event_process_instance_id"));
- model.getEvent().setUserid((String) out.get("v_event_user_id"));
- model.setTypeId((String) out.get("v_service_type_id"));
- model.setDeploymentId((String) out.get("v_deployment_id"));
+ populateModelProperties(model, out);
return model;
}
SqlParameterSource in = new MapSqlParameterSource().addValue("v_model_name", modelName);
Map<String, Object> out = logSqlExecution(procGetModelTemplate, in);
// todo : rationalize
- model.setControlNamePrefix((String) out.get("v_control_name_prefix"));
- model.setControlNameUuid((String) out.get("v_control_name_uuid"));
- model.setId((String) (out.get("v_model_id")));
- model.setTemplateId((String) (out.get("v_template_id")));
- model.setTemplateName((String) (out.get("v_template_name")));
- model.setBpmnId((String) (out.get("v_template_bpmn_id")));
- model.setBpmnUserid((String) out.get("v_template_bpmn_user_id"));
- model.setBpmnText((String) out.get("v_template_bpmn_text"));
- model.setPropId((String) (out.get("v_model_prop_id")));
- model.setPropUserid((String) out.get("v_model_prop_user_id"));
- model.setPropText((String) out.get("v_model_prop_text"));
- model.setImageId((String) (out.get("v_template_image_id")));
- model.setImageUserid((String) out.get("v_template_image_user_id"));
- model.setImageText((String) out.get("v_template_image_text"));
- model.setDocId((String) (out.get("v_template_doc_id")));
- model.setDocUserid((String) out.get("v_template_doc_user_id"));
- model.setDocText((String) out.get("v_template_doc_text"));
- model.setBlueprintText((String) out.get("v_model_blueprint_text"));
- model.getEvent().setId((String) (out.get("v_event_id")));
- model.getEvent().setActionCd((String) out.get("v_action_cd"));
- model.getEvent().setActionStateCd((String) out.get("v_action_state_cd"));
- model.getEvent().setProcessInstanceId((String) out.get("v_event_process_instance_id"));
- model.getEvent().setUserid((String) out.get("v_event_user_id"));
- model.setTypeId((String) out.get("v_service_type_id"));
- model.setDeploymentId((String) out.get("v_deployment_id"));
-
+ populateModelProperties(model, out);
Map<String, Object> modelResults = logSqlExecution(procGetModel, in);
Object modelResultObject = modelResults.get("#result-set-1");
if (modelResultObject != null && modelResultObject instanceof ArrayList) {
.addValue("v_model_blueprint_text", model.getBlueprintText())
.addValue("v_service_type_id", model.getTypeId()).addValue("v_deployment_id", model.getDeploymentId())
.addValue("v_control_name_prefix", model.getControlNamePrefix())
- .addValue("v_control_name_uuid", model.getControlNameUuid());
+ .addValue(V_CONTROL_NAME_UUID, model.getControlNameUuid());
Map<String, Object> out = logSqlExecution(procSetModel, in);
- model.setControlNamePrefix((String) out.get("v_control_name_prefix"));
- model.setControlNameUuid((String) out.get("v_control_name_uuid"));
+ model.setControlNamePrefix((String) out.get(V_CONTROL_NAME_PREFIX));
+ model.setControlNameUuid((String) out.get(V_CONTROL_NAME_UUID));
model.setId((String) (out.get("v_model_id")));
- model.setPropId((String) (out.get("v_model_prop_id")));
- model.setPropUserid((String) (out.get("v_model_prop_user_id")));
- model.setBlueprintId((String) (out.get("v_model_blueprint_id")));
- model.setBlueprintUserid((String) out.get("v_model_blueprint_user_id"));
model.getEvent().setId((String) (out.get("v_event_id")));
model.getEvent().setActionCd((String) out.get("v_action_cd"));
model.getEvent().setActionStateCd((String) out.get("v_action_state_cd"));
// Delete all existing model instances for given controlNameUUID
logger.debug("deleting instances for: {}", model.getControlNameUuid());
delAllModelInstances(model.getControlNameUuid());
-
if (modelInstancesList == null) {
logger.debug("modelInstancesList == null");
} else {
logger.debug("v_vm_name={}", currModelInstance.getVmName());
logger.debug("v_location={}", currModelInstance.getLocation());
SqlParameterSource in = new MapSqlParameterSource()
- .addValue("v_control_name_uuid", model.getControlNameUuid())
+ .addValue(V_CONTROL_NAME_UUID, model.getControlNameUuid())
.addValue("v_vm_name", currModelInstance.getVmName())
.addValue("v_location", currModelInstance.getLocation());
Map<String, Object> out = logSqlExecution(procInsModelInstance, in);
}
}
- /**
- * Delete a list of modelInstance from the database using parameter values
- * and returns updated model object. This method is defunct - DCAE Proxy
- * will not undeploy individual instances. It will send an empty list of
- * deployed instances to indicate all have been removed. Or it will send an
- * updated list to indicate those that are still deployed with any not on
- * the list considered undeployed.
- *
- * @param controlNameUUid
- * @param modelInstancesList
- * @return
- */
- private CldsModel delModelInstance(String controlNameUUid, List<CldsModelInstance> modelInstancesList) {
- CldsModel model = new CldsModel();
- for (CldsModelInstance currModelInstance : modelInstancesList) {
- SqlParameterSource in = new MapSqlParameterSource().addValue("v_control_name_uuid", controlNameUUid)
- .addValue("v_vm_name", currModelInstance.getVmName());
- Map<String, Object> out = logSqlExecution(procDelModelInstance, in);
- model.setId((String) (out.get("v_model_id")));
- }
- return model;
- }
-
/**
* Insert an event in the database - require either modelName or
* controlNamePrefix/controlNameUuid.
public CldsEvent insEvent(String modelName, String controlNamePrefix, String controlNameUuid, CldsEvent cldsEvent) {
CldsEvent event = new CldsEvent();
SqlParameterSource in = new MapSqlParameterSource().addValue("v_model_name", modelName)
- .addValue("v_control_name_prefix", controlNamePrefix).addValue("v_control_name_uuid", controlNameUuid)
+ .addValue(V_CONTROL_NAME_PREFIX, controlNamePrefix).addValue(V_CONTROL_NAME_UUID, controlNameUuid)
.addValue("v_user_id", cldsEvent.getUserid()).addValue("v_action_cd", cldsEvent.getActionCd())
.addValue("v_action_state_cd", cldsEvent.getActionStateCd())
.addValue("v_process_instance_id", cldsEvent.getProcessInstanceId());
return event;
}
- /**
- * Method to delete all model instances based on controlNameUUID
- *
- * @param controlNameUUid
- * @return
- */
private String delAllModelInstances(String controlNameUUid) {
- SqlParameterSource in = new MapSqlParameterSource().addValue("v_control_name_uuid", controlNameUUid);
+ SqlParameterSource in = new MapSqlParameterSource().addValue(V_CONTROL_NAME_UUID, controlNameUUid);
Map<String, Object> out = logSqlExecution(procDelAllModelInstances, in);
return (String) (out.get("v_model_id"));
}
logSqlExecution(procUpdEvent, in);
}
- /**
- * Generic mapper for list of values
- */
- private static final class ValueItemMapper implements RowMapper<ValueItem> {
- @Override
- public ValueItem mapRow(ResultSet rs, int rowNum) throws SQLException {
- ValueItem item = new ValueItem();
- item.setValue(rs.getString(1));
- return item;
- }
- }
-
- /**
- * Generic mapper for CldsDBServiceCache
- */
- private static final class CldsServiceDataMapper implements RowMapper<CldsServiceData> {
- @Override
- public CldsServiceData mapRow(ResultSet rs, int rowNum) throws SQLException {
- CldsServiceData cldsServiceData = new CldsServiceData();
- long age;
- age = rs.getLong(5);
- Blob blob = rs.getBlob(4);
- InputStream is = blob.getBinaryStream();
- ObjectInputStream oip;
- try {
- oip = new ObjectInputStream(is);
- cldsServiceData = (CldsServiceData) oip.readObject();
- cldsServiceData.setAgeOfRecord(age);
- } catch (IOException | ClassNotFoundException e) {
- logger.error("Error caught while retrieving cldsServiceData from database", e);
- }
- return cldsServiceData;
- }
- }
-
/**
* Return list of model names
*
*
* @param template
* @param userid
- * @return
*/
- public CldsTemplate setTemplate(CldsTemplate template, String userid) {
+ public void setTemplate(CldsTemplate template, String userid) {
SqlParameterSource in = new MapSqlParameterSource().addValue("v_template_name", template.getName())
.addValue("v_user_id", userid).addValue("v_template_bpmn_text", template.getBpmnText())
.addValue("v_template_image_text", template.getImageText())
template.setId((String) (out.get("v_template_id")));
template.setBpmnUserid((String) (out.get("v_template_bpmn_user_id")));
template.setBpmnId((String) (out.get("v_template_bpmn_id")));
- template.setBpmnText((String) (out.get("v_template_bpmn_text")));
template.setImageId((String) (out.get("v_template_image_id")));
template.setImageUserid((String) out.get("v_template_image_user_id"));
- template.setImageText((String) out.get("v_template_image_text"));
template.setPropId((String) (out.get("v_template_doc_id")));
template.setPropUserid((String) out.get("v_template_doc_user_id"));
- template.setPropText((String) out.get("v_template_doc_text"));
- return template;
}
/**
return template;
}
+ public void clearServiceCache() {
+ String clearCldsServiceCacheSql = "TRUNCATE clds_service_cache";
+ jdbcTemplateObject.execute(clearCldsServiceCacheSql);
+ }
+
public CldsServiceData getCldsServiceCache(String invariantUUID) {
CldsServiceData cldsServiceData = null;
- List<CldsServiceData> cldsServiceDataList = new ArrayList<>();
- String getCldsServiceSQL = "SELECT * , TIMESTAMPDIFF(SECOND, timestamp, CURRENT_TIMESTAMP()) FROM clds_service_cache where invariant_service_id = ? ";
- cldsServiceData = jdbcTemplateObject.queryForObject(getCldsServiceSQL, new Object[] { invariantUUID },
- new CldsServiceDataMapper());
- logger.info("value of cldsServiceDataList: {}", cldsServiceDataList);
- return cldsServiceData;
+ try {
+ String getCldsServiceSQL = "SELECT * , TIMESTAMPDIFF(SECOND, timestamp, CURRENT_TIMESTAMP()) FROM clds_service_cache where invariant_service_id = ? ";
+ cldsServiceData = jdbcTemplateObject.queryForObject(getCldsServiceSQL, new Object[] { invariantUUID },
+ new CldsServiceDataMapper());
+ if (cldsServiceData != null) {
+ logger.info("CldsServiceData found in cache for Service Invariant ID:"
+ + cldsServiceData.getServiceInvariantUUID());
+ return cldsServiceData;
+ } else {
+ logger.warn("CldsServiceData not found in cache for Service Invariant ID:" + invariantUUID);
+ return null;
+ }
+ } catch (EmptyResultDataAccessException e) {
+ logger.info("CldsServiceData not found in cache for Service Invariant ID: " + invariantUUID);
+ logger.debug("CldsServiceData not found in cache for Service Invariant ID: " + invariantUUID, e);
+ return null;
+ }
}
- public void setCldsServiceCache(CldsDBServiceCache cldsDBServiceCache) {
+ public void setCldsServiceCache(CldsDbServiceCache cldsDBServiceCache) {
if (cldsDBServiceCache != null && cldsDBServiceCache.getInvariantId() != null
&& cldsDBServiceCache.getServiceId() != null) {
String invariantUuid = cldsDBServiceCache.getInvariantId();
jdbcTemplateObject.execute(HEALTHCHECK);
}
+ /**
+ * Method to get deployed/active models with model properties.
+ *
+ * @return list of CldsModelProp
+ */
+ public List<CldsModelProp> getDeployedModelProperties() {
+ List<CldsModelProp> cldsModelPropList = new ArrayList<>();
+ String modelsSql = "select m.model_id, m.model_name, mp.model_prop_id, mp.model_prop_text FROM model m, model_properties mp, event e "
+ + "WHERE m.model_prop_id = mp.model_prop_id and m.event_id = e.event_id and e.action_cd = 'DEPLOY'";
+ List<Map<String, Object>> rows = jdbcTemplateObject.queryForList(modelsSql);
+ CldsModelProp cldsModelProp = null;
+ for (Map<String, Object> row : rows) {
+ cldsModelProp = new CldsModelProp();
+ cldsModelProp.setId((String) row.get("model_id"));
+ cldsModelProp.setName((String) row.get("model_name"));
+ cldsModelProp.setPropId((String) row.get("model_prop_id"));
+ cldsModelProp.setPropText((String) row.get("model_prop_text"));
+ cldsModelPropList.add(cldsModelProp);
+ }
+ return cldsModelPropList;
+ }
+
+ /**
+ * Method to get deployed/active models with model properties.
+ *
+ * @return list of CLDS-Monitoring-Details: CLOSELOOP_NAME | Close loop name
+ * used in the CLDS application (prefix: ClosedLoop- + unique
+ * ClosedLoop ID) MODEL_NAME | Model Name in CLDS application
+ * SERVICE_TYPE_ID | TypeId returned from the DCAE application when
+ * the ClosedLoop is submitted (DCAEServiceTypeRequest generated in
+ * DCAE application). DEPLOYMENT_ID | Id generated when the
+ * ClosedLoop is deployed in DCAE. TEMPLATE_NAME | Template used to
+ * generate the ClosedLoop model. ACTION_CD | Current state of the
+ * ClosedLoop in CLDS application.
+ */
+ public List<CldsMonitoringDetails> getCLDSMonitoringDetails() {
+ SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
+ List<CldsMonitoringDetails> cldsMonitoringDetailsList = new ArrayList<CldsMonitoringDetails>();
+ String modelsSql = "SELECT CONCAT(M.CONTROL_NAME_PREFIX, M.CONTROL_NAME_UUID) AS CLOSELOOP_NAME , M.MODEL_NAME, M.SERVICE_TYPE_ID, M.DEPLOYMENT_ID, T.TEMPLATE_NAME, E.ACTION_CD, E.USER_ID, E.TIMESTAMP "
+ + "FROM MODEL M, TEMPLATE T, EVENT E "
+ + "WHERE M.TEMPLATE_ID = T.TEMPLATE_ID AND M.EVENT_ID = E.EVENT_ID " + "ORDER BY ACTION_CD";
+ List<Map<String, Object>> rows = jdbcTemplateObject.queryForList(modelsSql);
+ CldsMonitoringDetails cldsMonitoringDetails = null;
+ for (Map<String, Object> row : rows) {
+ cldsMonitoringDetails = new CldsMonitoringDetails();
+ cldsMonitoringDetails.setCloseloopName((String) row.get("CLOSELOOP_NAME"));
+ cldsMonitoringDetails.setModelName((String) row.get("MODEL_NAME"));
+ cldsMonitoringDetails.setServiceTypeId((String) row.get("SERVICE_TYPE_ID"));
+ cldsMonitoringDetails.setDeploymentId((String) row.get("DEPLOYMENT_ID"));
+ cldsMonitoringDetails.setTemplateName((String) row.get("TEMPLATE_NAME"));
+ cldsMonitoringDetails.setAction((String) row.get("ACTION_CD"));
+ cldsMonitoringDetails.setUserid((String) row.get("USER_ID"));
+ cldsMonitoringDetails.setTimestamp(sdf.format(row.get("TIMESTAMP")));
+ cldsMonitoringDetailsList.add(cldsMonitoringDetails);
+ }
+ return cldsMonitoringDetailsList;
+ }
+
+ /**
+ * Method to delete model from database.
+ *
+ * @param modelName
+ */
+ public void deleteModel(String modelName) {
+ SqlParameterSource in = new MapSqlParameterSource().addValue("v_model_name", modelName);
+ logSqlExecution(procDeleteModel, in);
+ }
+
+ private void populateModelProperties(CldsModel model, Map out) {
+ // todo : rationalize
+ model.setControlNamePrefix((String) out.get(V_CONTROL_NAME_PREFIX));
+ model.setControlNameUuid((String) out.get(V_CONTROL_NAME_UUID));
+ model.setId((String) (out.get("v_model_id")));
+ model.setTemplateId((String) (out.get("v_template_id")));
+ model.setTemplateName((String) (out.get("v_template_name")));
+ model.setBpmnText((String) out.get("v_template_bpmn_text"));
+ model.setPropText((String) out.get("v_model_prop_text"));
+ model.setImageText((String) out.get("v_template_image_text"));
+ model.setDocText((String) out.get("v_template_doc_text"));
+ model.setBlueprintText((String) out.get("v_model_blueprint_text"));
+ model.getEvent().setId((String) (out.get("v_event_id")));
+ model.getEvent().setActionCd((String) out.get("v_action_cd"));
+ model.getEvent().setActionStateCd((String) out.get("v_action_state_cd"));
+ model.getEvent().setProcessInstanceId((String) out.get("v_event_process_instance_id"));
+ model.getEvent().setUserid((String) out.get("v_event_user_id"));
+ model.setTypeId((String) out.get("v_service_type_id"));
+ model.setDeploymentId((String) out.get("v_deployment_id"));
+ }
}