Skip to main content

jflow_core/
lib.rs

1//! JANUS Core - Shared types and state for all modules
2//!
3//! This library provides:
4//! - Common types (Signal, Config, etc.)
5//! - Shared application state
6//! - Module interface traits
7//! - Unified metrics
8//! - Inter-module communication channels
9
10pub 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
23// Re-exports for convenience
24pub 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/// Module interface trait - all modules must implement this
50#[async_trait::async_trait]
51pub trait Module: Send + Sync {
52    /// Module name
53    fn name(&self) -> &str;
54
55    /// Start the module
56    async fn start(&self, state: std::sync::Arc<JanusState>) -> Result<()>;
57
58    /// Stop the module gracefully
59    async fn stop(&self) -> Result<()>;
60
61    /// Check if module is healthy
62    async fn health_check(&self) -> bool;
63}
64
65/// Module metadata
66#[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/// Module status
75#[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}