Estoy usando kue para node.js y veo que hay un código de muestra para eliminar trabajos en completo, pero ¿hay alguna manera de eliminar trabajos antiguos anteriores a X? Me gustaría ver trabajos completos durante uno o dos días para poder revisar lo que ha estado sucediendo, pero para limpiar todo lo anterior.cómo eliminar trabajos completados anteriores a x desde kue
Respuesta
La API de kue parece haber mejorado considerablemente desde que se hizo esta pregunta por primera vez. Cavé en el código un poco y esta versión mucho más simple trabajaron para mí: (. Se omite manejo de errores para abreviar)
var kue = require('kue');
kue.Job.rangeByState('complete', 0, someLargeNumber, 1, function(err, jobs) {
jobs.forEach(function(job) {
if (job.created_at < yourTimeThreshold) return;
job.remove();
});
});
Sería bueno si Kue proporcionara un mecanismo para limpiar los trabajos completados dentro de la biblioteca, sin embargo, puede implementar una solución basada en cada campo de trabajos 'created_at'. Esto es lo que uso para eliminar trabajos completos de más de 7 días, escaneando cada 24 horas.
var _ = require('underscore'),
kue = require('kue');
var jobs = kue.createQueue(),
q = new kue, // object so we can access exposed methods in the kue lib
hours = 24,
timer = hours * 60 * 60 * 1000; // timer for the setInterval function
var completedJobs = function(callback) {
/**
* completedJobs - uses the kue lib .complete function to get a list of
* all completed job ids, iterates through each id to retrieve the actual
* job object, then pushes the object into an array for the callback.
*
*/
q.complete(function(err, ids){
var jobs = [],
count = 0,
total = ids.length;
console.log('completedJobs -> ids.length:%s',ids.length);
_.each(ids, function(id){
kue.Job.get(id, function(err, job){
count++;
jobs.push(job);
if (total === count) {
callback(null, jobs);
return;
}
});
});
});
}
var removeJobs = function(jobs, callback) {
/**
* removeJobs - removes the job from kue by calling the job.remove from the
* job object collected in completedJobs().
*
*/
var count = 0,
total = jobs.length;
console.log('removeJobs -> jobs.length:%s',jobs.length);
_.each(jobs, function(job) {
job.remove(function(err) {
count++;
if (total === count) {
callback(null, count);
return;
}
});
});
}
var dateDiffInDays = function(d1, d2) {
/**
* dateDiffInDays - returns the difference between two Date objects in days
*/
var t2 = d2.getTime(),
t1 = d1.getTime();
return parseInt((t2-t1)/(24*3600*1000));
}
setInterval(function() {
/**
* setInterval - calls completedJobs in a 24-hour interval
*/
completedJobs(function(err, jobs) {
// callback to completedJobs
console.log('completedJobs -> callback-> jobs.length:%s', jobs.length);
var jobsToRemove = [],
now = new Date();
_.each(jobs, function(job){
var then = new Date(parseInt(job.created_at)),
diff = dateDiffInDays(then, now),
timePastForRemoval = 7; // remove anything older than 7 days
if (diff >= timePastForRemoval) {
jobsToRemove.push(job);
}
});
console.log('completedJobs -> callback -> jobsToRemove.length:%s', jobsToRemove.length);
if (jobsToRemove.length > 0) { // if we have jobsToRemove
removeJobs(jobsToRemove, function(err, count){
// callback to removeJobs
console.log('removeJobs -> callback -> jobs removed:%s',count);
});
} else {
console.log('completedJobs -> callback -> no jobs to remove');
}
});
}, timer);
console.log('Running kue completed job clean-up');
que tenía que hacer esto y encontrar el código de arriba un poco difícil de seguir, me hizo una fácil extender método claro y conciso aquí: https://gist.github.com/4212207
me querían para eliminar los trabajos viciado de Kue, así y modificó el código de Chris para que funcione sin Underscore.js.
El código está aquí: https://gist.github.com/niravmehta/6112330
Se puede ejecutar en la línea de comandos como
node kue_cleanup
Gracias a Chris por su maravilloso guión! Fue un gran punto de partida.
- 1. Cómo eliminar archivos anteriores a X horas
- 2. eliminar filas sqllite de android anteriores a x días
- 3. Buscar archivos anteriores a X y contarlos
- 4. Cómo eliminar versiones anteriores de Xcode
- 5. Eliminar problemas anteriores en Xcode
- 6. Rieles completados 406 No aceptable
- 7. buscar registros de x días anteriores?
- 8. Eliminar elementos anteriores a un día - SQL Server
- 9. MySQL: Eliminar todas las filas anteriores a 10 minutos
- 10. Eliminar versiones anteriores de Ruby (en Windows)
- 11. Usando la biblioteca "kue" redis-backed en node.js - ¿por qué mi uso de memoria redis sigue aumentando?
- 12. CouchDb: ¿cómo eliminar documentos anteriores> 6 meses?
- 13. Compilación para versiones anteriores de Mac OS X
- 14. cómo eliminar X-Powered-By en ExpressJS
- 15. Compilación cruzada a Linux desde OS X
- 16. MySQL: Trabajando con fechas anteriores a 1970
- 17. MySQL Specialists: elimine todas las filas anteriores a x días pero no la última
- 18. archivo por lotes para eliminar los archivos anteriores a una fecha especificada
- 19. ¿Cómo puedo desactivar trabajos en Quartz JDBCJobStore?
- 20. ¿Cómo decirle a 'git' que 'olvide' TODAS las confirmaciones anteriores?
- 21. GetThreadId en sistemas anteriores a la vista?
- 22. PHP: ejecución de trabajos programados (trabajos cron)
- 23. ¿Cómo eliminar desde múltiples tablas en MySQL?
- 24. Dibuja líneas desde el eje x a los puntos
- 25. cómo matar trabajos de hadoop
- 26. ¿Cómo puedo averiguar qué versión de Perl estaba disponible en versiones anteriores de Mac OS X?
- 27. Cómo compartir BUILD_NUMBER entre trabajos con Hudson
- 28. un trabajo para eliminar filas anteriores a 3 meses en la base de datos mysql
- 29. Robocopy mueve los archivos anteriores a
- 30. ¿Cómo eliminar el encabezado "X-Runtime" de Nginx/Passenger?