penambahan frontend

This commit is contained in:
2026-05-18 10:17:33 +07:00
parent 5533d1c935
commit 423a2d1095
7 changed files with 1676 additions and 273 deletions
+252 -273
View File
File diff suppressed because it is too large Load Diff
+576
View File
@@ -0,0 +1,576 @@
package admin
import (
"api-service/internal/config"
"api-service/internal/database"
"context"
"database/sql"
"encoding/json"
"fmt"
"net/http"
"strconv"
"time"
"github.com/gin-gonic/gin"
)
type Ruangan struct {
No int
Nama string
JumlahTT int
KodeKelas sql.NullString
KodeAplicare sql.NullString
NamaRuang sql.NullString
StAktif int
}
type AdminHandler struct {
db database.Service
}
type AdminHandlerConfig struct {
Config *config.Config
}
func NewAdminHandler(cfg AdminHandlerConfig) *AdminHandler {
return &AdminHandler{db: database.New(cfg.Config)}
}
func (h *AdminHandler) getRuangan(ctx context.Context) ([]Ruangan, error) {
db, err := h.db.GetDB("simrs")
if err != nil {
return nil, fmt.Errorf("koneksi simrs gagal: %w", err)
}
rows, err := db.QueryContext(ctx, `
SELECT no, nama, jumlah_tt, kode_kelas, kode_aplicare, nama_ruang, st_aktif
FROM m_ruang
WHERE subsistem LIKE '%RAWAT INAP%'
ORDER BY no
`)
if err != nil {
return nil, err
}
defer rows.Close()
var result []Ruangan
for rows.Next() {
var r Ruangan
if err := rows.Scan(&r.No, &r.Nama, &r.JumlahTT,
&r.KodeKelas, &r.KodeAplicare, &r.NamaRuang, &r.StAktif); err != nil {
return nil, err
}
result = append(result, r)
}
return result, rows.Err()
}
// GetPage — GET /admin/aplicares
func (h *AdminHandler) GetPage(c *gin.Context) {
ctx, cancel := context.WithTimeout(c.Request.Context(), 30*time.Second)
defer cancel()
ruangans, err := h.getRuangan(ctx)
if err != nil {
c.String(http.StatusInternalServerError, "Error: "+err.Error())
return
}
type RuanganJSON struct {
No int `json:"no"`
Nama string `json:"nama"`
JumlahTT int `json:"jumlah_tt"`
KodeKelas string `json:"kode_kelas"`
KodeAplicare string `json:"kode_aplicare"`
NamaRuang string `json:"nama_ruang"`
SudahMapping bool `json:"sudah_mapping"`
StAktif int `json:"st_aktif"`
}
var data []RuanganJSON
belumMapping := 0
for _, r := range ruangans {
sudah := r.KodeKelas.Valid && r.KodeKelas.String != "" &&
r.KodeAplicare.Valid && r.KodeAplicare.String != ""
if !sudah {
belumMapping++
}
data = append(data, RuanganJSON{
No: r.No,
Nama: r.Nama,
JumlahTT: r.JumlahTT,
KodeKelas: r.KodeKelas.String,
KodeAplicare: r.KodeAplicare.String,
NamaRuang: r.NamaRuang.String,
SudahMapping: sudah,
StAktif: r.StAktif,
})
}
jsonData, _ := json.Marshal(data)
html := `<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Admin Aplicares</title>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: #f5f6fa; color: #333; }
.header { background: #1a73e8; color: white; padding: 16px 24px; display: flex; align-items: center; justify-content: space-between; }
.header h1 { font-size: 18px; font-weight: 600; }
.btn-add { background: white; color: #1a73e8; border: none; padding: 8px 16px; border-radius: 6px; cursor: pointer; font-weight: 500; font-size: 14px; }
.stats { display: flex; gap: 16px; padding: 20px 24px; }
.stat-card { background: white; border-radius: 8px; padding: 16px 24px; flex: 1; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
.stat-card .number { font-size: 28px; font-weight: 700; color: #1a73e8; }
.stat-card.success .number { color: #2ecc71; }
.stat-card.warning .number { color: #f4a261; }
.stat-card .label { font-size: 13px; color: #666; margin-top: 4px; }
.container { padding: 0 24px 24px; }
.search-bar { background: white; border-radius: 8px; padding: 12px 16px; margin-bottom: 16px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
.search-bar input { border: 1px solid #ddd; border-radius: 6px; padding: 8px 12px; width: 100%; font-size: 14px; outline: none; }
.search-bar input:focus { border-color: #1a73e8; }
.table-wrap { background: white; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); overflow: hidden; }
table { width: 100%; border-collapse: collapse; }
th { background: #f8f9fa; padding: 12px 16px; text-align: left; font-size: 13px; font-weight: 600; color: #555; border-bottom: 1px solid #eee; white-space: nowrap; }
td { padding: 11px 16px; font-size: 14px; border-bottom: 1px solid #f0f0f0; }
tr:last-child td { border-bottom: none; }
tr:hover td { background: #f8f9ff; }
.badge { padding: 3px 10px; border-radius: 12px; font-size: 12px; font-weight: 500; white-space: nowrap; }
.badge-ok { background: #d4edda; color: #155724; }
.badge-no { background: #fff3cd; color: #856404; }
.btn-edit { background: #1a73e8; color: white; border: none; padding: 6px 14px; border-radius: 6px; cursor: pointer; font-size: 13px; white-space: nowrap; }
.btn-edit:hover { background: #1557b0; }
.modal-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 100; align-items: center; justify-content: center; }
.modal-overlay.show { display: flex; }
.modal { background: white; border-radius: 12px; padding: 24px; width: 480px; max-width: 90vw; max-height: 90vh; overflow-y: auto; }
.modal h2 { font-size: 16px; margin-bottom: 4px; }
.modal .subtitle { font-size: 13px; color: #888; margin-bottom: 20px; }
.form-group { margin-bottom: 14px; }
.form-group label { display: block; font-size: 13px; font-weight: 500; margin-bottom: 6px; color: #555; }
.form-group input, .form-group select { width: 100%; border: 1px solid #ddd; border-radius: 6px; padding: 9px 12px; font-size: 14px; outline: none; }
.form-group input:focus, .form-group select:focus { border-color: #1a73e8; }
.modal-actions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 20px; }
.btn-cancel { background: #f0f0f0; color: #333; border: none; padding: 10px 20px; border-radius: 6px; cursor: pointer; font-size: 14px; }
.btn-save { background: #1a73e8; color: white; border: none; padding: 10px 20px; border-radius: 6px; cursor: pointer; font-size: 14px; font-weight: 500; }
.btn-save:hover { background: #1557b0; }
.toast { position: fixed; bottom: 24px; right: 24px; padding: 12px 20px; border-radius: 8px; color: white; font-size: 14px; z-index: 200; opacity: 0; transition: opacity .3s; pointer-events: none; }
.toast.show { opacity: 1; }
.toast-ok { background: #2ecc71; }
.toast-err { background: #e74c3c; }
</style>
</head>
<body>
<div class="header">
<h1>🏥 Admin Aplicares — Mapping Ruangan BPJS</h1>
<button class="btn-add" onclick="openCreate()">+ Tambah Ruangan</button>
</div>
<div class="stats">
<div class="stat-card">
<div class="number" id="statTotal">-</div>
<div class="label">Total Ruangan</div>
</div>
<div class="stat-card success">
<div class="number" id="statSudah">-</div>
<div class="label">Sudah Mapping</div>
</div>
<div class="stat-card warning">
<div class="number" id="statBelum">-</div>
<div class="label">Belum Mapping</div>
</div>
</div>
<div class="container">
<div class="search-bar">
<input type="text" id="search" placeholder="🔍 Cari nama ruangan..." oninput="filterTable()">
</div>
<div class="table-wrap">
<table>
<thead>
<tr>
<th>No</th>
<th>Nama Ruangan (SIMRS)</th>
<th>Kapasitas</th>
<th>Status</th>
<th>Kode Kelas</th>
<th>Kode BPJS</th>
<th>Status</th>
<th>Aksi</th>
</tr>
</thead>
<tbody id="tbody"></tbody>
</table>
</div>
</div>
<!-- Modal Edit -->
<div class="modal-overlay" id="modalEdit">
<div class="modal">
<h2>Edit Mapping Ruangan</h2>
<p class="subtitle" id="editSubtitle"></p>
<input type="hidden" id="editNo">
<div class="form-group">
<label>Kode Kelas BPJS *</label>
<select id="editKodeKelas">` + kelasOptions() + `</select>
</div>
<div class="form-group">
<label>Kode Ruang BPJS (kode_aplicare) *</label>
<input type="text" id="editKodeAplicare" placeholder="contoh: BARI1">
</div>
<div class="form-group">
<label>Nama Ruang BPJS</label>
<input type="text" id="editNamaRuang" placeholder="contoh: RUANG BARITO VIP">
</div>
<div class="form-group">
<label>Kapasitas (jumlah_tt)</label>
<input type="number" id="editKapasitas" placeholder="contoh: 10" min="0">
</div>
<div class="form-group">
<label>Status</label>
<select id="editStAktif">
<option value="1">Aktif</option>
<option value="0">Nonaktif</option>
</select>
</div>
<div class="modal-actions">
<button class="btn-cancel" onclick="closeModal('modalEdit')">Batal</button>
<button class="btn-save" onclick="saveEdit()">Simpan</button>
</div>
</div>
</div>
<!-- Modal Create -->
<div class="modal-overlay" id="modalCreate">
<div class="modal">
<h2>Tambah Ruangan Baru</h2>
<p class="subtitle">Data akan ditambahkan ke SIMRS + mapping BPJS</p>
<div class="form-group">
<label>Nama Ruangan (SIMRS) *</label>
<input type="text" id="createNama" placeholder="contoh: R.BARU KELAS 1">
</div>
<div class="form-group">
<label>Kapasitas *</label>
<input type="number" id="createKapasitas" placeholder="contoh: 10" min="1">
</div>
<div class="form-group">
<label>Kode Kelas BPJS *</label>
<select id="createKodeKelas">` + kelasOptions() + `</select>
</div>
<div class="form-group">
<label>Kode Ruang BPJS *</label>
<input type="text" id="createKodeAplicare" placeholder="contoh: BARI1">
</div>
<div class="form-group">
<label>Nama Ruang BPJS</label>
<input type="text" id="createNamaRuang" placeholder="contoh: RUANG BARITO VIP">
</div>
<div class="modal-actions">
<button class="btn-cancel" onclick="closeModal('modalCreate')">Batal</button>
<button class="btn-save" onclick="saveCreate()">Simpan</button>
</div>
</div>
</div>
<div class="toast" id="toast"></div>
<script>
const DATA = ` + string(jsonData) + `;
let filtered = [...DATA];
function init() {
document.getElementById('statTotal').textContent = DATA.length;
document.getElementById('statSudah').textContent = DATA.filter(r => r.sudah_mapping).length;
document.getElementById('statBelum').textContent = DATA.filter(r => !r.sudah_mapping).length;
renderTable(DATA);
}
function renderTable(rows) {
const tbody = document.getElementById('tbody');
if (!rows || rows.length === 0) {
tbody.innerHTML = '<tr><td colspan="7" style="text-align:center;padding:24px;color:#888">Tidak ada data</td></tr>';
return;
}
tbody.innerHTML = rows.map(r => {
const badge = r.sudah_mapping
? '<span class="badge badge-ok">✓ Sudah</span>'
: '<span class="badge badge-no">Belum</span>';
return '<tr>' +
'<td>' + r.no + '</td>' +
'<td>' + escHtml(r.nama) + '</td>' +
'<td>' + r.jumlah_tt + '</td>' +
'<td>' + badge + '</td>' +
'<td>' + escHtml(r.kode_kelas) + '</td>' +
'<td>' + escHtml(r.kode_aplicare) + '</td>' +
'<td>' + (r.st_aktif === 1
? '<span class="badge badge-ok">Aktif</span>'
: '<span class="badge badge-no">Nonaktif</span>') + '</td>' +
'<td><button class="btn-edit" onclick="openEdit(' + r.no + ')">Edit</button></td>' +
'</tr>';
}).join('');
}
function escHtml(s) {
if (!s) return '-';
return s.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');
}
function filterTable() {
const kw = document.getElementById('search').value.toLowerCase();
filtered = DATA.filter(r => r.nama.toLowerCase().includes(kw) || r.kode_aplicare.toLowerCase().includes(kw));
renderTable(filtered);
}
function openEdit(no) {
const r = DATA.find(x => x.no === no);
if (!r) return;
document.getElementById('editNo').value = r.no;
document.getElementById('editSubtitle').textContent = 'No. ' + r.no + ' — ' + r.nama;
document.getElementById('editKodeKelas').value = r.kode_kelas;
document.getElementById('editKodeAplicare').value = r.kode_aplicare;
document.getElementById('editNamaRuang').value = r.nama_ruang;
document.getElementById('editKapasitas').value = r.jumlah_tt;
document.getElementById('editStAktif').value = r.st_aktif;
document.getElementById('modalEdit').classList.add('show');
}
function openCreate() {
document.getElementById('createNama').value = '';
document.getElementById('createKapasitas').value = '';
document.getElementById('createKodeKelas').value = '';
document.getElementById('createKodeAplicare').value = '';
document.getElementById('createNamaRuang').value = '';
document.getElementById('modalCreate').classList.add('show');
}
function closeModal(id) {
document.getElementById(id).classList.remove('show');
}
function saveEdit() {
const no = document.getElementById('editNo').value;
const payload = {
kode_kelas: document.getElementById('editKodeKelas').value,
kode_aplicare: document.getElementById('editKodeAplicare').value.trim(),
nama_ruang: document.getElementById('editNamaRuang').value.trim(),
jumlah_tt: parseInt(document.getElementById('editKapasitas').value) || 0,
st_aktif: parseInt(document.getElementById('editStAktif').value)
};
if (!payload.kode_kelas || !payload.kode_aplicare) {
showToast('Kode Kelas dan Kode BPJS wajib diisi!', false);
return;
}
fetch('/api/v1/admin/aplicares/ruangan/' + no, {
method: 'PUT', headers: {'Content-Type':'application/json'},
body: JSON.stringify(payload)
}).then(r => r.json()).then(d => {
if (d.error) { showToast('Gagal: ' + d.error, false); return; }
showToast('Berhasil disimpan!', true);
closeModal('modalEdit');
setTimeout(() => location.reload(), 1000);
}).catch(() => showToast('Gagal konek ke server', false));
}
function saveCreate() {
const payload = {
nama: document.getElementById('createNama').value.trim(),
jumlah_tt: parseInt(document.getElementById('createKapasitas').value) || 0,
kode_kelas: document.getElementById('createKodeKelas').value,
kode_aplicare: document.getElementById('createKodeAplicare').value.trim(),
nama_ruang: document.getElementById('createNamaRuang').value.trim()
};
if (!payload.nama || !payload.kode_kelas || !payload.kode_aplicare) {
showToast('Field wajib belum diisi!', false);
return;
}
fetch('/api/v1/admin/aplicares/ruangan', {
method: 'POST', headers: {'Content-Type':'application/json'},
body: JSON.stringify(payload)
}).then(r => r.json()).then(d => {
if (d.error) { showToast('Gagal: ' + d.error, false); return; }
showToast('Ruangan berhasil ditambahkan!', true);
closeModal('modalCreate');
setTimeout(() => location.reload(), 1000);
}).catch(() => showToast('Gagal konek ke server', false));
}
function showToast(msg, ok) {
const t = document.getElementById('toast');
t.textContent = msg;
t.className = 'toast show ' + (ok ? 'toast-ok' : 'toast-err');
setTimeout(() => t.className = 'toast', 3000);
}
// Tutup modal klik luar
document.querySelectorAll('.modal-overlay').forEach(el => {
el.addEventListener('click', e => { if (e.target === el) el.classList.remove('show'); });
});
init();
</script>
</body>
</html>`
c.Header("Content-Type", "text/html; charset=utf-8")
c.String(http.StatusOK, html)
}
func kelasOptions() string {
opts := `<option value="">-- Pilih Kelas --</option>
<option value="NON">NON — -</option>
<option value="VVP">VVP — VVIP</option>
<option value="VIP">VIP — VIP</option>
<option value="UTM">UTM — UTAMA</option>
<option value="KL1">KL1 — KELAS I</option>
<option value="KL2">KL2 — KELAS II</option>
<option value="KL3">KL3 — KELAS III</option>
<option value="ICU">ICU — ICU</option>
<option value="ICC">ICC — ICCU</option>
<option value="NIC">NIC — NICU</option>
<option value="PIC">PIC — PICU</option>
<option value="IGD">IGD — IGD</option>
<option value="UGD">UGD — UGD</option>
<option value="SAL">SAL — RUANG BERSALIN</option>
<option value="HCU">HCU — HCU</option>
<option value="ISO">ISO — RUANG ISOLASI</option>`
return opts
}
// GetRuangan — GET /api/v1/admin/aplicares/ruangan (JSON)
func (h *AdminHandler) GetRuangan(c *gin.Context) {
ctx, cancel := context.WithTimeout(c.Request.Context(), 30*time.Second)
defer cancel()
ruangans, err := h.getRuangan(ctx)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
type Resp struct {
No int `json:"no"`
Nama string `json:"nama"`
JumlahTT int `json:"jumlah_tt"`
KodeKelas string `json:"kode_kelas"`
KodeAplicare string `json:"kode_aplicare"`
NamaRuang string `json:"nama_ruang"`
SudahMapping bool `json:"sudah_mapping"`
}
var data []Resp
belum := 0
for _, r := range ruangans {
sudah := r.KodeKelas.Valid && r.KodeKelas.String != "" &&
r.KodeAplicare.Valid && r.KodeAplicare.String != ""
if !sudah {
belum++
}
data = append(data, Resp{
No: r.No, Nama: r.Nama, JumlahTT: r.JumlahTT,
KodeKelas: r.KodeKelas.String, KodeAplicare: r.KodeAplicare.String,
NamaRuang: r.NamaRuang.String, SudahMapping: sudah,
})
}
c.JSON(http.StatusOK, gin.H{
"total": len(data), "belum_mapping": belum,
"sudah_mapping": len(data) - belum, "data": data,
})
}
// UpdateRuangan — PUT /api/v1/admin/aplicares/ruangan/:no
func (h *AdminHandler) UpdateRuangan(c *gin.Context) {
no, err := strconv.Atoi(c.Param("no"))
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "no tidak valid"})
return
}
var body struct {
KodeKelas string `json:"kode_kelas"`
KodeAplicare string `json:"kode_aplicare"`
NamaRuang string `json:"nama_ruang"`
JumlahTT int `json:"jumlah_tt"`
StAktif int `json:"st_aktif"`
}
if err := c.ShouldBindJSON(&body); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
if body.KodeKelas == "" || body.KodeAplicare == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "kode_kelas dan kode_aplicare wajib diisi"})
return
}
db, err := h.db.GetDB("simrs")
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "koneksi DB gagal"})
return
}
ctx, cancel := context.WithTimeout(c.Request.Context(), 10*time.Second)
defer cancel()
result, err := db.ExecContext(ctx, `
UPDATE m_ruang SET kode_kelas=$1, kode_aplicare=$2, nama_ruang=$3, jumlah_tt=$4, st_aktif=$5 WHERE no=$6
`, body.KodeKelas, body.KodeAplicare, body.NamaRuang, body.JumlahTT, body.StAktif, no)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "update gagal: " + err.Error()})
return
}
rowsAffected, _ := result.RowsAffected()
if rowsAffected == 0 {
c.JSON(http.StatusOK, gin.H{"error": "tidak ada row yang terupdate, no=" + fmt.Sprintf("%d", no)})
return
}
c.JSON(http.StatusOK, gin.H{"message": "berhasil diupdate", "no": no, "rows_affected": rowsAffected})
}
// CreateRuangan — POST /api/v1/admin/aplicares/ruangan
func (h *AdminHandler) CreateRuangan(c *gin.Context) {
var body struct {
Nama string `json:"nama"`
JumlahTT int `json:"jumlah_tt"`
KodeKelas string `json:"kode_kelas"`
KodeAplicare string `json:"kode_aplicare"`
NamaRuang string `json:"nama_ruang"`
}
if err := c.ShouldBindJSON(&body); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
if body.Nama == "" || body.KodeKelas == "" || body.KodeAplicare == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "nama, kode_kelas, kode_aplicare wajib diisi"})
return
}
db, err := h.db.GetDB("simrs")
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "koneksi DB gagal"})
return
}
ctx, cancel := context.WithTimeout(c.Request.Context(), 10*time.Second)
defer cancel()
// Auto generate no = MAX(no) + 1
var maxNo int
err = db.QueryRowContext(ctx, `SELECT COALESCE(MAX(no), 0) FROM m_ruang`).Scan(&maxNo)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "gagal generate no: " + err.Error()})
return
}
newNo := maxNo + 1
_, err = db.ExecContext(ctx, `
INSERT INTO m_ruang (no, nama, jumlah_tt, subsistem, st_aktif, kode_kelas, kode_aplicare, nama_ruang)
VALUES ($1, $2, $3, 'RAWAT INAP', 1, $4, $5, $6)
`, newNo, body.Nama, body.JumlahTT, body.KodeKelas, body.KodeAplicare, body.NamaRuang)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "insert gagal: " + err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"message": "ruangan berhasil ditambahkan", "no": newNo})
}
+13
View File
@@ -1,6 +1,7 @@
package v1
import (
"api-service/internal/admin"
AplicareHandler "api-service/internal/aplicare"
"api-service/internal/config"
"api-service/internal/database"
@@ -145,6 +146,18 @@ func RegisterRoutes(cfg *config.Config) *gin.Engine {
ag.GET("/logs", aplicaresHandler.GetSyncLogs)
}
adminHandler := admin.NewAdminHandler(admin.AdminHandlerConfig{
Config: cfg,
})
adminGroup := v1.Group("/admin/aplicares")
{
adminGroup.GET("/ruangan", adminHandler.GetRuangan) // JSON API
adminGroup.PUT("/ruangan/:no", adminHandler.UpdateRuangan) // update mapping
adminGroup.POST("/ruangan", adminHandler.CreateRuangan)
}
router.GET("/admin", adminHandler.GetPage)
// =============================================================================
// PROTECTED ROUTES (Authentication Required)
// =============================================================================
+39
View File
@@ -0,0 +1,39 @@
package ruang
import (
"context"
"fmt"
)
func (s *SimrsDB) GetMRuangan(ctx context.Context) ([]Ruangan, error) {
db, err := s.db.GetDB("simrs")
if err != nil {
return nil, fmt.Errorf("koneksi simrs gagal: %w", err)
}
query := `
SELECT no, nama, jumlah_tt,kode_aplicare, nama_ruang, kode_kelas
FROM m_ruang
where st_aktif = 1
ORDER BY no
`
rows, err := db.QueryContext(ctx, query)
if err != nil {
return nil, fmt.Errorf("query m_ruang gagal: %w", err)
}
defer rows.Close()
var result []Ruangan
for rows.Next() {
var r Ruangan
if err := rows.Scan(
&r.No, &r.Nama, &r.JumlahTT,
&r.KodeRuang, &r.NamaRuang, &r.KelasRuang,
); err != nil {
return nil, fmt.Errorf("scan m_ruang gagal: %w", err)
}
result = append(result, r)
}
return result, rows.Err()
}
+12
View File
@@ -0,0 +1,12 @@
package ruang
import "database/sql"
type Ruangan struct {
No int `db:"no"`
Nama string `db:"nama"`
JumlahTT int `db:"jumlah_tt"`
KodeRuang sql.NullString `db:"kode_aplicare"` // diisi manual, dikirim ke BPJS
NamaRuang sql.NullString `db:"nama_ruang"` // diisi manual, dikirim ke BPJS
KelasRuang sql.NullString `db:"kode_kelas"` // diisi manual, dikirim ke BPJS
}
+44
View File
@@ -0,0 +1,44 @@
package ruang
import (
"api-service/internal/config"
"api-service/internal/database"
"api-service/pkg/logger"
"context"
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
"net/http"
"sync"
"time"
)
type MruangHandler struct {
simrs *SimrsDB
validator *validator.Validate
logger logger.Logger
cfg *config.Config
once sync.Once
interval time.Duration
}
type MruangHandlerConfig struct {
Config *config.Config
Logger logger.Logger
Validator *validator.Validate
}
type SimrsDB struct {
db database.Service
}
func (h *MruangHandler) NewMruangHandler(c *gin.Context) {
ctx, cancel := context.WithTimeout(c.Request.Context(), 120*time.Second)
defer cancel()
ruangans, err := h.simrs.GetMRuangan(ctx)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, ruangans)
}
+740
View File
@@ -772,3 +772,743 @@
{"timestamp":"2026-04-23T02:01:26Z","kode_ruang":"TOIB1","nama_ruang":"RUANG TOBA (IBU) KELAS 1","kode_kelas":"KL1","kapasitas":10,"tersedia":4,"action":"post","status":"sukses","response_ms":1125}
{"timestamp":"2026-04-23T02:01:27Z","kode_ruang":"RSING3","nama_ruang":"RUANG SINGKARAK KELAS 3","kode_kelas":"KL3","kapasitas":30,"tersedia":10,"action":"post","status":"sukses","response_ms":765}
{"action":"batch_sync","changed":2,"dry_run":false,"errors":null,"posted":2,"status":"sukses","timestamp":"2026-04-23T02:01:27Z","total_rooms":58}
{"action":"batch_sync","changed":40,"dry_run":true,"errors":null,"posted":40,"status":"sukses","timestamp":"2026-05-11T10:23:47+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T10:28:47+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T10:33:47+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T10:38:47+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T10:43:47+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T10:48:47+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T10:53:47+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T10:58:47+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:03:47+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:08:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:13:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:18:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:23:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:28:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:33:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:38:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:43:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:48:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:53:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T11:58:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:03:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:08:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:13:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:18:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:23:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:28:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:33:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:38:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:43:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:48:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:53:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T12:58:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:03:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:08:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:13:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:18:11+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:21:13+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:24:56+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:29:56+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:34:21+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:38:38+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:40:30+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:42:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:47:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:52:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T13:57:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:02:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:07:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:12:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:17:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:22:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:27:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:32:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:37:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:42:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:47:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:52:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T14:57:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:02:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:07:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:12:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:17:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:22:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:27:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:32:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:37:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:42:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:47:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:52:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T15:57:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:02:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:07:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:12:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:17:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:22:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:27:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:32:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:37:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:42:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:47:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:52:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T16:57:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:02:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:07:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:12:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:17:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:22:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:27:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:32:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:37:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:42:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:47:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:52:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T17:57:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:02:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:07:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:12:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:17:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:22:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:27:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:32:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:37:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:42:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:47:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:52:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T18:57:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:02:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:07:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:12:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:17:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:22:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:27:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:32:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:37:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:42:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:47:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:52:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T19:57:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:02:58+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T20:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T21:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T22:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-11T23:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T00:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T01:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T02:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T03:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T04:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T05:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T06:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T07:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T08:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T09:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T10:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T11:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T12:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T13:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T14:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T15:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T16:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T17:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:43:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:48:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:53:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T18:58:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:03:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:08:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:13:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:18:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:23:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:28:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:33:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:38:00+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:43:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:48:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:53:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T19:58:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:03:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:08:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:13:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:18:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:23:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:28:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:33:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:38:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:43:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:48:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:53:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T20:58:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:03:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:08:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:13:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:18:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:23:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:28:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:33:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:38:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:43:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:48:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:53:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T21:58:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:03:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:08:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:13:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:18:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:23:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:28:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:33:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:38:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:43:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:48:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:53:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T22:58:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:03:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:08:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:13:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:18:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:23:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:28:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:33:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:38:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:43:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:48:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:53:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-12T23:58:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:03:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:08:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:13:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:18:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:23:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:28:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:33:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:38:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:43:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:48:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:53:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T00:58:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:03:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:08:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:13:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:18:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:23:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:28:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:33:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:38:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:43:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:48:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:53:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T01:58:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:03:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:08:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:13:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:18:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:23:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:28:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:33:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:38:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:43:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:48:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:53:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T02:58:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:03:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:08:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:13:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:18:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:23:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:28:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:33:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:38:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:43:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:48:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:53:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T03:58:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:03:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:08:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:13:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:18:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:23:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:28:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:33:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:38:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:43:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:48:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:53:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T04:58:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:03:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:08:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:13:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:18:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:23:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:28:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:33:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:38:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:43:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:48:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:53:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T05:58:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:03:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:08:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:13:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:18:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:23:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:28:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:33:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:38:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:43:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:48:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:53:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T06:58:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:03:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:08:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:13:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:18:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:23:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:28:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:33:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:38:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:43:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:48:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:53:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T07:58:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:03:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:08:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:13:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:18:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:23:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:28:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:33:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:38:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:43:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:48:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:53:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T08:58:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:03:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:08:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:13:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:18:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:23:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:28:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:33:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:38:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:43:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:48:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:53:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T09:58:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:03:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:08:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:13:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:18:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:23:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:28:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:33:02+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:38:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:43:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:48:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:53:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T10:58:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:03:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:08:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:13:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:18:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:23:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:28:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:33:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:38:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:43:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:48:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:53:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T11:58:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:03:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:08:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:13:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:18:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:23:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:28:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:33:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:38:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:43:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:48:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:53:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T12:58:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:03:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:08:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:13:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:18:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:23:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:28:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:33:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:38:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:43:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:48:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:53:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T13:58:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:03:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:08:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:13:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:18:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:23:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:28:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:33:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:38:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:43:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:48:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:53:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T14:58:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:03:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:08:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:13:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:18:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:23:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:28:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:33:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:38:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:43:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:48:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:53:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T15:58:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:03:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:08:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:13:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:18:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:23:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:28:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:33:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:38:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:43:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:48:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:53:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T16:58:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:03:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:08:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:13:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:18:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:23:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:28:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:33:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:38:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:43:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:48:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:53:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T17:58:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T18:03:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T18:08:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T18:13:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T18:18:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T18:23:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-13T18:28:03+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-18T08:56:20+07:00","total_rooms":46}
{"action":"batch_sync","changed":1,"dry_run":true,"errors":null,"posted":1,"status":"sukses","timestamp":"2026-05-18T09:01:20+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-18T09:22:49+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-18T09:27:49+07:00","total_rooms":46}
{"action":"batch_sync","changed":0,"dry_run":true,"errors":null,"posted":0,"status":"sukses","timestamp":"2026-05-18T09:32:02+07:00","total_rooms":46}
{"timestamp":"2026-05-18T02:35:37Z","kode_ruang":"IMEL1","nama_ruang":"RUANG ICU INFEKSI MELATI","kode_kelas":"ISO","kapasitas":6,"tersedia":1,"action":"post","status":"sukses","response_ms":5213}
{"timestamp":"2026-05-18T02:35:38Z","kode_ruang":"BUNA2","nama_ruang":"RUANG BUNAKEN KELAS 2","kode_kelas":"KL2","kapasitas":6,"tersedia":3,"action":"post","status":"sukses","response_ms":496}
{"timestamp":"2026-05-18T02:35:38Z","kode_ruang":"BUNA3","nama_ruang":"RUANG BUNAKEN KELAS 3","kode_kelas":"KL3","kapasitas":16,"tersedia":7,"action":"post","status":"sukses","response_ms":518}
{"timestamp":"2026-05-18T02:35:39Z","kode_ruang":"GILI1","nama_ruang":"RUANG GILI TRAWANGAN KELAS 1","kode_kelas":"KL1","kapasitas":2,"action":"post","status":"sukses","response_ms":460}
{"timestamp":"2026-05-18T02:35:39Z","kode_ruang":"GILI3","nama_ruang":"RUANG GILI TRAWANGAN KELAS 3","kode_kelas":"KL3","kapasitas":9,"tersedia":1,"action":"post","status":"sukses","response_ms":524}
{"timestamp":"2026-05-18T02:35:40Z","kode_ruang":"MAHA2","nama_ruang":"RUANG HCU MAHAKAM","kode_kelas":"HCU","kapasitas":20,"tersedia":8,"action":"post","status":"sukses","response_ms":908}
{"timestamp":"2026-05-18T02:35:41Z","kode_ruang":"BRAN2","nama_ruang":"RUANG HCU BRANTAS","kode_kelas":"HCU","kapasitas":9,"tersedia":2,"action":"post","status":"sukses","response_ms":853}
{"timestamp":"2026-05-18T02:35:41Z","kode_ruang":"PANG3","nama_ruang":"RUANG PANGANDARAN","kode_kelas":"KL3","kapasitas":35,"tersedia":3,"action":"post","status":"sukses","response_ms":461}
{"timestamp":"2026-05-18T02:35:42Z","kode_ruang":"PARA3","nama_ruang":"RUANG PARANGTRITIS","kode_kelas":"KL3","kapasitas":30,"tersedia":6,"action":"post","status":"sukses","response_ms":474}
{"timestamp":"2026-05-18T02:35:43Z","kode_ruang":"LOSA3","nama_ruang":"RUANG LOSARI KELAS 3","kode_kelas":"KL3","kapasitas":14,"tersedia":1,"action":"post","status":"sukses","response_ms":957}
{"timestamp":"2026-05-18T02:35:44Z","kode_ruang":"BROM3","nama_ruang":"RUANG BROMO KELAS 3","kode_kelas":"KL3","kapasitas":42,"tersedia":12,"action":"post","status":"sukses","response_ms":873}
{"timestamp":"2026-05-18T02:35:44Z","kode_ruang":"RINJ1","nama_ruang":"RUANG RINJANI KELAS 1","kode_kelas":"KL1","kapasitas":2,"action":"post","status":"sukses","response_ms":882}
{"timestamp":"2026-05-18T02:35:45Z","kode_ruang":"RINJ3","nama_ruang":"RUANG RINJANI KELAS 3","kode_kelas":"KL3","kapasitas":18,"tersedia":9,"action":"post","status":"sukses","response_ms":893}
{"timestamp":"2026-05-18T02:35:46Z","kode_ruang":"GALG3","nama_ruang":"RUANG GALUNGGUNG KELAS 3","kode_kelas":"KL3","kapasitas":16,"tersedia":1,"action":"post","status":"sukses","response_ms":518}
{"timestamp":"2026-05-18T02:35:47Z","kode_ruang":"RANKB3","nama_ruang":"RUANG RANU KUMBOLO (BAYI) KELAS 3","kode_kelas":"KL3","kapasitas":1,"tersedia":1,"action":"post","status":"sukses","response_ms":743}
{"timestamp":"2026-05-18T02:35:47Z","kode_ruang":"KELI1","nama_ruang":"RUANG KELIMUTU KELAS 1","kode_kelas":"KL1","kapasitas":16,"tersedia":7,"action":"post","status":"sukses","response_ms":664}
{"timestamp":"2026-05-18T02:35:48Z","kode_ruang":"KELI2","nama_ruang":"RUANG KELIMUTU KELAS 2","kode_kelas":"KL2","kapasitas":8,"tersedia":4,"action":"post","status":"sukses","response_ms":347}
{"timestamp":"2026-05-18T02:35:48Z","kode_ruang":"SARA2","nama_ruang":"RUANG HCU SARANGAN","kode_kelas":"HCU","kapasitas":11,"tersedia":2,"action":"post","status":"sukses","response_ms":505}
{"timestamp":"2026-05-18T02:35:49Z","kode_ruang":"TOND3","nama_ruang":"RUANG TONDANO","kode_kelas":"KL3","kapasitas":50,"tersedia":30,"action":"post","status":"sukses","response_ms":369}
{"timestamp":"2026-05-18T02:35:49Z","kode_ruang":"KRAK1","nama_ruang":"RUANG PICU KRAKATAU","kode_kelas":"PIC","kapasitas":17,"action":"post","status":"sukses","response_ms":424}
{"timestamp":"2026-05-18T02:35:49Z","kode_ruang":"BARIV","nama_ruang":"RUANG BARITO VIP","kode_kelas":"VIP","kapasitas":2,"tersedia":1,"action":"post","status":"sukses","response_ms":506}
{"timestamp":"2026-05-18T02:35:50Z","kode_ruang":"MUSI1","nama_ruang":"RUANG CVCU MUSI","kode_kelas":"ICC","kapasitas":13,"tersedia":2,"action":"post","status":"sukses","response_ms":430}
{"timestamp":"2026-05-18T02:35:51Z","kode_ruang":"BARI1","nama_ruang":"RUANG BARITO KELAS 1","kode_kelas":"KL1","kapasitas":6,"action":"post","status":"sukses","response_ms":688}
{"timestamp":"2026-05-18T02:35:51Z","kode_ruang":"TOIB1","nama_ruang":"RUANG TOBA (IBU) KELAS 1","kode_kelas":"KL1","kapasitas":10,"tersedia":5,"action":"post","status":"sukses","response_ms":535}
{"timestamp":"2026-05-18T02:35:52Z","kode_ruang":"BARI2","nama_ruang":"RUANG BARITO KELAS 2","kode_kelas":"KL2","kapasitas":4,"tersedia":4,"action":"post","status":"sukses","response_ms":660}
{"timestamp":"2026-05-18T02:35:52Z","kode_ruang":"BARI3","nama_ruang":"RUANG BARITO KELAS 3","kode_kelas":"KL3","kapasitas":11,"tersedia":1,"action":"post","status":"sukses","response_ms":385}
{"timestamp":"2026-05-18T02:35:53Z","kode_ruang":"TOBA1","nama_ruang":"RUANG TOBA (BAYI) KELAS 1","kode_kelas":"KL1","kapasitas":1,"tersedia":1,"action":"post","status":"sukses","response_ms":380}
{"timestamp":"2026-05-18T02:35:53Z","kode_ruang":"CISA2","nama_ruang":"RUANG HCU CISADANE","kode_kelas":"HCU","kapasitas":40,"tersedia":11,"action":"post","status":"sukses","response_ms":359}
{"timestamp":"2026-05-18T02:35:53Z","kode_ruang":"SEME3","nama_ruang":"RUANG SEMERU","kode_kelas":"KL3","kapasitas":43,"tersedia":34,"action":"post","status":"sukses","response_ms":396}
{"timestamp":"2026-05-18T02:35:54Z","kode_ruang":"RANU2","nama_ruang":"RUANG HCU RANU GRATI","kode_kelas":"HCU","kapasitas":8,"tersedia":4,"action":"post","status":"sukses","response_ms":349}
{"timestamp":"2026-05-18T02:35:54Z","kode_ruang":"TOIB2","nama_ruang":"RUANG TOBA (IBU) KELAS 2","kode_kelas":"KL2","kapasitas":8,"tersedia":4,"action":"post","status":"sukses","response_ms":404}
{"timestamp":"2026-05-18T02:35:55Z","kode_ruang":"KAPA1","nama_ruang":"RUANG ICU KAPUAS A","kode_kelas":"ICU","kapasitas":16,"tersedia":3,"action":"post","status":"sukses","response_ms":652}
{"timestamp":"2026-05-18T02:35:55Z","kode_ruang":"KAPB1","nama_ruang":"RUANG ICU KAPUAS B","kode_kelas":"ICU","kapasitas":9,"tersedia":1,"action":"post","status":"sukses","response_ms":407}
{"timestamp":"2026-05-18T02:35:56Z","kode_ruang":"HMEL1","nama_ruang":"RUANG HCU INFEKSI MELATI","kode_kelas":"ISO","kapasitas":8,"tersedia":7,"action":"post","status":"sukses","response_ms":400}
{"timestamp":"2026-05-18T02:35:56Z","kode_ruang":"BUGV3","nama_ruang":"RUANG BUGENVILE KELAS 3","kode_kelas":"ISO","kapasitas":20,"tersedia":10,"action":"post","status":"sukses","response_ms":403}
{"timestamp":"2026-05-18T02:35:56Z","kode_ruang":"KAPC1","nama_ruang":"RUANG ICU KAPUAS C KELAS 1","kode_kelas":"ICU","kapasitas":14,"tersedia":3,"action":"post","status":"sukses","response_ms":413}
{"timestamp":"2026-05-18T02:35:57Z","kode_ruang":"DAHL1","nama_ruang":"RUANG DAHLIA KELAS 1","kode_kelas":"KL1","kapasitas":38,"tersedia":26,"action":"post","status":"sukses","response_ms":533}
{"timestamp":"2026-05-18T02:35:58Z","kode_ruang":"MWAR1","nama_ruang":"RUANG MAWAR KELAS 1","kode_kelas":"KL1","kapasitas":30,"tersedia":15,"action":"post","status":"sukses","response_ms":744}
{"timestamp":"2026-05-18T02:35:58Z","kode_ruang":"JIMB2","nama_ruang":"RUANG JIMBARAN KELAS 2","kode_kelas":"KL2","kapasitas":28,"tersedia":14,"action":"post","status":"sukses","response_ms":344}
{"timestamp":"2026-05-18T02:35:58Z","kode_ruang":"KERC2","nama_ruang":"RUANG KERINCI KELAS 2","kode_kelas":"KL2","kapasitas":8,"tersedia":2,"action":"post","status":"sukses","response_ms":408}
{"timestamp":"2026-05-18T02:35:59Z","kode_ruang":"KERC3","nama_ruang":"RUANG KERINCI KELAS 3","kode_kelas":"KL3","kapasitas":18,"action":"post","status":"sukses","response_ms":484}
{"timestamp":"2026-05-18T02:35:59Z","kode_ruang":"RANU3","nama_ruang":"RUANG RANU KUMBOLO KELAS 3","kode_kelas":"KL3","kapasitas":18,"tersedia":12,"action":"post","status":"sukses","response_ms":365}
{"timestamp":"2026-05-18T02:36:00Z","kode_ruang":"ROE2","nama_ruang":"RUANG ROE KELAS 2","kode_kelas":"KL2","kapasitas":10,"tersedia":9,"action":"post","status":"sukses","response_ms":493}
{"timestamp":"2026-05-18T02:36:01Z","kode_ruang":"RGPLT3","nama_ruang":"RUANG GRAND PAV LANTAI 3 KELAS VIP A","kode_kelas":"VIP","kapasitas":24,"tersedia":15,"action":"post","status":"sukses","response_ms":893}
{"timestamp":"2026-05-18T02:36:02Z","kode_ruang":"RNS1","nama_ruang":"RUANG NUSA DUA KELAS 1","kode_kelas":"KL1","kapasitas":20,"tersedia":10,"action":"post","status":"sukses","response_ms":941}
{"timestamp":"2026-05-18T02:36:03Z","kode_ruang":"RHCKW2","nama_ruang":"RUANG HCU KAWI KELAS 2","kode_kelas":"HCU","kapasitas":9,"tersedia":3,"action":"post","status":"sukses","response_ms":1003}
{"timestamp":"2026-05-18T02:36:03Z","kode_ruang":"RTOBY2","nama_ruang":"RUANG TOBA (BAYI) KELAS 2","kode_kelas":"KL2","kapasitas":1,"tersedia":1,"action":"post","status":"sukses","response_ms":530}
{"timestamp":"2026-05-18T02:36:04Z","kode_ruang":"RSING3","nama_ruang":"RUANG SINGKARAK KELAS 3","kode_kelas":"KL3","kapasitas":30,"tersedia":26,"action":"post","status":"sukses","response_ms":1016}
{"timestamp":"2026-05-18T02:36:05Z","kode_ruang":"RHRP3","nama_ruang":"RUANG HCU RANU PANE KELAS 2","kode_kelas":"HCU","kapasitas":38,"tersedia":26,"action":"post","status":"sukses","response_ms":873}
{"timestamp":"2026-05-18T02:36:06Z","kode_ruang":"RNICU1","nama_ruang":"RUANG NICU MANINJAU KELAS 1","kode_kelas":"NIC","kapasitas":12,"action":"post","status":"sukses","response_ms":1138}
{"timestamp":"2026-05-18T02:36:07Z","kode_ruang":"RGPLT21","nama_ruang":"RUANG GRAND PAV LANTAI 2 KELAS 1","kode_kelas":"KL1","kapasitas":12,"tersedia":7,"action":"post","status":"sukses","response_ms":940}
{"timestamp":"2026-05-18T02:36:08Z","kode_ruang":"RGPLT7VIP","nama_ruang":"RUANG GRAND PAV LANTAI 7 KELAS VIP","kode_kelas":"VIP","kapasitas":3,"tersedia":2,"action":"post","status":"sukses","response_ms":981}
{"timestamp":"2026-05-18T02:36:09Z","kode_ruang":"RGPLT2VIP","nama_ruang":"RUANG GRAND PAV LANTAI 2 KELAS VIP","kode_kelas":"VIP","kapasitas":5,"tersedia":5,"action":"post","status":"sukses","response_ms":878}
{"action":"batch_sync","changed":53,"dry_run":false,"errors":null,"posted":53,"status":"sukses","timestamp":"2026-05-18T02:36:09Z","total_rooms":57}
{"action":"batch_sync","changed":1,"dry_run":true,"errors":null,"posted":1,"status":"sukses","timestamp":"2026-05-18T02:36:40Z","total_rooms":57}
{"action":"batch_sync","changed":9,"dry_run":true,"errors":null,"posted":9,"status":"sukses","timestamp":"2026-05-18T02:52:15Z","total_rooms":57}
{"action":"batch_sync","changed":2,"dry_run":true,"errors":null,"posted":2,"status":"sukses","timestamp":"2026-05-18T02:57:15Z","total_rooms":57}
{"action":"batch_sync","changed":4,"dry_run":true,"errors":null,"posted":4,"status":"sukses","timestamp":"2026-05-18T03:02:15Z","total_rooms":57}
{"action":"batch_sync","changed":4,"dry_run":true,"errors":null,"posted":4,"status":"sukses","timestamp":"2026-05-18T03:15:28Z","total_rooms":57}