57 lines
2.3 KiB
JavaScript
57 lines
2.3 KiB
JavaScript
import { z } from 'zod';
|
|
import { config } from '../../config.js';
|
|
import { runCommand } from '../../lib/runCommand.js';
|
|
import { errorResult, jsonResult, toErrorMessage } from '../shared.js';
|
|
import { requireLaravel } from './requireLaravel.js';
|
|
export function registerLaravelQueueStatusTool(server) {
|
|
server.registerTool('laravel_queue_status', {
|
|
title: 'Laravel Queue Status',
|
|
description: 'Summarize Laravel queue health via `php artisan queue:failed` (and optionally `queue:batches` when available). Read-only.',
|
|
inputSchema: {
|
|
includeBatches: z
|
|
.boolean()
|
|
.optional()
|
|
.default(false)
|
|
.describe('If true, also run `php artisan queue:batches` when supported.'),
|
|
},
|
|
}, async ({ includeBatches }) => {
|
|
try {
|
|
const laravel = requireLaravel();
|
|
const failed = await runCommand('php', ['artisan', 'queue:failed', '--no-interaction'], {
|
|
cwd: laravel.root,
|
|
timeoutMs: config.defaultCommandTimeoutMs,
|
|
});
|
|
let batches = null;
|
|
if (includeBatches) {
|
|
batches = await runCommand('php', ['artisan', 'queue:batches', '--no-interaction'], {
|
|
cwd: laravel.root,
|
|
timeoutMs: config.defaultCommandTimeoutMs,
|
|
});
|
|
}
|
|
const failedLines = failed.output
|
|
.split(/\r?\n/)
|
|
.map((line) => line.trim())
|
|
.filter(Boolean);
|
|
const failedCount = failedLines.filter((line) => /^\d+\s+/.test(line) || /\|/.test(line)).length;
|
|
return jsonResult({
|
|
failed: {
|
|
exitCode: failed.exitCode,
|
|
failed: failed.failed,
|
|
approxRows: failedCount,
|
|
output: failed.output,
|
|
},
|
|
batches: batches
|
|
? {
|
|
exitCode: batches.exitCode,
|
|
failed: batches.failed,
|
|
output: batches.output,
|
|
}
|
|
: null,
|
|
});
|
|
}
|
|
catch (error) {
|
|
return errorResult(toErrorMessage(error));
|
|
}
|
|
});
|
|
}
|
|
//# sourceMappingURL=queueStatus.js.map
|