Ana içeriğe atla

Zamanlanmis Gorev (Cron Job)

Zamanlanmis Gorevler, duzenliaraliklar da JavaScript kodu calistiran otomasyon betikleridir. Organizasyonlarin veri senkronizasyonu, hesaplamalar, bildirimler ve dis sistemlerle entegrasyonlari otomatiklestirmesini saglar.

Bir Bakista

  • JavaScript kodu guvenli sandbox ortaminda calisir
  • Yapilandirabilir zamanlamalar: 5dk, 10dk, 15dk, 30dk, 1s, 2s, 4s, 6s, 12s, gunluk, haftalik
  • Organizasyon verilerine, veritabani islemlerine, HTTP istemcisine ve e-postaya erisim
  • Ortam degiskenleri ve sifrelenmis gizli deger destegi
  • Maksimum 5 dakika calisma suresi
  • Test icin manuel tetikleme secenegi

Veri Yapisi

// apps/azalt/src/server/db/types/cron-job.ts (basitlestirilmis)
interface CronJob {
  id: string;
  name: string;
  description: string | null;
  code: string;                    // Calistirilacak JavaScript kodu
  schedule: CronJobSchedule;       // Calisma sikligi
  isActive: boolean;               // Calismayi etkinlestir/devre disi birak
  organizationId: string;
  createdById: string;
  lastExecutionAt: Date | null;    // Son calisma zamani
  nextExecutionAt: Date | null;    // Sonraki planlanmis calisma
  metadata: JsonValue | null;      // Ozel meta veriler
}

type CronJobSchedule =
  | "5m"   // Her 5 dakikada
  | "10m"  // Her 10 dakikada
  | "15m"  // Her 15 dakikada
  | "30m"  // Her 30 dakikada
  | "1h"   // Her saat
  | "2h"   // Her 2 saatte
  | "4h"   // Her 4 saatte
  | "6h"   // Her 6 saatte
  | "12h"  // Her 12 saatte
  | "1d"   // Gunluk
  | "1w";  // Haftalik

Sandbox Ortami

JavaScript kodunuz bu API’lere erisimi olan izole bir sandbox’ta calisir:
APIAciklama
organizationMevcut organizasyon verileri ve lokasyonlar
dbVeritabani islemleri (RLS ile organizasyona kapsamli)
fetchHarici API cagrilari icin HTTP istemcisi
emailBildirim e-postalari gonderme
envOrtam degiskenleri (“variable” tipli CronJobVariable’lar)
secretsSifrelenmis gizli degerler (“secret” tipli CronJobVariable’lar)
consoleGunlukleme (calisma gunluklerinde yakalanir)

Ornek Kod

// Harici API'den veri senkronizasyonu
const response = await fetch('https://api.example.com/data', {
  headers: { 'Authorization': `Bearer ${secrets.API_KEY}` }
});

const data = await response.json();
console.log(`${data.items.length} oge cekildi`);

// Verileri isle ve kaydet
for (const item of data.items) {
  await db.insertInto('CustomTable')
    .values({ externalId: item.id, value: item.value })
    .execute();
}

// Bildirim gonder
await email.send({
  to: env.ADMIN_EMAIL,
  subject: 'Veri Senkronizasyonu Tamamlandi',
  body: `${data.items.length} oge basariyla senkronize edildi.`
});

return { synced: data.items.length };

Guvenlik ve Izinler

  • Olusturma/Guncelleme/Silme: Sahip rolu gerekli
  • Goruntuleme/Calistirma: Herhangi bir organizasyon uyesi
  • Sandbox: Kod, dosya sistemi erisimi olmadan izole VM’de calisir
  • RLS: Veritabani sorgulari satir duzeyi guvenlik politikalarina uyar
  • Gizli Degerler: Organizasyonun sifreleme anahtari kullanilarak duragan halde sifrelenir
  • Zaman Asimi: 5 dakika sonra otomatik sonlandirma

Calisma Akisi

  1. Zamanlayici nextExecutionAt <= simdi ve isActive = true olan gorevleri bulur
  2. Gorev kodu guvenli sandbox’ta calistirilir
  3. Calisma sonucu (basari/basarisizlik, gunlukler, cikti) kaydedilir
  4. nextExecutionAt zamanlamaya gore hesaplanir
  5. lastExecutionAt guncellenir

API Notlari

  • cronJob.list: Calisma istatistikleri ve degisken sayilariyla gorevleri dondurur
  • cronJob.get: Kod ve son calismalar dahil tam gorev detaylarini dondurur
  • cronJob.create: Yeni gorev olusturur (guvenlik icin pasif baslar)
  • cronJob.execute: Calismayi manuel tetikler (test icin kullanisli)
  • cronJob.toggle: Zamanlanmis calismayi etkinlestir/devre disi birak

Ilgili Kavramlar

  • CronJobVariable - Gorevler icin ortam degiskenleri ve gizli degerler
  • CronJobExecution - Calisma gecmisi ve gunlukler