Sebelum pekerjaan ini dibuat, user harus mengecek status container secara manual satu per satu. Setiap terminal memiliki website sendiri, cara pencarian berbeda, dan format data yang tidak seragam.

Proses tersebut memerlukan banyak waktu, terutama ketika jumlah container yang harus diperiksa cukup banyak. Selain itu, user harus berpindah-pindah website dan menyalin hasilnya secara manual. Cara kerja seperti ini juga meningkatkan risiko salah input, data terlewat, atau informasi yang sudah tidak lagi terbaru.

Masalah yang dihadapi user

Masalah utamanya bukan hanya banyaknya nomor container, tetapi juga perbedaan cara kerja antarwebsite terminal.

Ada website yang menyediakan respons JSON. Ada yang membutuhkan proses login dan session. Ada juga yang hanya menampilkan hasil dalam halaman HTML. Akibatnya, satu cara pengambilan data tidak dapat langsung digunakan untuk semua terminal.

Sebelumnya user perlu:

  • Membuka website terminal secara bergantian.
  • Memasukkan nomor container satu per satu.
  • Membaca status dari format yang berbeda.
  • Menyalin hasil ke sistem internal.
  • Mengulangi proses tersebut secara berkala.

Pekerjaan yang berulang ini membuat waktu user habis untuk aktivitas administratif, bukan untuk memantau kondisi data dan mengambil keputusan.

Solusi yang dibuat

Saya membuat beberapa scheduler berbasis PHP native. Scheduler berjalan otomatis melalui cron, mengambil daftar container dari database, menghubungi sumber tracking masing-masing terminal, lalu menyimpan hasilnya ke database internal.

Data tersebut kemudian dapat digunakan oleh dashboard sehingga user cukup memantau satu tempat. User tidak perlu lagi membuka banyak website dan melakukan pencarian secara manual untuk setiap container.

Konsepnya dapat digambarkan seperti ini:

Daftar container dari database
            ↓
Scheduler mengambil data secara berkala
            ↓
Menghubungi endpoint tracking terminal
            ↓
Membaca dan menormalisasi respons
            ↓
Menyimpan hasil ke database internal
            ↓
Dashboard menampilkan status terbaru

Istilah teknis yang digunakan

Pekerjaan ini tidak sepenuhnya tepat disebut web scraping HTML.

Istilah yang lebih sesuai adalah endpoint-based data extraction atau integrasi endpoint tracking, dengan proses endpoint discovery dan data normalization.

Endpoint discovery adalah proses menemukan URL, metode request, parameter, header, dan alur session yang digunakan oleh aplikasi web untuk mengambil data. Endpoint tersebut dapat berupa endpoint yang terdokumentasi maupun endpoint internal yang digunakan oleh frontend OWASP API Reconnaissance.

Setelah endpoint ditemukan, scheduler mengirim HTTP request dan membaca responsnya. Pola ini mengikuti mekanisme request-response HTTP, tetapi dilakukan secara otomatis oleh aplikasi, bukan melalui browser secara manual MDN HTTP Messages.

Karena sumber datanya berbeda-beda, pendekatan yang digunakan bersifat hybrid:

  • Mengambil data dari endpoint JSON.
  • Mengelola login dan session token.
  • Mengirim parameter melalui request GET atau POST.
  • Membaca HTML jika endpoint hanya memberikan halaman web.
  • Memetakan respons ke struktur data internal.
  • Menormalisasi format tanggal dan nilai kosong.

Dengan istilah tersebut, fokus pekerjaannya bukan sekadar mengambil tampilan halaman, tetapi mengintegrasikan sumber tracking yang tersedia agar dapat diproses secara konsisten.

Teknologi yang digunakan

Scheduler dibuat menggunakan PHP native agar sesuai dengan lingkungan server yang sudah tersedia dan tidak membutuhkan framework tambahan.

Komponen utamanya adalah:

  • PHP CLI yang kompatibel dengan PHP 7.4.
  • cURL untuk mengirim HTTP request.
  • PDO SQL Server untuk membaca dan menyimpan data.
  • Stored procedure sebagai sumber daftar container.
  • File konfigurasi .env untuk menyimpan pengaturan.
  • Log harian untuk memantau proses.
  • Lock file untuk mencegah proses ganda.
  • Cron untuk menjalankan scheduler secara berkala.
  • Database internal sebagai sumber dashboard monitoring.

Setiap terminal memiliki scheduler sendiri karena endpoint, autentikasi, dan format responsnya berbeda. Namun pola umumnya tetap sama sehingga lebih mudah dirawat dan dikembangkan.

Data yang lebih terkontrol

Hasil dari setiap sumber tidak langsung ditampilkan begitu saja. Scheduler melakukan normalisasi terlebih dahulu agar data dari berbagai terminal memiliki bentuk yang lebih seragam ketika disimpan.

Jika data belum tersedia, proses dicatat sebagai data yang belum ditemukan. Jika terjadi kesalahan koneksi atau respons dari sumber berubah, proses tersebut dicatat ke log untuk diperiksa.

Scheduler juga menggunakan mekanisme insert dan update. Data baru disimpan, sedangkan data yang sudah ada diperbarui tanpa membuat duplikasi.

Dengan cara ini, dashboard mendapatkan data dari satu sumber internal yang lebih terstruktur, bukan membaca langsung dari banyak website setiap kali user membuka halaman.

Hasil yang dicapai

Solusi ini mengurangi kebutuhan user untuk melakukan pengecekan manual satu per satu. Pekerjaan yang sebelumnya dilakukan berulang pada banyak website dipindahkan ke proses otomatis yang berjalan terjadwal.

Dampak yang dicapai adalah:

  • Waktu pengecekan container menjadi lebih efisien.
  • User cukup memantau satu dashboard.
  • Risiko salah salin dan salah input berkurang.
  • Data lebih mudah dibandingkan karena formatnya sudah diseragamkan.
  • Riwayat proses dapat ditelusuri melalui database dan log.
  • Pemeriksaan dapat dilakukan secara berkala tanpa menunggu input manual.

Efisiensi yang diperoleh bukan hanya dari berkurangnya klik atau pengetikan. Perubahan terpentingnya adalah memindahkan pekerjaan berulang dari user ke sistem, sehingga user dapat lebih fokus pada pemantauan dan tindak lanjut.

Pelajaran

Pelajaran utama dari proyek ini adalah bahwa otomasi integrasi tidak selalu membutuhkan sistem yang besar. Dengan PHP native, cURL, SQL Server, dan cron, proses manual yang berulang sudah dapat dikurangi secara signifikan.

Tantangan terbesarnya justru berada pada perbedaan karakter setiap sumber data. Karena itu, setiap endpoint perlu dipahami terlebih dahulu, lalu hasilnya dipetakan ke struktur internal yang konsisten.

Pendekatan ini juga membuat dashboard menjadi lebih berguna. Dashboard tidak hanya menjadi tempat menampilkan data, tetapi menjadi hasil akhir dari proses pengumpulan dan pengolahan data yang berjalan otomatis di belakangnya.

cover-scheduler-tracking-container