parent
24cc161b96
commit
7ab75aa817
15 changed files with 340 additions and 63 deletions
@ -0,0 +1,54 @@ |
||||
package com.xxl.job.admin.core.model; |
||||
|
||||
import java.util.Date; |
||||
|
||||
public class XxlJobLogReport { |
||||
|
||||
private int id; |
||||
|
||||
private Date triggerDay; |
||||
|
||||
private int runningCount; |
||||
private int sucCount; |
||||
private int failCount; |
||||
|
||||
public int getId() { |
||||
return id; |
||||
} |
||||
|
||||
public void setId(int id) { |
||||
this.id = id; |
||||
} |
||||
|
||||
public Date getTriggerDay() { |
||||
return triggerDay; |
||||
} |
||||
|
||||
public void setTriggerDay(Date triggerDay) { |
||||
this.triggerDay = triggerDay; |
||||
} |
||||
|
||||
public int getRunningCount() { |
||||
return runningCount; |
||||
} |
||||
|
||||
public void setRunningCount(int runningCount) { |
||||
this.runningCount = runningCount; |
||||
} |
||||
|
||||
public int getSucCount() { |
||||
return sucCount; |
||||
} |
||||
|
||||
public void setSucCount(int sucCount) { |
||||
this.sucCount = sucCount; |
||||
} |
||||
|
||||
public int getFailCount() { |
||||
return failCount; |
||||
} |
||||
|
||||
public void setFailCount(int failCount) { |
||||
this.failCount = failCount; |
||||
} |
||||
} |
@ -0,0 +1,121 @@ |
||||
package com.xxl.job.admin.core.thread; |
||||
|
||||
import com.xxl.job.admin.core.conf.XxlJobAdminConfig; |
||||
import com.xxl.job.admin.core.model.XxlJobLogReport; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
|
||||
import java.util.Calendar; |
||||
import java.util.Date; |
||||
import java.util.Map; |
||||
import java.util.concurrent.TimeUnit; |
||||
|
||||
/** |
||||
* job log report helper |
||||
* |
||||
* @author xuxueli 2019-11-22 |
||||
*/ |
||||
public class JobLogReportHelper { |
||||
private static Logger logger = LoggerFactory.getLogger(JobLogReportHelper.class); |
||||
|
||||
private static JobLogReportHelper instance = new JobLogReportHelper(); |
||||
public static JobLogReportHelper getInstance(){ |
||||
return instance; |
||||
} |
||||
|
||||
|
||||
private Thread logrThread; |
||||
private volatile boolean toStop = false; |
||||
public void start(){ |
||||
logrThread = new Thread(new Runnable() { |
||||
|
||||
@Override |
||||
public void run() { |
||||
|
||||
// monitor
|
||||
while (!toStop) { |
||||
try { |
||||
|
||||
// refresh log report in 3 days
|
||||
for (int i = 0; i < 3; i++) { |
||||
|
||||
// today
|
||||
Calendar itemDay = Calendar.getInstance(); |
||||
itemDay.add(Calendar.DAY_OF_MONTH, -i); |
||||
itemDay.set(Calendar.HOUR_OF_DAY, 0); |
||||
itemDay.set(Calendar.MINUTE, 0); |
||||
itemDay.set(Calendar.SECOND, 0); |
||||
itemDay.set(Calendar.MILLISECOND, 0); |
||||
|
||||
Date todayFrom = itemDay.getTime(); |
||||
|
||||
itemDay.set(Calendar.HOUR_OF_DAY, 23); |
||||
itemDay.set(Calendar.MINUTE, 59); |
||||
itemDay.set(Calendar.SECOND, 59); |
||||
itemDay.set(Calendar.MILLISECOND, 999); |
||||
|
||||
Date todayTo = itemDay.getTime(); |
||||
|
||||
// refresh log-report every minute
|
||||
XxlJobLogReport xxlJobLogReport = new XxlJobLogReport(); |
||||
xxlJobLogReport.setTriggerDay(todayFrom); |
||||
xxlJobLogReport.setRunningCount(0); |
||||
xxlJobLogReport.setSucCount(0); |
||||
xxlJobLogReport.setFailCount(0); |
||||
|
||||
Map<String, Object> triggerCountMap = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findLogReport(todayFrom, todayTo); |
||||
if (triggerCountMap!=null && triggerCountMap.size()>0) { |
||||
int triggerDayCount = triggerCountMap.containsKey("triggerDayCount")?Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCount"))):0; |
||||
int triggerDayCountRunning = triggerCountMap.containsKey("triggerDayCountRunning")?Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCountRunning"))):0; |
||||
int triggerDayCountSuc = triggerCountMap.containsKey("triggerDayCountSuc")?Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCountSuc"))):0; |
||||
int triggerDayCountFail = triggerDayCount - triggerDayCountRunning - triggerDayCountSuc; |
||||
|
||||
xxlJobLogReport.setRunningCount(triggerDayCountRunning); |
||||
xxlJobLogReport.setSucCount(triggerDayCountSuc); |
||||
xxlJobLogReport.setFailCount(triggerDayCountFail); |
||||
} |
||||
|
||||
// do refresh
|
||||
int ret = XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao().update(xxlJobLogReport); |
||||
if (ret < 1) { |
||||
XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao().save(xxlJobLogReport); |
||||
} |
||||
} |
||||
|
||||
} catch (Exception e) { |
||||
if (!toStop) { |
||||
logger.error(">>>>>>>>>>> xxl-job, job log report thread error:{}", e); |
||||
} |
||||
} |
||||
|
||||
try { |
||||
TimeUnit.MINUTES.sleep(1); |
||||
} catch (Exception e) { |
||||
if (!toStop) { |
||||
logger.error(e.getMessage(), e); |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
logger.info(">>>>>>>>>>> xxl-job, job log report thread stop"); |
||||
|
||||
} |
||||
}); |
||||
logrThread.setDaemon(true); |
||||
logrThread.setName("xxl-job, admin JobLogReportHelper"); |
||||
logrThread.start(); |
||||
} |
||||
|
||||
public void toStop(){ |
||||
toStop = true; |
||||
// interrupt and wait
|
||||
logrThread.interrupt(); |
||||
try { |
||||
logrThread.join(); |
||||
} catch (InterruptedException e) { |
||||
logger.error(e.getMessage(), e); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,26 @@ |
||||
package com.xxl.job.admin.dao; |
||||
|
||||
import com.xxl.job.admin.core.model.XxlJobLogReport; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.Date; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* job log |
||||
* @author xuxueli 2019-11-22 |
||||
*/ |
||||
@Mapper |
||||
public interface XxlJobLogReportDao { |
||||
|
||||
public int save(XxlJobLogReport xxlJobLogReport); |
||||
|
||||
public int update(XxlJobLogReport xxlJobLogReport); |
||||
|
||||
public List<XxlJobLogReport> queryLogReport(@Param("triggerDayFrom") Date triggerDayFrom, |
||||
@Param("triggerDayTo") Date triggerDayTo); |
||||
|
||||
public XxlJobLogReport queryLogReportTotal(); |
||||
|
||||
} |
@ -0,0 +1,62 @@ |
||||
<?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.XxlJobLogReportDao"> |
||||
|
||||
<resultMap id="XxlJobLogReport" type="com.xxl.job.admin.core.model.XxlJobLogReport" > |
||||
<result column="id" property="id" /> |
||||
<result column="trigger_day" property="triggerDay" /> |
||||
<result column="running_count" property="runningCount" /> |
||||
<result column="suc_count" property="sucCount" /> |
||||
<result column="fail_count" property="failCount" /> |
||||
</resultMap> |
||||
|
||||
<sql id="Base_Column_List"> |
||||
t.id, |
||||
t.trigger_day, |
||||
t.running_count, |
||||
t.suc_count, |
||||
t.fail_count |
||||
</sql> |
||||
|
||||
<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLogReport" useGeneratedKeys="true" keyProperty="id" > |
||||
INSERT INTO xxl_job_log_report ( |
||||
`trigger_day`, |
||||
`running_count`, |
||||
`suc_count`, |
||||
`fail_count` |
||||
) VALUES ( |
||||
#{triggerDay}, |
||||
#{runningCount}, |
||||
#{sucCount}, |
||||
#{failCount} |
||||
); |
||||
<!--<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> |
||||
SELECT LAST_INSERT_ID() |
||||
</selectKey>--> |
||||
</insert> |
||||
|
||||
<update id="update" > |
||||
UPDATE xxl_job_log_report |
||||
SET `running_count` = #{runningCount}, |
||||
`suc_count` = #{sucCount}, |
||||
`fail_count` = #{failCount} |
||||
WHERE `trigger_day` = #{triggerDay} |
||||
</update> |
||||
|
||||
<select id="queryLogReport" resultMap="XxlJobLogReport"> |
||||
SELECT <include refid="Base_Column_List" /> |
||||
FROM xxl_job_log_report AS t |
||||
WHERE t.trigger_day between #{triggerDayFrom} and #{triggerDayTo} |
||||
ORDER BY t.trigger_day ASC |
||||
</select> |
||||
|
||||
<select id="queryLogReportTotal" resultMap="XxlJobLogReport"> |
||||
SELECT |
||||
SUM(running_count) running_count, |
||||
SUM(suc_count) suc_count, |
||||
SUM(fail_count) fail_count |
||||
FROM xxl_job_log_report AS t |
||||
</select> |
||||
|
||||
</mapper> |
Loading…
Reference in new issue