mirror of
https://github.com/PowerJob/PowerJob.git
synced 2025-07-17 00:00:04 +08:00
feat: define DatabaseEvent
This commit is contained in:
parent
5080796c6f
commit
a0cc5670d4
@ -14,4 +14,6 @@ public class SJ {
|
||||
public static final Splitter COMMA_SPLITTER = Splitter.on(",");
|
||||
public static final Joiner COMMA_JOINER = Joiner.on(",");
|
||||
|
||||
public static final Joiner MONITOR_JOINER = Joiner.on("|").useForNull("-");
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,48 @@
|
||||
package tech.powerjob.server.monitor.events.db;
|
||||
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.Accessors;
|
||||
import tech.powerjob.server.common.SJ;
|
||||
import tech.powerjob.server.monitor.Event;
|
||||
|
||||
/**
|
||||
* 数据库操作事件
|
||||
*
|
||||
* @author tjq
|
||||
* @since 2022/9/6
|
||||
*/
|
||||
@Setter
|
||||
@Accessors(chain = true)
|
||||
public class DatabaseEvent implements Event {
|
||||
|
||||
private DatabaseEventType type;
|
||||
|
||||
private String serviceName;
|
||||
|
||||
private String methodName;
|
||||
|
||||
private Status status;
|
||||
|
||||
private Integer rows;
|
||||
|
||||
private long cost;
|
||||
|
||||
private String errorMsg;
|
||||
|
||||
private String extra;
|
||||
|
||||
public enum Status {
|
||||
SUCCESS,
|
||||
FAILED
|
||||
}
|
||||
|
||||
@Override
|
||||
public String type() {
|
||||
return "MONITOR_LOGGER_DB_OPERATION";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String message() {
|
||||
return SJ.MONITOR_JOINER.join(type, serviceName, methodName, status, rows, cost, errorMsg, extra);
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package tech.powerjob.server.monitor.events.db;
|
||||
|
||||
/**
|
||||
* DatabaseEventType
|
||||
*
|
||||
* @author tjq
|
||||
* @since 2022/9/6
|
||||
*/
|
||||
public enum DatabaseEventType {
|
||||
H2,
|
||||
CORE,
|
||||
MONGO
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package tech.powerjob.server.monitor.events.db;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
* 数据库监控注解
|
||||
*
|
||||
* @author tjq
|
||||
* @since 2022/9/6
|
||||
*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface DatabaseMonitor {
|
||||
/**
|
||||
* 类型,比如 H2 / CORE / MONGO
|
||||
* @return 类型
|
||||
*/
|
||||
DatabaseEventType type();
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package tech.powerjob.server.monitor.events.db;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.springframework.stereotype.Component;
|
||||
import tech.powerjob.server.monitor.monitors.ServerMonitor;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 监控切面
|
||||
*
|
||||
* @author tjq
|
||||
* @since 2022/9/6
|
||||
*/
|
||||
@Slf4j
|
||||
@Aspect
|
||||
@Component
|
||||
public class DatabaseMonitorAspect {
|
||||
|
||||
@Resource
|
||||
private ServerMonitor serverMonitor;
|
||||
|
||||
@Around(value = "@annotation(databaseMonitor))")
|
||||
public Object execute(ProceedingJoinPoint point, DatabaseMonitor databaseMonitor) throws Throwable {
|
||||
|
||||
final String className = point.getTarget().getClass().getSimpleName();
|
||||
final String methodName = point.getSignature().getName();
|
||||
|
||||
DatabaseEvent event = new DatabaseEvent().setType(databaseMonitor.type())
|
||||
.setServiceName(className)
|
||||
.setMethodName(methodName)
|
||||
.setStatus(DatabaseEvent.Status.SUCCESS);
|
||||
|
||||
long startTs = System.currentTimeMillis();
|
||||
try {
|
||||
final Object ret = point.proceed();
|
||||
event.setRows(parseEffectRows(ret));
|
||||
return ret;
|
||||
} catch (Throwable t) {
|
||||
|
||||
long cost = System.currentTimeMillis() - startTs;
|
||||
event.setCost(cost).setErrorMsg(t.getMessage()).setStatus(DatabaseEvent.Status.FAILED);
|
||||
serverMonitor.record(event);
|
||||
|
||||
throw t;
|
||||
}
|
||||
}
|
||||
|
||||
private static Integer parseEffectRows(Object ret) {
|
||||
// TODO: 计算影响行数,可能需要小改下 DAO 层,
|
||||
return null;
|
||||
}
|
||||
}
|
@ -23,6 +23,10 @@
|
||||
<groupId>tech.powerjob</groupId>
|
||||
<artifactId>powerjob-server-common</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>tech.powerjob</groupId>
|
||||
<artifactId>powerjob-server-monitor</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -0,0 +1,34 @@
|
||||
<?xml version="1.0"?>
|
||||
<included>
|
||||
|
||||
<property name="MONITOR_LOG_PATH" value="${LOG_PATH}/monitors"/>
|
||||
<property name="ROTATE_PATTERN" value="%d{yyyy-MM-dd}.%i"/>
|
||||
|
||||
<property name="MONITOR_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS}|%thread|%msg%n"/>
|
||||
|
||||
<!-- Configuration for database monitor logs. -->
|
||||
<appender name="MONITOR_LOGGER_DB_OPERATION_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${MONITOR_LOG_PATH}/database.log</file>
|
||||
<encoder>
|
||||
<pattern>${MONITOR_LOG_PATTERN}</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<fileNamePattern>${MONITOR_LOG_PATH}/database.log.${ROTATE_PATTERN}</fileNamePattern>
|
||||
<maxHistory>3</maxHistory>
|
||||
<maxFileSize>500MB</maxFileSize>
|
||||
<totalSizeCap>1500MB</totalSizeCap>
|
||||
</rollingPolicy>
|
||||
</appender>
|
||||
<appender name="ASYNC_MONITOR_LOGGER_DB_OPERATION_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
|
||||
<queueSize>512</queueSize>
|
||||
<discardingThreshold>0</discardingThreshold>
|
||||
<neverBlock>true</neverBlock>
|
||||
<appender-ref ref="MONITOR_LOGGER_DB_OPERATION_APPENDER"/>
|
||||
</appender>
|
||||
<logger name="MONITOR_LOGGER_DB_OPERATION" level="INFO" additivity="false">
|
||||
<appender-ref ref="ASYNC_MONITOR_LOGGER_DB_OPERATION_APPENDER"/>
|
||||
</logger>
|
||||
<!-- End of configuration for database monitor logs. -->
|
||||
|
||||
</included>
|
@ -14,6 +14,9 @@
|
||||
-->
|
||||
<property name="LOG_PATH" value="${user.home}/powerjob/server/logs"/>
|
||||
|
||||
<!-- include other logback configs -->
|
||||
<include resource="logback-config/powerjob_monitor.xml"/>
|
||||
|
||||
<!-- Configuration for ERROR logs. All error logs will write twice. -->
|
||||
<appender name="ERROR_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${LOG_PATH}/powerjob-server-error.log</file>
|
||||
|
Loading…
x
Reference in New Issue
Block a user