> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apinizer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# taskflow_execution_log Koleksiyonunun Temizlenmesi

> Integration Task Flow adımlarındaki eylemlerin işletilmesi sırasında oluşan loglara ait kayıtların tutulduğu taskflow_execution_log koleksiyonunda depolanan kayıtlardan belirtilen zaman dilimine göre eski kayıtların temizlenmesini sağlar.

<Warning>
  Zaman filtresi UTC'e göre yapılmaktadır.
</Warning>

## Kayıt Temizleme Scripti

Aşağıdaki script, MongoDB'deki `taskflow_execution_log` koleksiyonunda depolanan kayıtlardan belirtilen saat öncesine kadar olan kayıtları silmek için kullanılır. Bu işlem ile veritabanı temizlenerek depolama alanı optimize edilir.

```bash theme={null}
#!/bin/bash
 
# MongoDB sunucusuna bağlanmak için gerekli bilgiler
HOST="<MONGODB_MASTER_IP_ADDRESS>"
PORT="<MONGODB_PORT>"
DB_NAME="apinizerdb"
USERNAME="apinizer"
PASSWORD="<PASSWORD>"
AUTH_DB="admin"
TARGET_COLLECTION="taskflow_execution_log"
TARGET_LOG_LOCATION=$(pwd)/purge_taskflow_execution_log_collection.log
 
echo "Script started on $(date +"%Y-%m-%d %H:%M:%S")" >> $TARGET_LOG_LOCATION  # Son kaç saat/gün öncesine kadar olan belgelerin silineceğini belirten değişken
TIME_VALUE="1D"  #Bu değeri istediğiniz gibi değiştirebilirsiniz.
  
# TIME_VALUE değerini analiz edip milisaniye cinsinden dönüştürme
if [[ $TIME_VALUE =~ [Hh]$ ]]; then
    HOURS_AGO=${TIME_VALUE%H*}
    TIME_IN_MILLISECONDS=$(($HOURS_AGO * 60 * 60 * 1000))
elif [[ $TIME_VALUE =~ [Dd]$ ]]; then
    DAYS_AGO=${TIME_VALUE%D*}
    TIME_IN_MILLISECONDS=$(($DAYS_AGO * 24 * 60 * 60 * 1000))
else
    echo "Invalid time format. Please enter a value ending with H (hour) or D (day)." >> $TARGET_LOG_LOCATION
    exit 1
fi
  
MONGO_COMMANDS=$(cat <<EOF
var dateToRemove=new Date((new Date().getTime() - $TIME_IN_MILLISECONDS));
var bulk = db.getCollection("$TARGET_COLLECTION").initializeUnorderedBulkOp();
bulk.find( {"executionTime":{"\$lt": dateToRemove}}).remove();
bulk.execute();
EOF
)
  
# Komutu çalıştır ve çıktısını log dosyasına yazdır
{
    mongosh mongodb://$USERNAME:$PASSWORD@$HOST:$PORT/$DB_NAME --authenticationDatabase $AUTH_DB --eval "$MONGO_COMMANDS"
    # Komutun tamamlanmasını kontrol et
    if [ $? -ne 0 ]; then
        echo "MongoDB command failed." >> $TARGET_LOG_LOCATION
        exit 1
    fi
} >> $TARGET_LOG_LOCATION 2>&1
  
echo "The command has been executed. Please check the content of the related collection." >> $TARGET_LOG_LOCATION
  
echo "Script finished on $(date +"%Y-%m-%d %H:%M:%S")" >> $TARGET_LOG_LOCATION
```

## Nasıl Çalışır

<Steps>
  <Step title="MongoDB Bağlantı Bilgilerini Tanımlama">
    MongoDB sunucusuna bağlanmak için gerekli bilgiler ilgili değişkenlere tanımlanır: HOST, PORT, DB\_NAME, USERNAME, PASSWORD ve AUTH\_DB.
  </Step>

  <Step title="Zaman Dilimini Belirleme">
    TIME\_VALUE değişkeni ile son kaç saat öncesine kadar olan kayıtların silineceği belirtilir. Bu değer saat (H) veya gün (D) cinsinden olabilir.
  </Step>

  <Step title="MongoDB Komutlarını Hazırlama">
    MONGO\_COMMANDS değişkeni içerisinde, belirtilen saat öncesine kadar olan belgeleri bulmak ve silmek için MongoDB komutları tanımlanır.
  </Step>

  <Step title="Komutları Çalıştırma">
    mongosh komutu ile MongoDB sunucusuna bağlanılır ve MONGO\_COMMANDS değişkeninde tanımlanan komutlar çalıştırılır.
  </Step>

  <Step title="Sonuç Kontrolü">
    İşlem tamamlandığında, ekrana "The command has been executed. Please check the content of the related collection." mesajı yazdırılır.
  </Step>
</Steps>

## Kullanım

Scripti çalıştırmadan önce MongoDB değişkenlerine kendi bilgilerinizi giriniz. TIME\_VALUE değişkenini istediğiniz saat/gün değerine göre güncelleyebilirsiniz. Örneğin:

* Son 3 saatteki belgeleri korumak ve geri kalanını silmek için `TIME_VALUE=3H`
* Son 5 gündeki belgeleri korumak ve geri kalanını silmek için `TIME_VALUE=5D`

Scripti Linux tabanlı bir işletim sisteminde çalıştırmak için:

1. Bir metin düzenleyici (vi, nano vb.) yardımıyla script bir dosyaya kopyalanır ve içindeki değişkenler düzenlenir
2. Dosyaya çalıştırma yetkisi verilir: `chmod +x purge_taskflow_execution_log_collection.sh`
3. Dosya çalıştırılır: `./purge_taskflow_execution_log_collection.sh`

Uzun sürecek bir işlem yapacağınızı düşünüyorsanız komut sonuna boşluk bırakıp `&` karakterini ekleyerek arkaplanda çalışmasını sağlayabilirsiniz:

```bash theme={null}
chmod +x /path/to/purge_taskflow_execution_log_collection.sh
./path/to/purge_taskflow_execution_log_collection.sh &
```

Bu işlem manuel yapılabileceği gibi belirli aralıklarda tekrarlanarak da yapılabilir. Tekrarlanarak yapılması için linux cronjob ayarlarına bu kaydın girilmesi gerekir.

## CronJob Kullanımı

<Steps>
  <Step title="Cron Düzenleyicisini Açma">
    Terminalde aşağıdaki komutu çalıştırarak cron düzenleyicisi açılır:

    ```bash theme={null}
    crontab -e
    ```
  </Step>

  <Step title="Cron Job Ekleme">
    Açılan editöre, scripti ne sıklıkla çalıştırmak istediğinize göre bir satır ekleyin.

    Örneğin, her gün saat 23:59'da çalıştırmak için:

    ```bash theme={null}
    59 23 * * * /path/to/purge_taskflow_execution_log_collection.sh > /path/to/logfile.log 2>&1
    ```
  </Step>

  <Step title="Kaydetme">
    Eklediğiniz satırı kaydetmek için Esc tuşuna basıp :wq yazıp enter tuşuna basın.
  </Step>
</Steps>

<Info>
  Script içerisinde belirttiğiniz zaman dilimine göre veri temizleme işlemi gerçekleşecektir. Bu nedenle, script içerisindeki zaman diliminin ve cron ile belirlediğiniz tetikleme saatinin tutarlı olmasını sağlamak önemlidir.
</Info>
