mirror of
https://github.com/ThearchyHelios/AgentLab.git
synced 2026-11-15 23:01:59 +00:00
W4-d 前端:数据目录页的「变化」视图、表详情「结构与取值变化」一节、后台任务条、数据源的角标和定时维护
第 3 波的结构变化、取值观察、变化记录、定时维护都只有接口,这一提交给它们界面,能走通(收口): - 数据目录页左栏加第三个视图「变化」(view=changes):按要处理 / 提醒 / 说明分组(组内照服务端排好的先后),能按开着的 / 处理过的、结构变化 / 取值变化筛,筛选和打开的那一条记在地址里;视图标签上写几条要处理。点开一条,右栏写服务端的一句说法、 依据(谁、经什么测到的;取值变化写观察口径,结构变化写比对的两版结构)、前后各是什么、影响面(说到这些列的目录项和它们 现在的状态、写死了这张表的已发布模板、「这条 SQL 现在会报列不存在」、有效记录条件)、能做的处理。动作和做不了的原因都照 服务端给的 actions 画;清理目录项先确认,加入码值可以先填含义,误报必须写理由(写之前按钮不能点,服务端也会拒)。处理完 照实写结果:谁、什么时候、目录第几版、建了的任务(点得进起草、剖析的进度)。 - 表详情加「结构与取值变化」一节:这张表的变化(点「去处理」到「变化」视图里那一条)、撤销过的「已列全」、最近几次取值观察 (行数、码值分布、最新业务日期、按日行数)和各自的口径,口径换过的说一句不互相比较;按日行数的小柱图只给眼睛看,数字写在 字里和读屏名称里。 - 后台任务条(05 (g)):页头的「起草」「数据剖析」改回纯入口(进行中转圈、排队中时钟,读屏名称写状态、不写数字);DraftStrip 换成 JobStrip,按服务端给的同源队先后列出探查、起草、剖析,每项一行加进度条和提醒(剖析的「最近查询多数超时」也挪到这里, 窄屏、触屏看得见全文),「查看」打开对应的对话框,探查的到数据源卡片上(#source-<id> 滚过去)。 - 数据源卡片:要处理的变化条数的角标(读屏写全,点开到「变化」视图);「定时维护」对话框(和「探查范围」一样是卡片上的 独立对话框,不塞进编辑表单:两个保存混在一起出错时说不清哪一样没存上):开关缺省关、开启时提示选低峰时段,选步骤(PUT /maintenance),频率用 components/FreqPicker,保存成一条 target_kind=source_maintenance 的定时任务(新建 ScheduleTargetCreate, 改频率、开关 SchedulePatch 带版本);照实写下一次什么时候、最近一次建了哪些任务、哪几步没执行和原因(触发记录的 inputs), 剖析没开、调度没开时说到点会怎样。上传表格、记录表不给这一节。开着的维护在卡片上带一个标签写频率。 - 地址里带 pjob / djob 时打开那个剖析、起草任务的进度(定时维护的「最近一次」从数据源页链过来)。 新文件:typesSource.ts(接口约定)、api/sourceChanges.ts、lib/termsSource.ts(terms.ts 末尾转出)、pages/catalog/changes.ts、 ChangesQueue.tsx、ChangeDetail.tsx、TableChanges.tsx、JobStrip.tsx、pages/SourceMaintenanceDialog.tsx。变化的叫法和服务端逐字 一致,tests/test_source_change_terms.py 守着(维护步骤的叫法同样)。观察的按日行数服务端补上窗口里没数据的日子(不然小柱图 看不出断档)。
This commit is contained in:
@@ -23,6 +23,7 @@ import { bundle, dispositionName } from './bundle'
|
||||
import { compare } from './compare'
|
||||
import { inquiry } from './inquiry'
|
||||
import { schedules } from './schedules'
|
||||
import { sourceChanges } from './sourceChanges'
|
||||
import { whatif } from './whatif'
|
||||
import { reportExport } from './reportExport'
|
||||
// 应用平台:各自的接口文件,这里只挂上去
|
||||
@@ -948,6 +949,8 @@ export const api = {
|
||||
|
||||
// ---- 复核套件:各功能的接口在自己的文件里(api/<名字>.ts),这里只挂上去 ----
|
||||
schedules,
|
||||
// 数据源的变化、取值观察、定时维护的步骤、后台任务条(下一轮第 4 波,typesSource.ts 是接口约定)
|
||||
sourceChanges,
|
||||
compare,
|
||||
bundle,
|
||||
inquiry,
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/**
|
||||
* 数据源的变化、取值观察、定时维护的步骤、后台任务条的接口(服务端 app/api/source_changes.py),挂在 api.sourceChanges 上。
|
||||
* 定时本身(cron、时区、开关)走 api.schedules(target_kind=source_maintenance,总方案 X4:定时只有一套)。
|
||||
*
|
||||
* 请求函数从 ./http 导入,不从 ./client 导入(client.ts 要导入这个文件,反过来就成了循环,见 http.ts 开头的说明)。
|
||||
* 误报没写理由 422、处理过的再处理 409、目录被别人刚改过 409,message 是服务端给的中文
|
||||
*/
|
||||
import type {
|
||||
MaintenanceStep, SourceBackgroundJob, SourceChange, SourceChangeList, SourceChangeQuery, SourceChangeResolveBody,
|
||||
SourceChangeResolveOut, SourceMaintenance, SourceUpkeep, TableObservations,
|
||||
} from '../typesSource'
|
||||
import { get, post, put, qs, type RequestOptions } from './http'
|
||||
|
||||
const at = (sourceId: string) => `/datasources/${encodeURIComponent(sourceId)}`
|
||||
|
||||
export const sourceChanges = {
|
||||
/** 数据源列表一次取齐:各源要处理的变化条数(卡片角标)、指向它的维护定时 */
|
||||
upkeep: (opts?: RequestOptions) => get<{ items: SourceUpkeep[] }>('/datasources/upkeep', opts),
|
||||
/** 一个源的变化:缺省开着的(要处理的先);status=handled 是处理过的。category 只看结构 / 取值变化 */
|
||||
list: (sourceId: string, q: SourceChangeQuery = {}, opts?: RequestOptions) =>
|
||||
get<SourceChangeList>(`${at(sourceId)}/changes${qs({
|
||||
status: q.status ?? 'pending', category: q.category ?? undefined, table: q.table ?? undefined,
|
||||
limit: q.limit ?? 100, offset: q.offset ?? 0,
|
||||
})}`, opts),
|
||||
get: (sourceId: string, changeId: string, opts?: RequestOptions) =>
|
||||
get<{ change: SourceChange }>(`${at(sourceId)}/changes/${encodeURIComponent(changeId)}`, opts),
|
||||
/** 处理一条变化:动作落到目录已有的写入接口并记目录版本、建了的任务编号 */
|
||||
resolve: (sourceId: string, changeId: string, body: SourceChangeResolveBody) =>
|
||||
post<SourceChangeResolveOut>(`${at(sourceId)}/changes/${encodeURIComponent(changeId)}/resolve`, body),
|
||||
/** 表详情「结构与取值变化」一节:这张表最近几次观察,各带口径 */
|
||||
observations: (sourceId: string, table: string, opts?: RequestOptions) =>
|
||||
get<TableObservations>(`${at(sourceId)}/observations${qs({ table })}`, opts),
|
||||
/** 这个源进行中和排队的后台任务,按同源队的先后排好 */
|
||||
backgroundJobs: (sourceId: string, opts?: RequestOptions) =>
|
||||
get<{ items: SourceBackgroundJob[] }>(`${at(sourceId)}/background-jobs`, opts),
|
||||
/** 定时维护:步骤、剖析开没开、调度开没开、指向这个源的维护定时(定时任务页同一个形状,最近一次触发带 inputs) */
|
||||
maintenance: (sourceId: string, opts?: RequestOptions) => get<SourceMaintenance>(`${at(sourceId)}/maintenance`, opts),
|
||||
/** 改要做哪几步(至少一步)。上传表格、记录表 409 */
|
||||
putMaintenance: (sourceId: string, steps: MaintenanceStep[]) =>
|
||||
put<SourceMaintenance>(`${at(sourceId)}/maintenance`, { steps }),
|
||||
}
|
||||
Reference in New Issue
Block a user