use crate::{database, parse_prometheus};
use prometheus_scraper::ParseError;
use rusqlite::Connection;
use std::{fmt, fs::File, io::Read};
pub fn seed_database(mut connection: Connection, mock_data_path: &str) -> Result<(), SeedError> {
log::info!("Seeding database");
let mut f = File::open(mock_data_path).map_err(SeedError::IO)?;
let mut s = String::new();
f.read_to_string(&mut s).map_err(SeedError::IO)?;
let metrics = parse_prometheus(&s).map_err(SeedError::Parse)?;
database::store_snapshot(&mut connection, &metrics).map_err(SeedError::DB)?;
Ok(())
}
#[derive(Debug)]
pub enum SeedError {
IO(std::io::Error),
Parse(ParseError),
DB(rusqlite::Error),
}
impl fmt::Display for SeedError {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
match self {
SeedError::IO(e) => e.fmt(fmt),
SeedError::Parse(e) => e.fmt(fmt),
SeedError::DB(e) => e.fmt(fmt),
}
}
}