Remove redundant services

This commit is contained in:
deadmanoz
2025-07-04 15:51:28 +08:00
parent 30ba034206
commit f89276d7b8
4 changed files with 49 additions and 122 deletions

View File

@@ -13,7 +13,6 @@ use clap_derive::Parser;
use color_eyre::eyre::eyre;
use serde::{Deserialize, Serialize};
use crate::services::Services;
#[derive(Parser, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Deserialize, Serialize)]
#[command(version, about)]
@@ -33,10 +32,6 @@ pub struct Config {
#[arg(long, value_name = "PATH")]
brkdir: Option<String>,
/// Activated services, default: all, saved
#[serde(default, deserialize_with = "default_on_error")]
#[arg(short, long)]
services: Option<Services>,
/// Computation of computed datasets, `lazy` computes data whenever requested without saving it, `eager` computes the data once and saves it to disk, default: `lazy`, saved
#[serde(default, deserialize_with = "default_on_error")]
@@ -129,9 +124,6 @@ impl Config {
config_saved.brkdir = Some(brkdir);
}
if let Some(services) = config_args.services.take() {
config_saved.services = Some(services);
}
if let Some(computation) = config_args.computation.take() {
config_saved.computation = Some(computation);
@@ -201,37 +193,33 @@ impl Config {
}
fn check(&self) {
// Only check Bitcoin directories and RPC if we're running the processor
if self.process() {
if !self.bitcoindir().is_dir() {
println!("{:?} isn't a valid directory", self.bitcoindir());
println!("Please use the --bitcoindir parameter to set a valid path.");
println!("Run the program with '-h' for help.");
std::process::exit(1);
}
if !self.blocksdir().is_dir() {
println!("{:?} isn't a valid directory", self.blocksdir());
println!("Please use the --blocksdir parameter to set a valid path.");
println!("Run the program with '-h' for help.");
std::process::exit(1);
}
if self.rpc_auth().is_err() {
println!(
"No way found to authenticate the RPC client, please either set --rpccookiefile or --rpcuser and --rpcpassword.\nRun the program with '-h' for help."
);
std::process::exit(1);
}
if !self.bitcoindir().is_dir() {
println!("{:?} isn't a valid directory", self.bitcoindir());
println!("Please use the --bitcoindir parameter to set a valid path.");
println!("Run the program with '-h' for help.");
std::process::exit(1);
}
if !self.blocksdir().is_dir() {
println!("{:?} isn't a valid directory", self.blocksdir());
println!("Please use the --blocksdir parameter to set a valid path.");
println!("Run the program with '-h' for help.");
std::process::exit(1);
}
// Always check BRK directory (needed by both processor and server)
if !self.brkdir().is_dir() {
println!("{:?} isn't a valid directory", self.brkdir());
println!("Please use the --brkdir parameter to set a valid path.");
println!("Run the program with '-h' for help.");
std::process::exit(1);
}
if self.rpc_auth().is_err() {
println!(
"No way found to authenticate the RPC client, please either set --rpccookiefile or --rpcuser and --rpcpassword.\nRun the program with '-h' for help."
);
std::process::exit(1);
}
}
fn read(path: &Path) -> Self {
@@ -310,15 +298,6 @@ impl Config {
self.outputsdir().join("hars")
}
pub fn process(&self) -> bool {
self.services
.is_none_or(|m| m == Services::All || m == Services::Processor)
}
pub fn serve(&self) -> bool {
self.services
.is_none_or(|m| m == Services::All || m == Services::Server)
}
fn path_cookiefile(&self) -> PathBuf {
self.rpccookiefile.as_ref().map_or_else(

View File

@@ -4,7 +4,6 @@ use brk_core::{dot_brk_log_path, dot_brk_path};
mod config;
mod run;
mod services;
use run::*;

View File

@@ -12,23 +12,13 @@ use crate::config::Config;
pub fn run() -> color_eyre::Result<()> {
let config = Config::import()?;
let rpc = if config.process() {
Some(config.rpc()?)
} else {
None
};
let rpc = config.rpc()?;
let exit = Exit::new();
let parser = if config.process() && rpc.is_some() {
Some(brk_parser::Parser::new(
config.blocksdir(),
config.outputsdir(),
rpc.unwrap(),
))
} else {
None
};
let parser = brk_parser::Parser::new(
config.blocksdir(),
config.brkdir(),
rpc,
);
let format = config.format();
@@ -62,60 +52,42 @@ pub fn run() -> color_eyre::Result<()> {
.enable_all()
.build()?
.block_on(async {
let server = if config.serve() {
let served_indexer = indexer.clone();
let served_computer = computer.clone();
// Always start the server
let served_indexer = indexer.clone();
let served_computer = computer.clone();
let server = Server::new(served_indexer, served_computer, config.website())?;
let server = Server::new(served_indexer, served_computer, config.website())?;
let watch = config.watch();
let mcp = config.mcp();
let opt = Some(tokio::spawn(async move {
server.serve(watch, mcp).await.unwrap();
}));
let watch = config.watch();
let mcp = config.mcp();
let server_handle = tokio::spawn(async move {
server.serve(watch, mcp).await.unwrap();
});
sleep(Duration::from_secs(1));
sleep(Duration::from_secs(1));
opt
} else {
None
};
// Always run the processor
loop {
wait_for_synced_node(rpc)?;
if config.process() {
if let (Some(rpc_client), Some(parser)) = (rpc, parser) {
loop {
wait_for_synced_node(rpc_client)?;
let block_count = rpc.get_block_count()?;
let block_count = rpc_client.get_block_count()?;
info!("{} blocks found.", block_count + 1);
info!("{} blocks found.", block_count + 1);
let starting_indexes =
indexer.index(&parser, rpc, &exit, config.check_collisions())?;
let starting_indexes =
indexer.index(&parser, rpc_client, &exit, config.check_collisions())?;
computer.compute(&mut indexer, starting_indexes, &exit)?;
computer.compute(&mut indexer, starting_indexes, &exit)?;
if let Some(delay) = config.delay() {
sleep(Duration::from_secs(delay))
}
if let Some(delay) = config.delay() {
sleep(Duration::from_secs(delay))
}
info!("Waiting for new blocks...");
info!("Waiting for new blocks...");
while block_count == rpc_client.get_block_count()? {
sleep(Duration::from_secs(1))
}
}
} else {
return Err(color_eyre::eyre::eyre!(
"RPC client and parser required for processing mode"
))?;
while block_count == rpc.get_block_count()? {
sleep(Duration::from_secs(1))
}
}
if let Some(handle) = server {
handle.await.unwrap();
}
Ok(())
})
}

View File

@@ -1,23 +0,0 @@
use clap_derive::{Parser, ValueEnum};
use serde::{Deserialize, Serialize};
#[derive(
Default,
Debug,
Clone,
Copy,
Parser,
ValueEnum,
Serialize,
Deserialize,
PartialEq,
Eq,
PartialOrd,
Ord,
)]
pub enum Services {
#[default]
All,
Processor,
Server,
}