..
This commit is contained in:
parent
6340f5a20f
commit
eb5c851d97
@ -59,7 +59,6 @@ assets = [
|
|||||||
["reminder-dashboard/dist/index.html", "lib/reminder-rs/static/index.html", "644"],
|
["reminder-dashboard/dist/index.html", "lib/reminder-rs/static/index.html", "644"],
|
||||||
["conf/default.env", "etc/reminder-rs/config.env", "600"],
|
["conf/default.env", "etc/reminder-rs/config.env", "600"],
|
||||||
["conf/Rocket.toml", "etc/reminder-rs/Rocket.toml", "600"],
|
["conf/Rocket.toml", "etc/reminder-rs/Rocket.toml", "600"],
|
||||||
["bin/reminder-rs-clean-old", "usr/bin/reminder-rs-clean-old", "755"],
|
|
||||||
# ["nginx/reminder-rs", "etc/nginx/sites-available/reminder-rs", "755"]
|
# ["nginx/reminder-rs", "etc/nginx/sites-available/reminder-rs", "755"]
|
||||||
]
|
]
|
||||||
conf-files = [
|
conf-files = [
|
||||||
|
65
src/main.rs
65
src/main.rs
@ -29,7 +29,6 @@ use std::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use chrono_tz::Tz;
|
use chrono_tz::Tz;
|
||||||
use clap::Subcommand;
|
|
||||||
use log::warn;
|
use log::warn;
|
||||||
use poise::serenity_prelude::{
|
use poise::serenity_prelude::{
|
||||||
model::{
|
model::{
|
||||||
@ -121,7 +120,51 @@ async fn _main(tx: Sender<()>) -> Result<(), Box<dyn StdError + Send + Sync>> {
|
|||||||
let _ = dotenv::dotenv();
|
let _ = dotenv::dotenv();
|
||||||
}
|
}
|
||||||
|
|
||||||
let discord_token = env::var("DISCORD_TOKEN").expect("Missing DISCORD_TOKEN from environment");
|
let args = env::args().collect::<Vec<_>>();
|
||||||
|
let cmd_word = args.last().map(|w| w.as_str());
|
||||||
|
|
||||||
|
let database =
|
||||||
|
Pool::connect(&env::var("DATABASE_URL").expect("No database URL provided")).await.unwrap();
|
||||||
|
|
||||||
|
match cmd_word {
|
||||||
|
Some("clean") => {
|
||||||
|
let sent_clean_age = env::var("SENT_CLEAN_AGE")?;
|
||||||
|
if sent_clean_age.is_empty() {
|
||||||
|
panic!("No SENT_CLEAN_AGE")
|
||||||
|
}
|
||||||
|
sqlx::query!(
|
||||||
|
"
|
||||||
|
DELETE FROM reminders
|
||||||
|
WHERE `utc_time` < NOW() - INTERVAL ? DAY
|
||||||
|
AND status != 'pending'
|
||||||
|
ORDER BY `utc_time`
|
||||||
|
LIMIT 1000
|
||||||
|
",
|
||||||
|
sent_clean_age
|
||||||
|
)
|
||||||
|
.execute(&database)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
let total_clean_age = env::var("TOTAL_CLEAN_AGE");
|
||||||
|
if let Ok(total_clean_age) = total_clean_age {
|
||||||
|
sqlx::query!(
|
||||||
|
"
|
||||||
|
DELETE FROM reminders
|
||||||
|
WHERE `utc_time` < NOW() - INTERVAL ? DAY
|
||||||
|
ORDER BY `utc_time`
|
||||||
|
LIMIT 1000
|
||||||
|
",
|
||||||
|
total_clean_age
|
||||||
|
)
|
||||||
|
.execute(&database)
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
let discord_token =
|
||||||
|
env::var("DISCORD_TOKEN").expect("Missing DISCORD_TOKEN from environment");
|
||||||
|
|
||||||
let options = poise::FrameworkOptions {
|
let options = poise::FrameworkOptions {
|
||||||
commands: vec![
|
commands: vec![
|
||||||
@ -175,11 +218,17 @@ async fn _main(tx: Sender<()>) -> Result<(), Box<dyn StdError + Send + Sync>> {
|
|||||||
poise::Command {
|
poise::Command {
|
||||||
subcommands: vec![
|
subcommands: vec![
|
||||||
poise::Command {
|
poise::Command {
|
||||||
subcommands: vec![todo::guild::add::add(), todo::guild::view::view()],
|
subcommands: vec![
|
||||||
|
todo::guild::add::add(),
|
||||||
|
todo::guild::view::view(),
|
||||||
|
],
|
||||||
..todo::guild::guild()
|
..todo::guild::guild()
|
||||||
},
|
},
|
||||||
poise::Command {
|
poise::Command {
|
||||||
subcommands: vec![todo::channel::add::add(), todo::channel::view::view()],
|
subcommands: vec![
|
||||||
|
todo::channel::add::add(),
|
||||||
|
todo::channel::view::view(),
|
||||||
|
],
|
||||||
..todo::channel::channel()
|
..todo::channel::channel()
|
||||||
},
|
},
|
||||||
poise::Command {
|
poise::Command {
|
||||||
@ -213,9 +262,6 @@ async fn _main(tx: Sender<()>) -> Result<(), Box<dyn StdError + Send + Sync>> {
|
|||||||
// Start metrics
|
// Start metrics
|
||||||
init_metrics();
|
init_metrics();
|
||||||
|
|
||||||
let database =
|
|
||||||
Pool::connect(&env::var("DATABASE_URL").expect("No database URL provided")).await.unwrap();
|
|
||||||
|
|
||||||
sqlx::migrate!().run(&database).await?;
|
sqlx::migrate!().run(&database).await?;
|
||||||
|
|
||||||
let popular_timezones = sqlx::query!(
|
let popular_timezones = sqlx::query!(
|
||||||
@ -238,7 +284,8 @@ async fn _main(tx: Sender<()>) -> Result<(), Box<dyn StdError + Send + Sync>> {
|
|||||||
let framework = poise::Framework::builder()
|
let framework = poise::Framework::builder()
|
||||||
.setup(move |ctx, _bot, framework| {
|
.setup(move |ctx, _bot, framework| {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
poise::builtins::register_globally(ctx, &framework.options().commands).await?;
|
poise::builtins::register_globally(ctx, &framework.options().commands)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let kill_tx = tx.clone();
|
let kill_tx = tx.clone();
|
||||||
let kill_recv = tx.subscribe();
|
let kill_recv = tx.subscribe();
|
||||||
@ -292,3 +339,5 @@ async fn _main(tx: Sender<()>) -> Result<(), Box<dyn StdError + Send + Sync>> {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
11
systemd/reminder-rs-clean-old.service
Normal file
11
systemd/reminder-rs-clean-old.service
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Clean old data from Reminder Bot
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=reminder
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/reminder-rs clean
|
||||||
|
WorkingDirectory=/etc/reminder-rs
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
9
systemd/reminder-rs-clean-old.timer
Normal file
9
systemd/reminder-rs-clean-old.timer
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Clean reminder data twice daily
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnCalendar=*-*-* 0/8
|
||||||
|
Unit=reminder-rs-clean-old.service
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
Loading…
Reference in New Issue
Block a user