From a04585a9c55b4a10abe7540821fdc81994c10ef8 Mon Sep 17 00:00:00 2001 From: Adsu Date: Tue, 27 Oct 2020 20:02:32 -0300 Subject: [PATCH] registrando servicos do rastreador --- services.xml | 23 ++- src/main/java/sacip/rest/RestTracking.java | 21 ++- .../java/sacip/sti/agents/TrackingAgent.java | 132 ++++++++++++++++-- .../sacip/sti/components/DBConnection.java | 22 +++ 4 files changed, 183 insertions(+), 15 deletions(-) diff --git a/services.xml b/services.xml index c946673..56c5b5a 100644 --- a/services.xml +++ b/services.xml @@ -98,7 +98,7 @@ - + @@ -108,6 +108,27 @@ mas SACIP + + storeSolvedExercise + Armazena os exercícios resolvidos do usuário + TrackingAgent + mas + SACIP + + + storeContentOnPath + Armazena os conteúdos na trilha usuário + TrackingAgent + mas + SACIP + + + storeStudentErrors + Armazena os erros do usuário + TrackingAgent + mas + SACIP + diff --git a/src/main/java/sacip/rest/RestTracking.java b/src/main/java/sacip/rest/RestTracking.java index 5143d7d..bd83f62 100644 --- a/src/main/java/sacip/rest/RestTracking.java +++ b/src/main/java/sacip/rest/RestTracking.java @@ -20,9 +20,7 @@ public class RestTracking { private static Logger LOG = LoggerFactory.getLogger(AgentServer.class); @PostMapping("/dadosUso") - public String armazenaDadosUso(@RequestBody JsonNode dados){ - // String informacoesInteressantes[] = {"Modulos mais utilizados", "Tags de Conteudo mais utilizadas", "Tópicos mais utilizados", "Frequencia de entrada no sistema", "Tempo gasto por tópico", - // "Tempo gasto por tag", "Tempo gasto por Modulo", "Exercicios que foi bem?"}; + public String armazenaDadosUso(@RequestBody JsonNode dados){ try { ServiceWrapper wrapper = AgentServer.require("SACIP", "storeData"); @@ -70,5 +68,22 @@ public String armazenaNovoConteudoTrilha(@RequestBody JsonNode dados) return e.getLocalizedMessage(); } } + + @PostMapping("/ErrosCometidos") + public String armazenaNovosErrosCometidos(@RequestBody JsonNode dados) + { + try + { + ServiceWrapper wrapper = AgentServer.require("SACIP", "storeStudentErrors"); + wrapper.addParameter("dados", dados); + List out = wrapper.run(); + return (String) out.get(0); + } + catch (Exception e) + { + LOG.error("Ocorreu erro ao enviar exercicio resolvido ao agente Tracking", e); + return e.getLocalizedMessage(); + } + } } diff --git a/src/main/java/sacip/sti/agents/TrackingAgent.java b/src/main/java/sacip/sti/agents/TrackingAgent.java index f98b759..ca77c00 100644 --- a/src/main/java/sacip/sti/agents/TrackingAgent.java +++ b/src/main/java/sacip/sti/agents/TrackingAgent.java @@ -1,11 +1,8 @@ package sacip.sti.agents; import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; @@ -19,10 +16,11 @@ import org.midas.as.agent.templates.LifeCycleException; import org.midas.as.agent.templates.ServiceException; import org.midas.as.manager.execution.ServiceWrapper; -import org.midas.as.manager.execution.ServiceWrapperException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sacip.sti.dataentities.Student; + public class TrackingAgent extends Agent implements MessageListener { private static Logger LOG = LoggerFactory.getLogger(AgentServer.class); @@ -30,7 +28,8 @@ public class TrackingAgent extends Agent implements MessageListener { @Override public void provide(String service, Map in, List out) throws ServiceException { - if (service.equals("storeData")) { + if (service.equals("storeData")) + { JsonNode dados = (JsonNode) in.get("dados"); if (dados.isObject()) { ObjectNode jsonobject = (ObjectNode) dados; @@ -99,24 +98,135 @@ public void provide(String service, Map in, List out) throws ServiceException { } + else if(service.equals("storeSolvedExercise")) + { + JsonNode dados = (JsonNode) in.get("dados"); + String nome = dados.get("nome").asText(); + + try { + ServiceWrapper wrapper = require("SACIP", "editStudentListAttr"); + wrapper.addParameter("name", nome); + wrapper.addParameter("attrName", "exerciciosResolvidos"); + wrapper.addParameter("newValue", dados.get("conteudo")); + out.add(wrapper.run().get(0)); + } catch (Exception e) { + out.add(e.getLocalizedMessage()); + LOG.error("ERRO NO TRACKING AGENT AO ENVIAR DADOS", e); + e.printStackTrace(); + } + } + else if(service.equals("storeContentOnPath")) + { + JsonNode dados = (JsonNode) in.get("dados"); + String nome = dados.get("nome").asText(); + + try { + ServiceWrapper wrapper = require("SACIP", "editStudentListAttr"); + wrapper.addParameter("name", nome); + wrapper.addParameter("attrName", "trilha"); + wrapper.addParameter("newValue", dados.get("conteudo")); + out.add(wrapper.run().get(0)); + } catch (Exception e) { + out.add(e.getLocalizedMessage()); + LOG.error("ERRO NO TRACKING AGENT AO ENVIAR DADOS", e); + e.printStackTrace(); + } + } + else if(service.equals("storeStudentErrors")) + { + JsonNode dados = (JsonNode) in.get("dados"); + String nome = dados.get("nome").asText(); + + try { + ServiceWrapper wrapper = require("SACIP", "editStudentListAttr"); + wrapper.addParameter("name", nome); + wrapper.addParameter("attrName", "errosDoEstudante"); + wrapper.addParameter("newValue", dados.get("conteudo")); + out.add(wrapper.run().get(0)); + } catch (Exception e) { + out.add(e.getLocalizedMessage()); + LOG.error("ERRO NO TRACKING AGENT AO ENVIAR DADOS", e); + e.printStackTrace(); + } + } } @Override protected void lifeCycle() throws LifeCycleException, InterruptedException { - // TODO Auto-generated method stub + Board.addMessageListener("SACIP", this); - // while(alive) - // { - // Thread.sleep(2000); - // } + while(alive) + { + try + { + ServiceWrapper wrapper = require("SACIP", "getAluno"); + Student estudante = (Student) wrapper.run(); + descobrirModulosMaisUtilizados(estudante); + descobrirTagsMaisUtilizadas(estudante); + descobrirTopicosMaisUtilizados(estudante); + verificarFrequenciaDoAluno(estudante); + descobrirTempoGastoPorTopico(estudante); + descobrirTempoGastoPorTag(estudante); + descobrirTempoGastoPorModulo(estudante); + descobrirTiposDeExercicioQueMelhorEPiorSaiu(estudante); + + } catch (Exception e) { + + LOG.error("Ocorreu um erro no ciclo de vida do Agente Rastreador", e); + } + Thread.sleep(300000); + } } - + @Override public void boardChanged(Message msg) { // TODO Auto-generated method stub } + private void descobrirTempoGastoPorTag(Student estudante) { + //Analisar os conteudos usados, horarios de entrada e saida + } + + private void descobrirTempoGastoPorModulo(Student estudante) { + //Analisar os conteudos usados, horarios de entrada e saida + } + + private void descobrirTempoGastoPorTopico(Student estudante) { + + //Analisar os conteudos usados, horarios de entrada e saida + + } + + private void descobrirTiposDeExercicioQueMelhorEPiorSaiu(Student estudante) { + + //Analisar trilhas, exercicios resolvidos e erros + + } + + private void verificarFrequenciaDoAluno(Student estudante) { + + //buscar as datas de entrada e saida do sistema do aluno + + } + + private void descobrirTopicosMaisUtilizados(Student estudante) { + + //buscar na trilha os Topicos de cada conteudo + } + + private void descobrirTagsMaisUtilizadas(Student estudante) { + + //buscar na trilha as tags de cada conteudo + + } + + private void descobrirModulosMaisUtilizados(Student estudante) { + + //buscar cada um dos cliques do alunos e verificar o tempo total + + } + } diff --git a/src/main/java/sacip/sti/components/DBConnection.java b/src/main/java/sacip/sti/components/DBConnection.java index 5b14ea9..56340ad 100644 --- a/src/main/java/sacip/sti/components/DBConnection.java +++ b/src/main/java/sacip/sti/components/DBConnection.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.JsonNodeFactory; import org.midas.as.AgentServer; @@ -48,6 +49,10 @@ public void provide(String service, Map in, List out) throws ServiceException { case "editStudent": out.add(editUser((String)in.get("name"), (String)in.get("attrName"), (String)in.get("newValue"))); break; + + case "editStudentListAttr": + out.add(editUserListAttr((String)in.get("name"), (String)in.get("attrName"), (JsonNode)in.get("newValue"))); + break; case "deleteStudent": out.add(deleteUser((String) in.get("name"))); @@ -279,6 +284,23 @@ private String editUser(String name, String atributeName, String newValue) } } + private String editUserListAttr(String name, String atributeName, JsonNode newValue) + { + try + { + var result = cypher.writequery("MATCH (n:USER { name: $name })"+ + "\nSET n.$atribute = coalesce(n.$atribute, []) + $newvalue"+ + "\nRETURN n.name, n.$atribute" + , Map.of("name", name, "atribute", atributeName, "newValue", newValue.toString())); + return result.toString(); + } + catch (Exception e) + { + LOG.error("FALHOU edicao de lista de estudante ", e); + return "FALHOU edicao de lista de estudante "+e.getLocalizedMessage(); + } + } + private String deleteUser(String name) { try