9

ジョブキューにkueを使用していますが、GUIを使用せずに、まだ残っているジョブの数、失敗したジョブの数などを知りたいのですが、この種の情報を取得するにはどうすればよいですか。

たとえば、ジョブキューの処理を開始してから数分後、これまでに失敗したすべてのジョブのステータスを「非アクティブ」に更新して、ジョブを再開したいと思います。

私がstackoverflowで見つけた唯一の関連する質問はこれでしたが、処理中に特定のイベントを発生させた後、一度に1つのジョブを処理します。特定のステータスを持つデータベース内のすべてのジョブを取得することに関心があるため、私の懸念は異なります。

この質問への答えは、データベース内のすべての完了したジョブを取得するkueライブラリの関数.completeに言及しています。他の可能な仕事のステータスのための同様の機能はありますか?

4

2 に答える 2

17

kueのソースコードを閲覧して解決策を見つけました。次のコードは、私が必要とするものを実現します。

var redis = require ('redis'),
    kue = require ('kue'),
    redisClient = redis.createClient(6379, "127.0.0.1");

kue.redis.createClient = function () {
    return redisClient;
};

kue.app.listen(3000); 


kue.Job.rangeByType ('job', 'failed', 0, 10, 'asc', function (err, selectedJobs) {
    selectedJobs.forEach(function (job) {
        job.state('inactive').save();
    });
});

参考までに、関連するkueのソースコードは次のとおりです。

/queue/job.js:123:

/**
 * Get jobs of `type` and `state`, with the range `from`..`to`
 * and invoke callback `fn(err, ids)`.
 *
 * @param {String} type
 * @param {String} state
 * @param {Number} from
 * @param {Number} to
 * @param {String} order
 * @param {Function} fn
 * @api public
 */

exports.rangeByType = function(type, state, from, to, order, fn){
  redis.client().zrange('q:jobs:' + type + ':' + state, from, to, get(fn, order));
};

次のことを示すKueソースコード:

  • type職種です
  • fromtoはインデックスごとのジョブ範囲です(たとえば、インデックス0から10までのロードジョブを指定でき、合計11個のジョブが指定できます)。
  • orderフェッチされたジョブの順序を指定します。デフォルトはascです。並べ替えることもできますdesc
于 2013-02-27T09:01:47.953 に答える
0

次の作品は、既存のqueueオブジェクトを使用しているため、受け入れられた回答のコメントでJaprescottが言及しているように、二重のRedis接続の問題はありません。

queue.cardByType("notifications", "complete", function( err, count ) {
  console.log(count);
});

有効な状態に自由に置き換えてください。以下は有効な状態のリストです。

inactive
complete
active
failed
delayed
于 2021-09-10T11:41:42.843 に答える