GithubHelp home page GithubHelp logo

dp6 / penguin-datalayer-collect Goto Github PK

View Code? Open in Web Editor NEW
19.0 24.0 4.0 2.12 MB

A data layer quality monitoring and validation module, this solution is part of the Raft Suite ecosystem.

Home Page: https://dp6.github.io/penguin-datalayer-collect/

License: Apache License 2.0

JavaScript 42.60% HCL 52.52% Shell 4.88%
data-quality datalayer monitoring data-quality-monitoring dp6 gtm-server-side dtm adobe-launch tealium gtm

penguin-datalayer-collect's Introduction

penguin-datalayer-collect

semantic-release Code coverage Test Code quality

O penguin-datalayer-collect é um modulo do ecossistema raf-suite criado pela DP6 para garantir a qualidade dos dados (Data Quality) nos projetos de engenharia de dados implementados nos clientes da DP6, através de monitoramento automatizados de dados.

Ecossistema raft-suite

O penguin-datalayer-collect consegue auxiliar as áreas de digital analytics das empresas nos seguintes pilares da qualidade de dados:

  • Disponibilidade (atende totalmente)
  • Tempestividade (atende totalmente)
  • Completude (atende totalmente)
  • Validade (atende parcialmente)
  • Consistência (atende parcialmente)
  • Acurácia (atende parcialmente)
  • Uniformidade (atende totalmente)
  • Acessibilidade (atende totalmente)
  • Segurança (atende parcialmente)

Essa abrangência pode ser observada com mais detalhes na imagem abaixo que representa o ciclo de vida do dado, e em quais momentos a solução pode ser aplicada.

Dimensões de qualidade de dados adaptadas do framework TDQM

O ecossistema raft-suite é uma solução da DP6 que visa suprir as necessidades de monitoria do ciclo de vida dos dados para antecipar possíveis inconsistências.

Dimensões de qualidade de dados adaptadas do framework TDQM

Setup penguin-datalayer-collect

1. Requisitos para utilização

1.1 Produtos do GCP

  • Cloud Storage
  • Cloud Function
  • Bigquery
  • Service account

1.2 Dependências ambiente local

  1. Google Cloud SDK
  2. Pacotes zip, unzip e curl
  3. Criar service Account com as permissões (Storage Object Admin, Cloud Functions Admin, BigQuery Admin e Service Account User)
  4. Variável GOOGLE_APPLICATION_CREDENTIALS
  5. Instalar o Terraform
  6. Habilitar os produtos no GCP Cloud Function, BigQuery, Cloud Build API, Cloud Resource Manager API, BigQuery Data Transfer API e Cloud Storage, para uso do BigQuery é necessário ter um billing ativo
  7. Importante o usuário que executar o script do terraform precisa ter a permissão de owner no projeto do GCP.

Observação: Utilizando o ambiente no Google Cloud Shell não é necessário fazer os 1, 2, 4 e 5

1.3 Ludwig gerador de Schemas

Para gerar o schema de validação da camada de dados acesse a documentação disponível em penguin-datalayer-core

2. Instalando o penguin-datalayer-core

Clone o projeto do github para sua máquina local ou Cloud Shell, usando o comando abaixo

git clone https://github.com/DP6/penguin-datalayer-collect.git

Para fazer deploy no GCP usando o Terraform, o utilize o shell script terraform_deploy, usando o comando abaixo

cd penguin-datalayer-collect
sh terraform_deploy.sh

3. Configurando a tag no GTM

3.1 GTM Web

Para enviar o JSON da camada de dados para a Cloud Function de validação, é necessário implementar uma tag no GTM do tipo custom html, abaixo está o código base para essa configuração.

Essa tag dar total autonomia para o engenheiro customizar o escopo da coleta da camada de dados para validação, uma coleta ativa para o ambiente de produção considerando todos os usuários terá um custo muito maior que uma baseada em amostragem, como exemplificado no código abaixo.

Outra abordagem que pode ser utilizada é fazer a coleta somente no ambiente de homologação, com base em identificadores previamente acordados com o time de TI.

