Skip to content

Commit

Permalink
collect application shutdown instant + pending sessions (#97)
Browse files Browse the repository at this point in the history
  • Loading branch information
usfalami authored Feb 6, 2025
1 parent 31772c1 commit 473bb5b
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 32 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>io.github.oneteme</groupId>
<artifactId>inspect-core</artifactId>
<version>0.0.19-SNAPSHOT</version>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>inspect-core</name>
<description>INtegrated System Performance Evaluation and Communication Tracking core libray</description>
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/org/usf/inspect/core/InspectRestClient.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -43,7 +44,7 @@ public InspectRestClient(RestClientProperties properties, InstanceEnvironment ap
}

@Override
public boolean dispatch(boolean complete, int attemps, List<Session> sessions) {
public boolean dispatch(boolean complete, int attemps, List<Session> sessions, int pending) {
if(isNull(instanceId)) {//if not registered before
try {
instanceId = template.postForObject(properties.getInstanceApi(), application, String.class);
Expand All @@ -53,7 +54,7 @@ public boolean dispatch(boolean complete, int attemps, List<Session> 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;
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/org/usf/inspect/core/RestClientProperties.java
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down Expand Up @@ -142,7 +143,7 @@ public void complete() {
@FunctionalInterface
public interface Dispatcher<T> {

boolean dispatch(boolean complete, int attempts, List<T> list) throws Exception; //TD return List<T> dispatched sessions
boolean dispatch(boolean complete, int attempts, List<T> list, int pending) throws Exception; //TD return List<T> dispatched sessions
}

private final class SafeQueue {
Expand Down
53 changes: 29 additions & 24 deletions src/main/java/org/usf/inspect/core/SessionLogger.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,37 +13,42 @@ final class SessionLogger implements SessionHandler<Session> {

@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<? extends RequestStage> stages) {
for(var stg : stages) {
log.trace("\t\t- {}", stg);
if(log.isTraceEnabled()) {
for(var stg : stages) {
log.trace("\t\t- {}", stg);
}
}
}
}

0 comments on commit 473bb5b

Please sign in to comment.