Skip to content

Commit 7927c08

Browse files
committed
Replace curl with reqwest in on_call
1 parent e7b875b commit 7927c08

File tree

1 file changed

+17
-39
lines changed

1 file changed

+17
-39
lines changed

src/on_call.rs

Lines changed: 17 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
use curl::easy::*;
2-
use serde_json;
1+
use reqwest::{self, header, StatusCode as Status};
32
use std::env;
4-
use std::io::prelude::*;
53

64
use util::*;
75

@@ -31,47 +29,27 @@ impl Event {
3129
let api_token = env::var("PAGERDUTY_API_TOKEN")?;
3230
let service_key = env::var("PAGERDUTY_INTEGRATION_KEY")?;
3331

34-
let mut headers = List::new();
35-
headers.append("Accept: application/vnd.pagerduty+json;version=2")?;
36-
headers.append(&format!("Authorization: Token token={}", api_token))?;
37-
headers.append("Content-Type: application/json")?;
32+
let mut response = reqwest::Client::new()
33+
.post("https://events.pagerduty.com/generic/2010-04-15/create_event.json")
34+
.header(header::ACCEPT, "application/vnd.pagerduty+json;version=2")
35+
.header(header::AUTHORIZATION, format!("Token token={}", api_token))
36+
.json(&FullEvent {
37+
service_key,
38+
event: self,
39+
})
40+
.send()?;
3841

39-
let mut handle = Easy::new();
40-
handle.url("https://events.pagerduty.com/generic/2010-04-15/create_event.json")?;
41-
handle.post(true)?;
42-
handle.http_headers(headers)?;
43-
44-
let full_event = FullEvent {
45-
service_key,
46-
event: self,
47-
};
48-
let json_body = serde_json::to_string(&full_event)?;
49-
let mut bytes_to_write = json_body.as_bytes();
50-
let mut data = Vec::new();
51-
52-
{
53-
let mut handle = handle.transfer();
54-
handle
55-
.read_function(|bytes| bytes_to_write.read(bytes).map_err(|_| ReadError::Abort))?;
56-
handle.write_function(|buf| {
57-
data.extend_from_slice(buf);
58-
Ok(buf.len())
59-
})?;
60-
handle.perform()?;
61-
}
62-
63-
match handle.response_code()? {
64-
200 => Ok(()),
65-
400 => {
66-
let error = serde_json::from_slice::<InvalidEvent>(&data)?;
42+
match response.status() {
43+
s if s.is_success() => Ok(()),
44+
Status::BAD_REQUEST => {
45+
let error = response.json::<InvalidEvent>()?;
6746
Err(internal(&format_args!("pagerduty error: {:?}", error)))
6847
}
69-
403 => Err(internal("rate limited by pagerduty")),
48+
Status::FORBIDDEN => Err(internal("rate limited by pagerduty")),
7049
n => {
71-
let resp = String::from_utf8_lossy(&data);
7250
Err(internal(&format_args!(
73-
"Got a non 200 response code from pagerduty: {} with {}",
74-
n, resp
51+
"Got a non 200 response code from pagerduty: {} with {:?}",
52+
n, response
7553
)))
7654
}
7755
}

0 commit comments

Comments
 (0)