Context#
Müze enstalasyonları ve oyunlar tuhaf bir sorunu paylaşır: saatlerce, bazen günlerce gözetimsiz çalışırlar. Bir Unity uygulaması, kimse başında olmadan, bütün bir sergi günü boyunca bir touchwall'ı çalıştırır. Çökerse, donarsa ya da sessizce bozulursa, bir ziyaretçi ölü bir ekranın karşısına gelene kadar kimse fark etmez.
GoodBoi Agent bu soruna bir yanıt olarak başladı. Hedef bir uygulamayı ayakta tutan, üzerinde çalıştığı makineyi gözleyen ve ham sistem aktivitesini okunabilir raporlara dönüştüren bir izleme ve watchdog aracı.
İsim de tam olarak yaptığı şeyden geliyor — gerçek uygulamanın yanında sessizce oturuyor, onu izliyor, ve bir şey ters gittiğinde havlıyor. İyi bir watchdog.
The Problem#
Uzun süre çalışan enstalasyonlarda üç hata biçimi tekrar tekrar ortaya çıkıyor:
Uygulama çöküyor ve öyle kalıyor. Ziyaretçiye bakan bir ekran kararıyor ve biri fiziksel olarak kontrol edene kadar kararmış kalıyor.
Makine sessizce kötüleşiyor. Bellek sinsice tırmanıyor, CPU doyuma ulaşıyor, termal bir sorun GPU'yu kısıyor — uygulama teknik olarak çalışıyor ama deneyim bozulmuş durumda.
Ne olduğuna dair bir kayıt yok. Bir şey ters gittiğinde, olaya götüren sistem durumunun bir log'u olmuyor; dolayısıyla aynı sorun tekrarlanıyor.
Biri makineye dadılık edebilir, ama bu, sergiler ve enstalasyonlar genelinde ölçeklenmiyor. İzlemenin otomatik olması gerekiyor.
Approach#
GoodBoi, bilinçli bir ayrım üzerine kurulu: sahada hafif bir agent ve merkezde bir servis; her biri, işine en uygun dilde yazılmış.
The Go agent — in the field#
Agent, hedef makinede, izlediği uygulamanın hemen yanında çalışıyor. Go ile yazılmış olmasının sebebi, Go'nun tam da bu tür işlerde iyi olması: küçük, bağımlılıksız bir binary'ye derleniyor; bir enstalasyon PC'sine konup çalışır halde bırakılabiliyor. İki iş yapıyor — native OS erişimiyle sistem metriklerini topluyor, ve hedef süreci denetliyor; çökerse ya da beklenmedik şekilde kapanırsa onu yeniden başlatıyor.
Gözetimsiz bir enstalasyon için o yeniden başlatma, beş saniyelik bir toparlanma ile kapanış saatine kadar süren ölü bir ekran arasındaki fark demektir.
The Java service — at the center#
Java servisi, merkez taraf. O da metrik topluyor ve watchdog mantığı çalıştırıyor; donanım ve işletim sistemi bilgisi için OSHI kütüphanesini kullanıyor — CPU yükü, bellek, GPU aktivitesi. Ama asıl rolü toplulaştırma ve raporlama: ham örneklerin sürekli akışını üç çözünürlükte okunabilir raporlara dönüştürüyor — saatlik, günlük ve haftalık — ve bunları diskte dosyalar olarak saklıyor.
Ayrıca yerel bir REST API sunuyor; dashboard verisini de buradan alıyor.
The React dashboard#
Arayüz, React ve TypeScript ile yazılmış bir dashboard. Java servisinden yerel REST API üzerinden okuyor; canlı metrikleri ve geçmiş raporları bir insanın gerçekten göz gezdirebileceği bir biçimde sunuyor — rapor dosyalarında yaşayan verinin aynısı, bir ekrana taşınmış hali.
Tech Stack#
GoodBoi, tasarım gereği iki backend diline yayılıyor. Saha agent'ı Go ile yazılmış; sistem metriklerine ve süreç kontrolüne native erişimi olan, taşınabilir tek bir binary'ye derleniyor. Merkez servisi Java ile yazılmış; donanım ve OS metrikleri için OSHI kütüphanesini kullanıyor ve toplulaştırma, raporlama ve REST API'yi üstleniyor. Dashboard, React ve TypeScript ile kurulu; Java servisinin yerel endpoint'lerini tüketiyor. Raporlar, diskte dosyalar olarak saklanıyor.
Araç şu anda Windows üzerinde çalışıyor; izlemek için yapıldığı enstalasyonların ve makinelerin ortamıyla eşleşiyor.
Visuals#
Outcome#
GoodBoi aktif geliştirme aşamasında. Şimdiden gerçek enstalasyonların ve oyunların yanında çalışıyor; hedef uygulamaları denetliyor, metrik topluyor ve yeni ihtiyaçlar ortaya çıktıkça genişletiliyor.
Araç, ancak bir enstalasyon ziyaretçilerin önünde sessizce çöktüğünde belli olan bir boşluğu dolduruyor. Gösterişli bir yazılım değil — bir altyapı. Ama gözetimsiz ve güvenilir biçimde çalışması gereken işler için, en sık eksik olan şey tam da altyapıdır.