mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-19 23:55:40 +00:00
Separate metrics for messages sent & received (#2721)
* metered channel - sent & received * Add for readouts * metrics for both sent & received * retract on send failure
This commit is contained in:
committed by
GitHub
parent
064df81ee4
commit
73b9247c10
@@ -54,8 +54,7 @@ impl<T> Stream for UnboundedMeteredReceiver<T> {
|
||||
fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
|
||||
match mpsc::UnboundedReceiver::poll_next(Pin::new(&mut self.inner), cx) {
|
||||
Poll::Ready(x) => {
|
||||
// always use Ordering::SeqCst to avoid underflows
|
||||
self.meter.fill.fetch_sub(1, Ordering::SeqCst);
|
||||
self.meter.note_received();
|
||||
Poll::Ready(x)
|
||||
}
|
||||
other => other,
|
||||
@@ -78,7 +77,7 @@ impl<T> UnboundedMeteredReceiver<T> {
|
||||
pub fn try_next(&mut self) -> Result<Option<T>, mpsc::TryRecvError> {
|
||||
match self.inner.try_next()? {
|
||||
Some(x) => {
|
||||
self.meter.fill.fetch_sub(1, Ordering::SeqCst);
|
||||
self.meter.note_received();
|
||||
Ok(Some(x))
|
||||
}
|
||||
None => Ok(None),
|
||||
@@ -131,18 +130,23 @@ impl<T> UnboundedMeteredSender<T> {
|
||||
where
|
||||
Self: Unpin,
|
||||
{
|
||||
self.meter.fill.fetch_add(1, Ordering::SeqCst);
|
||||
self.meter.note_sent();
|
||||
let fut = self.inner.send(item);
|
||||
futures::pin_mut!(fut);
|
||||
fut.await
|
||||
fut.await.map_err(|e| {
|
||||
self.meter.retract_sent();
|
||||
e
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/// Attempt to send message or fail immediately.
|
||||
pub fn unbounded_send(&mut self, msg: T) -> result::Result<(), mpsc::TrySendError<T>> {
|
||||
self.inner.unbounded_send(msg)?;
|
||||
self.meter.fill.fetch_add(1, Ordering::SeqCst);
|
||||
Ok(())
|
||||
self.meter.note_sent();
|
||||
self.inner.unbounded_send(msg).map_err(|e| {
|
||||
self.meter.retract_sent();
|
||||
e
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,7 +164,6 @@ impl<T> futures::sink::Sink<T> for UnboundedMeteredSender<T> {
|
||||
fn poll_close(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
|
||||
match Pin::new(&mut self.inner).poll_ready(cx) {
|
||||
val @ Poll::Ready(_)=> {
|
||||
self.meter.fill.store(0, Ordering::SeqCst);
|
||||
val
|
||||
}
|
||||
other => other,
|
||||
@@ -170,7 +173,7 @@ impl<T> futures::sink::Sink<T> for UnboundedMeteredSender<T> {
|
||||
fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
|
||||
match Pin::new(&mut self.inner).poll_ready(cx) {
|
||||
val @ Poll::Ready(_)=> {
|
||||
self.meter.fill.fetch_add(1, Ordering::SeqCst);
|
||||
self.meter.note_sent();
|
||||
val
|
||||
}
|
||||
other => other,
|
||||
|
||||
Reference in New Issue
Block a user