![]() Server : Apache/2.4.62 (Unix) OpenSSL/1.0.2k-fips System : Linux server1.richineiserver.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 User : fdshops ( 1003) PHP Version : 8.2.21 Disable Function : NONE Directory : /home/fdshops/public_html/vendor/arcanedev/log-viewer/src/Utilities/ |
<?php declare(strict_types=1); namespace Arcanedev\LogViewer\Utilities; use Arcanedev\LogViewer\Contracts\Utilities\Filesystem as FilesystemContract; use Arcanedev\LogViewer\Contracts\Utilities\LogChecker as LogCheckerContract; use Illuminate\Contracts\Config\Repository as ConfigContract; /** * Class LogChecker * * @author ARCANEDEV <arcanedev.maroc@gmail.com> */ class LogChecker implements LogCheckerContract { /* ----------------------------------------------------------------- | Properties | ----------------------------------------------------------------- */ /** * The config repository instance. * * @var \Illuminate\Contracts\Config\Repository */ private $config; /** * The filesystem instance. * * @var \Arcanedev\LogViewer\Contracts\Utilities\Filesystem */ private $filesystem; /** * Log handler mode. * * @var string */ protected $handler = ''; /** * The check status. * * @var bool */ private $status = true; /** * The check messages. * * @var array */ private $messages; /** * Log files statuses. * * @var array */ private $files = []; /* ----------------------------------------------------------------- | Constructor | ----------------------------------------------------------------- */ /** * LogChecker constructor. * * @param \Illuminate\Contracts\Config\Repository $config * @param \Arcanedev\LogViewer\Contracts\Utilities\Filesystem $filesystem */ public function __construct(ConfigContract $config, FilesystemContract $filesystem) { $this->setConfig($config); $this->setFilesystem($filesystem); $this->refresh(); } /* ----------------------------------------------------------------- | Getters & Setters | ----------------------------------------------------------------- */ /** * Set the config instance. * * @param \Illuminate\Contracts\Config\Repository $config * * @return self */ public function setConfig(ConfigContract $config) { $this->config = $config; return $this; } /** * Set the Filesystem instance. * * @param \Arcanedev\LogViewer\Contracts\Utilities\Filesystem $filesystem * * @return self */ public function setFilesystem(FilesystemContract $filesystem) { $this->filesystem = $filesystem; return $this; } /** * Set the log handler mode. * * @param string $handler * * @return self */ protected function setHandler($handler) { $this->handler = strtolower($handler); return $this; } /* ----------------------------------------------------------------- | Main Methods | ----------------------------------------------------------------- */ /** * Get messages. * * @return array */ public function messages() { $this->refresh(); return $this->messages; } /** * Check if the checker passes. * * @return bool */ public function passes() { $this->refresh(); return $this->status; } /** * Check if the checker fails. * * @return bool */ public function fails() { return ! $this->passes(); } /** * Get the requirements. * * @return array */ public function requirements() { $this->refresh(); return $this->isDaily() ? [ 'status' => 'success', 'header' => 'Application requirements fulfilled.', 'message' => 'Are you ready to rock ?', ] : [ 'status' => 'failed', 'header' => 'Application requirements failed.', 'message' => $this->messages['handler'] ]; } /* ----------------------------------------------------------------- | Check Methods | ----------------------------------------------------------------- */ /** * Is a daily handler mode ? * * @return bool */ protected function isDaily() { return $this->isSameHandler(self::HANDLER_DAILY); } /** * Is the handler is the same as the application log handler. * * @param string $handler * * @return bool */ private function isSameHandler($handler) { return $this->handler === $handler; } /* ----------------------------------------------------------------- | Other Methods | ----------------------------------------------------------------- */ /** * Refresh the checks. * * @return \Arcanedev\LogViewer\Utilities\LogChecker */ private function refresh() { $this->setHandler($this->config->get('logging.default', 'stack')); $this->messages = [ 'handler' => '', 'files' => [], ]; $this->files = []; $this->checkHandler(); $this->checkLogFiles(); return $this; } /** * Check the handler mode. */ private function checkHandler() { if ($this->isDaily()) return; $this->messages['handler'] = 'You should set the log handler to `daily` mode. Please check the LogViewer wiki page (Requirements) for more details.'; } /** * Check all log files. */ private function checkLogFiles() { foreach ($this->filesystem->all() as $path) { $this->checkLogFile($path); } } /** * Check a log file. * * @param string $path */ private function checkLogFile($path) { $status = true; $filename = basename($path); $message = "The log file [$filename] is valid."; $pattern = $this->filesystem->getPattern(); if ($this->isSingleLogFile($filename)) { $this->status = $status = false; $this->messages['files'][$filename] = $message = "You have a single log file in your application, you should split the [$filename] into separate log files."; } elseif ($this->isInvalidLogPattern($filename, $pattern)) { $this->status = $status = false; $this->messages['files'][$filename] = $message = "The log file [$filename] has an invalid date, the format must be like {$pattern}."; } $this->files[$filename] = compact('filename', 'status', 'message', 'path'); } /** * Check if it's not a single log file. * * @param string $file * * @return bool */ private function isSingleLogFile($file) { return $file === 'laravel.log'; } /** * Check the date of the log file. * * @param string $file * @param string $pattern * * @return bool */ private function isInvalidLogPattern($file, $pattern) { return ((bool) preg_match("/{$pattern}/", $file, $matches)) === false; } }