• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

payjoin / rust-payjoin / 21486039766

29 Jan 2026 04:23PM UTC coverage: 83.673% (+0.5%) from 83.203%
21486039766

Pull #1296

github

web-flow
Merge 741fb9cbc into 1b6cc38b5
Pull Request #1296: Add standalone metrics service to Payjoin-service

130 of 144 new or added lines in 7 files covered. (90.28%)

18 existing lines in 3 files now uncovered.

10224 of 12219 relevant lines covered (83.67%)

431.61 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/payjoin-directory/src/main.rs
1
use clap::Parser;
2
use ohttp_relay::SentinelTag;
3
use payjoin_directory::*;
4
use tokio::net::TcpListener;
5
use tracing_subscriber::filter::LevelFilter;
6
use tracing_subscriber::EnvFilter;
7

8
#[tokio::main]
9
async fn main() -> Result<(), BoxError> {
×
10
    init_logging();
×
11

12
    let cli = cli::Cli::parse();
×
13
    let config = config::Config::new(&cli)?;
×
14

15
    let key_dir = config.ohttp_keys;
×
16
    std::fs::create_dir_all(&key_dir).expect("Failed to create key directory");
×
17

18
    let ohttp = match key_config::read_server_config(&key_dir) {
×
19
        Ok(config) => config,
×
20
        Err(_) => {
21
            let ohttp_config = key_config::gen_ohttp_server_config()?;
×
22
            let path = key_config::persist_new_key_config(ohttp_config, &key_dir)?;
×
23
            println!("Generated new key configuration at {}", path.display());
×
24
            key_config::read_server_config(&key_dir).expect("Failed to read newly generated config")
×
25
        }
26
    };
27

28
    let db = payjoin_directory::FilesDb::init(config.timeout, config.storage_dir)
×
29
        .await
×
30
        .expect("Failed to initialize persistent storage");
×
31

NEW
32
    let service = Service::new(db, ohttp.into(), SentinelTag::new([0u8; 32]));
×
33

34
    let listener = TcpListener::bind(config.listen_addr).await?;
×
35

36
    #[cfg(feature = "acme")]
37
    if let Some(acme_config) = config.acme {
×
38
        service.serve_acme(listener, acme_config.into()).await;
×
39
        return Ok(());
×
40
    }
×
41

42
    service.serve_tcp(listener).await;
×
43

44
    Ok(())
×
45
}
×
46

47
fn init_logging() {
×
48
    let env_filter =
×
49
        EnvFilter::builder().with_default_directive(LevelFilter::INFO.into()).from_env_lossy();
×
50

51
    tracing_subscriber::fmt().with_target(true).with_level(true).with_env_filter(env_filter).init();
×
52

53
    println!("Logging initialized");
×
54
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc