···4141- [ ] web server metrics
4242- [ ] tokio metrics?
4343- [ ] handle shutdown cleanly -- be nice to rocksdb
4444+- [x] add user-agent to jetstream request
+9-4
link_aggregator/src/consumer/jetstream.rs
···55use std::thread;
66use std::time;
77use tinyjson::JsonValue;
88-use tungstenite::{Error as TError, Message};
88+use tungstenite::{client::IntoClientRequest, Error as TError, Message};
99use zstd::dict::DecoderDictionary;
10101111const JETSTREAM_ZSTD_DICTIONARY: &[u8] = include_bytes!("../../zstd/dictionary");
···7272 let mut latest_cursor = cursor;
7373 'outer: loop {
7474 let url = WS_URLS[connect_retries % WS_URLS.len()];
7575- let stream = format!(
7575+ let stream_url = format!(
7676 "{url}?compress=true{}",
7777 latest_cursor
7878 .map(|c| {
···8181 })
8282 .unwrap_or("".into())
8383 );
8484+ let mut req = (&stream_url).into_client_request()?;
8585+ let ua = format!("ucosm/link aggregator v{}", env!("CARGO_PKG_VERSION"));
8686+ req.headers_mut().insert("user-agent", ua.parse()?);
8787+8488 counter!("jetstream_connect", "url" => url, "is_retry" => (connect_retries > 0).to_string()).increment(1);
8585- println!("jetstream connecting, attempt #{connect_retries}: {stream}...");
8686- let mut socket = match tungstenite::connect(&stream) {
8989+ println!("jetstream connecting, attempt #{connect_retries}, {stream_url:?} with user-agent: {ua:?}");
9090+ let mut socket = match tungstenite::connect(req) {
8791 Ok((socket, _)) => {
8892 println!("jetstream connected.");
8993 connect_retries = 0;
···9296 Err(e) => {
9397 connect_retries += 1;
9498 if connect_retries >= 7 {
9999+ eprintln!("jetstream: no more connect retries, breaking out.");
95100 break;
96101 }
97102 let backoff = time::Duration::from_secs(connect_retries.try_into().unwrap());