Árvore de páginas

Monitoramento

Esta API permite obter via método GET uma listagem com o consumo de memória do Appserver detalhado por itens tais como: Memória Residente, Memória Ram , Memória Ram Livre, etc.
Com o resultado é possível analisar a "saúde" do server, muito útil para monitorar o ambiente permitindo se antecipara até a um travamento por conta do consumo elevado de memória.

Como utilizar

Inicialmente é necessário inserir no arquivo appserver.ini uma seção para que seja habilitado o serviço de monitoramento servidor de aplicação(Appserver):

[APP_MONITOR]
enable=1

A partir da habilitação do serviço, esta API pode ser utilizada diretamente no próprio navegador de internet como: "CHROME", em um client HTTP como o: "POSTMAN", ou então, construindo um programa fonte .TLPP.
O retorno da mesma é um arquivo JSON que pode ser utilizado posteriormente da forma que for necessária para a sua aplicação.

A API possibilita duas formas de consumo:

  • /appserver/metrics - O resultado é um arquivo contendo os modos de pesquisa e os campos disponibilizados pela API.
  • /appserver/metrics?all - O resultado é um arquivo contendo os valores de memória do servidor, sejam todos ou conforme os dados solicitados na requisição.
    No caso o all após a ? representa um filtro utilzando-se da metodologia QueryString

Partindo destes princípios, sua utilização pode ser feita requisitando um endereço como este: https://localhost:32033/api/*

  • https - Protocolo definido como padrão no Appserver para consumo da aplicação de monitoria.
  • localhost - Endereço(IP/Nome) do seu servidor de aplicação onde foi habilitado o serviço de monitoria.
  • 32033 - Porta definida no Appserver para o serviço de monitoria.
  • /api - Location definida no Appserver para o serviço de monitoria.
  • ** * ** - URI da aplicação(deve ser substituída por um dos dois endpoints da aplicação).

Caso executado diretamente no navegador, será mostrado uma página como esta para cada endpoint:

/appserver/metrics


/appserver/metrics?all

Também é possível consumir a API por meio de um programa fonte .TLPP escrevendo uma User Function ou uma Classe.


Utilizando User Function.


#include "tlpp-core.th"
#include "tlpp-rest.th"

@Get("/tlpp/rest/servermonitor")
User Function serverMonitor()

  
  Local cMethod := "GET"
  Local cServer := "https://localhost:32033/api"
  Local cUri := "/appserver/metrics"
  Local cUriAll := "/appserver/metrics/?all"
  Local cUriSpc := "/appserver/metrics/?memory_resident"
  Local cHeadRet := ""
  Local cPostParms := ""
  Local cGetParms := ""
  Local nTimeout := 5
  Local aHeadStr := {}
  Local jReturn

  //consultando as opções da api com a primeira URI
  jReturn := HttpQuote(cServer+cUri, cMethod, cGetParms, cPostParms, nTimeOut, aHeadStr, @cHeadRet)
  Conout("Retorno da primeira URI-->> " + cValToChar(jReturn))

  //consultando o retorno geral da API
  jReturn := HttpQuote(cServer+cUriAll, cMethod, cGetParms, cPostParms, nTimeOut, aHeadStr, @cHeadRet)
  Conout("Retorno da consulta geral-->> " + cValToChar(jReturn))

  //consultando o retorno de um valor especifico da API 
  jReturn := HttpQuote(cServer+cUriSpc, cMethod, cGetParms, cPostParms, nTimeOut, aHeadStr, @cHeadRet)
  Conout("Retorno da consulta específica-->> " + cValToChar(jReturn))

Return


Utilizando Classe


#include "tlpp-core.th"
#include "tlpp-rest.th"

class serverMonitor from LongclassName
  public  method new() constructor

  @Get("/tlpp/rest/servermonitor")
  public method mServerMonitor()

endclass

method new() class serverMonitor
return Self

method mServerMonitor() class serverMonitor

  Local cMethod := "GET"
  Local cServer := "https://localhost:32033/api"
  Local cUri := "/appserver/metrics"
  Local cUriAll := "/appserver/metrics/?all"
  Local cUriSpc := "/appserver/metrics/?memory_resident"
  Local cHeadRet := ""
  Local cPostParms := ""
  Local cGetParms := ""
  Local nTimeout := 5
  Local aHeadStr := {}
  Local jReturn

  //consultando as opções da api
  jReturn := HttpQuote(cServer+cUri, cMethod, cGetParms, cPostParms, nTimeOut, aHeadStr, @cHeadRet)
  Conout("Retorno da primeira URI-->> " + cValToChar(jReturn))

  //consultando o retorno geral da API
  jReturn := HttpQuote(cServer+cUriAll, cMethod, cGetParms, cPostParms, nTimeOut, aHeadStr, @cHeadRet)
  Conout("Retorno da consulta geral-->> " + cValToChar(jReturn))

  //consultando o retorno de um valor especifico da API 
  jReturn := HttpQuote(cServer+cUriSpc, cMethod, cGetParms, cPostParms, nTimeOut, aHeadStr, @cHeadRet)
  Conout("Retorno da consulta específica-->> " + cValToChar(jReturn))

return .T.


Funcionamento

A API coleta os dados diretamente no binário do servidor de aplicação(AppServer), pois como se trata de medições de consumo de memória não poderia ser diferente.
Seu uso, como demonstrado acima, pode ser feito acessando-a utilizando o endpoint de 3 diferentes formas o que interfere diretamente no resultado esperado.

  • Utilizando o endpoint - appserver/metrics

    • O retorno é um arquivo JSON contendo as formas de consulta e os campos disponíveis para filtro.
  • Utilizando o endpoint - appserver/metrics?all

    • O retorno é um arquivo JSON contendo o resultado do consumo de todas as memórias utilizadas pelo Appserver.
  • Utilizando o endpoint - appserver/metrics?memory_resident

    • O retorno é um arquivo JSON contendo o resultado do filtro passado utilizando a didática QueryString

P.S.: É possível passar mais de um parâmetro para a API concatenando-os seguindo a metodologia QueryString.

  • Sem rótulos