From ebfdc86cda3f91755efa5d8dcdce1b11d897447c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Tue, 28 Mar 2023 10:30:49 +0800 Subject: [PATCH] optimize Audit module --- .../mybatisflex/core/audit/AuditManager.java | 41 ++++++++++--------- .../mybatisflex/core/audit/AuditMessage.java | 18 ++++++++ .../{AuditTimeCreator.java => Clock.java} | 7 ++-- ...ender.java => ConsoleMessageReporter.java} | 2 +- ...reator.java => DefaultMessageCreator.java} | 2 +- ...geCollector.java => MessageCollector.java} | 2 +- ...essageCreator.java => MessageCreator.java} | 2 +- ...essageSender.java => MessageReporter.java} | 2 +- ...or.java => ScheduledMessageCollector.java} | 14 ++++--- 9 files changed, 56 insertions(+), 34 deletions(-) rename mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/{AuditTimeCreator.java => Clock.java} (77%) rename mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/{ConsoleAuditMessageSender.java => ConsoleMessageReporter.java} (93%) rename mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/{DefaultAuditMessageCreator.java => DefaultMessageCreator.java} (96%) rename mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/{AuditMessageCollector.java => MessageCollector.java} (94%) rename mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/{AuditMessageCreator.java => MessageCreator.java} (95%) rename mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/{AuditMessageSender.java => MessageReporter.java} (96%) rename mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/{DefaultAuditMessageCollector.java => ScheduledMessageCollector.java} (83%) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditManager.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditManager.java index eee969e1..9386bf8d 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditManager.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditManager.java @@ -23,47 +23,50 @@ import java.sql.SQLException; import java.util.Collection; import java.util.Map; +/** + * 审计管理器,统一执行如何和配置入口 + */ public class AuditManager { - private static AuditTimeCreator auditTimeCreator = System::currentTimeMillis; - private static AuditMessageCreator auditMessageCreator = new DefaultAuditMessageCreator(); - private static AuditMessageCollector auditMessageCollector = new DefaultAuditMessageCollector(); + private static Clock clock = System::currentTimeMillis; + private static MessageCreator messageCreator = new DefaultMessageCreator(); + private static MessageCollector messageCollector = new ScheduledMessageCollector(); - public static AuditTimeCreator getAuditTimeCreator() { - return auditTimeCreator; + public static Clock getClock() { + return clock; } - public static void setAuditTimeCreator(AuditTimeCreator auditTimeCreator) { - AuditManager.auditTimeCreator = auditTimeCreator; + public static void setClock(Clock clock) { + AuditManager.clock = clock; } - public static AuditMessageCreator getAuditMessageCreator() { - return auditMessageCreator; + public static MessageCreator getMessageCreator() { + return messageCreator; } - public static void setAuditMessageCreator(AuditMessageCreator auditMessageCreator) { - AuditManager.auditMessageCreator = auditMessageCreator; + public static void setMessageCreator(MessageCreator messageCreator) { + AuditManager.messageCreator = messageCreator; } - public static AuditMessageCollector getAuditMessageCollector() { - return auditMessageCollector; + public static MessageCollector getMessageCollector() { + return messageCollector; } - public static void setAuditMessageCollector(AuditMessageCollector auditMessageCollector) { - AuditManager.auditMessageCollector = auditMessageCollector; + public static void setMessageCollector(MessageCollector messageCollector) { + AuditManager.messageCollector = messageCollector; } public static T startAudit(AuditRunnable supplier, BoundSql boundSql) throws SQLException { - AuditMessage auditMessage = auditMessageCreator.create(); + AuditMessage auditMessage = messageCreator.create(); if (auditMessage == null) { return supplier.execute(); } - auditMessage.setExtTime(auditTimeCreator.now()); + auditMessage.setExtTime(clock.getTick()); try { return supplier.execute(); } finally { - auditMessage.setElapsedTime(auditTimeCreator.now() - auditMessage.getExtTime()); + auditMessage.setElapsedTime(clock.getTick() - auditMessage.getExtTime()); auditMessage.setQuery(boundSql.getSql()); Object parameter = boundSql.getParameterObject(); @@ -87,7 +90,7 @@ public class AuditManager { } } } - auditMessageCollector.collect(auditMessage); + messageCollector.collect(auditMessage); } } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditMessage.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditMessage.java index fc8e2ca4..0296d2a9 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditMessage.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditMessage.java @@ -18,7 +18,9 @@ package com.mybatisflex.core.audit; import java.io.Serializable; import java.lang.reflect.Array; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class AuditMessage implements Serializable { @@ -36,6 +38,8 @@ public class AuditMessage implements Serializable { private long extTime; // Sql 执行的当前时间,单位毫秒 private long elapsedTime; // Sql 执行消耗的时间,单位毫秒 + private Map metas; //其他信息,元信息 + public String getPlatform() { return platform; @@ -138,6 +142,20 @@ public class AuditMessage implements Serializable { this.elapsedTime = elapsedTime; } + public Map getMetas() { + return metas; + } + + public void setMetas(Map metas) { + this.metas = metas; + } + + public void addMeta(String key, Object value) { + if (metas == null) { + metas = new HashMap<>(); + } + metas.put(key, value); + } @Override public String toString() { diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditTimeCreator.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/Clock.java similarity index 77% rename from mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditTimeCreator.java rename to mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/Clock.java index e6073d86..9539ac0e 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditTimeCreator.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/Clock.java @@ -16,11 +16,10 @@ package com.mybatisflex.core.audit; /** - * 审计时间创建器,对于性要求特别高的场景 - * 可以定义自己的时间构建器,用来代替 {@link System#currentTimeMillis()} + * 对于性要求特别高的场景,用户可以定义自己的时钟,用来代替 {@link System#currentTimeMillis()} */ -public interface AuditTimeCreator { +public interface Clock { - long now(); + long getTick(); } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/ConsoleAuditMessageSender.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/ConsoleMessageReporter.java similarity index 93% rename from mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/ConsoleAuditMessageSender.java rename to mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/ConsoleMessageReporter.java index 8e3d65ce..d0353673 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/ConsoleAuditMessageSender.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/ConsoleMessageReporter.java @@ -20,7 +20,7 @@ import java.util.List; /** * 控制台输出审计消息 */ -public class ConsoleAuditMessageSender implements AuditMessageSender { +public class ConsoleMessageReporter implements MessageReporter { @Override public void sendMessages(List messages) { diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/DefaultAuditMessageCreator.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/DefaultMessageCreator.java similarity index 96% rename from mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/DefaultAuditMessageCreator.java rename to mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/DefaultMessageCreator.java index 5f108e6d..e3a1cbbf 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/DefaultAuditMessageCreator.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/DefaultMessageCreator.java @@ -23,7 +23,7 @@ import java.util.Enumeration; /** * 默认的审计消息创建器,用来创建带有 hostIp 的审计消息 */ -public class DefaultAuditMessageCreator implements AuditMessageCreator { +public class DefaultMessageCreator implements MessageCreator { private String platform = "mybatis-flex"; private String hostIp = getHostIp(); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditMessageCollector.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/MessageCollector.java similarity index 94% rename from mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditMessageCollector.java rename to mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/MessageCollector.java index 6224a902..2764f758 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditMessageCollector.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/MessageCollector.java @@ -18,6 +18,6 @@ package com.mybatisflex.core.audit; /** * 审计消息收集器 */ -public interface AuditMessageCollector { +public interface MessageCollector { void collect(AuditMessage message); } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditMessageCreator.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/MessageCreator.java similarity index 95% rename from mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditMessageCreator.java rename to mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/MessageCreator.java index 788c429c..c15e4026 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditMessageCreator.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/MessageCreator.java @@ -19,7 +19,7 @@ package com.mybatisflex.core.audit; * 审计消息创建器,在一般的 web 服务中,用户应该自定义自己的 AuditMessageCreator * 用来配置当前操作用户、用户 IP 地址,访问的 url 地址等 */ -public interface AuditMessageCreator { +public interface MessageCreator { AuditMessage create(); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditMessageSender.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/MessageReporter.java similarity index 96% rename from mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditMessageSender.java rename to mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/MessageReporter.java index 7be65dba..5f9bff03 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/AuditMessageSender.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/MessageReporter.java @@ -22,7 +22,7 @@ import java.util.List; * 审计消息发送器,作用是把审计消息发送到指定的位置 * 比如控制台,磁盘、或者 kafka 服务器, http 服务器等 */ -public interface AuditMessageSender { +public interface MessageReporter { void sendMessages(List messages); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/DefaultAuditMessageCollector.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/ScheduledMessageCollector.java similarity index 83% rename from mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/DefaultAuditMessageCollector.java rename to mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/ScheduledMessageCollector.java index 64085af5..0f4a4256 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/DefaultAuditMessageCollector.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/ScheduledMessageCollector.java @@ -24,31 +24,33 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantReadWriteLock; /** - * 默认的审计消息收集器,其收集消息后,定时通过消息发送器{@link AuditMessageSender}把消息发送过去 + * 默认的审计消息收集器,其收集消息后,定时通过消息发送器{@link MessageReporter}把消息发送过去 */ -public class DefaultAuditMessageCollector implements AuditMessageCollector, Runnable { +public class ScheduledMessageCollector implements MessageCollector, Runnable { private long period = 10; private ScheduledExecutorService scheduler; - private AuditMessageSender messageSender = new ConsoleAuditMessageSender(); + private MessageReporter messageSender = new ConsoleMessageReporter(); private List messages = Collections.synchronizedList(new ArrayList<>()); private ReentrantReadWriteLock rrwLock = new ReentrantReadWriteLock(); - public DefaultAuditMessageCollector() { + public ScheduledMessageCollector() { scheduler = Executors.newSingleThreadScheduledExecutor(runnable -> { - Thread thread = new Thread(runnable, "DefaultAuditMessageCollector"); + Thread thread = new Thread(runnable, "ScheduledMessageCollector"); thread.setDaemon(true); return thread; }); scheduler.scheduleAtFixedRate(this, period, period, TimeUnit.SECONDS); } - public DefaultAuditMessageCollector(long period, AuditMessageSender messageSender) { + + public ScheduledMessageCollector(long period, MessageReporter messageSender) { this.period = period; this.messageSender = messageSender; } + @Override public void collect(AuditMessage message) { try {