|
1 |
| -use curl::easy::*; |
2 |
| -use serde_json; |
| 1 | +use reqwest::{self, header, StatusCode as Status}; |
3 | 2 | use std::env;
|
4 |
| -use std::io::prelude::*; |
5 | 3 |
|
6 | 4 | use util::*;
|
7 | 5 |
|
@@ -31,47 +29,27 @@ impl Event {
|
31 | 29 | let api_token = env::var("PAGERDUTY_API_TOKEN")?;
|
32 | 30 | let service_key = env::var("PAGERDUTY_INTEGRATION_KEY")?;
|
33 | 31 |
|
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()?; |
38 | 41 |
|
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>()?; |
67 | 46 | Err(internal(&format_args!("pagerduty error: {:?}", error)))
|
68 | 47 | }
|
69 |
| - 403 => Err(internal("rate limited by pagerduty")), |
| 48 | + Status::FORBIDDEN => Err(internal("rate limited by pagerduty")), |
70 | 49 | n => {
|
71 |
| - let resp = String::from_utf8_lossy(&data); |
72 | 50 | 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 |
75 | 53 | )))
|
76 | 54 | }
|
77 | 55 | }
|
|
0 commit comments