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:
@@ -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}%)",
|
||||
|
||||
Reference in New Issue
Block a user