Inicio > SOA / BPM / WebCenter > Estadísticas de tiempo de un servicio en el ESB 10gR3

Estadísticas de tiempo de un servicio en el ESB 10gR3

A veces, querremos obtener una pequeña estadística de tiempos de llamada a nuestros servicios. Si hemos publicado y consumimos estos servicios en Oracle Enterprise Service Bus 10g, éste nos ofrece la posibilidad de darnos el tiempo en milisegundos que ha consumido cada uno de los servicios implicados en el servicio:

Ver los tiempos de proceso del ESB

Por tanto, a través de la consola podríamos hipotéticamente filtrar todas las llamadas a servicios de nuestro interés e, instancia a instancia, recopilar los tiempos que cada una de ellas ha tardado en procesarse y sacar la estadística a partir de estos datos. Es decir, un proceso largo y tedioso.

¿Es posible obtener estos datos de una forma más automatizada? La respuesta es que . Hay que ir a la fuente de los datos.

El ESB almacena los datos de las instancias procesadas en un repositorio, habitualmente en Base de Datos. Si esta es nuestra configuración, podemos obtener los datos mediante una sentencia SQL sobre el esquema de base de datos correspondiente al repositorio.

Para obtener los tiempos mínimos, máximos y medios de proceso del ESB y del servicio llamado para el caso típico de un servicio que es llamado por un proxy generado en el ESB, la sentencia SQL a ejecutar sería la siguiente:

select servicio,
       operacion,
       count(*) numeroOperaciones,
       max(tiempoWS) maximoOperacionWS,
       min(tiempoWS) minimoOperacionWS,
       avg(tiempoWS) mediaOperacionWS,
       max(tiempoTotal - tiempoWS) maximoOperacionESB,
       min(tiempoTotal - tiempoWS) minimoOperacionESB,
       avg(tiempoTotal - tiempoWS) mediaOperacionESB
from(
    select peticion,
           servicio,
           operacion,
           max(tiempo) tiempoTotal,
           min(tiempo) tiempoWS
    from (
        select flows.flow_id as peticion,
               flows.source,
               operaciones.name operacion,
               servicios.name servicio,
               max(flows.timestamp) - min(flows.timestamp) tiempo
        from oraesb.esb_activity flows,
             oraesb.wf_events operaciones,
             oraesb.wf_events servicios
        where --Si queremos los datos de una única instancia XXX de la consola: flows.flow_id = 'XXX' and
              flows.operation_guid = operaciones.guid and
              operaciones.type = 'EVENT' and
              -- Filtro por Soap Invocation
              operaciones.owner_guid = servicios.guid and
              servicios.type = 'GROUP' and
              servicios.name = 'servicioInvocado_SI' and
-- Filtro por periodo de estudio
              (To_Date( '01.01.1970 00:00:00','DD.MM.YYYY HH24:Mi:Ss') + flows.timestamp / 86400000) > (sysdate - 15)
        group by flows.flow_id, flows.source, operaciones.name, servicios.name
        order by source nulls last)
    group by peticion, servicio, operacion
)
group by servicio, operacion

A partir de esta select de ejemplo, enfocada a sacar la estadística para un servicio con un proxy service y un business service, podéis realizar las modificaciones oportunas para adaptarla a vuestra casuística.

  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: