salix/db/routines/vn/events/printQueue_check.sql

85 lines
2.5 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`printQueue_check`
ON SCHEDULE EVERY 10 MINUTE
STARTS '2022-01-28 09:52:46.000'
ON COMPLETION PRESERVE
ENABLE
DO BEGIN
DECLARE vCurrentCount INT;
DECLARE vCheckSum INT;
DECLARE vIsAlreadyNotified BOOLEAN;
DECLARE vTableQueue TEXT;
DECLARE vLineQueue TEXT;
DECLARE vDone BOOL DEFAULT FALSE;
DECLARE vPrintQueueLimit INT;
DECLARE vCur CURSOR FOR
SELECT CONCAT('<tr>\n\t\t\t\t\t\t\t<td>', IFNULL(pq.id, ''), '</td>\n\t\t\t\t\t\t\t<td>', IFNULL(p.path, ''),'</td>\n\t\t\t\t\t\t\t<td>', IFNULL(r.name, ''),'</td>\n\t\t\t\t\t\t\t<td>', IFNULL(pq.statusCode, ''),'</td>\n\t\t\t\t\t\t\t<td>', IFNULL(w.firstname, ''), " ", IFNULL(w.lastName, ''),'</td>\n\t\t\t\t\t\t\t<td>', IFNULL(pq.`error`, ''),'</td>\n\t\t\t\t\t\t</tr>')
FROM printQueue pq
LEFT JOIN worker w ON w.id = pq.workerFk
LEFT JOIN printer p ON p.id = pq.printerFk
LEFT JOIN report r ON r.id = pq.reportFk
JOIN printQueueConfig
LIMIT vPrintQueueLimit;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET vDone = TRUE;
SELECT printQueueLimit INTO vPrintQueueLimit
FROM printQueueConfig;
SELECT COUNT(*), IFNULL(SUM(id),0) INTO vCurrentCount, vCheckSum
FROM printQueue WHERE statusCode = 'queued';
SELECT isAlreadyNotified INTO vIsAlreadyNotified
FROM printingQueueCheck;
IF (SELECT lastCount FROM printingQueueCheck) = vCurrentCount AND
(SELECT lastCheckSum FROM printingQueueCheck) = vCheckSum AND
vIsAlreadyNotified = FALSE AND vCurrentCount > 0
THEN
SELECT '<table cellspacing="10">\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>Id Cola</td>\n\t\t\t\t\t\t<td>Ruta Impresora</td>\n\t\t\t\t\t\t<td>Informe</td>\n\t\t\t\t\t\t<td>Estado</td>\n\t\t\t\t\t\t<td>Trabajador</td>\n\t\t\t\t\t\t<td>Error</td>\n\t\t\t\t\t</tr>' INTO vTableQueue;
OPEN vCur;
l: LOOP
SET vDone = FALSE;
FETCH vCur INTO vLineQueue;
IF vDone THEN
LEAVE l;
END IF;
SELECT CONCAT(vTableQueue, vLineQueue) INTO vTableQueue;
END LOOP;
CLOSE vCur;
CALL mail_insert(
'cau@verdnatura.es',
NULL,
'Servidor de impresion parado',
CONCAT('Hay ', vCurrentCount, ' lineas bloqueadas', vTableQueue, '</table>')
);
UPDATE printingQueueCheck SET isAlreadyNotified = TRUE;
END IF;
IF (SELECT lastCount FROM printingQueueCheck) > vCurrentCount AND
vIsAlreadyNotified = TRUE
THEN
UPDATE printingQueueCheck SET isAlreadyNotified = FALSE;
END IF;
UPDATE printingQueueCheck
SET lastCount = vCurrentCount,
lastCheckSum = vCheckSum;
END$$
DELIMITER ;