advotracker: services substructure
Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
This commit is contained in:
119
advotracker/src/services/import/allianzdirectcall.rs
Normal file
119
advotracker/src/services/import/allianzdirectcall.rs
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
/*
|
||||||
|
* advotracker - Hotline tackingtool for Advocats
|
||||||
|
*
|
||||||
|
* Copyright 2020 Ralf Zerres <ralf.zerres@networkx.de>
|
||||||
|
* SPDX-License-Identifier: (0BSD or MIT)
|
||||||
|
*/
|
||||||
|
|
||||||
|
use chrono::{Local, DateTime};
|
||||||
|
use locales::t;
|
||||||
|
use std::error::Error;
|
||||||
|
use tracing::trace;
|
||||||
|
|
||||||
|
//use crate::db::redis;
|
||||||
|
use crate::data;
|
||||||
|
|
||||||
|
/// export as csv format
|
||||||
|
/// https://docs.rs/csv/1.1.3/csv/cookbook/index.html
|
||||||
|
/// https://blog.burntsushi.net/csv/
|
||||||
|
pub fn export(p: &mut String, lang: &String) -> Result<(), Box<dyn Error>> {
|
||||||
|
use std::fs::File;
|
||||||
|
use std::path::Path;
|
||||||
|
//use std::ffi::OsStr;
|
||||||
|
|
||||||
|
let mut res = t!("csv.export.started", lang);
|
||||||
|
let mut state = t!("state.started", lang);
|
||||||
|
trace!(target: "advotrackerd", process = ?res, state = ?state);
|
||||||
|
|
||||||
|
// Note: slash syntax also works on Windows!
|
||||||
|
let path = Path::new(p);
|
||||||
|
|
||||||
|
// open the file
|
||||||
|
let file = File::open(path)?;
|
||||||
|
|
||||||
|
trace!(target: "csv.export", extension = ?path.extension(), file = ?file);
|
||||||
|
state = t!("state.finished", lang);
|
||||||
|
res = t!("csv.export.finished", lang);
|
||||||
|
trace!(target: "csv-export", process = ?res, state = ?state);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// import AllianzDirectCall data from a csv delimeted file
|
||||||
|
/// save records to redis backend
|
||||||
|
/// https://docs.rs/csv/1.1.3/csv/cookbook/index.html
|
||||||
|
/// https://blog.burntsushi.net/csv/
|
||||||
|
pub fn import(p: &mut String, lang: &String) -> Result<u32, Box<dyn Error>> {
|
||||||
|
use std::fs::File;
|
||||||
|
use std::path::Path;
|
||||||
|
use std::ffi::OsStr;
|
||||||
|
|
||||||
|
let mut res = t!("csv.import.started", lang);
|
||||||
|
let mut state = t!("state.started", lang);
|
||||||
|
let dt_start: DateTime<Local> = Local::now();
|
||||||
|
|
||||||
|
trace!(target: "advotrackerd", process = ?res, state = ?state, date_start = ?dt_start.to_string());
|
||||||
|
|
||||||
|
// Note: slash syntax also workd on Windows!
|
||||||
|
let path = Path::new(p);
|
||||||
|
|
||||||
|
// must be a readable file
|
||||||
|
trace!(target: "advotrackerd", path = ?path);
|
||||||
|
assert_eq!(path.is_file(), true);
|
||||||
|
|
||||||
|
// only accept files with '.txt' extensions
|
||||||
|
let extension = path.extension();
|
||||||
|
assert_eq!(extension, Some(OsStr::new("txt")));
|
||||||
|
|
||||||
|
// open the file
|
||||||
|
let file = File::open(path)?;
|
||||||
|
trace!(target: "advotrackerd", extension = ?extension, file = ?file);
|
||||||
|
|
||||||
|
// Build the CSV reader and iterate over each record.
|
||||||
|
let mut csv_reader = csv::ReaderBuilder::new()
|
||||||
|
.has_headers(true)
|
||||||
|
.delimiter(b' ')
|
||||||
|
//.comment(Some(b'#'))
|
||||||
|
//.flexible(true)
|
||||||
|
.from_reader(file);
|
||||||
|
{
|
||||||
|
// We nest this call in its own scope because of lifetimes.
|
||||||
|
let headers = csv_reader.headers()?;
|
||||||
|
trace!(target: "advotrackerd", header = ?headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
//for result in csv_reader.records() {
|
||||||
|
let mut count = 0;
|
||||||
|
for result in csv_reader.deserialize() {
|
||||||
|
// The iterator yields Result<StringRecord, Error>, so we check the
|
||||||
|
// error here.
|
||||||
|
//let record = result?;
|
||||||
|
let _record: data::AllianzPolicyNumber = result?;
|
||||||
|
//println!("{:?}", record);
|
||||||
|
|
||||||
|
// WIP: write to redis backend
|
||||||
|
// policy_data.push(PolicyData {
|
||||||
|
// date_inserted: Some(Utc::now().naive_utc()),
|
||||||
|
// dion: 1,
|
||||||
|
// policy_code: PolicyCode::AS,
|
||||||
|
// policy_number,
|
||||||
|
// status: Status::Active,
|
||||||
|
// });
|
||||||
|
|
||||||
|
count +=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
let dt_end: DateTime<Local> = Local::now();
|
||||||
|
let duration = dt_end.signed_duration_since(dt_start);
|
||||||
|
println!("Duration: {:#?}", duration);
|
||||||
|
//let seconds = duration.secs;
|
||||||
|
//println!("Seconds: {:#?}", seconds);
|
||||||
|
trace!(target: "advotrackerd", record_count = ?count, duration = ?duration);
|
||||||
|
|
||||||
|
state = t!("state.finished", lang);
|
||||||
|
res = t!("csv.import.finished", lang);
|
||||||
|
trace!(target: "advotrackerd", process = ?res, state = ?state, date_stop = ?dt_end.to_string());
|
||||||
|
|
||||||
|
//Ok(count, duration.seconds())
|
||||||
|
Ok(count)
|
||||||
|
}
|
||||||
23
advotracker/src/services/import/csv.rs
Normal file
23
advotracker/src/services/import/csv.rs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
use std::error::Error;
|
||||||
|
use std::io;
|
||||||
|
use std::process;
|
||||||
|
|
||||||
|
/// import from csv format (Standard in)
|
||||||
|
fn import() -> Result<(), Box<dyn Error>> {
|
||||||
|
// Build the CSV reader and iterate over each record.
|
||||||
|
let mut csv_reader = csv::Reader::from_reader(io::stdin());
|
||||||
|
for result in csv_reader.records() {
|
||||||
|
// The iterator yields Result<StringRecord, Error>, so we check the
|
||||||
|
// error here.
|
||||||
|
let record = result?;
|
||||||
|
println!("{:?}", record);
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
if let Err(err) = import() {
|
||||||
|
println!("error running example: {}", err);
|
||||||
|
process::exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
9
advotracker/src/services/import/mod.rs
Normal file
9
advotracker/src/services/import/mod.rs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/*
|
||||||
|
* advotracker - Hotline tackingtool for Advocats
|
||||||
|
*
|
||||||
|
* Copyright 2020 Ralf Zerres <ralf.zerres@networkx.de>
|
||||||
|
* SPDX-License-Identifier: (0BSD or MIT)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// Alliand DirecCall module
|
||||||
|
pub mod allianzdirectcall;
|
||||||
37
advotracker/src/services/locales/allianzdirectcall.json
Normal file
37
advotracker/src/services/locales/allianzdirectcall.json
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"err.lang.not_found": {
|
||||||
|
"de_DE.UTF-8": "Konnte die Umgebungsvarialbe LANG nicht auslesen",
|
||||||
|
"de": "Konnte die Umgebungsvarialbe LANG nicht auslesen",
|
||||||
|
"en": "Couldn't read LANG"
|
||||||
|
},
|
||||||
|
"csv_import.started": {
|
||||||
|
"de_DE.UTF-8": "importieren von einer csv-datei gestartet",
|
||||||
|
"de": "importieren von einer csv-datei gestartet",
|
||||||
|
"en": "import from a csv-file started"
|
||||||
|
},
|
||||||
|
"csv_import.finished": {
|
||||||
|
"de_DE.UTF-8": "importieren von einer csv-datei beendet",
|
||||||
|
"de": "importieren von einer csv-datei beendet",
|
||||||
|
"en": "import from a csv-file finished"
|
||||||
|
},
|
||||||
|
"csv_export.started": {
|
||||||
|
"de_DE.UTF-8": "exportieren in eine csv-datei gestartet",
|
||||||
|
"de": "exportieren in eine csv-datei gestartet",
|
||||||
|
"en": "export to csv-file started"
|
||||||
|
},
|
||||||
|
"csv_export.finished": {
|
||||||
|
"de_DE.UTF-8": "exportieren in eine csv-datei beendet",
|
||||||
|
"de": "exportieren in eine csv-datei beendet",
|
||||||
|
"en": "export to csv-file finished"
|
||||||
|
},
|
||||||
|
"state.started": {
|
||||||
|
"de_DE.UTF-8": "gestartet",
|
||||||
|
"de": "gestartet",
|
||||||
|
"en": "started"
|
||||||
|
},
|
||||||
|
"state.finished": {
|
||||||
|
"de_DE.UTF-8": "beendet",
|
||||||
|
"de": "beended",
|
||||||
|
"en": "finished"
|
||||||
|
}
|
||||||
|
}
|
||||||
9
advotracker/src/services/mod.rs
Normal file
9
advotracker/src/services/mod.rs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/*
|
||||||
|
* advotracker - Hotline tackingtool for Advocats
|
||||||
|
*
|
||||||
|
* Copyright 2020 Ralf Zerres <ralf.zerres@networkx.de>
|
||||||
|
* SPDX-License-Identifier: (0BSD or MIT)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// advotracker import modules
|
||||||
|
pub mod import;
|
||||||
Reference in New Issue
Block a user