Skip to content

Commit c3f82f5

Browse files
authored
feat: add a field in config file to specify listen socket address for prometheus (#592)
1 parent 819184d commit c3f82f5

File tree

5 files changed

+23
-13
lines changed

5 files changed

+23
-13
lines changed

rumqttd/CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
## [Unreleased]
99

1010
### Added
11+
- `PrometheusSetting` now takes `listen` to specify listener address instead of default `127.0.0.1`. Do not use `listen` and `port` together.
1112

1213
### Changed
1314

1415
### Deprecated
16+
- `PrometheusSetting`'s `port` will be removed in favour of `listen`.
1517

1618
### Removed
1719

rumqttd/rumqttd.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ next_connection_delay_ms = 1
7979
max_inflight_size = 1024
8080

8181
[prometheus]
82-
port = 9042
82+
listen = "127.0.0.1:9042"
8383
interval = 1
8484

8585
[ws]
@@ -91,4 +91,4 @@ listen = "0.0.0.0:3030"
9191
# [metrics.alerts]
9292
# push_interval = 1
9393
# [metrics.meters]
94-
# push_interval = 1
94+
# push_interval = 1

rumqttd/src/lib.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ pub struct Config {
5454

5555
#[derive(Debug, Serialize, Deserialize, Clone)]
5656
pub struct PrometheusSetting {
57-
port: u16,
57+
#[deprecated(note = "Use listen instead")]
58+
port: Option<u16>,
59+
listen: Option<SocketAddr>,
5860
// How frequently to update metrics
5961
interval: u64,
6062
}
@@ -144,8 +146,7 @@ impl ConsoleSettings {
144146
}
145147
}
146148

147-
#[derive(Debug, Serialize, Deserialize, Clone)]
148-
#[derive(Default)]
149+
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
149150
pub enum Transport {
150151
#[serde(rename = "tcp")]
151152
#[default]
@@ -157,8 +158,6 @@ pub enum Transport {
157158
},
158159
}
159160

160-
161-
162161
#[derive(Clone, Debug, Serialize, Deserialize)]
163162
pub struct ClientAuth {
164163
certs: PathBuf,

rumqttd/src/link/mod.rs

-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,3 @@ pub mod remote;
88
#[cfg(feature = "websockets")]
99
pub mod shadow;
1010
pub mod timer;
11-

rumqttd/src/server/broker.rs

+15-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use crate::protocol::Protocol;
1414
use crate::server::tls::{self, TLSAcceptor};
1515
use crate::{meters, ConnectionSettings, Meter};
1616
use flume::{RecvError, SendError, Sender};
17-
use std::net::SocketAddr;
17+
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
1818
use std::sync::Arc;
1919
use tracing::{error, field, info, Instrument};
2020
#[cfg(feature = "websockets")]
@@ -233,14 +233,24 @@ impl Broker {
233233
}
234234

235235
if let Some(prometheus_setting) = &self.config.prometheus {
236-
let port = prometheus_setting.port;
237236
let timeout = prometheus_setting.interval;
237+
// If port is specified use it instead of listen.
238+
// NOTE: This means listen is ignored when `port` is specified.
239+
// `port` will be removed in future release in favour of `listen`
240+
let addr = {
241+
#[allow(deprecated)]
242+
match prometheus_setting.port {
243+
Some(port) => SocketAddr::new("127.0.0.1".parse().unwrap(), port),
244+
None => prometheus_setting.listen.unwrap_or(SocketAddr::new(
245+
IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)),
246+
9042,
247+
)),
248+
}
249+
};
238250
let metrics_thread = thread::Builder::new().name("Metrics".to_owned());
239251
let meter_link = self.meters().unwrap();
240-
241252
metrics_thread.spawn(move || {
242-
let builder = PrometheusBuilder::new()
243-
.with_http_listener(SocketAddr::new("127.0.0.1".parse().unwrap(), port));
253+
let builder = PrometheusBuilder::new().with_http_listener(addr);
244254
builder.install().unwrap();
245255

246256
let total_publishes = register_gauge!("metrics.router.total_publishes");

0 commit comments

Comments
 (0)