From 932ce762b7a252d55673c228de5e39aefd49802d Mon Sep 17 00:00:00 2001 From: qujing226 Date: Wed, 23 Jul 2025 11:18:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(audit):=20=E5=A2=9E=E5=8A=A0=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E7=B1=BB=E5=9E=8B=E5=AD=97=E6=AE=B5=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=20DOID=20=E8=A7=A3=E6=9E=90=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 AuditProtocalLog 中添加 type 字段,用于区分日志类型 -优化 HashWriter 中的 extract 方法,获取并设置日志类型 - 修改 LogWriter 中的 parseDoid 方法,简化 DOID 解析逻辑 --- .../doip/audit/writer/AuditProtocalLog.java | 1 + .../bdware/doip/audit/writer/HashWriter.java | 40 ++++++++++++++++++- .../bdware/doip/audit/writer/LogWriter.java | 19 +++++---- 3 files changed, 48 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/bdware/doip/audit/writer/AuditProtocalLog.java b/src/main/java/org/bdware/doip/audit/writer/AuditProtocalLog.java index 56ab5ee..f51d213 100644 --- a/src/main/java/org/bdware/doip/audit/writer/AuditProtocalLog.java +++ b/src/main/java/org/bdware/doip/audit/writer/AuditProtocalLog.java @@ -55,6 +55,7 @@ public class AuditProtocalLog extends AuditLog { ServerInfo server; ClientInfo client; DoidInfo doid; + String type; String op; String status_code; String request_hash; diff --git a/src/main/java/org/bdware/doip/audit/writer/HashWriter.java b/src/main/java/org/bdware/doip/audit/writer/HashWriter.java index c09f2cb..1290c6b 100644 --- a/src/main/java/org/bdware/doip/audit/writer/HashWriter.java +++ b/src/main/java/org/bdware/doip/audit/writer/HashWriter.java @@ -1,14 +1,20 @@ package org.bdware.doip.audit.writer; import com.google.gson.Gson; +import com.google.gson.JsonObject; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.bdware.doip.auditrepo.AutoAuditDO; import org.bdware.doip.codec.doipMessage.DoipMessage; import org.bdware.doip.endpoint.client.ClientConfig; import org.bdware.doip.endpoint.client.DoipClientImpl; -import org.bdware.irp.irplib.core.IrpMessage; -import org.bdware.irp.irplib.core.IrpMessageCode; +import org.bdware.irp.irplib.core.*; +import org.bdware.irp.irplib.util.EncoderUtils; + +import javax.json.Json; +import java.util.Objects; + +import static org.bdware.irp.irplib.core.IrpMessage.fromByte2Json; //only log hash to audit proxy; @@ -28,6 +34,7 @@ public class HashWriter extends LogWriter { @Override public void write(AuditLog log) { try { + LOGGER.info("HashWriter write ----------------------------->"); LOGGER.info(new Gson().toJson(log)); if (!doipClient.isConnected()) { doipClient.reconnect(auditConfg.getAuditUrl()); @@ -39,10 +46,29 @@ public class HashWriter extends LogWriter { } public AuditLog extract(EndpointContext ctx, final IrpMessage request, final IrpMessage response) { + String type = "unknows"; + try { + IrpResponse r = (IrpResponse) response; + JsonObject values = r.getDoidValues(); + if (values.has("type")){ + type = values.get("type").getAsString(); + } + } catch (Exception e){ + } + try { + IrpRequest r = (IrpRequest) request; + JsonObject values = r.getDoidValues(); + if (values.has("type")){ + type = values.get("type").getAsString(); + } + }catch (Exception e){ + + } try { AuditProtocalLog log = new AuditProtocalLog(); log.time = System.currentTimeMillis(); log.doid = new AuditProtocalLog.DoidInfo(); + log.type = type; extractDOID(log.doid, request.getDoid()); log.eventType = "irp"; log.op = IrpMessageCode.toOpStr(request.header.opCode); @@ -57,17 +83,27 @@ public class HashWriter extends LogWriter { log.setServerDoId(ctx.getServerDoId()); return log; } catch (Exception e) { + LOGGER.info("HashWriter extract error2: ",e); e.printStackTrace(); } return null; } public AuditLog extract(EndpointContext ctx, DoipMessage request, DoipMessage response) { + String type = "data"; + try { + JsonObject jo = response.body.getDataAsDigitalObject().attributes; + if (jo.has("type")){ + type = jo.get("type").getAsString(); + } + }catch (Exception e){ + } try { AuditProtocalLog log = new AuditProtocalLog(); log.time = System.currentTimeMillis(); log.doid = new AuditProtocalLog.DoidInfo(); extractDOID(log.doid, request.header.parameters.id); + log.type = type; log.eventType = "doip"; log.op = request.header.parameters.operation; log.status_code = response.header.parameters.response.getName(); diff --git a/src/main/java/org/bdware/doip/audit/writer/LogWriter.java b/src/main/java/org/bdware/doip/audit/writer/LogWriter.java index e9a35c2..fc7594b 100644 --- a/src/main/java/org/bdware/doip/audit/writer/LogWriter.java +++ b/src/main/java/org/bdware/doip/audit/writer/LogWriter.java @@ -14,6 +14,7 @@ import org.bdware.irp.irplib.exception.IrpMessageEncodeException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.logging.Logger; public abstract class LogWriter { @@ -41,22 +42,20 @@ public abstract class LogWriter { for (int i = 0; i < doid.length() && pos.size() < 2; i++) if (doid.charAt(i) == '/') pos.add(i); - switch (pos.size()) { - case 2: - log.do_data_id = doid.substring(pos.get(1) + 1, doid.length()); - log.do_repo = doid.substring(pos.get(0) + 1, pos.get(1)); - log.do_prefix = doid.substring(0, pos.get(0)); - break; case 1: - log.do_repo = log.do_data_id = doid.substring(pos.get(0) + 1, doid.length()); + log.do_data_id = doid.substring(pos.get(0) + 1, doid.length()); log.do_prefix = doid.substring(0, pos.get(0)); + log.do_repo = null; break; case 0: - default: - log.do_repo = log.do_data_id = null; - log.do_prefix = doid; + log.do_data_id = doid; + log.do_prefix = log.do_repo = null; break; + default: + log.do_data_id = doid.substring(pos.get(1) + 1, doid.length()); + log.do_repo = doid.substring(pos.get(0) + 1, pos.get(1)); + log.do_prefix = doid.substring(0, pos.get(0)); } } -- Gitee