feat(admin): 资源与策略 - 后台统一维护账号配额与运行时请求限制 (#37)

Fixes #35

Co-authored-by: ddCat <ddcat666@88.com>
This commit is contained in:
ddcat666
2026-07-23 21:19:07 +08:00
committed by GitHub
parent 78e27507c4
commit d3dfede48f
40 changed files with 1202 additions and 488 deletions

View File

@@ -29,6 +29,13 @@ export type AdminUser = LocalUser & {
export type AuthSessionPayload = {
user: LocalUser | null;
systemChannels?: ModelChannel[];
runtimeLimits?: RuntimeLimits;
};
export type RuntimeLimits = {
activeTaskLimit: number;
resourceUploadMB: number;
sessionUploadMB: number;
};
export type ApiCallLog = {
@@ -81,6 +88,13 @@ export type AdminUserDetail = {
user: LocalUser;
account: { userId: string; availableMicrocredits: number; reservedMicrocredits: number; version: number };
counts: { ledgerEntries: number; tasks: number; apiCalls: number; auditEvents: number };
storageUsage: {
assetCount: number; assetBytes: number; canvasCount: number; canvasBytes: number;
sessionCount: number; sessionBytes: number; taskCount: number; taskBytes: number; apiCallCount: number;
};
storedFileBytes: number;
dailyUploadBytes: number;
quota: RuntimeResourcePolicy;
};
export type AdminUserTask = {
@@ -197,9 +211,62 @@ export type AdminOSSSetting = {
updatedAt?: string;
};
export type RuntimeConcurrencySetting = {
export type RuntimeResourcePolicy = {
resourceUploadMB: number;
sessionUploadMB: number;
generatedFileMB: number;
dailyUploadMB: number;
storedFileGB: number;
structuredDataMB: number;
taskDataGB: number;
assetCount: number;
canvasCount: number;
sessionCount: number;
taskCount: number;
apiCallLogCount: number;
};
export type RuntimeTaskPolicy = {
workerConcurrency: number;
channelConcurrency: number;
activeTaskLimit: number;
imageTimeoutMinutes: number;
textTimeoutMinutes: number;
audioTimeoutMinutes: number;
videoTimeoutMinutes: number;
storyboardTimeoutMinutes: number;
defaultTimeoutMinutes: number;
};
export type RuntimeRequestPolicy = {
taskCreatePerMinute: number;
sessionCreatePerMinute: number;
resourceUploadPerMinute: number;
resourceImportPerMinute: number;
sessionFilePerMinute: number;
assetWritePerMinute: number;
canvasWritePerMinute: number;
registerPerHour: number;
emailCodePerHour: number;
loginIPPerTenMinutes: number;
loginAccountPerTenMinutes: number;
systemRelayPerMinute: number;
customRelayPerMinute: number;
customRelayConcurrency: number;
customRelayRequestMB: number;
customRelayResponseMB: number;
customRelayTimeoutMinutes: number;
systemRelayRequestMB: number;
systemRelayResponseMB: number;
channelCircuitFailureCount: number;
channelCircuitOpenSeconds: number;
};
export type RuntimePolicySetting = {
resource: RuntimeResourcePolicy;
task: RuntimeTaskPolicy;
request: RuntimeRequestPolicy;
configured?: boolean;
updatedBy?: string;
createdAt?: string;
updatedAt?: string;
@@ -329,12 +396,20 @@ export function updateAdminOSSSetting(input: Partial<AdminOSSSetting>) {
return request<{ setting: AdminOSSSetting }>(api.patch("/admin/settings/oss", input));
}
export function getAdminRuntimeConcurrencySetting() {
return request<{ setting: RuntimeConcurrencySetting }>(api.get("/admin/settings/concurrency"));
export function getAdminRuntimePolicySetting() {
return request<{ setting: RuntimePolicySetting }>(api.get("/admin/settings/runtime-policy"));
}
export function updateAdminRuntimeConcurrencySetting(input: Pick<RuntimeConcurrencySetting, "workerConcurrency" | "channelConcurrency">) {
return request<{ setting: RuntimeConcurrencySetting }>(api.patch("/admin/settings/concurrency", input));
export function getAdminSelfUseRuntimePolicy() {
return request<{ setting: RuntimePolicySetting }>(api.get("/admin/settings/runtime-policy/self-use"));
}
export function updateAdminRuntimePolicySetting(input: Pick<RuntimePolicySetting, "resource" | "task" | "request">) {
return request<{ setting: RuntimePolicySetting }>(api.put("/admin/settings/runtime-policy", input));
}
export function resetAdminRuntimePolicySetting() {
return request<{ setting: RuntimePolicySetting }>(api.delete("/admin/settings/runtime-policy"));
}
export function listAdminApiLogs(params: AdminListParams = {}) {