<script>
  /*
  *Tag responsável por enviar a camada de dados para o penguin-datalayer-collect
  */
  analyticsHelper.safeFn('Penguin Datalayer Collect ', function(helper){
    // Array do dataLyer, filtrando os eventos nativos do GTM e easyCollect
    var body = window.dataLayer.filter(function(item) {return /gtm\.+|ga_pageview|midia_pageview/.test(item.event) == false});

    if (habilitarAmostragemValidacao() === 'true') {
      var request = new XMLHttpRequest();
      //Os dados de validação podem ser enriquecidos com dados de negocios enviados como queryString
      request.open("POST", {{endpoint - penguin-datalayer - collect}} + "?schema="+ {{schema}} , true);
      request.setRequestHeader('Content-Type', 'application/json');
      request.onreadystatechange = logHttpResponse;
      request.send(JSON.stringify(body));
    }

    function habilitarAmostragemValidacao() {
      function random(min, max) {
        min = Math.ceil(min);
        max = Math.floor(max);
        return Math.floor(Math.random() * (max - min)) + min;
      }

      var sample = 1;
      var domain = {{Cookie - Domínio}} ? {{Cookie - Domínio}} : 'auto';
      var cookie_penguin_datalayer_collect = helper.cookie('penguin_datalayer_collect');

      /* Limitador realizar o envio apenas de uma amostragem dos usuários, assim é possível reduzir
      os custos de GCP, não deixando a tag ativas para todos os usuários.*/
      if (!cookie_penguin_datalayer_collect) {
        cookie_penguin_datalayer_collect = (random(0, 100) <= sample) ? 'true' : 'false';
        helper.cookie('penguin_datalayer_collect', cookie_penguin_datalayer_collect, {'exdays': 1, 'domain': domain});
      }

      return cookie_penguin_datalayer_collect;
    }

    function logHttpResponse() {
      if ({{Debug Mode}}) {
        console.log('Penguin-datalayer-collect - Status: ', this.status);
        console.log('Penguin-datalayer-collect - Object dataLayer:', window.dataLayer);
        console.log(JSON.stringify(window.dataLayer));
      }
    }
  });
</script>

O código da tag fornecido acima, utiliza a biblioteca easy-collect também desenvolvida pela DP6 para facilitar a implementação no GTM e manipulação do DOM.

3.2 GTM Server-side

O penguin-datalayer-collect também pode ser utilizado para validar a coleta server-side, necessitando apenas que a coleta consiga gerar um array com as chaves implementadas.

4. Enriquecendo os dados com informações de negócio

A implementação do penguin-datalayer-collect disponibiliza alguns dados brutos, eles são obtidos a partir da validação da camada de dados com base nos schemas fornecido para o validador, é importante salientar que o resulto depende do schema de validação, então sempre que ocorrer uma alteração na especificação técnica da camada de dados os schemas devem refletir as mesmas.

Os dados padrões são:

Nome Tipo Opcional Descrição
data DATETIME Não Datetime com timezone America/Sao_Paulo no padrão yyyy-mm-ddThh:mm:ss
schema STRING Não Nome do schema utilizado para validação das chaves
status STRING Não Status da validação que pode ser (ERRO, WARNING ou OK)
objectName STRING Sim Nome do objeto da camada de dados validada
keyName STRING Sim Chave da camada de dados validada

Os dados padrões por si só, possibilitam visualizações básicas da saúde da camada de dados, pois com esses dados as possibilidades de cruzamentos e classificação são poucas, entretanto, é muito fácil enriquecer os dados de validação com dados customizados do domínio de negócio, por meio da customização da tag base **3.1 GTM Web**.

A adição de novas dimensões é bem simples, basta disponibilizar os dados escolhidos como parâmetros query string no endoint de validação, fazendo isso os parâmetros fornecidos estarão disponíveis para todas as validações, e serão inseridos no bigquery juntos com os dados padrões, na tabela penguin_datalayer_raw.

Para que a inserção ocorra com sucesso é necessário apenas atualizar o schema da tabela disponível no json de configuração.

Para saber mais sobre o funcionamento do penguin-datalayer-collect e como customizar os dados acesse nossa wiki.

5. Dashboard de acompanhamento

A base de dados criada pelo penguin-datalayer-collect, pode ser utilizada para diversas análises fazendo o cruzamento com os dados de domínio do negócio, porém a DP6 desenvolveu um dashboard base para monitoramento das métricas de erros disponibilizada pelo módulo.

CI - Public - penguin datalayer collect

6. Como contribuir

Pull requests são bem-vindos! Nós vamos adorar ajuda para evoluir esse modulo. Sinta-se livre para navegar por issues abertas buscando por algo que possa fazer. Caso tenha uma nova feature ou bug, por favor abra uma nova issue para ser acompanhada pelo nosso time.

6.1 Requisitos obrigatórios

