Pull Request untuk Issue Penambahan fitur Logi Aktivitas #1324
Dokumentasi Fitur Log Aktivitas OpenDK
Overview
Fitur Log Aktivitas OpenDK menggunakan package Spatie Activity Log untuk mencatat semua aktivitas pengguna dalam sistem. Fitur ini memungkinkan administrator untuk memantau dan melacak semua perubahan yang terjadi dalam aplikasi.
Fitur Utama
- Tabel Interaktif: Menampilkan semua log aktivitas dengan fitur pencarian, filter, dan pagination.
- Pencatatan Otomatis: Model
User secara otomatis mencatat perubahan (create, update, delete).
- Pencatatan Manual Lengkap: Mencatat aktivitas penting seperti Login, Logout, perubahan pengaturan, dan update profil.
- Detail Aktivitas: Modal detail menampilkan informasi lengkap termasuk IP Address, User Agent, dan detail perubahan data (jika ada).
Implementasi Teknis
Best Practice Pencatatan Log
Struktur ideal untuk mencatat log secara manual adalah sebagai berikut:
activity()
->causedBy(auth()->user()) // Siapa yang melakukan (Pengguna)
->performedOn($model) // Apa yang diubah (Subject)
->event('updated') // Aksi apa (Event)
->withProperties($data) // Data tambahan (opsional)
->log('Deskripsi...'); // Deskripsi aktivitas
Contoh Implementasi di Controller
LoginController (authenticated & logout)
// Login Berhasil
activity()
->causedBy($user)
->performedOn($user)
->event('login')
->log('Pengguna berhasil masuk ke sistem');
// Logout
activity()
->causedBy(auth()->user())
->performedOn(auth()->user())
->event('logout')
->log('Pengguna keluar dari sistem');
UserController (store & update)
// Membuat Pengguna
activity()
->causedBy(auth()->user())
->performedOn($user)
->event('created')
->withProperties(['roles' => $roles])
->log("Membuat pengguna baru: {$user->name}");
// Mengubah Pengguna
activity()
->causedBy(auth()->user())
->performedOn($user)
->event('updated')
->withProperties(['roles' => $roles])
->log("Mengubah data pengguna: {$user->name}");
Frontend
Urutan Pemuatan Script
Untuk menghindari error JavaScript, semua script custom untuk halaman ini harus dimuat di dalam @push('scripts') agar dieksekusi setelah jQuery dan DataTables siap.
{{-- di activity-logs.blade.php --}}
@push('scripts')
<script>
$(document).ready(function() {
// Kode DataTables di sini
});
</script>
@endpush
Modal Detail
Modal detail akan menampilkan data dari server, termasuk ip_address dan user_agent yang diambil dari kolom properties pada log.
Troubleshooting
Berikut adalah beberapa masalah umum yang mungkin terjadi dan solusinya.
-
Masalah: Tabel log aktivitas kosong dan di console muncul error Uncaught TypeError: $ is not a function.
- Penyebab: Script DataTables dieksekusi sebelum library jQuery selesai dimuat.
- Solusi: Pindahkan semua kode JavaScript ke dalam
@push('scripts') di file view Blade.
-
Masalah: Kolom Event atau Subject menampilkan N/A.
- Penyebab: Saat mencatat log, metode
event() atau performedOn() tidak dipanggil.
- Solusi: Pastikan semua panggilan
activity() menyertakan ->event('nama_event') dan ->performedOn($model) jika relevan.
-
Masalah: Saat klik tombol "Detail", muncul error Cannot read properties of undefined (reading 'ip_address').
- Penyebab: Log lama tidak memiliki
properties atau tidak berisi ip_address. Kode JavaScript mencoba membaca properti dari objek yang undefined.
- Solusi: Buat kode JavaScript lebih defensif dengan menambahkan pengecekan:
var properties = response.properties || {};.
-
Masalah: Di console muncul error CORS saat mencoba memuat file Indonesian.json dari CDN.
- Penyebab: Server CDN tidak mengizinkan request dari domain lokal Anda (
opendk.test).
- Solusi: Unduh file
Indonesian.json dan simpan secara lokal di dalam direktori public/, lalu ubah URL di konfigurasi DataTables untuk menunjuk ke file lokal tersebut.
API Endpoints
Get Activity Logs Data
- URL:
GET /setting/info-sistem/activity-logs/data
- Parameters:
action (optional) - Filter by event type
user_id (optional) - Filter by user
date_from (optional) - Start date filter
date_to (optional) - End date filter
Get Activity Log Detail
- URL:
GET /setting/info-sistem/activity-logs/detail/{id}
- Response: JSON dengan detail lengkap log
Maintenance
Performance Considerations
- Indexing: Tabel sudah memiliki index pada kolom penting
- Cleanup: Rutin hapus log lama untuk menjaga performa
- Selective Logging: Hanya log field yang penting
- Batch Operations: Gunakan batch UUID untuk operasi massal
Security
Permission Control
- Hanya user dengan role
super-admin atau administrator-website yang bisa akses
- Middleware protection pada semua route
Data Privacy
- Password tidak pernah di-log
- Sensitive data bisa dikecualikan dari logging
- IP address dan user agent dicatat untuk audit trail
Troubleshooting
Common Issues
-
Log tidak muncul
- Pastikan model menggunakan
LogsActivity trait
- Check
getActivitylogOptions() configuration
- Verify database connection
-
Performance lambat
- Cleanup log lama secara berkala
- Check database indexes
- Optimize query filters
-
Memory issues
- Batasi jumlah data yang di-load
- Gunakan pagination
- Cleanup properties yang tidak perlu
Future Enhancements
- Export Functionality: Export log ke Excel/PDF
- Real-time Notifications: Notifikasi real-time untuk aktivitas penting
- Advanced Filtering: Filter berdasarkan IP, user agent, dll
- Dashboard Analytics: Grafik dan statistik aktivitas
- Automated Cleanup: Cron job untuk cleanup otomatis
Testing
Manual Testing
// Test basic logging
activity()->log('Test message');
// Test with user
activity()
->causedBy(auth()->user())
->log('Test with user');
// Test model changes
$user = User::first();
$user->name = 'Updated Name';
$user->save(); // Should automatically log
Verification
- Check database:
SELECT * FROM activity_log ORDER BY created_at DESC LIMIT 10;
- Access web interface:
http://localhost:8000/setting/info-sistem
- Test filters and search functionality
- Verify modal detail works correctly
Uh oh!
There was an error while loading. Please reload this page.
Pull Request untuk Issue Penambahan fitur Logi Aktivitas #1324
Dokumentasi Fitur Log Aktivitas OpenDK
Overview
Fitur Log Aktivitas OpenDK menggunakan package Spatie Activity Log untuk mencatat semua aktivitas pengguna dalam sistem. Fitur ini memungkinkan administrator untuk memantau dan melacak semua perubahan yang terjadi dalam aplikasi.
Fitur Utama
Usersecara otomatis mencatat perubahan (create, update, delete).Implementasi Teknis
Best Practice Pencatatan Log
Struktur ideal untuk mencatat log secara manual adalah sebagai berikut:
Contoh Implementasi di Controller
LoginController (
authenticated&logout)UserController (
store&update)Frontend
Urutan Pemuatan Script
Untuk menghindari error JavaScript, semua script custom untuk halaman ini harus dimuat di dalam
@push('scripts')agar dieksekusi setelah jQuery dan DataTables siap.Modal Detail
Modal detail akan menampilkan data dari server, termasuk
ip_addressdanuser_agentyang diambil dari kolompropertiespada log.Troubleshooting
Berikut adalah beberapa masalah umum yang mungkin terjadi dan solusinya.
Masalah: Tabel log aktivitas kosong dan di console muncul error
Uncaught TypeError: $ is not a function.@push('scripts')di file view Blade.Masalah: Kolom
EventatauSubjectmenampilkanN/A.event()atauperformedOn()tidak dipanggil.activity()menyertakan->event('nama_event')dan->performedOn($model)jika relevan.Masalah: Saat klik tombol "Detail", muncul error
Cannot read properties of undefined (reading 'ip_address').propertiesatau tidak berisiip_address. Kode JavaScript mencoba membaca properti dari objek yangundefined.var properties = response.properties || {};.Masalah: Di console muncul error CORS saat mencoba memuat file
Indonesian.jsondari CDN.opendk.test).Indonesian.jsondan simpan secara lokal di dalam direktoripublic/, lalu ubah URL di konfigurasi DataTables untuk menunjuk ke file lokal tersebut.API Endpoints
Get Activity Logs Data
GET /setting/info-sistem/activity-logs/dataaction(optional) - Filter by event typeuser_id(optional) - Filter by userdate_from(optional) - Start date filterdate_to(optional) - End date filterGet Activity Log Detail
GET /setting/info-sistem/activity-logs/detail/{id}Maintenance
Performance Considerations
Security
Permission Control
super-adminatauadministrator-websiteyang bisa aksesData Privacy
Troubleshooting
Common Issues
Log tidak muncul
LogsActivitytraitgetActivitylogOptions()configurationPerformance lambat
Memory issues
Future Enhancements
Testing
Manual Testing
Verification
SELECT * FROM activity_log ORDER BY created_at DESC LIMIT 10;http://localhost:8000/setting/info-sistem