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 56ab5ee8abf4353621021fb80145dab1b1121ffc..f51d213f9a38ad71072f97696a48a9c1a162a5bb 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 c09f2cbc082f9fd6cdf3af1bf07ad3968e7a6ccd..1290c6b3700bc7a74fe8a0fcd2090387fb1e2763 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 e9a35c20e488fdb7800a8db36dec8f74c27da315..fc7594bbea20b2fa75f7f7ab91bd47ca07992743 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)); } }