This commit is contained in:
Dennis Eichhorn 2015-11-29 21:57:18 +01:00
commit 2c3f140787
13 changed files with 619 additions and 0 deletions

View File

@ -0,0 +1,38 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Monitoring\Admin\Install;
/**
* Navigation class.
*
* @category Modules
* @package Modules\Admin
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @license OMS License 1.0
* @link http://orange-management.com
* @since 1.0.0
*/
class Navigation
{
public static function install($dbPool)
{
$navData = json_decode(file_get_contents(__DIR__ . '/nav.install.json'), true);
$class = '\\Modules\\Navigation\\Admin\\Installer';
$class::installExternal($dbPool, $navData);
}
}

View File

@ -0,0 +1,48 @@
[
{
"id": 1000706001,
"pid": "754a08ddf8bcb1cf22f310f09206dd783d42f7dd",
"type": 2,
"subtype": 1,
"name": "Monitoring",
"uri": "/{/lang}/backend/admin/monitoring/general",
"target": "self",
"icon": null,
"order": 50,
"from": "Admin",
"permission": null,
"parent": 1000101001,
"children": [
{
"id": 1000706101,
"pid": "754a08ddf8bcb1cf22f310f09206dd783d42f7dd",
"type": 3,
"subtype": 1,
"name": "Dashboard",
"uri": "/{/lang}/backend/admin/monitoring/general",
"target": "self",
"icon": null,
"order": 1,
"from": "Admin",
"permission": null,
"parent": 1000706001,
"children": []
},
{
"id": 1000706102,
"pid": "754a08ddf8bcb1cf22f310f09206dd783d42f7dd",
"type": 3,
"subtype": 1,
"name": "Logs",
"uri": "/{/lang}/backend/admin/monitoring/logs/list",
"target": "self",
"icon": null,
"order": 5,
"from": "Admin",
"permission": null,
"parent": 1000706001,
"children": []
}
]
}
]

43
Admin/Installer.php Normal file
View File

@ -0,0 +1,43 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Monitoring\Admin;
use phpOMS\DataStorage\Database\DatabaseType;
use phpOMS\DataStorage\Database\Pool;
use phpOMS\Module\InstallerAbstract;
/**
* Monitoring install class.
*
* @category Modules
* @package Modules\Monitoring
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @license OMS License 1.0
* @link http://orange-management.com
* @since 1.0.0
*/
class Installer extends InstallerAbstract
{
/**
* {@inheritdoc}
*/
public static function install(Pool $dbPool, array $info)
{
parent::install($dbPool, $info);
}
}

169
Controller.php Normal file
View File

