add apprise_notify format

This commit is contained in:
Astro 2022-12-28 01:27:49 +01:00
parent 8e1e6f5e32
commit 887adf5f2c
3 changed files with 27 additions and 2 deletions

10
src/apprise_notify.rs Normal file
View File

@ -0,0 +1,10 @@
use askama::Template;
use serde::Deserialize;
#[derive(Debug, Clone, Deserialize, Template)]
#[template(path="apprise_notify.txt", escape="none")]
pub struct Notification {
pub title: String,
pub message: String,
pub r#type: String,
}

View File

@ -11,15 +11,18 @@ use serde::Deserialize;
mod jabber;
mod prometheus_alert;
mod apprise_notify;
enum Payload {
Prometheus(prometheus_alert::Payload),
Apprise(apprise_notify::Notification),
}
impl Payload {
fn render(&self) -> Result<String, askama::Error> {
match self {
Payload::Prometheus(payload) => payload.render(),
Payload::Apprise(notification) => notification.render(),
}
}
@ -46,7 +49,7 @@ impl Payload {
}
}
async fn alerts(
async fn prometheus_alerts(
State(jabber): State<jabber::Handle>,
Json(payload): Json<prometheus_alert::Payload>,
) -> Response {
@ -55,6 +58,15 @@ async fn alerts(
.await
}
async fn apprise_notification(
State(jabber): State<jabber::Handle>,
Json(notification): Json<apprise_notify::Notification>,
) -> Response {
Payload::Apprise(notification)
.handle_payload(jabber)
.await
}
#[derive(Deserialize)]
struct Config {
listen_port: u16,
@ -78,7 +90,8 @@ async fn main() {
// build our application with a route
let app = Router::new()
.route("/alert", post(alerts))
.route("/alert", post(prometheus_alerts))
.route("/notify", post(apprise_notification))
.with_state(jabber);
let addr = SocketAddr::from(([127, 0, 0, 1], config.listen_port));

View File

@ -0,0 +1,2 @@
[{{ type|upper }}] {{ title }}
> {{ message }}