fix: run cert expiry check concurrently to avoid delaying results
This commit is contained in:
parent
42024a9fc3
commit
5be1f85365
|
|
@ -195,8 +195,11 @@ async fn run_check(client: &reqwest::Client, monitor: &Monitor, scheduled_at: Op
|
||||||
Ok((status_code, headers, body)) => {
|
Ok((status_code, headers, body)) => {
|
||||||
let status = status_code;
|
let status = status_code;
|
||||||
|
|
||||||
// Only attempt cert check after a successful response
|
// Start cert expiry check in background — don't block result posting.
|
||||||
let cert_expiry_days = if is_https {
|
// We'll use None for cert_expiry_days in query evaluation since it
|
||||||
|
// shouldn't delay the main result by seconds of extra TLS handshake.
|
||||||
|
let cert_handle = if is_https {
|
||||||
|
Some(tokio::spawn(async move {
|
||||||
match tokio::time::timeout(
|
match tokio::time::timeout(
|
||||||
std::time::Duration::from_secs(5),
|
std::time::Duration::from_secs(5),
|
||||||
check_cert_expiry(&url_for_cert),
|
check_cert_expiry(&url_for_cert),
|
||||||
|
|
@ -204,20 +207,23 @@ async fn run_check(client: &reqwest::Client, monitor: &Monitor, scheduled_at: Op
|
||||||
Ok(Ok(days)) => days,
|
Ok(Ok(days)) => days,
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
|
}))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
let query = &monitor.query;
|
let query = &monitor.query;
|
||||||
|
|
||||||
// Evaluate query if present
|
// Evaluate query if present (cert_expiry_days not yet available —
|
||||||
|
// $certExpiry queries will use None here; the actual value is
|
||||||
|
// attached to the result once the background check completes)
|
||||||
let (up, query_error) = if let Some(q) = query {
|
let (up, query_error) = if let Some(q) = query {
|
||||||
let response = Response {
|
let response = Response {
|
||||||
status,
|
status,
|
||||||
body: body.clone(),
|
body: body.clone(),
|
||||||
headers: headers.clone(),
|
headers: headers.clone(),
|
||||||
latency_ms: Some(latency_ms),
|
latency_ms: Some(latency_ms),
|
||||||
cert_expiry_days,
|
cert_expiry_days: None,
|
||||||
};
|
};
|
||||||
match query::evaluate(q, &response) {
|
match query::evaluate(q, &response) {
|
||||||
Ok(result) => (result, None),
|
Ok(result) => (result, None),
|
||||||
|
|
@ -232,6 +238,12 @@ async fn run_check(client: &reqwest::Client, monitor: &Monitor, scheduled_at: Op
|
||||||
(status < 400, None)
|
(status < 400, None)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Await the cert check now (it's been running concurrently during query eval)
|
||||||
|
let cert_expiry_days = match cert_handle {
|
||||||
|
Some(h) => h.await.unwrap_or(None),
|
||||||
|
None => None,
|
||||||
|
};
|
||||||
|
|
||||||
let meta = json!({
|
let meta = json!({
|
||||||
"headers": headers,
|
"headers": headers,
|
||||||
"body_preview": &body[..body.len().min(500)],
|
"body_preview": &body[..body.len().min(500)],
|
||||||
|
|
|
||||||
22
deploy.sh
22
deploy.sh
|
|
@ -1,8 +1,9 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# PingQL Deploy Script
|
# PingQL Deploy Script
|
||||||
# Usage: ./deploy.sh [web|api|monitor|db|all] [...]
|
# Usage: ./deploy.sh [web|api|monitor|db|nuke-db|all] [...]
|
||||||
# Example: ./deploy.sh web api
|
# Example: ./deploy.sh web api
|
||||||
# Example: ./deploy.sh all
|
# Example: ./deploy.sh all
|
||||||
|
# Example: ./deploy.sh nuke-db (wipes all data — NOT included in "all")
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
|
@ -18,6 +19,22 @@ deploy_db() {
|
||||||
$SSH $DB_HOST "systemctl restart postgresql && echo 'PostgreSQL restarted'"
|
$SSH $DB_HOST "systemctl restart postgresql && echo 'PostgreSQL restarted'"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nuke_db() {
|
||||||
|
echo "⚠️ This will drop all tables in the pingql database, deleting ALL data."
|
||||||
|
echo " Tables will be recreated on next API/web restart via migrate()."
|
||||||
|
read -p "Type 'yes' to confirm: " confirm
|
||||||
|
if [ "$confirm" != "yes" ]; then
|
||||||
|
echo "Aborted."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
echo "[nuke-db] Dropping all tables on database-eu-central..."
|
||||||
|
$SSH $DB_HOST bash << 'REMOTE'
|
||||||
|
sudo -u postgres psql -d pingql -c "DROP TABLE IF EXISTS pings, api_keys, monitors, accounts CASCADE;"
|
||||||
|
echo "All tables dropped"
|
||||||
|
REMOTE
|
||||||
|
echo "[nuke-db] Done. Tables will be recreated on next API/web restart."
|
||||||
|
}
|
||||||
|
|
||||||
deploy_api() {
|
deploy_api() {
|
||||||
echo "[api] Deploying to api-eu-central..."
|
echo "[api] Deploying to api-eu-central..."
|
||||||
$SSH $API_HOST bash << 'REMOTE'
|
$SSH $API_HOST bash << 'REMOTE'
|
||||||
|
|
@ -76,8 +93,9 @@ for arg in "$@"; do
|
||||||
api) deploy_api ;;
|
api) deploy_api ;;
|
||||||
web) deploy_web ;;
|
web) deploy_web ;;
|
||||||
monitor) deploy_monitor ;;
|
monitor) deploy_monitor ;;
|
||||||
|
nuke-db) nuke_db ;;
|
||||||
all) deploy_db; deploy_api; deploy_web; deploy_monitor ;;
|
all) deploy_db; deploy_api; deploy_web; deploy_monitor ;;
|
||||||
*) echo "Unknown target: $arg (valid: web, api, monitor, db, all)"; exit 1 ;;
|
*) echo "Unknown target: $arg (valid: web, api, monitor, db, nuke-db, all)"; exit 1 ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue