From 0aee1c58ed90314d19dee8036aa9afbe87465a96 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Sun, 27 Apr 2025 09:14:29 +0700 Subject: [PATCH] feat(logs): tambahkan SystemLogsController untuk mengelola log sistem - Menambahkan kelas SystemLogsController untuk menampilkan dan mengelola log sistem. - Mengimplementasikan metode index untuk menampilkan tampilan log. - Menambahkan metode datatable untuk mengelola data log dengan fitur pencarian dan paginasi. - Menggunakan LogReader untuk mengambil dan memfilter data log. --- app/Http/Controllers/SystemLogsController.php | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 app/Http/Controllers/SystemLogsController.php diff --git a/app/Http/Controllers/SystemLogsController.php b/app/Http/Controllers/SystemLogsController.php new file mode 100644 index 0000000..fcd157b --- /dev/null +++ b/app/Http/Controllers/SystemLogsController.php @@ -0,0 +1,79 @@ +reader = $reader; + } + + /** + * Display a listing of the resource. + */ + public function index() + { + return view('logs::system'); + } + + public function datatable(Request $request){ + $data = collect(); + $this->reader->setLogPath(storage_path('logs')); + try { + $data = $this->reader->get()->merge($data); + } catch (UnableToRetrieveLogFilesException $exception) { + echo $exception->getMessage(); + exit; + } + + $data = $data->map(function ($a) { + return (collect($a))->only(['id', 'date', 'environment', 'level', 'file_path', 'context']); + }); + + + // Get pagination parameters from request + $perPage = (int) $request->input('size', 10); + $currentPage = (int) $request->input('page', 1); + $search = $request->input('search', ''); + + // Apply search if provided + if (!empty($search)) { + $data = $data->filter(function ($item) use ($search) { + // Search in relevant fields + return stripos($item['level'], $search) !== false || + stripos($item['environment'], $search) !== false || + stripos($item['id'], $search) !== false || + stripos($item['context'], $search) !== false; + }); + } + + // Get total count before pagination + $totalRecords = $data->count(); + $filteredRecords = $totalRecords; // Same as total if no filtering applied + + // Apply pagination + $offset = ($currentPage - 1) * $perPage; + $data = $data->slice($offset, $perPage)->values(); + + // Calculate page count + $pageCount = ceil($filteredRecords / $perPage); + + return response()->json([ + 'draw' => (int) $request->input('draw', 1), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $filteredRecords, + 'data' => $data, + ]); + } +}