package com.produban.openbus.console.web; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.http.HttpEntity; import org.apache.log4j.Logger; import org.codehaus.jackson.map.ObjectMapper; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.wso2.siddhi.core.SiddhiManager; import org.wso2.siddhi.core.config.SiddhiConfiguration; import com.produban.openbus.console.domain.CamposOrigen; import com.produban.openbus.console.domain.Estado; import com.produban.openbus.console.domain.MetricaBatch; import com.produban.openbus.console.domain.MetricaOnLine; import com.produban.openbus.console.domain.OrigenEstructurado; import com.produban.openbus.console.domain.QueryCep; import com.produban.openbus.console.domain.StreamCep; import com.produban.openbus.console.domain.TableCep; import com.produban.openbus.console.dto.CreateOnLineForm; import com.produban.openbus.console.dto.QueryDTO; import com.produban.openbus.console.dto.TableDTO; import com.produban.openbus.console.hive.HiveConnector; import com.produban.openbus.console.repository.EstadoRepository; import com.produban.openbus.console.service.EstadoService; import com.produban.openbus.console.service.MetricaBatchService; import com.produban.openbus.console.service.MetricaOnLineService; import com.produban.openbus.console.service.OrigenEstructuradoService; import com.produban.openbus.console.service.QueryCepService; import com.produban.openbus.console.service.StreamCepService; import com.produban.openbus.console.service.TableCepService; import com.produban.openbus.console.util.HttpConnector; import com.produban.openbus.siddhiCep.MediaCondicionadaAggregatorFactory; import com.produban.openbus.siddhiCep.SumadorCondicionalConReinicioAggregatorFactory; @RequestMapping("/console/**") @Controller public class ConsoleController { private final static String ES_MAPPING_ID = "ID"; private final static String ESTADO_EN_EJECUCION = "Ejecución"; private final static String ESTADO_ERROR = "Error"; private final static String ESTADO_OK = "Ok"; private final static String ESTADO_ONLINE_METRICA_EN_CREACION = "201"; private final static String ESTADO_ONLINE_STREAM_EN_CREACION = "1"; private final static String ESTADO_ONLINE_QUERY_EN_CREACION = "101"; private final static String ESTADO_ONLINE_METRICA_EN_ACTUALIZACION = "210"; private final static String ESTADO_ONLINE_STREAM_EN_ACTUALIZACION = "4"; private final static String ESTADO_ONLINE_QUERY_EN_ACTUALIZACION = "105"; private final static String ESTADO_ONLINE_METRICA_EN_BORRADO = "211"; private final static String ESTADO_ONLINE_STREAM_EN_BORRADO = "5"; private final static String ESTADO_ONLINE_QUERY_EN_BORRADO = "106"; private final static String ESTADO_ONLINE_TABLE_EN_CREACION = "301"; private final static String ESTADO_ONLINE_TABLE_EN_ACTUALIZACION = "304"; private final static String ESTADO_ONLINE_TABLE_EN_BORRADO = "305"; private static Logger LOG = Logger.getLogger(ConsoleController.class); @Autowired private OrigenEstructuradoService origenEstructuradoService; @Autowired private MetricaBatchService metricaBatchService; @Autowired private MetricaOnLineService metricaOnLineService; @Autowired private QueryCepService queryCepService; @Autowired private StreamCepService streamCepService; @Autowired private EstadoService estadoService; @Autowired private EstadoRepository estadoRepository; @Autowired private TableCepService tableCepService; // ***************** CREATE BATCH ***************** @RequestMapping("/createbatch") public String getSources(Model model, HttpServletRequest request) { List<OrigenEstructurado> lstSources = origenEstructuradoService.findAllOrigenEstructuradoes(); model.addAttribute("lstSources", lstSources); model.addAttribute("metricaBatch", new MetricaBatch()); if (request.getParameter("lang") != null){ model.addAttribute("lang", request.getParameter("lang")); request.getSession().setAttribute("lang", request.getParameter("lang")); } else if (request.getSession().getAttribute("lang") != null){ model.addAttribute("lang", request.getSession().getAttribute("lang")); } return "/console/createbatch"; } @RequestMapping(value = "/getFieldsBySource") public String refreshFields(@RequestParam String idSource, Model model) { OrigenEstructurado origenEstructurado = origenEstructuradoService.findOrigenEstructurado(Long.valueOf(idSource)); origenEstructurado.getHsCamposOrigen().size(); Set<CamposOrigen> hsFields = origenEstructurado.getHsCamposOrigen(); List<CamposOrigen> lstFields = new ArrayList<CamposOrigen>(); for (CamposOrigen field : hsFields) { lstFields.add(field); } Collections.sort(lstFields, new Comparator<CamposOrigen>(){ public int compare(CamposOrigen s1, CamposOrigen s2) { return s1.getNombreCampo().compareTo(s2.getNombreCampo()); } }); model.addAttribute("lstFields", lstFields); return "/console/createbatch :: #selFields"; } @RequestMapping(value = "/createMetricBBDDES", method = RequestMethod.POST) public @ResponseBody CreateForm createMetricBBDDES(Model model, HttpSession session, @RequestBody final CreateForm form) { try { MetricaBatch metricaBatch = createMetricBBDD(session, form); metricaBatch = createMetricES(metricaBatch); String isModif = form.getHidModif(); metricaBatch.setFechaUltModif(new Date()); if (isModif.equals("0")) { metricaBatch.setIsCreated(true); metricaBatch.setFechaCreacion(new Date()); LOG.info("SAVE BBDD running...."); metricaBatchService.saveMetricaBatch(metricaBatch); LOG.info("SAVE BBDD done"); } else { metricaBatch.setIsUpdated(true); LOG.info("UPDATE BBDD running...."); metricaBatchService.updateMetricaBatch(metricaBatch); LOG.info("UPDATE BBDD done"); } form.setId(metricaBatch.getId().toString()); } catch (Exception e) { form.setId("ERROR"); form.setError(e.toString()); } return form; } private MetricaBatch createMetricBBDD(HttpSession session, CreateForm form) throws Exception { MetricaBatch metricaBatch = new MetricaBatch(); String isBatch = form.getRdMetricType(); metricaBatch.setBatchMetricName(form.getBatchMetricName()); metricaBatch.setBatchMetricDesc(form.getBatchMetricDesc()); metricaBatch.setSourceId(form.getSourceId()); metricaBatch.setEsCamposId(ES_MAPPING_ID); metricaBatch.setEsIndex(form.getSelSourceName()); metricaBatch.setEsTimestamp(form.getEsTimestamp()); metricaBatch.setEsType(form.getBatchMetricName()); metricaBatch.setFechaUltModif(new Date()); metricaBatch.setUsuarioCreacion((String) session.getAttribute("username")); metricaBatch.setTypeQuery(form.getTypeQuery()); metricaBatch.setFromQuery(form.getFromQuery()); metricaBatch.setSelectQuery(form.getSelectQuery()); metricaBatch.setWhereQuery(form.getWhereQuery()); metricaBatch.setPlanificacion(form.getPlanificacion()); metricaBatch.setEsId(form.getEsId()); String strSelectQuery = metricaBatch.getSelectQuery(); String strFromQuery = metricaBatch.getFromQuery(); String strWhereQuery = metricaBatch.getWhereQuery(); StringBuilder insertQuery = new StringBuilder(); insertQuery.append("INSERT OVERWRITE TABLE " + metricaBatch.getEsType() + " "); insertQuery.append(strSelectQuery + " "); insertQuery.append(strFromQuery + " "); insertQuery.append(strWhereQuery); metricaBatch.setQueryCode(insertQuery.toString()); metricaBatch.setEstado(ESTADO_EN_EJECUCION); if (isBatch.equals("1")) { metricaBatch.setIsBatch(true); } else { metricaBatch.setIsBatch(false); } return metricaBatch; } private MetricaBatch createMetricES(MetricaBatch metricaBatch) throws Exception { Properties prop = new Properties(); ClassLoader loader = Thread.currentThread().getContextClassLoader(); InputStream resourceStream = loader.getResourceAsStream("META-INF/spring/environment.properties"); prop.load(resourceStream); String strTypeQuery = metricaBatch.getTypeQuery(); String strTimestamp = metricaBatch.getEsTimestamp(); String strQuerySelect = metricaBatch.getSelectQuery(); // Se crea el indice en elasticsearch createESIndex(metricaBatch.getEsIndex(), metricaBatch.getEsType(), strTypeQuery, prop, strTimestamp); LOG.debug("ES Index created"); String dropQuery = "DROP TABLE IF EXISTS " + metricaBatch.getEsType(); StringBuilder externalQuery = new StringBuilder(); externalQuery.append("CREATE EXTERNAL TABLE "); externalQuery.append(metricaBatch.getEsType()); externalQuery.append("("); externalQuery.append(strTypeQuery); externalQuery.append(") "); externalQuery.append("STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' TBLPROPERTIES('es.resource' = '"); externalQuery.append(metricaBatch.getEsIndex() + "/" + metricaBatch.getEsType()); if (strQuerySelect.indexOf(" as ID") != -1) { externalQuery.append("', 'es.mapping.id' = '"); externalQuery.append(metricaBatch.getEsCamposId()); externalQuery.append("', 'es.id.field' = '"); externalQuery.append(metricaBatch.getEsCamposId()); } if (metricaBatch.getEsId() != null){ externalQuery.append("', 'es.mapping.id' = '"); externalQuery.append(metricaBatch.getEsId()); externalQuery.append("', 'es.id.field' = '"); externalQuery.append(metricaBatch.getEsId()); } externalQuery.append("', 'es.index.auto.create' = 'true','es.nodes' = '"); externalQuery.append(prop.getProperty("elastic.url.datanode1") + "," + prop.getProperty("elastic.url.datanode2") + "," + prop.getProperty("elastic.url.datanode3")); externalQuery.append("', 'es.port' = '" + prop.getProperty("elastic.port.datanodes")); if (strTimestamp != null && (!strTimestamp.equals(""))) { externalQuery.append("', 'es.mapping.names' = '" + strTimestamp + ":@timestamp"); } externalQuery.append("')"); HiveConnector hiveConnector = new HiveConnector(); hiveConnector.executeQuery(dropQuery); hiveConnector.executeQuery(externalQuery.toString()); metricaBatch.setCreateCode(externalQuery.toString()); LOG.info("UPDATE BBDD running...."); metricaBatchService.updateMetricaBatch(metricaBatch); LOG.info("UPDATE BBDD done"); return metricaBatch; } private void createESIndex(String index, String type, String strTypeQuery, Properties prop, String timestamp) throws Exception { HttpConnector httpConnector = new HttpConnector(); Map<String, Map> mapPost = new HashMap<String, Map>(); Map<String, Map> mapPut = new HashMap<String, Map>(); Map<String, Map> map2 = new HashMap<String, Map>(); Map<String, Map> map3 = new HashMap<String, Map>(); boolean bTimeStamp = false; ObjectMapper objectMapper = new ObjectMapper(); String existsUrl = "http://" + prop.getProperty("elastic.url.datanode1") + ":" + prop.getProperty("elastic.port.datanodes") + "/_stats/_indexes?pretty"; HttpEntity entity = httpConnector.launchHttp(existsUrl, "GET", null); JSONParser parser = new JSONParser(); Object obj = parser.parse(new BufferedReader(new InputStreamReader(entity.getContent()))); JSONObject jsonObject = (JSONObject) obj; jsonObject = (JSONObject) jsonObject.get("indices"); String json = null; mapPost.put("mappings", mapPut); mapPut.put(type, map2); map2.put("properties", map3); String[] array1 = strTypeQuery.split(","); Map<String, String> valuesMap = null; if (timestamp == null){ timestamp = ""; } for (int i = 0; i < array1.length; i++) { valuesMap = new HashMap<String, String>(); String[] array2 = array1[i].split(" "); array2[1] = array2[1].toLowerCase(); array2[0] = array2[0].toLowerCase(); array2[1] = array2[1].replaceAll("\n", ""); array2[0] = array2[0].replaceAll("\n", ""); if ("string".equals(array2[1])) { valuesMap.put("type", "string"); valuesMap.put("index", "not_analyzed"); map3.put(array2[0], valuesMap); } else if ("bigint".equals(array2[1]) || "int".equals(array2[1])) { valuesMap.put("type", "long"); map3.put(array2[0], valuesMap); } else if ("timestamp".equals(array2[1])){ valuesMap.put("type", "date"); valuesMap.put("format", "dateOptionalTime"); if(timestamp.equals(array2[1])){ bTimeStamp = true; map3.put("@timestamp", valuesMap); } else{ map3.put(array2[0], valuesMap); } } } if ((!bTimeStamp) && (!timestamp.equals(""))) { valuesMap = new HashMap<String, String>(); valuesMap.put("type", "date"); valuesMap.put("format", "dateOptionalTime"); map3.put("@timestamp", valuesMap); } if (jsonObject.get(index) != null) { // Existe el indice, se lanza PUT String putUrl = "http://" + prop.getProperty("elastic.url.datanode1") + ":" + prop.getProperty("elastic.port.datanodes") + "/" + index + "/" + type + "/_mapping"; json = objectMapper.writeValueAsString(mapPut); entity = httpConnector.launchHttp(putUrl, "PUT", json); } else { // No existe el indice, se lanza POST String postUrl = "http://" + prop.getProperty("elastic.url.datanode1") + ":" + prop.getProperty("elastic.port.datanodes") + "/" + index + "/"; json = objectMapper.writeValueAsString(mapPost); entity = httpConnector.launchHttp(postUrl, "POST", json); } } @RequestMapping(value = "/insertIntoHive", method = RequestMethod.GET) public @ResponseBody String insertIntoHive(@RequestParam String idMetric) throws Exception { String response = ""; MetricaBatch metricaBatch = null; try { metricaBatch = metricaBatchService.findMetricaBatch(new Long(idMetric)); HiveConnector hiveConnector = new HiveConnector(); hiveConnector.executeQuery(metricaBatch.getQueryCode()); metricaBatch.setFechaUltModif(new Date()); metricaBatch.setEstado(ESTADO_OK); } catch (Exception e) { metricaBatch.setEstado(ESTADO_ERROR); metricaBatch.setError(e.toString()); response = "Error al insertar en Hive : " + e.toString(); LOG.info("UPDATE BBDD running...."); metricaBatchService.updateMetricaBatch(metricaBatch); LOG.info("UPDATE BBDD done"); throw e; } LOG.info("UPDATE BBDD running...."); metricaBatchService.updateMetricaBatch(metricaBatch); LOG.info("UPDATE BBDD done"); return response; } // ***************** UPDATE BATCH ***************** @RequestMapping(value = "/updateMetricBBDDES", method = RequestMethod.POST) public @ResponseBody CreateForm updateMetricBBDDES(Model model, HttpSession session, @RequestBody final CreateForm form) { try { MetricaBatch metricaBatch = null; metricaBatch = metricaBatchService.findMetricaBatch(new Long(form.getHidModif())); Properties prop = new Properties(); ClassLoader loader = Thread.currentThread().getContextClassLoader(); InputStream resourceStream = loader.getResourceAsStream("META-INF/spring/environment.properties"); prop.load(resourceStream); // Se borra el indice de elasticsearch si existe HttpConnector httpConnector = new HttpConnector(); String url = "http://" + prop.getProperty("elastic.url.datanode1") + ":" + prop.getProperty("elastic.port.datanodes") + "/" + metricaBatch.getEsIndex() + "/" + metricaBatch.getEsType(); try { //httpConnector.launchHttp(url, "DELETE", null); } catch (Exception e) { LOG.warn("Index not found in elasticsearch"); } try { url = "http://" + prop.getProperty("elastic.url.datanode1") + ":" + prop.getProperty("elastic.port.datanodes") + "/" + metricaBatch.getEsIndex() + "/" + form.getBatchMetricName(); //httpConnector.launchHttp(url, "DELETE", null); } catch (Exception e) { LOG.warn("Index not found in elasticsearch"); } // Se crea el indice en elasticsearch createESIndex(metricaBatch.getEsIndex(), form.getBatchMetricName(), form.getTypeQuery(), prop, form.getEsTimestamp()); // Se borra la tabla de hive antigua String dropQueryOld = "DROP TABLE IF EXISTS " + metricaBatch.getEsType(); // Se borra la tabla de hive antigua String dropQueryNew = "DROP TABLE IF EXISTS " + form.getBatchMetricName(); // Se crea la tabla de hive StringBuilder externalQuery = new StringBuilder(); externalQuery.append("CREATE EXTERNAL TABLE "); externalQuery.append(form.getBatchMetricName()); externalQuery.append("("); externalQuery.append(form.getTypeQuery()); externalQuery.append(") "); externalQuery.append("STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' TBLPROPERTIES('es.resource' = '"); externalQuery.append(metricaBatch.getEsIndex() + "/" + form.getBatchMetricName()); boolean esID = false; if (form.getEsId() != null && (!form.getEsId().equals(""))){ externalQuery.append("', 'es.mapping.id' = '"); externalQuery.append(form.getEsId()); externalQuery.append("', 'es.id.field' = '"); externalQuery.append(form.getEsId()); esID = true; } if (! esID){ if (form.getSelectQuery().indexOf(" as ID") != -1) { externalQuery.append("', 'es.mapping.id' = '"); externalQuery.append(metricaBatch.getEsCamposId()); externalQuery.append("', 'es.id.field' = '"); externalQuery.append(metricaBatch.getEsCamposId()); } } externalQuery.append("', 'es.index.auto.create' = 'true','es.nodes' = '"); externalQuery.append(prop.getProperty("elastic.url.datanode1") + "," + prop.getProperty("elastic.url.datanode2") + "," + prop.getProperty("elastic.url.datanode3")); externalQuery.append("', 'es.port' = '" + prop.getProperty("elastic.port.datanodes")); if (form.getEsTimestamp() != null && (!form.getEsTimestamp().equals(""))) { externalQuery.append("', 'es.mapping.names' = '" + form.getEsTimestamp() + ":@timestamp"); } externalQuery.append("')"); HiveConnector hiveConnector = new HiveConnector(); hiveConnector.executeQuery(dropQueryOld); hiveConnector.executeQuery(dropQueryNew); hiveConnector.executeQuery(externalQuery.toString()); // Se actualiza en MYSQL String strSelectQuery = form.getSelectQuery(); String strFromQuery = form.getFromQuery(); String strWhereQuery = form.getWhereQuery(); StringBuilder insertQuery = new StringBuilder(); insertQuery.append("INSERT OVERWRITE TABLE " + form.getBatchMetricName() + " "); insertQuery.append(strSelectQuery + " "); insertQuery.append(strFromQuery + " "); insertQuery.append(strWhereQuery); metricaBatch.setFechaUltModif(new Date()); metricaBatch.setIsUpdated(true); metricaBatch.setSelectQuery(form.getSelectQuery()); metricaBatch.setWhereQuery(form.getWhereQuery()); metricaBatch.setFechaUltModif(new Date()); metricaBatch.setQueryCode(insertQuery.toString()); metricaBatch.setTypeQuery(form.getTypeQuery()); metricaBatch.setEstado(ESTADO_EN_EJECUCION); metricaBatch.setBatchMetricDesc(form.getBatchMetricDesc()); metricaBatch.setBatchMetricName(form.getBatchMetricName()); metricaBatch.setEsTimestamp(form.getEsTimestamp()); metricaBatch.setPlanificacion(form.getPlanificacion()); metricaBatch.setUsuarioModificacion((String) session.getAttribute("username")); metricaBatch.setEsId(form.getEsId()); String isBatch = form.getRdMetricType(); if (isBatch.equals("1")) { metricaBatch.setIsBatch(true); } else { metricaBatch.setIsBatch(false); } LOG.info("UPDATE BBDD running...."); metricaBatchService.updateMetricaBatch(metricaBatch); LOG.info("UPDATE BBDD done"); } catch (Exception e) { form.setId("ERROR"); form.setError(e.toString()); } return form; } @RequestMapping(value = "/insertIntoHiveRel", method = RequestMethod.POST) public @ResponseBody String insertIntoHiveRel(@RequestBody final CreateForm form) throws Exception { String response = ""; MetricaBatch metricaBatch = null; try { metricaBatch = metricaBatchService.findMetricaBatch(new Long(form.getHidModif())); HiveConnector hiveConnector = new HiveConnector(); hiveConnector.executeQuery(metricaBatch.getQueryCode()); metricaBatch.setFechaUltModif(new Date()); metricaBatch.setEstado(ESTADO_OK); } catch (Exception e) { metricaBatch.setEstado(ESTADO_ERROR); metricaBatch.setError(e.toString()); response = "Error al insertar en Hive : " + e.toString(); LOG.info("UPDATE BBDD running...."); metricaBatchService.updateMetricaBatch(metricaBatch); LOG.info("UPDATE BBDD done"); throw e; } LOG.info("UPDATE BBDD running...."); metricaBatchService.updateMetricaBatch(metricaBatch); LOG.info("UPDATE BBDD done"); return response; } @RequestMapping(value = "/reLaunchMetric", method = RequestMethod.GET) public @ResponseBody String reLaunchMetric(@RequestParam String idMetric, Model model) throws Exception { MetricaBatch metricaBatch = null; try { metricaBatch = metricaBatchService.findMetricaBatch(new Long(idMetric)); metricaBatch.setFechaUltModif(new Date()); metricaBatch.setEstado(ESTADO_EN_EJECUCION); } catch (Exception e) { metricaBatch.setEstado(ESTADO_ERROR); metricaBatch.setError(e.toString()); LOG.info("UPDATE BBDD running...."); metricaBatchService.updateMetricaBatch(metricaBatch); LOG.info("UPDATE BBDD done"); throw e; } LOG.info("UPDATE BBDD running...."); metricaBatchService.updateMetricaBatch(metricaBatch); LOG.info("UPDATE BBDD done"); return ""; } @RequestMapping("/showbatch") public String showMetrics(Model model, HttpServletRequest request) { List<MetricaBatch> lstMetrics = metricaBatchService.findAllMetricaBatches(); model.addAttribute("lstMetrics", lstMetrics); model.addAttribute("search", request.getParameter("hidSearch")); if (request.getParameter("lang") != null){ model.addAttribute("lang", request.getParameter("lang")); request.getSession().setAttribute("lang", request.getParameter("lang")); } else if (request.getSession().getAttribute("lang") != null){ model.addAttribute("lang", request.getSession().getAttribute("lang")); } return "/console/showbatch"; } @RequestMapping("/refresh") public String refreshMetrics(@RequestParam String search, Model model) { List<MetricaBatch> lstMetrics = metricaBatchService.findAllMetricaBatches(); model.addAttribute("lstMetrics", lstMetrics); model.addAttribute("search", search); return "/console/showbatch"; } @RequestMapping("/updateMetric") public String updateMetric(@RequestParam String idMetric, Model model) { List<OrigenEstructurado> lstSources = origenEstructuradoService.findAllOrigenEstructuradoes(); model.addAttribute("lstSources", lstSources); MetricaBatch metricaBatch = metricaBatchService.findMetricaBatch(new Long(idMetric)); model.addAttribute("metricaBatch", metricaBatch); return "/console/createbatch"; } @RequestMapping(value = "/deleteMetric", method = RequestMethod.GET) public @ResponseBody String deleteMetric(@RequestParam String idMetric, Model model) throws Exception { Properties prop = new Properties(); ClassLoader loader = Thread.currentThread().getContextClassLoader(); InputStream resourceStream = loader.getResourceAsStream("META-INF/spring/environment.properties"); prop.load(resourceStream); MetricaBatch metricaBatch = metricaBatchService.findMetricaBatch(new Long(idMetric)); HttpConnector httpConnector = new HttpConnector(); String url = "http://" + prop.getProperty("elastic.url.datanode1") + ":" + prop.getProperty("elastic.port.datanodes") + "/" + metricaBatch.getEsIndex() + "/" + metricaBatch.getEsType(); try { httpConnector.launchHttp(url, "DELETE", null); } catch (Exception e) { LOG.warn("Index not found in elasticsearch"); } HiveConnector hiveConnector = new HiveConnector(); hiveConnector.executeQuery("DROP TABLE " + metricaBatch.getEsType()); LOG.info("DELETE BBDD running...."); metricaBatchService.deleteMetricaBatch(metricaBatch); LOG.info("DELETE BBDD done"); return ""; } @RequestMapping("/menu") public String menu(Model model, HttpSession session) { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); String name = auth.getName(); session.setAttribute("username", name); return "/console/menu"; } // ***************** CREATE ONLINE ***************** @RequestMapping("/createonline") public String getSourcesOnLine(Model model, HttpServletRequest request) { List<OrigenEstructurado> lstSources = origenEstructuradoService.findAllOrigenEstructuradoes(); model.addAttribute("lstSources", lstSources); model.addAttribute("metricaOnLine", new MetricaOnLine()); if (request.getParameter("lang") != null){ model.addAttribute("lang", request.getParameter("lang")); request.getSession().setAttribute("lang", request.getParameter("lang")); } else if (request.getSession().getAttribute("lang") != null){ model.addAttribute("lang", request.getSession().getAttribute("lang")); } return "/console/createonline"; } @RequestMapping(value = "/getFieldsBySourceOnLine") public String refreshFieldsOnLine(@RequestParam String idSource, Model model) { OrigenEstructurado origenEstructurado = origenEstructuradoService.findOrigenEstructurado(Long.valueOf(idSource)); origenEstructurado.getHsCamposOrigen().size(); Set<CamposOrigen> hsFields = origenEstructurado.getHsCamposOrigen(); List<CamposOrigen> lstFields = new ArrayList<CamposOrigen>(); for (CamposOrigen field : hsFields) { lstFields.add(field); } Collections.sort(lstFields, new Comparator<CamposOrigen>(){ public int compare(CamposOrigen s1, CamposOrigen s2) { return s1.getNombreCampo().compareTo(s2.getNombreCampo()); } }); model.addAttribute("lstFields", lstFields); return "/console/createonline :: #selFields"; } @RequestMapping(value = "/saveTable", method = RequestMethod.POST) public @ResponseBody TableDTO saveTable(HttpServletRequest request, @RequestBody final TableDTO tableDTO, Model model) { List<TableDTO> tablesSession = (List<TableDTO>) request.getSession().getAttribute("tablesSession"); int idTable = 1; if (tablesSession == null){ tablesSession = new ArrayList<TableDTO>(); } else if(tablesSession.size() > 0){ List lstIds = new ArrayList(); for (TableDTO tableDTOAux : tablesSession){ lstIds.add(tableDTOAux.getId()); } Collections.sort(lstIds); String lastId = (String) lstIds.get(lstIds.size() - 1); idTable = Integer.valueOf(lastId) + 1 ; } tableDTO.setId(new Integer(idTable).toString()); try { tableDTO.setEstado(getEstadoByCode(tableDTO.getEstado().getCode())); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } tablesSession.add(tableDTO); request.getSession().setAttribute("tablesSession", tablesSession); model.addAttribute("tablesSession", request.getSession().getAttribute("tablesSession")); return tableDTO; } @RequestMapping(value = "/updateTable", method = RequestMethod.POST) public @ResponseBody TableDTO updateTable(HttpServletRequest request, @RequestBody final TableDTO tableDTO, Model model) { List<TableDTO> tablesSession = (List<TableDTO>) request.getSession().getAttribute("tablesSession"); for (TableDTO tableDTOAux : tablesSession){ if(tableDTOAux.getId().equals(tableDTO.getId())){ tableDTOAux.setTableFields(tableDTO.getTableFields()); tableDTOAux.setTableName(tableDTO.getTableName()); tableDTOAux.setVersionMetadata(tableDTO.getVersionMetadata()); try { tableDTOAux.setEstado(getEstadoByCode(tableDTO.getEstado().getCode())); } catch (Exception e) { e.printStackTrace(); } } } request.getSession().setAttribute("tablesSession", tablesSession); model.addAttribute("tablesSession", request.getSession().getAttribute("tablesSession")); return tableDTO; } @RequestMapping(value = "/findTableById", method = RequestMethod.POST) public @ResponseBody TableDTO findTableById(@RequestParam String idTable, HttpServletRequest request) { TableDTO tableDTO = null; List<TableDTO> tablesSession = (List<TableDTO>) request.getSession().getAttribute("tablesSession"); for (TableDTO tableDTOAux : tablesSession){ if(tableDTOAux.getId().equals(idTable)){ tableDTO = tableDTOAux; break; } } return tableDTO; } @RequestMapping(value= "/deleteTable") public String deleteTable(@RequestParam String idTable, HttpServletRequest request, Model model) { List<TableDTO> tablesSession = (List<TableDTO>) request.getSession().getAttribute("tablesSession"); int index = 0; for (TableDTO tableDTOAux : tablesSession){ if(tableDTOAux.getId().equals(idTable)){ break; } index++; } tablesSession.remove(index); request.getSession().setAttribute("tablesSession", tablesSession); model.addAttribute("tablesSession", request.getSession().getAttribute("tablesSession")); return "/console/createonline :: #divTableTable"; } @RequestMapping("/getTables") public String getTables(Model model, HttpServletRequest request) { model.addAttribute("tablesSession", request.getSession().getAttribute("tablesSession")); return "/console/createonline :: #divTableTable"; } @RequestMapping(value = "/saveQuery", method = RequestMethod.POST) public @ResponseBody QueryDTO saveQuery(HttpServletRequest request, @RequestBody final QueryDTO queryDTO, Model model) { List<QueryDTO> queriesSession = (List<QueryDTO>) request.getSession().getAttribute("queriesSession"); int idQuery = 1; if (queriesSession == null){ queriesSession = new ArrayList<QueryDTO>(); } else if(queriesSession.size() > 0){ List lstIds = new ArrayList(); for (QueryDTO queryDTOAux : queriesSession){ lstIds.add(queryDTOAux.getId()); } Collections.sort(lstIds); String lastId = (String) lstIds.get(lstIds.size() - 1); idQuery = Integer.valueOf(lastId) + 1 ; } try { queryDTO.setEstado(getEstadoByCode(queryDTO.getEstado().getCode())); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } queryDTO.setId(new Integer(idQuery).toString()); queriesSession.add(queryDTO); request.getSession().setAttribute("queriesSession", queriesSession); model.addAttribute("queriesSession", request.getSession().getAttribute("queriesSession")); return queryDTO; } @RequestMapping(value = "/updateQuery", method = RequestMethod.POST) public @ResponseBody QueryDTO updateQuery(HttpServletRequest request, @RequestBody final QueryDTO queryDTO, Model model) { List<QueryDTO> queriesSession = (List<QueryDTO>) request.getSession().getAttribute("queriesSession"); for (QueryDTO queryDTOAux : queriesSession){ if(queryDTOAux.getId().equals(queryDTO.getId())){ queryDTOAux.setQueryAs(queryDTO.getQueryAs()); queryDTOAux.setQueryFrom(queryDTO.getQueryFrom()); queryDTOAux.setQueryGroupBy(queryDTO.getQueryGroupBy()); queryDTOAux.setQueryInto(queryDTO.getQueryInto()); queryDTOAux.setQueryName(queryDTO.getQueryName()); queryDTOAux.setQueryId(queryDTO.getQueryId()); queryDTOAux.setOutputFieldFormat(queryDTO.getOutputFieldFormat()); queryDTOAux.setRdCallback(queryDTO.getRdCallback()); queryDTOAux.setEsTTL(queryDTO.getEsTTL()); queryDTOAux.setEsType(queryDTO.getEsType()); queryDTOAux.setQueryOrder(queryDTO.getQueryOrder()); queryDTOAux.setEstado(queryDTO.getEstado()); try { queryDTOAux.setEstado(getEstadoByCode(queryDTO.getEstado().getCode())); } catch (Exception e) { e.printStackTrace(); } } } request.getSession().setAttribute("queriesSession", queriesSession); model.addAttribute("queriesSession", request.getSession().getAttribute("queriesSession")); return queryDTO; } @RequestMapping(value = "/findQueryById", method = RequestMethod.POST) public @ResponseBody QueryDTO findQueryById(@RequestParam String idQuery, HttpServletRequest request) { QueryDTO queryDTO = null; List<QueryDTO> queriesSession = (List<QueryDTO>) request.getSession().getAttribute("queriesSession"); for (QueryDTO queryDTOAux : queriesSession){ if(queryDTOAux.getId().equals(idQuery)){ queryDTO = queryDTOAux; break; } } return queryDTO; } @RequestMapping(value= "/deleteQuery") public String deleteQuery(@RequestParam String idQuery, HttpServletRequest request, Model model) { List<QueryDTO> queriesSession = (List<QueryDTO>) request.getSession().getAttribute("queriesSession"); int index = 0; for (QueryDTO queryDTOAux : queriesSession){ if(queryDTOAux.getId().equals(idQuery)){ break; } index++; } queriesSession.remove(index); request.getSession().setAttribute("queriesSession", queriesSession); model.addAttribute("queriesSession", request.getSession().getAttribute("queriesSession")); return "/console/createonline :: #divTable"; } @RequestMapping("/getQueries") public String getQueries(Model model, HttpServletRequest request) { model.addAttribute("queriesSession", request.getSession().getAttribute("queriesSession")); return "/console/createonline :: #divTable"; } @RequestMapping(value = "/updateQueryToRemove") public String updateQueryToRemove(@RequestParam String idMetric, @RequestParam String idQuery, HttpServletRequest request, Model model) throws Exception { QueryCep queryCep = queryCepService.findQueryCep(new Long(idQuery)); List<QueryDTO> queriesSession = (List<QueryDTO>) request.getSession().getAttribute("queriesSession"); for (QueryDTO queryDTOAux : queriesSession){ if(queryDTOAux.getId().equals(queryCep.getId().toString())){ try { int versionMetaData = queryCep.getVersionMetadata().intValue(); queryDTOAux.setVersionMetadata(new Integer(versionMetaData) + 1); queryDTOAux.setEstado(getEstadoByCode(ESTADO_ONLINE_QUERY_EN_BORRADO)); } catch (Exception e) { e.printStackTrace(); } } } request.getSession().setAttribute("queriesSession", queriesSession); model.addAttribute("queriesSession", request.getSession().getAttribute("queriesSession")); return "/console/createonline :: #divTable"; } @RequestMapping(value = "/updateTableToRemove") public String updateTableToRemove(@RequestParam String idMetric, @RequestParam String idTable, HttpServletRequest request, Model model) throws Exception { TableCep tableCep = tableCepService.findTableCep(new Long(idTable)); List<TableDTO> tablesSession = (List<TableDTO>) request.getSession().getAttribute("tablesSession"); for (TableDTO tableDTOAux : tablesSession){ if(tableDTOAux.getId().equals(tableCep.getId().toString())){ try { int versionMetaData = tableCep.getVersionMetadata().intValue(); tableDTOAux.setVersionMetadata(new Integer(versionMetaData) + 1); tableDTOAux.setEstado(getEstadoByCode(ESTADO_ONLINE_TABLE_EN_BORRADO)); } catch (Exception e) { e.printStackTrace(); } } } request.getSession().setAttribute("tablesSession", tablesSession); model.addAttribute("tablesSession", request.getSession().getAttribute("tablesSession")); return "/console/createonline :: #divTableTable"; } @RequestMapping(value = "/createOnLineMetric", method = RequestMethod.POST) public @ResponseBody CreateOnLineForm createOnLineMetric(Model model, HttpServletRequest request, @RequestBody final CreateOnLineForm form) { try { boolean enCreacionStream = true; boolean enCreacionQuery = true; boolean enCreacionTable = true; boolean enCreacionMetrica = true; SiddhiConfiguration configuration = new SiddhiConfiguration(); List<Class> ext = new ArrayList<Class>(); ext.add(SumadorCondicionalConReinicioAggregatorFactory.class); ext.add(MediaCondicionadaAggregatorFactory.class); configuration.setSiddhiExtensions(ext); SiddhiManager siddhiManager = new SiddhiManager(configuration); String isModif = form.getHidModif(); // STREAMCEP MetricaOnLine metricaOnLine = null; StreamCep streamCep = null; int versionMetaData = 0; if (isModif.equals("0")) { metricaOnLine = new MetricaOnLine(); streamCep = new StreamCep(); streamCep.setEstado(getEstadoByCode(ESTADO_ONLINE_STREAM_EN_CREACION)); streamCep.setVersionMetadata(new Integer(0)); streamCep.setStreamCepId(null); } else{ metricaOnLine = metricaOnLineService.findMetricaOnLine(new Long(isModif)); streamCep = metricaOnLine.getStreamCep(); if (! form.getStreamName().equalsIgnoreCase(streamCep.getStreamName())){ enCreacionStream = false; } else if (! form.getStreamFields().equalsIgnoreCase(streamCep.getStreamFields())){ enCreacionStream = false; } if (! enCreacionStream){ streamCep.setEstado(getEstadoByCode(ESTADO_ONLINE_STREAM_EN_ACTUALIZACION)); versionMetaData = streamCep.getVersionMetadata().intValue(); streamCep.setVersionMetadata(new Integer(versionMetaData) + 1); enCreacionMetrica = false; } } OrigenEstructurado origen = origenEstructuradoService.findOrigenEstructurado(new Long(form.getSourceId())); streamCep.setOrigenEstructurado(origen); streamCep.setStreamName(form.getStreamName()); streamCep.setStreamFields(form.getStreamFields()); streamCep.setStreamFinal("define stream " + streamCep.getStreamName() + " (" + streamCep.getStreamFields() + ");"); try { siddhiManager.defineStream(streamCep.getStreamFinal()); } catch (Exception e) { form.setId("ERROR"); form.setError("<b>Stream Cep</b>: " +e.toString()); e.printStackTrace(); return form; } // TABLECEP TableCep tableCep = null; Set<TableCep> sTableCep = new HashSet<TableCep>(); List<TableDTO> tablesSession = (List<TableDTO>) request.getSession().getAttribute("tablesSession"); Map<String,TableCep> hmTablesBBDD = new HashMap<String, TableCep>(); if (tablesSession != null){ Map<String,TableDTO> hmTablesDTO = new HashMap<String, TableDTO>(); for (TableCep table :metricaOnLine.getHsTableCep()){ hmTablesBBDD.put(table.getId().toString(), table); // Map with database values } for (TableDTO tableDTO : tablesSession) { enCreacionTable = true; hmTablesDTO.put(tableDTO.getId(), tableDTO); // Map with form values tableCep = new TableCep(); tableCep.setTableCepName(tableDTO.getTableName()); tableCep.setTableCepFields(tableDTO.getTableFields()); tableCep.setTableCepFinal("define table " + tableCep.getTableCepName() + " (" + tableCep.getTableCepFields() + ");"); if (hmTablesBBDD.containsKey(tableDTO.getId())){ // Check if it changed TableCep tableBBDD = hmTablesBBDD.get(tableDTO.getId()); if (isModif.equals("0")) { tableCep.setTableCepId(null); } else{ tableCep.setTableCepId(tableBBDD.getTableCepId()); } if (! tableDTO.getTableName().equalsIgnoreCase(tableBBDD.getTableCepName())){ enCreacionTable = false; } else if (! tableDTO.getTableFields().equalsIgnoreCase(tableBBDD.getTableCepFields())){ enCreacionTable = false; } else if (! tableDTO.getEstado().getId().toString().equals(tableBBDD.getId().toString())){ tableCep.setEstado(tableDTO.getEstado()); tableCep.setVersionMetadata(tableDTO.getVersionMetadata()); enCreacionMetrica = false; } else{ tableCep.setVersionMetadata(tableBBDD.getVersionMetadata()); tableCep.setEstado(tableBBDD.getEstado()); } if (! enCreacionTable){ tableCep.setEstado(getEstadoByCode(ESTADO_ONLINE_TABLE_EN_ACTUALIZACION)); versionMetaData = tableBBDD.getVersionMetadata().intValue(); tableCep.setVersionMetadata(new Integer(versionMetaData) + 1); enCreacionMetrica = false; } } else{ enCreacionTable = false; tableCep.setVersionMetadata(new Integer(0)); tableCep.setEstado(getEstadoByCode(ESTADO_ONLINE_TABLE_EN_CREACION)); } try { if (! tableCep.getEstado().getCode().equals(ESTADO_ONLINE_TABLE_EN_BORRADO)){ siddhiManager.defineTable(tableCep.getTableCepFinal()); } } catch (Exception e) { form.setId("ERROR"); form.setError("<b>Table Cep</b>: " + e.toString()); e.printStackTrace(); return form; } sTableCep.add(tableCep); } if (hmTablesBBDD.size() != hmTablesDTO.size()){ enCreacionMetrica = false; } } // QUERYCEP QueryCep queryCep = null; String queryFinal = null; String outputFieldNames = null; Set<QueryCep> sQueryCep = new HashSet<QueryCep>(); List<QueryDTO> queriesSession = (List<QueryDTO>) request.getSession().getAttribute("queriesSession"); Collections.sort(queriesSession); form.setQueries(queriesSession); Map<String,QueryCep> hmQueriesBBDD = new HashMap<String, QueryCep>(); if (queriesSession != null){ Map<String,QueryDTO> hmQueriesDTO = new HashMap<String, QueryDTO>(); for (QueryCep query :metricaOnLine.getHsQueryCep()){ hmQueriesBBDD.put(query.getId().toString(), query); // Map with database values } for (QueryDTO queryDTO : queriesSession) { enCreacionQuery = true; hmQueriesDTO.put(queryDTO.getId(), queryDTO); // Map with form values queryCep = new QueryCep(); outputFieldNames = queryDTO.getQueryAs(); outputFieldNames = outputFieldNames.toLowerCase(); String [] arrOutputFieldNames = outputFieldNames.split(" as "); String strOutputFieldNames = ""; for(int i=1;i<arrOutputFieldNames.length;i++){ if (i == arrOutputFieldNames.length){ strOutputFieldNames = strOutputFieldNames.concat(arrOutputFieldNames[i]); } else{ String [] cc = arrOutputFieldNames[i].split(","); strOutputFieldNames = strOutputFieldNames.concat(cc[0]) + ","; } } strOutputFieldNames = strOutputFieldNames.trim().substring(0,strOutputFieldNames.length()-1); queryCep.setOutputFieldNames(strOutputFieldNames); if (queryDTO.getRdCallback() == null){ queryCep.setHasCallback(false); } else{ if (queryDTO.getRdCallback().equals("") || queryDTO.getRdCallback().equals("0")){ queryCep.setHasCallback(false); } else{ queryCep.setHasCallback(true); } } queryCep.setGroupBy(queryDTO.getQueryGroupBy()); queryCep.setOutputFieldUser(queryDTO.getQueryAs()); queryCep.setOutputStream(queryDTO.getQueryInto()); queryCep.setQueryDefinition(queryDTO.getQueryFrom()); queryCep.setQueryName(queryDTO.getQueryName()); if (queryDTO.getQueryId() != null){ queryCep.setEsId(queryDTO.getQueryId()); } queryCep.setOutputFieldFormat(queryDTO.getOutputFieldFormat()); queryCep.setEsTTL(queryDTO.getEsTTL()); queryCep.setEsType(queryDTO.getEsType()); queryFinal = queryDTO.getQueryFrom() + " " + queryDTO.getQueryAs() + " " + queryDTO.getQueryGroupBy() + " " + queryDTO.getQueryInto() ; queryCep.setQueryFinal(queryFinal); queryCep.setQueryOrder(queryDTO.getQueryOrder()); if (hmQueriesBBDD.containsKey(queryDTO.getId())){ // Check if it changed QueryCep queryBBDD = hmQueriesBBDD.get(queryDTO.getId()); if (isModif.equals("0")) { queryCep.setQueryCepId(null); } else{ queryCep.setQueryCepId(queryBBDD.getQueryCepId()); } if (! queryDTO.getQueryGroupBy().equalsIgnoreCase(queryBBDD.getGroupBy())){ enCreacionQuery = false; } else if (! queryDTO.getQueryAs().equalsIgnoreCase(queryBBDD.getOutputFieldUser())){ enCreacionQuery = false; } else if (! queryDTO.getQueryInto().equalsIgnoreCase(queryBBDD.getOutputStream())){ enCreacionQuery = false; } else if (! queryDTO.getQueryFrom().equalsIgnoreCase(queryBBDD.getQueryDefinition())){ enCreacionQuery = false; } else if (! queryDTO.getQueryName().equalsIgnoreCase(queryBBDD.getQueryName())){ enCreacionQuery = false; } else if (! queryDTO.getOutputFieldFormat().equalsIgnoreCase(queryBBDD.getOutputFieldFormat())){ enCreacionQuery = false; } else if (! queryDTO.getEsTTL().equalsIgnoreCase(queryBBDD.getEsTTL())){ enCreacionQuery = false; } else if (! queryDTO.getQueryId().equalsIgnoreCase(queryBBDD.getEsId())){ enCreacionQuery = false; } else if (queryBBDD.getHasCallback() && queryDTO.getRdCallback().equals("0")){ enCreacionQuery = false; } else if ((! queryBBDD.getHasCallback()) && queryDTO.getRdCallback().equals("1")){ enCreacionQuery = false; } else if (! queryDTO.getEstado().getId().toString().equals(queryBBDD.getId().toString())){ queryCep.setEstado(queryDTO.getEstado()); queryCep.setVersionMetadata(queryDTO.getVersionMetadata()); } else{ queryCep.setVersionMetadata(queryBBDD.getVersionMetadata()); queryCep.setEstado(queryBBDD.getEstado()); enCreacionMetrica = false; } if(! enCreacionQuery){ queryCep.setEstado(getEstadoByCode(ESTADO_ONLINE_QUERY_EN_ACTUALIZACION)); versionMetaData = queryBBDD.getVersionMetadata().intValue(); queryCep.setVersionMetadata(new Integer(versionMetaData) + 1); enCreacionMetrica = false; } } else{ enCreacionQuery = false; queryCep.setVersionMetadata(new Integer(0)); queryCep.setEstado(getEstadoByCode(ESTADO_ONLINE_QUERY_EN_CREACION)); } try { if (! queryCep.getEstado().getCode().equals(ESTADO_ONLINE_QUERY_EN_BORRADO)){ siddhiManager.addQuery(queryCep.getQueryFinal()); } } catch (Exception e) { form.setId("ERROR"); form.setError("<b>Query Cep -> " + queryDTO.getQueryName() + "</b>: " + e.toString()); e.printStackTrace(); return form; } sQueryCep.add(queryCep); } if (hmQueriesBBDD.size() != hmQueriesDTO.size()){ enCreacionMetrica = false; } } metricaOnLine.setHsTableCep(sTableCep); metricaOnLine.setHsQueryCep(sQueryCep); metricaOnLine.setStreamCep(streamCep); metricaOnLine.setOnLineMetricDesc(form.getOnLineMetricDesc()); metricaOnLine.setOnLineMetricName(form.getOnLineMetricName()); metricaOnLine.setUsuarioCreacion((String) request.getSession().getAttribute("username")); metricaOnLine.setEsCamposId(ES_MAPPING_ID); metricaOnLine.setEsIndex(form.getSelSourceName()); metricaOnLine.setEsType(form.getOnLineMetricName()); metricaOnLine.setFechaUltModif(new Date()); metricaOnLine.setError(null); if (isModif.equals("0")) { metricaOnLine.setFechaCreacion(new Date()); metricaOnLine.setVersionMetadata(new Integer(0)); metricaOnLine.setEstado(getEstadoByCode(ESTADO_ONLINE_METRICA_EN_CREACION)); LOG.info("SAVE BBDD running...."); metricaOnLineService.saveMetricaOnLine(metricaOnLine); LOG.info("SAVE BBDD done"); } else { if (! enCreacionMetrica){ metricaOnLine.setEstado(getEstadoByCode(ESTADO_ONLINE_METRICA_EN_ACTUALIZACION)); versionMetaData = metricaOnLine.getVersionMetadata().intValue(); metricaOnLine.setVersionMetadata(new Integer(versionMetaData) + 1); } LOG.info("UPDATE BBDD running...."); metricaOnLineService.updateMetricaOnLine(metricaOnLine); LOG.info("UPDATE BBDD done"); } form.setId(metricaOnLine.getId().toString()); for (TableCep tableBBDD : hmTablesBBDD.values()){ tableCepService.deleteTableCep(tableBBDD); } for (QueryCep queryBBDD : hmQueriesBBDD.values()){ queryCepService.deleteQueryCep(queryBBDD); } } catch (Exception e) { form.setId("ERROR"); form.setError("<b>General</b>: " + e.toString()); e.printStackTrace(); } return form; } private Estado getEstadoByCode(String code) throws Exception{ List<Estado> lstEstado = estadoRepository.findEstadoByCode(code); return lstEstado.get(0); } @RequestMapping("/showonline") public String showOnLine(Model model, HttpServletRequest request) { List<MetricaOnLine> lstMetrics = metricaOnLineService.findAllMetricaOnLines(); model.addAttribute("lstMetrics", lstMetrics); model.addAttribute("search", request.getParameter("hidSearch")); model.addAttribute("lang", request.getParameter("lang")); if (request.getParameter("lang") != null){ model.addAttribute("lang", request.getParameter("lang")); request.getSession().setAttribute("lang", request.getParameter("lang")); } else if (request.getSession().getAttribute("lang") != null){ model.addAttribute("lang", request.getSession().getAttribute("lang")); } return "/console/showonline"; } @RequestMapping("/refreshOnLine") public String refreshOnLineMetrics(@RequestParam String search, Model model) { List<MetricaOnLine> lstMetrics = metricaOnLineService.findAllMetricaOnLines(); model.addAttribute("lstMetrics", lstMetrics); model.addAttribute("search", search); return "/console/showonline"; } @RequestMapping("/updateOnLineMetric") public String updateOnLineMetric(@RequestParam String idMetric, Model model, HttpServletRequest request) { List<TableDTO> tablesBBDD; List<QueryDTO> queriesBBDD; try { List<OrigenEstructurado> lstSources = origenEstructuradoService.findAllOrigenEstructuradoes(); model.addAttribute("lstSources", lstSources); MetricaOnLine metricaOnLine = metricaOnLineService.findMetricaOnLine(new Long(idMetric)); model.addAttribute("metricaOnLine", metricaOnLine); tablesBBDD = new ArrayList<TableDTO>(); TableDTO tableDTO = null; if (metricaOnLine.getHsTableCep() != null){ for (TableCep tableCep : metricaOnLine.getHsTableCep()){ tableDTO = new TableDTO(); tableDTO.setId(tableCep.getId().toString()); tableDTO.setTableFields(tableCep.getTableCepFields()); tableDTO.setTableName(tableCep.getTableCepName()); tableDTO.setEstado(tableCep.getEstado()); tableDTO.setVersionMetadata(tableCep.getVersionMetadata()); tablesBBDD.add(tableDTO); } } queriesBBDD = new ArrayList<QueryDTO>(); QueryDTO queryDTO = null; if (metricaOnLine.getHsQueryCep() != null){ for (QueryCep queryCep : metricaOnLine.getHsQueryCep()){ queryDTO = new QueryDTO(); queryDTO.setId(queryCep.getId().toString()); queryDTO.setQueryAs(queryCep.getOutputFieldUser()); queryDTO.setQueryFrom(queryCep.getQueryDefinition()); queryDTO.setQueryGroupBy(queryCep.getGroupBy()); queryDTO.setQueryInto(queryCep.getOutputStream()); queryDTO.setQueryName(queryCep.getQueryName()); queryDTO.setQueryId(queryCep.getEsId()); queryDTO.setOutputFieldFormat(queryCep.getOutputFieldFormat()); queryDTO.setEsTTL(queryCep.getEsTTL()); queryDTO.setEsType(queryCep.getEsType()); queryDTO.setQueryOrder(queryCep.getQueryOrder()); queryDTO.setEstado(queryCep.getEstado()); queryDTO.setVersionMetadata(queryCep.getVersionMetadata()); if (queryCep.getHasCallback()){ queryDTO.setRdCallback("1"); } else{ queryDTO.setRdCallback("0"); } queriesBBDD.add(queryDTO); } } model.addAttribute("tablesSession", tablesBBDD); request.getSession().setAttribute("tablesSession", tablesBBDD); model.addAttribute("queriesSession", queriesBBDD); request.getSession().setAttribute("queriesSession", queriesBBDD); if (request.getParameter("lang") != null){ model.addAttribute("lang", request.getParameter("lang")); request.getSession().setAttribute("lang", request.getParameter("lang")); } else if (request.getSession().getAttribute("lang") != null){ model.addAttribute("lang", request.getSession().getAttribute("lang")); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return "/console/createonline"; } @RequestMapping(value = "/updateToRemove", method = RequestMethod.GET) public @ResponseBody String updateToRemove(@RequestParam String idMetric, Model model) throws Exception { MetricaOnLine metricaOnLine = metricaOnLineService.findMetricaOnLine(new Long(idMetric)); metricaOnLine.setEstado(getEstadoByCode(ESTADO_ONLINE_METRICA_EN_BORRADO)); int versionMetaData = metricaOnLine.getVersionMetadata().intValue(); metricaOnLine.setVersionMetadata(new Integer(versionMetaData) + 1); metricaOnLineService.updateMetricaOnLine(metricaOnLine); StreamCep streamCep = metricaOnLine.getStreamCep(); streamCep.setEstado(getEstadoByCode(ESTADO_ONLINE_STREAM_EN_BORRADO)); versionMetaData = streamCep.getVersionMetadata().intValue(); streamCep.setVersionMetadata(new Integer(versionMetaData) + 1); streamCepService.updateStreamCep(streamCep); for (TableCep tableCep : metricaOnLine.getHsTableCep()){ LOG.info("UPDATE BBDD running...."); tableCep.setEstado(getEstadoByCode(ESTADO_ONLINE_TABLE_EN_BORRADO)); versionMetaData = tableCep.getVersionMetadata().intValue(); tableCep.setVersionMetadata(new Integer(versionMetaData) + 1); tableCepService.updateTableCep(tableCep); LOG.info("UPDATE BBDD done"); } for (QueryCep queryCep : metricaOnLine.getHsQueryCep()){ LOG.info("UPDATE BBDD running...."); queryCep.setEstado(getEstadoByCode(ESTADO_ONLINE_QUERY_EN_BORRADO)); versionMetaData = queryCep.getVersionMetadata().intValue(); queryCep.setVersionMetadata(new Integer(versionMetaData) + 1); queryCepService.updateQueryCep(queryCep); LOG.info("UPDATE BBDD done"); } return ""; } @RequestMapping(value = "/deleteOnLineMetric", method = RequestMethod.GET) public @ResponseBody String deleteOnLineMetric(@RequestParam String idMetric, Model model) throws Exception { MetricaOnLine metricaOnLine = metricaOnLineService.findMetricaOnLine(new Long(idMetric)); LOG.info("DELETE BBDD running...."); metricaOnLineService.deleteMetricaOnLine(metricaOnLine); LOG.info("DELETE BBDD done"); return ""; } // ***************** TEST ***************** @RequestMapping(value = "/test", method = RequestMethod.GET) public String test(Model model) { List<MetricaOnLine> lstMetricaOnLine = null; try {/* JobDetail job = new JobDetail(); job.setName("dummyJobName"); job.setJobClass(com.produban.openbus.console.util.ScheduledJob.class); CronTrigger trigger = new CronTrigger(); trigger.setName("dummyTriggerName"); trigger.setCronExpression("0/30 * * * * ?"); //schedule it Scheduler scheduler = new StdSchedulerFactory().getScheduler(); scheduler.start(); scheduler.scheduleJob(job, trigger); */ lstMetricaOnLine = metricaOnLineService.findAllMetricaOnLines(); for (MetricaOnLine metricaOnLine : lstMetricaOnLine){ ObjectMapper mapper = new ObjectMapper(); try { model.addAttribute("json",mapper.writeValueAsString(metricaOnLine)); MetricaOnLine obj = mapper.readValue(mapper.writeValueAsString(metricaOnLine), MetricaOnLine.class); System.out.println(obj); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return "/test"; } @RequestMapping(value = "/test2", method = RequestMethod.GET) public @ResponseBody List<MetricaOnLine> test2(Model model) { List<MetricaOnLine> lstMetricaOnLine = null; try { lstMetricaOnLine = metricaOnLineService.findAllMetricaOnLines(); for (MetricaOnLine metricaOnLine : lstMetricaOnLine){ ObjectMapper mapper = new ObjectMapper(); try { model.addAttribute("json",mapper.writeValueAsString(metricaOnLine)); MetricaOnLine obj = mapper.readValue(mapper.writeValueAsString(metricaOnLine), MetricaOnLine.class); System.out.println(obj); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return lstMetricaOnLine; } }