summaryrefslogtreecommitdiff
path: root/graph-checker
diff options
context:
space:
mode:
authorAndrew Guschin <guschin@altlinux.org>2024-10-11 15:57:37 +0400
committerAndrew Guschin <guschin@altlinux.org>2024-10-11 15:57:37 +0400
commit8a150ccc32b88842c70a9bffb4728cb420fe721d (patch)
treea6638f1abf9cba7391862ee7d358aa35cd20df50 /graph-checker
parent4a59d3d58e8a87c0b176b9ef0a6d8fa65d8e1f03 (diff)
feat: add better logging
Diffstat (limited to 'graph-checker')
-rw-r--r--graph-checker/Cargo.lock101
-rw-r--r--graph-checker/Cargo.toml3
-rw-r--r--graph-checker/src/compute.rs4
-rw-r--r--graph-checker/src/main.rs66
4 files changed, 155 insertions, 19 deletions
diff --git a/graph-checker/Cargo.lock b/graph-checker/Cargo.lock
index 27711dd..c53b5ff 100644
--- a/graph-checker/Cargo.lock
+++ b/graph-checker/Cargo.lock
@@ -36,6 +36,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"
[[package]]
+name = "anyhow"
+version = "1.0.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6"
+
+[[package]]
name = "atoi"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -198,6 +204,15 @@ dependencies = [
]
[[package]]
+name = "deranged"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+dependencies = [
+ "powerfmt",
+]
+
+[[package]]
name = "digest"
version = "0.10.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -425,9 +440,12 @@ checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
name = "graph-checker"
version = "0.1.0"
dependencies = [
+ "anyhow",
"cc",
"dotenv",
"futures",
+ "log",
+ "simplelog",
"sqlx",
"tokio",
]
@@ -653,6 +671,12 @@ dependencies = [
]
[[package]]
+name = "num-conv"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+
+[[package]]
name = "num-integer"
version = "0.1.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -683,6 +707,15 @@ dependencies = [
]
[[package]]
+name = "num_threads"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
+dependencies = [
+ "libc",
+]
+
+[[package]]
name = "object"
version = "0.36.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -787,6 +820,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
name = "ppv-lite86"
version = "0.2.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -995,6 +1034,17 @@ dependencies = [
]
[[package]]
+name = "simplelog"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16257adbfaef1ee58b1363bdc0664c9b8e1e30aed86049635fb5f147d065a9c0"
+dependencies = [
+ "log",
+ "termcolor",
+ "time",
+]
+
+[[package]]
name = "slab"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1287,6 +1337,15 @@ dependencies = [
]
[[package]]
+name = "termcolor"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
name = "thiserror"
version = "1.0.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1307,6 +1366,39 @@ dependencies = [
]
[[package]]
+name = "time"
+version = "0.3.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
+dependencies = [
+ "deranged",
+ "itoa",
+ "libc",
+ "num-conv",
+ "num_threads",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
+dependencies = [
+ "num-conv",
+ "time-core",
+]
+
+[[package]]
name = "tinyvec"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1478,6 +1570,15 @@ dependencies = [
]
[[package]]
+name = "winapi-util"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
+dependencies = [
+ "windows-sys 0.59.0",
+]
+
+[[package]]
name = "windows-sys"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/graph-checker/Cargo.toml b/graph-checker/Cargo.toml
index 77a6bb8..e004926 100644
--- a/graph-checker/Cargo.toml
+++ b/graph-checker/Cargo.toml
@@ -6,8 +6,11 @@ links = "nauty"
build = "build.rs"
[dependencies]
+anyhow = "1.0.89"
dotenv = "0.15.0"
futures = "0.3.30"
+log = "0.4.22"
+simplelog = "0.12.2"
sqlx = { version = "0.8.2", features = ["runtime-tokio", "sqlite"] }
tokio = { version = "1.40.0", features = ["full"] }
diff --git a/graph-checker/src/compute.rs b/graph-checker/src/compute.rs
index c3ee046..67c1ae4 100644
--- a/graph-checker/src/compute.rs
+++ b/graph-checker/src/compute.rs
@@ -2,7 +2,7 @@ use crate::graph::Graph;
pub async fn dominating_numbers(
g: Graph,
-) -> (String, Option<u32>, Option<u32>) {
+) -> (String, usize, Option<u32>, Option<u32>) {
let line = g.to_g6();
let mut independent_dominating = None;
@@ -85,5 +85,5 @@ pub async fn dominating_numbers(
}
}
- (line, independent_dominating, fg)
+ (line, g.size, independent_dominating, fg)
}
diff --git a/graph-checker/src/main.rs b/graph-checker/src/main.rs
index 231221e..68fb0bb 100644
--- a/graph-checker/src/main.rs
+++ b/graph-checker/src/main.rs
@@ -1,5 +1,6 @@
+use anyhow::Context;
use sqlx::{migrate::MigrateDatabase, QueryBuilder, Sqlite};
-use std::time::Instant;
+use std::{fs::File, time::Instant};
mod graph;
@@ -8,29 +9,52 @@ use crate::geng::GengIterator;
mod compute;
+use simplelog::*;
+
#[tokio::main]
-async fn main() -> Result<(), sqlx::Error> {
+async fn main() -> anyhow::Result<()> {
dotenv::dotenv().ok();
+ CombinedLogger::init(vec![
+ TermLogger::new(
+ LevelFilter::Info,
+ Config::default(),
+ TerminalMode::Mixed,
+ ColorChoice::Auto,
+ ),
+ WriteLogger::new(
+ LevelFilter::Debug,
+ Config::default(),
+ File::create("test.log").unwrap(),
+ ),
+ ])
+ .unwrap();
+
+ let vert_num = std::env::args()
+ .nth(1)
+ .context("You should provide number of vertices in argument")?
+ .parse::<usize>()?;
let database_url =
std::env::var("DATABASE_URL").expect("Expected DATABASE_URL in env");
if !sqlx::Sqlite::database_exists(&database_url).await? {
+ log::info!("Database file doesn't exist. Creating '{database_url}'.");
sqlx::Sqlite::create_database(&database_url).await?;
}
let db = sqlx::SqlitePool::connect(&database_url).await?;
- let err = sqlx::query(
- "CREATE TABLE IF NOT EXISTS graphs (g6 VARCHAR NOT NULL, ind_dom INT NOT NULL, forced_geod INT NOT NULL);"
+ sqlx::query(
+ "CREATE TABLE IF NOT EXISTS graphs (\
+ g6 VARCHAR NOT NULL,\
+ size INT NOT NULL,\
+ ind_dom INT NOT NULL,\
+ forced_geod INT NOT NULL);",
)
.execute(&db)
- .await;
- if let Err(e) = err {
- println!("Error while creating table: {e}");
- }
+ .await?;
- let gi = GengIterator::new(9);
+ let gi = GengIterator::new(vert_num);
- println!("Started");
let start = Instant::now();
- const BATCH_SIZE: usize = 10000;
+ const BATCH_SIZE: usize = 5000;
+ log::info!("Started computation for {vert_num} vertices");
let mut count = 0;
loop {
let graphs = gi.take(BATCH_SIZE);
@@ -42,26 +66,34 @@ async fn main() -> Result<(), sqlx::Error> {
let sz = part.len();
let mut query = QueryBuilder::<Sqlite>::new(
- "INSERT INTO graphs (g6, ind_dom, forced_geod) ",
+ "INSERT INTO graphs (g6, size, ind_dom, forced_geod) ",
);
query.push_values(part, |mut b, res| {
match res {
- Ok((g6, ind_dom, fg)) => {
+ Ok((g6, size, ind_dom, fg)) => {
+ // log::debug!(
+ // "inserting {} {} {:?} {:?}",
+ // g6,
+ // size,
+ // ind_dom,
+ // fg
+ // );
b.push_bind(g6)
+ .push_bind(size as u32)
.push_bind(ind_dom.unwrap_or(0))
.push_bind(fg.unwrap_or(0));
}
- Err(_) => println!("Unable to push into query"),
+ Err(_) => log::error!("Unable to push into query"),
};
});
let err = query.build().execute(&db).await;
if let Err(e) = err {
- println!("Error while inserting: {e}");
+ log::error!("{e}");
}
count += sz;
- println!(
+ log::info!(
"Counted {count} in {}s",
batch.elapsed().as_nanos() as f64 / 1e9
);
@@ -72,7 +104,7 @@ async fn main() -> Result<(), sqlx::Error> {
let elapsed = start.elapsed();
let time = elapsed.as_nanos();
- println!("Time elapsed: {}s", time as f64 / 1e9);
+ log::info!("Time elapsed: {}s", time as f64 / 1e9);
Ok(())
}