create-ssnode-cli 0.2.2 → 0.2.3
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/package.json +1 -1
- package/templates/backend/config/config.develop.yaml +6 -4
- package/templates/backend/data/template.dev.sqlite-shm +0 -0
- package/templates/backend/data/template.dev.sqlite-wal +0 -0
- package/templates/backend/dist/app.module.js +85 -1
- package/templates/backend/dist/app.module.js.map +1 -1
- package/templates/backend/dist/common/all-exceptions.filter.js +47 -1
- package/templates/backend/dist/common/all-exceptions.filter.js.map +1 -1
- package/templates/backend/dist/common/app-crypto.js +119 -1
- package/templates/backend/dist/common/app-crypto.js.map +1 -1
- package/templates/backend/dist/common/app-sign.guard.js +72 -1
- package/templates/backend/dist/common/app-sign.guard.js.map +1 -1
- package/templates/backend/dist/common/app-sign.module.js +20 -1
- package/templates/backend/dist/common/app-sign.module.js.map +1 -1
- package/templates/backend/dist/common/response.js +23 -1
- package/templates/backend/dist/common/response.js.map +1 -1
- package/templates/backend/dist/common/throttle.guard.js +42 -1
- package/templates/backend/dist/common/throttle.guard.js.map +1 -1
- package/templates/backend/dist/common/transform.interceptor.js +28 -1
- package/templates/backend/dist/common/transform.interceptor.js.map +1 -1
- package/templates/backend/dist/config/config.interface.js +2 -1
- package/templates/backend/dist/config/config.interface.js.map +1 -1
- package/templates/backend/dist/config/configuration.js +91 -1
- package/templates/backend/dist/config/configuration.js.map +1 -1
- package/templates/backend/dist/database/migrations/0001-init.migration.js +69 -1
- package/templates/backend/dist/database/migrations/0001-init.migration.js.map +1 -1
- package/templates/backend/dist/database/sqlite.config.js +32 -1
- package/templates/backend/dist/database/sqlite.config.js.map +1 -1
- package/templates/backend/dist/entities/audit-log.entity.js +49 -1
- package/templates/backend/dist/entities/audit-log.entity.js.map +1 -1
- package/templates/backend/dist/entities/image.entity.js +50 -1
- package/templates/backend/dist/entities/image.entity.js.map +1 -1
- package/templates/backend/dist/entities/page-data.entity.js +60 -1
- package/templates/backend/dist/entities/page-data.entity.js.map +1 -1
- package/templates/backend/dist/entities/screen-config.entity.js +74 -1
- package/templates/backend/dist/entities/screen-config.entity.js.map +1 -1
- package/templates/backend/dist/entities/user.entity.js +59 -1
- package/templates/backend/dist/entities/user.entity.js.map +1 -1
- package/templates/backend/dist/main.js +56 -1
- package/templates/backend/dist/main.js.map +1 -1
- package/templates/backend/dist/modules/audit/audit.controller.js +51 -1
- package/templates/backend/dist/modules/audit/audit.controller.js.map +1 -1
- package/templates/backend/dist/modules/audit/audit.module.js +25 -1
- package/templates/backend/dist/modules/audit/audit.module.js.map +1 -1
- package/templates/backend/dist/modules/audit/audit.service.js +57 -1
- package/templates/backend/dist/modules/audit/audit.service.js.map +1 -1
- package/templates/backend/dist/modules/auth/auth.controller.js +74 -1
- package/templates/backend/dist/modules/auth/auth.controller.js.map +1 -1
- package/templates/backend/dist/modules/auth/auth.module.js +45 -1
- package/templates/backend/dist/modules/auth/auth.module.js.map +1 -1
- package/templates/backend/dist/modules/auth/auth.service.js +151 -1
- package/templates/backend/dist/modules/auth/auth.service.js.map +1 -1
- package/templates/backend/dist/modules/auth/captcha.service.js +56 -1
- package/templates/backend/dist/modules/auth/captcha.service.js.map +1 -1
- package/templates/backend/dist/modules/auth/jwt-auth.guard.js +17 -1
- package/templates/backend/dist/modules/auth/jwt-auth.guard.js.map +1 -1
- package/templates/backend/dist/modules/auth/jwt.strategy.js +37 -1
- package/templates/backend/dist/modules/auth/jwt.strategy.js.map +1 -1
- package/templates/backend/dist/modules/image/image.controller.js +75 -1
- package/templates/backend/dist/modules/image/image.controller.js.map +1 -1
- package/templates/backend/dist/modules/image/image.module.js +26 -1
- package/templates/backend/dist/modules/image/image.module.js.map +1 -1
- package/templates/backend/dist/modules/image/image.service.js +94 -1
- package/templates/backend/dist/modules/image/image.service.js.map +1 -1
- package/templates/backend/dist/modules/ops/backend-version.probe.js +58 -1
- package/templates/backend/dist/modules/ops/backend-version.probe.js.map +1 -1
- package/templates/backend/dist/modules/ops/ops-probe.interface.js +4 -1
- package/templates/backend/dist/modules/ops/ops-probe.interface.js.map +1 -1
- package/templates/backend/dist/modules/ops/ops.controller.js +52 -1
- package/templates/backend/dist/modules/ops/ops.controller.js.map +1 -1
- package/templates/backend/dist/modules/ops/ops.module.js +39 -1
- package/templates/backend/dist/modules/ops/ops.module.js.map +1 -1
- package/templates/backend/dist/modules/ops/ops.service.js +72 -1
- package/templates/backend/dist/modules/ops/ops.service.js.map +1 -1
- package/templates/backend/dist/modules/ops/sqlite-backup-list.probe.js +105 -1
- package/templates/backend/dist/modules/ops/sqlite-backup-list.probe.js.map +1 -1
- package/templates/backend/dist/modules/ops/sqlite-backup-log.probe.js +67 -1
- package/templates/backend/dist/modules/ops/sqlite-backup-log.probe.js.map +1 -1
- package/templates/backend/dist/modules/ops/sqlite-backup.probe.js +115 -1
- package/templates/backend/dist/modules/ops/sqlite-backup.probe.js.map +1 -1
- package/templates/backend/dist/modules/ops/version.controller.js +52 -1
- package/templates/backend/dist/modules/ops/version.controller.js.map +1 -1
- package/templates/backend/dist/modules/page-data/page-data.controller.js +109 -1
- package/templates/backend/dist/modules/page-data/page-data.controller.js.map +1 -1
- package/templates/backend/dist/modules/page-data/page-data.module.js +25 -1
- package/templates/backend/dist/modules/page-data/page-data.module.js.map +1 -1
- package/templates/backend/dist/modules/page-data/page-data.service.js +69 -1
- package/templates/backend/dist/modules/page-data/page-data.service.js.map +1 -1
- package/templates/backend/dist/modules/screen-config/screen-config.controller.js +61 -1
- package/templates/backend/dist/modules/screen-config/screen-config.controller.js.map +1 -1
- package/templates/backend/dist/modules/screen-config/screen-config.module.js +25 -1
- package/templates/backend/dist/modules/screen-config/screen-config.module.js.map +1 -1
- package/templates/backend/dist/modules/screen-config/screen-config.service.js +41 -1
- package/templates/backend/dist/modules/screen-config/screen-config.service.js.map +1 -1
- package/templates/backend/dist/modules/upload/upload.controller.js +65 -1
- package/templates/backend/dist/modules/upload/upload.controller.js.map +1 -1
- package/templates/backend/dist/modules/upload/upload.module.js +22 -1
- package/templates/backend/dist/modules/upload/upload.module.js.map +1 -1
- package/templates/backend/dist/modules/upload/upload.service.js +75 -1
- package/templates/backend/dist/modules/upload/upload.service.js.map +1 -1
- package/templates/backend/dist/modules/user/user.controller.js +149 -1
- package/templates/backend/dist/modules/user/user.controller.js.map +1 -1
- package/templates/backend/dist/modules/user/user.module.js +26 -1
- package/templates/backend/dist/modules/user/user.module.js.map +1 -1
- package/templates/backend/dist/modules/user/user.service.js +249 -1
- package/templates/backend/dist/modules/user/user.service.js.map +1 -1
- package/templates/backend/dist/modules/websocket/websocket.gateway.js +33 -1
- package/templates/backend/dist/modules/websocket/websocket.gateway.js.map +1 -1
- package/templates/backend/dist/modules/websocket/websocket.module.js +19 -1
- package/templates/backend/dist/modules/websocket/websocket.module.js.map +1 -1
- package/templates/backend/dist/tsconfig.build.tsbuildinfo +1 -1
- package/templates/backend/package.json +1 -1
- package/templates/backend/src/modules/auth/captcha.service.ts +6 -5
- package/templates/web/dist/assets/{AuthLayout-bcf98efb.js → AuthLayout-f1e8d110.js} +1 -1
- package/templates/web/dist/assets/{AuthLayout-legacy-6e7a8ae1.js → AuthLayout-legacy-f871651c.js} +1 -1
- package/templates/web/dist/assets/{Background-eb77ef54.js → Background-955d549f.js} +1 -1
- package/templates/web/dist/assets/{Background-legacy-50457007.js → Background-legacy-fbad6e76.js} +1 -1
- package/templates/web/dist/assets/{Screen-318c3fc2.js → Screen-b14b0813.js} +1 -1
- package/templates/web/dist/assets/{Screen-legacy-af123b0f.js → Screen-legacy-154c8ee6.js} +1 -1
- package/templates/web/dist/assets/{api-beff4a3e.js → api-4d80e36e.js} +1 -1
- package/templates/web/dist/assets/{api-legacy-9fe41d4b.js → api-legacy-054fd569.js} +1 -1
- package/templates/web/dist/assets/{component-89b5253e.js → component-9d9f33fa.js} +1 -1
- package/templates/web/dist/assets/{component-legacy-8c5a28ef.js → component-legacy-4445386a.js} +1 -1
- package/templates/web/dist/assets/{index-a79e448b.js → index-107a0e80.js} +1 -1
- package/templates/web/dist/assets/{index-b60badf7.js → index-5afb70be.js} +1 -1
- package/templates/web/dist/assets/{index-cba19800.js → index-7b807c2d.js} +1 -1
- package/templates/web/dist/assets/{index-86214b19.js → index-ab64cd34.js} +1 -1
- package/templates/web/dist/assets/{index-7277cbfb.js → index-d8bfffb3.js} +1 -1
- package/templates/web/dist/assets/{index-d70eb540.js → index-db169639.js} +1 -1
- package/templates/web/dist/assets/{index-bd4ed808.js → index-e08dc495.js} +1 -1
- package/templates/web/dist/assets/index-e31f4b7c.js +1 -0
- package/templates/web/dist/assets/{index-legacy-783129a7.js → index-legacy-5cf7be80.js} +1 -1
- package/templates/web/dist/assets/index-legacy-6f112001.js +1 -0
- package/templates/web/dist/assets/{index-legacy-b3bd40c1.js → index-legacy-91e012ac.js} +1 -1
- package/templates/web/dist/assets/{index-legacy-0da8de82.js → index-legacy-aa61cf72.js} +1 -1
- package/templates/web/dist/assets/{index-legacy-06483318.js → index-legacy-afba9135.js} +1 -1
- package/templates/web/dist/assets/{index-legacy-d510e318.js → index-legacy-da51c769.js} +1 -1
- package/templates/web/dist/assets/{index-legacy-993ef005.js → index-legacy-eec0ca6e.js} +1 -1
- package/templates/web/dist/assets/{index-legacy-feb54578.js → index-legacy-f732db29.js} +1 -1
- package/templates/web/dist/index.html +2 -2
- package/templates/web/node_modules/.vite/deps/@ant-design_icons.js +4 -4
- package/templates/web/node_modules/.vite/deps/_metadata.json +57 -57
- package/templates/web/node_modules/.vite/deps/antd.js +6 -6
- package/templates/web/node_modules/.vite/deps/antd_locale_zh_CN.js +1 -1
- package/templates/web/node_modules/.vite/deps/axios.js +2793 -1104
- package/templates/web/node_modules/.vite/deps/axios.js.map +4 -4
- package/templates/web/node_modules/.vite/deps/{chunk-FADIZLW4.js → chunk-3EE4ABTD.js} +3 -3
- package/templates/web/node_modules/.vite/deps/{chunk-5JEEJ3ET.js → chunk-3KXTUEQ5.js} +2 -2
- package/templates/web/node_modules/.vite/deps/{chunk-DSEUD2VO.js → chunk-622VOE6C.js} +28 -237
- package/templates/web/node_modules/.vite/deps/chunk-622VOE6C.js.map +7 -0
- package/templates/web/node_modules/.vite/deps/{chunk-PCLWPLHU.js → chunk-AX2S74EI.js} +4 -4
- package/templates/web/node_modules/.vite/deps/{chunk-UX3FVGZU.js → chunk-DXNXWKU4.js} +1670 -1309
- package/templates/web/node_modules/.vite/deps/chunk-DXNXWKU4.js.map +7 -0
- package/templates/web/node_modules/.vite/deps/{chunk-OTDKR2HU.js → chunk-GT2UP6M4.js} +2 -2
- package/templates/web/node_modules/.vite/deps/{chunk-5WWUZCGV.js → chunk-HM4MQYWN.js} +10 -2
- package/templates/web/node_modules/.vite/deps/{chunk-Z4XTF2JV.js → chunk-NDUAOA7M.js} +2 -2
- package/templates/web/node_modules/.vite/deps/{chunk-PIIG5WB7.js → chunk-OKY2XKJX.js} +14406 -12416
- package/templates/web/node_modules/.vite/deps/chunk-OKY2XKJX.js.map +7 -0
- package/templates/web/node_modules/.vite/deps/{chunk-UIM57Q7Y.js → chunk-SC6QO7UO.js} +6086 -4354
- package/templates/web/node_modules/.vite/deps/chunk-SC6QO7UO.js.map +7 -0
- package/templates/web/node_modules/.vite/deps/classnames.js +2 -2
- package/templates/web/node_modules/.vite/deps/dayjs.js +2 -2
- package/templates/web/node_modules/.vite/deps/dayjs_locale_zh-cn.js +2 -2
- package/templates/web/node_modules/.vite/deps/echarts_charts.js +7172 -6102
- package/templates/web/node_modules/.vite/deps/echarts_charts.js.map +4 -4
- package/templates/web/node_modules/.vite/deps/echarts_components.js +3363 -1326
- package/templates/web/node_modules/.vite/deps/echarts_components.js.map +4 -4
- package/templates/web/node_modules/.vite/deps/echarts_core.js +57 -42
- package/templates/web/node_modules/.vite/deps/echarts_core.js.map +3 -3
- package/templates/web/node_modules/.vite/deps/echarts_renderers.js +432 -334
- package/templates/web/node_modules/.vite/deps/echarts_renderers.js.map +4 -4
- package/templates/web/node_modules/.vite/deps/exceljs.js +25762 -0
- package/templates/web/node_modules/.vite/deps/exceljs.js.map +7 -0
- package/templates/web/node_modules/.vite/deps/lodash.js +28 -10
- package/templates/web/node_modules/.vite/deps/lodash.js.map +3 -3
- package/templates/web/node_modules/.vite/deps/path-browserify.js +1 -1
- package/templates/web/node_modules/.vite/deps/prop-types.js +1 -1
- package/templates/web/node_modules/.vite/deps/qs.js +405 -138
- package/templates/web/node_modules/.vite/deps/qs.js.map +4 -4
- package/templates/web/node_modules/.vite/deps/react-dom.js +3 -3
- package/templates/web/node_modules/.vite/deps/react-dom_client.js +3 -3
- package/templates/web/node_modules/.vite/deps/react-router-dom.js +3445 -1283
- package/templates/web/node_modules/.vite/deps/react-router-dom.js.map +4 -4
- package/templates/web/node_modules/.vite/deps/react.js +2 -2
- package/templates/web/node_modules/.vite/deps/react_jsx-dev-runtime.js +2 -2
- package/templates/web/node_modules/.vite/deps/recoil.js +3 -3
- package/templates/web/src/pages/Login/index.tsx +8 -1
- package/templates/web/src/services/api.ts +6 -1
- package/templates/web/vite.config.js +5 -5
- package/templates/web/dist/assets/index-e6071630.js +0 -1
- package/templates/web/dist/assets/index-legacy-028ed5d5.js +0 -1
- package/templates/web/node_modules/.vite/deps/chunk-DSEUD2VO.js.map +0 -7
- package/templates/web/node_modules/.vite/deps/chunk-PIIG5WB7.js.map +0 -7
- package/templates/web/node_modules/.vite/deps/chunk-UIM57Q7Y.js.map +0 -7
- package/templates/web/node_modules/.vite/deps/chunk-UX3FVGZU.js.map +0 -7
- package/templates/web/node_modules/.vite/deps/xlsx.js +0 -33827
- package/templates/web/node_modules/.vite/deps/xlsx.js.map +0 -7
- /package/templates/web/node_modules/.vite/deps/{chunk-FADIZLW4.js.map → chunk-3EE4ABTD.js.map} +0 -0
- /package/templates/web/node_modules/.vite/deps/{chunk-5JEEJ3ET.js.map → chunk-3KXTUEQ5.js.map} +0 -0
- /package/templates/web/node_modules/.vite/deps/{chunk-PCLWPLHU.js.map → chunk-AX2S74EI.js.map} +0 -0
- /package/templates/web/node_modules/.vite/deps/{chunk-OTDKR2HU.js.map → chunk-GT2UP6M4.js.map} +0 -0
- /package/templates/web/node_modules/.vite/deps/{chunk-5WWUZCGV.js.map → chunk-HM4MQYWN.js.map} +0 -0
- /package/templates/web/node_modules/.vite/deps/{chunk-Z4XTF2JV.js.map → chunk-NDUAOA7M.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
{"version":3,"file":"image.service.js","sourceRoot":"","sources":["../../../src/modules/image/image.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,59 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var BackendVersionProbe_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.BackendVersionProbe = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const fs = require("fs");
|
|
13
|
+
const path = require("path");
|
|
14
|
+
let BackendVersionProbe = BackendVersionProbe_1 = class BackendVersionProbe {
|
|
15
|
+
logger = new common_1.Logger(BackendVersionProbe_1.name);
|
|
16
|
+
key = 'backend-version';
|
|
17
|
+
name = '后台版本';
|
|
18
|
+
kind = 'status';
|
|
19
|
+
async collect() {
|
|
20
|
+
const collectedAt = new Date().toISOString();
|
|
21
|
+
const pkgPath = path.join(process.cwd(), 'package.json');
|
|
22
|
+
const statusResult = (healthy, summary, version) => ({
|
|
23
|
+
key: this.key,
|
|
24
|
+
name: this.name,
|
|
25
|
+
kind: 'status',
|
|
26
|
+
healthy,
|
|
27
|
+
summary,
|
|
28
|
+
detail: {
|
|
29
|
+
kind: 'status',
|
|
30
|
+
items: [
|
|
31
|
+
{ label: '版本号', value: version },
|
|
32
|
+
{ label: '来源', value: pkgPath }
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
collectedAt
|
|
36
|
+
});
|
|
37
|
+
if (!fs.existsSync(pkgPath)) {
|
|
38
|
+
return statusResult('unknown', '未找到 package.json', '-');
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const raw = fs.readFileSync(pkgPath, 'utf8');
|
|
42
|
+
const pkg = JSON.parse(raw);
|
|
43
|
+
const version = typeof pkg.version === 'string' && pkg.version ? pkg.version : '';
|
|
44
|
+
if (!version) {
|
|
45
|
+
return statusResult('unknown', 'package.json 缺少 version 字段', '-');
|
|
46
|
+
}
|
|
47
|
+
return statusResult(true, `当前后台版本 ${version}`, version);
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
this.logger.warn(`读取 package.json 失败: ${e.message}`);
|
|
51
|
+
return statusResult('unknown', `读取版本失败: ${e.message}`, '-');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
exports.BackendVersionProbe = BackendVersionProbe;
|
|
56
|
+
exports.BackendVersionProbe = BackendVersionProbe = BackendVersionProbe_1 = __decorate([
|
|
57
|
+
(0, common_1.Injectable)()
|
|
58
|
+
], BackendVersionProbe);
|
|
2
59
|
//# sourceMappingURL=backend-version.probe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
{"version":3,"file":"backend-version.probe.js","sourceRoot":"","sources":["../../../src/modules/ops/backend-version.probe.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAoD;AACpD,yBAAyB;AACzB,6BAA6B;AAmBtB,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IACb,MAAM,GAAG,IAAI,eAAM,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;IACtD,GAAG,GAAG,iBAAiB,CAAC;IACxB,IAAI,GAAG,MAAM,CAAC;IACd,IAAI,GAAG,QAAiB,CAAC;IAElC,KAAK,CAAC,OAAO;QACX,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;QAEzD,MAAM,YAAY,GAAG,CACnB,OAA4B,EAC5B,OAAe,EACf,OAAe,EACC,EAAE,CAAC,CAAC;YACpB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,OAAO;YACP,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;oBAChC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;iBAChC;aACF;YACD,WAAW;SACZ,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,YAAY,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,YAAY,CAAC,SAAS,EAAE,4BAA4B,EAAE,GAAG,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,YAAY,CAAC,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAwB,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,OAAO,YAAY,CAAC,SAAS,EAAE,WAAY,CAAW,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;CACF,CAAA;AA/CY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;GACA,mBAAmB,CA+C/B"}
|
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OPS_PROBE = void 0;
|
|
4
|
+
exports.OPS_PROBE = Symbol('OPS_PROBE');
|
|
2
5
|
//# sourceMappingURL=ops-probe.interface.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
{"version":3,"file":"ops-probe.interface.js","sourceRoot":"","sources":["../../../src/modules/ops/ops-probe.interface.ts"],"names":[],"mappings":";;;AAkBa,QAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC"}
|
|
@@ -1,2 +1,53 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.OpsController = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
18
|
+
const ops_service_1 = require("./ops.service");
|
|
19
|
+
const jwt_auth_guard_1 = require("../auth/jwt-auth.guard");
|
|
20
|
+
let OpsController = class OpsController {
|
|
21
|
+
service;
|
|
22
|
+
constructor(service) {
|
|
23
|
+
this.service = service;
|
|
24
|
+
}
|
|
25
|
+
overview() {
|
|
26
|
+
return this.service.overview();
|
|
27
|
+
}
|
|
28
|
+
one(key) {
|
|
29
|
+
return this.service.one(key);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
exports.OpsController = OpsController;
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, common_1.Get)('overview'),
|
|
35
|
+
__metadata("design:type", Function),
|
|
36
|
+
__metadata("design:paramtypes", []),
|
|
37
|
+
__metadata("design:returntype", void 0)
|
|
38
|
+
], OpsController.prototype, "overview", null);
|
|
39
|
+
__decorate([
|
|
40
|
+
(0, common_1.Get)('probe/:key'),
|
|
41
|
+
__param(0, (0, common_1.Param)('key')),
|
|
42
|
+
__metadata("design:type", Function),
|
|
43
|
+
__metadata("design:paramtypes", [String]),
|
|
44
|
+
__metadata("design:returntype", void 0)
|
|
45
|
+
], OpsController.prototype, "one", null);
|
|
46
|
+
exports.OpsController = OpsController = __decorate([
|
|
47
|
+
(0, swagger_1.ApiTags)('ops 运维监控'),
|
|
48
|
+
(0, common_1.Controller)('ops'),
|
|
49
|
+
(0, common_1.UseGuards)(jwt_auth_guard_1.JwtAuthGuard),
|
|
50
|
+
(0, swagger_1.ApiBearerAuth)(),
|
|
51
|
+
__metadata("design:paramtypes", [ops_service_1.OpsService])
|
|
52
|
+
], OpsController);
|
|
2
53
|
//# sourceMappingURL=ops.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
{"version":3,"file":"ops.controller.js","sourceRoot":"","sources":["../../../src/modules/ops/ops.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAmE;AACnE,6CAAyD;AACzD,+CAA2C;AAC3C,2DAAsD;AAe/C,IAAM,aAAa,GAAnB,MAAM,aAAa;IACK;IAA7B,YAA6B,OAAmB;QAAnB,YAAO,GAAP,OAAO,CAAY;IAAG,CAAC;IAIpD,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAID,GAAG,CAAe,GAAW;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;CACF,CAAA;AAdY,sCAAa;AAKxB;IADC,IAAA,YAAG,EAAC,UAAU,CAAC;;;;6CAGf;AAID;IADC,IAAA,YAAG,EAAC,YAAY,CAAC;IACb,WAAA,IAAA,cAAK,EAAC,KAAK,CAAC,CAAA;;;;wCAEhB;wBAbU,aAAa;IAJzB,IAAA,iBAAO,EAAC,UAAU,CAAC;IACnB,IAAA,mBAAU,EAAC,KAAK,CAAC;IACjB,IAAA,kBAAS,EAAC,6BAAY,CAAC;IACvB,IAAA,uBAAa,GAAE;qCAEwB,wBAAU;GADrC,aAAa,CAczB"}
|
|
@@ -1,2 +1,40 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.OpsModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const ops_service_1 = require("./ops.service");
|
|
12
|
+
const ops_controller_1 = require("./ops.controller");
|
|
13
|
+
const version_controller_1 = require("./version.controller");
|
|
14
|
+
const ops_probe_interface_1 = require("./ops-probe.interface");
|
|
15
|
+
const sqlite_backup_probe_1 = require("./sqlite-backup.probe");
|
|
16
|
+
const sqlite_backup_list_probe_1 = require("./sqlite-backup-list.probe");
|
|
17
|
+
const sqlite_backup_log_probe_1 = require("./sqlite-backup-log.probe");
|
|
18
|
+
const backend_version_probe_1 = require("./backend-version.probe");
|
|
19
|
+
let OpsModule = class OpsModule {
|
|
20
|
+
};
|
|
21
|
+
exports.OpsModule = OpsModule;
|
|
22
|
+
exports.OpsModule = OpsModule = __decorate([
|
|
23
|
+
(0, common_1.Module)({
|
|
24
|
+
providers: [
|
|
25
|
+
ops_service_1.OpsService,
|
|
26
|
+
sqlite_backup_probe_1.SqliteBackupProbe,
|
|
27
|
+
sqlite_backup_list_probe_1.SqliteBackupListProbe,
|
|
28
|
+
sqlite_backup_log_probe_1.SqliteBackupLogProbe,
|
|
29
|
+
backend_version_probe_1.BackendVersionProbe,
|
|
30
|
+
{
|
|
31
|
+
provide: ops_probe_interface_1.OPS_PROBE,
|
|
32
|
+
useFactory: (...probes) => probes,
|
|
33
|
+
inject: [sqlite_backup_probe_1.SqliteBackupProbe, sqlite_backup_list_probe_1.SqliteBackupListProbe, sqlite_backup_log_probe_1.SqliteBackupLogProbe, backend_version_probe_1.BackendVersionProbe]
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
controllers: [ops_controller_1.OpsController, version_controller_1.VersionController],
|
|
37
|
+
exports: [ops_service_1.OpsService]
|
|
38
|
+
})
|
|
39
|
+
], OpsModule);
|
|
2
40
|
//# sourceMappingURL=ops.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
{"version":3,"file":"ops.module.js","sourceRoot":"","sources":["../../../src/modules/ops/ops.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,+CAA2C;AAC3C,qDAAiD;AACjD,6DAAyD;AACzD,+DAAiE;AACjE,+DAA0D;AAC1D,yEAAmE;AACnE,uEAAiE;AACjE,mEAA8D;AAyCvD,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IAtBrB,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT,wBAAU;YAEV,uCAAiB;YACjB,gDAAqB;YACrB,8CAAoB;YACpB,2CAAmB;YAMnB;gBACE,OAAO,EAAE,+BAAS;gBAClB,UAAU,EAAE,CAAC,GAAG,MAAkB,EAAE,EAAE,CAAC,MAAM;gBAC7C,MAAM,EAAE,CAAC,uCAAiB,EAAE,gDAAqB,EAAE,8CAAoB,EAAE,2CAAmB,CAAC;aAC9F;SACF;QACD,WAAW,EAAE,CAAC,8BAAa,EAAE,sCAAiB,CAAC;QAC/C,OAAO,EAAE,CAAC,wBAAU,CAAC;KACtB,CAAC;GACW,SAAS,CAAG"}
|
|
@@ -1,2 +1,73 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var OpsService_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.OpsService = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const ops_probe_interface_1 = require("./ops-probe.interface");
|
|
19
|
+
let OpsService = OpsService_1 = class OpsService {
|
|
20
|
+
probes;
|
|
21
|
+
logger = new common_1.Logger(OpsService_1.name);
|
|
22
|
+
constructor(probes) {
|
|
23
|
+
this.probes = probes;
|
|
24
|
+
}
|
|
25
|
+
async overview() {
|
|
26
|
+
const results = await Promise.all(this.probes.map(async (probe) => {
|
|
27
|
+
try {
|
|
28
|
+
return await probe.collect();
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
this.logger.warn(`探针 ${probe.key} 采集失败: ${e.message}`);
|
|
32
|
+
return {
|
|
33
|
+
key: probe.key,
|
|
34
|
+
name: probe.name,
|
|
35
|
+
kind: probe.kind,
|
|
36
|
+
healthy: 'unknown',
|
|
37
|
+
summary: `探针异常: ${e.message}`,
|
|
38
|
+
detail: { kind: 'status', items: [] },
|
|
39
|
+
collectedAt: new Date().toISOString()
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}));
|
|
43
|
+
const order = { status: 0, table: 1, log: 2 };
|
|
44
|
+
return results.sort((a, b) => (order[a.kind] - order[b.kind]) || a.key.localeCompare(b.key));
|
|
45
|
+
}
|
|
46
|
+
async one(key) {
|
|
47
|
+
const probe = this.probes.find((p) => p.key === key);
|
|
48
|
+
if (!probe)
|
|
49
|
+
return null;
|
|
50
|
+
try {
|
|
51
|
+
return await probe.collect();
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
this.logger.warn(`探针 ${probe.key} 采集失败: ${e.message}`);
|
|
55
|
+
return {
|
|
56
|
+
key: probe.key,
|
|
57
|
+
name: probe.name,
|
|
58
|
+
kind: probe.kind,
|
|
59
|
+
healthy: 'unknown',
|
|
60
|
+
summary: `探针异常: ${e.message}`,
|
|
61
|
+
detail: { kind: 'status', items: [] },
|
|
62
|
+
collectedAt: new Date().toISOString()
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
exports.OpsService = OpsService;
|
|
68
|
+
exports.OpsService = OpsService = OpsService_1 = __decorate([
|
|
69
|
+
(0, common_1.Injectable)(),
|
|
70
|
+
__param(0, (0, common_1.Inject)(ops_probe_interface_1.OPS_PROBE)),
|
|
71
|
+
__metadata("design:paramtypes", [Array])
|
|
72
|
+
], OpsService);
|
|
2
73
|
//# sourceMappingURL=ops.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
{"version":3,"file":"ops.service.js","sourceRoot":"","sources":["../../../src/modules/ops/ops.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA4D;AAC5D,+DAAsF;AAY/E,IAAM,UAAU,kBAAhB,MAAM,UAAU;IAG2B;IAF/B,MAAM,GAAG,IAAI,eAAM,CAAC,YAAU,CAAC,IAAI,CAAC,CAAC;IAEtD,YAAgD,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAGtE,KAAK,CAAC,QAAQ;QACZ,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9B,IAAI,CAAC;gBACH,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;YAC/B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,UAAW,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClE,OAAO;oBACL,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,SAAkB;oBAC3B,OAAO,EAAE,SAAU,CAAW,CAAC,OAAO,EAAE;oBACxC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAW;oBAC9C,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACb,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,MAAM,KAAK,GAA2B,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACtE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/F,CAAC;IAGD,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,CAAC;YACH,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,UAAW,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YAClE,OAAO;gBACL,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,SAAkB;gBAC3B,OAAO,EAAE,SAAU,CAAW,CAAC,OAAO,EAAE;gBACxC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAW;gBAC9C,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACtC,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAA;AAjDY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;IAIE,WAAA,IAAA,eAAM,EAAC,+BAAS,CAAC,CAAA;;GAHnB,UAAU,CAiDtB"}
|
|
@@ -1,2 +1,106 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SqliteBackupListProbe = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const config_1 = require("@nestjs/config");
|
|
15
|
+
const fs = require("fs");
|
|
16
|
+
const path = require("path");
|
|
17
|
+
let SqliteBackupListProbe = class SqliteBackupListProbe {
|
|
18
|
+
config;
|
|
19
|
+
key = 'sqlite-backup-list';
|
|
20
|
+
name = '备份历史';
|
|
21
|
+
kind = 'table';
|
|
22
|
+
constructor(config) {
|
|
23
|
+
this.config = config;
|
|
24
|
+
}
|
|
25
|
+
resolveDataDir() {
|
|
26
|
+
const dir = this.config.get('database').dir;
|
|
27
|
+
return path.isAbsolute(dir) ? dir : path.resolve(process.cwd(), dir);
|
|
28
|
+
}
|
|
29
|
+
async collect() {
|
|
30
|
+
const env = process.env.NODE_ENV === 'prod' ? 'prod' : 'develop';
|
|
31
|
+
const dataDir = this.resolveDataDir();
|
|
32
|
+
const backupDir = path.join(dataDir, 'backup');
|
|
33
|
+
const collectedAt = new Date().toISOString();
|
|
34
|
+
const base = {
|
|
35
|
+
key: this.key,
|
|
36
|
+
name: this.name,
|
|
37
|
+
kind: 'table',
|
|
38
|
+
healthy: 'unknown',
|
|
39
|
+
summary: '',
|
|
40
|
+
detail: { kind: 'table', columns: [], rows: [] },
|
|
41
|
+
collectedAt
|
|
42
|
+
};
|
|
43
|
+
if (!fs.existsSync(backupDir)) {
|
|
44
|
+
base.summary = '备份目录不存在';
|
|
45
|
+
return base;
|
|
46
|
+
}
|
|
47
|
+
let entries = [];
|
|
48
|
+
try {
|
|
49
|
+
entries = fs
|
|
50
|
+
.readdirSync(backupDir, { withFileTypes: true })
|
|
51
|
+
.filter((d) => d.isDirectory() && d.name.startsWith(`template.${env}.`))
|
|
52
|
+
.map((d) => d.name)
|
|
53
|
+
.sort()
|
|
54
|
+
.reverse();
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
base.summary = `读取备份目录失败: ${e.message}`;
|
|
58
|
+
return base;
|
|
59
|
+
}
|
|
60
|
+
const baseName = (env === 'prod' ? 'template.prod' : 'template.develop') + '.sqlite';
|
|
61
|
+
const rows = entries.map((dirName) => {
|
|
62
|
+
const dirPath = path.join(backupDir, dirName);
|
|
63
|
+
const stat = fs.statSync(dirPath);
|
|
64
|
+
const mainFile = path.join(dirPath, baseName);
|
|
65
|
+
let mainBytes = 0;
|
|
66
|
+
try {
|
|
67
|
+
mainBytes = fs.statSync(mainFile).size;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
}
|
|
71
|
+
const hasWal = fs.existsSync(path.join(dirPath, `${baseName}-wal`));
|
|
72
|
+
const hasShm = fs.existsSync(path.join(dirPath, `${baseName}-shm`));
|
|
73
|
+
const tsMatch = dirName.match(/(\d{4})(\d{2})(\d{2})-(\d{2})(\d{2})(\d{2})$/);
|
|
74
|
+
const tsStr = tsMatch
|
|
75
|
+
? `${tsMatch[1]}-${tsMatch[2]}-${tsMatch[3]} ${tsMatch[4]}:${tsMatch[5]}:${tsMatch[6]}`
|
|
76
|
+
: dirName;
|
|
77
|
+
return {
|
|
78
|
+
ts: tsStr,
|
|
79
|
+
dirName,
|
|
80
|
+
mainBytes,
|
|
81
|
+
wal: hasWal ? '有' : '无',
|
|
82
|
+
shm: hasShm ? '有' : '无',
|
|
83
|
+
mtime: stat.mtime.toISOString()
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
base.summary = rows.length ? `共 ${rows.length} 份备份` : '暂无备份';
|
|
87
|
+
base.healthy = rows.length > 0;
|
|
88
|
+
base.detail = {
|
|
89
|
+
kind: 'table',
|
|
90
|
+
columns: [
|
|
91
|
+
{ key: 'ts', title: '备份时间' },
|
|
92
|
+
{ key: 'mainBytes', title: '主库大小' },
|
|
93
|
+
{ key: 'wal', title: 'WAL' },
|
|
94
|
+
{ key: 'shm', title: 'SHM' }
|
|
95
|
+
],
|
|
96
|
+
rows
|
|
97
|
+
};
|
|
98
|
+
return base;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
exports.SqliteBackupListProbe = SqliteBackupListProbe;
|
|
102
|
+
exports.SqliteBackupListProbe = SqliteBackupListProbe = __decorate([
|
|
103
|
+
(0, common_1.Injectable)(),
|
|
104
|
+
__metadata("design:paramtypes", [config_1.ConfigService])
|
|
105
|
+
], SqliteBackupListProbe);
|
|
2
106
|
//# sourceMappingURL=sqlite-backup-list.probe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
{"version":3,"file":"sqlite-backup-list.probe.js","sourceRoot":"","sources":["../../../src/modules/ops/sqlite-backup-list.probe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,68 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SqliteBackupLogProbe = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const config_1 = require("@nestjs/config");
|
|
15
|
+
const fs = require("fs");
|
|
16
|
+
const path = require("path");
|
|
17
|
+
let SqliteBackupLogProbe = class SqliteBackupLogProbe {
|
|
18
|
+
config;
|
|
19
|
+
key = 'sqlite-backup-log';
|
|
20
|
+
name = '备份日志';
|
|
21
|
+
kind = 'log';
|
|
22
|
+
MAX_LINES = 50;
|
|
23
|
+
constructor(config) {
|
|
24
|
+
this.config = config;
|
|
25
|
+
}
|
|
26
|
+
resolveDataDir() {
|
|
27
|
+
const dir = this.config.get('database').dir;
|
|
28
|
+
return path.isAbsolute(dir) ? dir : path.resolve(process.cwd(), dir);
|
|
29
|
+
}
|
|
30
|
+
async collect() {
|
|
31
|
+
const dataDir = this.resolveDataDir();
|
|
32
|
+
const logFile = path.join(dataDir, 'logs', 'sqlite-backup.log');
|
|
33
|
+
const collectedAt = new Date().toISOString();
|
|
34
|
+
const base = {
|
|
35
|
+
key: this.key,
|
|
36
|
+
name: this.name,
|
|
37
|
+
kind: 'log',
|
|
38
|
+
healthy: 'unknown',
|
|
39
|
+
summary: '',
|
|
40
|
+
detail: { kind: 'log', lines: [] },
|
|
41
|
+
collectedAt
|
|
42
|
+
};
|
|
43
|
+
if (!fs.existsSync(logFile)) {
|
|
44
|
+
base.summary = '日志文件不存在(cron 未跑过或未配日志重定向)';
|
|
45
|
+
return base;
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const content = fs.readFileSync(logFile, 'utf8');
|
|
49
|
+
const allLines = content.split('\n').filter((l) => l.length > 0 && !/测试|test/i.test(l));
|
|
50
|
+
const tail = allLines.slice(-this.MAX_LINES);
|
|
51
|
+
base.summary = `最近 ${tail.length} 行`;
|
|
52
|
+
const hasSuccess = tail.some((l) => l.includes('✅'));
|
|
53
|
+
const hasFail = tail.some((l) => l.includes('❌'));
|
|
54
|
+
base.healthy = hasSuccess && !hasFail ? true : hasFail ? false : 'unknown';
|
|
55
|
+
base.detail = { kind: 'log', lines: tail };
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
base.summary = `读取日志失败: ${e.message}`;
|
|
59
|
+
}
|
|
60
|
+
return base;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
exports.SqliteBackupLogProbe = SqliteBackupLogProbe;
|
|
64
|
+
exports.SqliteBackupLogProbe = SqliteBackupLogProbe = __decorate([
|
|
65
|
+
(0, common_1.Injectable)(),
|
|
66
|
+
__metadata("design:paramtypes", [config_1.ConfigService])
|
|
67
|
+
], SqliteBackupLogProbe);
|
|
2
68
|
//# sourceMappingURL=sqlite-backup-log.probe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
{"version":3,"file":"sqlite-backup-log.probe.js","sourceRoot":"","sources":["../../../src/modules/ops/sqlite-backup-log.probe.ts"],"names":[],"mappings":"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"}
|