Crea un objeto de tipo contador que se puede vincular a una sentencia de bucle, como puede ser un foreach o un for.
Permite además, dividir el bucle en grupos de n iteraciones o ciclos. Dispone, además del elemento util.count.log para emitir mensajes de log con el número de iteraciones realizadas hasta el momento, el tiempo requerido para completar el ciclo o intervalo realizado, y el número de iteraciones o registros procesados por segundo.
1 util.counter
<util.counter
step='step'
max='max'
/>
Attributes | |||||
---|---|---|---|---|---|
Name | Type | Required | Default | Description | |
Astep | number | Número de iteraciones del bucle que forman un intervalo del contador. Útil para imprimir un mensaje cada vez que se completa un intervalo, o sea cada n iteraciones de la sentencia bucle. El elemento util.counter.count retorna true cada vez que se completa un intervalo completo. En caso de que no este informado se calcula apartir del atributo max. | |||
Amax | number | Número de registros a procesar. Para su uso, requiere conocer a priori, el número de registros a procesar. En los mensajes de log emitidos por un contador con este valor asignado, se imprime también el porcentaje de progeso y el tiempo estimado de finalización del proceso o ETA ( ''estimated time of arrival'' ). MYLOG - 1140000 row(s) of 129340850 ( 0.8 %) in [00 min, 9,9 sec], elapsed [41 min, 47,2 sec], performance [1014,71 row(s) / sec] ETA=[35 h, 05 min]. |
Returns | |
---|---|
Type | Description |
Counter | Retorna un objeto de tipo counter. |
Exceptions
either counter-step or counter-max must be > 0
Es necesario, al menos, informar uno de los dos atributos step o max.
Example
Contador de prograso con valor maximo conocido (1000) con muestreo de progreso cada 100 iteraciones.
Copy
<xsql-script> <body> <set name='maxrows'>1000</set> <set name='m_counter'><util.counter step='100' max='#maxrows' /></set> <for start='1' end='#maxrows' name='idx'> <do> <if> <expr> <util.counter.count><m_counter /></util.counter.count> </expr> <then> <println>PROGRESS - <util.counter.log><m_counter /></util.counter.log></println> </then> </if> </do> </for> </body> </xsql-script>
PROGRESS - 100 row(s) of 1000 ( 10,0 %) in [00:00:00], elapsed [00:00:00], performance [ 100000,0 row(s) / sec] ETA=[00:00:00] insert [ 0] update [ 0] delete [ 0] errors [ 0]
PROGRESS - 200 row(s) of 1000 ( 20,0 %) in [00:00:00], elapsed [00:00:00], performance [ 100000,0 row(s) / sec] ETA=[00:00:00] insert [ 0] update [ 0] delete [ 0] errors [ 0]
PROGRESS - 300 row(s) of 1000 ( 30,0 %) in [00:00:00], elapsed [00:00:00], performance [ 100000,0 row(s) / sec] ETA=[00:00:00] insert [ 0] update [ 0] delete [ 0] errors [ 0]
PROGRESS - 400 row(s) of 1000 ( 40,0 %) in [00:00:00], elapsed [00:00:00], performance [ 100000,0 row(s) / sec] ETA=[00:00:00] insert [ 0] update [ 0] delete [ 0] errors [ 0]
PROGRESS - 500 row(s) of 1000 ( 50,0 %) in [00:00:00], elapsed [00:00:00], performance [ 100000,0 row(s) / sec] ETA=[00:00:00] insert [ 0] update [ 0] delete [ 0] errors [ 0]
PROGRESS - 600 row(s) of 1000 ( 60,0 %) in [00:00:00], elapsed [00:00:00], performance [ 100000,0 row(s) / sec] ETA=[00:00:00] insert [ 0] update [ 0] delete [ 0] errors [ 0]
PROGRESS - 700 row(s) of 1000 ( 70,0 %) in [00:00:00], elapsed [00:00:00], performance [ 100000,0 row(s) / sec] ETA=[00:00:00] insert [ 0] update [ 0] delete [ 0] errors [ 0]
PROGRESS - 800 row(s) of 1000 ( 80,0 %) in [00:00:00], elapsed [00:00:00], performance [ 100000,0 row(s) / sec] ETA=[00:00:00] insert [ 0] update [ 0] delete [ 0] errors [ 0]
PROGRESS - 900 row(s) of 1000 ( 90,0 %) in [00:00:00], elapsed [00:00:00], performance [ 100000,0 row(s) / sec] ETA=[00:00:00] insert [ 0] update [ 0] delete [ 0] errors [ 0]
PROGRESS - 1000 row(s) of 1000 (100,0 %) in [00:00:00], elapsed [00:00:00], performance [ 100000,0 row(s) / sec] END insert [ 0] update [ 0] delete [ 0] errors [ 0]