Conteúdo
Visão Geral
Biblioteca desenvolvida pelo time de Framework SupplyAgro para dar suporte à operações de comunicação com o recurso de telemetria do LS Cloud.
A Biblioteca não está acoplada à nenhum framework, portanto, basta o produto utilizar a linguagem Java (8+) para poder utilizá-la
Como usar?
Temos dois pontos para serem implementados utilizando a biblioteca:
- Configuração: Deve ser realizada no início da aplicação e tem o objetivo de informar alguns dados importantes para a comunicação do produto com o LS Cloud
- Notificação: Criar um ponto de entrada (ex: Controller) para receber notificações de uso de rotinas do produto
Configurando o JFrog no pom.xml:
<repositories> <repository> <id>central-release</id> <name>Maven Libs Releases</name> <url>http://maven.engpro.totvs.com.br/artifactory/libs-release/</url> </repository> </repositories>
Adicionando dependência no pom.xml:
<dependency> <groupId>com.totvs.supplyagro</groupId> <artifactId>license-server-java-lib</artifactId> <version>1.0.2-RELEASE</version> </dependency>
Exemplo de configuração:
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @PostConstruct public void iniciarLicenseServer() { LicenseServer.configurar() .intervaloProcessarNotifacao(30) .licenseServerUrl("https://lscloud.staging.totvs.app/") .clientId("925b51abcbd64c819eef05b00eaf24b6") .clientSecret("4b05e6173c57412187c0ec5c569d7512") .rotinaMetricas("MÉTRICAS") .aliasTenant("PRODUTO AGRO XPTO") .moduloPadrao("9999") .ativar(); } }
Dados informados:
- intervaloProcessarNotifacao: Intervalo em segundos entre cada envio para o LS Cloud (a biblioteca vai acumulando em uma fila em memória). Nâo pode ser menor que 5 e caso não seja passado nada irá assumir 30 segundos
- licenseServerUrl: Endereço do License Server utilizado (o endereço deve estar liberado no servidor em que a aplicação está executando). Exemplos:
- https://lscloud.staging.totvs.app/ (Staging)
- https://lscloud.dev.totvs.io/ (Desenvolvimento)
- https://lscloud.totvs.app/ (Produção)
- clientId e clientSecret: Informações necessárias para se autenticar com o LS Cloud (time Agro utilizar o valor do exemplo)
- aliasTenant: Descrição da tenant dentro do License Server (geralmente o nome do produto)
- moduloPadrao: Caso o produto tenha somente um módulo (slotId) do License Server, poderá utilizar essa configuração e todas as notificações serão para esse módulo
- rotinaMetricas: Rotina a ser utilizada ao enviar métricas ao LS Cloud. Caso seja informada nessa configuração, ao enviar métricas não será necessário informar uma rotina
Exemplo de recebimento de notificação:
@RestController @RequestMapping(path = "/api/v1/licenseServer") public class LicenseServerController { @PostMapping(path = "/notificacaoUso") public ResponseEntity<Void> notificar(@Valid @RequestBody LicenseServerRequest notificacao, HttpServletRequest request) { NotificacaoLS.iniciar() .ipMaquinaCliente(request.getRemoteAddr()) .usuario("usuário") .rotina(notificacao.getRotina()) .modulo(notificacao.getModulo()) .dataHora(ZonedDateTime.now()) .cpfcnpj("56608857000143") .tcode("TF0015") .versaoProduto("12.1.30") .enviar(); return ResponseEntity.noContent().build(); } }
Dados informados:
- cpfcnpj: Documento do cliente. Pode ser obtido pela Empresa, Filial, Unidade Administrativa, etc. Este CPF/CNPJ deve ter um contrato válido (somente números)
- tcode: Código de identificação do cliente com a TOTVS (obtido pelo PO ou time de negócios)
- ipMaquinaCliente: IP onde foi utilizada a rotina (no exemplo está utilizando o IP da request)
- usuario: Usuário que utilizou a rotina
- rotina: Código da rotina utilizada. Não precisa ter sido cadastrada previamente
- modulo: Atributo opcional caso tenha sido informado um módulo padrão. Módulo é o slotId (verifique com o PO)
- dataHora: Horário da utilização da rotina. Caso não seja informado será utilizada a data/hora atual
- versaoProduto: Versão do produto (Opcional)
Após as implementações acima, ao consumir o endpoint /api/v1/licenseserver/notificacaoUso
o sistema irá enviar uma notificação para o LS Cloud, informando que o usuário fez uso da rotina em questão.
Exemplo de envio de métricas(*):
void enviarMetricas() { MetricaLS metrica = MetricaLS.iniciar() .idMetrica("id-metrica") .valorMetrica(1) .cpfCnpj("1234567890") .tcode("T-CODE") .modulo("0000") .rotina("ROTINA") .subRotina("SUBROTINA") .tempoUso(60000) .dataHora(ZonedDateTime.now()) .build(); metrica.enviar(); }
*Disponível a partir da versão 1.0.6
Dados informados:
- idMetrica: ID da métrica definido pelo time do produto e enviado/aprovado via fluxo pré-estabelecido com o time responsável pelo assunto de Telemetria
- valorMetrica: Valor da métrica a ser enviada ao LS Cloud
- cpfcnpj: Documento do cliente. Pode ser obtido pela Empresa, Filial, Unidade Administrativa, etc. Este CPF/CNPJ deve ter um contrato válido (somente números)
- tcode: Código de identificação do cliente com a TOTVS (obtido pelo PO ou time de negócios)
- modulo: Atributo opcional caso tenha sido informado um módulo padrão. Módulo é o slotId (verifique com o PO)
- rotina: Código da rotina utilizada. Não precisa ter sido cadastrada previamente. Atributo opcional (caso tenha sido informada nas configurações da biblioteca).
- subRotina: Código identificador da subRotina utilizada. Não precisa ter sido cadastrada previamente. Atributo opcional, caso não informado assume o mesmo código da rotina.
- tempoUso: Tempo de uso, em segundos, da subRotina. Atributo opcional.
- dataHora: Horário da utilização da rotina. Caso não seja informado será utilizada a data/hora atual
Possíveis problemas
Logback
A biblioteca utiliza o logback para gerar logs, caso isso seja um problema (por exemplo, ocorrer um conflito por estar utilizando outro provedor de logging), fazer o exclusion
no pom.xml
conforme abaixo:
<dependency> <groupId>com.totvs.supplyagro</groupId> <artifactId>license-server-java-lib</artifactId> <version>1.0.0-RELEASE</version> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </exclusion> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency>