Add optional --dbpath flag (#6)

* Use common config with lower cache capacity

* Add command line argument parser

* Add optional --dbpath flag
This commit is contained in:
Dave Gallant
2020-06-22 22:54:06 -04:00
committed by GitHub
parent 94863c3c69
commit 1989b48d99
6 changed files with 101 additions and 31 deletions

52
Cargo.lock generated
View File

@@ -18,6 +18,15 @@ dependencies = [
"memchr",
]
[[package]]
name = "ansi_term"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
dependencies = [
"winapi 0.3.8",
]
[[package]]
name = "arc-swap"
version = "0.4.7"
@@ -102,6 +111,21 @@ version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
[[package]]
name = "clap"
version = "2.33.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129"
dependencies = [
"ansi_term",
"atty",
"bitflags",
"strsim",
"textwrap",
"unicode-width",
"vec_map",
]
[[package]]
name = "cloudabi"
version = "0.0.3"
@@ -1045,6 +1069,7 @@ dependencies = [
name = "rfd-notify"
version = "0.1.0"
dependencies = [
"clap",
"log",
"pretty_env_logger",
"regex",
@@ -1280,6 +1305,12 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
name = "strsim"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
[[package]]
name = "syn"
version = "1.0.33"
@@ -1326,6 +1357,15 @@ dependencies = [
"winapi-util",
]
[[package]]
name = "textwrap"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
dependencies = [
"unicode-width",
]
[[package]]
name = "thread_local"
version = "1.0.1"
@@ -1464,6 +1504,12 @@ dependencies = [
"smallvec",
]
[[package]]
name = "unicode-width"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
[[package]]
name = "unicode-xid"
version = "0.2.0"
@@ -1493,6 +1539,12 @@ version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6454029bf181f092ad1b853286f23e2c507d8e8194d01d92da4a55c274a5508c"
[[package]]
name = "vec_map"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
[[package]]
name = "version_check"
version = "0.9.2"

View File

@@ -17,3 +17,4 @@ pretty_env_logger = "0.4.0"
regex = "1.3.9"
rust-crypto = "^0.2"
sled = "0.31.0"
clap = "2.33.1"

View File

@@ -16,7 +16,7 @@ This tool looks for regular expressions from [RedFlagDeals.com forums](https://f
Declare a configuration. An example can found in [config.toml](./examples/config.toml)
```shell
rfd-notify ./examples/config.toml
rfd-notify --config ./examples/config.toml
```
## cross compile

View File

@@ -1,5 +1,12 @@
pub fn hash_exists(hash: &str) -> bool {
let tree = sled::open("./deals_db").expect("open");
pub fn get_config(dbpath: &str) -> sled::Config {
sled::Config::default()
.path(dbpath)
.cache_capacity(100_000_000)
.flush_every_ms(Some(1000))
}
pub fn hash_exists(hash: &str, config: sled::Config) -> bool {
let tree = config.open().unwrap();
let result = tree.get(hash);
if result.is_err() {
error!("{:?}", &result);
@@ -10,8 +17,8 @@ pub fn hash_exists(hash: &str) -> bool {
true
}
pub fn insert(hash: &str) {
let tree = sled::open("./deals_db").expect("open");
pub fn insert(hash: &str, config: sled::Config) {
let tree = config.open().unwrap();
let result = tree.insert(&hash, "");
if result.is_err() {
error!("{:?}", &result);

View File

@@ -1,38 +1,48 @@
extern crate pretty_env_logger;
#[macro_use]
extern crate log;
extern crate clap;
extern crate crypto;
mod config;
mod db;
mod mail;
mod rfd;
use std::env;
fn help() {
println!(
"usage:\n
rfd-notify <config-toml>
Specify the filepath of the config."
);
}
use clap::{App, Arg};
fn main() {
pretty_env_logger::init();
let args: Vec<String> = env::args().collect();
match args.len() {
2 => {
let config_path = &args[1];
let config = config::parse(config_path);
debug!("{:?}\n", config);
let hot_deals = rfd::get_hot_deals().map_err(|err| error!("{:?}", err)).ok();
let parsed_deals = rfd::parse_hot_deals(&hot_deals.unwrap());
rfd::match_deals(parsed_deals, config)
}
_ => {
help();
}
}
let app = App::new("rfd-notify")
.version("0.1.0")
.about("Send emails based on regular expressions")
.args(&[
Arg::with_name("config")
.required(true)
.takes_value(true)
.short("c")
.help("Specify path to config")
.long("config"),
Arg::with_name("dbpath")
.default_value("./deals_db")
.takes_value(true)
.short("d")
.help("Specify path to where the embedded database is stored")
.long("dbpath"),
]);
let matches = app.get_matches();
let config = matches.value_of("config").unwrap();
let parsed_config = config::parse(config);
debug!("{:?}\n", parsed_config);
let hot_deals = rfd::get_hot_deals().map_err(|err| error!("{:?}", err)).ok();
let parsed_deals = rfd::parse_hot_deals(&hot_deals.unwrap());
rfd::match_deals(
parsed_deals,
parsed_config,
matches.value_of("dbpath").unwrap(),
);
info!("Complete")
}

View File

@@ -73,7 +73,7 @@ fn hash_deal(topic: &Topic) -> String {
hasher.result_str()
}
pub fn match_deals(deals: Deals, config: Config) {
pub fn match_deals(deals: Deals, config: Config, dbpath: &str) {
for topic in deals.topics.iter() {
for expression in config.expressions.iter() {
let mut found_match = false;
@@ -101,7 +101,7 @@ pub fn match_deals(deals: Deals, config: Config) {
continue;
}
let deal_hash = hash_deal(topic);
if db::hash_exists(&deal_hash) {
if db::hash_exists(&deal_hash, db::get_config(dbpath)) {
debug!("deal hash '{}' already exists", &deal_hash);
} else {
let posts = parse_posts(
@@ -110,7 +110,7 @@ pub fn match_deals(deals: Deals, config: Config) {
.ok()
.unwrap(),
);
db::insert(&deal_hash);
db::insert(&deal_hash, db::get_config(dbpath));
mail::send(topic, &posts, expression, &config);
}
}