Status API VirusTotal Queued: Penyebab dan Solusi Teknis

Memahami Status Queued pada API VirusTotal

Status 'Queued' pada API VirusTotal menandakan bahwa permintaan (request) pemindaian file atau URL Anda telah diterima oleh server, namun belum diproses karena antrean server yang sedang penuh atau keterbatasan kapasitas pemrosesan pada saat itu. Ini bukan berarti permintaan Anda gagal, melainkan sedang menunggu giliran untuk dieksekusi oleh mesin analisis VirusTotal.

Dalam arsitektur API VirusTotal, status ini sering muncul ketika volume permintaan melampaui batas throughput yang diizinkan untuk tingkat akun Anda atau saat terjadi lonjakan trafik global pada infrastruktur mereka. Berikut adalah rincian teknis mengenai status tersebut dan cara menanganinya.

Tabel Analisis Status API VirusTotal

StatusArtiTindakan
QueuedPermintaan dalam antreanTunggu dan lakukan polling ulang
CompletedAnalisis selesaiAmbil hasil (report)
NotFoundID tidak ditemukanVerifikasi ID pemindaian
QuotaExceededBatas harian/menit tercapaiTunggu reset kuota

Penyebab Utama Status Queued

Ada tiga faktor utama yang menyebabkan permintaan API Anda masuk ke status antrean:

  • Batas Rate Limiting: Setiap API Key memiliki batasan jumlah permintaan per menit (RPM) dan per hari (RPD). Jika Anda mengirim permintaan terlalu cepat, sistem akan menempatkan permintaan tambahan ke dalam antrean.
  • Beban Server Global: VirusTotal memproses jutaan file setiap hari. Pada jam sibuk, waktu tunggu untuk pemindaian file baru (terutama file besar) akan meningkat secara signifikan.
  • Prioritas Akun: Pengguna dengan API Key berbayar (Premium/Enterprise) mendapatkan prioritas pemrosesan yang lebih tinggi dibandingkan pengguna API publik (gratis).

Langkah Teknis Mengatasi Antrean

Untuk mengelola status queued secara efisien dalam kode aplikasi Anda, gunakan logika polling dengan mekanisme exponential backoff. Jangan melakukan permintaan berulang secara instan karena dapat memicu pemblokiran API Key Anda.

import time
import requests

def check_status(scan_id, api_key):
    url = f"https://www.virustotal.com/api/v3/analyses/{scan_id}"
    headers = {"x-apikey": api_key}
    
    while True:
        response = requests.get(url, headers=headers)
        data = response.json()
        status = data['data']['attributes']['status']
        
        if status == "completed":
            return data['data']['attributes']['results']
        elif status == "queued":
            time.sleep(15) # Tunggu 15 detik sebelum cek ulang
        else:
            break

Tips Optimasi

  1. Implementasikan Jitter: Tambahkan variasi waktu acak pada interval polling untuk menghindari sinkronisasi permintaan yang berlebihan.
  2. Gunakan Webhooks: Jika memungkinkan, gunakan fitur Webhooks VirusTotal untuk menerima notifikasi otomatis saat analisis selesai, sehingga Anda tidak perlu melakukan polling manual.
  3. Monitor Kuota: Selalu periksa header respons API untuk memantau sisa kuota Anda agar tidak terkena limitasi yang tidak terduga.