-
Notifications
You must be signed in to change notification settings - Fork 3
/
todo
224 lines (167 loc) · 6.58 KB
/
todo
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
控制台接口 - OK
控制台ws实现 - OK
Task应该有一个final TaskType的成员变量 OK
Handler注释,一个Task对应多个session,一个session只能对应一个Task OK
抽象websocket通讯请求响应数据结构 OK
Task中需要为任务增加线程池异步执行任务 OK
Handler中打印任务信息需要更详细的信息,按照Task分组 OK
Handler判断是要新创建任务,还是把当前session加入之前的任务 OK
debug异常后无法释放Task OK
Handler增加异常处理,把异常输出到浏览器 OK
Handler中当客户端关闭链接时从Task中移除session OK
Handler中putTask时吧当前session加入Task OK
Task的stop没有被调用 OK
Task增加任务启动开始时间用于判断超时OK
js代码语法错误能有提示 OK
js执行错误能有提示行位置 OK
打印日志循环引用问题 OK
日志打印时间类型处理 OK
debug不需要做溢出处理 OK
一个map中有函数 OK
一个函数序列化如何在浏览器中显示 OK
JSToolsCode改成JSTools OK
JSToolsCode定时刷新缓存,时间可配置 OK
js加载数据库实现 OK
不需要为JsCodeFile创建根目录!OK
新增如果上级目录是/就不需要判断存在性 OK
构建树手动加入跟目录 OK
一个Task实例分配一个线程池 OK
任务超时只是关闭了连接任务还在线程池中执行 OK
ScriptEngine Module 需要支持直接加载第三方开源库(如:lodash、Underscore、等等) OK
实现方式 Module.require 重载或者加一个参数,使用不同方式加载js code-- scriptEngine.eval('load({script: "", name: ""})') OK
关于Nashorn的 load 函数 - https://stackoverflow.com/questions/29051472/java-nashorn-accessing-another-js-file OK
解决Java与JS互调的类型问题(Java对象转成Js对象)
Java对象转成Js对象 OK - 100%
数据库操作工具
关系型数据库 MySql OK - 100%
Redis OK - 100%
MQ
前端页面基本布局完成 -- OK
——————Context ---------------------------------------------------------------- -- OK
ctx.req-request 对象
ctx.res-response 对象
ctx.session-session 对象
ctx.currentUser-当前登录用户
——————Request/req
method
href-包括 protocol,host 和 url,querystring
url
originalUrl
origin-包括 protocol 和 host
protocol
host/hostname/ip
port
path
pathVariables
querystring/query
form?parameter
header
length-Content-Length
type-请求 Content-Type 不含参数 "charset"
charset-请求字符集
cookies
getCookies(name, [options])
body?Content
——————Response/res
status
header
length-响应的 Content-Length
type-请求 Content-Type 不含参数 "charset"
charset-请求字符集
lastModified- Last-Modified 标头
cookies
body
redirect(url)
forward(url)
setCookies(name, value, [options])
write(body)
flush()
close()
—————— ---------------------------------------------------------------- -- OK
提供一个接口返回任务详情 OK
提供接口用于管理任务,关闭等操作。 OK
-- 数据库设计
js_code_file 增加read_only字段,一旦设置成只读的js就不允许修改了,只能删了重新创建 OK
-- 增删查改
JsCodeFile
新增 OK
根据id查询 OK
查询树结构 OK
不需要得到具体代码(减少字段)OK
根据id更新 OK
根据id删除 OK
查询所有业务类型 OK
根据业务类型查询所有分组名称 OK
查询所有的业务类型和分组名称并返回关联关系 OK
CodeFileHistory
根据id查询 OK
根据业务类型,分组名称,全路径查询列表(减少字段)OK
根据业务类型,分组名称,父级路径查询所有父路径下的历史文件名 OK
退回代码到某个版本 OK
CodeRunLog
根据id查询 OK
根据:业务类型,分组名称,文件ID,全路径,运行时间,运行状态,组合条件查询脚本运行日志(减少字段)OK
脚本运行汇总查询:运行总次数,运行中数量,成功数量,异常数量,超时数量,...(可以根据:业务类型,分组名称,路径,文件名,运行时间,组合条件过滤) OK
---------------------------------------------------------------------------------------------------------------------------- TODO
——————Handler
处理函数
settings
是否开启事物
数据库的数据源
是否开启登录认证
是否开启授权验证
正在运行任务的管理(一张表?CodeRunLog就行),及时远程动态查看运行日志
Java ThreadPoolExecutor无法有效的强制停止线程,需要强制关闭超时执行的线程
实现方式 - 使用esprima等库,做AST语法树,判断有死循环就不让保存到数据库
---
需要接口
根据代码内容获取可以执行的方法名数组(使用esprima前端实现)
数据源,输入,输出
管理动态的数据库数据源
管理动态的redis数据源
管理动态的MQ数据源
——————架构设计
admin管理节点
为管理工作台提供接口
debug只能到这个节点上
查看和管理所有node节点
支持配置启用内嵌node节点,默认不起用
node工作节点
做具体的数据同步工作
分布式无状态
可以支持查看任务实时日志
支持查看当前节点状态
数据同步类型
全量数据同步
增量MySQL数据实时同步
——————
—————— UI层优化
编辑器优化问题
js语法用es5
自定义注入内置对象的提示
快捷键保存
快捷键删除行
快捷键重复行
快捷键行上下移动
快捷键与IDEA保持一致...
编辑器多页签问题
每个叶签标识文件保存状态
关闭当前叶签
编辑器上部需要工具栏(还是全局工具栏?)
标识文件路径
debug按钮
文件历史修改对比
文件历史运行日志查看
当前文件运行状态标识
完成文件管理器,文件管理器上部需要工具栏
——————
-----------------------------------------------------------------------
参考 -- https://segmentfault.com/a/1190000017992387?utm_medium=referral&utm_source=tuicool
const esprima = require('esprima');//JS语法树模块
const estraverse = require('estraverse');//JS语法树遍历各节点
const escodegen = require('escodegen');//JS语法树反编译模块
使用语法解析 AST
在前端就能获取代码中 exports 的 function | 实现调试方法的选择
在前端处理js代码死循环问题,在服务端再做二次校验
参考 ---------------------------------
esprima 使用文档 - https://esprima.readthedocs.io/en/4.0/