mithril_aggregator/event_store/
transmitter_service.rs1use anyhow::Context;
2use slog::{warn, Logger};
3use std::fmt::Debug;
4use tokio::sync::mpsc::UnboundedSender;
5
6use mithril_common::{logging::LoggerExtensions, StdResult};
7
8use super::EventMessage;
9
10pub struct TransmitterService<MSG>
13where
14 MSG: Debug + Sync + Send,
15{
16 transmitter: UnboundedSender<MSG>,
17 logger: Logger,
18}
19
20impl<MSG> TransmitterService<MSG>
21where
22 MSG: Debug + Sync + Send,
23{
24 pub fn new(transmitter: UnboundedSender<MSG>, logger: Logger) -> Self {
26 Self {
27 transmitter,
28 logger: logger.new_with_component_name::<Self>(),
29 }
30 }
31
32 pub fn get_transmitter(&self) -> UnboundedSender<MSG> {
34 self.transmitter.clone()
35 }
36}
37
38impl TransmitterService<EventMessage> {
39 pub fn try_send(&self, message: EventMessage) -> StdResult<()> {
41 self.get_transmitter()
42 .send(message.clone())
43 .with_context(|| {
44 format!("An error occurred when sending message {message:?} to monitoring.")
45 })
46 }
47
48 pub fn send(&self, message: EventMessage) {
53 if let Err(e) = self.try_send(message.clone()) {
54 warn!(self.logger, "Event message error"; "error" => ?e);
55 };
56 }
57}