Çalışma akışı
Programlar
Bir makinede sürekli çalışan, dinleyen ve aksiyon alan kod; orbi.manifest dosyası, sürümleri, onayı, durdurma ve silme.
Program, bir makinede sürekli çalışan, dinleyen ve aksiyon alan koddur: bir klasöre dosya gelince haber veren, bir sitenin ayakta olup olmadığına bakan ya da bir kayıt dosyasını izleyen küçük bir iş. Kodunu ajan yazar, siz yayınlarsınız. Program yalnız sizin cihazınızda çalışır: Orbi Node'un sandbox modu açık bilgisayarınızda ya da Orbi'ye bağladığınız kendi sunucunuzda. İnternetteki bir şeyi düzenli izlemek için zamanlanmış bir akış kurun.
Program nerede durur
Program bir alana aittir ve o alanı okuyabilen herkes programın sayfasını görür. Programın kodu Dosyalar'da durmaz: her sürüm kendi kodunu kendisi saklar. Böylece kimse, ne bir kişi ne başka bir ajan, çalışan programın kodunu yayından geçmeden değiştiremez. Kodu programın sayfasında Gelişmiş bölümündeki Kod başlığından okursunuz. Kod, programın neye ihtiyaç duyduğunu yazan orbi.manifest dosyasıyla birlikte gelir: hangi makinede çalışacağı, hangi klasörleri okuyup yazacağı, hangi internet adreslerine gideceği, hangi Orbi bağlantılarını kullanacağı ve ne kadar bellek alacağı. Program yalnız manifestinde yazanı alır.
Program tek bir cihazda çalışır, bu yüzden cihazının altında görünür: Cihazlar ekranında cihazı seçip Programlar sekmesini açın.
Program iki yoldan doğar: ajana ne istediğinizi anlatırsınız ya da hazır programlardan birini seçersiniz. Kodu değiştirmek için de ajana ne istediğinizi söylersiniz; yeni sürüm onayınızla yayınlanır.
Ajanla program yazmak
Ajana sohbette ne istediğinizi anlatın; programın çalışacağı cihazı da söyleyin. Ajan o cihazdaki bilgisayarında programı bir klasöre yazar ve gerçek veriyle bir süre çalıştırır. Bu denemede program olay göndermez, gönderecek olduklarını not eder. Makineyi okuyan işler (konteyner durumu, günlük, işlemci ve bellek) gerçekten çalışır; böylece ajan cihazdaki gerçek konteyner adlarını görür. Konteyneri yeniden başlatmak gibi değiştiren işler denemede yapılmaz, yalnız kaydedilir. Ardından sohbette bir onay kartı çıkar: programın istediği izinler ve denemede ne olduğu açık görünür, kod tek tıkla açılır. Kart her makine işi için Orbi'nin kendi kaydını gösterir: denemede makineden gerçekten okundu, denemede yapılmadı, yalnız kaydedildi ya da hiç denenmedi. Ajanın yazdığı çıktı Ajanın notu başlığıyla ayrı durur; onu Orbi doğrulamaz. Cihaz paylaşılan bir cihazsa ve ajan cihazın sahibi adına çalışmıyorsa denemede makine okunmaz, kart bunu da söyler. Program yayınlanınca her haberi için size bildirim gönderen küçük bir akış da kurulur; hazır programlarda olduğu gibi. Kartı onaylarsanız program yayınlanır. Cihazın sahibi siz değilseniz yayın onu bekler; ona bildirim gider ve onayı program sayfasında verir.
Hazır programlar
Basit bir iş için ajana gerek yok. Makinenin altındaki Programlar sekmesinde dört hazır program
vardır: klasör değişince, dosyaya satır eklenince, site düşünce ve işlemci, bellek ya da disk
dolunca haber veren programlar. Formda klasörü, dosyayı ya da adresi, eşiği ve ne sıklıkla
bakılacağını seçersiniz; kodu Orbi yazar. Satır programında aranan desen düzenli ifadedir, örneğin
ERROR|FATAL. İşlemci, bellek ve disk programı ölçümün eşiğin üstünde ne kadar kalınca haber
vereceğini de sorar ve en sık iki dakikada bir bakar. Makine sizinse program hemen yayınlanır ve başlar; değilse yayın makinenin
sahibinin onayını bekler. Form her olay için küçük bir akış da kurar: olay gelince akış ne olduğunu
tek cümleyle yazar ve bu cümle size bildirim olarak gelir. Akışı Akışlar ekranında değiştirebilir
ya da silebilirsiniz; her olay küçük bir ajan koşusu harcar.
Manifest
orbi.manifest bir JSON dosyasıdır. Örnek:
{
"version": 1,
"shape": "program",
"name": "Rapor sayacı",
"host": "@device.ibrahim.mac",
"folders": [{ "label": "Raporlar", "access": "read" }],
"run": { "cmd": ["python3", "main.py"] },
"events": [{ "name": "count_changed", "schema": { "type": "object", "properties": { "count": { "type": "integer" } } } }],
"tools": [{ "name": "list_reports", "description": "Raporlar klasöründeki dosyaları listeler", "cmd": ["python3", "tool_list.py"] }],
"network": { "allow": ["example.com"] },
"limits": { "memoryMb": 256 }
}host: programın cihazı,@device.<kişi>.<cihaz>.folders: takılacak klasörlerin cihazdaki etiketi vereadya daread_write.run: sürekli çalışan komut. Yalnız araç sunan program bunu yazmaz.events: gönderebileceği olaylar;schemaverilirse veri ona uymalıdır.tools: ajana sunduğu araçlar; komut girdiyi JSON olarak okur, cevabı yazar.network.allow: gidebileceği internet adresleri.hostActions: programın makinede alabileceği eylemler; her biri eylem, hedef ve saatlik sınır (maxPerHour) yazar. Örneğin{ "action": "service_restart", "target": "compose:prod/api", "maxPerHour": 3 }. Program eylemiorbi host_actionile ister. Bugünmachine_metrics,docker_status,docker_logs,local_portveservice_restartvardır (Orbi Node 0.6.0). Orbi Node 0.7.0 ilecompose_scalegelir: program bir Compose servisinin kopya sayısını değiştirebilir, ama yalnız manifestte yazan aralıkta, örneğin{ "action": "compose_scale", "target": "compose:prod/api", "maxPerHour": 4, "replicas": { "min": 2, "max": 6 } }. Aralığın dışındaki istek reddedilir; aralığı genişletmek yeniden onay ister. Yeni servis kurmak programa açık değildir. Sınıra gelen program durur ve size kart açılır.limits: bellek (MB) ve işlemci.
Yazım hatası olan manifest yayınlanmaz; hata mesajı hangi alanın yanlış olduğunu söyler.
Sürüm
Programın her yayını bir sürümdür: kodu ve manifesti birlikte saklar. Yeni sürümü ajan yazar ve onaya sunar; çalışan, son onaylı sürümdür. Sürümler sayfada sırayla durur ve Buna dön ile önceki bir sürüme dönebilirsiniz.
Durdurmak ve silmek
Programın sayfasındaki Durdur programı cihazında durdurur; Başlat diyene kadar kapalı kalır. Programı tamamen kaldırmak için sayfanın ⋯ menüsünden Programı sil'i seçin. Program cihazında durur, Orbi yetkileri kapanır ve yalnız onu dinleyen haber akışları da silinir. Kodu ve sürüm geçmişi 30 gün saklanır, sonra tamamen silinir. Programı silebilenler, yayınlayabilenlerle aynıdır: programın sahibi, cihazın sahibi ve çalışma alanı yöneticileri.
Onay
Yayın, çalışan yayından daha fazla izin istiyorsa onay bekler: yeni bir klasör, klasöre yazma, yeni bir internet adresi, daha fazla bellek ya da başka bir makine. İlk yayın da onay ister. Onayı programın cihazının sahibi verir.
Onaylayana bildirim gider; onay ve izin farkı programın sayfasındadır. Onay verilene kadar önceki yayın çalışır, ilk yayında program başlamaz. İzin istemeyen ya da izin bırakan yayın onay beklemeden geçer.
Çalışma
Onaylanan yayın programın makinesinde çalışmaya başlar. Programın sayfasında durumu, son çıktısını ve
Durdur ile Başlat düğmelerini görürsünüz. Program yalıtılmış bir bilgisayarda koşar: kodu salt
okunur durur, manifestte yazan klasörler /mnt/<klasör adı> altında takılıdır ve küçük bir çalışma alanı
vardır. Program yalnız manifestinin network.allow listesindeki internet adreslerine ve Orbi'ye gider;
Orbi bağlantılarını (MCP sunucuları, konektörler) kullanması sıradaki sürümle gelir.
Program kapanırsa kendiliğinden yeniden başlar. Üst üste üç kez kapanırsa durur ve size bir kart açılır: hangi makinede durduğu, son çıktısı ve program sayfasının bağlantısıyla. Kart program sayfasındaki Çöküş kartı satırında seçtiğiniz panoya, seçmediyseniz programın alanının ilk panosuna düşer. Kart açıkken program yeniden çökerse yeni kart açılmaz, aynı karta yorum yazılır. Çıktıya bakıp düzeltin, yeni sürümü yayınlayın ya da önceki yayına dönün; kartı bir ajana da verebilirsiniz.
Program, cihaz bağlı değilken bekler ve cihaz geri gelince kendiliğinden kalkar. Cihazın ajan bilgisayarları doluysa program, birkaç dakikadır kimsenin yazmadığı bir sohbetin yerini alır ve hemen başlar; böyle bir sohbet yoksa yer açılınca kendiliğinden başlar. O sohbet bir sonraki mesajda kaldığı yerden sürer.
Olaylar
Program bir şey gördüğünde Orbi'ye olay gönderir: orbi emit_event komutu olayın adını ve verisini
alır. Olay manifestin events listesinde adıyla yazılı olmalıdır; orada bir schema (JSON Schema)
varsa veri ona uymalıdır. Bir program dakikada en fazla 30, günde en fazla 500 olay gönderir.
Olayı akışlar dinler. Ajandan "bu programın şu olayı gelince ..." diye bir akış istersiniz; ajan akışın tetiğini programa ve olayın adına bağlar. Olay her geldiğinde akış bir kez koşar ve olayın verisini görür.
Araçlar
Manifestin tools listesindeki her araç, program çalışırken ajanlara <program>__<araç> adıyla
görünür. Örneğin "Rapor sayacı" programının list_reports aracı rapor_sayaci__list_reports
olur. Ajan aracı çağırınca araç programın bilgisayarında koşar: girdi JSON olarak komutun girişine
gelir, komutun yazdığı çıktı ajana döner. Ajan yalnız okuyabildiğiniz alanlardaki programların
araçlarını görür; program durunca araçları da kaybolur.