theo_heartbeat/
lib.rs

1
2use iso8601_timestamp::Timestamp;
3
4use redis::Commands;
5
6fn iso_time() -> String {
7    Timestamp::now_utc().format().to_string()
8}
9
10pub fn pulse(redis_url: &str, device: &str) -> i8 {
11    let client = redis::Client::open(redis_url).unwrap();
12
13    match client.get_connection() {
14        Ok(mut connection) => {
15            let time = iso_time();
16            let ret = connection.hset::<&str, &str, String, i8>("sensors.heartbeats", device, time).unwrap();
17            ret
18        },
19        Err(_) => {
20            eprintln!("Unable to touch last updated, redis unavailable?");
21            0
22        }
23    }
24}
25
26#[cfg(test)]
27mod tests {
28    use super::*;
29
30    #[test]
31    fn test_iso_time() {
32        let time = iso_time();
33        let ts = Timestamp::now_utc().format().to_string();
34        assert_eq!(time, ts);
35    }
36
37    #[test]
38    fn test_pulse() {
39        let client = redis::Client::open("redis://localhost:6379/3").unwrap();
40        let mut conn = client.get_connection().expect("Failed to connect to redis");
41        conn.del::<&str, i8>("sensors.heartbeats").expect("Failed to delete heartbeats key");
42
43        let writes = pulse("redis://localhost:6379/3", "device");
44        assert_eq!(1, writes);
45    }
46}