actually add the script
This commit is contained in:
parent
cbdd6d7c1e
commit
1869e73131
60
web3_proxy/src/bin/web3_proxy_cli/search_kafka.rs
Normal file
60
web3_proxy/src/bin/web3_proxy_cli/search_kafka.rs
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
use anyhow::Context;
|
||||||
|
use argh::FromArgs;
|
||||||
|
use futures::TryStreamExt;
|
||||||
|
use log::info;
|
||||||
|
use rdkafka::{
|
||||||
|
consumer::{Consumer, StreamConsumer},
|
||||||
|
ClientConfig, Message,
|
||||||
|
};
|
||||||
|
use std::num::NonZeroU64;
|
||||||
|
use web3_proxy::{config::TopConfig, frontend::authorization::RpcSecretKey};
|
||||||
|
|
||||||
|
/// Second subcommand.
|
||||||
|
#[derive(FromArgs, PartialEq, Debug, Eq)]
|
||||||
|
#[argh(subcommand, name = "search_kafka")]
|
||||||
|
pub struct SearchKafkaSubCommand {
|
||||||
|
#[argh(positional)]
|
||||||
|
group_id: String,
|
||||||
|
#[argh(positional)]
|
||||||
|
input_topic: String,
|
||||||
|
#[argh(option)]
|
||||||
|
/// rpc_key to search. Be careful when handling keys!
|
||||||
|
rpc_key: Option<RpcSecretKey>,
|
||||||
|
#[argh(option)]
|
||||||
|
/// rpc_key_id to search
|
||||||
|
rpc_key_id: Option<NonZeroU64>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SearchKafkaSubCommand {
|
||||||
|
pub async fn main(self, top_config: TopConfig) -> anyhow::Result<()> {
|
||||||
|
let brokers = top_config
|
||||||
|
.app
|
||||||
|
.kafka_urls
|
||||||
|
.context("top_config.app.kafka_urls is required")?;
|
||||||
|
|
||||||
|
// TODO: headers
|
||||||
|
// TODO: headers
|
||||||
|
let consumer: StreamConsumer = ClientConfig::new()
|
||||||
|
.set("group.id", &self.group_id)
|
||||||
|
.set("bootstrap.servers", &brokers)
|
||||||
|
.set("enable.partition.eof", "false")
|
||||||
|
.set("session.timeout.ms", "6000")
|
||||||
|
.set("enable.auto.commit", "false")
|
||||||
|
.create()
|
||||||
|
.context("Consumer creation failed")?;
|
||||||
|
|
||||||
|
consumer
|
||||||
|
.subscribe(&[&self.input_topic])
|
||||||
|
.expect("Can't subscribe to specified topic");
|
||||||
|
|
||||||
|
let stream_processor = consumer.stream().try_for_each(|msg| async move {
|
||||||
|
info!("Message received: {}", msg.offset());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
});
|
||||||
|
|
||||||
|
stream_processor.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user