MIF_E31232465/PERBAIKAN_REALTIME_DATA.md

7.6 KiB

📊 Perbaikan Dashboard Sentimen - Data Realtime

🎯 Ringkasan Perubahan

Semua fungsi di dashboard telah diperbaiki untuk menggunakan data realtime yang dinamis bukan data dummy. Sistem sekarang secara otomatis merefresh data ketika ada perubahan di database dan menampilkan timestamp setiap kali data diupdate.


🔄 Perbaikan Utama

1. Database Functions (database.py)

Ditambahkan helper functions untuk deteksi data baru:

  • get_tweet_count() - Menghitung total tweet di database
  • get_latest_crawl_time() - Mendapatkan waktu crawl terakhir

Fungsi: Digunakan untuk cache invalidation yang akurat

2. Sentiment Analysis Page (page_modules/sentiment_page.py)

Perbaikan Cache:

  • Cache sekarang menggunakan get_tweet_count() bukan len(df)
  • Cache otomatis dihapus saat ada tweet baru
  • Prediksi sentimen direfresh otomatis saat database berubah
  • Session state _last_total_tweets melacak versi database

Timestamp Dinamis:

  • Pie Chart menampilkan waktu update: "Diupdate: DD/MM/YYYY HH:MM:SS"
  • Bar Chart menampilkan waktu update + persentase sentimen
  • Trend Chart menampilkan waktu update realtime
  • Semua metric selalu menampilkan timestamp terkini

Import Baru:

from database import engine, get_tweet_count, get_latest_crawl_time

3. Crawling Page (page_modules/crawling_page.py)

Metrics Update:

  • _render_metrics() sekarang menampilkan timestamp: "🔄 Data diperbarui: DD/MM/YYYY HH:MM:SS"
  • Total tweet, hari, tanggal selalu diambil fresh dari database
  • Setiap kali halaman dimuat, data diambil ulang

4. Preprocessing Page (page_modules/preprocessing_page.py)

Cache Improvement:

  • Cache menggunakan get_tweet_count() untuk invalidation
  • Session state _pp_last_total_tweets melacak versi database
  • Old cache entries otomatis dihapus
  • Preprocessing direfresh saat ada data baru

5. Main App (app.py)

Smart Refresh Interval:

  • Auto-refresh interval dinamis:
    • 30 detik jika ada data baru dalam 5 menit terakhir
    • 60 detik jika tidak ada aktivitas crawler baru
  • Sidebar menampilkan status crawler
  • Sidebar baru: Widget "🔄 Update Terbaru" menampilkan:
    • Tanggal dan waktu update terakhir
    • Format: DD/MM/YYYY HH:MM:SS WIB

Auto-refresh Configuration:

st_autorefresh(
    interval=refresh_interval,  # Dynamic berdasarkan aktivitas
    key="auto_refresh_dashboard"
)

📊 Data Flow Realtime

┌─────────────────────┐
│   Crawler Service   │  ← Data baru setiap N menit
│  (python3 crawler)  │
└──────────┬──────────┘
           │
           ▼
┌─────────────────────┐
│   SQLite Database   │  ← 429+ tweets dengan timestamp
│ (data_sentimen...)  │
└──────────┬──────────┘
           │
     ┌─────┴──────┬────────────┬──────────┐
     ▼            ▼            ▼          ▼
┌──────────┐ ┌─────────┐ ┌──────────┐ ┌────────┐
│Crawling  │ │Preprocess│ │Sentiment │ │Sidebar │
│Page      │ │  Page   │ │  Page    │ │ Info   │
└──────────┘ └─────────┘ └──────────┘ └────────┘
     │            │           │           │
     └────────────┴───────────┴───────────┘
              │
              ▼
    ┌──────────────────────┐
    │ Smart Cache Busting  │
    │ (get_tweet_count)    │
    └──────────────────────┘
              │
              ▼
    ┌──────────────────────┐
    │   Fresh Data Show    │
    │ + Realtime Timestamp │
    └──────────────────────┘

