antonioguimaraes / vendala-sdk-log-php
SDK em php do micro serviço de logs
Installs: 4 635
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- aws/aws-sdk-php: ^3.138
README
SDK em PHP para o micro serviço de logs.
Este pacote visa padronizar o envio para o micro serviço de logs.
Instalação
Para instalar este pacote no projeto utilize o comando:
composer require antonioguimaraes/vendala-sdk-log-php
Feito isto, basta adicionar o uso da classe que você já terá acesso a todo poder do sdk.
Documentação
Explicando
Nossos sistemas precisam guardar logs diariamente.
Como não temos um lugar centralizado, este projeto visa centralizar e guardar tudo.
Nossas aplicações vão utilizar este SDK para enviar ao elasticsearch com o kinesis de intermediário.
Lifecycle de envio resumido:
1 - sistema venda.la tem necessidade de log.
2 - sistema venda.la chama sdk.
3 - sistema venda.la envia log a partir do sdk.
4 - sdk se comunica com o kinesis da aws enviando o payload e dados da aplicação.
5 - kinesis abre a stream e envia ao elasticsearch em lotes.
6 - em paralelo, é guardado num s3 o dado bruto para data mining futuro.
7 - fim do ciclo de vida.
Lifecycle de consumo resumido:
1 - aplicação necessita de log(usuário clicou num histórico de estoque).
2 - aplicação chama um api gateway (http://apivendala.amazon-us-east1.blablabla/logs/log/estoque/123/123/123)
3 - o api gateway invoca um lambda que consulta no elasticsearch buscando dados a partir do query string informado no api gateway e retorna os dados para quem invocou.
4 - com a posse dos dados, o api gateway retorna a resposta do lambda para a aplicação consumir e mostrar ao usuário.
5 - fim do ciclo de vida.
Observações
Existem dois tipos de log level:
1 - history | logs que o usuário final vê, como alteração de estoque e preço.
2 - log | logs que auditam as rotinas como envio de estoque, sincronia diária, alteração de preço, split de estoque.
Tempo de expiração do log por level:
------------------------------------
Level | TTL | Desc
history | n/a | logs que o usuário final vê, como alteração de estoque e preço.
log | 90d | logs que auditam as rotinas como envio de estoque, sincronia diária, alteração de preço, split de estoque.
------------------------------------
Funções disponíveis no SDK:
------------------------------------
Nome | Desc | Exemplo
setLogType | tipo de log | price_change, stock_change, order_history
setAction | tipo da ação | manual,automatic,callback,job
setKey | set access key | ASDASDASDASD
setSecret | set secret key | DSADHASUDHAU
setWellExecuted | sucesso na exec | true | false
setLevel | nível de log | history | log
setEnvironment | tipo de env | local | dev | prod
setApp | aplicação | vendala | simplifique | lambdared | pickingpack | questions
setUid | coluna ref | universal_id (primary key)
setTable | tabela logada | skus
setDatabase | db logado | vendala2020
addMessage | adiciona msgs | "passou aqui 123"
addException | adiciona excep | throw new Exception('EXCP')
addProp | adiciona props | $prop1 = []; $prop2 = stdClass;
addMethod | adiciona funcs | func1(); func2(); func3();
sendLog | função de envio | envia o log ao kinesis
------------------------------------
Padrão de nomenclatura:
lowerCamelCase.
Testes disponíveis
1 - teste que valida o fluxo completo
2 - teste que valida informações mínimas obrigatórias
Para rodar os testes utilize:
vendor/bin/phpunit src/tests/setupTest.php
Exemplo de json salvo no elasticsearch
{ "messages": [ "começou a execução do processo de estoque", "estoque antigo: 123", "cliente alterou estoque para: 122" ], "methods": { "splitEstoque();": { "arguments": { "sku_id": 123, "old": 1, "new": 2 }, "logs": { "maoe": "vempraca", "asdfadf": "ggdfgfdg" } }, "auditEstoque();": { "arguments": { "teste": "testado" }, "logs": { "mas testou mesmo?": "sim" } }, "blablabla();": { "arguments": { "foo": "bar" }, "logs": [ "passou por aqui" ] } }, "props": { "sku_id": "123123", "sku": "TESTESDK", "shop_name": "testeantonio", "enterprise_id": 1, "old": "123", "new": "122" }, "logType" : "stock_change", "level": "log", "env": "local", "app": "simplifique", "uid": "3333", "table": "skus", "database": "simplifique", "wellExecuted": true }