Manajemen background jobs dengan Mission Control

Manajemen background jobs dengan Mission Control
Foto dibuat oleh AI menggunakan Grok

Mission Control—Jobs adalah gem berbasis Rails yang memberikan front-end untuk manajemen background jobs. Gem ini memberikan kemudahan untuk mengelola background jobs dari Resque dan Solid Queue. Sebagai solo developer, keberadaan gem ini sangat membantu untuk mengelola background jobs terutama pada proyek kecil dan sampingan. Biasanya manajemen background jobs ini ditawarkan sebagai managed service oleh provider cloud, tentunya dengan biaya terpisah. Dengan adanya gem ini, seorang solo developer bisa mengelola background jobs secara swadaya dan melakukan penghematan yang luar biasa.

GitHub - rails/mission_control-jobs: Dashboard and Active Job extensions to operate and troubleshoot background jobs
Dashboard and Active Job extensions to operate and troubleshoot background jobs - rails/mission_control-jobs
ℹ️
Sebelum membaca lebih lanjut, saya ingin memberitahukan bahwa blog ini juga tersedia dalam bentuk Newsletter. Cukup dengan mendaftarkan email di bawah ini.

Autentikasi

Mission Control memberikan autentikasi HTTP basic secara default. Secara default, Mission Control tidak bisa diakses apabila kita tidak memberikan credential berupa username dan password. Contoh sederhananya adalah seperti ini:

mission_control:
  http_basic_auth_user: dev
  http_basic_auth_password: secret

Disarankan bagi pengguna untuk membuat sendiri autentikasi sesuai dengan aplikasi yang kita buat. Misalnya, dengan memberikan sebuah controller yang terlindungi dibalik autentikasi:

config.mission_control.jobs.base_controller_class = "AdminController"

Lebih lanjut mengenai ini: https://github.com/rails/mission_control-jobs?tab=readme-ov-file#custom-authentication

Fitur standar

Mission Control membagi setiap state dari Background Job dalam tab terpisah. Bagi yang terbiasa melihat Resque Web, ini cukup familiar. Fitur-fiturnya adalah:

  • queued jobs berdasarkan state (failed, in progress, blocked, scheduled, finished)
  • manajemen workers
  • recurring tasks

CLI Helper

Tak hanya front-end, Mission Control juga memberikan helper untuk Command Line Interface. Ini sangat berguna untuk debugging job. Sering dibutuhkan ketika operasi yang kita inginkan tidak disajikan di front-end. Misalnya, membuat query yang lebih spesifik.

Sedikit tambahan

Log dari background jobs akan cepat memakan database apabila dibiarkan begitu saja. Namun log ini akan sangat berguna untuk menginvestigasi sebuah isu. Sebagai solo developer, saya biasanya memberikan waktu 7 hari untuk menyimpan log. Alasannya karena saya tidak ingin tagihan server tiba-tiba membengkak tanpa secara perlahan.

Di sini saya membuat background job untuk menghapus job yang sudah dikerjakan, alias finished. Job ini akan berjalan setiap hari dan akan menghapus job dari 7 hari sebelumnya.

class FinishedJobsPurgingJob < ApplicationJob
  EXPIRATION_TIME = 7.days

  queue_as :default

  def perform
    finished_jobs.find_each do |job|
      Rails.logger.debug { "Destroyed Job ID: #{job.active_job_id}" }
      job.destroy
    end
  end

  private

    def finished_jobs
      @_finished_jobs ||= SolidQueue::Job.finished.where(finished_at: ..EXPIRATION_TIME.ago)
    end
end

Dan jangan lupa ditambahkan ke dalam recurring.yml apabila menggunakan solid_queue:

production:
  finished_jobs_purging_job:
    class: FinishedJobsPurgingJob
    schedule: "every day at 00:15"

Read more

Mastodon