pixivflow 2.22.0 → 2.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/SchedulerCommand.js +12 -3
- package/dist/commands/scheduler-runtime.d.ts +29 -0
- package/dist/commands/scheduler-runtime.js +54 -1
- package/dist/delivery/OutboxWorker.js +6 -8
- package/dist/download/exec/DownloadExecutor.js +11 -2
- package/dist/download/handlers/IllustrationTargetHandler.js +15 -0
- package/dist/download/handlers/NovelTargetHandler.js +12 -2
- package/dist/interfaces/IDatabase.d.ts +11 -0
- package/dist/logger.d.ts +24 -0
- package/dist/logger.js +88 -11
- package/dist/observability/classify.d.ts +7 -0
- package/dist/observability/classify.js +51 -0
- package/dist/observability/context.d.ts +10 -0
- package/dist/observability/context.js +22 -0
- package/dist/observability/index.d.ts +7 -0
- package/dist/observability/index.js +36 -0
- package/dist/observability/types.d.ts +23 -0
- package/dist/observability/types.js +3 -0
- package/dist/package.json +1 -1
- package/dist/scheduler/RecoveryOutcome.d.ts +24 -0
- package/dist/scheduler/RecoveryOutcome.js +44 -0
- package/dist/scheduler/ScheduleTriggerServer.d.ts +4 -0
- package/dist/scheduler/SlotBusinessStatus.d.ts +32 -0
- package/dist/scheduler/SlotBusinessStatus.js +43 -0
- package/dist/scheduler/SlotCoordinator.d.ts +7 -0
- package/dist/scheduler/SlotCoordinator.js +13 -0
- package/dist/storage/Database.d.ts +4 -0
- package/dist/storage/Database.js +7 -0
- package/dist/storage/DatabaseMigration.js +21 -0
- package/dist/storage/repositories/SystemErrorRepository.d.ts +19 -0
- package/dist/storage/repositories/SystemErrorRepository.js +92 -0
- package/dist/version.js +1 -1
- package/dist/webui/package.json +1 -1
- package/dist/webui/routes/admin-logs.d.ts +3 -0
- package/dist/webui/routes/admin-logs.js +9 -0
- package/dist/webui/routes/handlers/admin-logs-handlers.d.ts +6 -0
- package/dist/webui/routes/handlers/admin-logs-handlers.js +106 -0
- package/dist/webui/routes/handlers/system-errors-handlers.d.ts +6 -0
- package/dist/webui/routes/handlers/system-errors-handlers.js +59 -0
- package/dist/webui/routes/system-errors.d.ts +3 -0
- package/dist/webui/routes/system-errors.js +9 -0
- package/dist/webui/server/server-routes.js +5 -0
- package/package.json +1 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listSystemErrors = listSystemErrors;
|
|
4
|
+
exports.resolveSystemError = resolveSystemError;
|
|
5
|
+
const Database_1 = require("../../../storage/Database");
|
|
6
|
+
const config_1 = require("../../../config");
|
|
7
|
+
const logger_1 = require("../../../logger");
|
|
8
|
+
function db() {
|
|
9
|
+
const config = (0, config_1.loadConfig)((0, config_1.getConfigPath)());
|
|
10
|
+
const database = new Database_1.Database(config.storage.databasePath);
|
|
11
|
+
database.migrate();
|
|
12
|
+
return database;
|
|
13
|
+
}
|
|
14
|
+
/** GET /admin/system-errors?limit=&error_type=&bot_id=&stage=&resolved=&from=&to= */
|
|
15
|
+
async function listSystemErrors(req, res) {
|
|
16
|
+
let database = null;
|
|
17
|
+
try {
|
|
18
|
+
database = db();
|
|
19
|
+
const rows = database.systemErrors.list({
|
|
20
|
+
limit: Number(req.query.limit ?? 50),
|
|
21
|
+
errorType: req.query.error_type ? String(req.query.error_type) : undefined,
|
|
22
|
+
botId: req.query.bot_id ? String(req.query.bot_id) : undefined,
|
|
23
|
+
stage: req.query.stage ? String(req.query.stage) : undefined,
|
|
24
|
+
resolved: req.query.resolved === 'true' ? true : req.query.resolved === 'false' ? false : undefined,
|
|
25
|
+
from: req.query.from ? String(req.query.from) : undefined,
|
|
26
|
+
to: req.query.to ? String(req.query.to) : undefined,
|
|
27
|
+
});
|
|
28
|
+
res.json({ data: rows });
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
logger_1.logger.error('list system errors failed', { error: error instanceof Error ? error.message : String(error) });
|
|
32
|
+
res.status(500).json({ error: 'list failed' });
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
database?.close();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** POST /admin/system-errors/:id/resolve */
|
|
39
|
+
async function resolveSystemError(req, res) {
|
|
40
|
+
let database = null;
|
|
41
|
+
try {
|
|
42
|
+
const id = Number(req.params.id);
|
|
43
|
+
if (!Number.isFinite(id)) {
|
|
44
|
+
res.status(400).json({ error: 'invalid id' });
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
database = db();
|
|
48
|
+
const result = database.systemErrors.markResolved(id);
|
|
49
|
+
res.json({ success: result.changes > 0, changes: result.changes });
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
logger_1.logger.error('resolve system error failed', { error: error instanceof Error ? error.message : String(error) });
|
|
53
|
+
res.status(500).json({ error: 'resolve failed' });
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
database?.close();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=system-errors-handlers.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const express_1 = require("express");
|
|
4
|
+
const system_errors_handlers_1 = require("./handlers/system-errors-handlers");
|
|
5
|
+
const router = (0, express_1.Router)();
|
|
6
|
+
router.get('/', system_errors_handlers_1.listSystemErrors);
|
|
7
|
+
router.post('/:id/resolve', system_errors_handlers_1.resolveSystemError);
|
|
8
|
+
exports.default = router;
|
|
9
|
+
//# sourceMappingURL=system-errors.js.map
|
|
@@ -10,6 +10,8 @@ const config_1 = __importDefault(require("../routes/config"));
|
|
|
10
10
|
const download_1 = __importDefault(require("../routes/download"));
|
|
11
11
|
const stats_1 = __importDefault(require("../routes/stats"));
|
|
12
12
|
const logs_1 = __importDefault(require("../routes/logs"));
|
|
13
|
+
const admin_logs_1 = __importDefault(require("../routes/admin-logs"));
|
|
14
|
+
const system_errors_1 = __importDefault(require("../routes/system-errors"));
|
|
13
15
|
const files_1 = __importDefault(require("../routes/files"));
|
|
14
16
|
/**
|
|
15
17
|
* Setup API routes for Express app
|
|
@@ -29,6 +31,9 @@ function setupRoutes(app) {
|
|
|
29
31
|
app.use('/api/download', download_1.default);
|
|
30
32
|
app.use('/api/stats', stats_1.default);
|
|
31
33
|
app.use('/api/logs', logs_1.default);
|
|
34
|
+
// Admin observability API (protected by WebUI basic auth when enabled).
|
|
35
|
+
app.use('/admin/logs', admin_logs_1.default);
|
|
36
|
+
app.use('/admin/system-errors', system_errors_1.default);
|
|
32
37
|
app.use('/api/files', files_1.default);
|
|
33
38
|
}
|
|
34
39
|
//# sourceMappingURL=server-routes.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pixivflow",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.23.0",
|
|
4
4
|
"description": "🎨 Pixiv 下载、筛选与自动收集工具 - 批量下载插画和小说、按标签/热度/日期筛选、定时任务与可靠 HTTP 交付 | Pixiv downloader and automation toolkit with filtering, scheduling and reliable HTTP delivery",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|