Uploaded From CV. Swandhana Server

This commit is contained in:
Duidev Software House
2025-01-27 08:16:55 +07:00
commit 6b3be42361
15186 changed files with 2328862 additions and 0 deletions
@@ -0,0 +1,312 @@
<?php
declare(strict_types=1);
namespace Arcanedev\LogViewer\Http\Controllers;
use Arcanedev\LogViewer\Contracts\LogViewer as LogViewerContract;
use Arcanedev\LogViewer\Entities\{LogEntry, LogEntryCollection};
use Arcanedev\LogViewer\Exceptions\LogNotFoundException;
use Arcanedev\LogViewer\Tables\StatsTable;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Routing\Controller;
use Illuminate\Support\{Arr, Collection, Str};
/**
* Class LogViewerController
*
* @author ARCANEDEV <[email protected]>
*/
class LogViewerController extends Controller
{
/* -----------------------------------------------------------------
| Properties
| -----------------------------------------------------------------
*/
/**
* The log viewer instance
*
* @var \Arcanedev\LogViewer\Contracts\LogViewer
*/
protected $logViewer;
/** @var int */
protected $perPage = 30;
/** @var string */
protected $showRoute = 'log-viewer::logs.show';
/* -----------------------------------------------------------------
| Constructor
| -----------------------------------------------------------------
*/
/**
* LogViewerController constructor.
*
* @param \Arcanedev\LogViewer\Contracts\LogViewer $logViewer
*/
public function __construct(LogViewerContract $logViewer)
{
$this->logViewer = $logViewer;
$this->perPage = config('log-viewer.per-page', $this->perPage);
$this->showRoute = config('log-viewer.route.show', $this->showRoute);
}
/* -----------------------------------------------------------------
| Main Methods
| -----------------------------------------------------------------
*/
/**
* Show the dashboard.
*
* @return \Illuminate\View\View
*/
public function index()
{
$stats = $this->logViewer->statsTable();
$chartData = $this->prepareChartData($stats);
$percents = $this->calcPercentages($stats->footer(), $stats->header());
return $this->view('dashboard', compact('chartData', 'percents'));
}
/**
* List all logs.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\View\View
*/
public function listLogs(Request $request)
{
$stats = $this->logViewer->statsTable();
$headers = $stats->header();
$rows = $this->paginate($stats->rows(), $request);
return $this->view('logs', compact('headers', 'rows'));
}
/**
* Show the log.
*
* @param \Illuminate\Http\Request $request
* @param string $date
*
* @return \Illuminate\View\View
*/
public function show(Request $request, $date)
{
$level = 'all';
$log = $this->getLogOrFail($date);
$query = $request->get('query');
$levels = $this->logViewer->levelsNames();
$entries = $log->entries($level)->paginate($this->perPage);
return $this->view('show', compact('level', 'log', 'query', 'levels', 'entries'));
}
/**
* Filter the log entries by level.
*
* @param \Illuminate\Http\Request $request
* @param string $date
* @param string $level
*
* @return \Illuminate\View\View|\Illuminate\Http\RedirectResponse
*/
public function showByLevel(Request $request, $date, $level)
{
if ($level === 'all')
return redirect()->route($this->showRoute, [$date]);
$log = $this->getLogOrFail($date);
$query = $request->get('query');
$levels = $this->logViewer->levelsNames();
$entries = $this->logViewer->entries($date, $level)->paginate($this->perPage);
return $this->view('show', compact('level', 'log', 'query', 'levels', 'entries'));
}
/**
* Show the log with the search query.
*
* @param \Illuminate\Http\Request $request
* @param string $date
* @param string $level
*
* @return \Illuminate\View\View|\Illuminate\Http\RedirectResponse
*/
public function search(Request $request, $date, $level = 'all')
{
$query = $request->get('query');
if (is_null($query))
return redirect()->route($this->showRoute, [$date]);
$log = $this->getLogOrFail($date);
$levels = $this->logViewer->levelsNames();
$needles = array_map(function ($needle) {
return Str::lower($needle);
}, array_filter(explode(' ', $query)));
$entries = $log->entries($level)
->unless(empty($needles), function (LogEntryCollection $entries) use ($needles) {
return $entries->filter(function (LogEntry $entry) use ($needles) {
foreach ([$entry->header, $entry->stack, $entry->context()] as $subject) {
if (Str::containsAll(Str::lower($subject), $needles))
return true;
}
return false;
});
})
->paginate($this->perPage);
return $this->view('show', compact('level', 'log', 'query', 'levels', 'entries'));
}
/**
* Download the log
*
* @param string $date
*
* @return \Symfony\Component\HttpFoundation\BinaryFileResponse
*/
public function download($date)
{
return $this->logViewer->download($date);
}
/**
* Delete a log.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\JsonResponse
*/
public function delete(Request $request)
{
abort_unless($request->ajax(), 405, 'Method Not Allowed');
$date = $request->input('date');
return response()->json([
'result' => $this->logViewer->delete($date) ? 'success' : 'error'
]);
}
/* -----------------------------------------------------------------
| Other Methods
| -----------------------------------------------------------------
*/
/**
* Get the evaluated view contents for the given view.
*
* @param string $view
* @param array $data
* @param array $mergeData
*
* @return \Illuminate\View\View
*/
protected function view($view, $data = [], $mergeData = [])
{
$theme = config('log-viewer.theme');
return view()->make("log-viewer::{$theme}.{$view}", $data, $mergeData);
}
/**
* Paginate logs.
*
* @param array $data
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Pagination\LengthAwarePaginator
*/
protected function paginate(array $data, Request $request)
{
$data = new Collection($data);
$page = $request->get('page', 1);
$path = $request->url();
return new LengthAwarePaginator(
$data->forPage($page, $this->perPage),
$data->count(),
$this->perPage,
$page,
compact('path')
);
}
/**
* Get a log or fail
*
* @param string $date
*
* @return \Arcanedev\LogViewer\Entities\Log|null
*/
protected function getLogOrFail($date)
{
$log = null;
try {
$log = $this->logViewer->get($date);
}
catch (LogNotFoundException $e) {
abort(404, $e->getMessage());
}
return $log;
}
/**
* Prepare chart data.
*
* @param \Arcanedev\LogViewer\Tables\StatsTable $stats
*
* @return string
*/
protected function prepareChartData(StatsTable $stats)
{
$totals = $stats->totals()->all();
return json_encode([
'labels' => Arr::pluck($totals, 'label'),
'datasets' => [
[
'data' => Arr::pluck($totals, 'value'),
'backgroundColor' => Arr::pluck($totals, 'color'),
'hoverBackgroundColor' => Arr::pluck($totals, 'highlight'),
],
],
]);
}
/**
* Calculate the percentage.
*
* @param array $total
* @param array $names
*
* @return array
*/
protected function calcPercentages(array $total, array $names)
{
$percents = [];
$all = Arr::get($total, 'all');
foreach ($total as $level => $count) {
$percents[$level] = [
'name' => $names[$level],
'count' => $count,
'percent' => $all ? round(($count / $all) * 100, 2) : 0,
];
}
return $percents;
}
}
@@ -0,0 +1,66 @@
<?php
declare(strict_types=1);
namespace Arcanedev\LogViewer\Http\Routes;
use Arcanedev\LogViewer\Http\Controllers\LogViewerController;
use Arcanedev\Support\Routing\RouteRegistrar;
/**
* Class LogViewerRoute
*
* @author ARCANEDEV <[email protected]>
*/
class LogViewerRoute extends RouteRegistrar
{
/* -----------------------------------------------------------------
| Main Methods
| -----------------------------------------------------------------
*/
/**
* Map all routes.
*/
public function map(): void
{
$attributes = (array) config('log-viewer.route.attributes');
$this->group($attributes, function() {
$this->name('log-viewer::')->group(function () {
$this->get('/', [LogViewerController::class, 'index'])
->name('dashboard'); // log-viewer::dashboard
$this->mapLogsRoutes();
});
});
}
/**
* Map the logs routes.
*/
private function mapLogsRoutes(): void
{
$this->prefix('logs')->name('logs.')->group(function() {
$this->get('/', [LogViewerController::class, 'listLogs'])
->name('list'); // log-viewer::logs.list
$this->delete('delete', [LogViewerController::class, 'delete'])
->name('delete'); // log-viewer::logs.delete
$this->prefix('{date}')->group(function() {
$this->get('/', [LogViewerController::class, 'show'])
->name('show'); // log-viewer::logs.show
$this->get('download', [LogViewerController::class, 'download'])
->name('download'); // log-viewer::logs.download
$this->get('{level}', [LogViewerController::class, 'showByLevel'])
->name('filter'); // log-viewer::logs.filter
$this->get('{level}/search', [LogViewerController::class, 'search'])
->name('search'); // log-viewer::logs.search
});
});
}
}