Situs ini dikemudikan dua tombol, seperti mesin pemiliknya. Membaca: j dan k menggulir, d dan u setengah layar, gg ke atas, G ke bawah, H dan L pindah jendela, ? membuka panduan. Spasi adalah kunci leader Neovim dan mengurus isi: Spasi lalu h beranda, r riset, p proyek, g gear, a tentang, / tag, atau Spasi lalu angka untuk melompat ke jendela bernomor itu. Home adalah prefix tmux dan mengurus jendela: Home lalu c membuka terminal, Home lalu & menutup jendela, Home lalu spasi ke jendela berikutnya. Saat fokus ada di papan ketik, h j k l memindahkan pilihan antar tombol dan Enter membukanya.

RisetR TentangA Gear — G untuk gear — papan ketik, terminal, editor, homelab.G
    ProyekP Tag — / seperti di vim: cari./
    ×
    Menu

    gostudentubl

    Runner absensi otomatis untuk mata kuliah berbasis Moodle dengan eksekusi terjadwal.

    Ikhtisar

    Runner absensi otomatis untuk mata kuliah berbasis Moodle dengan eksekusi terjadwal.

    Menjalankan Secara Lokal

    1. Salin template environment:

      cp .env.example .env
    2. Isi nilai-nilai yang diperlukan di .env.

    3. Jalankan:

      make run

    Deployment Docker

    Proyek ini berjalan sebagai service Docker berumur panjang (attendance-agent) yang mengeksekusi scheduled jobs secara internal.

    Deploy

    make docker-deploy

    Perintah setara:

    docker compose up -d --build

    Operasional

    AksiPerintah
    Tail logsmake docker-logs
    Restartmake docker-restart
    Stopmake docker-down

    Memicu Manual Run di Dalam Container

    Aplikasi mendengarkan SIGUSR1 dan langsung mengeksekusi attendance run saat menerimanya.

    make docker-signal-run

    Perintah setara:

    docker compose kill -s SIGUSR1 attendance-agent

    Integrasi WhatsApp Lintas Proyek

    Jika wa-bot-notif berjalan sebagai proyek Docker terpisah pada host yang sama, hubungkan kedua stack melalui jaringan eksternal bersama.

    1. Buat jaringan bersama (satu kali saja):

      docker network create homelab_integration
    2. Atur konfigurasi berikut di .env:

      INTEGRATION_NETWORK=homelab_integration
      WA_ENDPOINT=http://wa-bot-notif-api:5000/send

      Sesuaikan WA_ENDPOINT jika wa-bot-notif menggunakan PORT non-default (misalnya 5001).

    3. Jalankan stack wa-bot-notif terlebih dahulu, kemudian stack ini.

    Jangan gunakan localhost untuk panggilan antar-container — selalu gunakan DNS service/container pada jaringan bersama.

    Catatan Operasional

    • Timezone scheduler dikontrol oleh TIMEZONE.
    • Log aplikasi ditulis ke stdout dan ke file app.log yang dirotasi di dalam workdir container (/app).
    • Simpan secrets hanya di .env (sudah diabaikan oleh git).
    • Jalankan hanya satu instance agent kecuali Anda menambahkan distributed locking — jika tidak, attendance job duplikat dapat terjadi.

    Pelacakan Quiz dan Assignment

    Runner melacak metadata assignment/quiz yang lebih kaya dan mengirim notifikasi yang lebih cerdas.

    Fitur

    • Parsing daftar assignment: tanggal jatuh tempo, status submission, dan nilai.
    • Parsing daftar quiz: tanggal penutupan dan nilai.
    • Pipeline fetch halaman detail untuk assignment dan quiz, dengan batas per run.
    • Pengingat deadline pada jendela 24 jam dan 12 jam untuk item yang belum selesai.
    • Pipeline saran AI opsional via OpenRouter untuk tugas yang masih tertunda.

    Environment Variable Terkait

    VariableDefaultCatatan
    DETAIL_FETCH_ENABLEDtrueMengaktifkan atau menonaktifkan fetch halaman detail.
    DETAIL_FETCH_LIMIT10Batas maksimum fetch detail per run.
    OPENROUTER_ENDPOINThttps://openrouter.ai/api/v1/chat/completionsURL chat completions OpenRouter.
    OPENROUTER_API_KEYWajib saat SUGGESTION_ENABLED=true.
    OPENROUTER_MODELanthropic/claude-sonnet-4-20250514Model yang digunakan untuk saran.
    SUGGESTION_ENABLEDfalseMengaktifkan saran AI.
    SUGGESTION_LIMIT5Jumlah maksimum saran per run.

    Mode Periode

    Proyek ini mendukung filter periode dinamis, sehingga update konfigurasi manual bulanan menjadi opsional.

    Mode yang Tersedia

    • PERIODE_MODE=auto (direkomendasikan): menerima bulan berjalan dan bulan berikutnya (MMYY) secara otomatis.
      • Contoh pada Februari 2026: 0226 dan 0326 diterima.
    • PERIODE_MODE=manual: hanya menerima nilai yang tercantum di ALLOWED_PERIODES (dipisahkan koma).
    • PERIODE_MODE=legacy: mempertahankan perilaku kesetaraan CURRENT_PERIODE yang ketat.

    Pengaturan Keamanan

    • MAX_COURSES_PER_RUN: batas keras untuk mencegah over-selection yang tidak disengaja.
      • Setel ke 0 untuk menonaktifkan batas (default).
    id en
    rss gh in