Automazione ricorrente attivata mensilmente non eseguita come previsto

Ok, allora oggi Moin e io stavamo parlando di questo caso, e lei ha sollevato la possibilità che ci fosse un bug nell’uso della ricorrenza mensile, dato che la lunghezza dei mesi varia? Ovviamente aveva ragione, in un certo senso… :stuck_out_tongue:

Comunque, ho fatto un po’ di ricerche :detective:

Non sono riuscito a trovare lo script di automazione per schedule pm with data-explorer results nella cartella core plugins/automation/lib/discourse_automation/scripts, quindi deve essere nascosto da qualche altra parte.

Tuttavia, ho esaminato la logica qui per le ricorrenze (presumibilmente quello script la utilizza) in plugins/automation/lib/discourse_automation/triggers/recurring.rb:

Penso che il codice sottostante per le automazioni mensili ricorrenti stia calcolando il N-esimo giorno della settimana invece della data effettiva del calendario, e che ci sia una discrepanza logica con Calendar day: inserendo BYDAY=#{count}#{byday} nell’RRule, l’automazione forza un allineamento al giorno della settimana, mentre dovrebbe usare BYMONTHDAY invece di BYDAY.

Quindi, se imposti un’automazione per iniziare il 15 aprile (che è il mercoledì 3° di aprile), il sistema interpreta la regola come: esegui il 3° mercoledì di ogni mese.

Quando arriva maggio, il 3° mercoledì è il 20 maggio, il che fa slittare la programmazione di 5 giorni.

Inoltre, se imposti un’automazione il 30 o il 31 di un mese (ad esempio, il “5° martedì”), il sistema cercherà il 5° martedì nel mese successivo. Se quel mese ha solo 4 martedì, l’automazione non troverà una data valida e salterà silenziosamente l’intero mese.

Ho una correzione testata e sto creando una PR se il team vuole dare un’occhiata. Cambia la logica dal N-esimo giorno della settimana alla data esatta del calendario.


Ecco alcuni screenshot dai miei test e debug:

2 istanze, una senza correzione e l’altra con la mia correzione logica

Crea la stessa automazione in entrambe (la versione corretta è a destra):

Guarda le differenze nei banner che dicono “La prossima automazione si attiverà alle:” con uno slittamento di 5 giorni: la versione non corretta slitta al mercoledì 3° (20 maggio), invece del 15 maggio.

Ad esempio, i mesi potrebbero essere completamente saltati se il sistema cercasse il 4° giovedì invece di una data effettiva.

Puoi testare lo stesso risultato anche nella console di Rails

Non corretto:

Con correzione:

PR qui:

2 Mi Piace