提交 5c1bba33 编写于 作者: X xueli.xue

V1.3版本,阶段A:GLUE模式开关

上级 e6c239ec
# DROP TABLE IF EXISTS XXL_JOB_QRTZ_FIRED_TRIGGERS;
# DROP TABLE IF EXISTS XXL_JOB_QRTZ_PAUSED_TRIGGER_GRPS;
# DROP TABLE IF EXISTS XXL_JOB_QRTZ_SCHEDULER_STATE;
# DROP TABLE IF EXISTS XXL_JOB_QRTZ_LOCKS;
CREATE TABLE XXL_JOB_QRTZ_JOB_DETAILS CREATE TABLE XXL_JOB_QRTZ_JOB_DETAILS
( (
...@@ -160,6 +156,9 @@ CREATE TABLE `xxl_job_qrtz_trigger_info` ( ...@@ -160,6 +156,9 @@ CREATE TABLE `xxl_job_qrtz_trigger_info` (
`author` varchar(64) DEFAULT NULL COMMENT '作者', `author` varchar(64) DEFAULT NULL COMMENT '作者',
`alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件', `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
`alarm_threshold` int(11) DEFAULT NULL COMMENT '报警阀值(连续失败次数)', `alarm_threshold` int(11) DEFAULT NULL COMMENT '报警阀值(连续失败次数)',
`glue_switch` int(11) DEFAULT '0' COMMENT 'GLUE模式开关:0-否,1-是',
`glue_source` text COMMENT 'GLUE源代码',
`glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
); );
...@@ -180,5 +179,17 @@ CREATE TABLE `xxl_job_qrtz_trigger_log` ( ...@@ -180,5 +179,17 @@ CREATE TABLE `xxl_job_qrtz_trigger_log` (
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
); );
CREATE TABLE `xxl_job_qrtz_trigger_logglue` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_group` varchar(255) NOT NULL,
`job_name` varchar(255) NOT NULL,
`glue_source` text,
`glue_remark` varchar(128) NOT NULL,
`add_time` timestamp NULL DEFAULT NULL,
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ;
commit; commit;
...@@ -70,7 +70,7 @@ public class JobInfoController { ...@@ -70,7 +70,7 @@ public class JobInfoController {
@ResponseBody @ResponseBody
public ReturnT<String> add(String jobGroup, String jobName, String jobCron, String jobDesc, public ReturnT<String> add(String jobGroup, String jobName, String jobCron, String jobDesc,
String handler_address, String handler_name, String handler_params, String handler_address, String handler_name, String handler_params,
String author, String alarmEmail, int alarmThreshold) { String author, String alarmEmail, int alarmThreshold, int glueSwitch) {
// valid // valid
if (JobGroupEnum.match(jobGroup) == null) { if (JobGroupEnum.match(jobGroup) == null) {
...@@ -88,7 +88,7 @@ public class JobInfoController { ...@@ -88,7 +88,7 @@ public class JobInfoController {
if (StringUtils.isBlank(handler_address)) { if (StringUtils.isBlank(handler_address)) {
return new ReturnT<String>(500, "请输入“机器地址”"); return new ReturnT<String>(500, "请输入“机器地址”");
} }
if (StringUtils.isBlank(handler_name)) { if (glueSwitch==0 && StringUtils.isBlank(handler_name)) {
return new ReturnT<String>(500, "请输入“执行器”"); return new ReturnT<String>(500, "请输入“执行器”");
} }
if (StringUtils.isBlank(author)) { if (StringUtils.isBlank(author)) {
...@@ -127,6 +127,9 @@ public class JobInfoController { ...@@ -127,6 +127,9 @@ public class JobInfoController {
jobInfo.setAuthor(author); jobInfo.setAuthor(author);
jobInfo.setAlarmEmail(alarmEmail); jobInfo.setAlarmEmail(alarmEmail);
jobInfo.setAlarmThreshold(alarmThreshold); jobInfo.setAlarmThreshold(alarmThreshold);
jobInfo.setGlueSwitch(glueSwitch);
jobInfo.setGlueSource(null);
jobInfo.setGlueRemark(null);
xxlJobInfoDao.save(jobInfo); xxlJobInfoDao.save(jobInfo);
try { try {
...@@ -148,7 +151,7 @@ public class JobInfoController { ...@@ -148,7 +151,7 @@ public class JobInfoController {
@ResponseBody @ResponseBody
public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc, public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
String handler_address, String handler_name, String handler_params, String handler_address, String handler_name, String handler_params,
String author, String alarmEmail, int alarmThreshold) { String author, String alarmEmail, int alarmThreshold, int glueSwitch) {
// valid // valid
if (JobGroupEnum.match(jobGroup) == null) { if (JobGroupEnum.match(jobGroup) == null) {
...@@ -166,7 +169,7 @@ public class JobInfoController { ...@@ -166,7 +169,7 @@ public class JobInfoController {
if (StringUtils.isBlank(handler_address)) { if (StringUtils.isBlank(handler_address)) {
return new ReturnT<String>(500, "请输入“机器地址”"); return new ReturnT<String>(500, "请输入“机器地址”");
} }
if (StringUtils.isBlank(handler_name)) { if (glueSwitch==0 && StringUtils.isBlank(handler_name)) {
return new ReturnT<String>(500, "请输入“执行器”"); return new ReturnT<String>(500, "请输入“执行器”");
} }
if (StringUtils.isBlank(author)) { if (StringUtils.isBlank(author)) {
...@@ -192,6 +195,7 @@ public class JobInfoController { ...@@ -192,6 +195,7 @@ public class JobInfoController {
jobInfo.setAuthor(author); jobInfo.setAuthor(author);
jobInfo.setAlarmEmail(alarmEmail); jobInfo.setAlarmEmail(alarmEmail);
jobInfo.setAlarmThreshold(alarmThreshold); jobInfo.setAlarmThreshold(alarmThreshold);
jobInfo.setGlueSwitch(glueSwitch);
try { try {
// fresh quartz // fresh quartz
......
...@@ -24,6 +24,10 @@ public class XxlJobInfo { ...@@ -24,6 +24,10 @@ public class XxlJobInfo {
private String alarmEmail; // 报警邮件 private String alarmEmail; // 报警邮件
private int alarmThreshold; // 报警阀值 private int alarmThreshold; // 报警阀值
private int glueSwitch; // GLUE模式开关:0-否,1-是
private String glueSource; // GLUE源代码
private String glueRemark; // GLUE备注
// copy from quartz // copy from quartz
private String jobStatus; // 任务状态 【base on quartz】 private String jobStatus; // 任务状态 【base on quartz】
...@@ -131,12 +135,37 @@ public class XxlJobInfo { ...@@ -131,12 +135,37 @@ public class XxlJobInfo {
this.jobStatus = jobStatus; this.jobStatus = jobStatus;
} }
public int getGlueSwitch() {
return glueSwitch;
}
public void setGlueSwitch(int glueSwitch) {
this.glueSwitch = glueSwitch;
}
public String getGlueSource() {
return glueSource;
}
public void setGlueSource(String glueSource) {
this.glueSource = glueSource;
}
public String getGlueRemark() {
return glueRemark;
}
public void setGlueRemark(String glueRemark) {
this.glueRemark = glueRemark;
}
@Override @Override
public String toString() { public String toString() {
return "XxlJobInfo [id=" + id + ", jobGroup=" + jobGroup + ", jobName=" + jobName + ", jobCron=" + jobCron return "XxlJobInfo [id=" + id + ", jobGroup=" + jobGroup + ", jobName=" + jobName + ", jobCron=" + jobCron
+ ", jobDesc=" + jobDesc + ", jobClass=" + jobClass + ", jobData=" + jobData + ", addTime=" + addTime + ", jobDesc=" + jobDesc + ", jobClass=" + jobClass + ", jobData=" + jobData + ", addTime=" + addTime
+ ", updateTime=" + updateTime + ", author=" + author + ", alarmEmail=" + alarmEmail + ", updateTime=" + updateTime + ", author=" + author + ", alarmEmail=" + alarmEmail
+ ", alarmThreshold=" + alarmThreshold + ", jobStatus=" + jobStatus + "]"; + ", alarmThreshold=" + alarmThreshold + ", glueSwitch=" + glueSwitch + ", glueSource=" + glueSource
+ ", glueRemark=" + glueRemark + ", jobStatus=" + jobStatus + "]";
} }
} }
...@@ -19,6 +19,10 @@ ...@@ -19,6 +19,10 @@
<result column="author" property="author" /> <result column="author" property="author" />
<result column="alarm_email" property="alarmEmail" /> <result column="alarm_email" property="alarmEmail" />
<result column="alarm_threshold" property="alarmThreshold" /> <result column="alarm_threshold" property="alarmThreshold" />
<result column="glue_switch" property="glueSwitch" />
<result column="glue_source" property="glueSource" />
<result column="glue_remark" property="glueRemark" />
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
...@@ -33,7 +37,10 @@ ...@@ -33,7 +37,10 @@
t.update_time, t.update_time,
t.author, t.author,
t.alarm_email, t.alarm_email,
t.alarm_threshold t.alarm_threshold,
t.glue_switch,
t.glue_source,
t.glue_remark
</sql> </sql>
<select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobInfo"> <select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
...@@ -76,7 +83,10 @@ ...@@ -76,7 +83,10 @@
update_time, update_time,
author, author,
alarm_email, alarm_email,
alarm_threshold alarm_threshold,
glue_switch,
glue_source,
glue_remark
) VALUES ( ) VALUES (
#{jobGroup}, #{jobGroup},
#{jobName}, #{jobName},
...@@ -88,7 +98,10 @@ ...@@ -88,7 +98,10 @@
NOW(), NOW(),
#{author}, #{author},
#{alarmEmail}, #{alarmEmail},
#{alarmThreshold} #{alarmThreshold},
#{glueSwitch},
#{glueSource},
#{glueRemark}
); );
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID() SELECT LAST_INSERT_ID()
...@@ -111,7 +124,10 @@ ...@@ -111,7 +124,10 @@
update_time = NOW(), update_time = NOW(),
author = #{author}, author = #{author},
alarm_email = #{alarmEmail}, alarm_email = #{alarmEmail},
alarm_threshold = #{alarmThreshold} alarm_threshold = #{alarmThreshold},
glue_switch = #{glueSwitch},
glue_source = #{glueSource},
glue_remark = #{glueRemark}
WHERE job_group = #{jobGroup} WHERE job_group = #{jobGroup}
AND job_name = #{jobName} AND job_name = #{jobName}
</update> </update>
......
...@@ -78,6 +78,7 @@ ...@@ -78,6 +78,7 @@
<th name="author" >负责人</th> <th name="author" >负责人</th>
<th name="alarmEmail" >报警邮件</th> <th name="alarmEmail" >报警邮件</th>
<th name="alarmThreshold" >报警阀值</th> <th name="alarmThreshold" >报警阀值</th>
<th name="glueSwitch" >GLUE模式</th>
<th name="jobStatus" >状态</th> <th name="jobStatus" >状态</th>
<th>操作</th> <th>操作</th>
</tr> </tr>
...@@ -142,10 +143,16 @@ ...@@ -142,10 +143,16 @@
<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="200" ></div> <div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="200" ></div>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="col-sm-offset-3 col-sm-9"> <div class="col-sm-offset-3 col-sm-6">
<button type="submit" class="btn btn-primary" >保存</button> <button type="submit" class="btn btn-primary" >保存</button>
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button> <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
</div> </div>
<div class="col-sm-3">
<div class="checkbox">
<label><input type="checkbox" class="ifGLUE" >开启GLUE模式<font color="black">*</font></label>
<input type="hidden" name="glueSwitch" value="0" >
</div>
</div>
</div> </div>
</form> </form>
</div> </div>
...@@ -194,10 +201,16 @@ ...@@ -194,10 +201,16 @@
<div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="200" ></div> <div class="col-sm-4"><input type="text" class="form-control" name="alarmThreshold" placeholder="请输入“报警阈值”" maxlength="200" ></div>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="col-sm-offset-3 col-sm-9"> <div class="col-sm-offset-3 col-sm-6">
<button type="submit" class="btn btn-primary" >保存</button> <button type="submit" class="btn btn-primary" >保存</button>
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button> <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
</div> </div>
<div class="col-sm-3">
<div class="checkbox">
<label><input type="checkbox" class="ifGLUE" >开启GLUE模式<font color="black">*</font></label>
<input type="hidden" name="glueSwitch" value="0" >
</div>
</div>
</div> </div>
</form> </form>
</div> </div>
......
...@@ -8,10 +8,11 @@ $(function() { ...@@ -8,10 +8,11 @@ $(function() {
}); });
codeEditor.setValue( $("#demoCode").val() ); codeEditor.setValue( $("#demoCode").val() );
// editor height
var height = Math.max(document.documentElement.clientHeight, document.body.offsetHeight); var height = Math.max(document.documentElement.clientHeight, document.body.offsetHeight);
$(".CodeMirror").attr('style', 'height:'+ height +'px'); $(".CodeMirror").attr('style', 'height:'+ height +'px');
// code source save
$("#save").click(function() { $("#save").click(function() {
var codeSource = codeEditor.getValue(); var codeSource = codeEditor.getValue();
var codeRemark = $("#codeRemark").val(); var codeRemark = $("#codeRemark").val();
......
...@@ -61,6 +61,7 @@ $(function() { ...@@ -61,6 +61,7 @@ $(function() {
{ "data": 'author', "visible" : true}, { "data": 'author', "visible" : true},
{ "data": 'alarmEmail', "visible" : false}, { "data": 'alarmEmail', "visible" : false},
{ "data": 'alarmThreshold', "visible" : false}, { "data": 'alarmThreshold', "visible" : false},
{ "data": 'glueSwitch', "visible" : false},
{ {
"data": 'jobStatus', "data": 'jobStatus',
"visible" : true, "visible" : true,
...@@ -87,8 +88,13 @@ $(function() { ...@@ -87,8 +88,13 @@ $(function() {
} }
// log url // log url
var logUrl = base_url +'/joblog?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName; var logUrl = base_url +'/joblog?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName;
// log url // log url
var codeUrl = base_url +'/jobcode?id='+ row.id; var codeHtml = "";
if(row.glueSwitch != 0){
var codeUrl = base_url +'/jobcode?id='+ row.id;
codeHtml = '<button class="btn btn-warning btn-xs" type="button" onclick="javascript:window.open(\'' + codeUrl + '\')" >GLUE</button> '
}
// job data // job data
var jobDataMap = eval('(' + row.jobData + ')'); var jobDataMap = eval('(' + row.jobData + ')');
...@@ -100,18 +106,19 @@ $(function() { ...@@ -100,18 +106,19 @@ $(function() {
' jobDesc="'+ row.jobDesc +'" '+ ' jobDesc="'+ row.jobDesc +'" '+
' jobClass="'+ row.jobClass +'" '+ ' jobClass="'+ row.jobClass +'" '+
' jobData="'+ row.jobData +'" '+ ' jobData="'+ row.jobData +'" '+
' author="'+ row.author +'" '+
' alarmEmail="'+ row.alarmEmail +'" '+
' alarmThreshold="'+ row.alarmThreshold +'" '+
' handler_params="'+jobDataMap.handler_params +'" '+ ' handler_params="'+jobDataMap.handler_params +'" '+
' handler_address="'+ jobDataMap.handler_address +'" '+ ' handler_address="'+ jobDataMap.handler_address +'" '+
' handler_name="'+ jobDataMap.handler_name +'" '+ ' handler_name="'+ jobDataMap.handler_name +'" '+
' author="'+ row.author +'" '+
' alarmEmail="'+ row.alarmEmail +'" '+
' alarmThreshold="'+ row.alarmThreshold +'" '+
' glueSwitch="'+ row.glueSwitch +'" '+
'>'+ '>'+
'<button class="btn btn-primary btn-xs job_operate" type="job_trigger" type="button">执行</button> '+ '<button class="btn btn-primary btn-xs job_operate" type="job_trigger" type="button">执行</button> '+
pause_resume + pause_resume +
'<button class="btn btn-primary btn-xs" type="job_del" type="button" onclick="javascript:window.open(\'' + logUrl + '\')" >日志</button><br> '+ '<button class="btn btn-primary btn-xs" type="job_del" type="button" onclick="javascript:window.open(\'' + logUrl + '\')" >日志</button><br> '+
'<button class="btn btn-warning btn-xs update" type="button">编辑</button> '+ '<button class="btn btn-warning btn-xs update" type="button">编辑</button> '+
'<button class="btn btn-warning btn-xs" type="button" onclick="javascript:window.open(\'' + codeUrl + '\')" >GLUE</button> '+ codeHtml +
'<button class="btn btn-danger btn-xs job_operate" type="job_del" type="button">删除</button> '+ '<button class="btn btn-danger btn-xs job_operate" type="job_del" type="button">删除</button> '+
'</p>'; '</p>';
...@@ -318,6 +325,34 @@ $(function() { ...@@ -318,6 +325,34 @@ $(function() {
$(".remote_panel").show(); // remote $(".remote_panel").show(); // remote
}); });
// GLUE模式开启
$("#addModal .form .ifGLUE").click(function(){
var ifGLUE = $(this).is(':checked');
var $handler_name = $("#addModal .form input[name='handler_name']");
var $glueSwitch = $("#addModal .form input[name='glueSwitch']");
if (ifGLUE) {
$handler_name.val("");
$handler_name.attr("readonly","readonly");
$glueSwitch.val(1);
} else {
$handler_name.removeAttr("readonly");
$glueSwitch.val(0);
}
});
$("#updateModal .form .ifGLUE").click(function(){
var ifGLUE = $(this).is(':checked');
var $handler_name = $("#updateModal .form input[name='handler_name']");
var $glueSwitch = $("#updateModal .form input[name='glueSwitch']");
if (ifGLUE) {
$handler_name.val("");
$handler_name.attr("readonly","readonly");
$glueSwitch.val(1);
} else {
$handler_name.removeAttr("readonly");
$glueSwitch.val(0);
}
});
// 更新 // 更新
$("#job_list").on('click', '.update',function() { $("#job_list").on('click', '.update',function() {
$("#updateModal .form input[name='jobGroup']").val($(this).parent('p').attr("jobGroup")); $("#updateModal .form input[name='jobGroup']").val($(this).parent('p').attr("jobGroup"));
...@@ -330,6 +365,18 @@ $(function() { ...@@ -330,6 +365,18 @@ $(function() {
$("#updateModal .form input[name='author']").val($(this).parent('p').attr("author")); $("#updateModal .form input[name='author']").val($(this).parent('p').attr("author"));
$("#updateModal .form input[name='alarmEmail']").val($(this).parent('p').attr("alarmEmail")); $("#updateModal .form input[name='alarmEmail']").val($(this).parent('p').attr("alarmEmail"));
$("#updateModal .form input[name='alarmThreshold']").val($(this).parent('p').attr("alarmThreshold")); $("#updateModal .form input[name='alarmThreshold']").val($(this).parent('p').attr("alarmThreshold"));
$("#updateModal .form input[name='glueSwitch']").val($(this).parent('p').attr("glueSwitch"));
// GLUE check
var $glueSwitch = $("#updateModal .form input[name='glueSwitch']");
var $handler_name = $("#updateModal .form input[name='handler_name']");
if ($glueSwitch.val() != 0) {
$handler_name.attr("readonly","readonly");
$("#updateModal .form .ifGLUE").attr("checked", true);
} else {
$handler_name.removeAttr("readonly");
$("#updateModal .form .ifGLUE").attr("checked", false);
}
$('#updateModal').modal({backdrop: false, keyboard: false}).modal('show'); $('#updateModal').modal({backdrop: false, keyboard: false}).modal('show');
}); });
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册