Files
ploi-core/app/Http/Controllers/Admin/ApplicationLogController.php
2020-10-20 12:03:44 +02:00

99 lines
2.6 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class ApplicationLogController extends Controller
{
protected $final = [];
protected $config = [
'date' => null
];
public function index(Request $request)
{
$this->config['date'] = date('Y-m-d');
if ($date = $request->input('date')) {
$this->config['date'] = $date;
} else {
$request->merge(['date' => date('Y-m-d')]);
}
return inertia('Admin/ApplicationLogs', [
'logData' => $this->get(),
'filters' => $request->all('date')
]);
}
public function getLogFileDates()
{
$dates = [];
$files = glob(storage_path('logs/laravel-*.log'));
$files = array_reverse($files);
foreach ($files as $path) {
$fileName = basename($path);
preg_match('/(?<=laravel-)(.*)(?=.log)/', $fileName, $dtMatch);
$date = $dtMatch[0];
array_push($dates, $date);
}
return $dates;
}
public function get()
{
$availableDates = $this->getLogFileDates();
if (count($availableDates) == 0) {
return response()->json([
'success' => false,
'message' => 'No log available'
]);
}
$configDate = $this->config['date'];
if ($configDate == null) {
$configDate = $availableDates[0];
}
if (!in_array($configDate, $availableDates)) {
return response()->json([
'success' => false,
'message' => 'No log file found with selected date ' . $configDate
]);
}
$pattern = "/^\[(?<date>.*)\]\s(?<env>\w+)\.(?<type>\w+):(?<message>.*)/m";
$fileName = 'laravel-' . $configDate . '.log';
$content = file_get_contents(storage_path('logs/' . $fileName));
preg_match_all($pattern, $content, $matches, PREG_SET_ORDER, 0);
$logs = [];
foreach ($matches as $match) {
$logs[] = [
'timestamp' => $match['date'],
'env' => $match['env'],
'type' => $match['type'],
'message' => trim($match['message'])
];
}
preg_match('/(?<=laravel-)(.*)(?=.log)/', $fileName, $dtMatch);
$date = $dtMatch[0];
$data = [
'available_dates' => $availableDates,
'date' => $date,
'filename' => $fileName,
'logs' => array_reverse($logs)
];
return $data;
}
}