Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
50b1c679
提交
50b1c679
authored
8月 18, 2018
作者:
xuxueli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
RM
上级
7a0f63f7
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
819 行增加
和
817 行删除
+819
-817
RemoteHttpJobBean.java
...ava/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
+33
-32
XxlJobLog.java
...src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java
+155
-155
XxlJobLogMapper.xml
...min/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
+217
-216
joblog.index.1.js
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js
+367
-367
IJobHandler.java
...e/src/main/java/com/xxl/job/core/handler/IJobHandler.java
+47
-47
没有找到文件。
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
浏览文件 @
50b1c679
package
com
.
xxl
.
job
.
admin
.
core
.
jobbean
;
import
com.xxl.job.admin.core.thread.JobTriggerPoolHelper
;
import
org.quartz.JobExecutionContext
;
import
org.quartz.JobExecutionException
;
import
org.quartz.JobKey
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.scheduling.quartz.QuartzJobBean
;
/**
* http job bean
* “@DisallowConcurrentExecution” diable concurrent, thread size can not be only one, better given more
* @author xuxueli 2015-12-17 18:20:34
*/
//@DisallowConcurrentExecution
public
class
RemoteHttpJobBean
extends
QuartzJobBean
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
RemoteHttpJobBean
.
class
);
@Override
protected
void
executeInternal
(
JobExecutionContext
context
)
throws
JobExecutionException
{
// load jobId
JobKey
jobKey
=
context
.
getTrigger
().
getJobKey
();
Integer
jobId
=
Integer
.
valueOf
(
jobKey
.
getName
());
// trigger
//XxlJobTrigger.trigger(jobId);
JobTriggerPoolHelper
.
trigger
(
jobId
,
-
1
);
}
package
com
.
xxl
.
job
.
admin
.
core
.
jobbean
;
import
com.xxl.job.admin.core.thread.JobTriggerPoolHelper
;
import
org.quartz.JobExecutionContext
;
import
org.quartz.JobExecutionException
;
import
org.quartz.JobKey
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.scheduling.quartz.QuartzJobBean
;
/**
* http job bean
* “@DisallowConcurrentExecution” diable concurrent, thread size can not be only one, better given more
* @author xuxueli 2015-12-17 18:20:34
*/
//@DisallowConcurrentExecution
public
class
RemoteHttpJobBean
extends
QuartzJobBean
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
RemoteHttpJobBean
.
class
);
@Override
protected
void
executeInternal
(
JobExecutionContext
context
)
throws
JobExecutionException
{
// load jobId
JobKey
jobKey
=
context
.
getTrigger
().
getJobKey
();
Integer
jobId
=
Integer
.
valueOf
(
jobKey
.
getName
());
// trigger
//XxlJobTrigger.trigger(jobId);
JobTriggerPoolHelper
.
trigger
(
jobId
,
-
1
);
}
}
\ No newline at end of file
xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java
浏览文件 @
50b1c679
package
com
.
xxl
.
job
.
admin
.
core
.
model
;
import
java.util.Date
;
/**
* xxl-job log, used to track trigger process
* @author xuxueli 2015-12-19 23:19:09
*/
public
class
XxlJobLog
{
private
int
id
;
// job info
private
int
jobGroup
;
private
int
jobId
;
// glueType
private
String
glueType
;
// execute info
private
String
executorAddress
;
private
String
executorHandler
;
private
String
executorParam
;
private
int
executorFailRetryCount
;
// trigger info
private
Date
triggerTime
;
private
int
triggerCode
;
private
String
triggerMsg
;
// handle info
private
Date
handleTime
;
private
int
handleCode
;
private
String
handleMsg
;
public
int
getId
()
{
return
id
;
}
public
void
setId
(
int
id
)
{
this
.
id
=
id
;
}
public
int
getJobGroup
()
{
return
jobGroup
;
}
public
void
setJobGroup
(
int
jobGroup
)
{
this
.
jobGroup
=
jobGroup
;
}
public
int
getJobId
()
{
return
jobId
;
}
public
void
setJobId
(
int
jobId
)
{
this
.
jobId
=
jobId
;
}
public
String
getGlueType
()
{
return
glueType
;
}
public
void
setGlueType
(
String
glueType
)
{
this
.
glueType
=
glueType
;
}
public
String
getExecutorAddress
()
{
return
executorAddress
;
}
public
void
setExecutorAddress
(
String
executorAddress
)
{
this
.
executorAddress
=
executorAddress
;
}
public
String
getExecutorHandler
()
{
return
executorHandler
;
}
public
void
setExecutorHandler
(
String
executorHandler
)
{
this
.
executorHandler
=
executorHandler
;
}
public
String
getExecutorParam
()
{
return
executorParam
;
}
public
void
setExecutorParam
(
String
executorParam
)
{
this
.
executorParam
=
executorParam
;
}
public
int
getExecutorFailRetryCount
()
{
return
executorFailRetryCount
;
}
public
void
setExecutorFailRetryCount
(
int
executorFailRetryCount
)
{
this
.
executorFailRetryCount
=
executorFailRetryCount
;
}
public
Date
getTriggerTime
()
{
return
triggerTime
;
}
public
void
setTriggerTime
(
Date
triggerTime
)
{
this
.
triggerTime
=
triggerTime
;
}
public
int
getTriggerCode
()
{
return
triggerCode
;
}
public
void
setTriggerCode
(
int
triggerCode
)
{
this
.
triggerCode
=
triggerCode
;
}
public
String
getTriggerMsg
()
{
return
triggerMsg
;
}
public
void
setTriggerMsg
(
String
triggerMsg
)
{
// plugin
if
(
triggerMsg
!=
null
&&
triggerMsg
.
length
()>
2000
)
{
triggerMsg
=
triggerMsg
.
substring
(
0
,
2000
);
}
this
.
triggerMsg
=
triggerMsg
;
}
public
Date
getHandleTime
()
{
return
handleTime
;
}
public
void
setHandleTime
(
Date
handleTime
)
{
this
.
handleTime
=
handleTime
;
}
public
int
getHandleCode
()
{
return
handleCode
;
}
public
void
setHandleCode
(
int
handleCode
)
{
this
.
handleCode
=
handleCode
;
}
public
String
getHandleMsg
()
{
return
handleMsg
;
}
public
void
setHandleMsg
(
String
handleMsg
)
{
// plugin
if
(
handleMsg
!=
null
&&
handleMsg
.
length
()>
2000
)
{
handleMsg
=
handleMsg
.
substring
(
0
,
2000
);
}
this
.
handleMsg
=
handleMsg
;
}
}
package
com
.
xxl
.
job
.
admin
.
core
.
model
;
import
java.util.Date
;
/**
* xxl-job log, used to track trigger process
* @author xuxueli 2015-12-19 23:19:09
*/
public
class
XxlJobLog
{
private
int
id
;
// job info
private
int
jobGroup
;
private
int
jobId
;
// glueType
private
String
glueType
;
// execute info
private
String
executorAddress
;
private
String
executorHandler
;
private
String
executorParam
;
private
int
executorFailRetryCount
;
// trigger info
private
Date
triggerTime
;
private
int
triggerCode
;
private
String
triggerMsg
;
// handle info
private
Date
handleTime
;
private
int
handleCode
;
private
String
handleMsg
;
public
int
getId
()
{
return
id
;
}
public
void
setId
(
int
id
)
{
this
.
id
=
id
;
}
public
int
getJobGroup
()
{
return
jobGroup
;
}
public
void
setJobGroup
(
int
jobGroup
)
{
this
.
jobGroup
=
jobGroup
;
}
public
int
getJobId
()
{
return
jobId
;
}
public
void
setJobId
(
int
jobId
)
{
this
.
jobId
=
jobId
;
}
public
String
getGlueType
()
{
return
glueType
;
}
public
void
setGlueType
(
String
glueType
)
{
this
.
glueType
=
glueType
;
}
public
String
getExecutorAddress
()
{
return
executorAddress
;
}
public
void
setExecutorAddress
(
String
executorAddress
)
{
this
.
executorAddress
=
executorAddress
;
}
public
String
getExecutorHandler
()
{
return
executorHandler
;
}
public
void
setExecutorHandler
(
String
executorHandler
)
{
this
.
executorHandler
=
executorHandler
;
}
public
String
getExecutorParam
()
{
return
executorParam
;
}
public
void
setExecutorParam
(
String
executorParam
)
{
this
.
executorParam
=
executorParam
;
}
public
int
getExecutorFailRetryCount
()
{
return
executorFailRetryCount
;
}
public
void
setExecutorFailRetryCount
(
int
executorFailRetryCount
)
{
this
.
executorFailRetryCount
=
executorFailRetryCount
;
}
public
Date
getTriggerTime
()
{
return
triggerTime
;
}
public
void
setTriggerTime
(
Date
triggerTime
)
{
this
.
triggerTime
=
triggerTime
;
}
public
int
getTriggerCode
()
{
return
triggerCode
;
}
public
void
setTriggerCode
(
int
triggerCode
)
{
this
.
triggerCode
=
triggerCode
;
}
public
String
getTriggerMsg
()
{
return
triggerMsg
;
}
public
void
setTriggerMsg
(
String
triggerMsg
)
{
// plugin
if
(
triggerMsg
!=
null
&&
triggerMsg
.
length
()>
2000
)
{
triggerMsg
=
triggerMsg
.
substring
(
0
,
2000
);
}
this
.
triggerMsg
=
triggerMsg
;
}
public
Date
getHandleTime
()
{
return
handleTime
;
}
public
void
setHandleTime
(
Date
handleTime
)
{
this
.
handleTime
=
handleTime
;
}
public
int
getHandleCode
()
{
return
handleCode
;
}
public
void
setHandleCode
(
int
handleCode
)
{
this
.
handleCode
=
handleCode
;
}
public
String
getHandleMsg
()
{
return
handleMsg
;
}
public
void
setHandleMsg
(
String
handleMsg
)
{
// plugin
if
(
handleMsg
!=
null
&&
handleMsg
.
length
()>
2000
)
{
handleMsg
=
handleMsg
.
substring
(
0
,
2000
);
}
this
.
handleMsg
=
handleMsg
;
}
}
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
浏览文件 @
50b1c679
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.xxl.job.admin.dao.XxlJobLogDao"
>
<resultMap
id=
"XxlJobLog"
type=
"com.xxl.job.admin.core.model.XxlJobLog"
>
<result
column=
"id"
property=
"id"
/>
<result
column=
"job_group"
property=
"jobGroup"
/>
<result
column=
"job_id"
property=
"jobId"
/>
<result
column=
"glue_type"
property=
"glueType"
/>
<result
column=
"executor_address"
property=
"executorAddress"
/>
<result
column=
"executor_handler"
property=
"executorHandler"
/>
<result
column=
"executor_param"
property=
"executorParam"
/>
<result
column=
"executor_fail_retry_count"
property=
"executorFailRetryCount"
/>
<result
column=
"trigger_time"
property=
"triggerTime"
/>
<result
column=
"trigger_code"
property=
"triggerCode"
/>
<result
column=
"trigger_msg"
property=
"triggerMsg"
/>
<result
column=
"handle_time"
property=
"handleTime"
/>
<result
column=
"handle_code"
property=
"handleCode"
/>
<result
column=
"handle_msg"
property=
"handleMsg"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
t.id,
t.job_group,
t.job_id,
t.glue_type,
t.executor_address,
t.executor_handler,
t.executor_param,
t.executor_fail_retry_count,
t.trigger_time,
t.trigger_code,
t.trigger_msg,
t.handle_time,
t.handle_code,
t.handle_msg
</sql>
<select
id=
"pageList"
resultMap=
"XxlJobLog"
>
SELECT
<include
refid=
"Base_Column_List"
/>
FROM XXL_JOB_QRTZ_TRIGGER_LOG AS t
<trim
prefix=
"WHERE"
prefixOverrides=
"AND | OR"
>
<if
test=
"jobGroup gt 0"
>
AND t.job_group = #{jobGroup}
</if>
<if
test=
"jobId gt 0"
>
AND t.job_id = #{jobId}
</if>
<if
test=
"triggerTimeStart != null"
>
AND t.trigger_time
<![CDATA[ >= ]]>
#{triggerTimeStart}
</if>
<if
test=
"triggerTimeEnd != null"
>
AND t.trigger_time
<![CDATA[ <= ]]>
#{triggerTimeEnd}
</if>
<if
test=
"logStatus == 1"
>
AND t.handle_code = 200
</if>
<if
test=
"logStatus == 2"
>
AND (
t.trigger_code NOT IN (0, 200) OR
t.handle_code NOT IN (0, 200)
)
</if>
<if
test=
"logStatus == 3"
>
AND t.trigger_code = 200
AND t.handle_code = 0
</if>
</trim>
ORDER BY id DESC
LIMIT #{offset}, #{pagesize}
</select>
<select
id=
"pageListCount"
resultType=
"int"
>
SELECT count(1)
FROM XXL_JOB_QRTZ_TRIGGER_LOG AS t
<trim
prefix=
"WHERE"
prefixOverrides=
"AND | OR"
>
<if
test=
"jobGroup gt 0"
>
AND t.job_group = #{jobGroup}
</if>
<if
test=
"jobId gt 0"
>
AND t.job_id = #{jobId}
</if>
<if
test=
"triggerTimeStart != null"
>
AND t.trigger_time
<![CDATA[ >= ]]>
#{triggerTimeStart}
</if>
<if
test=
"triggerTimeEnd != null"
>
AND t.trigger_time
<![CDATA[ <= ]]>
#{triggerTimeEnd}
</if>
<if
test=
"logStatus == 1"
>
AND t.handle_code = 200
</if>
<if
test=
"logStatus == 2"
>
AND (
t.trigger_code NOT IN (0, 200) OR
t.handle_code NOT IN (0, 200)
)
</if>
<if
test=
"logStatus == 3"
>
AND t.trigger_code = 200
AND t.handle_code = 0
</if>
</trim>
</select>
<select
id=
"load"
parameterType=
"java.lang.Integer"
resultMap=
"XxlJobLog"
>
SELECT
<include
refid=
"Base_Column_List"
/>
FROM XXL_JOB_QRTZ_TRIGGER_LOG AS t
WHERE t.id = #{id}
</select>
<insert
id=
"save"
parameterType=
"com.xxl.job.admin.core.model.XxlJobLog"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
INSERT INTO XXL_JOB_QRTZ_TRIGGER_LOG (
`job_group`,
`job_id`,
`trigger_code`,
`handle_code`
) VALUES (
#{jobGroup},
#{jobId},
#{triggerCode},
#{handleCode}
);
<!--<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID()
</selectKey>-->
</insert>
<update
id=
"updateTriggerInfo"
>
UPDATE XXL_JOB_QRTZ_TRIGGER_LOG
SET
`glue_type`= #{glueType},
`trigger_time`= #{triggerTime},
`trigger_code`= #{triggerCode},
`trigger_msg`= #{triggerMsg},
`executor_address`= #{executorAddress},
`executor_handler`=#{executorHandler},
`executor_param`= #{executorParam},
`executor_fail_retry_count`= #{executorFailRetryCount}
WHERE `id`= #{id}
</update>
<update
id=
"updateHandleInfo"
>
UPDATE XXL_JOB_QRTZ_TRIGGER_LOG
SET
`handle_time`= #{handleTime},
`handle_code`= #{handleCode},
`handle_msg`= #{handleMsg}
WHERE `id`= #{id}
</update>
<delete
id=
"delete"
>
delete from XXL_JOB_QRTZ_TRIGGER_LOG
WHERE job_id = #{jobId}
</delete>
<select
id=
"triggerCountByHandleCode"
resultType=
"int"
>
SELECT count(1)
FROM XXL_JOB_QRTZ_TRIGGER_LOG AS t
<trim
prefix=
"WHERE"
prefixOverrides=
"AND | OR"
>
<if
test=
"handleCode gt 0"
>
AND t.handle_code = #{handleCode}
</if>
</trim>
</select>
<select
id=
"triggerCountByDay"
resultType=
"java.util.Map"
>
SELECT
DATE_FORMAT(trigger_time,'%Y-%m-%d') triggerDay,
COUNT(handle_code) triggerDayCount,
SUM(CASE WHEN (trigger_code = 200 and handle_code = 0) then 1 else 0 end) as triggerDayCountRunning,
SUM(CASE WHEN handle_code = 200 then 1 else 0 end) as triggerDayCountSuc
FROM XXL_JOB_QRTZ_TRIGGER_LOG
WHERE trigger_time BETWEEN #{from} and #{to}
GROUP BY triggerDay;
</select>
<delete
id=
"clearLog"
>
delete from XXL_JOB_QRTZ_TRIGGER_LOG
<trim
prefix=
"WHERE"
prefixOverrides=
"AND | OR"
>
<if
test=
"jobGroup gt 0"
>
AND job_group = #{jobGroup}
</if>
<if
test=
"jobId gt 0"
>
AND job_id = #{jobId}
</if>
<if
test=
"clearBeforeTime != null"
>
AND trigger_time
<![CDATA[ <= ]]>
#{clearBeforeTime}
</if>
<if
test=
"clearBeforeNum gt 0"
>
AND id NOT in(
SELECT id FROM(
SELECT id FROM XXL_JOB_QRTZ_TRIGGER_LOG AS t
<trim
prefix=
"WHERE"
prefixOverrides=
"AND | OR"
>
<if
test=
"jobGroup gt 0"
>
AND t.job_group = #{jobGroup}
</if>
<if
test=
"jobId gt 0"
>
AND t.job_id = #{jobId}
</if>
</trim>
ORDER BY t.trigger_time desc
LIMIT 0, #{clearBeforeNum}
) t1
)
</if>
</trim>
</delete>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.xxl.job.admin.dao.XxlJobLogDao"
>
<resultMap
id=
"XxlJobLog"
type=
"com.xxl.job.admin.core.model.XxlJobLog"
>
<result
column=
"id"
property=
"id"
/>
<result
column=
"job_group"
property=
"jobGroup"
/>
<result
column=
"job_id"
property=
"jobId"
/>
<result
column=
"glue_type"
property=
"glueType"
/>
<result
column=
"executor_address"
property=
"executorAddress"
/>
<result
column=
"executor_handler"
property=
"executorHandler"
/>
<result
column=
"executor_param"
property=
"executorParam"
/>
<result
column=
"executor_fail_retry_count"
property=
"executorFailRetryCount"
/>
<result
column=
"trigger_time"
property=
"triggerTime"
/>
<result
column=
"trigger_code"
property=
"triggerCode"
/>
<result
column=
"trigger_msg"
property=
"triggerMsg"
/>
<result
column=
"handle_time"
property=
"handleTime"
/>
<result
column=
"handle_code"
property=
"handleCode"
/>
<result
column=
"handle_msg"
property=
"handleMsg"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
t.id,
t.job_group,
t.job_id,
t.glue_type,
t.executor_address,
t.executor_handler,
t.executor_param,
t.executor_fail_retry_count,
t.trigger_time,
t.trigger_code,
t.trigger_msg,
t.handle_time,
t.handle_code,
t.handle_msg
</sql>
<select
id=
"pageList"
resultMap=
"XxlJobLog"
>
SELECT
<include
refid=
"Base_Column_List"
/>
FROM XXL_JOB_QRTZ_TRIGGER_LOG AS t
<trim
prefix=
"WHERE"
prefixOverrides=
"AND | OR"
>
<if
test=
"jobGroup gt 0"
>
AND t.job_group = #{jobGroup}
</if>
<if
test=
"jobId gt 0"
>
AND t.job_id = #{jobId}
</if>
<if
test=
"triggerTimeStart != null"
>
AND t.trigger_time
<![CDATA[ >= ]]>
#{triggerTimeStart}
</if>
<if
test=
"triggerTimeEnd != null"
>
AND t.trigger_time
<![CDATA[ <= ]]>
#{triggerTimeEnd}
</if>
<if
test=
"logStatus == 1"
>
AND t.handle_code = 200
</if>
<if
test=
"logStatus == 2"
>
AND (
t.trigger_code NOT IN (0, 200) OR
t.handle_code NOT IN (0, 200)
)
</if>
<if
test=
"logStatus == 3"
>
AND t.trigger_code = 200
AND t.handle_code = 0
</if>
</trim>
ORDER BY id DESC
LIMIT #{offset}, #{pagesize}
</select>
<select
id=
"pageListCount"
resultType=
"int"
>
SELECT count(1)
FROM XXL_JOB_QRTZ_TRIGGER_LOG AS t
<trim
prefix=
"WHERE"
prefixOverrides=
"AND | OR"
>
<if
test=
"jobGroup gt 0"
>
AND t.job_group = #{jobGroup}
</if>
<if
test=
"jobId gt 0"
>
AND t.job_id = #{jobId}
</if>
<if
test=
"triggerTimeStart != null"
>
AND t.trigger_time
<![CDATA[ >= ]]>
#{triggerTimeStart}
</if>
<if
test=
"triggerTimeEnd != null"
>
AND t.trigger_time
<![CDATA[ <= ]]>
#{triggerTimeEnd}
</if>
<if
test=
"logStatus == 1"
>
AND t.handle_code = 200
</if>
<if
test=
"logStatus == 2"
>
AND (
t.trigger_code NOT IN (0, 200) OR
t.handle_code NOT IN (0, 200)
)
</if>
<if
test=
"logStatus == 3"
>
AND t.trigger_code = 200
AND t.handle_code = 0
</if>
</trim>
</select>
<select
id=
"load"
parameterType=
"java.lang.Integer"
resultMap=
"XxlJobLog"
>
SELECT
<include
refid=
"Base_Column_List"
/>
FROM XXL_JOB_QRTZ_TRIGGER_LOG AS t
WHERE t.id = #{id}
</select>
<insert
id=
"save"
parameterType=
"com.xxl.job.admin.core.model.XxlJobLog"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
INSERT INTO XXL_JOB_QRTZ_TRIGGER_LOG (
`job_group`,
`job_id`,
`trigger_code`,
`handle_code`
) VALUES (
#{jobGroup},
#{jobId},
#{triggerCode},
#{handleCode}
);
<!--<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID()
</selectKey>-->
</insert>
<update
id=
"updateTriggerInfo"
>
UPDATE XXL_JOB_QRTZ_TRIGGER_LOG
SET
`glue_type`= #{glueType},
`trigger_time`= #{triggerTime},
`trigger_code`= #{triggerCode},
`trigger_msg`= #{triggerMsg},
`executor_address`= #{executorAddress},
`executor_handler`=#{executorHandler},
`executor_param`= #{executorParam},
`executor_fail_retry_count`= #{executorFailRetryCount}
WHERE `id`= #{id}
</update>
<update
id=
"updateHandleInfo"
>
UPDATE XXL_JOB_QRTZ_TRIGGER_LOG
SET
`handle_time`= #{handleTime},
`handle_code`= #{handleCode},
`handle_msg`= #{handleMsg}
WHERE `id`= #{id}
</update>
<delete
id=
"delete"
>
delete from XXL_JOB_QRTZ_TRIGGER_LOG
WHERE job_id = #{jobId}
</delete>
<select
id=
"triggerCountByHandleCode"
resultType=
"int"
>
SELECT count(1)
FROM XXL_JOB_QRTZ_TRIGGER_LOG AS t
<trim
prefix=
"WHERE"
prefixOverrides=
"AND | OR"
>
<if
test=
"handleCode gt 0"
>
AND t.handle_code = #{handleCode}
</if>
</trim>
</select>
<select
id=
"triggerCountByDay"
resultType=
"java.util.Map"
>
SELECT
DATE_FORMAT(trigger_time,'%Y-%m-%d') triggerDay,
COUNT(handle_code) triggerDayCount,
SUM(CASE WHEN (trigger_code = 200 and handle_code = 0) then 1 else 0 end) as triggerDayCountRunning,
SUM(CASE WHEN handle_code = 200 then 1 else 0 end) as triggerDayCountSuc
FROM XXL_JOB_QRTZ_TRIGGER_LOG
WHERE trigger_time BETWEEN #{from} and #{to}
GROUP BY triggerDay;
</select>
<delete
id=
"clearLog"
>
delete from XXL_JOB_QRTZ_TRIGGER_LOG
<trim
prefix=
"WHERE"
prefixOverrides=
"AND | OR"
>
<if
test=
"jobGroup gt 0"
>
AND job_group = #{jobGroup}
</if>
<if
test=
"jobId gt 0"
>
AND job_id = #{jobId}
</if>
<if
test=
"clearBeforeTime != null"
>
AND trigger_time
<![CDATA[ <= ]]>
#{clearBeforeTime}
</if>
<if
test=
"clearBeforeNum gt 0"
>
AND id NOT in(
SELECT id FROM(
SELECT id FROM XXL_JOB_QRTZ_TRIGGER_LOG AS t
<trim
prefix=
"WHERE"
prefixOverrides=
"AND | OR"
>
<if
test=
"jobGroup gt 0"
>
AND t.job_group = #{jobGroup}
</if>
<if
test=
"jobId gt 0"
>
AND t.job_id = #{jobId}
</if>
</trim>
ORDER BY t.trigger_time desc
LIMIT 0, #{clearBeforeNum}
) t1
)
</if>
</trim>
</delete>
</mapper>
\ No newline at end of file
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js
浏览文件 @
50b1c679
$
(
function
()
{
// jobGroup change, job list init and select
$
(
"#jobGroup"
).
on
(
"change"
,
function
()
{
var
jobGroup
=
$
(
this
).
children
(
'option:selected'
).
val
();
$
.
ajax
({
type
:
'POST'
,
async
:
false
,
// async, avoid js invoke pagelist before jobId data init
url
:
base_url
+
'/joblog/getJobsByGroup'
,
data
:
{
"jobGroup"
:
jobGroup
},
dataType
:
"json"
,
success
:
function
(
data
){
if
(
data
.
code
==
200
)
{
$
(
"#jobId"
).
html
(
'<option value="0" >'
+
I18n
.
system_all
+
'</option>'
);
$
.
each
(
data
.
content
,
function
(
n
,
value
)
{
$
(
"#jobId"
).
append
(
'<option value="'
+
value
.
id
+
'" >'
+
value
.
jobDesc
+
'</option>'
);
});
if
(
$
(
"#jobId"
).
attr
(
"paramVal"
)){
$
(
"#jobId"
).
find
(
"option[value='"
+
$
(
"#jobId"
).
attr
(
"paramVal"
)
+
"']"
).
attr
(
"selected"
,
true
);
}
}
else
{
layer
.
open
({
title
:
I18n
.
system_tips
,
btn
:
[
I18n
.
system_ok
],
content
:
(
data
.
msg
||
I18n
.
system_api_error
),
icon
:
'2'
});
}
},
});
});
if
(
$
(
"#jobGroup"
).
attr
(
"paramVal"
)){
$
(
"#jobGroup"
).
find
(
"option[value='"
+
$
(
"#jobGroup"
).
attr
(
"paramVal"
)
+
"']"
).
attr
(
"selected"
,
true
);
$
(
"#jobGroup"
).
change
();
}
// filter Time
var
rangesConf
=
{};
rangesConf
[
I18n
.
daterangepicker_ranges_recent_hour
]
=
[
moment
().
subtract
(
1
,
'hours'
),
moment
()];
rangesConf
[
I18n
.
daterangepicker_ranges_today
]
=
[
moment
().
startOf
(
'day'
),
moment
().
endOf
(
'day'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_yesterday
]
=
[
moment
().
subtract
(
1
,
'days'
).
startOf
(
'day'
),
moment
().
subtract
(
1
,
'days'
).
endOf
(
'day'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_this_month
]
=
[
moment
().
startOf
(
'month'
),
moment
().
endOf
(
'month'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_last_month
]
=
[
moment
().
subtract
(
1
,
'months'
).
startOf
(
'month'
),
moment
().
subtract
(
1
,
'months'
).
endOf
(
'month'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_recent_week
]
=
[
moment
().
subtract
(
1
,
'weeks'
).
startOf
(
'day'
),
moment
().
endOf
(
'day'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_recent_month
]
=
[
moment
().
subtract
(
1
,
'months'
).
startOf
(
'day'
),
moment
().
endOf
(
'day'
)];
$
(
'#filterTime'
).
daterangepicker
({
autoApply
:
false
,
singleDatePicker
:
false
,
showDropdowns
:
false
,
// 是否显示年月选择条件
timePicker
:
true
,
// 是否显示小时和分钟选择条件
timePickerIncrement
:
10
,
// 时间的增量,单位为分钟
timePicker24Hour
:
true
,
opens
:
'left'
,
//日期选择框的弹出位置
ranges
:
rangesConf
,
locale
:
{
format
:
'YYYY-MM-DD HH:mm:ss'
,
separator
:
' - '
,
customRangeLabel
:
I18n
.
daterangepicker_custom_name
,
applyLabel
:
I18n
.
system_ok
,
cancelLabel
:
I18n
.
system_cancel
,
fromLabel
:
I18n
.
daterangepicker_custom_starttime
,
toLabel
:
I18n
.
daterangepicker_custom_endtime
,
daysOfWeek
:
I18n
.
daterangepicker_custom_daysofweek
.
split
(
','
)
,
// '日', '一', '二', '三', '四', '五', '六'
monthNames
:
I18n
.
daterangepicker_custom_monthnames
.
split
(
','
)
,
// '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'
firstDay
:
1
},
startDate
:
rangesConf
[
I18n
.
daterangepicker_ranges_today
][
0
],
endDate
:
rangesConf
[
I18n
.
daterangepicker_ranges_today
][
1
]
});
// init date tables
var
logTable
=
$
(
"#joblog_list"
).
dataTable
({
"deferRender"
:
true
,
"processing"
:
true
,
"serverSide"
:
true
,
"ajax"
:
{
url
:
base_url
+
"/joblog/pageList"
,
type
:
"post"
,
data
:
function
(
d
)
{
var
obj
=
{};
obj
.
jobGroup
=
$
(
'#jobGroup'
).
val
();
obj
.
jobId
=
$
(
'#jobId'
).
val
();
obj
.
logStatus
=
$
(
'#logStatus'
).
val
();
obj
.
filterTime
=
$
(
'#filterTime'
).
val
();
obj
.
start
=
d
.
start
;
obj
.
length
=
d
.
length
;
return
obj
;
}
},
"searching"
:
false
,
"ordering"
:
false
,
//"scrollX": false,
"columns"
:
[
{
"data"
:
'jobId'
,
"visible"
:
true
,
"width"
:
'10%'
,
"render"
:
function
(
data
,
type
,
row
)
{
var
glueTypeTitle
=
GlueTypeEnum
[
row
.
glueType
];
if
(
row
.
executorHandler
)
{
glueTypeTitle
=
glueTypeTitle
+
":"
+
row
.
executorHandler
;
}
var
temp
=
''
;
temp
+=
I18n
.
joblog_field_executorAddress
+
':'
+
(
row
.
executorAddress
?
row
.
executorAddress
:
''
);
temp
+=
'<br>'
+
I18n
.
jobinfo_field_gluetype
+
':'
+
glueTypeTitle
;
temp
+=
'<br>'
+
I18n
.
jobinfo_field_executorparam
+
':'
+
row
.
executorParam
;
return
'<a class="logTips" href="javascript:;" >'
+
row
.
jobId
+
'<span style="display:none;">'
+
temp
+
'</span></a>'
;
}
},
{
"data"
:
'jobGroup'
,
"visible"
:
false
},
{
"data"
:
'triggerTime'
,
"width"
:
'16%'
,
"render"
:
function
(
data
,
type
,
row
)
{
return
data
?
moment
(
new
Date
(
data
)).
format
(
"YYYY-MM-DD HH:mm:ss"
):
""
;
}
},
{
"data"
:
'triggerCode'
,
"width"
:
'12%'
,
"render"
:
function
(
data
,
type
,
row
)
{
var
html
=
data
;
if
(
data
==
200
)
{
html
=
'<span style="color: green">'
+
I18n
.
system_success
+
'</span>'
;
}
else
if
(
data
==
500
)
{
html
=
'<span style="color: red">'
+
I18n
.
system_fail
+
'</span>'
;
}
else
if
(
data
==
0
)
{
html
=
''
;
}
return
html
;
}
},
{
"data"
:
'triggerMsg'
,
"width"
:
'12%'
,
"render"
:
function
(
data
,
type
,
row
)
{
return
data
?
'<a class="logTips" href="javascript:;" >'
+
I18n
.
system_show
+
'<span style="display:none;">'
+
data
+
'</span></a>'
:
I18n
.
system_empty
;
}
},
{
"data"
:
'handleTime'
,
"width"
:
'16%'
,
"render"
:
function
(
data
,
type
,
row
)
{
return
data
?
moment
(
new
Date
(
data
)).
format
(
"YYYY-MM-DD HH:mm:ss"
):
""
;
}
},
{
"data"
:
'handleCode'
,
"width"
:
'12%'
,
"render"
:
function
(
data
,
type
,
row
)
{
var
html
=
data
;
if
(
data
==
200
)
{
html
=
'<span style="color: green">'
+
I18n
.
joblog_handleCode_200
+
'</span>'
;
}
else
if
(
data
==
500
)
{
html
=
'<span style="color: red">'
+
I18n
.
joblog_handleCode_500
+
'</span>'
;
}
else
if
(
data
==
502
)
{
html
=
'<span style="color: red">'
+
I18n
.
joblog_handleCode_502
+
'</span>'
;
}
else
if
(
data
==
0
)
{
html
=
''
;
}
return
html
;
}
},
{
"data"
:
'handleMsg'
,
"width"
:
'12%'
,
"render"
:
function
(
data
,
type
,
row
)
{
return
data
?
'<a class="logTips" href="javascript:;" >'
+
I18n
.
system_show
+
'<span style="display:none;">'
+
data
+
'</span></a>'
:
I18n
.
system_empty
;
}
},
{
"data"
:
'handleMsg'
,
"bSortable"
:
false
,
"width"
:
'10%'
,
"render"
:
function
(
data
,
type
,
row
)
{
// better support expression or string, not function
return
function
()
{
if
(
row
.
triggerCode
==
200
){
var
temp
=
'<a href="javascript:;" class="logDetail" _id="'
+
row
.
id
+
'">'
+
I18n
.
joblog_rolling_log
+
'</a>'
;
if
(
row
.
handleCode
==
0
){
temp
+=
'<br><a href="javascript:;" class="logKill" _id="'
+
row
.
id
+
'" style="color: red;" >'
+
I18n
.
joblog_kill_log
+
'</a>'
;
}
return
temp
;
}
return
null
;
}
}
}
],
"language"
:
{
"sProcessing"
:
I18n
.
dataTable_sProcessing
,
"sLengthMenu"
:
I18n
.
dataTable_sLengthMenu
,
"sZeroRecords"
:
I18n
.
dataTable_sZeroRecords
,
"sInfo"
:
I18n
.
dataTable_sInfo
,
"sInfoEmpty"
:
I18n
.
dataTable_sInfoEmpty
,
"sInfoFiltered"
:
I18n
.
dataTable_sInfoFiltered
,
"sInfoPostFix"
:
""
,
"sSearch"
:
I18n
.
dataTable_sSearch
,
"sUrl"
:
""
,
"sEmptyTable"
:
I18n
.
dataTable_sEmptyTable
,
"sLoadingRecords"
:
I18n
.
dataTable_sLoadingRecords
,
"sInfoThousands"
:
","
,
"oPaginate"
:
{
"sFirst"
:
I18n
.
dataTable_sFirst
,
"sPrevious"
:
I18n
.
dataTable_sPrevious
,
"sNext"
:
I18n
.
dataTable_sNext
,
"sLast"
:
I18n
.
dataTable_sLast
},
"oAria"
:
{
"sSortAscending"
:
I18n
.
dataTable_sSortAscending
,
"sSortDescending"
:
I18n
.
dataTable_sSortDescending
}
}
});
// logTips alert
$
(
'#joblog_list'
).
on
(
'click'
,
'.logTips'
,
function
(){
var
msg
=
$
(
this
).
find
(
'span'
).
html
();
ComAlertTec
.
show
(
msg
);
});
// search Btn
$
(
'#searchBtn'
).
on
(
'click'
,
function
(){
logTable
.
fnDraw
();
});
// logDetail look
$
(
'#joblog_list'
).
on
(
'click'
,
'.logDetail'
,
function
(){
var
_id
=
$
(
this
).
attr
(
'_id'
);
window
.
open
(
base_url
+
'/joblog/logDetailPage?id='
+
_id
);
return
;
});
/**
* log Kill
*/
$
(
'#joblog_list'
).
on
(
'click'
,
'.logKill'
,
function
(){
var
_id
=
$
(
this
).
attr
(
'_id'
);
layer
.
confirm
(
(
I18n
.
system_ok
+
I18n
.
joblog_kill_log
+
'?'
),
{
icon
:
3
,
title
:
I18n
.
system_tips
,
btn
:
[
I18n
.
system_ok
,
I18n
.
system_cancel
]
},
function
(
index
){
layer
.
close
(
index
);
$
.
ajax
({
type
:
'POST'
,
url
:
base_url
+
'/joblog/logKill'
,
data
:
{
"id"
:
_id
},
dataType
:
"json"
,
success
:
function
(
data
){
if
(
data
.
code
==
200
)
{
layer
.
open
({
title
:
I18n
.
system_tips
,
btn
:
[
I18n
.
system_ok
],
content
:
I18n
.
system_opt_suc
,
icon
:
'1'
,
end
:
function
(
layero
,
index
){
logTable
.
fnDraw
();
}
});
}
else
{
layer
.
open
({
title
:
I18n
.
system_tips
,
btn
:
[
I18n
.
system_ok
],
content
:
(
data
.
msg
||
I18n
.
system_opt_fail
),
icon
:
'2'
});
}
},
});
});
});
/**
* clear Log
*/
$
(
'#clearLog'
).
on
(
'click'
,
function
(){
var
jobGroup
=
$
(
'#jobGroup'
).
val
();
var
jobId
=
$
(
'#jobId'
).
val
();
var
jobGroupText
=
$
(
"#jobGroup"
).
find
(
"option:selected"
).
text
();
var
jobIdText
=
$
(
"#jobId"
).
find
(
"option:selected"
).
text
();
$
(
'#clearLogModal input[name=jobGroup]'
).
val
(
jobGroup
);
$
(
'#clearLogModal input[name=jobId]'
).
val
(
jobId
);
$
(
'#clearLogModal .jobGroupText'
).
val
(
jobGroupText
);
$
(
'#clearLogModal .jobIdText'
).
val
(
jobIdText
);
$
(
'#clearLogModal'
).
modal
(
'show'
);
});
$
(
"#clearLogModal .ok"
).
on
(
'click'
,
function
(){
$
.
post
(
base_url
+
"/joblog/clearLog"
,
$
(
"#clearLogModal .form"
).
serialize
(),
function
(
data
,
status
)
{
if
(
data
.
code
==
"200"
)
{
$
(
'#clearLogModal'
).
modal
(
'hide'
);
layer
.
open
({
title
:
I18n
.
system_tips
,
btn
:
[
I18n
.
system_ok
],
content
:
(
I18n
.
joblog_clean_log
+
I18n
.
system_success
)
,
icon
:
'1'
,
end
:
function
(
layero
,
index
){
logTable
.
fnDraw
();
}
});
}
else
{
layer
.
open
({
title
:
I18n
.
system_tips
,
btn
:
[
I18n
.
system_ok
],
content
:
(
data
.
msg
||
(
I18n
.
joblog_clean_log
+
I18n
.
system_fail
)
),
icon
:
'2'
});
}
});
});
$
(
"#clearLogModal"
).
on
(
'hide.bs.modal'
,
function
()
{
$
(
"#clearLogModal .form"
)[
0
].
reset
();
});
});
// Com Alert by Tec theme
var
ComAlertTec
=
{
html
:
function
(){
var
html
=
'<div class="modal fade" id="ComAlertTec" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">'
+
'<div class="modal-dialog">'
+
'<div class="modal-content-tec">'
+
'<div class="modal-body"><div class="alert" style="color:#fff;"></div></div>'
+
'<div class="modal-footer">'
+
'<div class="text-center" >'
+
'<button type="button" class="btn btn-info ok" data-dismiss="modal" >'
+
I18n
.
system_ok
+
'</button>'
+
'</div>'
+
'</div>'
+
'</div>'
+
'</div>'
+
'</div>'
;
return
html
;
},
show
:
function
(
msg
,
callback
){
// dom init
if
(
$
(
'#ComAlertTec'
).
length
==
0
){
$
(
'body'
).
append
(
ComAlertTec
.
html
());
}
// init com alert
$
(
'#ComAlertTec .alert'
).
html
(
msg
);
$
(
'#ComAlertTec'
).
modal
(
'show'
);
$
(
'#ComAlertTec .ok'
).
click
(
function
(){
$
(
'#ComAlertTec'
).
modal
(
'hide'
);
if
(
typeof
callback
==
'function'
)
{
callback
();
}
});
}
};
$
(
function
()
{
// jobGroup change, job list init and select
$
(
"#jobGroup"
).
on
(
"change"
,
function
()
{
var
jobGroup
=
$
(
this
).
children
(
'option:selected'
).
val
();
$
.
ajax
({
type
:
'POST'
,
async
:
false
,
// async, avoid js invoke pagelist before jobId data init
url
:
base_url
+
'/joblog/getJobsByGroup'
,
data
:
{
"jobGroup"
:
jobGroup
},
dataType
:
"json"
,
success
:
function
(
data
){
if
(
data
.
code
==
200
)
{
$
(
"#jobId"
).
html
(
'<option value="0" >'
+
I18n
.
system_all
+
'</option>'
);
$
.
each
(
data
.
content
,
function
(
n
,
value
)
{
$
(
"#jobId"
).
append
(
'<option value="'
+
value
.
id
+
'" >'
+
value
.
jobDesc
+
'</option>'
);
});
if
(
$
(
"#jobId"
).
attr
(
"paramVal"
)){
$
(
"#jobId"
).
find
(
"option[value='"
+
$
(
"#jobId"
).
attr
(
"paramVal"
)
+
"']"
).
attr
(
"selected"
,
true
);
}
}
else
{
layer
.
open
({
title
:
I18n
.
system_tips
,
btn
:
[
I18n
.
system_ok
],
content
:
(
data
.
msg
||
I18n
.
system_api_error
),
icon
:
'2'
});
}
},
});
});
if
(
$
(
"#jobGroup"
).
attr
(
"paramVal"
)){
$
(
"#jobGroup"
).
find
(
"option[value='"
+
$
(
"#jobGroup"
).
attr
(
"paramVal"
)
+
"']"
).
attr
(
"selected"
,
true
);
$
(
"#jobGroup"
).
change
();
}
// filter Time
var
rangesConf
=
{};
rangesConf
[
I18n
.
daterangepicker_ranges_recent_hour
]
=
[
moment
().
subtract
(
1
,
'hours'
),
moment
()];
rangesConf
[
I18n
.
daterangepicker_ranges_today
]
=
[
moment
().
startOf
(
'day'
),
moment
().
endOf
(
'day'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_yesterday
]
=
[
moment
().
subtract
(
1
,
'days'
).
startOf
(
'day'
),
moment
().
subtract
(
1
,
'days'
).
endOf
(
'day'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_this_month
]
=
[
moment
().
startOf
(
'month'
),
moment
().
endOf
(
'month'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_last_month
]
=
[
moment
().
subtract
(
1
,
'months'
).
startOf
(
'month'
),
moment
().
subtract
(
1
,
'months'
).
endOf
(
'month'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_recent_week
]
=
[
moment
().
subtract
(
1
,
'weeks'
).
startOf
(
'day'
),
moment
().
endOf
(
'day'
)];
rangesConf
[
I18n
.
daterangepicker_ranges_recent_month
]
=
[
moment
().
subtract
(
1
,
'months'
).
startOf
(
'day'
),
moment
().
endOf
(
'day'
)];
$
(
'#filterTime'
).
daterangepicker
({
autoApply
:
false
,
singleDatePicker
:
false
,
showDropdowns
:
false
,
// 是否显示年月选择条件
timePicker
:
true
,
// 是否显示小时和分钟选择条件
timePickerIncrement
:
10
,
// 时间的增量,单位为分钟
timePicker24Hour
:
true
,
opens
:
'left'
,
//日期选择框的弹出位置
ranges
:
rangesConf
,
locale
:
{
format
:
'YYYY-MM-DD HH:mm:ss'
,
separator
:
' - '
,
customRangeLabel
:
I18n
.
daterangepicker_custom_name
,
applyLabel
:
I18n
.
system_ok
,
cancelLabel
:
I18n
.
system_cancel
,
fromLabel
:
I18n
.
daterangepicker_custom_starttime
,
toLabel
:
I18n
.
daterangepicker_custom_endtime
,
daysOfWeek
:
I18n
.
daterangepicker_custom_daysofweek
.
split
(
','
)
,
// '日', '一', '二', '三', '四', '五', '六'
monthNames
:
I18n
.
daterangepicker_custom_monthnames
.
split
(
','
)
,
// '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'
firstDay
:
1
},
startDate
:
rangesConf
[
I18n
.
daterangepicker_ranges_today
][
0
],
endDate
:
rangesConf
[
I18n
.
daterangepicker_ranges_today
][
1
]
});
// init date tables
var
logTable
=
$
(
"#joblog_list"
).
dataTable
({
"deferRender"
:
true
,
"processing"
:
true
,
"serverSide"
:
true
,
"ajax"
:
{
url
:
base_url
+
"/joblog/pageList"
,
type
:
"post"
,
data
:
function
(
d
)
{
var
obj
=
{};
obj
.
jobGroup
=
$
(
'#jobGroup'
).
val
();
obj
.
jobId
=
$
(
'#jobId'
).
val
();
obj
.
logStatus
=
$
(
'#logStatus'
).
val
();
obj
.
filterTime
=
$
(
'#filterTime'
).
val
();
obj
.
start
=
d
.
start
;
obj
.
length
=
d
.
length
;
return
obj
;
}
},
"searching"
:
false
,
"ordering"
:
false
,
//"scrollX": false,
"columns"
:
[
{
"data"
:
'jobId'
,
"visible"
:
true
,
"width"
:
'10%'
,
"render"
:
function
(
data
,
type
,
row
)
{
var
glueTypeTitle
=
GlueTypeEnum
[
row
.
glueType
];
if
(
row
.
executorHandler
)
{
glueTypeTitle
=
glueTypeTitle
+
":"
+
row
.
executorHandler
;
}
var
temp
=
''
;
temp
+=
I18n
.
joblog_field_executorAddress
+
':'
+
(
row
.
executorAddress
?
row
.
executorAddress
:
''
);
temp
+=
'<br>'
+
I18n
.
jobinfo_field_gluetype
+
':'
+
glueTypeTitle
;
temp
+=
'<br>'
+
I18n
.
jobinfo_field_executorparam
+
':'
+
row
.
executorParam
;
return
'<a class="logTips" href="javascript:;" >'
+
row
.
jobId
+
'<span style="display:none;">'
+
temp
+
'</span></a>'
;
}
},
{
"data"
:
'jobGroup'
,
"visible"
:
false
},
{
"data"
:
'triggerTime'
,
"width"
:
'16%'
,
"render"
:
function
(
data
,
type
,
row
)
{
return
data
?
moment
(
new
Date
(
data
)).
format
(
"YYYY-MM-DD HH:mm:ss"
):
""
;
}
},
{
"data"
:
'triggerCode'
,
"width"
:
'12%'
,
"render"
:
function
(
data
,
type
,
row
)
{
var
html
=
data
;
if
(
data
==
200
)
{
html
=
'<span style="color: green">'
+
I18n
.
system_success
+
'</span>'
;
}
else
if
(
data
==
500
)
{
html
=
'<span style="color: red">'
+
I18n
.
system_fail
+
'</span>'
;
}
else
if
(
data
==
0
)
{
html
=
''
;
}
return
html
;
}
},
{
"data"
:
'triggerMsg'
,
"width"
:
'12%'
,
"render"
:
function
(
data
,
type
,
row
)
{
return
data
?
'<a class="logTips" href="javascript:;" >'
+
I18n
.
system_show
+
'<span style="display:none;">'
+
data
+
'</span></a>'
:
I18n
.
system_empty
;
}
},
{
"data"
:
'handleTime'
,
"width"
:
'16%'
,
"render"
:
function
(
data
,
type
,
row
)
{
return
data
?
moment
(
new
Date
(
data
)).
format
(
"YYYY-MM-DD HH:mm:ss"
):
""
;
}
},
{
"data"
:
'handleCode'
,
"width"
:
'12%'
,
"render"
:
function
(
data
,
type
,
row
)
{
var
html
=
data
;
if
(
data
==
200
)
{
html
=
'<span style="color: green">'
+
I18n
.
joblog_handleCode_200
+
'</span>'
;
}
else
if
(
data
==
500
)
{
html
=
'<span style="color: red">'
+
I18n
.
joblog_handleCode_500
+
'</span>'
;
}
else
if
(
data
==
502
)
{
html
=
'<span style="color: red">'
+
I18n
.
joblog_handleCode_502
+
'</span>'
;
}
else
if
(
data
==
0
)
{
html
=
''
;
}
return
html
;
}
},
{
"data"
:
'handleMsg'
,
"width"
:
'12%'
,
"render"
:
function
(
data
,
type
,
row
)
{
return
data
?
'<a class="logTips" href="javascript:;" >'
+
I18n
.
system_show
+
'<span style="display:none;">'
+
data
+
'</span></a>'
:
I18n
.
system_empty
;
}
},
{
"data"
:
'handleMsg'
,
"bSortable"
:
false
,
"width"
:
'10%'
,
"render"
:
function
(
data
,
type
,
row
)
{
// better support expression or string, not function
return
function
()
{
if
(
row
.
triggerCode
==
200
){
var
temp
=
'<a href="javascript:;" class="logDetail" _id="'
+
row
.
id
+
'">'
+
I18n
.
joblog_rolling_log
+
'</a>'
;
if
(
row
.
handleCode
==
0
){
temp
+=
'<br><a href="javascript:;" class="logKill" _id="'
+
row
.
id
+
'" style="color: red;" >'
+
I18n
.
joblog_kill_log
+
'</a>'
;
}
return
temp
;
}
return
null
;
}
}
}
],
"language"
:
{
"sProcessing"
:
I18n
.
dataTable_sProcessing
,
"sLengthMenu"
:
I18n
.
dataTable_sLengthMenu
,
"sZeroRecords"
:
I18n
.
dataTable_sZeroRecords
,
"sInfo"
:
I18n
.
dataTable_sInfo
,
"sInfoEmpty"
:
I18n
.
dataTable_sInfoEmpty
,
"sInfoFiltered"
:
I18n
.
dataTable_sInfoFiltered
,
"sInfoPostFix"
:
""
,
"sSearch"
:
I18n
.
dataTable_sSearch
,
"sUrl"
:
""
,
"sEmptyTable"
:
I18n
.
dataTable_sEmptyTable
,
"sLoadingRecords"
:
I18n
.
dataTable_sLoadingRecords
,
"sInfoThousands"
:
","
,
"oPaginate"
:
{
"sFirst"
:
I18n
.
dataTable_sFirst
,
"sPrevious"
:
I18n
.
dataTable_sPrevious
,
"sNext"
:
I18n
.
dataTable_sNext
,
"sLast"
:
I18n
.
dataTable_sLast
},
"oAria"
:
{
"sSortAscending"
:
I18n
.
dataTable_sSortAscending
,
"sSortDescending"
:
I18n
.
dataTable_sSortDescending
}
}
});
// logTips alert
$
(
'#joblog_list'
).
on
(
'click'
,
'.logTips'
,
function
(){
var
msg
=
$
(
this
).
find
(
'span'
).
html
();
ComAlertTec
.
show
(
msg
);
});
// search Btn
$
(
'#searchBtn'
).
on
(
'click'
,
function
(){
logTable
.
fnDraw
();
});
// logDetail look
$
(
'#joblog_list'
).
on
(
'click'
,
'.logDetail'
,
function
(){
var
_id
=
$
(
this
).
attr
(
'_id'
);
window
.
open
(
base_url
+
'/joblog/logDetailPage?id='
+
_id
);
return
;
});
/**
* log Kill
*/
$
(
'#joblog_list'
).
on
(
'click'
,
'.logKill'
,
function
(){
var
_id
=
$
(
this
).
attr
(
'_id'
);
layer
.
confirm
(
(
I18n
.
system_ok
+
I18n
.
joblog_kill_log
+
'?'
),
{
icon
:
3
,
title
:
I18n
.
system_tips
,
btn
:
[
I18n
.
system_ok
,
I18n
.
system_cancel
]
},
function
(
index
){
layer
.
close
(
index
);
$
.
ajax
({
type
:
'POST'
,
url
:
base_url
+
'/joblog/logKill'
,
data
:
{
"id"
:
_id
},
dataType
:
"json"
,
success
:
function
(
data
){
if
(
data
.
code
==
200
)
{
layer
.
open
({
title
:
I18n
.
system_tips
,
btn
:
[
I18n
.
system_ok
],
content
:
I18n
.
system_opt_suc
,
icon
:
'1'
,
end
:
function
(
layero
,
index
){
logTable
.
fnDraw
();
}
});
}
else
{
layer
.
open
({
title
:
I18n
.
system_tips
,
btn
:
[
I18n
.
system_ok
],
content
:
(
data
.
msg
||
I18n
.
system_opt_fail
),
icon
:
'2'
});
}
},
});
});
});
/**
* clear Log
*/
$
(
'#clearLog'
).
on
(
'click'
,
function
(){
var
jobGroup
=
$
(
'#jobGroup'
).
val
();
var
jobId
=
$
(
'#jobId'
).
val
();
var
jobGroupText
=
$
(
"#jobGroup"
).
find
(
"option:selected"
).
text
();
var
jobIdText
=
$
(
"#jobId"
).
find
(
"option:selected"
).
text
();
$
(
'#clearLogModal input[name=jobGroup]'
).
val
(
jobGroup
);
$
(
'#clearLogModal input[name=jobId]'
).
val
(
jobId
);
$
(
'#clearLogModal .jobGroupText'
).
val
(
jobGroupText
);
$
(
'#clearLogModal .jobIdText'
).
val
(
jobIdText
);
$
(
'#clearLogModal'
).
modal
(
'show'
);
});
$
(
"#clearLogModal .ok"
).
on
(
'click'
,
function
(){
$
.
post
(
base_url
+
"/joblog/clearLog"
,
$
(
"#clearLogModal .form"
).
serialize
(),
function
(
data
,
status
)
{
if
(
data
.
code
==
"200"
)
{
$
(
'#clearLogModal'
).
modal
(
'hide'
);
layer
.
open
({
title
:
I18n
.
system_tips
,
btn
:
[
I18n
.
system_ok
],
content
:
(
I18n
.
joblog_clean_log
+
I18n
.
system_success
)
,
icon
:
'1'
,
end
:
function
(
layero
,
index
){
logTable
.
fnDraw
();
}
});
}
else
{
layer
.
open
({
title
:
I18n
.
system_tips
,
btn
:
[
I18n
.
system_ok
],
content
:
(
data
.
msg
||
(
I18n
.
joblog_clean_log
+
I18n
.
system_fail
)
),
icon
:
'2'
});
}
});
});
$
(
"#clearLogModal"
).
on
(
'hide.bs.modal'
,
function
()
{
$
(
"#clearLogModal .form"
)[
0
].
reset
();
});
});
// Com Alert by Tec theme
var
ComAlertTec
=
{
html
:
function
(){
var
html
=
'<div class="modal fade" id="ComAlertTec" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">'
+
'<div class="modal-dialog">'
+
'<div class="modal-content-tec">'
+
'<div class="modal-body"><div class="alert" style="color:#fff;"></div></div>'
+
'<div class="modal-footer">'
+
'<div class="text-center" >'
+
'<button type="button" class="btn btn-info ok" data-dismiss="modal" >'
+
I18n
.
system_ok
+
'</button>'
+
'</div>'
+
'</div>'
+
'</div>'
+
'</div>'
+
'</div>'
;
return
html
;
},
show
:
function
(
msg
,
callback
){
// dom init
if
(
$
(
'#ComAlertTec'
).
length
==
0
){
$
(
'body'
).
append
(
ComAlertTec
.
html
());
}
// init com alert
$
(
'#ComAlertTec .alert'
).
html
(
msg
);
$
(
'#ComAlertTec'
).
modal
(
'show'
);
$
(
'#ComAlertTec .ok'
).
click
(
function
(){
$
(
'#ComAlertTec'
).
modal
(
'hide'
);
if
(
typeof
callback
==
'function'
)
{
callback
();
}
});
}
};
xxl-job-core/src/main/java/com/xxl/job/core/handler/IJobHandler.java
浏览文件 @
50b1c679
package
com
.
xxl
.
job
.
core
.
handler
;
import
com.xxl.job.core.biz.model.ReturnT
;
/**
* job handler
*
* @author xuxueli 2015-12-19 19:06:38
*/
public
abstract
class
IJobHandler
{
/** success */
public
static
final
ReturnT
<
String
>
SUCCESS
=
new
ReturnT
<
String
>(
200
,
null
);
/** fail */
public
static
final
ReturnT
<
String
>
FAIL
=
new
ReturnT
<
String
>(
500
,
null
);
/** fail timeout */
public
static
final
ReturnT
<
String
>
FAIL_TIMEOUT
=
new
ReturnT
<
String
>(
502
,
null
);
/**
* execute handler, invoked when executor receives a scheduling request
*
* @param param
* @return
* @throws Exception
*/
public
abstract
ReturnT
<
String
>
execute
(
String
param
)
throws
Exception
;
/**
* init handler, invoked when JobThread init
*/
public
void
init
()
{
// TODO
}
/**
* destroy handler, invoked when JobThread destroy
*/
public
void
destroy
()
{
// TODO
}
}
package
com
.
xxl
.
job
.
core
.
handler
;
import
com.xxl.job.core.biz.model.ReturnT
;
/**
* job handler
*
* @author xuxueli 2015-12-19 19:06:38
*/
public
abstract
class
IJobHandler
{
/** success */
public
static
final
ReturnT
<
String
>
SUCCESS
=
new
ReturnT
<
String
>(
200
,
null
);
/** fail */
public
static
final
ReturnT
<
String
>
FAIL
=
new
ReturnT
<
String
>(
500
,
null
);
/** fail timeout */
public
static
final
ReturnT
<
String
>
FAIL_TIMEOUT
=
new
ReturnT
<
String
>(
502
,
null
);
/**
* execute handler, invoked when executor receives a scheduling request
*
* @param param
* @return
* @throws Exception
*/
public
abstract
ReturnT
<
String
>
execute
(
String
param
)
throws
Exception
;
/**
* init handler, invoked when JobThread init
*/
public
void
init
()
{
// TODO
}
/**
* destroy handler, invoked when JobThread destroy
*/
public
void
destroy
()
{
// TODO
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论