# Kuyruk Bakımı

https://dev.wisecp.com/tr/kuyruk-bakimi

Kuyrukları temizleyen, boyutlarını ölçen ve geri yükleme uyarısını yöneten beş uç.

## Genel Bakış

Kuyruklar zamanla büyür. Bu beş uç **bakımla** ilgilenir: eski işleri temizlemek, tabloların ne kadar yer tuttuğunu görmek ve veritabanı geri yüklendiğinde çıkan uyarıyı yönetmek.

Temizlik iki adımdır. Ön izleme **sayar ve hiçbir şey silmez**; çalıştırma ise saklama süresini aşmış işleri kalıcı olarak kaldırır. Ölçüt görev ayarlarındaki saklama günleridir.

Geri yükleme uyarısı, otomasyonun **uzun süre sessiz kaldığını** fark ettiğinde doğar. Bu genellikle veritabanının eski bir yedekten geri yüklendiği anlamına gelir; kuyrukta yeniden koşacak ya da çoktan geçmiş işler bulunabilir.

## Referans

### Temizliği Ön İzleme

get/api/v1/admin/automation/cleanup/preview

`Automation/PreviewAutomationCleanup` admin hiçbir şey silmez

Saklama kurallarına göre kaç işin silineceğini gösterir.

Dönen alanlar data — 4

completedintSilinecek tamamlanmış iş sayısı.

cancelledintSilinecek iptal edilmiş iş sayısı.

failedintSilinecek düşmüş iş sayısı.

retentionobjectSayımın dayandığı saklama günleri.

Hatalar 1

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/admin/automation/cleanup/preview' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/automation/cleanup/preview', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const { data } = await res.json();

const willGo = data.completed + data.cancelled + data.failed;
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/automation/cleanup/preview');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Bu uc SAYAR, silmez; temizlikten once her zaman buradan bakin.
$plan = Api::Automation()->PreviewAutomationCleanup()['data'];
if ($plan['completed'] + $plan['cancelled'] + $plan['failed'] > 0)
    Api::Automation()->RunAutomationCleanup();
```

### Temizliği Çalıştırma

post/api/v1/admin/automation/cleanup/run

`Automation/RunAutomationCleanup` admin kalıcı silme

Saklama süresini aşmış işleri kalıcı olarak siler.

Gövde —

——Gövde gerekmez, boş gönderin. Saklama süresi istekten değil otomasyon ayarlarından gelir; temizliğin kapsamını genişletecek ya da daraltacak bir alan yok.

Dönen alanlar data — 2

deletedintSilinen toplam iş sayısı.

breakdownobjectDuruma göre döküm: tamamlanan, iptal edilen ve düşen.

Hatalar 2

blocked_by_gate422Bir kanca temizliği reddetti.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/admin/automation/cleanup/run' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/automation/cleanup/run', {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const { data } = await res.json();
console.log(data.deleted, data.breakdown);
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/automation/cleanup/run');
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);
```

```php
// Silinen isler geri gelmez: dusen islerin hata mesajlari da onlarla birlikte gider.
$r = Api::Automation()->RunAutomationCleanup()['data'];
```

### Tablo Boyutlarını Okuma

get/api/v1/admin/automation/table-stats

`Automation/GetAutomationTableStats` admin

Üç kuyruk tablosunun satır sayısını ve ortalama veri boyutunu döndürür.

Dönen alanlar data — 3

cronjob_queueobjectZamanlanmış görev kuyruğu: satır sayısı ve ortalama veri boyutu.

module_queueobjectModül kuyruğu: satır sayısı ve ortalama veri boyutu.

notification_queueobjectBildirim kuyruğu: satır sayısı ve ortalama veri boyutu.

