1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use crate::db::*;
use crate::reading::*;
use crate::threading::{spawn, ArcMutex};
use crate::Result;
use crossbeam_channel::Receiver;
use log::{error, info};
use std::sync::{Arc, Mutex};
pub fn start(rx: Receiver<Reading>, db: ArcMutex<Db>) -> Result<()> {
spawn("receiver", move || run(rx, db))?;
Ok(())
}
fn run(rx: Receiver<Reading>, db: Arc<Mutex<Db>>) {
for reading in rx.iter() {
info!("{}: {:?}", &reading.sensor, &reading.value);
if reading.is_persisted {
db.lock().unwrap().insert_reading(&reading).unwrap();
}
}
error!("Reading receiver has stopped.");
}