codealong_elk/
client.rs

1use chrono::prelude::*;
2use chrono::DateTime;
3
4use crate::event::Event;
5
6use crate::error::Result;
7use reqwest;
8
9pub struct Client {
10    url: String,
11}
12
13impl Default for Client {
14    fn default() -> Self {
15        Client {
16            url: "http://localhost:9200".to_owned(),
17        }
18    }
19}
20
21impl Client {
22    pub fn new(url: &str) -> Client {
23        Client {
24            url: url.to_owned(),
25        }
26    }
27
28    pub fn index<T: codealong::Event + serde::Serialize>(
29        &self,
30        event: T,
31    ) -> Result<reqwest::Response> {
32        let event = Event::new(event);
33        let client = reqwest::Client::new();
34        let index = get_es_index(event.timestamp());
35        let url = format!("{}/{}/_doc/{}", self.url, index, event.id());
36        Ok(client.put(&url).json(&event).send()?)
37    }
38
39    pub fn health(&self) -> Result<reqwest::Response> {
40        let client = reqwest::Client::new();
41        let url = format!("{}/{}", self.url, "_cluster/health");
42        Ok(client.get(&url).send()?)
43    }
44}
45
46fn get_es_index(date: &DateTime<Utc>) -> String {
47    date.format("codealong-%Y.%m").to_string()
48}