blendb issueshttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues2019-09-11T14:30:10Zhttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/112Remover Select *2019-09-11T14:30:10ZLucas Fernandes de OliveiraRemover Select *Quando todos os atrivutos de uma view são selecionados a consulta coloca select*. Isso pode gerar complicações e não selecionar corretamente todos os atributos. Colocar por extenso os atributosQuando todos os atrivutos de uma view são selecionados a consulta coloca select*. Isso pode gerar complicações e não selecionar corretamente todos os atributos. Colocar por extenso os atributosRafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/108Adionar Logs ao Blendb2019-09-12T14:42:00ZLucas Fernandes de OliveiraAdionar Logs ao BlendbO Blendb não gera nenhum arquivo de log o que dificulta encontrar problemas.
Criar uma ferramenta que gere arquivos de log.
Devem existir diversos níveis de log. Pode ser utilizado o pacote log do npm.
A principio os logs podem ser ge...O Blendb não gera nenhum arquivo de log o que dificulta encontrar problemas.
Criar uma ferramenta que gere arquivos de log.
Devem existir diversos níveis de log. Pode ser utilizado o pacote log do npm.
A principio os logs podem ser gerados apenas nos controladores, não é necessário gerar log nos componentes mais internos (uma vez que esses componentes devolvem os erros para o controlador).
A ferramenta de log deve ser incluida por uma middleware (assim como a engine e o adaptador)
A configuração da ferramenta de log deve ser feita pelo arquivo config.env através de variaveis de ambiente.
Também deve ser modificado o script de criação de um serviço do systemd para criar um arquivo /var/log/blendb.log
O valor padrão para criar o arquivo de log deve ser /var/log/blendb.log, seguido de ./logs/blendb.log por fim a saída de erro.Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/105Verificar mensagens de erro2019-08-09T12:25:57ZLucas Fernandes de OliveiraVerificar mensagens de erroMuitas das mensagens de erro não são significativas e existem alguns casos no qual existe erro mas não é informada a causa.
Um exemplo é a consulta:
http://simmcdev:3000/v1/data?metrics=met:min:cadunico:familia:renda:media&dimensions=d...Muitas das mensagens de erro não são significativas e existem alguns casos no qual existe erro mas não é informada a causa.
Um exemplo é a consulta:
http://simmcdev:3000/v1/data?metrics=met:min:cadunico:familia:renda:media&dimensions=dim:cadunico:familia:data:alteracao&filters=dim:cadunico:familia:data:alteracao==2011-06-03
Nesse caso a conversão do filtro falha, mas por alguma razão o erro não é notificadoRafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/101Criar Classe para gerenciar mensagens de erro.2018-12-13T13:14:24ZLucas Fernandes de OliveiraCriar Classe para gerenciar mensagens de erro.Criar uma classe que gera as mensagens de erro.
Essa classe poderia ser chamada de ErrorHandler ou ErrorMsgHandler cujo objetivo é criar as mensagens de erro. Para cada mensagem de erro a classe deve ter um método para gerar uma mensage...Criar uma classe que gera as mensagens de erro.
Essa classe poderia ser chamada de ErrorHandler ou ErrorMsgHandler cujo objetivo é criar as mensagens de erro. Para cada mensagem de erro a classe deve ter um método para gerar uma mensagem específica. Caso a mensagem tenham parametros ela deve receber como argumento de função. A ideia da classe é padronizar as mensagens de erro e reduzir a quantidade de código repleta de strings gigantes.
Uma vez que a classe foi criada substituir as mensagens de erros por chamadas de funções dessa classe.https://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/87Implementação de dependecia funcional para definir escopo de métricas2018-08-22T12:43:58ZLucas Fernandes de OliveiraImplementação de dependecia funcional para definir escopo de métricasPode-se ocorrer casos em que uma métrica não pode ser dividida no conjunto de métricas fornecido. Nesse caso ocorre a replicação do valor. Anteriormente acreditava-se que esse era o comportamento desejado, mas existem casos que a respost...Pode-se ocorrer casos em que uma métrica não pode ser dividida no conjunto de métricas fornecido. Nesse caso ocorre a replicação do valor. Anteriormente acreditava-se que esse era o comportamento desejado, mas existem casos que a resposta é erronêa.
Um exemplo: Supondo que os dados de rede são coletados em nível de cidade, e uma outra métrica de inventário é coletado em nível de escola. O resultado da consulta **dados de rede por escola**, seria o seguinte: todas as escolas da mesma cidade apresentariam o mesmo valor, que é o total de tráfego da cidade.
Para evitar esse problema deve-se identificar quais dimensões podem ser utilizadas em conjunto com as métricas. Para isso basta utilizar a depêndencia funcional dos atributos.
A métrica deve possuir uma chave (conjunto de dimensões) e todas as dimensões são dependentes funcionais dessa chave (podem ser inferidas a partir da chave) são as dimensões que podem ser utilizadas em conjunto com a métrica.
## Especificação
* Na definição das dimensões (arquivo de configuração), deve existir um novo campo: uma lista de dimensões que podem ser utilizadas para inferir a dimensão atual
* Se A -> C e B -> C, então em C existe uma lista com os valores [A, B]
* Métricas devem possuir uma chave
* A chave pode ser inferida da **visão origem** da métrica
* O conjunto de dimensões dessa visão pode ser utilizado como chave
* Deve-se adicionar a verficação de unicidade da métrica e da **visão origem** da métrica
* As métricas devem conter uma lista de dimensões permitidas, para serrem utilizadas em conjunto
* Essa lista pode ser calculada na leitura do arquivo de configuração
* Basta criar um grafo com as informações de dependencia funcional e calcular o fecho transitivo (realizar uma busca em largura)
* Uma vez com a lista basta verificar se a lista de dimensões é um sub-conjunto da lista de dimensões permitidas para cada uma das métricas da consulta
## Implementação
* [ ] Adicionar novo campo no arquivo de configuração para as dimensões, contendo a informação de dependencia
* [ ] Adicionar novo campo a classe das métricas, com a lista de dimensões permitidas
* [ ] Criar um grafo a partir das informações de dependência no momento da leitura do arquivo de configuração
* [ ] Calcular o conjunto de dimensões permitidas por métrica, utilizando o grafo, realizando uma busca (provavelmente em, largura)
* [ ] Modificar a API para verificar se o conjunto de dimensões é um sub-conjunto do conjunto de dimensões permitidas. Caso o conjunto seja inválido, informar o erro.1.0Lucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/72Remover arquivos legados2018-04-05T14:06:52ZLucas Fernandes de OliveiraRemover arquivos legadosAlguns arquivos, como ```src/core/server``` e ```src/core/transformer``` são arquivos de uma versão legada que não são utilizados atualmente. Esses arquivos "inuteis" devem ser removidos pois provavelmente se sua funcionalidade for requi...Alguns arquivos, como ```src/core/server``` e ```src/core/transformer``` são arquivos de uma versão legada que não são utilizados atualmente. Esses arquivos "inuteis" devem ser removidos pois provavelmente se sua funcionalidade for requisitada, provavelmente não será compatível com a versão atual (o que ocorreu com ```src/core/source```)1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/68Adicionar tipo de retorno em todos os métodos2018-04-05T14:38:37ZLucas Fernandes de OliveiraAdicionar tipo de retorno em todos os métodosAlgumas classes possuem métodos que não dizem explicitamente o tipo de retorno. Definir o tipo explicitamente.Algumas classes possuem métodos que não dizem explicitamente o tipo de retorno. Definir o tipo explicitamente.1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/64Atualizar exemplo de configuração2018-03-19T11:49:27ZLucas Fernandes de OliveiraAtualizar exemplo de configuraçãoOs arquivos exemplo de configuração estão em um formato antigo, devem ser atualzados para serem compatíveis com as configurações atuais.
Os novos arquivos exemplo devem conter um exemplo de cada campo possível e este deve ser comentado,...Os arquivos exemplo de configuração estão em um formato antigo, devem ser atualzados para serem compatíveis com as configurações atuais.
Os novos arquivos exemplo devem conter um exemplo de cada campo possível e este deve ser comentado, exemplificando sua funçãohttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/56Implementar Adaptador para MonetDB2018-01-31T13:32:13ZLucas Fernandes de OliveiraImplementar Adaptador para MonetDBSupostamente o MonetDB usa SQL.
Criar um adaptador abstrado SQL utilziando Adaptador postgres existente e adicionar o adaptador para monetdbSupostamente o MonetDB usa SQL.
Criar um adaptador abstrado SQL utilziando Adaptador postgres existente e adicionar o adaptador para monetdbLucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/48Criar rotas que devolmen métricas e dimensões disponiveis2017-09-18T14:23:49ZLucas Fernandes de OliveiraCriar rotas que devolmen métricas e dimensões disponiveisCriar as rotas que devolvem quais são as métricas e dimensões diponíveis no BlenDB
Perguntas:
1. Essas rotas deverão responder apenas os nomes ou uma breve descrição (nesse caso a descrição deveria ser adicionada)Criar as rotas que devolvem quais são as métricas e dimensões diponíveis no BlenDB
Perguntas:
1. Essas rotas deverão responder apenas os nomes ou uma breve descrição (nesse caso a descrição deveria ser adicionada)Lucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/41[BUG]: Metricas retornam resultados incorretos em alguns joins2017-09-12T14:00:54ZLucas Fernandes de Oliveira[BUG]: Metricas retornam resultados incorretos em alguns joinsEmbora o mecanismo funcione corretamente o resultado não é o esperado. O problema ocorre quando a junção das tabelas não é "perfeita". Um exemplo uma view tem os atributos met:count:point e dim:point e outra tem met:sum:download, dim:poi...Embora o mecanismo funcione corretamente o resultado não é o esperado. O problema ocorre quando a junção das tabelas não é "perfeita". Um exemplo uma view tem os atributos met:count:point e dim:point e outra tem met:sum:download, dim:point, dim:macAddr. A consulta seleciona as duas métricas, logo será feita uam junção das duas views pela dimensão dim:point que é comum entre os dois. Porém o resultado da métrica met:count:point possivelmente será incorreto.
Isso ocorre pois é muito provavel que a segunda tabela que tem mais dimensões tenha mais de uma entrada por dim:point, dessa forma ao realizar o join as entradas da primeira serão repeditas e contabilizadas mais de uma vez, resultando em um resultado incorreto.
*Proposta:* para realizar joins as views tem que ter uma relação de um para um, ou seja, as mesmas dimensões antes de fazer um join.
*Problemas:* Em alguns casos é necessário fazer junções com quantidades de dimensões diferentes.
Considere o mesmo exemplo, agora além das métricas a dim:macAddr também é selecionada, a junção com quantidade diferente de dimensões é obrigatória.
*Proposta:* Em certos casos, a partir de um ponto as métricas devem se comportar como dimensões.
A junção com outra view com quantidade de entradas maior é inevitavel, porém se met:count:point fosse uma dimensão o resultado não seria incorreto, em outras palavras se o valor fosse agrupado ao invés de agregado não seriam contabilizadas de forma errada, logo se comportária como uma dimensão.
*Proposta:*
1. Agregamos as views materializadas separadamente, com as respectivas dimensões necessárias
2. Depois da agregação é feito o join, com as dimensões restantes, que seriam as necessárias para realizar o join entre as views e as que foram escolhidas na consulta
3. Remoção das dimensões extras (usadas apenas para propósito de junção) agrupando por todos os parametros que estavam na consulta
*Problemas:*
1. Nem todas as views criadas podem ser reaproveitas para realizar outras consultas, e portanto essas não podem ser materializadas.
2. A partir do momento que um métrica tem que ser tratada como uma dimensão, ela pode ser replicada e não pode ser agregada novamente
Usando esse algoritmo a query 1 (apenas as métricas) não funcionaria, na realidade ela seria equivalente a consulta utilizando também a dim:point, para que o resultado fosse correto, as métricas teriam que ser agregadas novamente, não tratadas como dimensões, isso se deve ao fato de que a junção nesse caso poderia ter sido "perfeita", primeiro agrupando por dim:point seriam criadas views com dimensões iguais, assim elas poderiam ser juntadas normalmente e as metricas poderiam ser agregadas normalmente.
*Solução:*
As junções devem ser feitas 2 a 2, ao invés de todas ao mesmo tempo, em formato de árvore, sempre que uma junção "perfeita" foi feita em um passo, então o resultado deve ser agregado novamente removendo as dimensões de junção, se for o caso. Se a junção não for perfeita a partir desse ponto as métricas devem ser tratadas como dimensões.
1. Escolhe-se 2 views
2. Agregamos as views separadamente, com as respectivas dimensões necessárias, tanto para consulta como para joins (além das duas em questão, mas de todo o conjunto)
3. Faz-se o join das duas views
4. Se a junção foi perfeita, as métricas continuam factíveis e podem continuar sendo agregadas, caso contrário marca as métricas para que sejam tratadas como dimensões agora e a view como não-materializavel
5. Volta para o passo 1 até que reste apenas uma view
6. Se a última junção foi perfeita agrega a view com as métricas restantes (métricas marcadas para o algoritmo não são consideradas métricas)
*Problemas:*
1. Vão existir views não-materializaveis (Elas podem serr materizalizadas mas seu resultado não pode ser aproveitado por outras consultas, então é pouco desejavel materializar uma consulta dessas)
2. Muito provavelmente a consulta construída será muito menos eficiente
3. A partir do momento que um métrica tem que ser tratada como uma dimensão, ela pode ser replicada e não pode ser agregada novamente
*Resolve:*
A junção de views com quantidade de dimensões diferentes se torna possível e retorna o resutlado corretoLucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/40Atualizar modo como métricas, dimensões e views são referenciadas nos testes.2017-08-25T12:34:29ZLucas Fernandes de OliveiraAtualizar modo como métricas, dimensões e views são referenciadas nos testes.Durante os testes as métricas, dimensões e views são lidas e armazenadas em vetores. Até a Issue #39) isso não foi um problema, mas agora em todos os testes isso deve ser corrigido. A princio uma mudança no arquivo de scenario, que conce...Durante os testes as métricas, dimensões e views são lidas e armazenadas em vetores. Até a Issue #39) isso não foi um problema, mas agora em todos os testes isso deve ser corrigido. A princio uma mudança no arquivo de scenario, que concentra todos os testes e lê do arquivo de configuração grande parte dos dados usados nos testes deve concertar o problema. Mas ainda assim outros locais devem ser conferidos e subtitiuidos.
Encontrar referências a métricas, dimensões e views que utilizam índice e realizar a ordenação apropriada para corrigir o erro de forma mais rápida.Lucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/33Melhorar função de analise dos filtros2017-10-16T11:49:30ZLucas Fernandes de OliveiraMelhorar função de analise dos filtrosA escolha de views e agregações é limitada pelos filtros aplicados. No momento apenas se o filtro casar perfeitamente (tem que se identico) a view é escolhida. En varios casos é o suficiente (Para operadores == e !=), porém com o operado...A escolha de views e agregações é limitada pelos filtros aplicados. No momento apenas se o filtro casar perfeitamente (tem que se identico) a view é escolhida. En varios casos é o suficiente (Para operadores == e !=), porém com o operador de > por exemplo, se a restrição é de maior que 3 meses, maior que 6 meses também poderia utilizar essa view, mas isso não ocorre.
Operadores individuais parecem simples de resolver, bastaria olhar o operador do filtro e aplicar algumas comparações, entretanto quando combinados com operador OR (maior que 3 meses ou ativo) já não funciona tão bem.
Acredito que o melhor é analizar alguns casos que seriam mais úteis que e que mais ocorrem e tentar abordar esse modelo mais restrito do que acertar 100% dos casos.
Encontrar essa lista de casos e melhorar a escolha dos filtros, a principio modificar a função checkConstranits da classe graph deve ser o suficiente para aplicar as mudanças.Lucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/28Atualizar mensagem de erro na API2017-08-25T13:17:19ZLucas Fernandes de OliveiraAtualizar mensagem de erro na APIQuando uma requisição falha pode ser por vários motivos, métrica não encontrada ou dimensão não encontrada, mas as respostas das requisições pouco informam sobre isso, apenas dizem que deu um erro. Modifica-las para serem mais informativ...Quando uma requisição falha pode ser por vários motivos, métrica não encontrada ou dimensão não encontrada, mas as respostas das requisições pouco informam sobre isso, apenas dizem que deu um erro. Modifica-las para serem mais informativas, apenas acrescentar a causa do erro na maioria dos casos deve ser o suficienteLucas Fernandes de OliveiraLucas Fernandes de Oliveira