downcity 1.1.279 → 1.1.284
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/bin/federation/admin/commands/dashboard.d.ts +15 -0
- package/bin/federation/admin/commands/dashboard.d.ts.map +1 -0
- package/bin/federation/admin/commands/dashboard.js +117 -0
- package/bin/federation/admin/commands/dashboard.js.map +1 -0
- package/bin/federation/admin/dashboard/dashboard-data.d.ts +14 -0
- package/bin/federation/admin/dashboard/dashboard-data.d.ts.map +1 -0
- package/bin/federation/admin/dashboard/dashboard-data.js +76 -0
- package/bin/federation/admin/dashboard/dashboard-data.js.map +1 -0
- package/bin/federation/admin/dashboard/dashboard-format.d.ts +22 -0
- package/bin/federation/admin/dashboard/dashboard-format.d.ts.map +1 -0
- package/bin/federation/admin/dashboard/dashboard-format.js +209 -0
- package/bin/federation/admin/dashboard/dashboard-format.js.map +1 -0
- package/bin/federation/admin/dashboard/dashboard-metrics.d.ts +13 -0
- package/bin/federation/admin/dashboard/dashboard-metrics.d.ts.map +1 -0
- package/bin/federation/admin/dashboard/dashboard-metrics.js +256 -0
- package/bin/federation/admin/dashboard/dashboard-metrics.js.map +1 -0
- package/bin/federation/admin/loop.d.ts.map +1 -1
- package/bin/federation/admin/loop.js +13 -0
- package/bin/federation/admin/loop.js.map +1 -1
- package/bin/federation/types/AdminDashboard.d.ts +238 -0
- package/bin/federation/types/AdminDashboard.d.ts.map +1 -0
- package/bin/federation/types/AdminDashboard.js +9 -0
- package/bin/federation/types/AdminDashboard.js.map +1 -0
- package/package.json +7 -7
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin 用户系统 Dashboard 命令。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - 这是 fed CLI 自己的运营视图,直接读取现有 admin 数据并在 CLI 内计算。
|
|
6
|
+
* - 不引入 Dashboard adapter,也不要求 Federation 后端提供跨 service 聚合 API。
|
|
7
|
+
* - 命令层只负责 TUI 交互,数据读取、指标计算和展示格式分别放在 dashboard 模块中。
|
|
8
|
+
*/
|
|
9
|
+
import { City } from "@downcity/city";
|
|
10
|
+
import type { admin_tui_runtime } from "../../types/AdminTui.js";
|
|
11
|
+
/**
|
|
12
|
+
* 打开用户系统 Dashboard。
|
|
13
|
+
*/
|
|
14
|
+
export declare function manageDashboard(a: City, _base_url: string, runtime: admin_tui_runtime): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=dashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../../src/federation/admin/commands/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAMtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGxE;;GAEG;AACH,wBAAsB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkD3G"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin 用户系统 Dashboard 命令。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - 这是 fed CLI 自己的运营视图,直接读取现有 admin 数据并在 CLI 内计算。
|
|
6
|
+
* - 不引入 Dashboard adapter,也不要求 Federation 后端提供跨 service 聚合 API。
|
|
7
|
+
* - 命令层只负责 TUI 交互,数据读取、指标计算和展示格式分别放在 dashboard 模块中。
|
|
8
|
+
*/
|
|
9
|
+
import { fetch_dashboard_raw_data } from "../dashboard/dashboard-data.js";
|
|
10
|
+
import { dashboard_rows, dashboard_view_title, range_label } from "../dashboard/dashboard-format.js";
|
|
11
|
+
import { build_dashboard_snapshot } from "../dashboard/dashboard-metrics.js";
|
|
12
|
+
import { adminErrorMessage, rethrowAdminAuthError } from "../auth-error.js";
|
|
13
|
+
import { t } from "../../../shared/CliLocale.js";
|
|
14
|
+
/**
|
|
15
|
+
* 打开用户系统 Dashboard。
|
|
16
|
+
*/
|
|
17
|
+
export async function manageDashboard(a, _base_url, runtime) {
|
|
18
|
+
let raw_data;
|
|
19
|
+
let snapshot;
|
|
20
|
+
let range = "30d";
|
|
21
|
+
while (true) {
|
|
22
|
+
const action = await runtime.select(t({ zh: "用户系统 Dashboard", en: "User system dashboard" }), [
|
|
23
|
+
{ label: t({ zh: `概览 (${range_label(range)})`, en: `Overview (${range_label(range)})` }), value: "overview" },
|
|
24
|
+
{ label: t({ zh: "用户", en: "Users" }), value: "users" },
|
|
25
|
+
{ label: t({ zh: "活跃", en: "Activity" }), value: "activity" },
|
|
26
|
+
{ label: t({ zh: "付费", en: "Payment" }), value: "payment" },
|
|
27
|
+
{ label: t({ zh: "收入", en: "Revenue" }), value: "revenue" },
|
|
28
|
+
{ label: t({ zh: "用量", en: "Usage" }), value: "usage" },
|
|
29
|
+
{ label: t({ zh: "健康", en: "Health" }), value: "health" },
|
|
30
|
+
{ label: t({ zh: "服务状态", en: "Service status" }), value: "availability" },
|
|
31
|
+
{ label: t({ zh: "操作", en: "Actions" }), value: "__section_actions__", disabled: true },
|
|
32
|
+
{ label: t({ zh: `切换范围:${range_label(range)}`, en: `Range: ${range_label(range)}` }), value: "range" },
|
|
33
|
+
{ label: t({ zh: "刷新", en: "Refresh" }), value: "refresh" },
|
|
34
|
+
{ label: t({ zh: "导航", en: "Navigation" }), value: "__section_navigation__", disabled: true },
|
|
35
|
+
{ label: t({ zh: "返回", en: "Back" }), value: "back" },
|
|
36
|
+
]);
|
|
37
|
+
if (!action || action === "back")
|
|
38
|
+
return;
|
|
39
|
+
try {
|
|
40
|
+
if (action === "range") {
|
|
41
|
+
const next_range = await select_range(runtime, range);
|
|
42
|
+
if (next_range) {
|
|
43
|
+
range = next_range;
|
|
44
|
+
snapshot = raw_data ? build_dashboard_snapshot(raw_data, range) : undefined;
|
|
45
|
+
if (snapshot)
|
|
46
|
+
await show_dashboard_view(runtime, "overview", snapshot);
|
|
47
|
+
}
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (action === "refresh" || !raw_data || !snapshot) {
|
|
51
|
+
raw_data = await runtime.with_loading(t({ zh: "读取用户系统 Dashboard", en: "Loading user system dashboard" }), async () => await fetch_dashboard_raw_data(a));
|
|
52
|
+
snapshot = build_dashboard_snapshot(raw_data, range);
|
|
53
|
+
}
|
|
54
|
+
const view = action === "refresh" ? "overview" : action;
|
|
55
|
+
await show_dashboard_view(runtime, view, snapshot);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
rethrowAdminAuthError(error);
|
|
59
|
+
await runtime.show_message("error", adminErrorMessage(error));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 选择 Dashboard 时间范围。
|
|
65
|
+
*/
|
|
66
|
+
async function select_range(runtime, current_range) {
|
|
67
|
+
const action = await runtime.select(t({ zh: "选择统计范围", en: "Select range" }), [
|
|
68
|
+
range_option("today", current_range),
|
|
69
|
+
range_option("7d", current_range),
|
|
70
|
+
range_option("30d", current_range),
|
|
71
|
+
range_option("all", current_range),
|
|
72
|
+
{ label: t({ zh: "导航", en: "Navigation" }), value: "__section_navigation__", disabled: true },
|
|
73
|
+
{ label: t({ zh: "返回", en: "Back" }), value: "back" },
|
|
74
|
+
]);
|
|
75
|
+
if (!action || action === "back")
|
|
76
|
+
return undefined;
|
|
77
|
+
return action;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 构建范围选项。
|
|
81
|
+
*/
|
|
82
|
+
function range_option(range, current_range) {
|
|
83
|
+
const current_mark = range === current_range ? t({ zh: "(当前)", en: " (current)" }) : "";
|
|
84
|
+
return {
|
|
85
|
+
label: `${range_label(range)}${current_mark}`,
|
|
86
|
+
value: range,
|
|
87
|
+
hint: range_hint(range),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 范围说明。
|
|
92
|
+
*/
|
|
93
|
+
function range_hint(range) {
|
|
94
|
+
if (range === "today")
|
|
95
|
+
return t({ zh: "从本地时间今日 00:00 开始统计。", en: "Count from local midnight today." });
|
|
96
|
+
if (range === "7d")
|
|
97
|
+
return t({ zh: "统计最近 7 天窗口。", en: "Count the latest 7-day window." });
|
|
98
|
+
if (range === "30d")
|
|
99
|
+
return t({ zh: "统计最近 30 天窗口。", en: "Count the latest 30-day window." });
|
|
100
|
+
return t({ zh: "统计已读取的全部数据。", en: "Count all fetched data." });
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 展示 Dashboard 视图。
|
|
104
|
+
*/
|
|
105
|
+
async function show_dashboard_view(runtime, view, snapshot) {
|
|
106
|
+
await runtime.show_table({
|
|
107
|
+
title: dashboard_view_title(view, snapshot.range),
|
|
108
|
+
columns: [
|
|
109
|
+
t({ zh: "分组", en: "Group" }),
|
|
110
|
+
t({ zh: "指标", en: "Metric" }),
|
|
111
|
+
t({ zh: "值", en: "Value" }),
|
|
112
|
+
],
|
|
113
|
+
rows: dashboard_rows(view, snapshot),
|
|
114
|
+
empty_message: t({ zh: "暂无 Dashboard 数据。", en: "No dashboard data." }),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../../src/federation/admin/commands/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAC;AACrH,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EAAE,CAAC,EAAE,MAAM,uBAAuB,CAAC;AAI1C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,CAAO,EAAE,SAAiB,EAAE,OAA0B;IAC1F,IAAI,QAAwC,CAAC;IAC7C,IAAI,QAAwC,CAAC;IAC7C,IAAI,KAAK,GAAoB,KAAK,CAAC;IAEnC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,uBAAuB,EAAE,CAAC,EAAE;YAC5F,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,aAAa,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;YAC7G,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE;YACvD,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;YAC7D,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;YAC3D,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;YAC3D,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE;YACvD,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;YACzD,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE;YACzE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE;YACvF,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE;YACtG,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;YAC3D,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC7F,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;SACtD,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO;QAEzC,IAAI,CAAC;YACH,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACvB,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACtD,IAAI,UAAU,EAAE,CAAC;oBACf,KAAK,GAAG,UAAU,CAAC;oBACnB,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC5E,IAAI,QAAQ;wBAAE,MAAM,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;gBACzE,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnD,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CACnC,CAAC,CAAC,EAAE,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,+BAA+B,EAAE,CAAC,EAClE,KAAK,IAAI,EAAE,CAAC,MAAM,wBAAwB,CAAC,CAAC,CAAC,CAC9C,CAAC;gBACF,QAAQ,GAAG,wBAAwB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAwB,CAAC;YAC1E,MAAM,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,OAA0B,EAAE,aAA8B;IACpF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE;QAC3E,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC;QACpC,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC;QACjC,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC;QAClC,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC;QAClC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC7F,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;KACtD,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IACnD,OAAO,MAAyB,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,KAAsB,EAAE,aAA8B;IAC1E,MAAM,YAAY,GAAG,KAAK,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,OAAO;QACL,KAAK,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,YAAY,EAAE;QAC7C,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC;KACxB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,KAAsB;IACxC,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,kCAAkC,EAAE,CAAC,CAAC;IACvG,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,gCAAgC,EAAE,CAAC,CAAC;IAC1F,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,iCAAiC,EAAE,CAAC,CAAC;IAC7F,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,yBAAyB,EAAE,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAAC,OAA0B,EAAE,IAAoB,EAAE,QAA4B;IAC/G,MAAM,OAAO,CAAC,UAAU,CAAC;QACvB,KAAK,EAAE,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC;QACjD,OAAO,EAAE;YACP,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;YAC5B,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;YAC7B,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;SAC5B;QACD,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC;QACpC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC;KACvE,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fed Admin Dashboard 数据读取模块。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - 只读取现有 admin endpoints,不要求后端提供 Dashboard 专用 API。
|
|
6
|
+
* - 每个 endpoint 独立容错,方便 Dashboard 在 service 缺失时仍可展示。
|
|
7
|
+
*/
|
|
8
|
+
import { City } from "@downcity/city";
|
|
9
|
+
import type { dashboard_raw_data } from "../../types/AdminDashboard.js";
|
|
10
|
+
/**
|
|
11
|
+
* 读取 Dashboard 原始数据。
|
|
12
|
+
*/
|
|
13
|
+
export declare function fetch_dashboard_raw_data(a: City): Promise<dashboard_raw_data>;
|
|
14
|
+
//# sourceMappingURL=dashboard-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-data.d.ts","sourceRoot":"","sources":["../../../../src/federation/admin/dashboard/dashboard-data.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EACV,kBAAkB,EAKnB,MAAM,sCAAsC,CAAC;AAE9C;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmCnF"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fed Admin Dashboard 数据读取模块。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - 只读取现有 admin endpoints,不要求后端提供 Dashboard 专用 API。
|
|
6
|
+
* - 每个 endpoint 独立容错,方便 Dashboard 在 service 缺失时仍可展示。
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 读取 Dashboard 原始数据。
|
|
10
|
+
*/
|
|
11
|
+
export async function fetch_dashboard_raw_data(a) {
|
|
12
|
+
const services = create_initial_service_state();
|
|
13
|
+
const accounts_users = await read_endpoint(services, "accounts", "users", async () => (await a.service("accounts").get("users")).items);
|
|
14
|
+
const accounts_sessions = await read_endpoint(services, "accounts", "sessions", async () => (await a.service("accounts").get("sessions")).items);
|
|
15
|
+
const usage_events = await read_endpoint(services, "usage", "events", async () => (await a.service("usage").get("events")).items);
|
|
16
|
+
const balance_users = await read_endpoint(services, "balance", "users", async () => await a.balance.listUsers(200));
|
|
17
|
+
const balance_topups = await read_endpoint(services, "balance", "topups", async () => await a.balance.listTopups({ limit: 200 }));
|
|
18
|
+
const payment_payments = await read_endpoint(services, "payment", "payments", async () => (await a.service("payment").get("payments")).items);
|
|
19
|
+
const payment_events = await read_endpoint(services, "payment", "events", async () => (await a.service("payment").get("events")).items);
|
|
20
|
+
return {
|
|
21
|
+
fetched_at: new Date().toISOString(),
|
|
22
|
+
services,
|
|
23
|
+
accounts_users,
|
|
24
|
+
accounts_sessions,
|
|
25
|
+
usage_events,
|
|
26
|
+
balance_users,
|
|
27
|
+
balance_topups,
|
|
28
|
+
payment_payments,
|
|
29
|
+
payment_events,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 创建初始服务状态。
|
|
34
|
+
*/
|
|
35
|
+
function create_initial_service_state() {
|
|
36
|
+
return {
|
|
37
|
+
accounts: create_service_state(),
|
|
38
|
+
usage: create_service_state(),
|
|
39
|
+
balance: create_service_state(),
|
|
40
|
+
payment: create_service_state(),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 创建单个服务状态。
|
|
45
|
+
*/
|
|
46
|
+
function create_service_state() {
|
|
47
|
+
return {
|
|
48
|
+
status: "missing",
|
|
49
|
+
fetched_endpoints: [],
|
|
50
|
+
message: "",
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 读取单个 endpoint。
|
|
55
|
+
*/
|
|
56
|
+
async function read_endpoint(services, service_id, endpoint, task) {
|
|
57
|
+
const state = services[service_id];
|
|
58
|
+
try {
|
|
59
|
+
const rows = await task();
|
|
60
|
+
state.fetched_endpoints.push(endpoint);
|
|
61
|
+
state.status = state.status === "error" ? "partial" : "ready";
|
|
62
|
+
return rows;
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
state.status = state.fetched_endpoints.length > 0 ? "partial" : "missing";
|
|
66
|
+
state.message = read_error_message(error);
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 读取错误信息。
|
|
72
|
+
*/
|
|
73
|
+
function read_error_message(error) {
|
|
74
|
+
return error instanceof Error ? error.message : String(error);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=dashboard-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-data.js","sourceRoot":"","sources":["../../../../src/federation/admin/dashboard/dashboard-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fed Admin Dashboard 展示格式化模块。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - 这里只负责把 metrics 转为 TUI table rows。
|
|
6
|
+
* - 业务计算不放在这里,避免展示层和指标口径耦合。
|
|
7
|
+
*/
|
|
8
|
+
import type { admin_tui_table_row } from "../../types/AdminTui.js";
|
|
9
|
+
import type { dashboard_range, dashboard_snapshot, dashboard_view } from "../../types/AdminDashboard.js";
|
|
10
|
+
/**
|
|
11
|
+
* 视图标题。
|
|
12
|
+
*/
|
|
13
|
+
export declare function dashboard_view_title(view: dashboard_view, range: dashboard_range): string;
|
|
14
|
+
/**
|
|
15
|
+
* range 展示文本。
|
|
16
|
+
*/
|
|
17
|
+
export declare function range_label(range: dashboard_range): string;
|
|
18
|
+
/**
|
|
19
|
+
* 视图行。
|
|
20
|
+
*/
|
|
21
|
+
export declare function dashboard_rows(view: dashboard_view, snapshot: dashboard_snapshot): admin_tui_table_row[];
|
|
22
|
+
//# sourceMappingURL=dashboard-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-format.d.ts","sourceRoot":"","sources":["../../../../src/federation/admin/dashboard/dashboard-format.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAEV,eAAe,EACf,kBAAkB,EAClB,cAAc,EACf,MAAM,sCAAsC,CAAC;AAE9C;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM,CAUzF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAK1D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,GAAG,mBAAmB,EAAE,CASxG"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fed Admin Dashboard 展示格式化模块。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - 这里只负责把 metrics 转为 TUI table rows。
|
|
6
|
+
* - 业务计算不放在这里,避免展示层和指标口径耦合。
|
|
7
|
+
*/
|
|
8
|
+
import { t } from "../../../shared/CliLocale.js";
|
|
9
|
+
/**
|
|
10
|
+
* 视图标题。
|
|
11
|
+
*/
|
|
12
|
+
export function dashboard_view_title(view, range) {
|
|
13
|
+
const suffix = ` · ${range_label(range)}`;
|
|
14
|
+
if (view === "overview")
|
|
15
|
+
return t({ zh: `用户系统 Dashboard${suffix}`, en: `User system dashboard${suffix}` });
|
|
16
|
+
if (view === "users")
|
|
17
|
+
return t({ zh: `用户${suffix}`, en: `Users${suffix}` });
|
|
18
|
+
if (view === "activity")
|
|
19
|
+
return t({ zh: `活跃${suffix}`, en: `Activity${suffix}` });
|
|
20
|
+
if (view === "payment")
|
|
21
|
+
return t({ zh: `付费${suffix}`, en: `Payment${suffix}` });
|
|
22
|
+
if (view === "revenue")
|
|
23
|
+
return t({ zh: `收入${suffix}`, en: `Revenue${suffix}` });
|
|
24
|
+
if (view === "usage")
|
|
25
|
+
return t({ zh: `用量${suffix}`, en: `Usage${suffix}` });
|
|
26
|
+
if (view === "health")
|
|
27
|
+
return t({ zh: `健康${suffix}`, en: `Health${suffix}` });
|
|
28
|
+
return t({ zh: "服务状态", en: "Service status" });
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* range 展示文本。
|
|
32
|
+
*/
|
|
33
|
+
export function range_label(range) {
|
|
34
|
+
if (range === "today")
|
|
35
|
+
return t({ zh: "今日", en: "Today" });
|
|
36
|
+
if (range === "7d")
|
|
37
|
+
return t({ zh: "7 天", en: "7d" });
|
|
38
|
+
if (range === "30d")
|
|
39
|
+
return t({ zh: "30 天", en: "30d" });
|
|
40
|
+
return t({ zh: "全部", en: "All" });
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 视图行。
|
|
44
|
+
*/
|
|
45
|
+
export function dashboard_rows(view, snapshot) {
|
|
46
|
+
if (view === "overview")
|
|
47
|
+
return overview_rows(snapshot);
|
|
48
|
+
if (view === "users")
|
|
49
|
+
return user_rows(snapshot);
|
|
50
|
+
if (view === "activity")
|
|
51
|
+
return activity_rows(snapshot);
|
|
52
|
+
if (view === "payment")
|
|
53
|
+
return payment_rows(snapshot);
|
|
54
|
+
if (view === "revenue")
|
|
55
|
+
return revenue_rows(snapshot);
|
|
56
|
+
if (view === "usage")
|
|
57
|
+
return usage_rows(snapshot);
|
|
58
|
+
if (view === "health")
|
|
59
|
+
return health_rows(snapshot);
|
|
60
|
+
return availability_rows(snapshot);
|
|
61
|
+
}
|
|
62
|
+
function overview_rows(snapshot) {
|
|
63
|
+
return [
|
|
64
|
+
row(t({ zh: "用户", en: "Users" }), t({ zh: "注册用户", en: "Registered users" }), format_number(snapshot.users.total_registered)),
|
|
65
|
+
row(t({ zh: "用户", en: "Users" }), t({ zh: "Range 新增", en: "New in range" }), format_number(snapshot.users.new_in_range)),
|
|
66
|
+
row(t({ zh: "用户", en: "Users" }), t({ zh: "当前登录", en: "Current sessions" }), format_number(snapshot.users.current_session_users)),
|
|
67
|
+
row(t({ zh: "活跃", en: "Activity" }), t({ zh: "Range 活跃", en: "Active in range" }), format_number(snapshot.activity.active_in_range)),
|
|
68
|
+
row(t({ zh: "活跃", en: "Activity" }), t({ zh: "Stickiness", en: "Stickiness" }), format_rate(snapshot.activity.stickiness_today_over_30d)),
|
|
69
|
+
row(t({ zh: "付费", en: "Payment" }), t({ zh: "付费用户", en: "Paying users" }), format_number(snapshot.payment.paying_users_total)),
|
|
70
|
+
row(t({ zh: "付费", en: "Payment" }), t({ zh: "Range 首付用户", en: "First paid in range" }), format_number(snapshot.payment.first_paid_users_range)),
|
|
71
|
+
row(t({ zh: "付费", en: "Payment" }), t({ zh: "注册转付费", en: "Registered to paid" }), format_rate(snapshot.payment.registered_to_paid_rate)),
|
|
72
|
+
...money_rows(t({ zh: "收入", en: "Revenue" }), t({ zh: "Range 收入", en: "Range revenue" }), snapshot.revenue.range),
|
|
73
|
+
...money_rows(t({ zh: "收入", en: "Revenue" }), t({ zh: "总收入", en: "Total revenue" }), snapshot.revenue.total),
|
|
74
|
+
row(t({ zh: "用量", en: "Usage" }), t({ zh: "Range 调用", en: "Events in range" }), format_number(snapshot.usage.events_range)),
|
|
75
|
+
row(t({ zh: "用量", en: "Usage" }), t({ zh: "错误率", en: "Error rate" }), format_rate(snapshot.usage.error_rate_range)),
|
|
76
|
+
row(t({ zh: "健康", en: "Health" }), t({ zh: "Warnings", en: "Warnings" }), format_number(snapshot.health.stale_data_warnings.length)),
|
|
77
|
+
];
|
|
78
|
+
}
|
|
79
|
+
function user_rows(snapshot) {
|
|
80
|
+
return [
|
|
81
|
+
row("Accounts", t({ zh: "注册用户", en: "Registered users" }), format_number(snapshot.users.total_registered)),
|
|
82
|
+
row("Accounts", t({ zh: "今日新增", en: "New today" }), format_number(snapshot.users.new_today)),
|
|
83
|
+
row("Accounts", t({ zh: "7 天新增", en: "New 7d" }), format_number(snapshot.users.new_7d)),
|
|
84
|
+
row("Accounts", t({ zh: "30 天新增", en: "New 30d" }), format_number(snapshot.users.new_30d)),
|
|
85
|
+
row("Accounts", t({ zh: "Range 新增", en: "New in range" }), format_number(snapshot.users.new_in_range)),
|
|
86
|
+
row("Accounts", t({ zh: "当前登录", en: "Current sessions" }), format_number(snapshot.users.current_session_users)),
|
|
87
|
+
...snapshot.users.recent_users.map((item) => row(t({ zh: "最近用户", en: "Recent user" }), read_text(item.user_id ?? item.id), `${read_text(item.auth_email ?? item.email)} ${format_date(item.auth_created_at ?? item.created_at ?? item.createdAt)}`)),
|
|
88
|
+
];
|
|
89
|
+
}
|
|
90
|
+
function activity_rows(snapshot) {
|
|
91
|
+
return [
|
|
92
|
+
row("Usage", t({ zh: "今日活跃", en: "Active today" }), format_number(snapshot.activity.active_today)),
|
|
93
|
+
row("Usage", t({ zh: "7 天活跃", en: "Active 7d" }), format_number(snapshot.activity.active_7d)),
|
|
94
|
+
row("Usage", t({ zh: "30 天活跃", en: "Active 30d" }), format_number(snapshot.activity.active_30d)),
|
|
95
|
+
row("Usage", t({ zh: "Range 活跃", en: "Active in range" }), format_number(snapshot.activity.active_in_range)),
|
|
96
|
+
row("Usage", "Stickiness", format_rate(snapshot.activity.stickiness_today_over_30d)),
|
|
97
|
+
...snapshot.activity.recent_events.map((item) => row(t({ zh: "最近事件", en: "Recent event" }), format_date(item.created_at), `${read_text(item.user_id)} · ${read_text(item.service)} · ${read_text(item.status)}`)),
|
|
98
|
+
];
|
|
99
|
+
}
|
|
100
|
+
function payment_rows(snapshot) {
|
|
101
|
+
return [
|
|
102
|
+
row("Payment", t({ zh: "付费用户", en: "Paying users" }), format_number(snapshot.payment.paying_users_total)),
|
|
103
|
+
row("Payment", t({ zh: "Range 付费用户", en: "Paying users in range" }), format_number(snapshot.payment.paying_users_range)),
|
|
104
|
+
row("Payment", t({ zh: "Range 首付用户", en: "First paid in range" }), format_number(snapshot.payment.first_paid_users_range)),
|
|
105
|
+
row("Payment", t({ zh: "Range 成功订单", en: "Paid orders in range" }), format_number(snapshot.payment.paid_orders_range)),
|
|
106
|
+
row("Payment", t({ zh: "待支付订单", en: "Pending orders" }), format_number(snapshot.payment.pending_orders)),
|
|
107
|
+
row("Payment", t({ zh: "Range 失败订单", en: "Failed orders in range" }), format_number(snapshot.payment.failed_orders_range)),
|
|
108
|
+
row("Conversion", t({ zh: "注册转付费", en: "Registered to paid" }), format_rate(snapshot.payment.registered_to_paid_rate)),
|
|
109
|
+
row("Conversion", t({ zh: "活跃转付费", en: "Active to paid" }), format_rate(snapshot.payment.active_to_paid_rate)),
|
|
110
|
+
...snapshot.payment.recent_payments.map((item) => row(t({ zh: "最近支付", en: "Recent payment" }), format_date(item.updated_at ?? item.created_at), `${read_text(item.user_id)} · ${format_money_value(item)} · ${read_text(item.status)}`)),
|
|
111
|
+
];
|
|
112
|
+
}
|
|
113
|
+
function revenue_rows(snapshot) {
|
|
114
|
+
return [
|
|
115
|
+
...money_rows("Revenue", t({ zh: "总收入", en: "Total revenue" }), snapshot.revenue.total),
|
|
116
|
+
...money_rows("Revenue", t({ zh: "Range 收入", en: "Range revenue" }), snapshot.revenue.range),
|
|
117
|
+
...money_rows("Revenue", t({ zh: "今日收入", en: "Today revenue" }), snapshot.revenue.today),
|
|
118
|
+
row("Health", t({ zh: "缺少金额的 paid payment", en: "Paid payments missing amount" }), format_number(snapshot.health.missing_revenue_amount_count)),
|
|
119
|
+
row("Balance", t({ zh: "Range 入账 credits", en: "Paid topup credits in range" }), format_number(snapshot.balance.paid_topup_credits_range)),
|
|
120
|
+
row("Balance", t({ zh: "累计入账 credits", en: "Credited total" }), format_number(snapshot.balance.credited_total)),
|
|
121
|
+
row("Balance", t({ zh: "当前余额 credits", en: "Current balance" }), format_number(snapshot.balance.current_balance_total)),
|
|
122
|
+
row("Balance", t({ zh: "待支付充值单", en: "Pending topups" }), format_number(snapshot.balance.pending_topups)),
|
|
123
|
+
];
|
|
124
|
+
}
|
|
125
|
+
function usage_rows(snapshot) {
|
|
126
|
+
return [
|
|
127
|
+
row("Usage", t({ zh: "总调用", en: "Total events" }), format_number(snapshot.usage.total_events)),
|
|
128
|
+
row("Usage", t({ zh: "Range 调用", en: "Events in range" }), format_number(snapshot.usage.events_range)),
|
|
129
|
+
row("Usage", t({ zh: "Range 成功", en: "Success in range" }), format_number(snapshot.usage.success_events_range)),
|
|
130
|
+
row("Usage", t({ zh: "Range 失败", en: "Errors in range" }), format_number(snapshot.usage.error_events_range)),
|
|
131
|
+
row("Usage", t({ zh: "错误率", en: "Error rate" }), format_rate(snapshot.usage.error_rate_range)),
|
|
132
|
+
...snapshot.usage.top_services.map((item) => row("Top service", item.service, format_number(item.count))),
|
|
133
|
+
...snapshot.usage.top_models.map((item) => row("Top model", item.model_id, format_number(item.count))),
|
|
134
|
+
];
|
|
135
|
+
}
|
|
136
|
+
function health_rows(snapshot) {
|
|
137
|
+
const warning_rows = snapshot.health.stale_data_warnings.length > 0
|
|
138
|
+
? snapshot.health.stale_data_warnings.map((warning) => row("Warning", warning, ""))
|
|
139
|
+
: [row("Warning", t({ zh: "暂无", en: "None" }), "")];
|
|
140
|
+
return [
|
|
141
|
+
row("Revenue", t({ zh: "缺少 amount_minor", en: "Missing amount_minor" }), format_number(snapshot.health.missing_revenue_amount_count)),
|
|
142
|
+
row("Payment", t({ zh: "Webhook failed events", en: "Webhook failed events" }), format_number(snapshot.health.payment_webhook_failed_events)),
|
|
143
|
+
row("Usage", t({ zh: "Range 错误率", en: "Range error rate" }), format_rate(snapshot.health.usage_error_rate_range)),
|
|
144
|
+
...warning_rows,
|
|
145
|
+
];
|
|
146
|
+
}
|
|
147
|
+
function availability_rows(snapshot) {
|
|
148
|
+
return Object.entries(snapshot.services).map(([service, state]) => row(service, state.status, `${state.fetched_endpoints.join(", ") || "-"}${state.message ? ` · ${state.message}` : ""}`));
|
|
149
|
+
}
|
|
150
|
+
function row(group, metric, value) {
|
|
151
|
+
return { cells: [group, metric, value] };
|
|
152
|
+
}
|
|
153
|
+
function money_rows(group, metric, values) {
|
|
154
|
+
if (values.length === 0)
|
|
155
|
+
return [row(group, metric, "0")];
|
|
156
|
+
return values.map((item) => row(group, `${metric} ${item.currency}`, item.display));
|
|
157
|
+
}
|
|
158
|
+
function format_money_value(item) {
|
|
159
|
+
const currency = read_text(item.currency).toUpperCase() || "UNKNOWN";
|
|
160
|
+
const amount_minor = Number(item.amount_minor);
|
|
161
|
+
if (!Number.isFinite(amount_minor) || amount_minor <= 0)
|
|
162
|
+
return "-";
|
|
163
|
+
const divisor = currency_minor_divisor(currency);
|
|
164
|
+
const amount = amount_minor / divisor;
|
|
165
|
+
try {
|
|
166
|
+
return new Intl.NumberFormat("en-US", { style: "currency", currency }).format(amount);
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return `${currency} ${amount.toFixed(divisor === 1 ? 0 : 2)}`;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function currency_minor_divisor(currency) {
|
|
173
|
+
const zero_decimal = new Set(["BIF", "CLP", "DJF", "GNF", "JPY", "KMF", "KRW", "MGA", "PYG", "RWF", "UGX", "VND", "VUV", "XAF", "XOF", "XPF"]);
|
|
174
|
+
return zero_decimal.has(currency.toUpperCase()) ? 1 : 100;
|
|
175
|
+
}
|
|
176
|
+
function format_number(value) {
|
|
177
|
+
return new Intl.NumberFormat("en-US").format(Number.isFinite(value) ? value : 0);
|
|
178
|
+
}
|
|
179
|
+
function format_rate(value) {
|
|
180
|
+
if (value === null)
|
|
181
|
+
return "-";
|
|
182
|
+
return `${(value * 100).toFixed(1)}%`;
|
|
183
|
+
}
|
|
184
|
+
function read_text(value) {
|
|
185
|
+
return typeof value === "string" ? value.trim() : value == null ? "-" : String(value).trim();
|
|
186
|
+
}
|
|
187
|
+
function format_date(value) {
|
|
188
|
+
const time = read_time(value);
|
|
189
|
+
if (!Number.isFinite(time))
|
|
190
|
+
return "-";
|
|
191
|
+
return new Date(time).toISOString().slice(0, 19);
|
|
192
|
+
}
|
|
193
|
+
function read_time(value) {
|
|
194
|
+
if (value instanceof Date)
|
|
195
|
+
return value.getTime();
|
|
196
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
197
|
+
return normalize_epoch_time(value);
|
|
198
|
+
if (typeof value === "string" && value.trim()) {
|
|
199
|
+
const numeric_value = Number(value);
|
|
200
|
+
if (Number.isFinite(numeric_value) && /^-?\d+(?:\.\d+)?$/u.test(value.trim()))
|
|
201
|
+
return normalize_epoch_time(numeric_value);
|
|
202
|
+
return Date.parse(value);
|
|
203
|
+
}
|
|
204
|
+
return Number.NaN;
|
|
205
|
+
}
|
|
206
|
+
function normalize_epoch_time(value) {
|
|
207
|
+
return value > 0 && value < 10_000_000_000 ? value * 1000 : value;
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=dashboard-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-format.js","sourceRoot":"","sources":["../../../../src/federation/admin/dashboard/dashboard-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fed Admin Dashboard 指标计算模块。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - 所有跨 service 业务指标都在 CLI 内计算。
|
|
6
|
+
* - range 切换只依赖 raw data 重算,不重新请求网络。
|
|
7
|
+
*/
|
|
8
|
+
import type { dashboard_range, dashboard_raw_data, dashboard_snapshot } from "../../types/AdminDashboard.js";
|
|
9
|
+
/**
|
|
10
|
+
* 构建 Dashboard 指标快照。
|
|
11
|
+
*/
|
|
12
|
+
export declare function build_dashboard_snapshot(raw_data: dashboard_raw_data, range: dashboard_range): dashboard_snapshot;
|
|
13
|
+
//# sourceMappingURL=dashboard-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-metrics.d.ts","sourceRoot":"","sources":["../../../../src/federation/admin/dashboard/dashboard-metrics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAEV,eAAe,EACf,kBAAkB,EAElB,kBAAkB,EAEnB,MAAM,sCAAsC,CAAC;AAI9C;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,eAAe,GAAG,kBAAkB,CAuFjH"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fed Admin Dashboard 指标计算模块。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - 所有跨 service 业务指标都在 CLI 内计算。
|
|
6
|
+
* - range 切换只依赖 raw data 重算,不重新请求网络。
|
|
7
|
+
*/
|
|
8
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
9
|
+
/**
|
|
10
|
+
* 构建 Dashboard 指标快照。
|
|
11
|
+
*/
|
|
12
|
+
export function build_dashboard_snapshot(raw_data, range) {
|
|
13
|
+
const window = create_window(range);
|
|
14
|
+
const paid_payments = raw_data.payment_payments.filter((item) => read_string(item.status) === "paid");
|
|
15
|
+
const paid_payments_with_amount = paid_payments.filter((item) => has_amount_minor(item));
|
|
16
|
+
const range_paid_payments = paid_payments.filter((item) => in_range(item, window));
|
|
17
|
+
const range_paid_payments_with_amount = range_paid_payments.filter((item) => has_amount_minor(item));
|
|
18
|
+
const range_usage_events = raw_data.usage_events.filter((item) => in_range(item, window));
|
|
19
|
+
const first_paid_times = read_first_paid_times(paid_payments);
|
|
20
|
+
const active_in_range = count_unique(range_usage_events.map((item) => read_string(item.user_id)));
|
|
21
|
+
const paying_users_range = count_unique(range_paid_payments.map((item) => read_string(item.user_id)));
|
|
22
|
+
const error_events_range = range_usage_events.filter((item) => read_string(item.status) === "error").length;
|
|
23
|
+
const usage_error_rate_range = safe_rate(error_events_range, range_usage_events.length);
|
|
24
|
+
const users = {
|
|
25
|
+
total_registered: raw_data.accounts_users.length,
|
|
26
|
+
new_today: count_records_since(raw_data.accounts_users, window.today_start),
|
|
27
|
+
new_7d: count_records_since(raw_data.accounts_users, window.seven_days_start),
|
|
28
|
+
new_30d: count_records_since(raw_data.accounts_users, window.thirty_days_start),
|
|
29
|
+
current_session_users: count_unique(raw_data.accounts_sessions
|
|
30
|
+
.filter((item) => read_string(item.status) === "active" || read_time(item.expires_at ?? item.expiresAt) > window.now)
|
|
31
|
+
.map((item) => read_string(item.user_id ?? item.userId))),
|
|
32
|
+
new_in_range: raw_data.accounts_users.filter((item) => in_range(item, window)).length,
|
|
33
|
+
recent_users: sort_recent(raw_data.accounts_users).slice(0, 10),
|
|
34
|
+
};
|
|
35
|
+
const activity = {
|
|
36
|
+
active_today: count_usage_users_since(raw_data.usage_events, window.today_start),
|
|
37
|
+
active_7d: count_usage_users_since(raw_data.usage_events, window.seven_days_start),
|
|
38
|
+
active_30d: count_usage_users_since(raw_data.usage_events, window.thirty_days_start),
|
|
39
|
+
active_in_range,
|
|
40
|
+
stickiness_today_over_30d: safe_rate(count_usage_users_since(raw_data.usage_events, window.today_start), count_usage_users_since(raw_data.usage_events, window.thirty_days_start)),
|
|
41
|
+
recent_events: sort_recent(raw_data.usage_events).slice(0, 20),
|
|
42
|
+
};
|
|
43
|
+
return {
|
|
44
|
+
generated_at: new Date(window.now).toISOString(),
|
|
45
|
+
range,
|
|
46
|
+
services: raw_data.services,
|
|
47
|
+
users,
|
|
48
|
+
activity,
|
|
49
|
+
payment: {
|
|
50
|
+
paying_users_total: first_paid_times.size,
|
|
51
|
+
paying_users_range,
|
|
52
|
+
first_paid_users_range: count_first_paid_in_range(first_paid_times, window),
|
|
53
|
+
paid_orders_range: range_paid_payments.length,
|
|
54
|
+
pending_orders: raw_data.payment_payments.filter((item) => read_string(item.status) === "pending").length,
|
|
55
|
+
failed_orders_range: raw_data.payment_payments.filter((item) => in_range(item, window) && is_failed_payment_status(read_string(item.status))).length,
|
|
56
|
+
registered_to_paid_rate: safe_rate(first_paid_times.size, users.total_registered),
|
|
57
|
+
active_to_paid_rate: safe_rate(paying_users_range, active_in_range),
|
|
58
|
+
recent_payments: sort_recent(raw_data.payment_payments).slice(0, 20),
|
|
59
|
+
},
|
|
60
|
+
revenue: {
|
|
61
|
+
total: read_revenue(paid_payments_with_amount),
|
|
62
|
+
range: read_revenue(range_paid_payments_with_amount),
|
|
63
|
+
today: read_revenue(paid_payments.filter((item) => has_amount_minor(item) && is_since(read_row_time(item), window.today_start))),
|
|
64
|
+
},
|
|
65
|
+
balance: {
|
|
66
|
+
current_balance_total: raw_data.balance_users.reduce((sum, item) => sum + read_number(item.credits), 0),
|
|
67
|
+
credited_total: raw_data.balance_topups
|
|
68
|
+
.filter((item) => read_string(item.status) === "paid")
|
|
69
|
+
.reduce((sum, item) => sum + read_number(item.credits), 0),
|
|
70
|
+
paid_topup_credits_range: raw_data.balance_topups
|
|
71
|
+
.filter((item) => read_string(item.status) === "paid" && in_range(item, window))
|
|
72
|
+
.reduce((sum, item) => sum + read_number(item.credits), 0),
|
|
73
|
+
pending_topups: raw_data.balance_topups.filter((item) => read_string(item.status) === "pending").length,
|
|
74
|
+
},
|
|
75
|
+
usage: {
|
|
76
|
+
total_events: raw_data.usage_events.length,
|
|
77
|
+
events_range: range_usage_events.length,
|
|
78
|
+
success_events_range: range_usage_events.filter((item) => read_string(item.status) === "success").length,
|
|
79
|
+
error_events_range,
|
|
80
|
+
error_rate_range: usage_error_rate_range,
|
|
81
|
+
top_services: read_top_services(range_usage_events),
|
|
82
|
+
top_models: read_top_models(range_usage_events),
|
|
83
|
+
},
|
|
84
|
+
health: {
|
|
85
|
+
missing_revenue_amount_count: paid_payments.length - paid_payments_with_amount.length,
|
|
86
|
+
payment_webhook_failed_events: raw_data.payment_events.filter((item) => read_string(item.sync_status) === "failed").length,
|
|
87
|
+
usage_error_rate_range,
|
|
88
|
+
stale_data_warnings: build_warnings(raw_data, paid_payments.length - paid_payments_with_amount.length, usage_error_rate_range),
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 创建时间窗口。
|
|
94
|
+
*/
|
|
95
|
+
function create_window(range) {
|
|
96
|
+
const now_date = new Date();
|
|
97
|
+
const today_start = new Date(now_date);
|
|
98
|
+
today_start.setHours(0, 0, 0, 0);
|
|
99
|
+
const now = now_date.getTime();
|
|
100
|
+
const range_start = range === "today"
|
|
101
|
+
? today_start.getTime()
|
|
102
|
+
: range === "7d"
|
|
103
|
+
? now - 7 * DAY_MS
|
|
104
|
+
: range === "30d"
|
|
105
|
+
? now - 30 * DAY_MS
|
|
106
|
+
: undefined;
|
|
107
|
+
return {
|
|
108
|
+
now,
|
|
109
|
+
today_start: today_start.getTime(),
|
|
110
|
+
range_start,
|
|
111
|
+
seven_days_start: now - 7 * DAY_MS,
|
|
112
|
+
thirty_days_start: now - 30 * DAY_MS,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 构建健康警告。
|
|
117
|
+
*/
|
|
118
|
+
function build_warnings(raw_data, missing_amount_count, error_rate) {
|
|
119
|
+
const warnings = [];
|
|
120
|
+
if (missing_amount_count > 0)
|
|
121
|
+
warnings.push(`paid payments missing amount_minor: ${missing_amount_count}`);
|
|
122
|
+
if (error_rate !== null && error_rate > 0.05)
|
|
123
|
+
warnings.push(`usage error rate is high: ${(error_rate * 100).toFixed(1)}%`);
|
|
124
|
+
for (const [service, state] of Object.entries(raw_data.services)) {
|
|
125
|
+
if (state.status !== "ready")
|
|
126
|
+
warnings.push(`${service}: ${state.status}${state.message ? ` (${state.message})` : ""}`);
|
|
127
|
+
}
|
|
128
|
+
return warnings;
|
|
129
|
+
}
|
|
130
|
+
function in_range(row, window) {
|
|
131
|
+
if (window.range_start === undefined)
|
|
132
|
+
return true;
|
|
133
|
+
return is_since(read_row_time(row), window.range_start);
|
|
134
|
+
}
|
|
135
|
+
function count_records_since(rows, start_time) {
|
|
136
|
+
return rows.filter((row) => is_since(read_row_created_at(row), start_time)).length;
|
|
137
|
+
}
|
|
138
|
+
function count_usage_users_since(rows, start_time) {
|
|
139
|
+
return count_unique(rows.filter((row) => is_since(row.created_at, start_time)).map((row) => read_string(row.user_id)));
|
|
140
|
+
}
|
|
141
|
+
function read_first_paid_times(rows) {
|
|
142
|
+
const first_paid_times = new Map();
|
|
143
|
+
for (const row of rows) {
|
|
144
|
+
const user_id = read_string(row.user_id);
|
|
145
|
+
const paid_time = read_row_time(row);
|
|
146
|
+
if (!user_id || !Number.isFinite(paid_time))
|
|
147
|
+
continue;
|
|
148
|
+
const current = first_paid_times.get(user_id);
|
|
149
|
+
if (current === undefined || paid_time < current)
|
|
150
|
+
first_paid_times.set(user_id, paid_time);
|
|
151
|
+
}
|
|
152
|
+
return first_paid_times;
|
|
153
|
+
}
|
|
154
|
+
function count_first_paid_in_range(first_paid_times, window) {
|
|
155
|
+
return [...first_paid_times.values()].filter((time) => window.range_start === undefined || time >= window.range_start).length;
|
|
156
|
+
}
|
|
157
|
+
function read_revenue(rows) {
|
|
158
|
+
const by_currency = new Map();
|
|
159
|
+
for (const row of rows) {
|
|
160
|
+
const currency = read_string(row.currency).toUpperCase() || "UNKNOWN";
|
|
161
|
+
by_currency.set(currency, (by_currency.get(currency) ?? 0) + read_number(row.amount_minor));
|
|
162
|
+
}
|
|
163
|
+
return [...by_currency.entries()]
|
|
164
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
165
|
+
.map(([currency, amount_minor]) => ({
|
|
166
|
+
currency,
|
|
167
|
+
amount_minor,
|
|
168
|
+
display: format_money(currency, amount_minor),
|
|
169
|
+
}));
|
|
170
|
+
}
|
|
171
|
+
function read_top_services(rows) {
|
|
172
|
+
return read_top_counts(rows, "service").map((item) => ({ service: item.key, count: item.count }));
|
|
173
|
+
}
|
|
174
|
+
function read_top_models(rows) {
|
|
175
|
+
return read_top_counts(rows, "model_id").map((item) => ({ model_id: item.key, count: item.count }));
|
|
176
|
+
}
|
|
177
|
+
function read_top_counts(rows, key) {
|
|
178
|
+
const counts = new Map();
|
|
179
|
+
for (const row of rows) {
|
|
180
|
+
const value = read_string(row[key]);
|
|
181
|
+
if (!value)
|
|
182
|
+
continue;
|
|
183
|
+
counts.set(value, (counts.get(value) ?? 0) + 1);
|
|
184
|
+
}
|
|
185
|
+
return [...counts.entries()]
|
|
186
|
+
.map(([item_key, count]) => ({ key: item_key, count }))
|
|
187
|
+
.sort((left, right) => right.count - left.count || left.key.localeCompare(right.key))
|
|
188
|
+
.slice(0, 5);
|
|
189
|
+
}
|
|
190
|
+
function sort_recent(rows) {
|
|
191
|
+
return [...rows].sort((left, right) => read_row_time(right) - read_row_time(left));
|
|
192
|
+
}
|
|
193
|
+
function has_amount_minor(row) {
|
|
194
|
+
const amount = Number(row.amount_minor);
|
|
195
|
+
return Number.isFinite(amount) && amount > 0;
|
|
196
|
+
}
|
|
197
|
+
function read_row_created_at(row) {
|
|
198
|
+
return read_time(row.createdAt ?? row.created_at ?? row.auth_created_at ?? row.profile_created_at);
|
|
199
|
+
}
|
|
200
|
+
function read_row_time(row) {
|
|
201
|
+
const updated_time = read_time(row.updated_at ?? row.updatedAt);
|
|
202
|
+
return Number.isFinite(updated_time) ? updated_time : read_row_created_at(row);
|
|
203
|
+
}
|
|
204
|
+
function is_since(value, start_time) {
|
|
205
|
+
const time = read_time(value);
|
|
206
|
+
return Number.isFinite(time) && time >= start_time;
|
|
207
|
+
}
|
|
208
|
+
function read_time(value) {
|
|
209
|
+
if (value instanceof Date)
|
|
210
|
+
return value.getTime();
|
|
211
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
212
|
+
return normalize_epoch_time(value);
|
|
213
|
+
if (typeof value === "string" && value.trim()) {
|
|
214
|
+
const numeric_value = Number(value);
|
|
215
|
+
if (Number.isFinite(numeric_value) && /^-?\d+(?:\.\d+)?$/u.test(value.trim()))
|
|
216
|
+
return normalize_epoch_time(numeric_value);
|
|
217
|
+
return Date.parse(value);
|
|
218
|
+
}
|
|
219
|
+
return Number.NaN;
|
|
220
|
+
}
|
|
221
|
+
function normalize_epoch_time(value) {
|
|
222
|
+
return value > 0 && value < 10_000_000_000 ? value * 1000 : value;
|
|
223
|
+
}
|
|
224
|
+
function is_failed_payment_status(status) {
|
|
225
|
+
return status === "failed" || status === "expired" || status === "canceled";
|
|
226
|
+
}
|
|
227
|
+
function safe_rate(numerator, denominator) {
|
|
228
|
+
if (!Number.isFinite(numerator) || !Number.isFinite(denominator) || denominator <= 0)
|
|
229
|
+
return null;
|
|
230
|
+
return Number((numerator / denominator).toFixed(4));
|
|
231
|
+
}
|
|
232
|
+
function count_unique(values) {
|
|
233
|
+
return new Set(values.filter(Boolean)).size;
|
|
234
|
+
}
|
|
235
|
+
function read_string(value) {
|
|
236
|
+
return typeof value === "string" ? value.trim() : value == null ? "" : String(value).trim();
|
|
237
|
+
}
|
|
238
|
+
function read_number(value) {
|
|
239
|
+
const normalized = Number(value ?? 0);
|
|
240
|
+
return Number.isFinite(normalized) ? normalized : 0;
|
|
241
|
+
}
|
|
242
|
+
function format_money(currency, amount_minor) {
|
|
243
|
+
const divisor = currency_minor_divisor(currency);
|
|
244
|
+
const amount = amount_minor / divisor;
|
|
245
|
+
try {
|
|
246
|
+
return new Intl.NumberFormat("en-US", { style: "currency", currency }).format(amount);
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
return `${currency} ${amount.toFixed(divisor === 1 ? 0 : 2)}`;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
function currency_minor_divisor(currency) {
|
|
253
|
+
const zero_decimal = new Set(["BIF", "CLP", "DJF", "GNF", "JPY", "KMF", "KRW", "MGA", "PYG", "RWF", "UGX", "VND", "VUV", "XAF", "XOF", "XPF"]);
|
|
254
|
+
return zero_decimal.has(currency.toUpperCase()) ? 1 : 100;
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=dashboard-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-metrics.js","sourceRoot":"","sources":["../../../../src/federation/admin/dashboard/dashboard-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../../src/federation/admin/loop.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../../src/federation/admin/loop.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AA0BxE,wBAAsB,SAAS,CAC7B,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5F,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,GACA,OAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,iBAAiB,GAAG,MAAM,CAAC,CA0QzD"}
|
|
@@ -9,6 +9,7 @@ import { City } from "@downcity/city";
|
|
|
9
9
|
import { adminErrorMessage, isAdminAuthError } from "./auth-error.js";
|
|
10
10
|
import { create_admin_tui_runtime } from "../tui/AdminTuiRuntime.js";
|
|
11
11
|
import { manageEnv } from "./commands/service-env.js";
|
|
12
|
+
import { manageDashboard } from "./commands/dashboard.js";
|
|
12
13
|
import { manageCities } from "./commands/cities.js";
|
|
13
14
|
import { manageAccounts } from "./commands/accounts.js";
|
|
14
15
|
import { manageBalance } from "./commands/balance.js";
|
|
@@ -19,6 +20,7 @@ import { manageModels } from "./commands/models.js";
|
|
|
19
20
|
import { manageInstruction } from "./commands/instruction.js";
|
|
20
21
|
import { t } from "../../shared/CliLocale.js";
|
|
21
22
|
const commands = {
|
|
23
|
+
dashboard: manageDashboard,
|
|
22
24
|
env: manageEnv,
|
|
23
25
|
instruction: manageInstruction,
|
|
24
26
|
models: manageModels,
|
|
@@ -57,6 +59,17 @@ export async function adminLoop(session, options) {
|
|
|
57
59
|
value: "__section_management__",
|
|
58
60
|
disabled: true,
|
|
59
61
|
},
|
|
62
|
+
{
|
|
63
|
+
label: t({
|
|
64
|
+
zh: "用户系统 Dashboard",
|
|
65
|
+
en: "User system dashboard",
|
|
66
|
+
}),
|
|
67
|
+
value: "dashboard",
|
|
68
|
+
hint: t({
|
|
69
|
+
zh: "汇总注册用户、活跃用户、新注册、付费用户、收入、充值和用量等核心指标。",
|
|
70
|
+
en: "Summarize registered users, active users, new users, paid users, revenue, topups, and usage metrics.",
|
|
71
|
+
}),
|
|
72
|
+
},
|
|
60
73
|
{
|
|
61
74
|
label: t({
|
|
62
75
|
zh: "环境变量",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../src/federation/admin/loop.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../src/federation/admin/loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fed Admin 用户系统 Dashboard 类型。
|
|
3
|
+
*
|
|
4
|
+
* 关键说明(中文)
|
|
5
|
+
* - Dashboard 是 CLI 内部运营视图,数据来自现有 admin endpoints。
|
|
6
|
+
* - 类型按 raw data、metrics、view state 分层,避免展示逻辑直接依赖 endpoint 原始形态。
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Dashboard 时间范围。
|
|
10
|
+
*/
|
|
11
|
+
export type dashboard_range = "today" | "7d" | "30d" | "all";
|
|
12
|
+
/**
|
|
13
|
+
* Dashboard 服务状态。
|
|
14
|
+
*/
|
|
15
|
+
export type dashboard_service_status = "ready" | "missing" | "error" | "partial";
|
|
16
|
+
/**
|
|
17
|
+
* Dashboard 依赖服务 ID。
|
|
18
|
+
*/
|
|
19
|
+
export type dashboard_service_id = "accounts" | "usage" | "balance" | "payment";
|
|
20
|
+
/**
|
|
21
|
+
* Dashboard 视图。
|
|
22
|
+
*/
|
|
23
|
+
export type dashboard_view = "overview" | "users" | "activity" | "payment" | "revenue" | "usage" | "health" | "availability";
|
|
24
|
+
/**
|
|
25
|
+
* Dashboard 服务读取状态。
|
|
26
|
+
*/
|
|
27
|
+
export interface dashboard_service_state {
|
|
28
|
+
/** 服务读取状态。 */
|
|
29
|
+
status: dashboard_service_status;
|
|
30
|
+
/** 已成功读取的 endpoint。 */
|
|
31
|
+
fetched_endpoints: string[];
|
|
32
|
+
/** 读取失败或缺失说明。 */
|
|
33
|
+
message: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Dashboard 服务状态集合。
|
|
37
|
+
*/
|
|
38
|
+
export type dashboard_service_state_map = Record<dashboard_service_id, dashboard_service_state>;
|
|
39
|
+
/**
|
|
40
|
+
* 通用原始记录。
|
|
41
|
+
*/
|
|
42
|
+
export type dashboard_record = Record<string, unknown>;
|
|
43
|
+
/**
|
|
44
|
+
* Dashboard 原始数据缓存。
|
|
45
|
+
*/
|
|
46
|
+
export interface dashboard_raw_data {
|
|
47
|
+
/** 生成/刷新时间。 */
|
|
48
|
+
fetched_at: string;
|
|
49
|
+
/** 服务状态。 */
|
|
50
|
+
services: dashboard_service_state_map;
|
|
51
|
+
/** accounts 用户记录。 */
|
|
52
|
+
accounts_users: dashboard_record[];
|
|
53
|
+
/** accounts session 记录。 */
|
|
54
|
+
accounts_sessions: dashboard_record[];
|
|
55
|
+
/** usage event 记录。 */
|
|
56
|
+
usage_events: dashboard_record[];
|
|
57
|
+
/** balance account 记录。 */
|
|
58
|
+
balance_users: dashboard_record[];
|
|
59
|
+
/** balance topup 记录。 */
|
|
60
|
+
balance_topups: dashboard_record[];
|
|
61
|
+
/** payment 记录。 */
|
|
62
|
+
payment_payments: dashboard_record[];
|
|
63
|
+
/** payment webhook event 记录。 */
|
|
64
|
+
payment_events: dashboard_record[];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Dashboard 时间窗口。
|
|
68
|
+
*/
|
|
69
|
+
export interface dashboard_window {
|
|
70
|
+
/** 当前时间。 */
|
|
71
|
+
now: number;
|
|
72
|
+
/** 今日起点。 */
|
|
73
|
+
today_start: number;
|
|
74
|
+
/** 当前 range 起点;all 时为 undefined。 */
|
|
75
|
+
range_start?: number;
|
|
76
|
+
/** 近 7 天起点。 */
|
|
77
|
+
seven_days_start: number;
|
|
78
|
+
/** 近 30 天起点。 */
|
|
79
|
+
thirty_days_start: number;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 用户指标。
|
|
83
|
+
*/
|
|
84
|
+
export interface dashboard_users_metrics {
|
|
85
|
+
/** 总注册用户数。 */
|
|
86
|
+
total_registered: number;
|
|
87
|
+
/** 今日新增用户数。 */
|
|
88
|
+
new_today: number;
|
|
89
|
+
/** 近 7 天新增用户数。 */
|
|
90
|
+
new_7d: number;
|
|
91
|
+
/** 近 30 天新增用户数。 */
|
|
92
|
+
new_30d: number;
|
|
93
|
+
/** 当前未过期 session 去重用户数。 */
|
|
94
|
+
current_session_users: number;
|
|
95
|
+
/** 当前 range 内新增用户数。 */
|
|
96
|
+
new_in_range: number;
|
|
97
|
+
/** 最近用户列表。 */
|
|
98
|
+
recent_users: dashboard_record[];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* 活跃指标。
|
|
102
|
+
*/
|
|
103
|
+
export interface dashboard_activity_metrics {
|
|
104
|
+
/** 今日活跃用户数。 */
|
|
105
|
+
active_today: number;
|
|
106
|
+
/** 近 7 天活跃用户数。 */
|
|
107
|
+
active_7d: number;
|
|
108
|
+
/** 近 30 天活跃用户数。 */
|
|
109
|
+
active_30d: number;
|
|
110
|
+
/** 当前 range 内活跃用户数。 */
|
|
111
|
+
active_in_range: number;
|
|
112
|
+
/** 今日活跃 / 30 天活跃。 */
|
|
113
|
+
stickiness_today_over_30d: number | null;
|
|
114
|
+
/** 最近 usage event。 */
|
|
115
|
+
recent_events: dashboard_record[];
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* 支付指标。
|
|
119
|
+
*/
|
|
120
|
+
export interface dashboard_payment_metrics {
|
|
121
|
+
/** 至少有一笔 paid payment 的用户数。 */
|
|
122
|
+
paying_users_total: number;
|
|
123
|
+
/** 当前 range 内有 paid payment 的用户数。 */
|
|
124
|
+
paying_users_range: number;
|
|
125
|
+
/** 第一笔 paid payment 发生在当前 range 内的用户数。 */
|
|
126
|
+
first_paid_users_range: number;
|
|
127
|
+
/** 当前 range 内成功订单数。 */
|
|
128
|
+
paid_orders_range: number;
|
|
129
|
+
/** 全量待支付订单数。 */
|
|
130
|
+
pending_orders: number;
|
|
131
|
+
/** 当前 range 内失败/取消/过期订单数。 */
|
|
132
|
+
failed_orders_range: number;
|
|
133
|
+
/** 注册到付费转化率。 */
|
|
134
|
+
registered_to_paid_rate: number | null;
|
|
135
|
+
/** 当前 range 活跃到当前 range 付费转化率。 */
|
|
136
|
+
active_to_paid_rate: number | null;
|
|
137
|
+
/** 最近 payment 记录。 */
|
|
138
|
+
recent_payments: dashboard_record[];
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* 金额聚合。
|
|
142
|
+
*/
|
|
143
|
+
export interface dashboard_money_group {
|
|
144
|
+
/** 币种。 */
|
|
145
|
+
currency: string;
|
|
146
|
+
/** 最小货币单位金额。 */
|
|
147
|
+
amount_minor: number;
|
|
148
|
+
/** 展示文本。 */
|
|
149
|
+
display: string;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* 收入指标。
|
|
153
|
+
*/
|
|
154
|
+
export interface dashboard_revenue_metrics {
|
|
155
|
+
/** 全量收入。 */
|
|
156
|
+
total: dashboard_money_group[];
|
|
157
|
+
/** 当前 range 收入。 */
|
|
158
|
+
range: dashboard_money_group[];
|
|
159
|
+
/** 今日收入。 */
|
|
160
|
+
today: dashboard_money_group[];
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* 余额指标。
|
|
164
|
+
*/
|
|
165
|
+
export interface dashboard_balance_metrics {
|
|
166
|
+
/** 当前余额 credits 总和。 */
|
|
167
|
+
current_balance_total: number;
|
|
168
|
+
/** 全量已支付 topup credits 总和。 */
|
|
169
|
+
credited_total: number;
|
|
170
|
+
/** 当前 range 内已支付 topup credits。 */
|
|
171
|
+
paid_topup_credits_range: number;
|
|
172
|
+
/** 全量 pending topup 数。 */
|
|
173
|
+
pending_topups: number;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* 用量指标。
|
|
177
|
+
*/
|
|
178
|
+
export interface dashboard_usage_metrics {
|
|
179
|
+
/** 总 usage event 数。 */
|
|
180
|
+
total_events: number;
|
|
181
|
+
/** 当前 range 内 event 数。 */
|
|
182
|
+
events_range: number;
|
|
183
|
+
/** 当前 range 内 success event 数。 */
|
|
184
|
+
success_events_range: number;
|
|
185
|
+
/** 当前 range 内 error event 数。 */
|
|
186
|
+
error_events_range: number;
|
|
187
|
+
/** 当前 range 内错误率。 */
|
|
188
|
+
error_rate_range: number | null;
|
|
189
|
+
/** Top services。 */
|
|
190
|
+
top_services: Array<{
|
|
191
|
+
service: string;
|
|
192
|
+
count: number;
|
|
193
|
+
}>;
|
|
194
|
+
/** Top models。 */
|
|
195
|
+
top_models: Array<{
|
|
196
|
+
model_id: string;
|
|
197
|
+
count: number;
|
|
198
|
+
}>;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* 健康指标。
|
|
202
|
+
*/
|
|
203
|
+
export interface dashboard_health_metrics {
|
|
204
|
+
/** paid payment 缺少 amount_minor 的数量。 */
|
|
205
|
+
missing_revenue_amount_count: number;
|
|
206
|
+
/** payment webhook 同步失败事件数。 */
|
|
207
|
+
payment_webhook_failed_events: number;
|
|
208
|
+
/** 当前 range 内 usage 错误率。 */
|
|
209
|
+
usage_error_rate_range: number | null;
|
|
210
|
+
/** 数据健康警告。 */
|
|
211
|
+
stale_data_warnings: string[];
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Dashboard 指标快照。
|
|
215
|
+
*/
|
|
216
|
+
export interface dashboard_snapshot {
|
|
217
|
+
/** 指标生成时间。 */
|
|
218
|
+
generated_at: string;
|
|
219
|
+
/** 当前 range。 */
|
|
220
|
+
range: dashboard_range;
|
|
221
|
+
/** 服务读取状态。 */
|
|
222
|
+
services: dashboard_service_state_map;
|
|
223
|
+
/** 用户指标。 */
|
|
224
|
+
users: dashboard_users_metrics;
|
|
225
|
+
/** 活跃指标。 */
|
|
226
|
+
activity: dashboard_activity_metrics;
|
|
227
|
+
/** 支付指标。 */
|
|
228
|
+
payment: dashboard_payment_metrics;
|
|
229
|
+
/** 收入指标。 */
|
|
230
|
+
revenue: dashboard_revenue_metrics;
|
|
231
|
+
/** 余额指标。 */
|
|
232
|
+
balance: dashboard_balance_metrics;
|
|
233
|
+
/** 用量指标。 */
|
|
234
|
+
usage: dashboard_usage_metrics;
|
|
235
|
+
/** 健康指标。 */
|
|
236
|
+
health: dashboard_health_metrics;
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=AdminDashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminDashboard.d.ts","sourceRoot":"","sources":["../../../src/federation/types/AdminDashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminDashboard.js","sourceRoot":"","sources":["../../../src/federation/types/AdminDashboard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "downcity",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.284",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Downcity CLI — unified City and Agent host management",
|
|
6
6
|
"bin": {
|
|
@@ -23,12 +23,12 @@
|
|
|
23
23
|
"@ai-sdk/openai": "^3.0.67",
|
|
24
24
|
"@ai-sdk/openai-compatible": "^2.0.48",
|
|
25
25
|
"@ai-sdk/xai": "^3.0.93",
|
|
26
|
-
"@downcity/agent": "^1.1.
|
|
27
|
-
"@downcity/city": "^0.2.
|
|
28
|
-
"@downcity/plugins": "^1.0.
|
|
29
|
-
"@downcity/server": "^0.1.
|
|
30
|
-
"@downcity/shell": "^0.1.
|
|
31
|
-
"@downcity/type": "0.1.
|
|
26
|
+
"@downcity/agent": "^1.1.195",
|
|
27
|
+
"@downcity/city": "^0.2.144",
|
|
28
|
+
"@downcity/plugins": "^1.0.142",
|
|
29
|
+
"@downcity/server": "^0.1.48",
|
|
30
|
+
"@downcity/shell": "^0.1.66",
|
|
31
|
+
"@downcity/type": "0.1.99",
|
|
32
32
|
"@earendil-works/pi-tui": "^0.74.2",
|
|
33
33
|
"@larksuiteoapi/node-sdk": "^1.66.0",
|
|
34
34
|
"@openrouter/ai-sdk-provider": "^2.9.0",
|