⚙️ Cara Kerja Cache Invalidation

Sebelumnya (Dummy/Stale):

Cache Key = "sent_realtime_2026-05-09_2026-05-09_450"
├─ Bergantung pada `len(df)` - tidak akurat
├─ Jika ada tweet baru tidak terdeteksi
└─ Data lama tetap ditampilkan

Sesudahnya (Realtime & Dynamic):

Cache Key = "sent_realtime_2026-05-09_2026-05-09_429"
├─ Bergantung pada total tweet di database
├─ Saat tweet baru masuk (429 → 430):
│  └─ Cache key berubah otomatis
│  └─ Prediksi sentimen refresh
│  └─ Timestamp diupdate ke waktu terbaru
└─ Data selalu fresh ✓

🔍 Timestamp Ditampilkan Di

  1. Ambil Data Twitter

    • Caption: "🔄 Data diperbarui: DD/MM/YYYY HH:MM:SS"
  2. Bersihkan Data

    • Tidak ada perubahan (inherited dari session state)
  3. Analisis Sentimen

    • Pie Chart: "Diupdate: DD/MM/YYYY HH:MM:SS"
    • Bar Chart: "Diupdate: DD/MM/YYYY HH:MM:SS" + persentase
    • Trend Chart: "Diupdate: DD/MM/YYYY HH:MM:SS"
  4. Sidebar

    • "🔄 Update Terbaru" widget menampilkan waktu crawl terakhir

📈 Data yang Sekarang Realtime

Data Sebelumnya Sesudahnya
Total Tweet Dummy Fresh dari DB
Tanggal Awal Hardcoded Dinamis dari data
Tanggal Akhir Hardcoded Dinamis dari data
Sentimen Positif Cached Recomputed setiap data baru
Sentimen Netral Cached Recomputed setiap data baru
Sentimen Negatif Cached Recomputed setiap data baru
Pie Chart Stale Refresh + Timestamp
Bar Chart Stale Refresh + Timestamp + %
Trend Chart Stale Refresh + Timestamp
Word Cloud Cached Recomputed setiap data baru
Waktu Update Tidak ada Ditampilkan di sidebar

🚀 Cara Menggunakan

1. Jalankan Crawler (di terminal terpisah)

python3 crawler.py

2. Jalankan Dashboard

streamlit run app.py

3. Monitor Data

  • Sidebar menampilkan status crawler dan waktu update terbaru
  • Dashboard auto-refresh setiap 30-60 detik
  • Saat ada data baru, prediksi sentimen otomatis direfresh
  • Timestamp ditampilkan di setiap chart/metric

Verifikasi

Untuk memastikan perbaikan bekerja:

# 1. Check database functions
python3 -c "from database import get_tweet_count, get_latest_crawl_time; print('Count:', get_tweet_count()); print('Latest:', get_latest_crawl_time())"

# 2. Run syntax check
python3 -m py_compile app.py page_modules/*.py

# 3. Start dashboard
streamlit run app.py

📝 File yang Dimodifikasi

  1. database.py - Tambah helper functions
  2. app.py - Smart refresh + sidebar info
  3. page_modules/sentiment_page.py - Cache busting + timestamps
  4. page_modules/crawling_page.py - Metrics timestamp
  5. page_modules/preprocessing_page.py - Cache busting

🎯 Hasil Akhir

SEBELUM:

  • Data dummy / stale
  • Cache tidak pernah di-refresh
  • Timestamp tidak ditampilkan
  • Perlu manual refresh untuk melihat data baru

SESUDAHNYA:

  • Data selalu realtime fresh
  • Cache auto-refresh saat ada data baru
  • Timestamp ditampilkan di semua metric dan chart
  • Auto-refresh setiap 30-60 detik
  • Dashboard responsif terhadap perubahan data

Status: COMPLETED Semua fungsi telah diperbaiki untuk menggunakan data realtime yang dinamis sesuai fungsinya.