tsdb 0.3.3

Parse Prometheus tsdb files
Documentation
use clap::Parser;
use std::path::PathBuf;

extern crate tsdb;
use tsdb::chunks;
use tsdb::index;

#[derive(Parser)]
#[clap(author, version, about, long_about = None)]
struct Cli {
    #[clap(short, long, parse(from_os_str), value_name = "FILE")]
    chunk_file: Option<PathBuf>,
    #[clap(short, long, parse(from_os_str), value_name = "FILE")]
    index_file: Option<PathBuf>,
}

fn main() {
    let cli = Cli::parse();

    if let Some(file) = cli.chunk_file.as_deref() {
        let mut chunk_positions: Vec<usize> = Vec::new();
        let chunks = chunks::Chunks::new(file);

        for i in chunks {
            chunk_positions.push(i);
        }

        println!("Number of chunks: {}", chunk_positions.len());
    }

    if let Some(file) = cli.index_file.as_deref() {
        let index = index::Index::new(file);

        let mut sym = index::symbol_table(&index).unwrap();

        let series = index::series(&index).unwrap();
        for s in series {
            println!("Chunks: {}", s.chunks.len());
            for (k, v) in s.labels.into_iter() {
                let key = sym.lookup(k).unwrap();
                let val = sym.lookup(v).unwrap();
                println!("labels: {} -> {}", key, val);
            }
        }
    }
}