blendb issueshttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues2019-01-24T10:24:29Zhttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/98Variavel de ambiente com nome deve ser inicializada2019-01-24T10:24:29ZLucas Fernandes de OliveiraVariavel de ambiente com nome deve ser inicializadaQuando a variavel de ambiente **BLENDB_SCHEMA_FILE** não está presente no arquivo de configuração, o Blend trava, com o erro ao abrir o arquivo. A variavel deve ser corretamente inicializadas e o erro deve ser indicado propriamente, avis...Quando a variavel de ambiente **BLENDB_SCHEMA_FILE** não está presente no arquivo de configuração, o Blend trava, com o erro ao abrir o arquivo. A variavel deve ser corretamente inicializadas e o erro deve ser indicado propriamente, avisando que a variavel não foi colocada corretamente no arquivo de configuração1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/97Atualizar licenças e Copyrights2019-11-04T12:31:18ZLucas Fernandes de OliveiraAtualizar licenças e CopyrightsVerificar os copyrights e as licenças do blend.
Em muitos arquivos é citado apenas blend ao invés de Blendb e acredito que a forma correta de manter os direitos autorais é
com o intervalo de tempo ao invés de apenas o ano em que foi cri...Verificar os copyrights e as licenças do blend.
Em muitos arquivos é citado apenas blend ao invés de Blendb e acredito que a forma correta de manter os direitos autorais é
com o intervalo de tempo ao invés de apenas o ano em que foi criado.
Além disso verificar a viabilidade de mudar a licença de GPL3 para AGPL3.1.0https://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/96Arrumar documentação da classe adapter2019-02-11T10:50:59ZLucas Fernandes de OliveiraArrumar documentação da classe adapterNa classe adapter no método insertIntoSource, o atributo data não foi documentado.
Verificar se o erro se repete nas classes filhas.Na classe adapter no método insertIntoSource, o atributo data não foi documentado.
Verificar se o erro se repete nas classes filhas.1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/95Adicionar script de criação do banco2018-11-20T11:21:17ZLucas Fernandes de OliveiraAdicionar script de criação do bancoCriar um script que é executado utilizando ```npm run init-db``` que cria todas as tabelas necessárias para o funcionamento do Blendb (utilizando o arquivo de configuração).
Caso as tabelas já existam, não devem ser alteradas. Caso este...Criar um script que é executado utilizando ```npm run init-db``` que cria todas as tabelas necessárias para o funcionamento do Blendb (utilizando o arquivo de configuração).
Caso as tabelas já existam, não devem ser alteradas. Caso estejam utilizando o *alias* como nome, deve-se verificar se o *id* confere. Caso não confira, deve-se retornar um erro.
Para evitar atualização parcial, essas operações devem ser executadas como uma única transação.
Esse código já está parcialmente escrito na seção de fixtures. Esse código deve ser realocado para o código dos adaptadores. O script a ser criado deve simplesmente chamar as funções de criação dos adaptadores.1.0https://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/94Otimizar algoritmo de junção de visões2019-01-10T11:07:07ZLucas Fernandes de OliveiraOtimizar algoritmo de junção de visõesO código atual de junção de visões primeiramente verifica quais são as visões mais similares e as junta 2 a duas. O problema que encontrar a similaridade de duas visões é de tempo quadrático. Entretanto não é necessário juntar as tabelas...O código atual de junção de visões primeiramente verifica quais são as visões mais similares e as junta 2 a duas. O problema que encontrar a similaridade de duas visões é de tempo quadrático. Entretanto não é necessário juntar as tabelas mais similares, ``todas'' podem ser juntadas.
Esse código já foi feito no branch ICDE2019 experiments.1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/93Habilitar uso nome de tabelas ao invés de hash2019-01-10T11:07:07ZLucas Fernandes de OliveiraHabilitar uso nome de tabelas ao invés de hashO "nome" de uma visão no Blendb é determinado por suas métricas, dimensões e filtros aplicados. Com essas informações uma função de hash é aplicada gerando um nome.
Criar uma opção, para cada view, que permite utilizar o **alias**, ou u...O "nome" de uma visão no Blendb é determinado por suas métricas, dimensões e filtros aplicados. Com essas informações uma função de hash é aplicada gerando um nome.
Criar uma opção, para cada view, que permite utilizar o **alias**, ou um outro atributo a ser definido, como nome ao invés do hash gerado. Dessa forma para que o blendb seja compátivel com os outros bancos, não é necessário a criação de uma visão com o nome de uma hash, basta utilizar o próprio nome.1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/92Revisar tests2019-01-11T10:35:34ZLucas Fernandes de OliveiraRevisar testsFazer uma analise mais precisa dos testes automáticos. Após a *issue*#88 ter sido aceita, deve averiguar o que não está coverto e se é factivel cobrir esses casos.Fazer uma analise mais precisa dos testes automáticos. Após a *issue*#88 ter sido aceita, deve averiguar o que não está coverto e se é factivel cobrir esses casos.1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/91Modificação do contrutor da Engine2019-01-10T11:07:08ZLucas Fernandes de OliveiraModificação do contrutor da EngineVerificar a viabilidade da substituição do contrutor da classe Engine.
O contrutor dessa calsse inicia uma estrutura vazia, que deve ser incrementada utilizando outras funcções como addView, addMetric, ..., etc.
Verificar se é possível...Verificar a viabilidade da substituição do contrutor da classe Engine.
O contrutor dessa calsse inicia uma estrutura vazia, que deve ser incrementada utilizando outras funcções como addView, addMetric, ..., etc.
Verificar se é possível que o contrutor recebe um objeto do tipo ParseConfig e realize a construção do objeto. As funções addAlgumaCoisa podem ser colocadas como privadas.
Verificar se é possível realizar essa alteração, e se for possível realizar.1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/90Mudar a interface Query para uma Classe2019-01-10T11:07:07ZLucas Fernandes de OliveiraMudar a interface Query para uma ClasseHoje um elemento importante do BlenDB, a *query*, é uma interface e não uma classe. Essa escolha foi feita pois não existiu até o momento a necessidade da *query* possuir métodos. Entretanto, como efeito colateral a *query* não possui um...Hoje um elemento importante do BlenDB, a *query*, é uma interface e não uma classe. Essa escolha foi feita pois não existiu até o momento a necessidade da *query* possuir métodos. Entretanto, como efeito colateral a *query* não possui um construtor. Como essa interface possui parametros opicionais, em diversos locais é necessário verificar se esses parametros opicionais estão preenchidos, ou não, se prenche-los com valores **default**.
Esse preenchimento poderia ser feito no construtor da classe, evitando a validação em diversos pontos do código.
## Objetivo
* Mudar a interface *query* para uma classe
* Criar um método contrutor, para preencher os valores opcionais
* A interface *query* se transforma em *queryOpts* que são as opções para criar uma query.
* Verificar onde existe validação dos valores da query e remove-las1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/89Opção de demonstração para o container docker2019-01-10T11:07:08ZLucas Fernandes de OliveiraOpção de demonstração para o container dockerAtualmente o container docker do Blendb permite a execução do mesmo para um banco de dados dado.
Adicionar uma opção de demonstração, onde ao invés de executar sobre o banco dado, um banco de demonstração, criado na tarefa #75 é utiliza...Atualmente o container docker do Blendb permite a execução do mesmo para um banco de dados dado.
Adicionar uma opção de demonstração, onde ao invés de executar sobre o banco dado, um banco de demonstração, criado na tarefa #75 é utilizado, permitindo que um usuáriio interessado teste, use e brinque com a ferramenta sem possuir dados necessariamente.1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/88Migrar testes para novo banco de dados de teste2019-01-10T11:07:08ZLucas Fernandes de OliveiraMigrar testes para novo banco de dados de testeAtualmente o banco de dados de teste não possui significado, atributos como **dim:1** **met:1** estão presentes mas não agregam nenhum significado. Transferir os testes para um banco de dados de teste onde os nomes dos atributos e as rel...Atualmente o banco de dados de teste não possui significado, atributos como **dim:1** **met:1** estão presentes mas não agregam nenhum significado. Transferir os testes para um banco de dados de teste onde os nomes dos atributos e as relações entre eles, e entre as tabelas faz mais sentido.
O banco de dados deve ser um cenário "real", onde o Blendb pode ser aplicado.
A principio os testes, com isso é a semântica de um teste, não precisa ser mudada, por exemplo o teste **Consulta com mais de uma métrica** ainda deve existir, mas ao invés de testar uma consulta com as métricas 1,2 e 3 pode-se testar com média, pico e total de tráfego de rede.
O principal objetivo é manter a cobertura, mesmo com o banco novo.
Acredita-se que a maioria dos testes será mantida, mas pode ocorrer de alguns testes serem considerados desnecessário e outros novos surgirem. Afinal diversos testes são afetados pela estrutura do banco de dados.1.0Rafael DiasRafael Diashttps://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/86Adicionar variavel de ambiente para ler arquivo de configuração2019-01-10T11:07:08ZLucas Fernandes de OliveiraAdicionar variavel de ambiente para ler arquivo de configuraçãoAtualmente o arquivo de configuração é fixo: Para execução é o arquivo **config.yaml** e para testes **test.yaml**.
Adicionar uma variável de ambiente **BLENDB_SCHEMA_FILE** que contém o caminho para o arquivo yaml. Utilizar essa variáv...Atualmente o arquivo de configuração é fixo: Para execução é o arquivo **config.yaml** e para testes **test.yaml**.
Adicionar uma variável de ambiente **BLENDB_SCHEMA_FILE** que contém o caminho para o arquivo yaml. Utilizar essa variável ao invés dos caminhos fixos.
Observar efeitos sobre caminhos relativos.1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/85Conexão em múltiplos bancos de dados simultâneamente2018-10-03T14:53:04ZLucas Fernandes de OliveiraConexão em múltiplos bancos de dados simultâneamente# Problema
Foi detectado que para a realização da tarefa #58, é necessário se conectar em diversos bancos de dados simultâneamente. Foi detectada que essa não seria uma atualização trivial de ser realizada e terá grandes impactos em dive...# Problema
Foi detectado que para a realização da tarefa #58, é necessário se conectar em diversos bancos de dados simultâneamente. Foi detectada que essa não seria uma atualização trivial de ser realizada e terá grandes impactos em diversas partes do código, por essa razão uma tarefa separada foi criada.
Por enquanto o objetivo da tarefa é permitir a conexão a vários bancos que **compartilham o mesmo esquema**. No futuro pretende-se utilizar esquemas diferentes para cada um dos bancos, entretanto essa alteração seria muito grande e será delegada a uma outra tarefa futura.
Atualmente, conectar-se em múltiplos bancos de dados possui dois benefícios imediatos.
* Realização de testes simultâneos em SGBDs diferentes (garantindo corretude em todos os SGBD's)
* Distribuição de carga entre bases de dados (Que podem ser de SGBD's diferentes)
Além disso a inserção pode ser disparada para todos os adaptadores, mantendo a consistência da base. Ainda não é necessário decidir para qual base uma determinada inserção é enviada.
# Alterações necessárias
* [x] Modificar as variáveis de ambiente para conexão com o banco.
* Uma nova variável deve ser criada: **BLENDB_N_DATABASES** que indica o número de bancos de dados simultâneos sendo utilizados. Ela deve ter como valor *default* 1
* As variáveis **BLENDB_DB_*** devem ser modificadas para **BLENDB_DBN_** onde **DBN** será substituido por **DB0** para o primeiro banco, **DB1** para o segundo e assim sucessivamente
* A variável **BLENDB_ADAPTER** deve ser trocada para **BLENDB_DBN_ADAPTER**, já que cada banco pode ter o seu próprio adaptador
* Uma nova váriavel deve ser criada **BLENDB_SCHEMA** que contém o caminho para o esquema do banco de dados (relativo a raiz do projeto ou absoluto)
* [x] Alterações na leitura da configuração
* No **ConfigParser** trocar a criação da conexão de um objeto **Connection** para uma lista de conexões, uma para cada base.
* Realizar a leitura do arquivo de esquema a partir da váriavel de ambiente **BLENDB_SCHEMA**
* [x] Alterações na inicialização (**main.ts**)
* Remover a leitura *hardcoded* do arquivo de definição de esquema (Atualmente config.yaml ou test.yaml).
* Modificação da *middleware* de adapatdores para receber uma lista e não apenas uma conexão.
* [x] Modificação das *midlewares* de adaptador
* Unificar as *middlewares* de cada adaptador em uma única middleware que devolve uma lista de adaptadores e atribui a uma váriavel req.adapters
* [ ] Alterações nos controladores da API de leitura/escrita
* Criação de uma politica de leitura, sugestão: **round robin**, ou seja, cada nova requisição é enviada para o banco que foi o último a atender uma requisição
* Criação de uma politica de escrita, realizar a escrita em todos os bancos
* Caso 2 bancos na realidade forem o mesmo banco, a inserção será duplicada (inserções com data devem resolver)Revisionhttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/84Utilização da ferramenta Typedoc2018-05-24T14:35:52ZLucas Fernandes de OliveiraUtilização da ferramenta Typedoc[Typedoc](https://github.com/TypeStrong/typedoc) é um gerador de documentação de código Typescript.
Atualmente o código é parcialmente documentado utilizando a Wiki do Gitlab. O principal problema dessa abordagem é que o processo não é ...[Typedoc](https://github.com/TypeStrong/typedoc) é um gerador de documentação de código Typescript.
Atualmente o código é parcialmente documentado utilizando a Wiki do Gitlab. O principal problema dessa abordagem é que o processo não é integrado e não é versionado. Utilizando essa ferramenta cada uma dos branchs poderia ser documentado separadamente e não é necessária a utilização de uma ferramenta externa, basta modificar o próprio código (através da inserção de comentários)1.0Lucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/83Correção dos testes de Fonte2018-06-11T12:42:15ZLucas Fernandes de OliveiraCorreção dos testes de FontePara testar as fontes é utilizada a classe **Fixture** que carrega os dados nos bancos de dados.
Por falta de um **runner** do gitlab-ci que contenha o monetdb, durante o processo de integração continua testes nesse banco de dados não s...Para testar as fontes é utilizada a classe **Fixture** que carrega os dados nos bancos de dados.
Por falta de um **runner** do gitlab-ci que contenha o monetdb, durante o processo de integração continua testes nesse banco de dados não são utilizados. Entretanto esses testes podem ser executados localmente. Ao se executar os testes localmente para o MonetDB os testes falham pois não foram escritos métodos para tratamento de fontes na classe **Fixture** do Monetdb.
Além disso alguns métodos utilizados pela **Fixture** no PostgreSQL não seguem os padrões de nome. Exemplos são **LoadSource** e **ExtractData**. Nomes de métodos sempre devem começar com a letra minúscula.
* Corrigir a **Fixture** para Monetdb, permitindo realizar testes autométicos nesse banco
* Corrigir a **Fixtures** para PostgreSQL, colocando os métodos no padrão de nome1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/82Campo opcicional para Enumtype2018-08-07T13:50:42ZLucas Fernandes de OliveiraCampo opcicional para EnumtypeQuando uma dimensão ou campo de uma fonte possui tipo como tipo enumeravel, a exibir essas informações como string (quando são retornadas pelas rotas) o valor do **enumtype** sobrescreve o **dataType**. Seria mellhor que o datatype fosse...Quando uma dimensão ou campo de uma fonte possui tipo como tipo enumeravel, a exibir essas informações como string (quando são retornadas pelas rotas) o valor do **enumtype** sobrescreve o **dataType**. Seria mellhor que o datatype fosse marcado como **enum** e uma nova chave **enumtype** que seria opcional recebesse o valor do **enumtype**.
Essa mudança se deve a maior facilidade para geração de interfaces automáticas.
Além disso, se essa mesma lógica for aplicada ao arquivo de configuração a sua leitura deve ser mais simples.1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/81Corrigir erros de ortografia em mensagens de erro2018-07-09T11:40:24ZLucas Fernandes de OliveiraCorrigir erros de ortografia em mensagens de erroA seguinte mensagem de erro é detectada no arquivo ```src/api/collect/collect.spec.ts```
Could not construct query with the paramters given."
Corrigir para
**Could not construct query with the given parameters.**A seguinte mensagem de erro é detectada no arquivo ```src/api/collect/collect.spec.ts```
Could not construct query with the paramters given."
Corrigir para
**Could not construct query with the given parameters.**1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/80Centralizar parsers para enums2018-07-31T14:27:01ZLucas Fernandes de OliveiraCentralizar parsers para enumsAtulamente as funções que traduzem strings para Enums e vice-versa espalhadas em diversas classes, as que tem maior necessidade de utilizar essas funções, porém isso se torna incoveniente se mais de uma classe precisa do parser.
Criar u...Atulamente as funções que traduzem strings para Enums e vice-versa espalhadas em diversas classes, as que tem maior necessidade de utilizar essas funções, porém isso se torna incoveniente se mais de uma classe precisa do parser.
Criar um arquivo no diretório **utils** chamado **enumHandler** que deve contém métodos estáticos para manipulação dos enums1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/79Criar Views (materializadas) quando não existem2018-06-06T12:04:37ZLucas Fernandes de OliveiraCriar Views (materializadas) quando não existemAtualmente existe uma variável **BLENDB_ST_CREATE** que quando é verdadeira cria as tabelas de teste e quando é falsa apenas trunca.
Remover essa váriavel e em caso de teste criar as tabelas que não existem ao invés de falhar a execuçãoAtualmente existe uma variável **BLENDB_ST_CREATE** que quando é verdadeira cria as tabelas de teste e quando é falsa apenas trunca.
Remover essa váriavel e em caso de teste criar as tabelas que não existem ao invés de falhar a execução1.0Rafael DiasRafael Dias