Latihan 1: Error Monitoring (Sentry-style) — Debugging

Latihan 1 dari materi Error Monitoring (Sentry-style) di Debugging — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.

Lengkapi createMonitor(release) supaya bekerja seperti Sentry versi mini: laporan error dengan fingerprint yang sama digabung jadi satu event.

createMonitor(release) mengembalikan objek dengan empat method:

  1. capture(error, context): error berbentuk { message, stack }, context berbentuk { userId, url, tags } (boleh ada yang gak dikirim).
    • Hitung fingerprint: baris pertama error.stack (error.stack.split('\n')[0]), atau error.message kalau stack kosong.
    • Sudah ada event dengan fingerprint itu? Naikkan count-nya, jangan bikin event baru.
    • Belum ada? Tambahkan event { id, message, fingerprint, release, userId, url, tags, timestamp, count: 1 }, dengan tags jadi {} kalau gak dikirim.
  2. getEvents(): kembalikan array event yang sudah digabung.
  3. getEventsByTag(key, value): kembalikan event yang tags[key] === value.
  4. getTopErrors(n): kembalikan n event dengan count terbesar, urut dari yang terbesar, tanpa mengubah urutan array aslinya.

Kode awal sudah berisi tiga mon.capture(...) dan empat console.log, biarkan begitu. Output-nya harus persis empat baris ini, berurutan:

  1. 2
  2. 2
  3. 1
  4. Cannot read property

Ada juga dua cek dengan data lain: error yang sama ditangkap dua kali harus jadi 1 event dengan count 2, dan getEventsByTag('env', 'prod') serta getTopErrors(1) masing-masing harus mengembalikan tepat 1 event.

Hint