@ -0,0 +1,169 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
namespace Modules\Monitoring;
use Modules\Navigation\Models\Navigation;
use Modules\Navigation\Views\NavigationView;
use phpOMS\Contract\RenderableInterface;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\RequestDestination;
use phpOMS\Message\ResponseAbstract;
use phpOMS\Module\ModuleAbstract;
use phpOMS\Module\WebInterface;
use phpOMS\Views\View;
use phpOMS\Views\ViewLayout;
/**
* Monitoring controller class.
*
* @category Modules
* @package Modules\Monitoring
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @license OMS License 1.0
* @link http://orange-management.com
* @since 1.0.0
*/
class Controller extends ModuleAbstract implements WebInterface
{
/**
* Module name.
*
* @var \string
* @since 1.0.0
*/
protected static $module = 'Monitoring';
/**
* Localization files.
*
* @var \string
* @since 1.0.0
*/
protected static $localization = [
RequestDestination::BACKEND => ['backend'],
];
/**
* Providing.
*
* @var \string
* @since 1.0.0
*/
protected static $providing = [
'Content',
];
/**
* Dependencies.
*
* @var \string
* @since 1.0.0
*/
protected static $dependencies = [];
/**
* Routing elements.
*
* @var array
* @since 1.0.0
*/
protected static $routes = [
'^.*/backend/admin/monitoring/general.*$' => [['dest' => '\Modules\Monitoring\Controller:viewMonitoringGeneral', 'method' => 'GET', 'type' => ViewLayout::MAIN],],
'^.*/backend/admin/monitoring/logs/list.*$' => [['dest' => '\Modules\Monitoring\Controller:viewMonitoringLogList', 'method' => 'GET', 'type' => ViewLayout::MAIN],],
'^.*/backend/admin/monitoring/logs/single.*$' => [['dest' => '\Modules\Monitoring\Controller:viewMonitoringLogEntry', 'method' => 'GET', 'type' => ViewLayout::MAIN],],
];
/**
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return RenderableInterface
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function viewMonitoringGeneral(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
{
$view = new View($this->app, $request, $response);
$view->setTemplate('/Modules/Monitoring/Theme/backend/monitoring-dashboard');
$view->addData('nav', $this->createNavigation(1000706001, $request, $response));
return $view;
}
/**
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return RenderableInterface
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function viewMonitoringLogList(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
{
$view = new View($this->app, $request, $response);
$view->setTemplate('/Modules/Monitoring/Theme/backend/monitoring-logs');
$view->addData('nav', $this->createNavigation(1000706001, $request, $response));
return $view;
}
/**
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return RenderableInterface
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
public function viewMonitoringLogEntry(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
{
$view = new View($this->app, $request, $response);
$view->setTemplate('/Modules/Monitoring/Theme/backend/monitoring-logs-single');
$view->addData('nav', $this->createNavigation(1000706001, $request, $response));
return $view;
}
/**
* @param int $pageId Page/parent Id for navigation
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
*
* @return RenderableInterface
*
* @since 1.0.0
* @author Dennis Eichhorn <d.eichhorn@oms.com>
*/
private function createNavigation(\int $pageId, RequestAbstract $request, ResponseAbstract $response)
{
$nav = Navigation::getInstance($request, $this->app->dbPool);
$navView = new NavigationView($this->app, $request, $response);
$navView->setTemplate('/Modules/Navigation/Theme/backend/mid');
$navView->setNav($nav->getNav());
$navView->setLanguage($request->getL11n()->language);
$navView->setParent($pageId);
return $navView;
}
}

0
README.md Normal file
View File

View File

@ -0,0 +1,66 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
$logs = $this->app->logger->countLogs();
$penetrators = $this->app->logger->getHighestPerpetrator();
echo $this->getData('nav')->render(); ?>
<section class="box w-33 floatLeft">
<h1><?= $this->l11n->lang['Monitoring']['System'] ?></h1>
<div class="inner">
<table class="list wf-100">
<tbody>
<tr><td><?= $this->l11n->lang['Monitoring']['OS'] ?><td><?= php_uname('s'); ?>
<tr><td><?= $this->l11n->lang['Monitoring']['Version'] ?><td><?= php_uname('v'); ?>
<tr><td><?= $this->l11n->lang['Monitoring']['Release'] ?><td><?= php_uname('r'); ?>
<tr><td><?= $this->l11n->lang['Monitoring']['RAMUsage'] ?><td><?= memory_get_usage(true)/(1024*1024); ?> MB
<tr><td><?= $this->l11n->lang['Monitoring']['MemoryLimit'] ?><td><?= ini_get('memory_limit'); ?>
<tr><td><?= $this->l11n->lang['Monitoring']['SystemRAM'] ?><td><?= \phpOMS\Utils\SystemUtils::getRAM()/(1024); ?> MB
<tr><td><?= $this->l11n->lang['Monitoring']['CPUUsage'] ?><td><?= \phpOMS\Utils\SystemUtils::getCpuUsage(); ?>%
<tr><td><?= $this->l11n->lang['Monitoring']['DiskUsage'] ?><td><?= round(\phpOMS\Utils\SystemUtils::getFolderSize(ROOT_PATH)/1000000, 0); ?> MB
</table>
</div>
</section>
<section class="box w-33 floatLeft">
<h1><?= $this->l11n->lang['Monitoring']['Logs'] ?></h1>
<div class="inner">
<table class="list wf-100">
<tbody>
<tr><td><?= $this->l11n->lang['Monitoring']['Emergencies'] ?><td><?= $logs['emergency'] ?? 0; ?>
<tr><td><?= $this->l11n->lang['Monitoring']['Criticals'] ?><td><?= $logs['critical'] ?? 0; ?>
<tr><td><?= $this->l11n->lang['Monitoring']['Errors'] ?><td><?= $logs['error'] ?? 0; ?>
<tr><td><?= $this->l11n->lang['Monitoring']['Warnings'] ?><td><?= $logs['warning'] ?? 0; ?>
<tr><td><?= $this->l11n->lang['Monitoring']['Alerts'] ?><td><?= $logs['alert'] ?? 0; ?>
<tr><td><?= $this->l11n->lang['Monitoring']['Notices'] ?><td><?= $logs['notice'] ?? 0; ?>
<tr><td><?= $this->l11n->lang['Monitoring']['Info'] ?><td><?= $logs['info'] ?? 0; ?>
<tr><td><?= $this->l11n->lang['Monitoring']['Debug'] ?><td><?= $logs['debug'] ?? 0; ?>
<tr><td><?= $this->l11n->lang['Monitoring']['Total'] ?><td><?= array_sum($logs); ?>
</table>
</div>
</section>
<section class="box w-33 floatLeft">
<h1><?= $this->l11n->lang['Monitoring']['Penetrators'] ?></h1>
<div class="inner">
<table class="list wf-100">
<tbody>
<?php foreach($penetrators as $ip => $count) : ?>
<tr><td><?= $ip; ?><td><?= $count; ?>
<?php endforeach; ?>
</table>
</div>
</section>

