hermes_tracing_logging_components/impls/
relay.rs

1use core::fmt::Display;
2
3use cgp::core::Async;
4use hermes_logging_components::traits::logger::Logger;
5use hermes_logging_components::types::level::LogLevel;
6use hermes_relayer_components::chain::traits::types::chain_id::HasChainId;
7use hermes_relayer_components::relay::impls::packet_clearers::receive_packet::LogClearPacketError;
8use hermes_relayer_components::relay::impls::packet_relayers::general::full_relay::LogRelayPacketAction;
9use hermes_relayer_components::relay::impls::packet_relayers::general::lock::LogSkipRelayLockedPacket;
10use hermes_relayer_components::relay::impls::packet_relayers::general::log::{
11    LogRelayPacketStatus, RelayPacketStatus,
12};
13use hermes_relayer_components::relay::impls::update_client::skip::LogSkipBuildUpdateClientMessage;
14use hermes_relayer_components::relay::impls::update_client::wait::LogWaitUpdateClientHeightStatus;
15use hermes_relayer_components::relay::traits::chains::HasRelayChains;
16use hermes_relayer_components::relay::traits::target::ChainTarget;
17use hermes_relayer_components_extra::batch::worker::LogBatchWorker;
18use tracing::{error, trace};
19
20use crate::contexts::logger::TracingLogger;
21
22impl<'a, Logging, Relay> Logger<Logging, LogSkipRelayLockedPacket<'a, Relay>> for TracingLogger
23where
24    Logging: Async,
25    Relay: HasRelayChains,
26    Relay::Packet: Display,
27    Relay::SrcChain: HasChainId,
28    Relay::DstChain: HasChainId,
29{
30    async fn log(_logging: &Logging, message: &str, details: &LogSkipRelayLockedPacket<'a, Relay>) {
31        trace!(
32            packet = %details.packet,
33            src_chain_id = %details.relay.src_chain().chain_id(),
34            dst_chain_id = %details.relay.dst_chain().chain_id(),
35            "{message}",
36        );
37    }
38}
39
40impl<'a, Logging, Relay> Logger<Logging, LogRelayPacketAction<'a, Relay>> for TracingLogger
41where
42    Logging: Async,
43    Relay: HasRelayChains,
44    Relay::Packet: Display,
45    Relay::SrcChain: HasChainId,
46    Relay::DstChain: HasChainId,
47{
48    async fn log(_logging: &Logging, message: &str, details: &LogRelayPacketAction<'a, Relay>) {
49        trace!(
50            packet = %details.packet,
51            src_chain_id = %details.relay.src_chain().chain_id(),
52            dst_chain_id = %details.relay.dst_chain().chain_id(),
53            relay_progress = ?details.relay_progress,
54            "{message}",
55        );
56    }
57}
58
59impl<'a, Logging, Relay> Logger<Logging, LogClearPacketError<'a, Relay>> for TracingLogger
60where
61    Logging: Async,
62    Relay: HasRelayChains,
63    Relay::Packet: Display,
64    Relay::SrcChain: HasChainId,
65    Relay::DstChain: HasChainId,
66{
67    async fn log(_logging: &Logging, message: &str, details: &LogClearPacketError<'a, Relay>) {
68        error!(
69            packet = %details.packet,
70            src_chain_id = %details.relay.src_chain().chain_id(),
71            dst_chain_id = %details.relay.dst_chain().chain_id(),
72            clear_action = ?details.clear_action,
73            error = ?details.error,
74            "{message}",
75        );
76    }
77}
78
79impl<'a, Logging, Relay> Logger<Logging, LogRelayPacketStatus<'a, Relay>> for TracingLogger
80where
81    Logging: Async,
82    Relay: HasRelayChains,
83    Relay::Packet: Display,
84    Relay::SrcChain: HasChainId,
85    Relay::DstChain: HasChainId,
86{
87    async fn log(_logging: &Logging, message: &str, details: &LogRelayPacketStatus<'a, Relay>) {
88        match details.relay_status {
89            RelayPacketStatus::Start => {
90                trace!(
91                    packet = %details.packet,
92                    src_chain_id = %details.relay.src_chain().chain_id(),
93                    dst_chain_id = %details.relay.dst_chain().chain_id(),
94                    relay_status = "start",
95                    "{message}",
96                );
97            }
98            RelayPacketStatus::Successful => {
99                trace!(
100                    packet = %details.packet,
101                    src_chain_id = %details.relay.src_chain().chain_id(),
102                    dst_chain_id = %details.relay.dst_chain().chain_id(),
103                    relay_status = "successful",
104                    "{message}",
105                );
106            }
107            RelayPacketStatus::Error { error } => {
108                error!(
109                    packet = %details.packet,
110                    src_chain_id = %details.relay.src_chain().chain_id(),
111                    dst_chain_id = %details.relay.dst_chain().chain_id(),
112                    ?error,
113                    "{message}",
114                );
115            }
116        }
117    }
118}
119
120impl<'a, Logging, Relay, Target> Logger<Logging, LogSkipBuildUpdateClientMessage<'a, Relay, Target>>
121    for TracingLogger
122where
123    Logging: Async,
124    Relay: HasRelayChains,
125    Target: ChainTarget<Relay>,
126    Target::TargetChain: HasChainId,
127    Target::CounterpartyChain: HasChainId,
128{
129    async fn log(
130        _logging: &Logging,
131        message: &str,
132        details: &LogSkipBuildUpdateClientMessage<'a, Relay, Target>,
133    ) {
134        trace!(
135            target_chain_id = %Target::target_chain(details.relay).chain_id(),
136            counterparty_chain_id = %Target::counterparty_chain(details.relay).chain_id(),
137            target_height = %details.target_height,
138            "{message}",
139        );
140    }
141}
142
143impl<'a, Logging, Relay, Target> Logger<Logging, LogWaitUpdateClientHeightStatus<'a, Relay, Target>>
144    for TracingLogger
145where
146    Logging: Async,
147    Relay: HasRelayChains,
148    Target: ChainTarget<Relay>,
149    Target::TargetChain: HasChainId,
150    Target::CounterpartyChain: HasChainId,
151{
152    async fn log(
153        _logging: &Logging,
154        message: &str,
155        details: &LogWaitUpdateClientHeightStatus<'a, Relay, Target>,
156    ) {
157        match details {
158            LogWaitUpdateClientHeightStatus::Waiting {
159                relay,
160                target_height,
161            } => {
162                trace!(
163                    target_chain_id = %Target::target_chain(relay).chain_id(),
164                    counterparty_chain_id = %Target::counterparty_chain(relay).chain_id(),
165                    %target_height,
166                    "{message}",
167                );
168            }
169            LogWaitUpdateClientHeightStatus::HeightReached {
170                relay,
171                target_height,
172                current_height,
173            } => {
174                trace!(
175                    target_chain_id = %Target::target_chain(relay).chain_id(),
176                    counterparty_chain_id = %Target::counterparty_chain(relay).chain_id(),
177                    %target_height,
178                    %current_height,
179                    "{message}",
180                );
181            }
182        }
183    }
184}
185
186impl<'a, Logging, Relay, Target> Logger<Logging, LogBatchWorker<'a, Relay, Target>>
187    for TracingLogger
188where
189    Logging: Async,
190    Relay: HasRelayChains,
191    Target: ChainTarget<Relay>,
192    Target::TargetChain: HasChainId,
193    Target::CounterpartyChain: HasChainId,
194{
195    async fn log(_logging: &Logging, message: &str, details: &LogBatchWorker<'a, Relay, Target>) {
196        match details.log_level {
197            LogLevel::Error => {
198                error!(
199                    target_chain_id = %Target::target_chain(details.relay).chain_id(),
200                    counterparty_chain_id = %Target::counterparty_chain(details.relay).chain_id(),
201                    details = %details.details,
202                    "{message}",
203                );
204            }
205            _ => {
206                trace!(
207                    target_chain_id = %Target::target_chain(details.relay).chain_id(),
208                    counterparty_chain_id = %Target::counterparty_chain(details.relay).chain_id(),
209                    details = %details.details,
210                    "{message}",
211                );
212            }
213        }
214    }
215}