Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Also record downlink mac_commands on data downlink
  • Loading branch information
lukaskirner committed Apr 29, 2025
commit 9923e3181be1253f79aa98786be985242c98f0c2
4 changes: 3 additions & 1 deletion chirpstack/src/downlink/data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use tracing::{debug, span, trace, warn, Instrument, Level};
use crate::api::backend::get_async_receiver;
use crate::api::helpers::{FromProto, ToProto};
use crate::backend::roaming;
use crate::downlink::{classb, error::Error, helpers, tx_ack};
use crate::downlink::{classb, error::Error, helpers, record_downlink_mac_commands, tx_ack};
use crate::gpstime::{ToDateTime, ToGpsTime};
use crate::storage;
use crate::storage::{
Expand Down Expand Up @@ -1038,6 +1038,8 @@ impl Data {
.await
.context("Send downlink frame")?;

record_downlink_mac_commands(self.mac_commands.clone());

Ok(())
}

Expand Down
32 changes: 32 additions & 0 deletions chirpstack/src/downlink/mod.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
use std::sync::LazyLock;
use prometheus_client::encoding::EncodeLabelSet;
use prometheus_client::metrics::counter::Counter;
use prometheus_client::metrics::family::Family;
use tracing::info;
use crate::monitoring::prometheus;

pub mod classb;
pub mod data;
Expand All @@ -11,6 +16,21 @@ pub mod roaming;
pub mod scheduler;
pub mod tx_ack;

#[derive(Clone, Hash, PartialEq, Eq, EncodeLabelSet, Debug)]
struct DownlinkMacCommandLabels {
mac_command: String,
}

static DOWNLINK_MAC_COMMAND_COUNTER: LazyLock<Family<DownlinkMacCommandLabels, Counter>> = LazyLock::new(|| {
let counter = Family::<DownlinkMacCommandLabels, Counter>::default();
prometheus::register(
"downlink_mac_command_count",
"Number of sent mac commands in downlinks",
counter.clone(),
);
counter
});

pub async fn setup() {
info!("Setting up Class-B/C scheduler loop");
tokio::spawn(async move {
Expand All @@ -22,3 +42,15 @@ pub async fn setup() {
scheduler::multicast_group_queue_scheduler_loop().await;
});
}

pub fn record_downlink_mac_commands(mac_command_sets: Vec<lrwn::MACCommandSet>) {
mac_command_sets.iter().for_each(|mac_command_set| {
mac_command_set.iter().for_each(|mac_command| {
DOWNLINK_MAC_COMMAND_COUNTER
.get_or_create(&DownlinkMacCommandLabels {
mac_command: mac_command.to_string(),
})
.inc();
})
})
}