logscale_client/
client.rs1use std::error::Error;
2
3use reqwest::{Client, StatusCode, Url};
4
5use crate::models::{
6 errors::LogScaleError, ingest::StructuredLogsIngestRequest,
7 ingest::UnstructuredLogsIngestRequest,
8};
9
10#[derive(Clone)]
11pub struct LogScaleClient {
12 logscale_url: Url,
13 ingest_token: String,
14 http_client: Client,
15 ingest_token_header_value: String,
16}
17
18impl LogScaleClient {
19 pub fn from_url(logscale_url: &str, ingest_token: String) -> Result<Self, Box<dyn Error>> {
20 let url = Url::parse(logscale_url)?;
21
22 Ok(Self {
23 logscale_url: url,
24 ingest_token: ingest_token.clone(),
25 http_client: Client::default(),
26 ingest_token_header_value: format!("Bearer {}", &ingest_token),
27 })
28 }
29
30 pub async fn ingest_structured<'a>(
31 &self,
32 request: &[StructuredLogsIngestRequest<'a>],
33 ) -> Result<(), LogScaleError> {
34 let url = self
35 .logscale_url
36 .join("api/v1/ingest/humio-structured")
37 .unwrap();
38
39 if let Ok(response) = self
40 .http_client
41 .post(url)
42 .header("Authorization", &self.ingest_token_header_value)
43 .json(&request)
44 .send()
45 .await
46 {
47 let response_status_code = response.status();
48
49 if response_status_code == StatusCode::OK {
50 Ok(())
51 } else {
52 Err(LogScaleError::ErrorWithStatusCode(
53 response_status_code.into(),
54 ))
55 }
56 } else {
57 Err(LogScaleError::ConnectionError)
58 }
59 }
60
61 pub async fn ingest_unstructured<'a>(
62 &self,
63 request: &[UnstructuredLogsIngestRequest<'a>],
64 ) -> Result<(), LogScaleError> {
65 let url = self
66 .logscale_url
67 .join("api/v1/ingest/humio-unstructured")
68 .unwrap();
69
70 if let Ok(response) = self
71 .http_client
72 .post(url)
73 .header("Authorization", &self.ingest_token_header_value)
74 .json(&request)
75 .send()
76 .await
77 {
78 let response_status_code = response.status();
79
80 if response_status_code == StatusCode::OK {
81 Ok(())
82 } else {
83 Err(LogScaleError::ErrorWithStatusCode(
84 response_status_code.into(),
85 ))
86 }
87 } else {
88 Err(LogScaleError::ConnectionError)
89 }
90 }
91}
92
93unsafe impl Send for LogScaleClient {}
94unsafe impl Sync for LogScaleClient {}