View File

@ -0,0 +1,58 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
/**
* @var \phpOMS\Views\View $this
*/
$log = $this->app->logger->getByLine((int) $this->request->getData('id') ?? 1);
$temp = trim($log['backtrace']);
$log['backtrace'] = json_decode($temp, true);
echo $this->getData('nav')->render(); ?>
<section class="box w-100">
<h1><?= $this->l11n->lang['Monitoring']['Logs']; ?></h1>
<div class="inner">
<table class="list w-100">
<tr>
<td><?= $this->l11n->lang[0]['ID']; ?>
<td><i class="fa fa-anchor"></i>
<td class="wf-100"><?= (int) $this->request->getData('id') ?? 0; ?>
<tr>
<td><?= $this->l11n->lang['Monitoring']['Time']; ?>
<td><i class="fa fa-clock-o"></i>
<td><?= $log['datetime']; ?>
<tr>
<td><?= $this->l11n->lang['Monitoring']['Source']; ?>
<td><i class="fa fa-wifi"></i>
<td><?= $log['ip']; ?>
<tr>
<td><?= $this->l11n->lang['Monitoring']['Level']; ?>
<td><i class="fa fa-<?= in_array($log['level'], ['notice', 'info', 'debug']) ? 'info-circle' : 'warning'; ?>"></i>
<td><?= $log['level']; ?>
<tr>
<td><?= $this->l11n->lang['Monitoring']['Message']; ?>
<td><i class="fa fa-commenting"></i>
<td><?= $log['message']; ?>
<tr>
<td colspan="3"><?= $this->l11n->lang['Monitoring']['Backtrace']; ?>
<tr>
<td colspan="3">
<pre><?= json_encode($log['backtrace'], JSON_PRETTY_PRINT); ?></pre>
</table>
</div>
</section>

View File

