Alguma vez precisou de analisar o tráfego dos seus pedidos ORDA entre um cliente e o servidor 4D? Por vezes pode demorar algum tempo a receber uma resposta do servidor, o que o pode fazer pensar se isso se deve ao tráfego da rede ou a um pedido não optimizado que tenha escrito! Felizmente, 4D v17 R6 torna possível determinar a(s) razão(ões) provável(is) para esta latência com os novos métodos ORDA disponíveis no ds objecto. Não são apenas funções de depuração, permitem-lhe também optimizar o seu código ORDA com uma melhor compreensão dos pedidos enviados.
Activar o registo de pedidos ORDA
O startRequestLog() O método de membro é muito flexível uma vez que pode registar pedidos ORDA num ficheiro ou numa memória.
log a um ficheiro
Para iniciar sessão a um ficheiro, basta chamar startRequestLog() com um File objecto indicando onde os seus pedidos ORDA serão registados. No exemplo abaixo, executamos uma consulta num campo não indexado que pode demorar algum tempo. Graças a esta nova funcionalidade, podemos verificar a duração dos nossos pedidos:
C_OBJECT($employees;$file)
$file :=File("/PACKAGE/Logs/ORDARequests.txt")
$file .delete()
ds .startRequestLog($file)
$employees :=ds.Employee.ds.query("firstname = :1"; "abcd") //firstname is not indexed
.stopRequestLog()
Cada pedido é registado como uma representação JSON de um objecto.
Aqui está o conteúdo do ficheiro ORDARequests.txt:
[
.
{
..
…
"startTime": "2019-07-02T12:33:25.922Z",
"endTime": "2019-07-02T12:33:27.681Z",
"duration":4200,
"response":{ ...}
}
]
log to memory
Cada pedido pode ser registado como um objecto numa colecção que pode ser recuperada utilizando a função getRequestLog() método dos membros.
Uma vez que devolve uma colecção, é possível utilizar todos os métodos de colecção disponíveis.
C_OBJECT($first;$e)
C_COLLECTION ($log)
ds .
startRequestLog(10) // Only the last 10 requests will be kept in memory
.
$first :=ds.Persons.all().first()
$e :=ds.Persons.query("name=:1"; "Brown")
$log :=ds.getRequestLog()
ALERT ("O pedido mais longo durou: "+String($log.max.ds("duração"))+" ms")
stopRequestLog()
desactivar o registo de pedidos ORDA
Para deixar de registar pedidos ORDA, basta ligar para o stopRequestLog() método de membro, tal como mostrado nos exemplos acima.