1pub mod checkpoint_notify;
11pub mod config;
12pub mod error;
13pub mod logging;
14pub mod market;
15pub mod metrics;
16pub mod optimized_params;
17pub mod position_events;
18pub mod session_metrics;
19pub mod signal;
20pub mod state;
21pub mod supervisor;
22
23pub use checkpoint_notify::{
25 CheckpointNotification, CheckpointNotifier, CheckpointNotifierConfig, checkpoint_channel,
26};
27pub use config::Config;
28pub use error::{Error, Result};
29pub use logging::{LoggingConfig, LoggingGuard, init_logging};
30pub use market::{
31 Exchange, FundingRateEvent, KlineEvent, LiquidationEvent, MarketDataBus, MarketDataEvent,
32 MarketType, OrderBookEvent, PriceLevel, Side, Symbol, TickerEvent, TradeEvent,
33};
34pub use optimized_params::{
35 DEFAULT_ATR_MULTIPLIER, OptimizedParams, ParamManager, ParamNotification,
36};
37pub use position_events::{
38 Guidance, GuidanceAction, GuidanceThresholds, OutcomeResult, PositionClose, PositionEvent,
39 PositionOutcome, PositionState, PositionTracker, TrailingConfig, base_asset, compute_guidance,
40};
41pub use session_metrics::{SessionMetrics, SessionMetricsClient};
42pub use signal::{Signal, SignalBus, SignalType};
43pub use state::{AffinityRecorder, JanusState, LogLevelController, ServiceState};
44pub use supervisor::{
45 BackoffConfig, JanusService, JanusSupervisor, RestartPolicy, ServicePhase, SupervisorConfig,
46 SupervisorMetrics,
47};
48
49#[async_trait::async_trait]
51pub trait Module: Send + Sync {
52 fn name(&self) -> &str;
54
55 async fn start(&self, state: std::sync::Arc<JanusState>) -> Result<()>;
57
58 async fn stop(&self) -> Result<()>;
60
61 async fn health_check(&self) -> bool;
63}
64
65#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
67pub struct ModuleInfo {
68 pub name: String,
69 pub version: String,
70 pub status: ModuleStatus,
71 pub uptime_seconds: u64,
72}
73
74#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
76pub enum ModuleStatus {
77 Starting,
78 Running,
79 Stopping,
80 Stopped,
81 Error,
82}
83
84#[cfg(test)]
85mod tests {
86 use super::*;
87
88 #[test]
89 fn test_module_status() {
90 let status = ModuleStatus::Running;
91 assert_eq!(status, ModuleStatus::Running);
92 }
93}