camel_core/lib.rs
1//! # Camel Core
2//!
3//! This crate provides the core functionality for the Apache Camel implementation in Rust.
4//!
5//! ## Tracer EIP
6//!
7//! The Tracer Enterprise Integration Pattern (EIP) provides automatic message flow tracing
8//! throughout your Camel routes. It captures detailed information about each step as messages
9//! flow through the integration routes, helping with debugging, monitoring, and observability.
10//!
11//! ### Configuration
12//!
13//! You can configure the tracer in your `Camel.toml` file:
14//!
15//! ```toml
16//! [observability.tracer]
17//! enabled = true
18//! detail_level = "minimal" # minimal | medium | full
19//!
20//! [observability.tracer.outputs.stdout]
21//! enabled = true
22//! format = "json"
23//! ```
24//!
25//! Or enable it programmatically:
26//!
27//! ```rust
28//! use camel_core::CamelContext;
29//! let mut ctx = CamelContext::new();
30//! ctx.set_tracing(true);
31//! ```
32//!
33//! ### Span Fields
34//!
35//! Each trace span includes the following fields:
36//!
37//! - `correlation_id`: Unique identifier that links all spans in a single message flow
38//! - `route_id`: Identifier for the route being traced
39//! - `step_id`: Unique identifier for this specific step in the route
40//! - `step_index`: Sequential index of this step within the route
41//! - `timestamp`: When the step was executed (Unix timestamp)
42//! - `duration_ms`: How long the step took to execute in milliseconds
43//! - `status`: The status of the step execution (e.g., "success", "error")
44//!
45//! ### Detail Levels
46//!
47//! The tracer supports three levels of detail:
48//!
49//! - **Minimal**: Includes only the base fields listed above
50//! - **Medium**: Includes the base fields plus:
51//! - `headers_count`: Number of message headers
52//! - `body_type`: Type of the message body
53//! - `has_error`: Whether the message contains an error
54//! - `output_body_type`: Type of the output body after processing
55//! - **Full**: Includes all fields from Minimal and Medium plus:
56//! - Up to 3 message headers (`header_0`, `header_1`, `header_2`)
57//!
58//! //! Configuration types for the Tracer EIP live in `camel-core` rather than `camel-config`
59//! //! to avoid a circular dependency — `camel-config` depends on `camel-core`.
60//!
61pub mod config;
62pub mod context;
63pub mod registry;
64pub mod reload;
65pub mod reload_watcher;
66pub mod route;
67pub mod route_controller;
68pub mod supervising_route_controller;
69pub mod tracer;
70
71pub use config::{
72 DetailLevel, FileOutput, OutputFormat, StdoutOutput, TracerConfig, TracerOutputs,
73};
74pub use context::CamelContext;
75pub use registry::Registry;
76pub use route::{Route, RouteDefinition};
77pub use route_controller::{DefaultRouteController, RouteControllerInternal};
78pub use supervising_route_controller::SupervisingRouteController;
79pub use tracer::TracingProcessor;
80
81// Re-export route controller types from camel-api (they live there to avoid cyclic dependencies).
82pub use camel_api::{RouteAction, RouteController, RouteStatus};