@ -0,0 +1,57 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
/**
* @var \phpOMS\Views\View $this
*/
$footerView = new \Web\Views\Lists\PaginationView($this->app, $this->request, $this->response);
$footerView->setTemplate('/Web/Templates/Lists/Footer/PaginationBig');
$footerView->setPages(0 / 25);
$footerView->setPage(1);
$footerView->setResults(0);
$logs = array_reverse($this->app->logger->get(25), true);
echo $this->getData('nav')->render(); ?>
<section class="box w-100">
<table class="table">
<caption><?= $this->l11n->lang['Monitoring']['Logs']; ?></caption>
<thead>
<tr>
<td><?= $this->l11n->lang['Monitoring']['Timestamp']; ?>
<td><?= $this->l11n->lang['Monitoring']['Level']; ?>
<td><?= $this->l11n->lang['Monitoring']['Source']; ?>
<td class="wf-100"><?= $this->l11n->lang['Monitoring']['Message']; ?>
<tfoot>
<tr>
<td colspan="5"><?= $footerView->render(); ?>
<tbody>
<?php foreach ($logs as $key => $value) :
$url = \phpOMS\Uri\UriFactory::build('/{/lang}/backend/admin/monitoring/logs/single?id=' . $key);?>
<tr>
<td><a href=<?= $url; ?>><i class="fa fa-clock-o"></i> <?= $value[0] ?? ''; ?></a>
<td><a href=<?= $url; ?>><i class="fa fa-<?= in_array($value[1], ['notice', 'info', 'debug']) ? 'info-circle' : 'warning'; ?>"></i> <?= $value[1] ?? ''; ?></a>
<td><a href=<?= $url; ?>><i class="fa fa-wifi"></i> <?= $value[2] ?? ''; ?></a>
<td><a href=<?= $url; ?>><i class="fa fa-commenting"></i> <?= $value[3] ?? ''; ?></a>
<?php endforeach;
if (!isset($key)) : ?>
<tr>
<td colspan="4">
<?php endif; ?>
</table>
</section>

View File

@ -0,0 +1,18 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
$MODLANG[1] = [
'i:ModuleInstalled' => 'Installation of the module {$1} was successful.',
];

View File

@ -0,0 +1,51 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
$MODLANG['Monitoring'] = [
'Alerts' => 'Alerts',
'All' => 'All',
'Backtrace' => 'Backtrace',
'CPUUsage' => 'CPU Usage',
'Created' => 'Created',
'CreatedBy' => 'Created By',
'Criticals' => 'Criticals',
'Debug' => 'Debug',
'Description' => 'Description',
'DiskUsage' => 'DiskUsage',
'Emergencies' => 'Emergencies',
'Errors' => 'Errors',
'Exception' => 'Exception',
'File' => 'File',
'Info' => 'Info',
'Level' => 'Level',
'Logs' => 'Logs',
'MemoryLimit' => 'Memory Limit',
'Message' => 'Message',
'Notices' => 'Notices',
'Status' => 'Status',
'System' => 'System',
'Total' => 'Total',
'OS' => 'OS',
'Penetrators' => 'Penetrators',
'RAMUsage' => 'RAM Usage',
'Release' => 'Release',
'Source' => 'Source',
'SystemRAM' => 'System RAM',
'Theme' => 'Theme',
'Time' => 'Time',
'Timestamp' => 'Timestamp',
'Version' => 'Version',
'Warnings' => 'Warnings',
];

View File

@ -0,0 +1,20 @@
<?php
/**
* Orange Management
*
* PHP Version 7.0
*
* @category TBD
* @package TBD
* @author OMS Development Team <dev@oms.com>
* @author Dennis Eichhorn <d.eichhorn@oms.com>
* @copyright 2013 Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://orange-management.com
*/
$MODLANG['Navigation'] = [
'List' => 'List',
'Logs' => 'Logs',
'Monitoring' => 'Monitoring',
];

BIN
img/module_teaser_small.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

51
info.json Normal file
View File

@ -0,0 +1,51 @@
{
"name": {
"id": 1000700000,
"internal": "Monitoring",
"external": "OMS Monitoring"
},
"version": "1.0.0",
"requirements": {
"phpOMS": "1.0.0",
"phpOMS-db": "1.0.0"
},
"creator": {
"name": "Orange Management",
"website": "www.spl1nes.com"
},
"description": "The administration module.",
"directory": "Monitoring",
"dependencies": {},
"providing": {
"Navigation": "*"
},
"load": [
{
"pid": [
"754a08ddf8bcb1cf22f310f09206dd783d42f7dd"
],
"type": 5,
"from": "Monitoring",
"for": "Navigation",
"file": "nav.backend"
},
{
"pid": [
"c66e6604564259b087dc6db1e46de8cf6353c96d"
],
"type": 4,
"for": "Content",
"file": "Monitoring",
"from": "Monitoring"
},
{
"pid": [
"c66e6604564259b087dc6db1e46de8cf6353c96d"
],
"type": 5,
"for": "Content",
"file": "backend",
"from": "Monitoring"
}
]
}