Otomasyon İşleri
Üç kuyruktaki işleri izleyen ve tek tek ya da toplu yöneten on uç.
Genel Bakış
Otomasyon üç kuyruk taşır: zamanlanmış görevler, modül çağrıları ve bildirimler. Her kuyrukta iş satırları bekler, işlenir, tamamlanır ya da düşer; bu on uç o satırlarla çalışır.
Pano ucu tek çağrıda her şeyi verir: işçinin sağlığı, kuyruk sayıları, görev listesi, son işler ve son yirmi dört saatin grafiği. İzleme yazarken beş ayrı çağrı yerine bunu kullanın.
Tek işe dokunan dört uç (yeniden dene, iptal et, kilidi çöz, sil) yanına kuyruk geneli üç uç gelir. Sonuncular tek çağrıyla yüzlerce işi birden hareket ettirir ve geri dönüşü yoktur.
Referans
Panoyu Okuma
Otomasyonun bütün durumunu tek çağrıda döndürür.
curl 'https://panel.ornek.com/api/v1/admin/automation/dashboard' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/automation/dashboard', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const { data } = await res.json();
if (data.status.status !== 'ok') console.warn('worker', data.status.status);$ch = curl_init('https://panel.ornek.com/api/v1/admin/automation/dashboard');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Izleme icin TEK cagri yeter; pano bes ayri ucun verisini birlikte tasir.
$d = Api::Automation()->GetAutomationDashboard()['data'];
$healthy = $d['status']['status'] === 'ok';İşleri Listeleme
Kuyruk beslemesini en yeniden eskiye doğru döndürür.
curl 'https://panel.ornek.com/api/v1/admin/automation/jobs?limit=50' \
-H "Authorization: Bearer $API_KEY"const url = new URL('https://panel.ornek.com/api/v1/admin/automation/jobs');
url.searchParams.set('limit', '50');
const res = await fetch(url, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const { data } = await res.json();
// Daha eskisi: url.searchParams.set('before_id', data.jobs.at(-1).id)$ch = curl_init('https://panel.ornek.com/api/v1/admin/automation/jobs?' . http_build_query(['limit' => 50]));
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Toplam sayi ve geri yukleme isareti YALNIZ ilk cagrida gelir; imlecli cagri onlari tasimaz.
$first = Api::Automation()->GetAutomationJobs()['data'];
$older = Api::Automation()->GetAutomationJobs([], [
'before_id' => end($first['jobs'])['id'],
]);İş Detayı
Tek bir işin bütün satırını yükü ve günlükleriyle döndürür.
cron, module, notification.curl 'https://panel.ornek.com/api/v1/admin/automation/jobs/cron/9001' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/automation/jobs/cron/${id}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/automation/jobs/cron/' . $id);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Donen alanlar KUYRUGA gore degisir; ortak olanlarin disini varsaymadan okuyun.
$job = Api::Automation()->GetAutomationJob(['queue' => 'cron', 'id' => $id])['data'];
$logs = $job['process_logs'] ?? [];İşi Yeniden Denetme
İşi yeniden bekleyenler arasına alır.
curl -X POST 'https://panel.ornek.com/api/v1/admin/automation/jobs/cron/9001/retry' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/automation/jobs/cron/${id}/retry`, {
method: 'POST',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/automation/jobs/cron/' . $id . '/retry');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Deneme sayaci SIFIRLANIR: is yeniden dusense de bastan basliyormus gibi gorunur.
Api::Automation()->RetryAutomationJob(['queue' => 'cron', 'id' => $id]);İşi İptal Etme
İşin durumunu iptal edildi yapar.
curl -X POST 'https://panel.ornek.com/api/v1/admin/automation/jobs/cron/9001/cancel' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/automation/jobs/cron/${id}/cancel`, {
method: 'POST',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/automation/jobs/cron/' . $id . '/cancel');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Iptal ZATEN KOSAN isi durdurmaz; yalniz kuyruk satirinin durumunu degistirir.
Api::Automation()->CancelAutomationJob(['queue' => 'cron', 'id' => $id]);Takılı Kilidi Çözme
Çöken bir işçinin üzerinde bıraktığı kilidi çözer.
curl -X POST 'https://panel.ornek.com/api/v1/admin/automation/jobs/cron/9001/reclaim' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/automation/jobs/cron/${id}/reclaim`, {
method: 'POST',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/automation/jobs/cron/' . $id . '/reclaim');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Isci HALA CALISIYORSA is iki kez kosar; once en uzun bekleme suresine bakin.
$d = Api::Automation()->GetAutomationDashboard()['data'];
if ($d['status']['status'] === 'dead')
Api::Automation()->ReclaimAutomationJob(['queue' => 'cron', 'id' => $id]);İşi Silme
İş satırını kuyruktan kaldırır.
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/automation/jobs/cron/9001' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/automation/jobs/cron/${id}`, {
method: 'DELETE',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/automation/jobs/cron/' . $id);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Silmek yerine IPTAL edin: kayit kalir, is de bir daha alinmaz.
Api::Automation()->CancelAutomationJob(['queue' => 'cron', 'id' => $id]);Toplu Silme
Verdiğiniz iş numaralarını tek çağrıda siler.
curl -X POST 'https://panel.ornek.com/api/v1/admin/automation/jobs/cron/bulk-delete' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"ids":[9001,9002,9003]}'const res = await fetch('https://panel.ornek.com/api/v1/admin/automation/jobs/cron/bulk-delete', {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ ids: [9001, 9002, 9003] }),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/automation/jobs/cron/bulk-delete');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['ids' => [9001, 9002, 9003]]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Donen sayi gonderdiginizden AZ olabilir: baska kuyruga ait numaralar silinmez.
$n = Api::Automation()->BulkDeleteAutomationJobs([
'queue' => 'cron', 'ids' => $ids,
])['data']['count'];Bütün Düşenleri Yeniden Denetme
Kuyruktaki bütün düşmüş işleri yeniden bekleyenlere alır.
curl -X POST 'https://panel.ornek.com/api/v1/admin/automation/jobs/cron/retry-all-failed' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/automation/jobs/cron/retry-all-failed', {
method: 'POST',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/automation/jobs/cron/retry-all-failed');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// AYNI SEBEPLE dusmus yuzlerce is ayni anda yeniden kosar ve yine duser.
// Once bir isin detayindan sebebi okuyun, sonra bu cagriyi yapin.
Api::Automation()->RetryAllFailedAutomationJobs(['queue' => 'cron']);Bütün Bekleyenleri İptal Etme
Kuyrukta bekleyen bütün işleri iptal eder.
curl -X POST 'https://panel.ornek.com/api/v1/admin/automation/jobs/cron/cancel-all-pending' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/automation/jobs/cron/cancel-all-pending', {
method: 'POST',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/automation/jobs/cron/cancel-all-pending');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Bekleyen isler FATURA, BILDIRIM ve saglayici cagrilaridir; hepsi birden duser.
Api::Automation()->CancelAllPendingAutomationJobs(['queue' => 'cron']);Tuzaklar
Bütün düşenleri yeniden denetmek ve bütün bekleyenleri iptal etmek tek çağrıda yüzlerce işi hareket ettirir; hangi işlerin etkilendiğini de söylemez. Bekleyenleri iptal etmek kesilmemiş faturaları, gönderilmemiş bildirimleri ve sağlayıcıya gitmemiş çağrıları birden düşürür. Önce beslemeden ne olduğuna bakın.
Kilit çözme ucu, işi alan işçinin öldüğünü varsayar. İşçi hâlâ çalışıyorsa iş ikinci kez alınır ve aynı fatura iki kez kesilebilir. Bu ucu kullanmadan önce panodaki işçi sağlığına bakın; canlı bir işçide takılı görünen iş çoğu zaman yalnız uzun sürüyordur.
İptal ucu kuyruk satırının durumunu değiştirir, çalışan süreci öldürmez. İşlenmekte olan bir işi iptal etmek onu yarıda kesmez; iş bittiğinde kendi sonucunu yazar. Gerçekten durdurmanız gereken bir şey varsa cron anahtarını kapatmak tek yoldur.
Bir işi yeniden denemek deneme sayacını sıfırlar. Yani üç kez düşmüş bir iş, yeniden denendikten sonra ilk kez koşuyormuş gibi görünür ve yeniden düşse de sayaç birden başlar. Sorunlu işleri sayaca bakarak ayıklayan bir denetim yazıyorsanız bu ayrımı kaçırırsınız.
Toplu silme yalnız adres yolundaki kuyrukta arar; başka bir kuyruğa ait numaralar sessizce atlanır. Dönen sayı gönderdiğinizden az çıkarsa hata yoktur, numaralar başka kuyruktadır. Karışık bir liste siliyorsanız numaraları kuyruğa göre ayırıp ayrı çağrılar yapın.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.