Joonas Lahtinen
Takaisin blogiin
Tuotantovalmius

Virheenkäsittely erottaa prototyypin tuotantokoodista

Skripti toimii. Sitten API vastaa 429, verkko katkee puolessa välissä ja joku ilmoittaa, että automaatio rikkoi tuotannon.

Tämä on se hetki, jolloin prototyyppi eroaa tuotantokoodista.

Yksinkertainen jako: prototyyppi käsittelee happy pathin. Tuotantokoodi käsittelee kaiken muun.

Kolme asiaa, jotka puuttuvat lähes joka kerta

Retry-logiikka

Jos ulkoinen API ei vastaa tai palauttaa 429, skripti kaatuu. Sen sijaan pitäisi yrittää uudelleen, odottaa hetki, yrittää uudelleen, ja vasta sitten ilmoittaa virheestä.

Yksinkertainen esimerkki PowerShellissa:

$attempts = 0
do {
    try {
        $result = Invoke-RestMethod -Uri $url -Headers $headers
        break
    } catch {
        $attempts++
        Write-Warning "Yritys $attempts epäonnistui: $($_.Exception.Message)"
        Start-Sleep -Seconds (2 * $attempts)
    }
} while ($attempts -lt 3)

if ($attempts -ge 3) {
    Send-MailMessage -To "admin@yritys.fi" -Subject "Automaatio epäonnistui" ...
}

Exponential backoff, eli kasvava odotusaika uusintojen välillä, on standardi. Se antaa palvelulle aikaa toipua.

Osittaisten ajojen käsittely

Jos skripti prosessoi 500 käyttäjää ja kaatuu numero 312:ssa, mitä tapahtuu? Ajetaanko kaikki uudelleen alusta? Käsitelläänkö osa käyttäjistä kahdesti?

Tähän tarvitaan joko checkpoint, jossa tallennetaan mihin asti on päästy ja jatketaan siitä, tai idempotenssi: varmistetaan, että sama operaatio voidaan ajaa uudelleen ilman sivuvaikutuksia. Idempotenssia käsitellään tarkemmin erillisessä artikkelissa.

Hälytykset oikeille ihmisille

Try-catch, joka kirjoittaa virheen lokiin kansioon, johon kukaan ei katso, ei ole virheenkäsittelyä. Se on itsepetos.

Virheistä pitää ilmoittaa jollekin. Sähköposti, Teams-viesti, kirjaus seurantatyökaluun. Lokin pitää sisältää riittävästi tietoa, jotta vian voi selvittää ilman arvausta.

Miksi tämä unohtuu

Koska prototyyppi toimii. Kun testivaiheessa kaikki menee hyvin, virheenkäsittely tuntuu tarpeettomalta.

Mutta automaatio, joka hajoaa hiljaa, on pahempi kuin automaatio, joka ei toimi ollenkaan. Ainakin silloin tiedetään, että pitää tehdä jotain.

Tuotantovalmis automaatio ilmoittaa selkeästi kun jokin menee pieleen, eikä jätä virhettä hiljaisesti lokiin.

Haluatko arvioida automaatioidenne tuotantovalmiutta? Otetaan yhteyttä.