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

# Log Integration (Push-Based)

**Log Integrasi** digunakan untuk memonitor dan mengaudit seluruh aktivitas pengiriman data dari Mertani ke server eksternal (push-based / webhook). Setiap pengiriman dicatat secara otomatis, termasuk pengiriman yang berhasil, gagal, maupun yang melalui proses retry.

***

## Cara Mengakses Log Integrasi

<Steps>
  <Step title="Buka menu Manajemen Integrasi">
    Masuk ke menu **Instansi → Integrasi**. Halaman ini menampilkan daftar semua integrasi yang telah dikonfigurasi.

    Kolom yang tersedia:

    | Kolom                   | Keterangan                                          |
    | ----------------------- | --------------------------------------------------- |
    | **Nama Integrasi**      | Nama integrasi yang diberikan saat konfigurasi      |
    | **Deskripsi**           | Catatan tambahan tentang integrasi                  |
    | **Tanggal Dibuat**      | Waktu integrasi pertama kali dibuat                 |
    | **Pengiriman Terakhir** | Timestamp pengiriman data terakhir ke server tujuan |
  </Step>

  <Step title="Pilih integrasi">
    Klik baris integrasi yang ingin diperiksa. Halaman log integrasi akan terbuka.

    <Frame>
      <video src="https://mintcdn.com/mertani/s_1RXp64XZSqMTTx/assets/dashboard-guides/configs/log.webm?fit=max&auto=format&n=s_1RXp64XZSqMTTx&q=85&s=a639c50a9ddff9589beeae7d0e2e6b52" controls autoPlay loop playsInline muted data-path="assets/dashboard-guides/configs/log.webm" />
    </Frame>
  </Step>
</Steps>

***

## Tampilan Matriks Log

Setelah memilih integrasi, log ditampilkan dalam bentuk **matriks Device × Tanggal**:

* **Baris** -> daftar device yang tergabung dalam integrasi
* **Kolom** -> tanggal dalam bulan yang dipilih
* **Isi sel** -> jumlah pengiriman pada hari tersebut, ditampilkan sebagai:
  * <span style={{ color: '#15803D', fontWeight: '600' }}>Angka hijau</span> -> jumlah pengiriman **berhasil**
  * <span style={{ color: '#B91C1C', fontWeight: '600' }}>Angka merah</span> -> jumlah pengiriman **gagal**
  * `-` -> tidak ada pengiriman / tidak ada gagal / tidak ada berhasil

Gunakan **filter bulan/tahun** di pojok kanan atas untuk berpindah antar periode.

<Note>
  Gunakan kolom pencarian **"Cari device id"** di kiri atas untuk menemukan device tertentu jika daftar device sangat panjang.
</Note>

***

## Melihat Detail Log per Device

Klik sel pada matriks (kombinasi device + tanggal) untuk membuka halaman detail log pengiriman.

### Kolom Tabel Detail Log

| Kolom                 | Keterangan                                                                                                                                                                                                                                                                                                                                       |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Waktu Record Data** | Timestamp data dari device, kapan data tersebut dicatat oleh sensor                                                                                                                                                                                                                                                                              |
| **Created at**        | Waktu pertama kali sistem mencoba mengirim data ke server tujuan                                                                                                                                                                                                                                                                                 |
| **Updated at**        | Waktu terakhir sistem memperbarui status pengiriman (termasuk setelah retry)                                                                                                                                                                                                                                                                     |
| **Jumlah Retry**      | Berapa kali sistem mencoba ulang pengiriman setelah gagal                                                                                                                                                                                                                                                                                        |
| **Status**            | Status akhir pengiriman: <span style={{ backgroundColor: 'rgba(21, 168, 60, 0.24)', color: '#15803D', padding: '2px 8px', borderRadius: '6px', fontWeight: '600' }}>Berhasil</span> atau <span style={{ backgroundColor: 'rgba(185, 28, 28, 0.24)', color: '#B91C1C', padding: '2px 8px', borderRadius: '6px', fontWeight: '600' }}>Gagal</span> |
| **Detail**            | Tombol untuk melihat isi lengkap HTTP request yang dikirim                                                                                                                                                                                                                                                                                       |

### Filter Status

Gunakan dropdown **"Semua Status"** di kanan atas untuk menyaring tampilan:

* **Semua Status** -> tampilkan semua log
* **Berhasil** -> hanya pengiriman yang sukses
* **Gagal** -> hanya pengiriman yang gagal (berguna untuk troubleshooting)

***

## Detail Pesan (Message Log)

