Kafayı yiyecektim! Şaka gibi ama dün evde tropik bir tatil yaşadım. Sebep? Yazdığım o "zeki" otomasyon botu.
Her Şey Çok Güzel Başlamıştı
Dışarıdaki havayı çeken bir weather API'si, aldığı sıcaklık verisine göre evdeki akıllı klimayı açıp kapatan bir Python botu... Harika fikir, değil mi? Her şey mükemmel çalışıyordu. Kod da temizdi bence.
"503 Service Unavailable" ve Cehennem Başlangıcı
Meğerse sorun şuradaymış: try-except bloğunu sadece temel bağlantı hataları için yazmışım. API'den gelen yanıtı parse ederken, API'nin down olup "503" döndüğü durumu hiç düşünmemişim. Bot, hata alınca son successful request'teki sıcaklık değerini (mesela 31 derece) kullanmaya devam etti!
Dışarıda serin bir 22 derece varken, benim bot evi 31 derece zannedip klimayı SÜREKLİ AÇIK tuttu. Eve geldiğimde karşılaştığım manzara: Ter içinde kalmış bir kedi ve sauna ortamı.
Dersimi Aldım, Çözüm Basitti
StackOverflow'da bile böyle saçma bir senaryo aramamıştım. Çözüm aslında çok basitmiş. Artık botum şöyle çalışıyor:
1. API'den sağlıklı veri gelmezse, hemen dur.
2. Kullanıcıya (bana) acil bir push notification at.
3. Klimayı varsayılan "güvenli moda" (kapalı) al.
Kod yazarken sadece "mutlu yolu" değil, her şeyin ters gidebileceği "üzgün yolu" da düşünmek lazımmış. Özellikle fiziksel dünyayı kontrol eden yazılımlarda...
Siz de benzer bir "fazla otomasyon" faciası yaşadınız mı? Bu tür sistemler için önerdiğiniz bir fail-safe veya circuit breaker pattern'i var mı?
Dışarıdaki havayı çeken bir weather API'si, aldığı sıcaklık verisine göre evdeki akıllı klimayı açıp kapatan bir Python botu... Harika fikir, değil mi? Her şey mükemmel çalışıyordu. Kod da temizdi bence.
Python:
if outside_temp > 28:
ac.open()
else:
ac.close()
Meğerse sorun şuradaymış: try-except bloğunu sadece temel bağlantı hataları için yazmışım. API'den gelen yanıtı parse ederken, API'nin down olup "503" döndüğü durumu hiç düşünmemişim. Bot, hata alınca son successful request'teki sıcaklık değerini (mesela 31 derece) kullanmaya devam etti!
Dışarıda serin bir 22 derece varken, benim bot evi 31 derece zannedip klimayı SÜREKLİ AÇIK tuttu. Eve geldiğimde karşılaştığım manzara: Ter içinde kalmış bir kedi ve sauna ortamı.
StackOverflow'da bile böyle saçma bir senaryo aramamıştım. Çözüm aslında çok basitmiş. Artık botum şöyle çalışıyor:
1. API'den sağlıklı veri gelmezse, hemen dur.
2. Kullanıcıya (bana) acil bir push notification at.
3. Klimayı varsayılan "güvenli moda" (kapalı) al.
Python:
except requests.exceptions.RequestException as e:
send_alert(f"API ÇÖKTÜ! Klima kapatıldı. Hata: {e}")
ac.safe_shutdown() # Her durumda kapat
Kod yazarken sadece "mutlu yolu" değil, her şeyin ters gidebileceği "üzgün yolu" da düşünmek lazımmış. Özellikle fiziksel dünyayı kontrol eden yazılımlarda...
Siz de benzer bir "fazla otomasyon" faciası yaşadınız mı? Bu tür sistemler için önerdiğiniz bir fail-safe veya circuit breaker pattern'i var mı?