Só serão aceitas contribuições que estiverem seguindo os seguintes requisitos:

7. Api Docs

Suporte:

DP6 Koopa-troopa Team

e-mail: [email protected]

penguin-datalayer-collect's People

Contributors

andresampaio avatar dependabot[bot] avatar joaquimsn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

penguin-datalayer-collect's Issues

The automated release is failing 🚨

🚨 The automated release from the master branch failed. 🚨

I recommend you give this issue a high priority, so other packages depending on you could benefit from your bug fixes and new features.

You can find below the list of errors reported by semantic-release. Each one of them has to be resolved in order to automatically publish your package. I’m sure you can resolve this 💪.

Errors are usually caused by a misconfiguration or an authentication problem. With each error reported below you will find explanation and guidance to help you to resolve it.

Once all the errors are resolved, semantic-release will release your package the next time you push a commit to the master branch. You can also manually restart the failed CI job that runs semantic-release.

If you are not sure how to resolve this, here is some links that can help you:

If those don’t help, or if this issue is reporting something you think isn’t right, you can always ask the humans behind semantic-release.


No npm token specified.

An npm token must be created and set in the NPM_TOKEN environment variable on your CI environment.

Please make sure to create an npm token and to set it in the NPM_TOKEN environment variable on your CI environment. The token must allow to publish to the registry https://registry.npmjs.org/.


Good luck with your project ✨

Your semantic-release bot 📦🚀

Implementar testes

Os seguintes itens precisam de testes

  • Arquivos de configurações
  • Insert BQ
  • Retorno da validação

[NEW] Descrição dos processos feitos pelo terraform

Is your feature request related to a problem? Please describe.
Hoje não está claro porque a conta que executa o terraform necessita das permissões descritas.

Describe the solution you'd like
Descrever passo a passo o que é feito pelo terraform, qual a infraestrutura criada e explicar porque as permissões são necessárias

[NEW] Criar validações na função

Is your feature request related to a problem? Please describe.
O código atual tem a necessidade de criar uma função que autoriza acesso não autenticado. No caso remoto de encontrar uma pessoa maliciosa que queira aproveitar essa brecha, seria possível inflar não só os custos da cloud function, mas também
no BigQuery.

Describe the solution you'd like
Criar alguma forma de validar a requisição antes de processar os dados.

Describe alternatives you've considered

  1. Ter a opção de passar uma lista de domínios na configuração, e validar o Access-Control-Allow-Origin antes de executar o restante do código.
  2. Gerar um token aleatório (uuid, cuid) e exigir que seja passado junto da requisição

The automated release is failing 🚨

🚨 The automated release from the master branch failed. 🚨

I recommend you give this issue a high priority, so other packages depending on you could benefit from your bug fixes and new features.

You can find below the list of errors reported by semantic-release. Each one of them has to be resolved in order to automatically publish your package. I’m sure you can resolve this 💪.

Errors are usually caused by a misconfiguration or an authentication problem. With each error reported below you will find explanation and guidance to help you to resolve it.

Once all the errors are resolved, semantic-release will release your package the next time you push a commit to the master branch. You can also manually restart the failed CI job that runs semantic-release.

If you are not sure how to resolve this, here is some links that can help you:

If those don’t help, or if this issue is reporting something you think isn’t right, you can always ask the humans behind semantic-release.


No npm token specified.

An npm token must be created and set in the NPM_TOKEN environment variable on your CI environment.

Please make sure to create an npm token and to set it in the NPM_TOKEN environment variable on your CI environment. The token must allow to publish to the registry https://registry.npmjs.org/.


Good luck with your project ✨

Your semantic-release bot 📦🚀

[NEW] CDN para implementação inline

Is your feature request related to a problem? Please describe.
Hoje o penguin-datalayer-collect tem um dependência do GTM para realizar as validações, ou seja se o GTM não carregar a validação também não ocorre.

Describe the solution you'd like
Criar mini SDK para implementação inline da tag de coleta para não depender do GTM, dessa forma será possível validar a camada de dados mesmo quando o GTM não for carregado.

Describe alternatives you've considered
A disponibilização do sdk pode ser feita por um CDN para garantimos disponibilidade, usar uma arquitetura similiar ao JQuery/GTM

Additional context
Essa solução vai validar a camada de dados sem depencia do GTM, porém será necessário definir os momentos que validação vai ocorrer, pois hoje temos dependência do schema de validação, um sugestão para V0 é fazer essa validação somente para a camada de dados global que precisa está disponível em todas as páginas.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.