pom.xml
@@ -96,6 +96,11 @@ <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> </dependencies> <build> src/main/java/com/flightfeather/monitor/config/Swagger2Configuration.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package com.flightfeather.monitor.config import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import springfox.documentation.builders.ApiInfoBuilder import springfox.documentation.builders.PathSelectors import springfox.documentation.builders.RequestHandlerSelectors import springfox.documentation.oas.annotations.EnableOpenApi import springfox.documentation.spi.DocumentationType import springfox.documentation.spring.web.plugins.Docket /** * Date: 2023/10/25 */ @Configuration @EnableOpenApi class Swagger2Configuration { companion object { const val SWAGGER_SCAN_BASE_PACKAGE = "com.flightfeather.monitor" const val VERSION = "1.0.0" } // @Value("\${springfox.documentation.swagger.v2.enabled}") var swagger2Enable: Boolean = true @Bean fun createRestApi(): Docket = Docket(DocumentationType.OAS_30) .enable(swagger2Enable) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE)) .paths(PathSelectors.any()) .build() private fun apiInfo() = ApiInfoBuilder() .title("çæµæ°æ®è´¨éåææå¡") .description("çæµæ°æ®è´¨éåææå¡ API æ¥å£ææ¡£") .version(VERSION) .build() } src/main/java/com/flightfeather/monitor/domain/ds1/entity/RequestTask.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,119 @@ package com.flightfeather.monitor.domain.ds1.entity; import java.util.Date; import javax.persistence.*; @Table(name = "du_js_t_request_task") public class RequestTask { @Id private Integer id; /** * ä»»å¡å¼å¯æ¶é´ */ @Column(name = "start_time") private Date startTime; /** * ä»»å¡ç»ææ¶é´ */ @Column(name = "end_time") private Date endTime; /** * è¿è¡ç¶æ */ @Column(name = "running_status") private Boolean runningStatus; /** * 任塿¯å¦æå宿 */ private Boolean success; /** * @return id */ public Integer getId() { return id; } /** * @param id */ public void setId(Integer id) { this.id = id; } /** * è·åä»»å¡å¼å¯æ¶é´ * * @return start_time - ä»»å¡å¼å¯æ¶é´ */ public Date getStartTime() { return startTime; } /** * 设置任å¡å¼å¯æ¶é´ * * @param startTime ä»»å¡å¼å¯æ¶é´ */ public void setStartTime(Date startTime) { this.startTime = startTime; } /** * è·åä»»å¡ç»ææ¶é´ * * @return end_time - ä»»å¡ç»ææ¶é´ */ public Date getEndTime() { return endTime; } /** * 设置任å¡ç»ææ¶é´ * * @param endTime ä»»å¡ç»ææ¶é´ */ public void setEndTime(Date endTime) { this.endTime = endTime; } /** * è·åè¿è¡ç¶æ * * @return running_status - è¿è¡ç¶æ */ public Boolean getRunningStatus() { return runningStatus; } /** * 设置è¿è¡ç¶æ * * @param runningStatus è¿è¡ç¶æ */ public void setRunningStatus(Boolean runningStatus) { this.runningStatus = runningStatus; } /** * è·å任塿¯å¦æå宿 * * @return success - 任塿¯å¦æå宿 */ public Boolean getSuccess() { return success; } /** * è®¾ç½®ä»»å¡æ¯å¦æå宿 * * @param success 任塿¯å¦æå宿 */ public void setSuccess(Boolean success) { this.success = success; } } src/main/java/com/flightfeather/monitor/domain/ds1/entity/RequestTaskLog.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,98 @@ package com.flightfeather.monitor.domain.ds1.entity; import java.util.Date; import javax.persistence.*; @Table(name = "du_js_t_request_task_log") public class RequestTaskLog { @Id private Integer id; @Column(name = "request_id") private Integer requestId; /** * å建æ¶é´ */ @Column(name = "create_time") private Date createTime; @Column(name = "log_type") private String logType; private String log; /** * @return id */ public Integer getId() { return id; } /** * @param id */ public void setId(Integer id) { this.id = id; } /** * @return request_id */ public Integer getRequestId() { return requestId; } /** * @param requestId */ public void setRequestId(Integer requestId) { this.requestId = requestId; } /** * è·åå建æ¶é´ * * @return create_time - å建æ¶é´ */ public Date getCreateTime() { return createTime; } /** * 设置å建æ¶é´ * * @param createTime å建æ¶é´ */ public void setCreateTime(Date createTime) { this.createTime = createTime; } /** * @return log_type */ public String getLogType() { return logType; } /** * @param logType */ public void setLogType(String logType) { this.logType = logType == null ? null : logType.trim(); } /** * @return log */ public String getLog() { return log; } /** * @param log */ public void setLog(String log) { this.log = log == null ? null : log.trim(); } } src/main/java/com/flightfeather/monitor/domain/ds1/mapper/RequestTaskLogMapper.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,8 @@ package com.flightfeather.monitor.domain.ds1.mapper import com.flightfeather.monitor.domain.ds1.entity.RequestTaskLog import com.flightfeather.monitor.domain.util.MyMapper import org.apache.ibatis.annotations.Mapper @Mapper interface RequestTaskLogMapper : MyMapper<RequestTaskLog?> src/main/java/com/flightfeather/monitor/domain/ds1/mapper/RequestTaskMapper.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,8 @@ package com.flightfeather.monitor.domain.ds1.mapper import com.flightfeather.monitor.domain.ds1.entity.RequestTask import com.flightfeather.monitor.domain.util.MyMapper import org.apache.ibatis.annotations.Mapper @Mapper interface RequestTaskMapper : MyMapper<RequestTask?> src/main/java/com/flightfeather/monitor/domain/ds1/repository/DustExceptionDataRep.kt
@@ -2,6 +2,7 @@ import com.flightfeather.monitor.domain.ds1.entity.DustExceptionData import com.flightfeather.monitor.domain.ds1.mapper.DustExceptionDataMapper import com.github.pagehelper.PageHelper import org.springframework.stereotype.Repository import tk.mybatis.mapper.entity.Example import java.time.LocalDate @@ -13,9 +14,15 @@ * è·åææ°ä¸æ¡è®°å½ */ fun findLatestData(): DustExceptionData? { return dustExceptionDataMapper.selectOneByExample(Example(DustExceptionData::class.java).apply { val p = PageHelper.startPage<DustExceptionData>(1, 1) dustExceptionDataMapper.selectByExample(Example(DustExceptionData::class.java).apply { orderBy("endTime").desc() }) return if (p.isNotEmpty()) { p[0] } else { null } } /** src/main/java/com/flightfeather/monitor/domain/ds1/repository/DustExceptionSettingRep.kt
@@ -2,6 +2,7 @@ import com.flightfeather.monitor.domain.ds1.entity.DustExceptionSetting import com.flightfeather.monitor.domain.ds1.mapper.DustExceptionSettingMapper import com.github.pagehelper.PageHelper import org.springframework.stereotype.Repository import tk.mybatis.mapper.entity.Example @@ -13,9 +14,15 @@ * @param region åºå¿ */ fun findLatestSetting(region: String): DustExceptionSetting? { return dustExceptionSettingMapper.selectOneByExample(Example(DustExceptionSetting::class.java).apply { val p = PageHelper.startPage<DustExceptionSetting>(1, 1) dustExceptionSettingMapper.selectByExample(Example(DustExceptionSetting::class.java).apply { createCriteria().andEqualTo("region", region) orderBy("version").desc() }) return if (p.isNotEmpty()) { p[0] } else { null } } } src/main/java/com/flightfeather/monitor/domain/ds1/repository/DustStatisticsValueRep.kt
@@ -1,9 +1,8 @@ package com.flightfeather.monitor.domain.ds1.repository import com.flightfeather.monitor.domain.ds1.entity.DustExceptionData import com.flightfeather.monitor.domain.ds1.entity.DustSiteData import com.flightfeather.monitor.domain.ds1.entity.DustStatisticsValue import com.flightfeather.monitor.domain.ds1.mapper.DustStatisticsValueMapper import com.github.pagehelper.PageHelper import org.springframework.stereotype.Repository import tk.mybatis.mapper.entity.Example import java.time.Duration @@ -13,10 +12,16 @@ class DustStatisticsValueRep(private val dustStatisticsValueMapper: DustStatisticsValueMapper) { fun findLatestData(type: String): DustStatisticsValue? { return dustStatisticsValueMapper.selectOneByExample(Example(DustStatisticsValue::class.java).apply { val p = PageHelper.startPage<DustStatisticsValue>(1, 1) dustStatisticsValueMapper.selectByExample(Example(DustStatisticsValue::class.java).apply { createCriteria().andEqualTo("type", type) orderBy("lst").desc() }) return if (p.isNotEmpty()) { p[0] } else { null } } src/main/java/com/flightfeather/monitor/domain/ds1/repository/RequestTaskRep.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,30 @@ package com.flightfeather.monitor.domain.ds1.repository import com.flightfeather.monitor.domain.ds1.entity.RequestTask import com.flightfeather.monitor.domain.ds1.mapper.RequestTaskMapper import com.github.pagehelper.PageHelper import org.springframework.stereotype.Repository import tk.mybatis.mapper.entity.Example import java.time.LocalDateTime @Repository class RequestTaskRep(private val requestTaskMapper: RequestTaskMapper) { /** * æ¥è¯¢æè¿çä¸ä¸ªä»»å¡ */ fun findLatestTask(localDateTime: LocalDateTime): RequestTask? { val p = PageHelper.startPage<RequestTask>(1, 1) val s = localDateTime.withHour(0).withMinute(0).withSecond(0) val e = localDateTime.withHour(23).withMinute(59).withSecond(59) requestTaskMapper.selectByExample(Example(RequestTask::class.java).apply { createCriteria().andBetween("startTime", s, e) orderBy("startTime").desc() }) return if (p.isNotEmpty()) { p[0] } else { null } } } src/main/java/com/flightfeather/monitor/scheduledtasks/DustAnalysisTask.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,68 @@ package com.flightfeather.monitor.scheduledtasks import com.flightfeather.monitor.analysis.dust.ExceptionAnalysisController import com.flightfeather.monitor.analysis.dust.StatisticAnalysisController import com.flightfeather.monitor.domain.ds1.entity.RequestTask import com.flightfeather.monitor.domain.ds1.repository.RequestTaskRep import org.springframework.stereotype.Component import java.time.LocalDateTime /** * æ¬å°æ°æ®åæä»»å¡ */ @Component class DustAnalysisTask( private val statisticAnalysisController: StatisticAnalysisController, private val exceptionAnalysisController: ExceptionAnalysisController, private val requestTaskRep: RequestTaskRep, ) : BaseTimingTask() { // 任塿¯å¦å»¶è¿æ§è¡ private var task1Delay = false private var task2Delay = false private var task3Delay = false override val period: Long = 15 override fun execute(localtime: LocalDateTime) { doTask(localtime) } override fun doTask(localtime: LocalDateTime) { if (task1Delay || (localtime.hour == 8 && localtime.minute == 0)) { // 夿仿¥ç¬å任塿¯å¦å®æ val task = requestTaskRep.findLatestTask(localtime) task1Delay = isTaskDelay(task) if (task1Delay) return log.info("å¼å¸¸åææ§è¡") exceptionAnalysisController.init() exceptionAnalysisController.autoRun() } if (task2Delay || (localtime.hour == 9 && localtime.minute == 0)) { val task = requestTaskRep.findLatestTask(localtime) task2Delay = isTaskDelay(task) if (task2Delay) return log.info("æ¥åææ§è¡") statisticAnalysisController.autoRunDailyStatics() } if (localtime.dayOfMonth == 1 && localtime.hour == 9 && localtime.minute == 0) { val task = requestTaskRep.findLatestTask(localtime) task3Delay = isTaskDelay(task) if (task3Delay) return log.info("æåææ§è¡") statisticAnalysisController.autoRunMonthlyStatics() } } /** * å½ä»»å¡å¼å§æ§è¡æ¶ï¼å¤æä»»å¡ç¶æï¼å³å®æ¯å¦å»¶è¿æ§è¡ */ private fun isTaskDelay(task: RequestTask?): Boolean { // 任塿£å¨æ§è¡ï¼è·³è¿æ¤æ¬¡åæï¼å¨ä¸ä¸å¨æç»§ç»å¤æï¼çå¾ ä»»å¡å®æåè¿è¡åæ return if (task == null || task.runningStatus) { true } else !task.success } } src/main/java/com/flightfeather/monitor/scheduledtasks/DustMonthlyStatisticAnalysisTask.kt
@@ -13,7 +13,7 @@ override fun execute(localtime: LocalDateTime) { // println("æåæè½®è¯¢") // println(localtime) if (localtime.dayOfMonth == 2 && localtime.hour == 0 && localtime.minute == 0) { if (localtime.dayOfMonth == 1 && localtime.hour == 9 && localtime.minute == 0) { doTask(localtime) } } src/main/java/com/flightfeather/monitor/scheduledtasks/TaskController.kt
@@ -14,17 +14,17 @@ /** * æ°æ®è·åæ§å¶å¨ */ @Slf4j @Component class TaskController( dustExceptionAnalysisTask: DustExceptionAnalysisTask, dustDailyStatisticAnalysisTask: DustDailyStatisticAnalysisTask, dustMonthlyStatisticAnalysisTask: DustMonthlyStatisticAnalysisTask, dustAnalysisTask: DustAnalysisTask, ) { companion object { private const val FETCH_PERIOD_MIN = 1L * 60 private const val MAINTAIN_PERIOD_MIN = 5L * 60 private const val FETCH_PERIOD_MIN = 15L private const val MAINTAIN_PERIOD_MIN = 15L val log: Logger = LoggerFactory.getLogger(TaskController::class.java) } @@ -37,10 +37,10 @@ init { log.info("æ·»å 宿¶ä»»å¡") timeTask.clear() /*åç宿¶ä»»å¡å è¿æ¥*/ timeTask.add(dustExceptionAnalysisTask) timeTask.add(dustDailyStatisticAnalysisTask) timeTask.add(dustMonthlyStatisticAnalysisTask) // timeTask.add(dustExceptionAnalysisTask) // timeTask.add(dustDailyStatisticAnalysisTask) // timeTask.add(dustMonthlyStatisticAnalysisTask) timeTask.add(dustAnalysisTask) log.info("æ·»å 宿¶ä»»å¡å®æï¼ä»»å¡æ»è®¡${timeTask.size}个") } @@ -51,8 +51,8 @@ private fun fetchTask(isFirst: Boolean = false) { val time = LocalTime.now() val sec = time.second val delay = 60L - sec val min = time.minute val delay = FETCH_PERIOD_MIN - min % FETCH_PERIOD_MIN // var localtime = LocalDateTime.of(2021, 4, 16, 9, 0) if (!isFirst) { schedule = closeThread(schedule) @@ -70,7 +70,7 @@ it.execute(localtime) } // localtime = localtime.plusMinutes(1) }, delay, FETCH_PERIOD_MIN, TimeUnit.SECONDS) }, delay, FETCH_PERIOD_MIN, TimeUnit.MINUTES) } private fun maintainTask(isFirst: Boolean = false) { @@ -82,7 +82,7 @@ if (Date().time - taskTime.time > (FETCH_PERIOD_MIN + 1) * 60 * 1000) { fetchTask() } }, 0, MAINTAIN_PERIOD_MIN, TimeUnit.SECONDS) }, 0, MAINTAIN_PERIOD_MIN, TimeUnit.MINUTES) } private fun closeThread(s: ScheduledExecutorService): ScheduledExecutorService { src/main/java/com/flightfeather/monitor/utils/DateUtil.kt
@@ -6,18 +6,20 @@ fun findDurationDate(s: LocalDate, e: LocalDate): List<LocalDate> { val res = mutableListOf<LocalDate>() while (s.isBefore(e) || s.isEqual(e)) { res.add(s) s.plusDays(1) var sT = s while (sT.isBefore(e) || sT.isEqual(e)) { res.add(sT) sT = sT.plusDays(1) } return res } fun findDurationMonth(s: LocalDate, e: LocalDate): List<LocalDate> { val res = mutableListOf<LocalDate>() while (s.monthValue <= e.monthValue) { res.add(s) s.plusMonths(1) var sT = s while (sT.monthValue <= e.monthValue) { res.add(sT) sT = sT.plusMonths(1) } return res } src/main/resources/application.yml
@@ -20,7 +20,8 @@ mybatis: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl map-underscore-to-camel-case: true type-aliases-package: com.flightfeather.monitor.domain.ds1.entity mapper-locations: classpath*:mapper/**/*.xml src/main/resources/generator/generatorConfig4ds1.xml
@@ -50,10 +50,10 @@ <!-- enableCountByExample="false"--> <!-- enableUpdateByExample="false" enableDeleteByExample="false"--> <!-- enableSelectByExample="false" selectByExampleQueryId="false"/>--> <table tableName="du_js_t_site_latest_time" domainObjectName="DustSiteStatus" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/> <!-- <table tableName="du_js_t_site_latest_time" domainObjectName="DustSiteStatus"--> <!-- enableCountByExample="false"--> <!-- enableUpdateByExample="false" enableDeleteByExample="false"--> <!-- enableSelectByExample="false" selectByExampleQueryId="false"/>--> <!-- <table tableName="du_js_t_site_map" domainObjectName="DustSiteMap"--> <!-- enableCountByExample="false"--> <!-- enableUpdateByExample="false" enableDeleteByExample="false"--> @@ -82,5 +82,13 @@ <!-- enableCountByExample="false"--> <!-- enableUpdateByExample="false" enableDeleteByExample="false"--> <!-- enableSelectByExample="false" selectByExampleQueryId="false"/>--> <table tableName="du_js_t_request_task_log" domainObjectName="RequestTaskLog" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/> <table tableName="du_js_t_request_task" domainObjectName="RequestTask" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/> </context> </generatorConfiguration> src/main/resources/mapper/ds1/RequestTaskLogMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ <?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.flightfeather.monitor.domain.ds1.mapper.RequestTaskLogMapper"> <resultMap id="BaseResultMap" type="com.flightfeather.monitor.domain.ds1.entity.RequestTaskLog"> <!-- WARNING - @mbg.generated --> <id column="id" jdbcType="INTEGER" property="id" /> <result column="request_id" jdbcType="INTEGER" property="requestId" /> <result column="create_time" jdbcType="TIMESTAMP" property="createTime" /> <result column="log_type" jdbcType="VARCHAR" property="logType" /> </resultMap> <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.flightfeather.monitor.domain.ds1.entity.RequestTaskLog"> <!-- WARNING - @mbg.generated --> <result column="log" jdbcType="LONGVARCHAR" property="log" /> </resultMap> <sql id="Base_Column_List"> <!-- WARNING - @mbg.generated --> id, request_id, create_time, log_type </sql> <sql id="Blob_Column_List"> <!-- WARNING - @mbg.generated --> log </sql> </mapper> src/main/resources/mapper/ds1/RequestTaskMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ <?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.flightfeather.monitor.domain.ds1.mapper.RequestTaskMapper"> <resultMap id="BaseResultMap" type="com.flightfeather.monitor.domain.ds1.entity.RequestTask"> <!-- WARNING - @mbg.generated --> <id column="id" jdbcType="INTEGER" property="id" /> <result column="start_time" jdbcType="TIMESTAMP" property="startTime" /> <result column="end_time" jdbcType="TIMESTAMP" property="endTime" /> <result column="running_status" jdbcType="BIT" property="runningStatus" /> <result column="success" jdbcType="BIT" property="success" /> </resultMap> <sql id="Base_Column_List"> <!-- WARNING - @mbg.generated --> id, start_time, end_time, running_status, success </sql> </mapper>