You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/02/15 08:23:44 UTC
[camel] branch main updated: CAMEL-19033: camel-jbang - get trace -> trace
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new f4b3c89e47d CAMEL-19033: camel-jbang - get trace -> trace
f4b3c89e47d is described below
commit f4b3c89e47d4101a2cc3468b01e2ceaa00a01a5c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Feb 15 09:23:13 2023 +0100
CAMEL-19033: camel-jbang - get trace -> trace
---
.../camel/cli/connector/LocalCliConnector.java | 3 +-
.../core/commands/action/CamelTraceAction.java | 36 +++++++++++++++++-----
.../camel/dsl/jbang/core/common/JSonHelper.java | 3 +-
3 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
index a7a9af67fa2..921c9313653 100644
--- a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
+++ b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
@@ -436,7 +436,8 @@ public class LocalCliConnector extends ServiceSupport implements CliConnector, C
if (!arr.isEmpty()) {
// store traces in a special file
LOG.trace("Updating trace file: {}", traceFile);
- IOHelper.appendText(json.toJson(), traceFile);
+ String data = json.toJson() + System.lineSeparator();
+ IOHelper.appendText(data, traceFile);
json = arr.getMap(arr.size() - 1);
traceFilePos = json.getLong("uid");
}
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java
index da874e9dcec..c3a9a487f8f 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java
@@ -34,10 +34,12 @@ import java.util.Set;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.regex.Pattern;
+import org.apache.camel.catalog.impl.TimePatternConverter;
import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
import org.apache.camel.dsl.jbang.core.common.JSonHelper;
import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
import org.apache.camel.util.StopWatch;
+import org.apache.camel.util.StringHelper;
import org.apache.camel.util.TimeUtils;
import org.apache.camel.util.json.JsonArray;
import org.apache.camel.util.json.JsonObject;
@@ -51,7 +53,6 @@ import picocli.CommandLine;
public class CamelTraceAction extends ActionBaseCommand {
// TODO: message dump in json or not (option)
- // TODO: since
private static final int NAME_MAX_WIDTH = 25;
private static final int NAME_MIN_WIDTH = 10;
@@ -127,7 +128,7 @@ public class CamelTraceAction extends ActionBaseCommand {
// find new pids
updatePids(pids);
if (!pids.isEmpty()) {
- // read existing trace files (skip by tail)
+ // read existing trace files (skip by tail/since)
if (find != null) {
findAnsi = Ansi.ansi().fg(Ansi.Color.BLACK).bg(Ansi.Color.YELLOW).a("$0").reset().toString();
for (int i = 0; i < find.length; i++) {
@@ -144,9 +145,20 @@ public class CamelTraceAction extends ActionBaseCommand {
grep[i] = f;
}
}
+ Date limit = null;
+ if (since != null) {
+ long millis;
+ if (StringHelper.isDigit(since)) {
+ // is in seconds by default
+ millis = TimePatternConverter.toMilliSeconds(since) * 1000;
+ } else {
+ millis = TimePatternConverter.toMilliSeconds(since);
+ }
+ limit = new Date(System.currentTimeMillis() - millis);
+ }
// dump existing traces
tailTraceFiles(pids, tail);
- dumpTraceFiles(pids, tail);
+ dumpTraceFiles(pids, tail, limit);
}
if (follow) {
@@ -169,7 +181,7 @@ public class CamelTraceAction extends ActionBaseCommand {
}
int lines = readTraceFiles(pids);
if (lines > 0) {
- dumpTraceFiles(pids, 0);
+ dumpTraceFiles(pids, 0, null);
} else {
Thread.sleep(100);
}
@@ -335,7 +347,7 @@ public class CamelTraceAction extends ActionBaseCommand {
return null;
}
- private void dumpTraceFiles(Map<Long, Pid> pids, int tail) {
+ private void dumpTraceFiles(Map<Long, Pid> pids, int tail, Date limit) {
Set<String> names = new HashSet<>();
List<Row> rows = new ArrayList<>();
for (Pid pid : pids.values()) {
@@ -386,7 +398,7 @@ public class CamelTraceAction extends ActionBaseCommand {
}
rows.forEach(r -> {
- printTrace(r.name, r);
+ printTrace(r.name, r, limit);
});
}
@@ -403,13 +415,21 @@ public class CamelTraceAction extends ActionBaseCommand {
return false;
}
- protected void printTrace(String name, Row row) {
+ private boolean isValidSince(Date limit, long timestamp) {
+ if (limit == null || timestamp == 0) {
+ return true;
+ }
+ Date row = new Date(timestamp);
+ return row.compareTo(limit) >= 0;
+ }
+
+ protected void printTrace(String name, Row row, Date limit) {
if (!prefix) {
name = null;
}
String json = getDataAsJSon(row);
- boolean valid = isValidGrep(json);
+ boolean valid = isValidSince(limit, row.timestamp) && isValidGrep(json);
if (!valid) {
return;
}
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/JSonHelper.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/JSonHelper.java
index facf7b82e93..137251e189e 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/JSonHelper.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/JSonHelper.java
@@ -57,7 +57,8 @@ public final class JSonHelper {
s = Ansi.ansi().fgBright(Ansi.Color.BLUE).a(s).reset().toString();
}
}
- default -> {}
+ default -> {
+ }
}
prev = type;
return s;