Pregunta
· 15 mar, 2024

Evento onPostDispatch %CSP.Rest o similar

Hola a todos,

Por un requerimiento del cliente, tenermos un BS Rest Api con un montón de métodos, necesitamos obtener la IP del invocador, el método y cual es el tiempo que la API ha tomado para procesar.

He encontrado el evento onPreDispatch donde puedo capturar la IP, ClassMethod, etc.. Estoy usando una variable global para guardar esta información.


ClassMethod OnPreDispatch(pUrl As %String, pMethod As %String, ByRef pContinue As %Boolean) As %Status
{
	set ^CallApi($CLASSNAME(),$JOB,"url") = pUrl
	set ^CallApi($CLASSNAME(),$JOB,"method") = pMethod
	set ^CallApi($CLASSNAME(),$JOB,"Start") = $HOROLOG
	set ^CallApi($CLASSNAME(),$JOB,"remote_addr") = %request.CgiEnvs("REMOTE_ADDR")
	set pContinue = 1
	quit $$$OK
}

Ahora, necesito capturar el tiempo final, y guardar toda esta información usando un BO que guarda esta información fuera de IRIS (Asíncrono)

¿Hay algún método/evento/LoQueSea que se dispare cuando ha terminado la llamada? Entonces, puedo eliminar la variable y obtener la hora final, llamar al proceso de fuera, etc..

Gracias de antemano

Product version: IRIS 2021.1
$ZV: IRIS for Windows (x86-64) 2021.1.3 (Build 389U) Wed Feb 15 2023 14:50:06 EST
Comentarios (2)2
Inicie sesión o regístrese para continuar

Gracias a la comunidad, tengo un par de respuestas que son válidas. Por si os interesa:

Para poder capturar el SessionId

Method OnProcessInput(
    pDocIn As %RegisteredObject,
    Output pDocOut As %RegisteredObject) As %Status
{
    // here you need to pass the jobid from the %CSP.REST that is invoking the BS
    set tJobId = pDocIn.JobID
    // your code here
    set ^CallApi($CLASSNAME(),tJobId,"sessionid") = ..%SessionId
    set pDocOut = pDocIn
    quit $$$OK
}

El evento que controla cuando ha terminado de procesar la llamada OnEndRequest

Ver las réplicas de Guillaume Rongier y de Vitaliy Serdtsev