重写 mistral workflow 模板

根据这两天对 mistral 和 workflow 模板的了解,决定对之前写的 workflow 模板进行改写甚至重写,因为其中有一些模板内容需要重新使用 JS 来完成,而不是使用 action 注入或者编写 YAQL 语句的方式,另外其中有部分操作可以由前端来进行输入限制,单独使用 YAQL 来进行某些判断十分费力。

  • 取消所有模板中对输入内容的限制判断

这一部分原先的模板是通过手动注入一个 action,编写了相应的判断逻辑然后直接调用来进行判断的,但是这样就需要对源码进行部分修改,不适合当前需求。然后准备使用 YAQL 来编写判断逻辑时发现,YAQL 提供的相应方法并不能很好的完成判断操作。另外其实不管判断完成与否,只要输入的参数不满足输入要求,最终都会导致 workflow 的执行报 Error,所以只要前端做好输入值的限制就能保证 workflow 的正常使用,哪怕就算前端限制后,最后传到 workflow 的参数都还确实有问题,那么报错也是正常的,这正说明了用户的输入和使用是有问题的。

  • 取消保留时间中的 week

为了简化 workflow 模板的逻辑和用户的操作逻辑,其实针对创建内容的保留时间只保留 hour 和 day 就可以了,最小值为时最大值为天,已经完全能满足用户的需求了,没有必要再单独加一个 week,如果确实需要 week 的功能,那么直接在设置的时候在 day 这一栏加上 n*7 天即可。需要说明的一点是,为了简化逻辑,我们在模板中默认的将浮点数都强制四舍五入去掉了小数部分,所以对于小时和天来说都是整的,不存在半小时或者半天。

  • 更改注入 action 判断逻辑为 JS 判断逻辑

因为在进行删除操作前需要检查创建内容的保留时间,而使用 YAQL 来编写这部分的判断逻辑十分麻烦,所以目前的模板就选择了手动注入自定义 action 的方式,用 python 来编写了这部分逻辑,在 workflow 中直接调用 action。但是现在需要不修改 mistral 相关代码来实现,就不能再注入 action 了,所以改为使用 JS 来编写这部分判断逻辑(要在 workflow 模板中使用 JS 需要安装 pyv8,详见:https://confluence.ustack.com/display/~chenqian/install-pyv8

  • 创建 cron trigger 任务时的时间问题

在创建 cron trigger 任务的时候需要输入一个第一次执行时间,用户肯定会输入北京时间,但是在 mistral 里都是默认使用的 UTC 零时区的时间,这样就会导致执行时间会相差 8 小时,所以这一块可能需要由前端来进行限制,在用户输入北京时间后,在请求相应 API 之前减去 8 小时的时差。同时在获取到 cron trigger 显示在页面上时,也需要对其相应的创建时间、下一次执行时间、更新时间等全部加上 8 小时,这样在页面上看到的时间才是正常的。