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}