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-jbang-examples.git
The following commit(s) were added to refs/heads/main by this push:
new 2a47d66 chore: normalize YAML DSL routes to canonical (explicit) form
2a47d66 is described below
commit 2a47d6618fb16a9a59033b876bb1739769464b6c
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed May 20 22:47:43 2026 +0200
chore: normalize YAML DSL routes to canonical (explicit) form
Normalize 23 example files to use canonical YAML DSL syntax:
- URIs use expanded parameters as key/value blocks
- Expressions use explicit form (expression: simple: expression:)
- Log EIP uses message property instead of shorthand
- Remove auto-generated IDs (route-1133, setHeader-4262, etc.)
Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
artemis/consumer.camel.yaml | 13 +-
artemis/producer.camel.yaml | 14 +-
circuit-breaker/route.camel.yaml | 17 +-
cron-log/cron-log.camel.yaml | 13 +-
edi-x12-as2/camel/fake.camel.yaml | 41 ++-
ftp/ftp.camel.yaml | 9 +-
groovy/groovy.camel.yaml | 31 +-
keycloak-ldap-migration/ldap-migration.camel.yaml | 388 +++++++++++----------
mqtt/mqtt.camel.yaml | 12 +-
openai/pii-redaction/pii-redaction.camel.yaml | 23 +-
openapi/client/petstore-client.camel.yaml | 26 +-
routes/routes.camel.yaml | 11 +-
.../analyzer/error-analyzer.camel.yaml | 93 ++---
.../correlator/infinispan.camel.yaml | 110 +++---
.../correlator/logs-mapper.camel.yaml | 20 +-
.../correlator/traces-mapper.camel.yaml | 21 +-
.../first-iteration/analyzer.camel.yaml | 66 ++--
.../first-iteration/load-generator.camel.yaml | 48 +--
.../log-generator/log-generator.camel.yaml | 63 ++--
.../ui-console/jms-file-storage.camel.yaml | 13 +-
sql/sql.camel.yaml | 35 +-
timer-log/timer-log.camel.yaml | 13 +-
xslt/consumer.camel.yaml | 6 +-
23 files changed, 619 insertions(+), 467 deletions(-)
diff --git a/artemis/consumer.camel.yaml b/artemis/consumer.camel.yaml
index 40f3974..55dc3c8 100644
--- a/artemis/consumer.camel.yaml
+++ b/artemis/consumer.camel.yaml
@@ -1,4 +1,9 @@
-- from:
- uri: jms:numbers
- steps:
- - log: ${body}
+- route:
+ from:
+ uri: jms
+ parameters:
+ destinationName: numbers
+ steps:
+ - log:
+ message: "${body}"
+
diff --git a/artemis/producer.camel.yaml b/artemis/producer.camel.yaml
index 88de4c4..3d8741a 100644
--- a/artemis/producer.camel.yaml
+++ b/artemis/producer.camel.yaml
@@ -1,8 +1,16 @@
- route:
from:
- uri: timer:start
+ uri: timer
+ parameters:
+ timerName: start
steps:
- setBody:
- simple: '{"orderId": ${random(1000)}, "item": "widget",
"quantity": ${random(10)}}'
+ expression:
+ simple:
+ expression: '{"orderId": ${random(1000)}, "item": "widget",
"quantity":
+ ${random(10)}}'
- to:
- uri: jms:numbers
+ uri: jms
+ parameters:
+ destinationName: numbers
+
diff --git a/circuit-breaker/route.camel.yaml b/circuit-breaker/route.camel.yaml
index f2de22f..79b2898 100644
--- a/circuit-breaker/route.camel.yaml
+++ b/circuit-breaker/route.camel.yaml
@@ -1,26 +1,27 @@
- route:
from:
- uri: timer:start
+ uri: timer
+ parameters:
+ timerName: start
+ period: 1000
steps:
- setBody:
expression:
constant:
expression: Hello Camel
- circuitBreaker:
- resilience4jConfiguration:
- minimumNumberOfCalls: 10
- failureRateThreshold: 50
- waitDurationInOpenState: 20
steps:
+ - resilience4jConfiguration:
+ minimumNumberOfCalls: 10
+ waitDurationInOpenState: 20
- filter:
expression:
simple:
- expression: ${random(10)} > 2
+ expression: "${random(10)} > 2"
steps:
- throwException:
message: Forced error
exceptionType: java.lang.IllegalArgumentException
- log:
message: "${body} (CircuitBreaker is open:
${exchangeProperty.CamelCircuitBreakerResponseShortCircuited})"
- parameters:
- period: 1000
+
diff --git a/cron-log/cron-log.camel.yaml b/cron-log/cron-log.camel.yaml
index c31bdb1..a620a36 100644
--- a/cron-log/cron-log.camel.yaml
+++ b/cron-log/cron-log.camel.yaml
@@ -1,10 +1,15 @@
- route:
id: cron-log
from:
- uri: timer:cron
+ uri: timer
parameters:
- period: "5000"
+ timerName: cron
+ period: 5000
steps:
- setBody:
- simple: "Scheduled task running at ${date:now:HH:mm:ss}"
- - log: "${body}"
+ expression:
+ simple:
+ expression: "Scheduled task running at ${date:now:HH:mm:ss}"
+ - log:
+ message: "${body}"
+
diff --git a/edi-x12-as2/camel/fake.camel.yaml
b/edi-x12-as2/camel/fake.camel.yaml
index 61ee09c..240e271 100644
--- a/edi-x12-as2/camel/fake.camel.yaml
+++ b/edi-x12-as2/camel/fake.camel.yaml
@@ -1,28 +1,41 @@
- route:
from:
- uri: as2://server/listen
+ uri: as2
parameters:
- serverPortNumber: 8081
+ apiName: server
+ methodName: listen
requestUriPattern: /acme/gateway
+ serverPortNumber: 8081
steps:
- - log: |
- Received functional ack:
- ${body}
-
+ - log:
+ message: |
+ Received functional ack:
+ ${body}
- route:
from:
- uri: rest:get:tpm
+ uri: rest
+ parameters:
+ method: get
+ path: tpm
steps:
- - log: Verified agreement between ${header.receiver} and
${header.sender}
-
+ - log:
+ message: "Verified agreement between ${header.receiver} and
${header.sender}"
- route:
from:
- uri: rest:post:tracker
+ uri: rest
+ parameters:
+ method: post
+ path: tracker
steps:
- - log: Tracked ${body}
-
+ - log:
+ message: "Tracked ${body}"
- route:
from:
- uri: rest:post:erp/purchase_orders
+ uri: rest
+ parameters:
+ method: post
+ path: erp/purchase_orders
steps:
- - log: Processed ${body}
\ No newline at end of file
+ - log:
+ message: "Processed ${body}"
+
diff --git a/ftp/ftp.camel.yaml b/ftp/ftp.camel.yaml
index ff0cd4f..f0f7a5e 100644
--- a/ftp/ftp.camel.yaml
+++ b/ftp/ftp.camel.yaml
@@ -1,9 +1,11 @@
- route:
- id: route-1133
from:
- uri: jms:cheese
+ uri: jms
+ parameters:
+ destinationName: cheese
steps:
- - log: "Incoming: ${body}"
+ - log:
+ message: "Incoming: ${body}"
- to:
uri: ftp
parameters:
@@ -12,3 +14,4 @@
password: admin
port: 2221
username: admin
+
diff --git a/groovy/groovy.camel.yaml b/groovy/groovy.camel.yaml
index 99e062c..c183a83 100644
--- a/groovy/groovy.camel.yaml
+++ b/groovy/groovy.camel.yaml
@@ -1,32 +1,25 @@
- route:
- id: route-1681
from:
- id: from-1133
uri: once
parameters:
name: validate
steps:
- setHeader:
- id: setHeader-4262
- constant:
- expression: [email protected]
name: contactEmail
+ expression:
+ constant:
+ expression: [email protected]
- choice:
- id: choice-1178
- otherwise:
- id: otherwise-1234
- steps:
- - log:
- id: log-3646
- message: "Invalid email: ${header.contactEmail}"
when:
- - id: when-1441
+ - expression:
+ groovy:
+ expression: |-
+ import
org.apache.commons.validator.routines.EmailValidator
+
EmailValidator.getInstance().isValid(request.headers['contactEmail'])
steps:
- log:
- id: log-2349
message: "Valid contact: ${header.contactEmail}"
- groovy:
- expression: >-
- import org.apache.commons.validator.routines.EmailValidator
-
-
EmailValidator.getInstance().isValid(request.headers['contactEmail'])
+ otherwise:
+ steps:
+ - log:
+ message: "Invalid email: ${header.contactEmail}"
diff --git a/keycloak-ldap-migration/ldap-migration.camel.yaml
b/keycloak-ldap-migration/ldap-migration.camel.yaml
index 5481fb3..842d10a 100644
--- a/keycloak-ldap-migration/ldap-migration.camel.yaml
+++ b/keycloak-ldap-migration/ldap-migration.camel.yaml
@@ -20,216 +20,232 @@
# Configure Keycloak component
- beans:
- - name: keycloak
- type: org.apache.camel.component.keycloak.KeycloakComponent
- properties:
- serverUrl: "{{keycloak.server.url}}"
- realm: "{{keycloak.realm}}"
- username: "{{keycloak.username}}"
- password: "{{keycloak.password}}"
-
-# Startup route to initialize LDAP DirContext
+ - name: keycloak
+ type: "org.apache.camel.component.keycloak.KeycloakComponent"
+ properties:
+ password: "{{keycloak.password}}"
+ serverUrl: "{{keycloak.server.url}}"
+ realm: "{{keycloak.realm}}"
+ username: "{{keycloak.username}}"
- route:
id: ldap-context-initializer
from:
- uri: "timer:init?repeatCount=1&delay=100"
+ uri: timer
+ parameters:
+ timerName: init
+ repeatCount: 1
+ delay: 100
steps:
- log:
- message: "Initializing LDAP context..."
+ message: Initializing LDAP context...
- script:
- groovy: |
- import javax.naming.*
- import javax.naming.directory.*
-
- try {
- def env = new Hashtable()
- env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory")
- env.put(Context.PROVIDER_URL,
camelContext.resolvePropertyPlaceholders("{{ldap.server.url}}"))
- env.put(Context.SECURITY_AUTHENTICATION,
camelContext.resolvePropertyPlaceholders("{{ldap.security.authentication}}"))
-
- // Add credentials if not using anonymous authentication
- def authType =
camelContext.resolvePropertyPlaceholders("{{ldap.security.authentication}}")
- if (!"none".equals(authType)) {
- env.put(Context.SECURITY_PRINCIPAL,
camelContext.resolvePropertyPlaceholders("{{ldap.security.principal}}"))
- env.put(Context.SECURITY_CREDENTIALS,
camelContext.resolvePropertyPlaceholders("{{ldap.security.credentials}}"))
- }
-
- log.info("Creating LDAP context with URL:
${env.get(Context.PROVIDER_URL)}")
- def ldapContext = new InitialDirContext(env)
-
- // Bind to registry
- camelContext.registry.bind("ldapserver", ldapContext)
- log.info("LDAP context successfully bound to registry as
'ldapserver'")
-
- // Verify it was bound
- def boundContext =
camelContext.registry.lookupByName("ldapserver")
- if (boundContext != null) {
- log.info("Verified: LDAP context is available in registry")
- } else {
- log.error("Error: LDAP context not found in registry after
binding!")
- }
- } catch (Exception e) {
- log.error("Failed to initialize LDAP context: ${e.message}", e)
- throw e
- }
-
-# Main route for LDAP to Keycloak migration
+ expression:
+ groovy:
+ expression: |
+ import javax.naming.*
+ import javax.naming.directory.*
+
+ try {
+ def env = new Hashtable()
+ env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory")
+ env.put(Context.PROVIDER_URL,
camelContext.resolvePropertyPlaceholders("{{ldap.server.url}}"))
+ env.put(Context.SECURITY_AUTHENTICATION,
camelContext.resolvePropertyPlaceholders("{{ldap.security.authentication}}"))
+
+ // Add credentials if not using anonymous authentication
+ def authType =
camelContext.resolvePropertyPlaceholders("{{ldap.security.authentication}}")
+ if (!"none".equals(authType)) {
+ env.put(Context.SECURITY_PRINCIPAL,
camelContext.resolvePropertyPlaceholders("{{ldap.security.principal}}"))
+ env.put(Context.SECURITY_CREDENTIALS,
camelContext.resolvePropertyPlaceholders("{{ldap.security.credentials}}"))
+ }
+
+ log.info("Creating LDAP context with URL:
${env.get(Context.PROVIDER_URL)}")
+ def ldapContext = new InitialDirContext(env)
+
+ // Bind to registry
+ camelContext.registry.bind("ldapserver", ldapContext)
+ log.info("LDAP context successfully bound to registry as
'ldapserver'")
+
+ // Verify it was bound
+ def boundContext =
camelContext.registry.lookupByName("ldapserver")
+ if (boundContext != null) {
+ log.info("Verified: LDAP context is available in
registry")
+ } else {
+ log.error("Error: LDAP context not found in registry
after binding!")
+ }
+ } catch (Exception e) {
+ log.error("Failed to initialize LDAP context:
${e.message}", e)
+ throw e
+ }
- route:
id: ldap-to-keycloak-migration
from:
- uri: "timer:migrate?repeatCount=1&delay=2000"
+ uri: timer
+ parameters:
+ timerName: migrate
+ repeatCount: 1
+ delay: 2000
steps:
- log:
- message: "Checking if LDAP context is available..."
+ message: Checking if LDAP context is available...
- script:
- groovy: |
- def ldapCtx = camelContext.registry.lookupByName("ldapserver")
- if (ldapCtx == null) {
- throw new IllegalStateException("LDAP context not initialized.
Please check ldap-context-initializer route.")
- }
- log.info("LDAP context found in registry, proceeding with
migration...")
+ expression:
+ groovy:
+ expression: |
+ def ldapCtx =
camelContext.registry.lookupByName("ldapserver")
+ if (ldapCtx == null) {
+ throw new IllegalStateException("LDAP context not
initialized. Please check ldap-context-initializer route.")
+ }
+ log.info("LDAP context found in registry, proceeding with
migration...")
- log:
- message: "Starting LDAP to Keycloak user migration..."
+ message: Starting LDAP to Keycloak user migration...
- log:
- message: "Searching LDAP with filter: {{ldap.search.filter}},
base: {{ldap.search.base}}"
-
- # Search LDAP for users
+ message: "Searching LDAP with filter: {{ldap.search.filter}},
base:\
+ \ {{ldap.search.base}}"
- setBody:
- constant: "{{ldap.search.filter}}"
+ expression:
+ constant:
+ expression: "{{ldap.search.filter}}"
- to:
- uri: "ldap:ldapserver?base={{ldap.search.base}}"
+ uri: ldap
+ parameters:
+ dirContextName: ldapserver
+ base: "{{ldap.search.base}}"
- log:
message: "Found ${body.size()} users in LDAP"
-
- # Transform LDAP SearchResults to Keycloak UserRepresentation
- script:
- groovy: |
- import javax.naming.directory.SearchResult
- import javax.naming.directory.Attributes
- import org.keycloak.representations.idm.UserRepresentation
-
- // Get LDAP search results from exchange body
- def searchResults = request.body
- def users = []
-
- searchResults.each { SearchResult result ->
- Attributes attrs = result.attributes
-
- // Create Keycloak user representation
- def user = new UserRepresentation()
-
- // Map LDAP attributes to Keycloak user fields
- // Username (required) - from uid, cn, or sAMAccountName
- def username = attrs.get("uid")?.get() ?:
- attrs.get("cn")?.get() ?:
- attrs.get("sAMAccountName")?.get()
- if (username) {
- user.username = username.toString()
- }
-
- // Email
- def mail = attrs.get("mail")?.get()
- if (mail) {
- user.email = mail.toString()
- }
-
- // First name - from givenName
- def givenName = attrs.get("givenName")?.get()
- if (givenName) {
- user.firstName = givenName.toString()
- }
-
- // Last name - from sn (surname)
- def sn = attrs.get("sn")?.get()
- if (sn) {
- user.lastName = sn.toString()
- }
-
- // Enable user by default
- user.enabled = true
-
- // Add custom attributes if configured
- def customAttrs = [:]
-
- // Organizational Unit
- def ou = attrs.get("ou")?.get()
- if (ou) {
- customAttrs.put("ldap_ou", [ou.toString()])
- }
-
- // Distinguished Name (for reference)
- def dn = result.nameInNamespace
- if (dn) {
- customAttrs.put("ldap_dn", [dn])
- }
-
- // Description
- def description = attrs.get("description")?.get()
- if (description) {
- customAttrs.put("description", [description.toString()])
- }
-
- // Telephone number
- def telephoneNumber = attrs.get("telephoneNumber")?.get()
- if (telephoneNumber) {
- customAttrs.put("phoneNumber", [telephoneNumber.toString()])
- }
-
- if (!customAttrs.isEmpty()) {
- user.attributes = customAttrs
- }
-
- // Add required actions if configured
- def requirePasswordUpdate =
camelContext.resolvePropertyPlaceholders("{{keycloak.user.requirePasswordUpdate}}")
- if ("true".equals(requirePasswordUpdate)) {
- user.requiredActions = ["UPDATE_PASSWORD"]
- }
-
- users.add(user)
- }
-
- // Set transformed users as message body
- request.body = users
-
- # Set headers for bulk user creation
+ expression:
+ groovy:
+ expression: |
+ import javax.naming.directory.SearchResult
+ import javax.naming.directory.Attributes
+ import org.keycloak.representations.idm.UserRepresentation
+
+ // Get LDAP search results from exchange body
+ def searchResults = request.body
+ def users = []
+
+ searchResults.each { SearchResult result ->
+ Attributes attrs = result.attributes
+
+ // Create Keycloak user representation
+ def user = new UserRepresentation()
+
+ // Map LDAP attributes to Keycloak user fields
+ // Username (required) - from uid, cn, or sAMAccountName
+ def username = attrs.get("uid")?.get() ?:
+ attrs.get("cn")?.get() ?:
+ attrs.get("sAMAccountName")?.get()
+ if (username) {
+ user.username = username.toString()
+ }
+
+ // Email
+ def mail = attrs.get("mail")?.get()
+ if (mail) {
+ user.email = mail.toString()
+ }
+
+ // First name - from givenName
+ def givenName = attrs.get("givenName")?.get()
+ if (givenName) {
+ user.firstName = givenName.toString()
+ }
+
+ // Last name - from sn (surname)
+ def sn = attrs.get("sn")?.get()
+ if (sn) {
+ user.lastName = sn.toString()
+ }
+
+ // Enable user by default
+ user.enabled = true
+
+ // Add custom attributes if configured
+ def customAttrs = [:]
+
+ // Organizational Unit
+ def ou = attrs.get("ou")?.get()
+ if (ou) {
+ customAttrs.put("ldap_ou", [ou.toString()])
+ }
+
+ // Distinguished Name (for reference)
+ def dn = result.nameInNamespace
+ if (dn) {
+ customAttrs.put("ldap_dn", [dn])
+ }
+
+ // Description
+ def description = attrs.get("description")?.get()
+ if (description) {
+ customAttrs.put("description", [description.toString()])
+ }
+
+ // Telephone number
+ def telephoneNumber = attrs.get("telephoneNumber")?.get()
+ if (telephoneNumber) {
+ customAttrs.put("phoneNumber",
[telephoneNumber.toString()])
+ }
+
+ if (!customAttrs.isEmpty()) {
+ user.attributes = customAttrs
+ }
+
+ // Add required actions if configured
+ def requirePasswordUpdate =
camelContext.resolvePropertyPlaceholders("{{keycloak.user.requirePasswordUpdate}}")
+ if ("true".equals(requirePasswordUpdate)) {
+ user.requiredActions = ["UPDATE_PASSWORD"]
+ }
+
+ users.add(user)
+ }
+
+ // Set transformed users as message body
+ request.body = users
- setHeader:
name: CamelKeycloakRealmName
- constant: "{{keycloak.target.realm}}"
+ expression:
+ constant:
+ expression: "{{keycloak.target.realm}}"
- setHeader:
name: CamelKeycloakContinueOnError
- constant: true
-
- # Bulk create users in Keycloak
+ expression:
+ constant:
+ expression: "true"
- to:
- uri: "keycloak:admin?operation=bulkCreateUsers"
-
- # Log migration results
+ uri: keycloak
+ parameters:
+ label: admin
+ operation: bulkCreateUsers
- script:
- groovy: |
- def result = request.body
-
- println ""
- println "=" * 80
- println "LDAP to Keycloak Migration Results"
- println "=" * 80
- println "Total users processed: ${result.total}"
- println "Successfully created: ${result.success}"
- println "Failed: ${result.failed}"
- println "=" * 80
-
- if (result.results) {
- println "\nDetailed Results:"
- println "-" * 80
- result.results.each { userResult ->
- def status = userResult.status == "success" ? "✓" : "✗"
- println "${status} ${userResult.username?.padRight(30)} -
${userResult.status}"
- if (userResult.error) {
- println " Error: ${userResult.error}"
+ expression:
+ groovy:
+ expression: |
+ def result = request.body
+
+ println ""
+ println "=" * 80
+ println "LDAP to Keycloak Migration Results"
+ println "=" * 80
+ println "Total users processed: ${result.total}"
+ println "Successfully created: ${result.success}"
+ println "Failed: ${result.failed}"
+ println "=" * 80
+
+ if (result.results) {
+ println "\nDetailed Results:"
+ println "-" * 80
+ result.results.each { userResult ->
+ def status = userResult.status == "success" ? "✓" : "✗"
+ println "${status} ${userResult.username?.padRight(30)}
- ${userResult.status}"
+ if (userResult.error) {
+ println " Error: ${userResult.error}"
+ }
+ }
+ println "-" * 80
}
- }
- println "-" * 80
- }
- println ""
- println "Migration completed!"
- println ""
+ println ""
+ println "Migration completed!"
+ println ""
+
diff --git a/mqtt/mqtt.camel.yaml b/mqtt/mqtt.camel.yaml
index 46bc670..78598d6 100644
--- a/mqtt/mqtt.camel.yaml
+++ b/mqtt/mqtt.camel.yaml
@@ -1,9 +1,10 @@
- route:
from:
- uri: kamelet:mqtt5-source
+ uri: kamelet
parameters:
- topic: "{{mqtt.topic}}"
+ templateId: mqtt5-source
brokerUrl: "{{mqtt.broker.url}}"
+ topic: "{{mqtt.topic}}"
steps:
- transform:
expression:
@@ -13,11 +14,12 @@
when:
- expression:
simple:
- expression: ${body} > 20
+ expression: "${body} > 20"
steps:
- log:
- message: Warm temperature at ${body}
+ message: "Warm temperature at ${body}"
otherwise:
steps:
- log:
- message: Cold temperature at ${body}
+ message: "Cold temperature at ${body}"
+
diff --git a/openai/pii-redaction/pii-redaction.camel.yaml
b/openai/pii-redaction/pii-redaction.camel.yaml
index d2b64a7..14685bf 100644
--- a/openai/pii-redaction/pii-redaction.camel.yaml
+++ b/openai/pii-redaction/pii-redaction.camel.yaml
@@ -1,14 +1,21 @@
- route:
from:
- uri: "direct:pii-redaction"
+ uri: direct
+ parameters:
+ name: pii-redaction
steps:
- to:
- uri: "openai:chat-completion"
+ uri: openai
parameters:
+ operation: chat-completion
+ jsonSchema: resource:classpath:pii.schema.json
+ systemMessage: "You are a strict data privacy compliance
assistant.\
+ \ Your goal is to analyze the user input, redact all PII, and
return\
+ \ the results in the specified JSON format. RULES: 1. ONLY
redact\
+ \ specific identifiers, 2. DO NOT redact generic titles,
roles,\
+ \ or common nouns unless they are part of a proper noun. 3.
Preserve\
+ \ the grammatical structure of the sentence."
temperature: 0.15
- jsonSchema: "resource:classpath:pii.schema.json"
- systemMessage: "You are a strict data privacy compliance
assistant. Your goal is to analyze the user input, redact all PII, and return
the results in the specified JSON format. RULES: 1. ONLY redact specific
identifiers, 2. DO NOT redact generic titles, roles, or common nouns unless
they are part of a proper noun. 3. Preserve the grammatical structure of the
sentence."
-
- route:
from:
uri: stream
@@ -19,4 +26,8 @@
uri: direct
parameters:
name: pii-redaction
- - to: "stream:out"
+ - to:
+ uri: stream
+ parameters:
+ kind: out
+
diff --git a/openapi/client/petstore-client.camel.yaml
b/openapi/client/petstore-client.camel.yaml
index 658dd4e..f152552 100644
--- a/openapi/client/petstore-client.camel.yaml
+++ b/openapi/client/petstore-client.camel.yaml
@@ -1,26 +1,32 @@
- route:
from:
- uri: "file://examples/"
+ uri: file
parameters:
+ directoryName: examples/
noop: true
steps:
- convertBodyTo:
- type: "java.lang.String"
- charset: "UTF8"
+ type: java.lang.String
+ charset: UTF8
- setHeader:
- name: "petId"
+ name: petId
expression:
- simple: "${file:onlyname.noext}"
+ simple:
+ expression: "${file:onlyname.noext}"
- setHeader:
- name: "Content-Type"
+ name: Content-Type
expression:
- constant: "application/json"
+ constant:
+ expression: application/json
- to:
- uri: "log:info"
+ uri: log
parameters:
+ loggerName: info
showHeaders: true
- to:
- uri: "kamelet:rest-openapi-sink"
+ uri: kamelet
parameters:
- specification: '{{openapi.specification.url}}'
+ templateId: rest-openapi-sink
operation: addPet
+ specification: "{{openapi.specification.url}}"
+
diff --git a/routes/routes.camel.yaml b/routes/routes.camel.yaml
index 1bb2939..a15415f 100644
--- a/routes/routes.camel.yaml
+++ b/routes/routes.camel.yaml
@@ -1,12 +1,17 @@
- route:
id: greeting-route
from:
- uri: timer:start
+ uri: timer
parameters:
+ timerName: start
period: 1000
steps:
- setBody:
- simple: I'm ${routeId}
+ expression:
+ simple:
+ expression: "I'm ${routeId}"
- bean:
ref: greeter
- - log: ${body}
+ - log:
+ message: "${body}"
+
diff --git a/smart-log-analyzer/analyzer/error-analyzer.camel.yaml
b/smart-log-analyzer/analyzer/error-analyzer.camel.yaml
index 406f570..ea84554 100644
--- a/smart-log-analyzer/analyzer/error-analyzer.camel.yaml
+++ b/smart-log-analyzer/analyzer/error-analyzer.camel.yaml
@@ -1,74 +1,85 @@
-# Analyzes error logs by retrieving OpenTelemetry events from Infinispan
-# and sending them to an LLM for root cause analysis and recommendations
- route:
id: error-log-analyzer
from:
- uri: jms:{{camel.jms.queue.error-logs}}
+ uri: jms
+ parameters:
+ destinationName: "{{camel.jms.queue.error-logs}}"
steps:
- log:
- loggingLevel: INFO
message: Received ERROR log for analysis
- setVariable:
name: traceId
- simple: ${body}
+ expression:
+ simple:
+ expression: "${body}"
- log:
- loggingLevel: INFO
message: "Retrieving all events for traceId: ${variable.traceId}"
- setHeader:
name: CamelInfinispanKey
- simple: otel-${variable.traceId}
+ expression:
+ simple:
+ expression: "otel-${variable.traceId}"
- to:
- uri: infinispan:events
+ uri: infinispan
parameters:
+ cacheName: events
operation: GET
- choice:
- otherwise:
- steps:
- - log:
- loggingLevel: WARN
- message: "No events found in Infinispan for traceId:
${variable.traceId}"
when:
- - steps:
+ - expression:
+ simple:
+ expression: "${body} != null && ${body} != ''"
+ steps:
- setVariable:
name: recordCount
- jq:
- expression: length
- resultType: java.lang.String
+ expression:
+ jq:
+ resultType: java.lang.String
+ expression: length
- log:
- message: Sending ${variable.recordCount} records to LLM
for analysis
+ message: "Sending ${variable.recordCount} records to LLM
for\
+ \ analysis"
- setVariable:
name: eventsJson
- simple: ${body}
+ expression:
+ simple:
+ expression: "${body}"
- setBody:
- simple: >
- Analyze the following OpenTelemetry logs and traces for
- traceId ${variable.traceId}.
-
- Identify the root cause of the error, explain what
- happened, and suggest possible fixes.
-
-
- Events (sorted by timestamp):
+ expression:
+ simple:
+ expression: |
+ Analyze the following OpenTelemetry logs and
traces for traceId ${variable.traceId}.
+ Identify the root cause of the error, explain what
happened, and suggest possible fixes.
- ${variable.eventsJson}
+ Events (sorted by timestamp):
+ ${variable.eventsJson}
- to:
- uri: openai:chat-completion
+ uri: openai
parameters:
- systemMessage: >
- You are an expert DevOps engineer and log analyst.
- Analyze OpenTelemetry logs and traces to identify
- errors, their root causes, and provide actionable
- recommendations. Be concise and focus on the error.
- You want to build a tree of calls by associating each
- span with its parent, where parentSpanId corresponds
- to the parent caller’s spanId.
+ operation: chat-completion
+ systemMessage: "You are an expert DevOps engineer and
log\
+ \ analyst. Analyze OpenTelemetry logs and traces to
identify\
+ \ errors, their root causes, and provide actionable
recommendations.\
+ \ Be concise and focus on the error. You want to
build\
+ \ a tree of calls by associating each span with its
parent,\
+ \ where parentSpanId corresponds to the parent
caller’\
+ s spanId."
- log:
message: "LLM Analysis for traceId ${variable.traceId}:
${body}"
- setHeader:
name: traceId
- simple: "${variable.traceId}"
+ expression:
+ simple:
+ expression: "${variable.traceId}"
- to:
- uri: jms:{{camel.jms.queue.analysis-result}}
+ uri: jms
+ parameters:
+ destinationName: "{{camel.jms.queue.analysis-result}}"
- log:
message: "Sent analysis result to queue for traceId:
${variable.traceId}"
- simple: ${body} != null && ${body} != ''
+ otherwise:
+ steps:
+ - log:
+ message: "No events found in Infinispan for traceId:
${variable.traceId}"
+ loggingLevel: WARN
+
diff --git a/smart-log-analyzer/correlator/infinispan.camel.yaml
b/smart-log-analyzer/correlator/infinispan.camel.yaml
index 29a400d..c057864 100644
--- a/smart-log-analyzer/correlator/infinispan.camel.yaml
+++ b/smart-log-analyzer/correlator/infinispan.camel.yaml
@@ -1,104 +1,130 @@
-# Stores OpenTelemetry records in Infinispan cache, grouped by traceId
-# and marks ERROR events for deferred processing
- route:
- id: route-1200
from:
- id: from-9847
uri: direct
parameters:
name: store
steps:
- log:
id: log-record
- loggingLevel: DEBUG
message: "Processing record: ${body}"
+ loggingLevel: DEBUG
- setVariable:
- jq:
- expression: .traceId
- resultType: java.lang.String
name: traceId
+ expression:
+ jq:
+ resultType: java.lang.String
+ expression: .traceId
- filter:
expression:
- simple: ${variable.traceId} != null && ${variable.traceId} != ''
+ simple:
+ expression: "${variable.traceId} != null &&
${variable.traceId}\
+ \ != ''"
steps:
- claimCheck:
- key: currentRecord
operation: Set
+ key: currentRecord
- setHeader:
name: CamelInfinispanKey
- simple: otel-${variable.traceId}
+ expression:
+ simple:
+ expression: "otel-${variable.traceId}"
- to:
- uri: infinispan:events
+ uri: infinispan
parameters:
+ cacheName: events
operation: GET
- choice:
- otherwise:
- steps:
- - claimCheck:
- key: currentRecord
- operation: Get
- - setBody:
- jq:
- expression: "[.]"
- resultType: java.lang.String
when:
- - steps:
+ - expression:
+ simple:
+ expression: "${body} != null && ${body} != ''"
+ steps:
- setVariable:
name: existingRecords
- simple: ${body}
+ expression:
+ simple:
+ expression: "${body}"
- claimCheck:
- key: currentRecord
operation: Get
+ key: currentRecord
- setBody:
+ expression:
+ jq:
+ resultType: java.lang.String
+ expression: "(variable(\"existingRecords\") |
fromjson)\
+ \ + [.] | sort_by(.timeUnixNano)"
+ otherwise:
+ steps:
+ - claimCheck:
+ operation: Get
+ key: currentRecord
+ - setBody:
+ expression:
jq:
- expression: (variable("existingRecords") |
fromjson) + [.] |
- sort_by(.timeUnixNano)
resultType: java.lang.String
- simple: ${body} != null && ${body} != ''
+ expression: "[.]"
- setHeader:
name: CamelInfinispanKey
- simple: otel-${variable.traceId}
+ expression:
+ simple:
+ expression: "otel-${variable.traceId}"
- setHeader:
name: CamelInfinispanValue
- simple: ${body}
+ expression:
+ simple:
+ expression: "${body}"
- to:
- uri: infinispan:events
+ uri: infinispan
parameters:
+ cacheName: events
operation: PUT
- claimCheck:
- key: currentRecord
operation: GetAndRemove
+ key: currentRecord
- log:
id: log-stored
message: "Stored record for traceId: ${variable.traceId}"
- choice:
when:
- - steps:
+ - expression:
+ jq:
+ expression: (.severityText // "" | ascii_downcase) ==
+ "error" or .status == "2"
+ steps:
- log:
- message: "Adding ERROR log to events-to-process
cache for traceId:
- ${variable.traceId}"
+ message: "Adding ERROR log to events-to-process
cache\
+ \ for traceId: ${variable.traceId}"
- setHeader:
name: CamelInfinispanKey
- simple: ${variable.traceId}
+ expression:
+ simple:
+ expression: "${variable.traceId}"
- setHeader:
name: CamelInfinispanValue
- simple: ${variable.traceId}
+ expression:
+ simple:
+ expression: "${variable.traceId}"
- to:
- uri: infinispan:events-to-process
+ uri: infinispan
parameters:
+ cacheName: events-to-process
operation: PUTIFABSENT
- jq:
- expression: (.severityText // "" | ascii_downcase) ==
"error" or .status == "2"
- route:
id: route-expired-events
from:
- uri: infinispan:events-to-process
+ uri: infinispan
parameters:
+ cacheName: events-to-process
eventTypes: CLIENT_CACHE_ENTRY_EXPIRED
steps:
- setBody:
- simple: ${header.CamelInfinispanKey}
+ expression:
+ simple:
+ expression: "${header.CamelInfinispanKey}"
- log:
message: "Expired cache entry received, sending to JMS queue:
${body}"
- to:
- uri: jms:{{camel.jms.queue.error-logs}}
+ uri: jms
+ parameters:
+ destinationName: "{{camel.jms.queue.error-logs}}"
+
diff --git a/smart-log-analyzer/correlator/logs-mapper.camel.yaml
b/smart-log-analyzer/correlator/logs-mapper.camel.yaml
index f4f85df..a8c9d72 100644
--- a/smart-log-analyzer/correlator/logs-mapper.camel.yaml
+++ b/smart-log-analyzer/correlator/logs-mapper.camel.yaml
@@ -1,27 +1,28 @@
- route:
id: log-consumer
from:
- uri: kafka:{{camel.kafka.topic.logs}}
+ uri: kafka
parameters:
+ topic: "{{camel.kafka.topic.logs}}"
autoOffsetReset: earliest
groupId: correlator
steps:
- log:
+ message: "Received log from Kafka \\n ${body}"
loggingLevel: DEBUG
- message: Received log from Kafka \n ${body}
- split:
id: split-logs
expression:
jsonpath:
- expression: $.resourceLogs[*].scopeLogs[*].logRecords[*]
- writeAsString: true
+ writeAsString: "true"
+ expression: "$.resourceLogs[*].scopeLogs[*].logRecords[*]"
steps:
- setHeader:
id: set-logs-header
+ name: logs
expression:
simple:
- expression: ${body}
- name: logs
+ expression: "${body}"
- setBody:
id: set-dummy-xml
expression:
@@ -32,14 +33,15 @@
steps:
- to:
id: kaoto-datamapper-xslt
- uri: xslt-saxon:kaoto-datamapper-4a94acc3.xsl
+ uri: xslt-saxon
parameters:
+ resourceUri: kaoto-datamapper-4a94acc3.xsl
allowStAX: true
- log:
- loggingLevel: DEBUG
message: "Mapped output: ${body}"
+ loggingLevel: DEBUG
- to:
- id: to-2266
uri: direct
parameters:
name: store
+
diff --git a/smart-log-analyzer/correlator/traces-mapper.camel.yaml
b/smart-log-analyzer/correlator/traces-mapper.camel.yaml
index 27c6f67..bdc2ca7 100644
--- a/smart-log-analyzer/correlator/traces-mapper.camel.yaml
+++ b/smart-log-analyzer/correlator/traces-mapper.camel.yaml
@@ -1,27 +1,28 @@
- route:
id: trace-consumer
from:
- uri: kafka:{{camel.kafka.topic.spans}}
+ uri: kafka
parameters:
+ topic: "{{camel.kafka.topic.spans}}"
autoOffsetReset: earliest
groupId: correlator
steps:
- log:
+ message: "Received trace from Kafka\\n${body}"
loggingLevel: DEBUG
- message: Received trace from Kafka\n${body}
- split:
id: split-spans
expression:
jsonpath:
- expression: $.resourceSpans[*].scopeSpans[*].spans[*]
- writeAsString: true
+ writeAsString: "true"
+ expression: "$.resourceSpans[*].scopeSpans[*].spans[*]"
steps:
- setHeader:
id: set-traces-header
+ name: traces
expression:
simple:
- expression: ${body}
- name: traces
+ expression: "${body}"
- setBody:
id: set-dummy-xml-1
expression:
@@ -31,15 +32,15 @@
id: kaoto-datamapper-8f5bb2dd
steps:
- to:
- id: kaoto-datamapper-xslt-1526
- uri: xslt-saxon:kaoto-datamapper-8f5bb2dd.xsl
+ uri: xslt-saxon
parameters:
+ resourceUri: kaoto-datamapper-8f5bb2dd.xsl
allowStAX: true
- log:
- loggingLevel: DEBUG
message: "Mapped output: ${body}"
+ loggingLevel: DEBUG
- to:
- id: to-22661
uri: direct
parameters:
name: store
+
diff --git a/smart-log-analyzer/first-iteration/analyzer.camel.yaml
b/smart-log-analyzer/first-iteration/analyzer.camel.yaml
index 01cc80d..76c5a5e 100644
--- a/smart-log-analyzer/first-iteration/analyzer.camel.yaml
+++ b/smart-log-analyzer/first-iteration/analyzer.camel.yaml
@@ -1,62 +1,66 @@
-# Consumes log events from Kafka, aggregates by traceId, and sends
-# to LLM for analysis when an ERROR level event is detected
+- beans:
+ - name: stringAggregationStrategy
+ type: "org.apache.camel.processor.aggregate.StringAggregationStrategy"
- route:
id: log-event-consumer
from:
- uri: kafka:log-events
+ uri: kafka
parameters:
+ topic: log-events
autoOffsetReset: earliest
brokers: localhost:9092
groupId: log-analyzer
steps:
- log:
- loggingLevel: DEBUG
message: "Received event from Kafka: ${body}"
+ loggingLevel: DEBUG
- setVariable:
name: traceId
- jq:
- expression: .traceId
- resultType: java.lang.String
+ expression:
+ jq:
+ resultType: java.lang.String
+ expression: .traceId
- setVariable:
name: level
- jq:
- expression: .level
- resultType: java.lang.String
+ expression:
+ jq:
+ resultType: java.lang.String
+ expression: .level
- aggregate:
+ aggregationStrategy: "#stringAggregationStrategy"
+ completionTimeout: 30000
correlationExpression:
simple:
- expression: ${variable.traceId}
- aggregationStrategy: "#stringAggregationStrategy"
+ expression: "${variable.traceId}"
completionPredicate:
simple:
- expression: ${variable.level} == 'ERROR'
- completionTimeout: 30000
+ expression: "${variable.level} == 'ERROR'"
steps:
- log:
- message: "Aggregation completed for traceId:
${variable.traceId} - sending to LLM"
+ message: "Aggregation completed for traceId:
${variable.traceId}\
+ \ - sending to LLM"
- setVariable:
name: eventsJson
- simple: ${body}
+ expression:
+ simple:
+ expression: "${body}"
- setBody:
- simple: >
- Analyze the following log events for traceId
${variable.traceId}.
-
- An ERROR was detected. Identify the root cause, explain
what
- happened in the sequence of events, and suggest possible
fixes.
-
- Events: ${variable.eventsJson}
+ expression:
+ simple:
+ expression: |
+ Analyze the following log events for traceId
${variable.traceId}.
+ An ERROR was detected. Identify the root cause,
explain what happened in the sequence of events, and suggest possible fixes.
+ Events: ${variable.eventsJson}
- to:
- uri: openai:chat-completion
+ uri: openai
parameters:
+ operation: chat-completion
apiKey: not-needed
baseUrl: http://localhost:11434/v1
model: granite4:3b
- systemMessage: >
- Analyze log events to identify errors, their root
causes, and
- provide actionable recommendations. Be concise and focus
- on the error chain and sequence of events.
+ systemMessage: "Analyze log events to identify errors,
their\
+ \ root causes, and provide actionable recommendations.
Be\
+ \ concise and focus on the error chain and sequence of
events."
- log:
message: "LLM Analysis for traceId ${variable.traceId}:
${body}"
-- beans:
- - name: stringAggregationStrategy
- type: org.apache.camel.processor.aggregate.StringAggregationStrategy
\ No newline at end of file
+
diff --git a/smart-log-analyzer/first-iteration/load-generator.camel.yaml
b/smart-log-analyzer/first-iteration/load-generator.camel.yaml
index 3a8f248..ac052c0 100644
--- a/smart-log-analyzer/first-iteration/load-generator.camel.yaml
+++ b/smart-log-analyzer/first-iteration/load-generator.camel.yaml
@@ -1,48 +1,56 @@
- route:
id: event-generator
from:
- uri: timer:eventGenerator
+ uri: timer
parameters:
+ timerName: eventGenerator
period: 5000
steps:
- # Generate a new traceId for each timer event
- setVariable:
name: traceId
- simple: "${random(10000,99999)}-${date:now:yyyyMMddHHmmssSSS}"
-
- # Send first INFO event
+ expression:
+ simple:
+ expression:
"${random(10000,99999)}-${date:now:yyyyMMddHHmmssSSS}"
- setBody:
- simple: |
- {"traceId": "${variable.traceId}", "level": "INFO", "message":
"Application started processing request", "timestamp":
"${date:now:yyyy-MM-dd'T'HH:mm:ss.SSSZ}"}
+ expression:
+ simple:
+ expression: |
+ {"traceId": "${variable.traceId}", "level": "INFO",
"message": "Application started processing request", "timestamp":
"${date:now:yyyy-MM-dd'T'HH:mm:ss.SSSZ}"}
- to:
- uri: kafka:log-events
+ uri: kafka
parameters:
+ topic: log-events
brokers: localhost:9092
-
- # Send second INFO event
- setBody:
- simple: |
- {"traceId": "${variable.traceId}", "level": "INFO", "message":
"Request validation completed successfully", "timestamp":
"${date:now:yyyy-MM-dd'T'HH:mm:ss.SSSZ}"}
+ expression:
+ simple:
+ expression: |
+ {"traceId": "${variable.traceId}", "level": "INFO",
"message": "Request validation completed successfully", "timestamp":
"${date:now:yyyy-MM-dd'T'HH:mm:ss.SSSZ}"}
- to:
- uri: kafka:log-events
+ uri: kafka
parameters:
+ topic: log-events
brokers: localhost:9092
-
- # 30% chance of generating an ERROR event
- choice:
when:
- - simple: "${random(1,10)} <= 3"
+ - expression:
+ simple:
+ expression: "${random(1,10)} <= 3"
steps:
- setBody:
- simple: |
- {"traceId": "${variable.traceId}", "level": "ERROR",
"message": "Unexpected error occurred during processing", "timestamp":
"${date:now:yyyy-MM-dd'T'HH:mm:ss.SSSZ}"}
+ expression:
+ simple:
+ expression: |
+ {"traceId": "${variable.traceId}", "level":
"ERROR", "message": "Unexpected error occurred during processing", "timestamp":
"${date:now:yyyy-MM-dd'T'HH:mm:ss.SSSZ}"}
- to:
- uri: kafka:log-events
+ uri: kafka
parameters:
+ topic: log-events
brokers: localhost:9092
- log:
message: "ERROR event sent for traceId:
${variable.traceId}"
otherwise:
steps:
- log:
- message: "No error generated for traceId:
${variable.traceId}"
\ No newline at end of file
+ message: "No error generated for traceId:
${variable.traceId}"
+
diff --git a/smart-log-analyzer/log-generator/log-generator.camel.yaml
b/smart-log-analyzer/log-generator/log-generator.camel.yaml
index dcd316f..898890b 100644
--- a/smart-log-analyzer/log-generator/log-generator.camel.yaml
+++ b/smart-log-analyzer/log-generator/log-generator.camel.yaml
@@ -1,87 +1,84 @@
-# Simulates order processing with random success/failure outcomes (30% failure
rate)
-# to generate realistic log data for testing the error analyzer
- route:
id: order-processor
from:
- uri: timer:orderProcessor
+ uri: timer
parameters:
- period: "{{timer.order.period:2000}}"
+ timerName: orderProcessor
fixedRate: true
+ period: "{{timer.order.period:2000}}"
steps:
-
- # Generate random order ID
- setVariable:
name: orderId
- simple: "ORD-${random(10000,99999)}"
-
- # Log: Order received
+ expression:
+ simple:
+ expression: "ORD-${random(10000,99999)}"
- log:
message: "Received new order ${variable.orderId} from customer
${random(1000,9999)}"
- loggingLevel: INFO
logName: com.example.order.OrderService
-
- # Log: Validation
- log:
- message: "Validating order ${variable.orderId}: checking inventory
and pricing"
- loggingLevel: INFO
+ message: "Validating order ${variable.orderId}: checking inventory
and\
+ \ pricing"
logName: com.example.order.ValidationService
-
- # Simulate random processing outcomes (30% failure rate)
- choice:
when:
- - simple: "${random(0,100)} < 30"
+ - expression:
+ simple:
+ expression: "${random(0,100)} < 30"
steps:
- # Simulate different error types
- choice:
when:
- - simple: "${random(0,100)} < 33"
+ - expression:
+ simple:
+ expression: "${random(0,100)} < 33"
steps:
- log:
message: "Connecting to database for order
${variable.orderId}"
- loggingLevel: INFO
logName: com.example.order.DatabaseService
- throwException:
- message: "Database connection failed:
Connection refused to postgres:5432 while processing order ${variable.orderId}"
+ message: "Database connection failed:
Connection\
+ \ refused to postgres:5432 while processing
order\
+ \ ${variable.orderId}"
exceptionType: java.lang.RuntimeException
- - simple: "${random(0,100)} < 66"
+ - expression:
+ simple:
+ expression: "${random(0,100)} < 66"
steps:
- log:
message: "Initiating payment for order
${variable.orderId}"
- loggingLevel: INFO
logName: com.example.payment.PaymentGateway
- throwException:
- message: "Network timeout while connecting to
payment gateway api.stripe.com for order ${variable.orderId}"
+ message: "Network timeout while connecting to
payment\
+ \ gateway api.stripe.com for order
${variable.orderId}"
exceptionType: java.lang.RuntimeException
otherwise:
steps:
- log:
- message: "Verifying user authentication for
order ${variable.orderId}"
- loggingLevel: INFO
+ message: "Verifying user authentication for
order\
+ \ ${variable.orderId}"
logName: com.example.auth.AuthService
- throwException:
- message: "Authentication failed: Invalid JWT
token signature for order ${variable.orderId}"
+ message: "Authentication failed: Invalid JWT
token\
+ \ signature for order ${variable.orderId}"
exceptionType: java.lang.RuntimeException
otherwise:
steps:
- log:
message: "Payment processed successfully for order
${variable.orderId}"
- loggingLevel: INFO
logName: com.example.payment.PaymentGateway
- log:
message: "Order ${variable.orderId} completed successfully"
- loggingLevel: INFO
logName: com.example.order.OrderService
-
-# Periodic health check logging for system monitoring
- route:
id: health-checker
from:
- uri: timer:healthCheck
+ uri: timer
parameters:
- period: 5000
+ timerName: healthCheck
fixedRate: true
+ period: 5000
steps:
- log:
message: "Health check: All systems operational"
loggingLevel: DEBUG
logName: com.example.health.HealthChecker
+
diff --git a/smart-log-analyzer/ui-console/jms-file-storage.camel.yaml
b/smart-log-analyzer/ui-console/jms-file-storage.camel.yaml
index b426959..1aca29b 100644
--- a/smart-log-analyzer/ui-console/jms-file-storage.camel.yaml
+++ b/smart-log-analyzer/ui-console/jms-file-storage.camel.yaml
@@ -1,14 +1,21 @@
- route:
id: jms-to-file-storage
from:
- uri: jms:{{camel.jms.queue.analysis-result}}
+ uri: jms
+ parameters:
+ destinationName: "{{camel.jms.queue.analysis-result}}"
steps:
- log:
message: "Received message from JMS queue: ${body}"
- setHeader:
name: CamelFileName
- simple: ${header.traceId}.txt
+ expression:
+ simple:
+ expression: "${header.traceId}.txt"
- to:
- uri: file:{{analyzer.storage.root}}
+ uri: file
+ parameters:
+ directoryName: "{{analyzer.storage.root}}"
- log:
message: "Saved content for traceId: ${header.traceId}"
+
diff --git a/sql/sql.camel.yaml b/sql/sql.camel.yaml
index 54fcc87..e7a18a2 100644
--- a/sql/sql.camel.yaml
+++ b/sql/sql.camel.yaml
@@ -1,20 +1,41 @@
- route:
from:
- uri: timer:create?repeatCount=1&delay=500
+ uri: timer
+ parameters:
+ timerName: create
+ repeatCount: 1
+ delay: 500
steps:
- to:
- uri: sql:CREATE TABLE IF NOT EXISTS users(id integer PRIMARY KEY,
name varchar(20), byear integer);
+ uri: sql
+ parameters:
+ query: "CREATE TABLE IF NOT EXISTS users(id integer PRIMARY KEY,
name\
+ \ varchar(20), byear integer);"
- route:
from:
- uri: timer:insert?repeatCount=1&delay=1000
+ uri: timer
+ parameters:
+ timerName: insert
+ repeatCount: 1
+ delay: 1000
steps:
- to:
- uri: sql:INSERT INTO users(id, name, byear) VALUES(1, 'Camel',
2025) ON CONFLICT DO NOTHING;
+ uri: sql
+ parameters:
+ query: "INSERT INTO users(id, name, byear) VALUES(1, 'Camel',
2025)\
+ \ ON CONFLICT DO NOTHING;"
- route:
from:
- uri: timer:select?repeatCount=1&delay=2000
+ uri: timer
+ parameters:
+ timerName: select
+ repeatCount: 1
+ delay: 2000
steps:
- to:
- uri: sql:SELECT * FROM users
+ uri: sql
+ parameters:
+ query: SELECT * FROM users
- log:
- message: ${body}
+ message: "${body}"
+
diff --git a/timer-log/timer-log.camel.yaml b/timer-log/timer-log.camel.yaml
index cdff71b..638582c 100644
--- a/timer-log/timer-log.camel.yaml
+++ b/timer-log/timer-log.camel.yaml
@@ -1,10 +1,15 @@
- route:
id: timer-log
from:
- uri: timer:tick
+ uri: timer
parameters:
- period: "1000"
+ timerName: tick
+ period: 1000
steps:
- setBody:
- simple: "Hello Camel! (message
#${exchangeProperty.CamelTimerCounter})"
- - log: "${body}"
+ expression:
+ simple:
+ expression: "Hello Camel! (message
#${exchangeProperty.CamelTimerCounter})"
+ - log:
+ message: "${body}"
+
diff --git a/xslt/consumer.camel.yaml b/xslt/consumer.camel.yaml
index 6ee1127..eace713 100644
--- a/xslt/consumer.camel.yaml
+++ b/xslt/consumer.camel.yaml
@@ -1,7 +1,8 @@
- route:
from:
- uri: file://input
+ uri: file
parameters:
+ directoryName: input
fileName: account.xml
noop: true
steps:
@@ -10,4 +11,5 @@
parameters:
resourceUri: stylesheet.xsl
- log:
- message: Transformed data:\n ${prettyBody}
+ message: "Transformed data:\\n ${prettyBody}"
+