From 473bb5b0d0fd5d4e59ac31a6d61fb4dc2b1cf02f Mon Sep 17 00:00:00 2001 From: u$f Date: Thu, 6 Feb 2025 17:15:56 +0100 Subject: [PATCH] collect application shutdown instant + pending sessions (#97) --- pom.xml | 2 +- .../usf/inspect/core/InspectRestClient.java | 5 +- .../inspect/core/RestClientProperties.java | 4 +- .../core/ScheduledDispatchHandler.java | 7 +-- .../org/usf/inspect/core/SessionLogger.java | 53 ++++++++++--------- 5 files changed, 39 insertions(+), 32 deletions(-) diff --git a/pom.xml b/pom.xml index 8d2215f..8984cac 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.github.oneteme inspect-core - 0.0.19-SNAPSHOT + 1.0.0 jar inspect-core INtegrated System Performance Evaluation and Communication Tracking core libray diff --git a/src/main/java/org/usf/inspect/core/InspectRestClient.java b/src/main/java/org/usf/inspect/core/InspectRestClient.java index a8108af..eab6ece 100644 --- a/src/main/java/org/usf/inspect/core/InspectRestClient.java +++ b/src/main/java/org/usf/inspect/core/InspectRestClient.java @@ -1,6 +1,7 @@ package org.usf.inspect.core; import static java.time.Duration.ofSeconds; +import static java.time.Instant.now; import static java.util.Objects.isNull; import static java.util.Objects.nonNull; import static org.springframework.http.HttpHeaders.CONTENT_ENCODING; @@ -43,7 +44,7 @@ public InspectRestClient(RestClientProperties properties, InstanceEnvironment ap } @Override - public boolean dispatch(boolean complete, int attemps, List sessions) { + public boolean dispatch(boolean complete, int attemps, List sessions, int pending) { if(isNull(instanceId)) {//if not registered before try { instanceId = template.postForObject(properties.getInstanceApi(), application, String.class); @@ -53,7 +54,7 @@ public boolean dispatch(boolean complete, int attemps, List sessions) { } } if(nonNull(instanceId)) { - template.put(properties.getSessionApi(), sessions.toArray(Session[]::new), instanceId); + template.put(properties.getSessionApi(), sessions.toArray(Session[]::new), instanceId, pending, complete ? now() : null); return true; } return false; diff --git a/src/main/java/org/usf/inspect/core/RestClientProperties.java b/src/main/java/org/usf/inspect/core/RestClientProperties.java index fcad9d5..a34fc34 100644 --- a/src/main/java/org/usf/inspect/core/RestClientProperties.java +++ b/src/main/java/org/usf/inspect/core/RestClientProperties.java @@ -18,12 +18,12 @@ public final class RestClientProperties { private static final String HOST_PATTERN = "https?://[\\w\\-\\.]+(:\\d{2,5})?\\/?"; - private static final String PATH_PATTERN = "[\\w\\-\\{\\}]+(\\/[\\w\\-\\{\\}]+)*"; + private static final String PATH_PATTERN = "[\\w\\-\\{\\}]+(\\/[\\w\\-\\{\\}]+)*(\\?.+)?"; private static final String SLASH = "/"; private String host = "http://localhost:9000"; private String instanceApi = "v3/trace/instance"; //[POST] async - private String sessionApi = "v3/trace/instance/{id}/session"; //[PUT] async + private String sessionApi = "v3/trace/instance/{id}/session?pending={}&end={}"; //[PUT] async private int compressMinSize = 0; //in bytes, 0 no compress void validate() { diff --git a/src/main/java/org/usf/inspect/core/ScheduledDispatchHandler.java b/src/main/java/org/usf/inspect/core/ScheduledDispatchHandler.java index a35b9cb..6aba98a 100644 --- a/src/main/java/org/usf/inspect/core/ScheduledDispatchHandler.java +++ b/src/main/java/org/usf/inspect/core/ScheduledDispatchHandler.java @@ -91,10 +91,11 @@ private void tryDispatch() { private void dispatch(boolean complete) { var cs = queue.pop(filter); - if(!cs.isEmpty()) { + var pg = queue.size(); // ~pending + delta + if(!cs.isEmpty() || complete) { log.trace("scheduled dispatch of {} items...", cs.size()); try { - if(dispatcher.dispatch(complete, ++attempts, unmodifiableList(cs))) { + if(dispatcher.dispatch(complete, ++attempts, unmodifiableList(cs), pg)) { if(attempts > 1) { //more than one attempt log.info("successfully dispatched {} items after {} attempts", cs.size(), attempts); } @@ -142,7 +143,7 @@ public void complete() { @FunctionalInterface public interface Dispatcher { - boolean dispatch(boolean complete, int attempts, List list) throws Exception; //TD return List dispatched sessions + boolean dispatch(boolean complete, int attempts, List list, int pending) throws Exception; //TD return List dispatched sessions } private final class SafeQueue { diff --git a/src/main/java/org/usf/inspect/core/SessionLogger.java b/src/main/java/org/usf/inspect/core/SessionLogger.java index d6a406a..45252f2 100644 --- a/src/main/java/org/usf/inspect/core/SessionLogger.java +++ b/src/main/java/org/usf/inspect/core/SessionLogger.java @@ -13,37 +13,42 @@ final class SessionLogger implements SessionHandler { @Override //sync. avoid session log collision public synchronized void handle(Session s) { - log.debug("+ {}", s); - for(var req : s.getRestRequests()) { - printSessionStage(req); - } - for(var req : s.getDatabaseRequests()) { - printSessionStage(req); - printRequestStages(req.getActions()); - } - for(var req : s.getFtpRequests()) { - printSessionStage(req); - printRequestStages(req.getActions()); - } - for(var req : s.getMailRequests()) { - printSessionStage(req); - printRequestStages(req.getActions()); - } - for(var req : s.getLdapRequests()) { - printSessionStage(req); - printRequestStages(req.getActions()); - } - for(var req : s.getLocalRequests()) { - printSessionStage(req); + if(log.isDebugEnabled()) { + log.debug("+ {}", s); + for(var req : s.getRestRequests()) { + printSessionStage(req); + } + for(var req : s.getDatabaseRequests()) { + printSessionStage(req); + printRequestStages(req.getActions()); + } + for(var req : s.getFtpRequests()) { + printSessionStage(req); + printRequestStages(req.getActions()); + } + for(var req : s.getMailRequests()) { + printSessionStage(req); + printRequestStages(req.getActions()); + } + for(var req : s.getLdapRequests()) { + printSessionStage(req); + printRequestStages(req.getActions()); + } + for(var req : s.getLocalRequests()) { + printSessionStage(req); + } } } + private static void printSessionStage(SessionStage stg) { log.debug("\t- {}", stg); } private static void printRequestStages(Collection stages) { - for(var stg : stages) { - log.trace("\t\t- {}", stg); + if(log.isTraceEnabled()) { + for(var stg : stages) { + log.trace("\t\t- {}", stg); + } } } }