File size: 6,896 Bytes
020c337
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
-- 创建脚本表
CREATE TABLE IF NOT EXISTS scripts
(
    id          INTEGER PRIMARY KEY AUTOINCREMENT,
    name        TEXT    NOT NULL CHECK (length(name) <= 255),
    script_type TEXT    NOT NULL CHECK (length(script_type) <= 255),
    content     TEXT    NOT NULL,
    description TEXT,
    created_at  INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
    updated_at  INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
);

-- 创建任务流
CREATE TABLE IF NOT EXISTS flows
(
    id         INTEGER PRIMARY KEY AUTOINCREMENT,
    server_ids TEXT    NOT NULL, -- 存储服务器ID列表
    step_count INTEGER NOT NULL,
    strategy   TEXT    NOT NULL, -- 对于不同任务的处理策略, json字段
    status     TEXT    NOT NULL, -- 总体状态  waiting, running, complete, error
    created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
    updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
);

-- 创建命令行任务表
CREATE TABLE IF NOT EXISTS command_tasks
(
    id             INTEGER PRIMARY KEY AUTOINCREMENT,
    flow_id        INTEGER NOT NULL,
    name           TEXT    NOT NULL CHECK (length(name) <= 255),
    step_index     INTEGER NOT NULL,
    script_id      INTEGER NOT NULL,
    script_content TEXT    NOT NULL,
    script_type    TEXT    NOT NULL CHECK (length(script_type) <= 255),
    status         INTEGER NOT NULL DEFAULT 0 CHECK (status IN (0, 1, 2, 3)), -- 0: 等待中, 1: 进行中, 2: 成功, 3: 失败
    created_at     INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
    updated_at     INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
);

-- 创建命令行任务日志表
CREATE TABLE IF NOT EXISTS command_logs
(
    id              INTEGER PRIMARY KEY AUTOINCREMENT,
    command_task_id INTEGER NOT NULL,
    server_id       INTEGER NOT NULL,
    ssh_host        TEXT    NOT NULL,
    status          INTEGER NOT NULL DEFAULT 0 CHECK (status IN (0, 1, 2, 3, 4)), -- 0: 等待中, 1: 进行中, 2: 成功, 3: 失败, 4: 异常
    log_name        TEXT    NOT NULL CHECK (length(log_name) <= 255)
);

-- 传输任务表
CREATE TABLE IF NOT EXISTS transfer_tasks
(
    id               INTEGER PRIMARY KEY AUTOINCREMENT,
    name             TEXT    NOT NULL CHECK (length(name) <= 255),
    flow_id          INTEGER NOT NULL,                                          -- 当本机不是数据源节点时, 本字段的值为 0
    step_index       INTEGER NOT NULL,
    src_node         TEXT    NOT NULL,                                          -- 数据源节点, json字段
    src_node_task_id INTEGER NOT NULL,                                          -- 当本机是数据源节点时, 本字段的值为 0, 否则为目标机器上的transfer_tasks.id
    dst_nodes        TEXT    NOT NULL,                                          -- 目标节点,多个,json字段
    message          TEXT    NOT NULL DEFAULT '',                               -- 与目标节点的链接错误信息
    path_list        TEXT    NOT NULL DEFAULT '[]',                             -- 源节点上的路径 [{"path":"/www/wwwroots", "is_dir":true}]
    status           INTEGER NOT NULL DEFAULT 0 CHECK (status IN (0, 1, 2, 3)), -- 0: 等待中, 1: 进行中, 2: 成功, 3: 失败
    created_at       INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
    updated_at       INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
);

-- 传输文件列表
CREATE TABLE IF NOT EXISTS transfer_files
(
    id               INTEGER PRIMARY KEY AUTOINCREMENT,
    flow_id          INTEGER NOT NULL,
    transfer_task_id INTEGER NOT NULL,
    src_file         TEXT    NOT NULL, -- 源文件
    dst_file         TEXT    NOT NULL, -- 目标文件
    file_size        INTEGER NOT NULL, -- 文件大小
    is_dir           INTEGER NOT NULL DEFAULT 0
);


-- 传输文件列表
CREATE TABLE IF NOT EXISTS transfer_logs
(
    id               INTEGER PRIMARY KEY AUTOINCREMENT,
    flow_id          INTEGER NOT NULL,
    transfer_task_id INTEGER NOT NULL,
    transfer_file_id INTEGER NOT NULL,
    dst_node_idx     INTEGER NOT NULL,                                             -- 目标节点索引,基于 transfer_tasks.dst_nodes
    status           INTEGER NOT NULL DEFAULT 0 CHECK (status IN (0, 1, 2, 3, 4)), -- 0: 等待中, 1: 进行中, 2: 成功, 3: 失败, 4: 跳过
    progress         INTEGER          DEFAULT 0,                                   -- 0-100
    message          TEXT    NOT NULL DEFAULT '',
    created_at       INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
    started_at       INTEGER,
    completed_at     INTEGER
);

-- 创建流程模板表
CREATE TABLE IF NOT EXISTS flow_templates
(
    id          INTEGER PRIMARY KEY AUTOINCREMENT,
    name        TEXT    NOT NULL CHECK (length(name) <= 255),
    key_words   TEXT    NOT NULL DEFAULT '',                        -- 关键字词,用来查询内容是子任务的名称
    description TEXT    NOT NULL DEFAULT '',                        -- 模板描述
    content     TEXT    NOT NULL,                                   -- json字段,由前端构建,实际流程内容
    created_at  INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
    updated_at  INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
);

CREATE INDEX IF NOT EXISTS idx_scripts_name ON scripts (name);
CREATE INDEX IF NOT EXISTS idx_scripts_description ON scripts (description);

CREATE INDEX IF NOT EXISTS idx_flow_server_ids ON flows (server_ids);

-- command_tasks 表
CREATE INDEX IF NOT EXISTS idx_command_tasks_flow_id ON command_tasks (flow_id);
CREATE INDEX IF NOT EXISTS idx_command_tasks_script_id ON command_tasks (script_id);

-- command_logs 表
CREATE INDEX IF NOT EXISTS idx_command_logs_task_id ON command_logs (command_task_id);
CREATE INDEX IF NOT EXISTS idx_command_logs_server_id ON command_logs (server_id);
-- command_logs 状态查询
CREATE INDEX IF NOT EXISTS idx_command_logs_status ON command_logs (command_task_id, status);

-- transfer_tasks 表
CREATE INDEX IF NOT EXISTS idx_transfer_tasks_flow_id ON transfer_tasks (flow_id);
CREATE INDEX IF NOT EXISTS idx_transfer_tasks_src_node_task_id ON transfer_tasks (src_node_task_id);

-- transfer_files 表
CREATE INDEX IF NOT EXISTS idx_transfer_files_task_id ON transfer_files (transfer_task_id);

-- transfer_logs 表
CREATE INDEX IF NOT EXISTS idx_transfer_logs_flow_id ON transfer_logs (flow_id);
CREATE INDEX IF NOT EXISTS idx_transfer_logs_task_id ON transfer_logs (transfer_task_id);
CREATE INDEX IF NOT EXISTS idx_transfer_logs_file_id ON transfer_logs (transfer_file_id);
-- transfer_logs 状态查询
CREATE INDEX IF NOT EXISTS idx_transfer_logs_status ON transfer_logs (transfer_file_id, status);

-- flow_templates 表
CREATE INDEX IF NOT EXISTS idx_flow_templates_name ON flow_templates (name);
CREATE INDEX IF NOT EXISTS idx_flow_templates_key_words ON flow_templates (key_words);