Klik tombol **"Detail"** pada baris log untuk melihat isi lengkap HTTP request yang dikirimkan sistem ke server tujuan.

Informasi yang ditampilkan:

```
POST https://[endpoint-server-tujuan]

Headers {"content-type":"application/json"}

Body
{ ... payload data sensor ... }

Result
{ ... response dari server tujuan ... }
```

| Bagian           | Keterangan                                                                                                                              |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| **Method & URL** | Metode HTTP dan endpoint server tujuan yang menerima data                                                                               |
| **Headers**      | Header request yang dikirim (termasuk content-type)                                                                                     |
| **Body**         | Payload data sensor dalam format JSON yang dikirimkan                                                                                   |
| **Result**       | Response dari server tujuan, digunakan untuk memverifikasi apakah server berhasil menerima data (HTTP 200/201) atau mengembalikan error |

<Note>
  Detail pesan ini berguna untuk memverifikasi bahwa format data yang dikirim sudah sesuai dengan yang diharapkan oleh server tujuan.
</Note>

***

## Memahami Retry Mechanism

Jika pengiriman pertama gagal, sistem akan mencoba mengirim ulang secara otomatis menggunakan pola **Exponential Backoff** interval antar percobaan semakin lama semakin panjang untuk menghindari beban berlebih pada server tujuan.

### Spesifikasi Retry

| Parameter                        | Nilai                                                                            |
| -------------------------------- | -------------------------------------------------------------------------------- |
| **Maksimal percobaan**           | 10x retry                                                                        |
| **Pola interval**                | Exponential backoff (interval bertambah secara eksponensial setiap retry)        |
| **Perilaku setelah retry ke-10** | Sistem **berhenti** mencoba, status pengiriman menjadi **Gagal** secara permanen |

### Ilustrasi Pola Backoff

Setiap kali retry gagal, sistem menunggu lebih lama sebelum mencoba kembali:

```
Percobaan 1  → langsung setelah gagal
Percobaan 2  → menunggu lebih lama
Percobaan 3  → menunggu lebih lama lagi
...
Percobaan 10 → percobaan terakhir
Setelah itu  → sistem berhenti, status = Gagal permanen
```

Pendekatan ini mencegah sistem membanjiri server tujuan yang sedang bermasalah dengan request berulang dalam waktu singkat.

### Membaca Kolom Jumlah Retry

| Nilai Retry                                                                                                                                                            | Interpretasi                                             |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- |
| `-` atau `0`                                                                                                                                                           | Pengiriman berhasil di percobaan pertama                 |
| `1` – `9`                                                                                                                                                              | Sempat gagal, berhasil setelah beberapa percobaan ulang  |
| `10` + status <span style={{ backgroundColor: 'rgba(185, 28, 28, 0.24)', color: '#B91C1C', padding: '2px 8px', borderRadius: '6px', fontWeight: '600' }}>Gagal</span>  | Semua 10 percobaan gagal — sistem telah berhenti mencoba |
| `1–9` + status <span style={{ backgroundColor: 'rgba(185, 28, 28, 0.24)', color: '#B91C1C', padding: '2px 8px', borderRadius: '6px', fontWeight: '600' }}>Gagal</span> | Masih dalam proses retry atau baru saja gagal            |

### Kemungkinan Penyebab Kegagalan

| Kondisi                             | Kemungkinan penyebab                                                                  |
| ----------------------------------- | ------------------------------------------------------------------------------------- |
| Retry tinggi, akhirnya **Berhasil** | Server tujuan sempat tidak stabil tetapi pulih sebelum retry ke-10                    |
| Retry 10x, tetap **Gagal**          | Server down dalam waktu lama, endpoint salah, atau timeout konsisten                  |
| Gagal tanpa retry                   | Kegagalan pada percobaan pertama yang tidak memicu retry (misalnya error konfigurasi) |

<Warning>
  Data yang mencapai **retry ke-10 dan tetap gagal** tidak akan dikirim ulang secara otomatis. Jika data tersebut penting, hubungi tim Mertani untuk penanganan lebih lanjut.
</Warning>

***

## Referensi Terkait

<CardGroup cols={2}>
  <Card title="Webhook API" icon="code" href="/docs/endpoints/webhook-api">
    Panduan konfigurasi endpoint untuk menerima data push dari Mertani
  </Card>

  <Card title="Integration Method" icon="code-pull-request" href="/docs/api-references/integration-method">
    Perbandingan REST API vs Webhook untuk kebutuhan integrasi
  </Card>
</CardGroup>
