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 86da1cbb7ff CAMEL-18538: camel-jbang - Log command
86da1cbb7ff is described below
commit 86da1cbb7ff4a9853354de1a1a2d0fc8543acf2e
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Jan 6 09:30:24 2023 +0100
CAMEL-18538: camel-jbang - Log command
---
.../jbang/core/commands/action/CamelLogAction.java | 63 ++++++++++++++++++----
1 file changed, 54 insertions(+), 9 deletions(-)
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelLogAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelLogAction.java
index 2e398d68c92..6862633f47e 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelLogAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelLogAction.java
@@ -53,7 +53,8 @@ public class CamelLogAction extends ActionBaseCommand {
@CommandLine.Option(names = { "--logging-color" }, defaultValue = "true",
description = "Use colored logging")
boolean loggingColor = true;
- @CommandLine.Option(names = { "--follow" }, defaultValue = "true",
description = "Keep following and outputting new log lines (use ctrl + c to
exit).")
+ @CommandLine.Option(names = { "--follow" }, defaultValue = "true",
+ description = "Keep following and outputting new log
lines (use ctrl + c to exit).")
boolean follow = true;
@CommandLine.Option(names = { "--tail" },
@@ -68,6 +69,10 @@ public class CamelLogAction extends ActionBaseCommand {
description = "Find and highlight matching text
(ignore case).", arity = "0..*")
String[] find;
+ @CommandLine.Option(names = { "--grep" },
+ description = "Filter logs to only output lines
matching text (ignore case).", arity = "0..*")
+ String[] grep;
+
String findAnsi;
private int nameMaxWidth;
@@ -119,6 +124,14 @@ public class CamelLogAction extends ActionBaseCommand {
find[i] = f;
}
}
+ if (grep != null) {
+ findAnsi =
Ansi.ansi().fg(Ansi.Color.BLACK).bg(Ansi.Color.YELLOW).a("$0").reset().toString();
+ for (int i = 0; i < grep.length; i++) {
+ String f = grep[i];
+ f = Pattern.quote(f);
+ grep[i] = f;
+ }
+ }
Date limit = null;
if (since != null) {
long millis;
@@ -164,12 +177,18 @@ public class CamelLogAction extends ActionBaseCommand {
try {
String line = row.reader.readLine();
if (line != null) {
- lines++;
- // switch fifo to be unlimited as we use it for new
log lines
- if (row.fifo == null || row.fifo instanceof
ArrayBlockingQueue) {
- row.fifo = new ArrayDeque<>();
+ boolean valid = true;
+ if (grep != null) {
+ valid = isValidGrep(line);
+ }
+ if (valid) {
+ lines++;
+ // switch fifo to be unlimited as we use it for
new log lines
+ if (row.fifo == null || row.fifo instanceof
ArrayBlockingQueue) {
+ row.fifo = new ArrayDeque<>();
+ }
+ row.fifo.offer(line);
}
- row.fifo.offer(line);
}
} catch (IOException e) {
// ignore
@@ -236,11 +255,18 @@ public class CamelLogAction extends ActionBaseCommand {
System.out.print(": ");
}
}
- if (find != null) {
+ if (find != null || grep != null) {
String before = StringHelper.before(line, "---");
String after = StringHelper.after(line, "---");
- for (String f : find) {
- after = after.replaceAll("(?i)" + f, findAnsi);
+ if (find != null) {
+ for (String f : find) {
+ after = after.replaceAll("(?i)" + f, findAnsi);
+ }
+ }
+ if (grep != null) {
+ for (String g : grep) {
+ after = after.replaceAll("(?i)" + g, findAnsi);
+ }
}
line = before + "---" + after;
}
@@ -268,6 +294,9 @@ public class CamelLogAction extends ActionBaseCommand {
line = row.reader.readLine();
if (line != null) {
boolean valid = isValidSince(limit, line);
+ if (valid && grep != null) {
+ valid = isValidGrep(line);
+ }
if (valid) {
while (!row.fifo.offer(line)) {
row.fifo.poll();
@@ -297,6 +326,22 @@ public class CamelLogAction extends ActionBaseCommand {
return false;
}
+ private boolean isValidGrep(String line) {
+ if (grep == null) {
+ return true;
+ }
+ // the log can be in color or not so we need to unescape always
+ line = unescapeAnsi(line);
+ String after = StringHelper.after(line, "---");
+ for (String g : grep) {
+ boolean m = Pattern.compile("(?i)" + g).matcher(after).find();
+ if (m) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private String unescapeAnsi(String line) {
// unescape ANSI colors
StringBuilder sb = new StringBuilder();