moonpool_sim/runner/
context.rs1use crate::chaos::state_handle::StateHandle;
20use crate::network::SimNetworkProvider;
21use crate::providers::{SimProviders, SimRandomProvider, SimTimeProvider};
22use crate::storage::SimStorageProvider;
23
24use moonpool_core::{Providers, TokioTaskProvider};
25
26use super::topology::WorkloadTopology;
27
28pub struct SimContext {
33 providers: SimProviders,
34 topology: WorkloadTopology,
35 state: StateHandle,
36}
37
38impl SimContext {
39 pub fn new(providers: SimProviders, topology: WorkloadTopology, state: StateHandle) -> Self {
41 Self {
42 providers,
43 topology,
44 state,
45 }
46 }
47
48 pub fn providers(&self) -> &SimProviders {
50 &self.providers
51 }
52
53 pub fn network(&self) -> &SimNetworkProvider {
55 self.providers.network()
56 }
57
58 pub fn time(&self) -> &SimTimeProvider {
60 self.providers.time()
61 }
62
63 pub fn task(&self) -> &TokioTaskProvider {
65 self.providers.task()
66 }
67
68 pub fn random(&self) -> &SimRandomProvider {
70 self.providers.random()
71 }
72
73 pub fn storage(&self) -> &SimStorageProvider {
75 self.providers.storage()
76 }
77
78 pub fn my_ip(&self) -> &str {
80 &self.topology.my_ip
81 }
82
83 pub fn peer(&self, name: &str) -> Option<String> {
85 self.topology.get_peer_by_name(name)
86 }
87
88 pub fn peers(&self) -> Vec<(String, String)> {
90 self.topology
91 .peer_names
92 .iter()
93 .zip(self.topology.peer_ips.iter())
94 .map(|(name, ip)| (name.clone(), ip.clone()))
95 .collect()
96 }
97
98 pub fn shutdown(&self) -> &tokio_util::sync::CancellationToken {
100 &self.topology.shutdown_signal
101 }
102
103 pub fn state(&self) -> &StateHandle {
105 &self.state
106 }
107}