Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
6e3e24a9
提交
6e3e24a9
authored
4月 24, 2017
作者:
xueli.xue
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
新增调度,仪表盘
上级
b7b411ce
隐藏空白字符变更
内嵌
并排
正在显示
15 个修改的文件
包含
207 行增加
和
29 行删除
+207
-29
README.md
README.md
+1
-2
IndexController.java
...in/java/com/xxl/job/admin/controller/IndexController.java
+17
-6
JobLogController.java
...n/java/com/xxl/job/admin/controller/JobLogController.java
+6
-4
IXxlJobInfoDao.java
...n/src/main/java/com/xxl/job/admin/dao/IXxlJobInfoDao.java
+3
-0
IXxlJobLogDao.java
...in/src/main/java/com/xxl/job/admin/dao/IXxlJobLogDao.java
+3
-1
XxlJobInfoDaoImpl.java
...in/java/com/xxl/job/admin/dao/impl/XxlJobInfoDaoImpl.java
+5
-0
XxlJobLogDaoImpl.java
...ain/java/com/xxl/job/admin/dao/impl/XxlJobLogDaoImpl.java
+6
-1
IXxlJobService.java
...c/main/java/com/xxl/job/admin/service/IXxlJobService.java
+2
-1
XxlJobServiceImpl.java
...ava/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
+41
-8
XxlJobInfoMapper.xml
...in/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
+7
-1
XxlJobLogMapper.xml
...min/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
+11
-0
common.macro.ftl
.../src/main/webapp/WEB-INF/template/common/common.macro.ftl
+3
-3
index.ftl
xxl-job-admin/src/main/webapp/WEB-INF/template/index.ftl
+100
-0
jobinfo.index.ftl
...rc/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl
+1
-1
joblog.detail.1.js
xxl-job-admin/src/main/webapp/static/js/joblog.detail.1.js
+1
-1
没有找到文件。
README.md
浏览文件 @
6e3e24a9
...
@@ -780,8 +780,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
...
@@ -780,8 +780,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
-
3、任务权限管理;
-
3、任务权限管理;
-
4、执行器,server启动,注册逻辑调整;
-
4、执行器,server启动,注册逻辑调整;
-
5、调度失败重试机制;
-
5、调度失败重试机制;
-
6、JobHandler开启多线程时,支持记录执行日志;
-
7、JobHandler开启多线程时,支持记录执行日志;
## 七、其他
## 七、其他
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java
浏览文件 @
6e3e24a9
...
@@ -3,6 +3,7 @@ package com.xxl.job.admin.controller;
...
@@ -3,6 +3,7 @@ package com.xxl.job.admin.controller;
import
com.xxl.job.admin.controller.annotation.PermessionLimit
;
import
com.xxl.job.admin.controller.annotation.PermessionLimit
;
import
com.xxl.job.admin.controller.interceptor.PermissionInterceptor
;
import
com.xxl.job.admin.controller.interceptor.PermissionInterceptor
;
import
com.xxl.job.admin.core.util.PropertiesUtil
;
import
com.xxl.job.admin.core.util.PropertiesUtil
;
import
com.xxl.job.admin.service.IXxlJobService
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.stereotype.Controller
;
...
@@ -11,8 +12,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
...
@@ -11,8 +12,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.Map
;
/**
/**
* index controller
* index controller
...
@@ -21,13 +24,16 @@ import javax.servlet.http.HttpServletResponse;
...
@@ -21,13 +24,16 @@ import javax.servlet.http.HttpServletResponse;
@Controller
@Controller
public
class
IndexController
{
public
class
IndexController
{
@Resource
private
IXxlJobService
xxlJobService
;
@RequestMapping
(
"/"
)
@RequestMapping
(
"/"
)
@PermessionLimit
(
limit
=
false
)
public
String
index
(
Model
model
)
{
public
String
index
(
Model
model
,
HttpServletRequest
request
)
{
if
(!
PermissionInterceptor
.
ifLogin
(
request
))
{
Map
<
String
,
Object
>
dashboardMap
=
xxlJobService
.
dashboardInfo
();
return
"redirect:/toLogin"
;
model
.
addAllAttributes
(
dashboardMap
)
;
}
return
"
redirect:/jobinfo
"
;
return
"
index
"
;
}
}
@RequestMapping
(
"/toLogin"
)
@RequestMapping
(
"/toLogin"
)
...
@@ -71,6 +77,11 @@ public class IndexController {
...
@@ -71,6 +77,11 @@ public class IndexController {
@RequestMapping
(
"/help"
)
@RequestMapping
(
"/help"
)
public
String
help
()
{
public
String
help
()
{
/*if (!PermissionInterceptor.ifLogin(request)) {
return "redirect:/toLogin";
}*/
return
"help"
;
return
"help"
;
}
}
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
浏览文件 @
6e3e24a9
...
@@ -120,10 +120,12 @@ public class JobLogController {
...
@@ -120,10 +120,12 @@ public class JobLogController {
ReturnT
<
LogResult
>
logResult
=
executorBiz
.
log
(
triggerTime
,
logId
,
fromLineNum
);
ReturnT
<
LogResult
>
logResult
=
executorBiz
.
log
(
triggerTime
,
logId
,
fromLineNum
);
// is end
// is end
/*XxlJobLog jobLog = xxlJobLogDao.load(logId);
if
(
logResult
.
getContent
()!=
null
&&
logResult
.
getContent
().
getFromLineNum
()
>
logResult
.
getContent
().
getToLineNum
())
{
if (jobLog.getHandleCode() > 0) {
XxlJobLog
jobLog
=
xxlJobLogDao
.
load
(
logId
);
logResult.getContent().setEnd(true);
if
(
jobLog
.
getHandleCode
()
>
0
)
{
}*/
logResult
.
getContent
().
setEnd
(
true
);
}
}
return
logResult
;
return
logResult
;
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobInfoDao.java
浏览文件 @
6e3e24a9
...
@@ -23,4 +23,7 @@ public interface IXxlJobInfoDao {
...
@@ -23,4 +23,7 @@ public interface IXxlJobInfoDao {
public
int
delete
(
int
id
);
public
int
delete
(
int
id
);
public
List
<
XxlJobInfo
>
getJobsByGroup
(
String
jobGroup
);
public
List
<
XxlJobInfo
>
getJobsByGroup
(
String
jobGroup
);
public
int
findAllCount
();
}
}
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobLogDao.java
浏览文件 @
6e3e24a9
...
@@ -23,5 +23,7 @@ public interface IXxlJobLogDao {
...
@@ -23,5 +23,7 @@ public interface IXxlJobLogDao {
public
int
updateHandleInfo
(
XxlJobLog
xxlJobLog
);
public
int
updateHandleInfo
(
XxlJobLog
xxlJobLog
);
public
int
delete
(
int
jobId
);
public
int
delete
(
int
jobId
);
public
int
findByHandleCodeCount
(
int
handleCode
);
}
}
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobInfoDaoImpl.java
浏览文件 @
6e3e24a9
...
@@ -66,4 +66,9 @@ public class XxlJobInfoDaoImpl implements IXxlJobInfoDao {
...
@@ -66,4 +66,9 @@ public class XxlJobInfoDaoImpl implements IXxlJobInfoDao {
return
sqlSessionTemplate
.
selectList
(
"XxlJobInfoMapper.getJobsByGroup"
,
jobGroup
);
return
sqlSessionTemplate
.
selectList
(
"XxlJobInfoMapper.getJobsByGroup"
,
jobGroup
);
}
}
@Override
public
int
findAllCount
()
{
return
sqlSessionTemplate
.
selectOne
(
"XxlJobInfoMapper.findAllCount"
);
}
}
}
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobLogDaoImpl.java
浏览文件 @
6e3e24a9
...
@@ -76,5 +76,10 @@ public class XxlJobLogDaoImpl implements IXxlJobLogDao {
...
@@ -76,5 +76,10 @@ public class XxlJobLogDaoImpl implements IXxlJobLogDao {
public
int
delete
(
int
jobId
)
{
public
int
delete
(
int
jobId
)
{
return
sqlSessionTemplate
.
delete
(
"XxlJobLogMapper.delete"
,
jobId
);
return
sqlSessionTemplate
.
delete
(
"XxlJobLogMapper.delete"
,
jobId
);
}
}
@Override
public
int
findByHandleCodeCount
(
int
handleCode
)
{
return
sqlSessionTemplate
.
selectOne
(
"XxlJobLogMapper.findByHandleCodeCount"
,
handleCode
);
}
}
}
xxl-job-admin/src/main/java/com/xxl/job/admin/service/IXxlJobService.java
浏览文件 @
6e3e24a9
...
@@ -26,5 +26,6 @@ public interface IXxlJobService {
...
@@ -26,5 +26,6 @@ public interface IXxlJobService {
public
ReturnT
<
String
>
resume
(
int
id
);
public
ReturnT
<
String
>
resume
(
int
id
);
public
ReturnT
<
String
>
triggerJob
(
int
id
);
public
ReturnT
<
String
>
triggerJob
(
int
id
);
Map
<
String
,
Object
>
dashboardInfo
();
}
}
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
浏览文件 @
6e3e24a9
...
@@ -4,12 +4,12 @@ import com.xxl.job.admin.core.model.XxlJobGroup;
...
@@ -4,12 +4,12 @@ import com.xxl.job.admin.core.model.XxlJobGroup;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum
;
import
com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.dao.IXxlJobGroupDao
;
import
com.xxl.job.admin.core.thread.JobRegistryHelper
;
import
com.xxl.job.admin.dao.IXxlJobInfoDao
;
import
com.xxl.job.admin.dao.*
;
import
com.xxl.job.admin.dao.IXxlJobLogDao
;
import
com.xxl.job.admin.dao.IXxlJobLogGlueDao
;
import
com.xxl.job.admin.service.IXxlJobService
;
import
com.xxl.job.admin.service.IXxlJobService
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.registry.RegistHelper
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.quartz.CronExpression
;
import
org.quartz.CronExpression
;
import
org.quartz.SchedulerException
;
import
org.quartz.SchedulerException
;
...
@@ -19,9 +19,7 @@ import org.springframework.stereotype.Service;
...
@@ -19,9 +19,7 @@ import org.springframework.stereotype.Service;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
java.text.MessageFormat
;
import
java.text.MessageFormat
;
import
java.util.HashMap
;
import
java.util.*
;
import
java.util.List
;
import
java.util.Map
;
/**
/**
* core job action for xxl-job
* core job action for xxl-job
...
@@ -257,5 +255,40 @@ public class XxlJobServiceImpl implements IXxlJobService {
...
@@ -257,5 +255,40 @@ public class XxlJobServiceImpl implements IXxlJobService {
return
ReturnT
.
FAIL
;
return
ReturnT
.
FAIL
;
}
}
}
}
@Override
public
Map
<
String
,
Object
>
dashboardInfo
()
{
int
jobInfoCount
=
xxlJobInfoDao
.
findAllCount
();
int
jobLogCount
=
xxlJobLogDao
.
findByHandleCodeCount
(-
1
);
int
jobLogSuccessCount
=
xxlJobLogDao
.
findByHandleCodeCount
(
ReturnT
.
SUCCESS_CODE
);
// executor count
Set
<
String
>
executerAddressSet
=
new
HashSet
<
String
>();
List
<
XxlJobGroup
>
groupList
=
xxlJobGroupDao
.
findAll
();
if
(
CollectionUtils
.
isNotEmpty
(
groupList
))
{
for
(
XxlJobGroup
group:
groupList
)
{
List
<
String
>
registryList
=
null
;
if
(
group
.
getAddressType
()
==
0
)
{
registryList
=
JobRegistryHelper
.
discover
(
RegistHelper
.
RegistType
.
EXECUTOR
.
name
(),
group
.
getAppName
());
}
else
{
if
(
StringUtils
.
isNotBlank
(
group
.
getAddressList
()))
{
registryList
=
Arrays
.
asList
(
group
.
getAddressList
().
split
(
","
));
}
}
if
(
CollectionUtils
.
isNotEmpty
(
registryList
))
{
executerAddressSet
.
addAll
(
registryList
);
}
}
}
int
executorCount
=
executerAddressSet
.
size
();
Map
<
String
,
Object
>
dashboardMap
=
new
HashMap
<
String
,
Object
>();
dashboardMap
.
put
(
"jobInfoCount"
,
jobInfoCount
);
dashboardMap
.
put
(
"jobLogCount"
,
jobLogCount
);
dashboardMap
.
put
(
"jobLogSuccessCount"
,
jobLogSuccessCount
);
dashboardMap
.
put
(
"executorCount"
,
executorCount
);
return
dashboardMap
;
}
}
}
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
浏览文件 @
6e3e24a9
...
@@ -151,5 +151,10 @@
...
@@ -151,5 +151,10 @@
FROM XXL_JOB_QRTZ_TRIGGER_INFO AS t
FROM XXL_JOB_QRTZ_TRIGGER_INFO AS t
WHERE t.job_group = #{jobGroup}
WHERE t.job_group = #{jobGroup}
</select>
</select>
<select
id=
"findAllCount"
resultType=
"int"
>
SELECT count(1)
FROM XXL_JOB_QRTZ_TRIGGER_INFO
</select>
</mapper>
</mapper>
\ No newline at end of file
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
浏览文件 @
6e3e24a9
...
@@ -123,5 +123,15 @@
...
@@ -123,5 +123,15 @@
delete from XXL_JOB_QRTZ_TRIGGER_LOG
delete from XXL_JOB_QRTZ_TRIGGER_LOG
WHERE job_id = #{jobId}
WHERE job_id = #{jobId}
</delete>
</delete>
<select
id=
"findByHandleCodeCount"
parameterType=
"java.lang.Integer"
resultType=
"java.lang.Integer"
>
SELECT count(1)
FROM XXL_JOB_QRTZ_TRIGGER_LOG AS t
<trim
prefix=
"WHERE"
prefixOverrides=
"AND | OR"
>
<if
test=
"_parameter gt 0"
>
AND t.handle_code = #{handleCode}
</if>
</trim>
</select>
</mapper>
</mapper>
\ No newline at end of file
xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl
浏览文件 @
6e3e24a9
...
@@ -81,10 +81,10 @@
...
@@ -81,10 +81,10 @@
<!-- sidebar menu: : style can be found in sidebar.less -->
<!-- sidebar menu: : style can be found in sidebar.less -->
<ul class="sidebar-menu">
<ul class="sidebar-menu">
<li class="header">常用模块</li>
<li class="header">常用模块</li>
<li class="nav-click <#if pageName == "jobinfo">active</#if>" ><a href="${request.contextPath}/jobinfo"><i class="fa fa-circle-o text-
red"></i> <span>调度
管理</span></a></li>
<li class="nav-click <#if pageName == "jobinfo">active</#if>" ><a href="${request.contextPath}/jobinfo"><i class="fa fa-circle-o text-
aqua"></i> <span>任务
管理</span></a></li>
<li class="nav-click <#if pageName == "joblog">active</#if>" ><a href="${request.contextPath}/joblog"><i class="fa fa-circle-o text-yellow"></i><span>调度日志</span></a></li>
<li class="nav-click <#if pageName == "joblog">active</#if>" ><a href="${request.contextPath}/joblog"><i class="fa fa-circle-o text-yellow"></i><span>调度日志</span></a></li>
<li class="nav-click <#if pageName == "jobgroup">active</#if>" ><a href="${request.contextPath}/jobgroup"><i class="fa fa-circle-o text-
aqua
"></i> <span>执行器管理</span></a></li>
<li class="nav-click <#if pageName == "jobgroup">active</#if>" ><a href="${request.contextPath}/jobgroup"><i class="fa fa-circle-o text-
green
"></i> <span>执行器管理</span></a></li>
<li class="nav-click <#if pageName == "help">active</#if>" ><a href="${request.contextPath}/help"><i class="fa fa-circle-o text-
red
"></i><span>使用教程</span></a></li>
<li class="nav-click <#if pageName == "help">active</#if>" ><a href="${request.contextPath}/help"><i class="fa fa-circle-o text-
gray
"></i><span>使用教程</span></a></li>
</ul>
</ul>
</section>
</section>
<!-- /.sidebar -->
<!-- /.sidebar -->
...
...
xxl-job-admin/src/main/webapp/WEB-INF/template/index.ftl
0 → 100644
浏览文件 @
6e3e24a9
<!DOCTYPE html>
<html>
<head>
<title>
任务调度中心
</title>
<
#
import
"/
common
/
common
.
macro
.
ftl
"
as
netCommon
>
<
@
netCommon
.
commonStyle
/>
</head>
<body
class=
"hold-transition skin-blue sidebar-mini <#if cookieMap?exists && "
off
"
==
cookieMap
["
adminlte_settings
"].
value
>
sidebar-collapse
</
#
if>
">
<div
class=
"wrapper"
>
<!-- header -->
<
@
netCommon
.
commonHeader
/>
<!-- left -->
<
@
netCommon
.
commonLeft
"
index
"
/>
<!-- Content Wrapper. Contains page content -->
<div
class=
"content-wrapper"
>
<!-- Content Header (Page header) -->
<section
class=
"content-header"
>
<h1>
仪表盘
<small>
任务调度中心
</small></h1>
<!--
<ol class="breadcrumb">
<li><a><i class="fa fa-dashboard"></i>调度中心</a></li>
<li class="active">使用教程</li>
</ol>
-->
</section>
<!-- Main content -->
<section
class=
"content"
>
<!-- 简要报表 -->
<div
class=
"row"
>
<
#
--
任务信息
--
>
<div
class=
"col-md-4 col-sm-6 col-xs-12"
>
<div
class=
"info-box bg-aqua"
>
<span
class=
"info-box-icon"
><i
class=
"fa fa-flag-o"
></i></span>
<div
class=
"info-box-content"
>
<span
class=
"info-box-text"
>
任务数量
</span>
<span
class=
"info-box-number"
>
${jobInfoCount}
</span>
<div
class=
"progress"
>
<div
class=
"progress-bar"
style=
"width: 100%"
></div>
</div>
<span
class=
"progress-description"
>
系统中配置的任务数量
</span>
</div>
</div>
</div>
<
#
--
调度信息
--
>
<div
class=
"col-md-4 col-sm-6 col-xs-12"
>
<div
class=
"info-box bg-yellow"
>
<span
class=
"info-box-icon"
><i
class=
"fa fa-calendar"
></i></span>
<div
class=
"info-box-content"
>
<span
class=
"info-box-text"
>
调度次数
</span>
<span
class=
"info-box-number"
>
${jobLogCount}
</span>
<div
class=
"progress"
>
<div
class=
"progress-bar"
style=
"width: ${(jobLogSuccessCount*100/jobLogCount)?string("
0
.
00
")}%"
></div>
</div>
<span
class=
"progress-description"
>
调度成功率:${(jobLogSuccessCount*100/jobLogCount)?string("0.00")}
<small>
%
</small>
</span>
</div>
</div>
</div>
<
#
--
执行器
--
>
<div
class=
"col-md-4 col-sm-6 col-xs-12"
>
<div
class=
"info-box bg-green"
>
<span
class=
"info-box-icon"
><i
class=
"fa fa-thumbs-o-up"
></i></span>
<div
class=
"info-box-content"
>
<span
class=
"info-box-text"
>
执行器数量
</span>
<span
class=
"info-box-number"
>
${executorCount}
</span>
<div
class=
"progress"
>
<div
class=
"progress-bar"
style=
"width: 100%"
></div>
</div>
<span
class=
"progress-description"
>
心跳检测成功的执行器机器数量
</span>
</div>
</div>
</div>
</div>
<!-- /.row -->
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
<!-- footer -->
<
@
netCommon
.
commonFooter
/>
</div>
<
@
netCommon
.
commonScript
/>
</body>
</html>
xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl
浏览文件 @
6e3e24a9
...
@@ -25,7 +25,7 @@
...
@@ -25,7 +25,7 @@
<div
class=
"content-wrapper"
>
<div
class=
"content-wrapper"
>
<!-- Content Header (Page header) -->
<!-- Content Header (Page header) -->
<section
class=
"content-header"
>
<section
class=
"content-header"
>
<h1>
调度
管理
<small>
任务调度中心
</small></h1>
<h1>
任务
管理
<small>
任务调度中心
</small></h1>
<!--
<!--
<ol class="breadcrumb">
<ol class="breadcrumb">
<li><a><i class="fa fa-dashboard"></i>调度管理</a></li>
<li><a><i class="fa fa-dashboard"></i>调度管理</a></li>
...
...
xxl-job-admin/src/main/webapp/static/js/joblog.detail.1.js
浏览文件 @
6e3e24a9
...
@@ -47,7 +47,7 @@ $(function() {
...
@@ -47,7 +47,7 @@ $(function() {
// valid end
// valid end
if
(
data
.
content
.
end
)
{
if
(
data
.
content
.
end
)
{
logRunStop
(
'<span style="color: green;">[Rolling Log Finish]</span>'
);
logRunStop
(
'<
br><
span style="color: green;">[Rolling Log Finish]</span>'
);
return
;
return
;
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论