Refactor SQL query in Worker to improve distance calculations: Replace the existing LEFT JOIN with a LATERAL join to enhance the selection of region distances based on transport mode, ensuring more accurate results. Update polling frequency in TransportWorker from once per second to once per minute for better resource management.

This commit is contained in:
Torsten Schulz (local)
2025-12-20 22:20:29 +01:00
parent cd1b33a474
commit 833202344b
3 changed files with 30 additions and 7 deletions

View File

@@ -432,9 +432,15 @@ impl EventsWorker {
}
}
// Globaler Skalierungsfaktor für Ereignisfrequenz (1.0 = unverändert).
// Setze auf 0.05, um Ereignisse auf 1/20 der ursprünglichen Häufigkeit zu reduzieren.
const EVENT_RATE_SCALE: f64 = 0.05;
// Globaler Skalierungsfaktor für Ereignisfrequenz.
// Default: 1.0 (unverändert). Optional per ENV `EVENT_RATE_SCALE` konfigurierbar.
fn event_rate_scale() -> f64 {
std::env::var("EVENT_RATE_SCALE")
.ok()
.and_then(|v| v.parse::<f64>().ok())
.filter(|v| v.is_finite() && *v >= 0.0)
.unwrap_or(1.0)
}
fn check_and_trigger_events_inner(
pool: &ConnectionPool,
@@ -443,11 +449,12 @@ impl EventsWorker {
rng: &mut impl Rng,
events: &[RandomEvent],
) -> Result<(), DbError> {
let rate_scale = Self::event_rate_scale();
// Prüfe jedes mögliche Ereignis
for event in events {
// Zufällige Prüfung basierend auf Wahrscheinlichkeit
let roll = rng.gen_range(0.0..=1.0);
let effective_prob = event.probability_per_minute * Self::EVENT_RATE_SCALE;
let effective_prob = event.probability_per_minute * rate_scale;
if roll < effective_prob {
eprintln!(
"[EventsWorker] Ereignis '{}' wurde ausgelöst (Wahrscheinlichkeit: {:.4}% -> skaliert {:.4}%)",