jobinfo.index.1.js 15.6 KB
Newer Older
X
init  
xueli.xue 已提交
1 2
$(function() {
	// init date tables
X
xueli.xue 已提交
3 4 5 6 7
	var jobTable = $("#job_list").dataTable({
		"deferRender": true,
		"processing" : true, 
	    "serverSide": true,
		"ajax": {
X
xueli.xue 已提交
8
			url: base_url + "/jobinfo/pageList",
X
xueli.xue 已提交
9
			type:"post",
X
xueli.xue 已提交
10
	        data : function ( d ) {
X
xueli.xue 已提交
11 12
	        	var obj = {};
	        	obj.jobGroup = $('#jobGroup').val();
X
xueli.xue 已提交
13
	        	obj.jobDesc = $('#jobDesc').val();
X
xueli.xue 已提交
14 15
	        	obj.start = d.start;
	        	obj.length = d.length;
X
xueli.xue 已提交
16
                return obj;
X
xueli.xue 已提交
17 18
            }
	    },
X
xueli.xue 已提交
19 20
	    "searching": false,
	    "ordering": false,
X
xueli.xue 已提交
21 22 23
	    //"scrollX": true,	// X轴滚动条,取消自适应
	    "columns": [
	                { "data": 'id', "bSortable": false, "visible" : false},
X
xueli.xue 已提交
24 25
	                { 
	                	"data": 'jobGroup', 
26
	                	"visible" : false,
X
xueli.xue 已提交
27 28 29 30 31 32 33 34 35 36
	                	"render": function ( data, type, row ) {
	            			var groupMenu = $("#jobGroup").find("option");
	            			for ( var index in $("#jobGroup").find("option")) {
	            				if ($(groupMenu[index]).attr('value') == data) {
									return $(groupMenu[index]).html();
								}
							}
	            			return data;
	            		}
            		},
X
xueli.xue 已提交
37
	                { "data": 'jobName', "visible" : false},
38
	                { "data": 'jobDesc', "visible" : true},
X
xueli.xue 已提交
39
	                { "data": 'jobCron', "visible" : true},
40
	                { "data": 'jobClass', "visible" : false},
41 42
	                { "data": 'executorAddress', "visible" : false},
	                { "data": 'executorParam', "visible" : false},
X
xueli.xue 已提交
43 44
	                { 
	                	"data": 'addTime', 
X
xueli.xue 已提交
45
	                	"visible" : false, 
X
xueli.xue 已提交
46 47 48 49 50 51
	                	"render": function ( data, type, row ) {
	                		return data?moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss"):"";
	                	}
	                },
	                { 
	                	"data": 'updateTime', 
X
xueli.xue 已提交
52
	                	"visible" : false, 
X
xueli.xue 已提交
53 54 55 56
	                	"render": function ( data, type, row ) {
	                		return data?moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss"):"";
	                	}
	                },
X
xueli.xue 已提交
57 58 59
	                { "data": 'author', "visible" : true},
	                { "data": 'alarmEmail', "visible" : false},
	                { "data": 'alarmThreshold', "visible" : false},
60
	                { "data": 'glueSwitch', "visible" : false},
X
xueli.xue 已提交
61 62 63 64 65 66 67
	                { 
	                	"data": 'jobStatus', 
	                	"visible" : true,
	                	"render": function ( data, type, row ) {
	                		if ('NORMAL' == data) {
	                			return '<small class="label label-success" ><i class="fa fa-clock-o"></i>'+ data +'</small>'; 
							} else if ('PAUSED' == data){
68 69 70
								return '<small class="label label-default" title="暂停" ><i class="fa fa-clock-o"></i>'+ data +'</small>'; 
							} else if ('BLOCKED' == data){
								return '<small class="label label-default" title="阻塞[串行]" ><i class="fa fa-clock-o"></i>'+ data +'</small>'; 
X
xueli.xue 已提交
71 72 73 74 75
							}
	                		return data;
	                	}
	                },
	                { "data": '操作' ,
X
xueli.xue 已提交
76 77 78 79 80
	                	"render": function ( data, type, row ) {
	                		return function(){
	                			// status
	                			var pause_resume = "";
	                			if ('NORMAL' == row.jobStatus) {
X
xueli.xue 已提交
81
	                				pause_resume = '<button class="btn btn-primary btn-xs job_operate" type="job_pause" type="button">暂停</button>  ';
X
xueli.xue 已提交
82
								} else if ('PAUSED' == row.jobStatus){
X
xueli.xue 已提交
83
									pause_resume = '<button class="btn btn-primary btn-xs job_operate" type="job_resume" type="button">恢复</button>  ';
X
xueli.xue 已提交
84 85
								}
	                			// log url
X
xueli.xue 已提交
86
	                			var logUrl = base_url +'/joblog?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName;
87
	                			
X
xueli.xue 已提交
88
	                			// log url
89 90
	                			var codeBtn = "";
	                			if(row.glueSwitch > 0){
91
	                				var codeUrl = base_url +'/jobcode?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName;
92
	                				codeBtn = '<button class="btn btn-warning btn-xs" type="button" onclick="javascript:window.open(\'' + codeUrl + '\')" >GLUE</button>  '
93
	                			}
X
xueli.xue 已提交
94
	                			
X
xueli.xue 已提交
95 96 97 98 99 100
	                			var html = '<p id="'+ row.id +'" '+
	                							' jobGroup="'+ row.jobGroup +'" '+
	                							' jobName="'+ row.jobName +'" '+
	                							' jobCron="'+ row.jobCron +'" '+
	                							' jobDesc="'+ row.jobDesc +'" '+
	                							' jobClass="'+ row.jobClass +'" '+
101 102
	                							' executorAddress="'+row.executorAddress +'" '+
	                							' executorParam="'+ row.executorParam +'" '+
103 104 105 106
	                							' author="'+ row.author +'" '+
	                							' alarmEmail="'+ row.alarmEmail +'" '+
	                							' alarmThreshold="'+ row.alarmThreshold +'" '+
	                							' glueSwitch="'+ row.glueSwitch +'" '+
X
xueli.xue 已提交
107
	                							'>'+
X
xueli.xue 已提交
108 109 110 111
										'<button class="btn btn-primary btn-xs job_operate" type="job_trigger" type="button">执行</button>  '+
										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-warning btn-xs update" type="button">编辑</button>  '+
112
										codeBtn +
X
xueli.xue 已提交
113
								  		'<button class="btn btn-danger btn-xs job_operate" type="job_del" type="button">删除</button>  '+
X
xueli.xue 已提交
114 115 116 117 118 119 120 121
									'</p>';
									
	                			
	                			return html;
	                		};
	                	}
	                }
	            ],
X
init  
xueli.xue 已提交
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
		"language" : {
			"sProcessing" : "处理中...",
			"sLengthMenu" : "每页 _MENU_ 条记录",
			"sZeroRecords" : "没有匹配结果",
			"sInfo" : "第 _PAGE_ 页 ( 总共 _PAGES_ 页 )",
			"sInfoEmpty" : "无记录",
			"sInfoFiltered" : "(由 _MAX_ 项结果过滤)",
			"sInfoPostFix" : "",
			"sSearch" : "搜索:",
			"sUrl" : "",
			"sEmptyTable" : "表中数据为空",
			"sLoadingRecords" : "载入中...",
			"sInfoThousands" : ",",
			"oPaginate" : {
				"sFirst" : "首页",
				"sPrevious" : "上页",
				"sNext" : "下页",
				"sLast" : "末页"
			},
			"oAria" : {
				"sSortAscending" : ": 以升序排列此列",
				"sSortDescending" : ": 以降序排列此列"
			}
		}
X
init  
xueli.xue 已提交
146
	});
X
init  
xueli.xue 已提交
147
	
X
xueli.xue 已提交
148 149 150 151 152
	// 搜索按钮
	$('#searchBtn').on('click', function(){
		jobTable.fnDraw();
	});
	
X
init  
xueli.xue 已提交
153
	// job operate
X
xueli.xue 已提交
154
	$("#job_list").on('click', '.job_operate',function() {
X
init  
xueli.xue 已提交
155 156 157 158 159
		var typeName;
		var url;
		var type = $(this).attr("type");
		if ("job_pause" == type) {
			typeName = "暂停";
X
xueli.xue 已提交
160
			url = base_url + "/jobinfo/pause";
X
init  
xueli.xue 已提交
161 162
		} else if ("job_resume" == type) {
			typeName = "恢复";
X
xueli.xue 已提交
163
			url = base_url + "/jobinfo/resume";
X
init  
xueli.xue 已提交
164 165
		} else if ("job_del" == type) {
			typeName = "删除";
X
xueli.xue 已提交
166
			url = base_url + "/jobinfo/remove";
X
init  
xueli.xue 已提交
167
		} else if ("job_trigger" == type) {
X
xueli.xue 已提交
168 169
			typeName = "执行";
			url = base_url + "/jobinfo/trigger";
X
init  
xueli.xue 已提交
170 171 172 173
		} else {
			return;
		}
		
X
xueli.xue 已提交
174 175
		var jobGroup = $(this).parent('p').attr("jobGroup");
		var jobName = $(this).parent('p').attr("jobName");
X
init  
xueli.xue 已提交
176 177 178 179 180 181
		
		ComConfirm.show("确认" + typeName + "?", function(){
			$.ajax({
				type : 'POST',
				url : url,
				data : {
X
xueli.xue 已提交
182 183
					"jobGroup" : jobGroup,
					"jobName"  : jobName
X
init  
xueli.xue 已提交
184 185 186 187 188
				},
				dataType : "json",
				success : function(data){
					if (data.code == 200) {
						ComAlert.show(1, typeName + "成功", function(){
X
xueli.xue 已提交
189 190
							//window.location.reload();
							jobTable.fnDraw();
X
init  
xueli.xue 已提交
191 192 193 194 195 196 197 198 199
						});
					} else {
						ComAlert.show(1, typeName + "失败");
					}
				},
			});
		});
	});
	
X
init  
xueli.xue 已提交
200 201 202 203 204 205 206
	// jquery.validate 自定义校验 “英文字母开头,只含有英文字母、数字和下划线”
	jQuery.validator.addMethod("myValid01", function(value, element) {
		var length = value.length;
		var valid = /^[a-zA-Z][a-zA-Z0-9_]*$/;
		return this.optional(element) || valid.test(value);
	}, "只支持英文字母开头,只含有英文字母、数字和下划线");
	
X
init  
xueli.xue 已提交
207 208
	// 新增
	$(".add").click(function(){
X
init  
xueli.xue 已提交
209
		$('#addModal').modal({backdrop: false, keyboard: false}).modal('show');
X
init  
xueli.xue 已提交
210 211 212 213 214
	});
	var addModalValidate = $("#addModal .form").validate({
		errorElement : 'span',  
        errorClass : 'help-block',
        focusInvalid : true,  
X
xueli.xue 已提交
215 216 217 218 219 220 221
        rules : {
			jobDesc : {
				required : true,
				maxlength: 50
			},
            jobCron : {
            	required : true
X
init  
xueli.xue 已提交
222
            },
223
            executorAddress : {
X
xueli.xue 已提交
224
            	required : true
X
init  
xueli.xue 已提交
225
            },
226
            alarmEmail : {
X
xueli.xue 已提交
227
            	required : true
X
xueli.xue 已提交
228
            },
229
            alarmThreshold : {
X
xueli.xue 已提交
230 231
            	required : true ,
            	digits:true
X
xueli.xue 已提交
232 233 234 235
            },
			author : {
				required : true
			}
X
init  
xueli.xue 已提交
236 237
        }, 
        messages : {  
X
xueli.xue 已提交
238
            jobDesc : {
X
xueli.xue 已提交
239 240 241 242 243
            	required :"请输入“名称”."
            },
            jobCron : {
            	required :"请输入“Cron”."
            },
244
            executorAddress : {
X
xueli.xue 已提交
245
            	required :"请输入“执行器地址”."
X
init  
xueli.xue 已提交
246
            },
247
            alarmEmail : {
X
xueli.xue 已提交
248
            	required : "请输入“报警邮件”."
X
xueli.xue 已提交
249
            },
250
            alarmThreshold : {
X
xueli.xue 已提交
251 252
            	required : "请输入“报警阈值”."  ,
            	digits:"阀值应该为整数."
X
xueli.xue 已提交
253 254 255
            },
            author : {
            	required : "请输入“负责人”."
X
init  
xueli.xue 已提交
256
            }
X
xueli.xue 已提交
257
        },
X
init  
xueli.xue 已提交
258 259 260 261 262 263 264 265 266 267 268
		highlight : function(element) {  
            $(element).closest('.form-group').addClass('has-error');  
        },
        success : function(label) {  
            label.closest('.form-group').removeClass('has-error');  
            label.remove();  
        },
        errorPlacement : function(error, element) {  
            element.parent('div').append(error);  
        },
        submitHandler : function(form) {
X
xueli.xue 已提交
269 270
        	$.post(base_url + "/jobinfo/add",  $("#addModal .form").serialize(), function(data, status) {
    			if (data.code == "200") {
271 272
    				ComAlert.show(1, "新增任务成功", function(){
    					window.location.reload();
X
xueli.xue 已提交
273 274 275 276 277 278 279 280 281
    				});
    			} else {
    				if (data.msg) {
    					ComAlert.show(2, data.msg);
    				} else {
    					ComAlert.show(2, "新增失败");
    				}
    			}
    		});
X
init  
xueli.xue 已提交
282 283 284
		}
	});
	$("#addModal").on('hide.bs.modal', function () {
285
		$("#addModal .form")[0].reset();
286 287
		addModalValidate.resetForm();
		$("#addModal .form .form-group").removeClass("has-error");
288
		$(".remote_panel").show();	// remote
X
init  
xueli.xue 已提交
289 290 291
	});
	
	// 更新
X
xueli.xue 已提交
292
	$("#job_list").on('click', '.update',function() {
X
xueli.xue 已提交
293 294

		// base data
295 296 297
		$("#updateModal .form input[name='jobGroup']").val($(this).parent('p').attr("jobGroup"));
		$("#updateModal .form input[name='jobName']").val($(this).parent('p').attr("jobName"));
		$("#updateModal .form input[name='jobDesc']").val($(this).parent('p').attr("jobDesc"));
X
xueli.xue 已提交
298
		$("#updateModal .form input[name='jobCron']").val($(this).parent('p').attr("jobCron"));
299 300
		$("#updateModal .form input[name='executorAddress']").val($(this).parent('p').attr("executorAddress"));
		$("#updateModal .form input[name='executorParam']").val($(this).parent('p').attr("executorParam"));
301 302 303
		$("#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='alarmThreshold']").val($(this).parent('p').attr("alarmThreshold"));
304 305 306 307 308 309 310 311 312

		// job group selected
		$("#updateModal .form select[name='jobGroupTitle']").find("option[value='" + $(this).parent('p').attr("jobGroup") + "']").attr("selected",true);

		// job group selected
		$("#updateModal .form select[name='glueSwitch']").find("option[value='" + $(this).parent('p').attr("glueSwitch") + "']").attr("selected",true);

		// generate job key
		$("#updateModal .form input[name='jobKey']").val( $(this).parent('p').attr("jobGroup") + "_" + $(this).parent('p').attr("jobName") );
X
xueli.xue 已提交
313

314 315
		// GLUE check
		var $glueSwitch = $("#updateModal .form input[name='glueSwitch']");
X
xueli.xue 已提交
316
		var $executorHandler = $("#updateModal .form input[name='executorHandler']");
317
		if ($glueSwitch.val() != 0) {
X
xueli.xue 已提交
318
			$executorHandler.attr("readonly","readonly");
319 320
			$("#updateModal .form .ifGLUE").attr("checked", true);
		} else {
X
xueli.xue 已提交
321
			$executorHandler.removeAttr("readonly");
322 323
			$("#updateModal .form .ifGLUE").attr("checked", false);
		}
324
		
X
init  
xueli.xue 已提交
325
		$('#updateModal').modal({backdrop: false, keyboard: false}).modal('show');
X
init  
xueli.xue 已提交
326 327 328 329
	});
	var updateModalValidate = $("#updateModal .form").validate({
		errorElement : 'span',  
        errorClass : 'help-block',
X
xueli.xue 已提交
330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375
        focusInvalid : true,

		rules : {
			jobDesc : {
				required : true,
				maxlength: 50
			},
			jobCron : {
				required : true
			},
			executorAddress : {
				required : true
			},
			alarmEmail : {
				required : true
			},
			alarmThreshold : {
				required : true ,
				digits:true
			},
			author : {
				required : true
			}
		},
		messages : {
			jobDesc : {
				required :"请输入“名称”."
			},
			jobCron : {
				required :"请输入“Cron”."
			},
			executorAddress : {
				required :"请输入“执行器地址”."
			},
			alarmEmail : {
				required : "请输入“报警邮件”."
			},
			alarmThreshold : {
				required : "请输入“报警阈值”."  ,
				digits:"阀值应该为整数."
			},
			author : {
				required : "请输入“负责人”."
			}
		},
		highlight : function(element) {
X
init  
xueli.xue 已提交
376 377 378 379 380 381 382 383 384 385
            $(element).closest('.form-group').addClass('has-error');  
        },
        success : function(label) {  
            label.closest('.form-group').removeClass('has-error');  
            label.remove();  
        },
        errorPlacement : function(error, element) {  
            element.parent('div').append(error);  
        },
        submitHandler : function(form) {
386 387

			// post
388
    		$.post(base_url + "/jobinfo/reschedule", $("#updateModal .form").serialize(), function(data, status) {
X
init  
xueli.xue 已提交
389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405
    			if (data.code == "200") {
    				ComAlert.show(1, "更新成功", function(){
    					window.location.reload();
    				});
    			} else {
    				if (data.msg) {
    					ComAlert.show(2, data.msg);
					} else {
						ComAlert.show(2, "更新失败");
					}
    			}
    		});
		}
	});
	$("#updateModal").on('hide.bs.modal', function () {
		$("#updateModal .form")[0].reset()
	});
406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423

	// GLUE模式开启
	/*
	 $("#addModal .form .ifGLUE").click(function(){
         var ifGLUE = $(this).is(':checked');
         var $executorHandler = $("#addModal .form input[name='executorHandler']");
         var $glueSwitch = $("#addModal .form input[name='glueSwitch']");
         if (ifGLUE) {
         $executorHandler.val("");
         $executorHandler.attr("readonly","readonly");
         $glueSwitch.val(1);
         } else {
         $executorHandler.removeAttr("readonly");
         $glueSwitch.val(0);
         }
	 });
	 */

X
xueli.xue 已提交
424 425 426 427 428 429 430 431 432 433 434 435 436 437 438
	/*
	// 新增-添加参数
	$("#addModal .addParam").on('click', function () {
		var html = '<div class="form-group newParam">'+
				'<label for="lastname" class="col-sm-2 control-label">参数&nbsp;<button class="btn btn-danger btn-xs removeParam" type="button">移除</button></label>'+
				'<div class="col-sm-4"><input type="text" class="form-control" name="key" placeholder="请输入参数key[将会强转为String]" maxlength="200" /></div>'+
				'<div class="col-sm-6"><input type="text" class="form-control" name="value" placeholder="请输入参数value[将会强转为String]" maxlength="200" /></div>'+
			'</div>';
		$(this).parents('.form-group').parent().append(html);
		
		$("#addModal .removeParam").on('click', function () {
			$(this).parents('.form-group').remove();
		});
	});
	*/
439

X
init  
xueli.xue 已提交
440
});