Hatalar 1

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/admin/automation/table-stats' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/automation/table-stats', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/automation/table-stats');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Satir sayisi degil SATIR x ORTALAMA BOYUT buyumeyi anlatir; ikisini birlikte okuyun.
$t = Api::Automation()->GetAutomationTableStats()['data'];
$approx = $t['cronjob_queue']['rows'] * $t['cronjob_queue']['avg_payload'];
```

### Geri Yükleme Uyarısını Kapatma

post/api/v1/admin/automation/restore/dismiss

`Automation/DismissAutomationRestore` admin

Geri yükleme şüphesi uyarısını kaldırır.

Gövde —

——Gövde gerekmez, boş gönderin. Bu uç hiçbir şey almaz: ayarlarda tutulan şüphe işaretlerini temizler.

Dönen alanlar data — 1

dismissedboolUyarı kaldırıldı mı.

Hatalar 2

config_write_failed422Ayar dosyası yazılamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/admin/automation/restore/dismiss' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/automation/restore/dismiss', {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/automation/restore/dismiss');
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);
```

```php
// Uyariyi kapatmak SEBEBI ortadan kaldirmaz; once bosluk nereden geldi diye bakin.
$s = Api::Automation()->GetAutomationSettings()['data'];
if ($s['restore']['suspected_at'] !== null)
    Api::Automation()->DismissAutomationRestore();
```

### Geri Yükleme Uyarısını Elle Açma

post/api/v1/admin/automation/restore/trigger

`Automation/TriggerAutomationRestore` admin panelde parola ister

Geri yükleme uyarısını elle açar. Kuyruklar temizlenmez, görevler ertelenmez.

Gövde —

——Gövde gerekmez, boş gönderin. Bu uç hiçbir şey almaz: yazdığı şüphe zamanı çağrının kendi anıdır.

Dönen alanlar data — 1

triggeredboolİşaret konuldu mu.

Hatalar 2

config_write_failed422Ayar dosyası yazılamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/admin/automation/restore/trigger' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/automation/restore/trigger', {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/automation/restore/trigger');
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);
```

```php
// Panelde bu islem ADMIN PAROLASI ister; API'de tek kapi anahtarin kapsamidir.
Api::Automation()->TriggerAutomationRestore();
```

## Tuzaklar

> **Önce sayın, sonra silin**
> 
> Temizlik çalıştırma ucu **geri alınamaz** ve kaç kaydın gideceğini önceden söylemez. Ön izleme ucu tam da bunun için vardır: aynı ölçütle sayar, hiçbir şeye dokunmaz. Saklama günlerini yeni değiştirdiyseniz önizlemeye bakmadan temizlik çalıştırmak beklediğinizden çok daha fazlasını silebilir.

> **Silinen iş hata mesajını da götürür**
> 
> Temizlik düşmüş işleri de kaldırır ve onlarla birlikte **hata mesajları da gider**. Bir sorunu araştırırken temizlik çalıştırmak, aradığınız kanıtı ortadan kaldırabilir. Düşen işlerin saklama süresini tamamlananlardan uzun tutmak bu yüzden mantıklıdır.

> **Satır sayısı tek başına yeri anlatmaz**
> 
> Tablo istatistikleri hem satır sayısını hem **ortalama veri boyutunu** verir. Az satırlı ama büyük veri taşıyan bir kuyruk, çok satırlı küçük bir kuyruktan daha fazla yer tutabilir. Büyümeyi izlerken ikisini çarpın; yalnız satır saymak yanıltır.

> **Uyarıyı kapatmak sebebi kaldırmaz**
> 
> Geri yükleme uyarısını kapatmak yalnız **işareti siler**; kuyruğun neden uzun süre sessiz kaldığını değiştirmez. Uyarıyı otomasyon kendisi açtıysa bekleyen işler zaten kaldırılmış, açık görevler ileri alınmıştır. Kapatmak bunları geri getirmez. Kapatmadan önce son işlerin tarihlerine bakın.

> **Panelin parola kapısı burada yok**
> 
> Panelde geri yükleme uyarısını elle açmak için **yönetici parolası** gerekir; bu uçta tek kapı anahtarın kapsamıdır. Yani bu kapsamı taşıyan bir anahtar, panelde ek doğrulama gerektiren bir işlemi doğrudan yapabilir. Anahtarları dağıtırken bu farkı gözetin.

## İlgili Makaleler

- [Cron Ayarları](https://dev.wisecp.com/tr/cron-ayarlari)
- [Otomasyon İşleri](https://dev.wisecp.com/tr/otomasyon-isleri)
- [Zamanlanmış Görevler](https://dev.wisecp.com/tr/zamanlanmis-gorevler)
