summaryrefslogtreecommitdiffstats
path: root/application/controllers/LogController.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--application/controllers/LogController.php51
1 files changed, 51 insertions, 0 deletions
diff --git a/application/controllers/LogController.php b/application/controllers/LogController.php
new file mode 100644
index 0000000..fc5e17c
--- /dev/null
+++ b/application/controllers/LogController.php
@@ -0,0 +1,51 @@
+<?php
+
+/* Icinga Web 2 | (c) 2018 Icinga Development Team | GPLv2+ */
+
+namespace Icinga\Module\Audit\Controllers;
+
+use Icinga\Data\ConfigObject;
+use Icinga\Protocol\File\FileReader;
+use Icinga\Web\Controller;
+
+class LogController extends Controller
+{
+ public function indexAction()
+ {
+ $this->assertPermission('audit/log');
+
+ if ($this->Config()->get('log', 'type') !== 'file') {
+ $this->httpNotFound('Page not found');
+ }
+
+ $this->getTabs()->add('audit/log', [
+ 'active' => true,
+ 'label' => $this->translate('Audit Log'),
+ 'url' => 'audit/log',
+ ]);
+
+ $file = $this->Config()->get('log', 'path', '/var/log/icingaweb2/audit.log');
+
+ if (! @file_exists($file)) {
+ $this->render('log-empty');
+
+ return;
+ }
+
+ $resource = new FileReader(new ConfigObject([
+ 'filename' => $file,
+ 'fields' => '/(?<!.)' // ^ can't handle multilines, don't ask *me* why this works
+ . '(?<datetime>[0-9]{4}(?:-[0-9]{2}){2}' // date
+ . 'T[0-9]{2}(?::[0-9]{2}){2}(?:[\+\-][0-9]{2}:[0-9]{2})?)' // time
+ . ' - (?<identity>.+)' // identity
+ . ' - (?<type>.+)' // type
+ . ' - (?<message>.+)' // message
+ . '(?!.)/msSU' // $ can't handle multilines, don't ...
+ ]));
+
+ $this->view->logData = $resource->select()->order('DESC');
+
+ $this->setupLimitControl();
+ $this->setupPaginationControl($this->view->logData);
+ }
+}