Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Monitoring features #12

Draft
wants to merge 67 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
72608dc
Begin a monitoring feature; start with Solr
adriendupuis Jul 24, 2020
96fcec1
Monitor: Fix and continue translation
adriendupuis Aug 4, 2020
9144fd9
Monitor: Continue translation
adriendupuis Aug 4, 2020
e495286
Monitor: Remove unneeded tab
adriendupuis Aug 4, 2020
911b7f3
solr_monitor.html.twig: Update layout
adriendupuis Aug 4, 2020
388e0dd
Monitor: Use Solr endpoints & HTTP client;
adriendupuis Aug 5, 2020
63d255c
MonitorService: typehint with interface instead of implementation class
adriendupuis Aug 5, 2020
25a2bcd
Fix code style
adriendupuis Aug 5, 2020
17ec534
GitHub action standrads: Symplify /** Desc maintenance
adriendupuis Aug 5, 2020
c664fdd
GitHub action standards: Symplify /** Desc maintenance (fix \$)
adriendupuis Aug 5, 2020
0c132a0
Solr Monitor: Get metrics per host
adriendupuis Aug 5, 2020
babdc67
(minor) MonitorService: Add link to doc
adriendupuis Aug 5, 2020
83751bb
MonitorService: Handle Elasticsearch
adriendupuis Aug 5, 2020
8ef0452
Refactorize w/ SearchEngineMonitorServiceAbstract
adriendupuis Aug 5, 2020
8b92366
MonitorService: clarify formatBytes used base: binary
adriendupuis Aug 10, 2020
67034a0
SearchEngineMonitorServiceAbstract::formatBytes: base, phpunit, format
adriendupuis Aug 10, 2020
f360546
Format SearchEngineMonitorServiceAbstractTest.php
adriendupuis Aug 10, 2020
1545b08
Fix coding standards in src/bundle/Service/
adriendupuis Aug 10, 2020
5a0bd38
Fix coding standards in src/bundle/Tab/
adriendupuis Aug 10, 2020
0fefcfb
try to fix SearchEngineMonitorServiceAbstract::formatBytes thresholds
adriendupuis Aug 10, 2020
96fb8a6
Fix SearchEngineMonitorServiceAbstract::formatBytes thresholds
adriendupuis Aug 10, 2020
7276c46
search_engine_monitor.html.twig: Move inline CSS to file
adriendupuis Aug 10, 2020
1e8f68b
search_engine_monitor.html.twig: Move inline CSS to file
adriendupuis Aug 10, 2020
b73a977
Format SearchEngineMonitorServiceAbstract*.php
adriendupuis Aug 10, 2020
d21c1cc
search_engine_monitor.html.twig: Translations
adriendupuis Aug 10, 2020
eef32d8
search_engine_monitor.html.twig: Fix gender in translations
adriendupuis Aug 10, 2020
4487253
enh. monitor.scss
adriendupuis Aug 10, 2020
c5b16fb
Add current host monitor
adriendupuis Aug 11, 2020
1c405c7
Format HostMonitorService.php & CurrentHostMonitor.php
adriendupuis Aug 11, 2020
5f311b7
CI: Add PHPUnit
adriendupuis Aug 11, 2020
56f33bb
CI: Fix tests.yml indent
adriendupuis Aug 11, 2020
085539f
Monitor: _human_readable → _human
adriendupuis Aug 20, 2020
fc82f84
Start a Redis Monitor
adriendupuis Aug 21, 2020
6f5c2e3
Continue translations
adriendupuis Aug 21, 2020
6792b19
Add Redis specific metrics
adriendupuis Aug 24, 2020
a4a2541
Format RedisMonitor*.php
adriendupuis Aug 24, 2020
a2f23ca
server_monitor.html.twig: Fix white space/new lines
adriendupuis Nov 12, 2020
217aa3f
monitor.scss: Fix tab background
adriendupuis Nov 12, 2020
52e297c
monitor.scss: Fix white space/new lines (instead of *monitor.html.twig)
adriendupuis Nov 12, 2020
93e6bca
monitor.scss: Fix white space/new lines (instead of *monitor.html.twig)
adriendupuis Nov 12, 2020
2341a6a
monitor.scss: Fix white space/new lines (refactoring)
adriendupuis Nov 12, 2020
26b1280
Merge branch 'develop' into feature/monitor
adriendupuis Jan 26, 2021
0afeb23
Create sub-namespace `Monitor`
adriendupuis Jan 27, 2021
36633b7
Merge branch 'develop' into feature/monitor
adriendupuis Jan 28, 2021
70ca76d
Merge branch 'develop' into feature/monitor
adriendupuis Jan 28, 2021
27c65ba
tests: Fix namespace
adriendupuis Jan 28, 2021
83ede96
Merge branch 'develop' into feature/monitor
adriendupuis Feb 25, 2021
87a7b01
Tab\…\RedisMonitor → Tab\…\CachePoolMonitor
adriendupuis Mar 1, 2021
f5707f5
Add MemcachedMonitorService; Remove MonitorTabGroupSubscriber
adriendupuis Mar 2, 2021
396c4ad
Coding Standards
adriendupuis Mar 2, 2021
6a3ab2e
Translate Redis memory advices
adriendupuis Mar 2, 2021
e917758
Merge branch 'develop' into feature/monitor
adriendupuis Mar 2, 2021
ed773db
ServerMonitorServiceAbstract: Fix formatPercent '10.0%' round case
adriendupuis Mar 2, 2021
dfd4860
services.yaml: Always cache_dsn parameter
adriendupuis Mar 4, 2021
1e7aab6
HostMonitorService: Fix free + used < total
adriendupuis Mar 4, 2021
65ade33
HostMonitorService: Fix free + used < total
adriendupuis Mar 5, 2021
a9826c9
HostMonitorService: Fix free + used < total
adriendupuis Mar 5, 2021
edea151
Merge branch 'develop' into feature/monitor
adriendupuis Mar 15, 2021
a28fafa
Menu: Avoid error when there is no Admin Menu
adriendupuis Apr 1, 2021
dff7fde
Menu: Avoid error when there is no Admin Menu
adriendupuis Apr 1, 2021
151aa33
Clean MonitorController
adriendupuis Apr 1, 2021
499a128
Split services.yaml
adriendupuis Apr 9, 2021
5142561
Merge branch 'develop' into feature/monitor
adriendupuis Apr 9, 2021
eff4c33
Merge branch 'develop' into feature/monitor
adriendupuis Jul 2, 2021
23ee8cc
Merge branch 'develop' into feature/monitor
adriendupuis Jul 2, 2021
8bd1fda
(minor) Format MonitorMenuSubscriber code
adriendupuis Jul 12, 2021
0fd7602
Merge remote-tracking branch 'origin/develop' into feature/monitor
adriendupuis Aug 18, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Tests

on:
push:
branches: [ master, develop ]
pull_request:
branches: [ master, develop ]

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2

- name: Remove eZ Platform Admin UI's dependency
run: composer remove ezsystems/ezplatform-admin-ui --no-interaction --no-update

- name: Install PHPUnit
run: composer require phpunit/phpunit --dev --no-interaction

- name: Install dependencies
run: composer install --no-scripts

- name: Run test suite
run: vendor/bin/phpunit --colors=always tests/
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,16 @@ English example:
bin/console translation:extract en \
--bundle AdrienDupuisEzPlatformAdminBundle \
--output-dir vendor/adriendupuis/ezplatform-admin/src/bundle/Resources/translations/ \
--domain ad_admin_content_usage --domain ad_admin_identification \
--domain ad_admin_content_usage --domain ad_admin_identification --domain ad_admin_monitor \
;
```

### Run unit tests

```shell
bin/phpunit vendor/adriendupuis/ezplatform-admin/tests/;
```

### TODO

* Features
Expand Down
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
}
},
"require": {
"ext-json": "*",
"ezsystems/ezplatform-admin-ui": "^2.0.0"
}
}
14 changes: 14 additions & 0 deletions src/bundle/Controller/MonitorController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?php

namespace AdrienDupuis\EzPlatformAdminBundle\Controller;

use EzSystems\EzPlatformAdminUiBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class MonitorController extends Controller
{
public function mainAction(): Response
{
return $this->render('@ezdesign/admin/monitor.html.twig');
}
}
50 changes: 50 additions & 0 deletions src/bundle/EventSubscriber/MonitorMenuSubscriber.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

namespace AdrienDupuis\EzPlatformAdminBundle\EventSubscriber;

use EzSystems\EzPlatformAdminUi\Menu\Event\ConfigureMenuEvent;
use EzSystems\EzPlatformAdminUi\Menu\MainMenuBuilder;
use JMS\TranslationBundle\Model\Message;
use JMS\TranslationBundle\Translation\TranslationContainerInterface;
use Knp\Menu\MenuItem;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class MonitorMenuSubscriber implements EventSubscriberInterface, TranslationContainerInterface
{
public const ITEM_ADMIN__MONITOR = 'main__admin__monitor';

public static function getSubscribedEvents(): array
{
return [
ConfigureMenuEvent::MAIN_MENU => 'onMenuConfigure',
];
}

public function onMenuConfigure(ConfigureMenuEvent $event): void
{
/** @var MenuItem $menu */
$menu = $event->getMenu();
/** @var MenuItem $menuItem */
$menuItem = $menu[MainMenuBuilder::ITEM_ADMIN];
if (!$menuItem) {
return;
}

$menuItem->addChild(
self::ITEM_ADMIN__MONITOR,
[
'route' => 'ad_admin.monitor',
'extras' => [
'translation_domain' => 'ad_admin_monitor',
],
]
);
}

public static function getTranslationMessages(): array
{
return [
(new Message(self::ITEM_ADMIN__MONITOR, 'ad_admin_monitor'))->setDesc('Monitor'),
];
}
}
5 changes: 5 additions & 0 deletions src/bundle/Resources/config/routing.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,8 @@ ad_admin.identification:
path: /identification
defaults:
_controller: AdrienDupuis\EzPlatformAdminBundle\Controller\IdentificationController::identificationAction

ad_admin.monitor:
path: /monitor
defaults:
_controller: AdrienDupuis\EzPlatformAdminBundle\Controller\MonitorController::mainAction
70 changes: 70 additions & 0 deletions src/bundle/Resources/config/services/monitor.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
parameters:
cache_dsn: '%env(CACHE_DSN)%'

services:

adriendupuis.ezplatform.admin.monitor.tab_groups:
parent: EzSystems\EzPlatformAdminUi\Component\TabsComponent
autowire: true
autoconfigure: false
public: false
arguments:
$template: '@@ezdesign/ui/tab/system_info.html.twig'
#$template: '@@ezdesign/ui/tab/default.html.twig'
$groupIdentifier: 'ad-admin-monitor'
tags:
- { name: ezplatform.admin_ui.component, group: ad-admin-monitor-tab-groups }

AdrienDupuis\EzPlatformAdminBundle\Tab\Monitor\CurrentHostMonitor:
parent: EzSystems\EzPlatformAdminUi\Tab\AbstractTab
autowire: true
autoconfigure: false
public: false
arguments:
$hostMonitorService: '@AdrienDupuis\EzPlatformAdminBundle\Service\Monitor\HostMonitorService'
tags:
- { name: ezplatform.tab, group: ad-admin-monitor }

AdrienDupuis\EzPlatformAdminBundle\Tab\Monitor\CachePoolMonitor:
parent: EzSystems\EzPlatformAdminUi\Tab\AbstractTab
autowire: true
autoconfigure: false
public: false
arguments:
$cachePool: '%cache_pool%'
$redisMonitorService: '@AdrienDupuis\EzPlatformAdminBundle\Service\Monitor\RedisMonitorService'
$memcachedMonitorService: '@AdrienDupuis\EzPlatformAdminBundle\Service\Monitor\MemcachedMonitorService'
tags:
- { name: ezplatform.tab, group: ad-admin-monitor }

AdrienDupuis\EzPlatformAdminBundle\Service\Monitor\RedisMonitorService:
arguments:
$cachePool: '%cache_pool%'
$cacheDsn: '%cache_dsn%'

AdrienDupuis\EzPlatformAdminBundle\Service\Monitor\MemcachedMonitorService:
arguments:
$cachePool: '%cache_pool%'
$cacheDsn: '%cache_dsn%'

AdrienDupuis\EzPlatformAdminBundle\Tab\Monitor\SearchEngineMonitor:
parent: EzSystems\EzPlatformAdminUi\Tab\AbstractTab
autowire: true
autoconfigure: false
public: false
arguments:
$searchEngine: '%search_engine%'
$solrMonitorService: '@AdrienDupuis\EzPlatformAdminBundle\Service\Monitor\SolrMonitorService'
$elasticsearchMonitorService: '@AdrienDupuis\EzPlatformAdminBundle\Service\Monitor\ElasticsearchMonitorService'
tags:
- { name: ezplatform.tab, group: ad-admin-monitor }

AdrienDupuis\EzPlatformAdminBundle\Service\Monitor\SolrMonitorService:
arguments:
$solrEndpointResolver: '@ez_search_engine_solr.connection.default.endpoint_resolver_id'
$solrEndpointRegistry: '@ezpublish.search.solr.gateway.endpoint_registry'
$solrHttpClient: '@ezpublish.search.solr.gateway.client.http.stream'

AdrienDupuis\EzPlatformAdminBundle\Service\Monitor\ElasticsearchMonitorService:
arguments:
$elasticSearchClientFactory: '@Ibexa\Platform\ElasticSearchEngine\ElasticSearch\Client\ClientFactoryInterface'
4 changes: 4 additions & 0 deletions src/bundle/Resources/encore/ez.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,9 @@ module.exports = (Encore) => {
.addEntry('ad-admin-identification-css', [
path.resolve(__dirname, '../public/scss/identification.scss'),
])
.addEntry('ad-admin-monitor-css', [
path.resolve(__dirname, '../public/scss/monitor.scss'),
])
;
};
// Note: jQuery is provided by https://github.com/ezsystems/ezplatform-admin-ui-assets/tree/v5.0.0/Resources/public/vendors/jquery
39 changes: 39 additions & 0 deletions src/bundle/Resources/public/scss/monitor.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
@import '../../../../../../../ezsystems/ezplatform-admin-ui/src/bundle/Resources/public/scss/_custom.scss';
@import '../../../../../../../ezsystems/ezplatform-admin-ui/src/bundle/Resources/public/scss/functions/_calculate.rem.scss';

.nav-tabs-ad-admin-monitor {
border-bottom: none;
}

#ez-tab-list-content-ad-admin-monitor {
overflow: hidden;
}

.server {
clear: both;
& > .usage {
float: left;
.bar {
height: 10px;
&.total {
background: red;
}
&.free {
background: green;
float: right;
}
}
table {
th:nth-child(even) {
width: 33%;
}
th:nth-child(odd) {
width: 34%;
}
td {
padding: calculateRem(11px);
white-space: nowrap;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
<note>key: identifier.help</note>
</trans-unit>
<trans-unit id="a24b22fee586aeaacd766b6b0c39ce4a5d0a9294" resname="identifier.label">
<source>identifier.label</source>
<source>identifier:</source>
<target>identifier:</target>
<note>key: identifier.label</note>
</trans-unit>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
<note>key: identifier.help</note>
</trans-unit>
<trans-unit id="a24b22fee586aeaacd766b6b0c39ce4a5d0a9294" resname="identifier.label">
<source>identifier.label</source>
<source>identifier:</source>
<target>Identifiant :</target>
<note>key: identifier.label</note>
</trans-unit>
Expand Down
116 changes: 116 additions & 0 deletions src/bundle/Resources/translations/ad_admin_monitor.en.xliff
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:jms="urn:jms:translation" version="1.2">
<file source-language="en" target-language="en" datatype="plaintext" original="not.available">
<header>
<tool tool-id="JMSTranslationBundle" tool-name="JMSTranslationBundle" tool-version="1.1.0-DEV"/>
<note>The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message.</note>
</header>
<body>
<trans-unit id="19d7d896ec933e337e6eae5cfa5821a7634e2d98" resname="free_physical_memory">
<source>Free</source>
<target>Free</target>
<note>key: free_physical_memory</note>
</trans-unit>
<trans-unit id="0cd8cc77c1111ad285aec3d95cf54a171ad911f1" resname="free_swap_space">
<source>Free</source>
<target>Free</target>
<note>key: free_swap_space</note>
</trans-unit>
<trans-unit id="8825877d6954e801a74e92e3f6ec6f2c1d64c859" resname="main__admin__monitor">
<source>Monitor</source>
<target>Monitor</target>
<note>key: main__admin__monitor</note>
</trans-unit>
<trans-unit id="9796809f7dae482d3123c16585f2b60f97407796" resname="monitor">
<source>Monitor</source>
<target>Monitor</target>
<note>key: monitor</note>
</trans-unit>
<trans-unit id="88d28dbec0e37fd6742aa8e3488457fe8f1daed2" resname="monitor.cache_pool.evictions">
<source>Evictions</source>
<target>Evictions</target>
<note>key: monitor.cache_pool.evictions</note>
</trans-unit>
<trans-unit id="1e3d45cbb5c8df1e46a3106258a4cf3c536d5179" resname="monitor.cache_pool.hit_ratio">
<source>Hit Ratio</source>
<target>Hit Ratio</target>
<note>key: monitor.cache_pool.hit_ratio</note>
</trans-unit>
<trans-unit id="662848c8202a69d23422e5cd805e0f839c8c8249" resname="monitor.cache_pool.no_ping">
<source>Cache pool does not respond</source>
<target>Cache pool does not respond</target>
<note>key: monitor.cache_pool.no_ping</note>
</trans-unit>
<trans-unit id="cd68c9926340d3cd09a8f348fb1c0a3705727a68" resname="monitor.current_host">
<source>Current Host Monitor</source>
<target>Current Host Monitor</target>
<note>key: monitor.current_host</note>
</trans-unit>
<trans-unit id="95f76fb4ad55daa146926d645a86790f0336891e" resname="monitor.not_monitored">
<source>(Not monitored)</source>
<target>(Not monitored)</target>
<note>key: monitor.not_monitored</note>
</trans-unit>
<trans-unit id="8ee99864e4e7153db7da79e7b516b5da719690a7" resname="monitor.redis.maxmemory_policy">
<source>Eviction Policy</source>
<target state="new">Eviction Policy</target>
<note>key: monitor.redis.maxmemory_policy</note>
</trans-unit>
<trans-unit id="55ab3aebe30f0c583b64bf0bd74642a84a96996b" resname="monitor.redis.mem_fragmentation_ratio">
<source>Memory Fragmentation Ratio</source>
<target state="new">Memory Fragmentation Ratio</target>
<note>key: monitor.redis.mem_fragmentation_ratio</note>
</trans-unit>
<trans-unit id="11afccda017133fb3ae583e64944251e992e527a" resname="monitor.redis.mem_fragmentation_ratio.less_than_1">
<source>server is swapping</source>
<target>server is swapping</target>
<note>key: monitor.redis.mem_fragmentation_ratio.less_than_1</note>
</trans-unit>
<trans-unit id="ec70281d52d6070c0fd81005b9a939e0300252f5" resname="monitor.redis.mem_fragmentation_ratio.more_than_1.5">
<source>memory is too fragmented</source>
<target>memory is too fragmented</target>
<note>key: monitor.redis.mem_fragmentation_ratio.more_than_1.5</note>
</trans-unit>
<trans-unit id="d88996d39c37a6a6c46ee29a79522f4bf7169fb3" resname="monitor.search_engine.no_ping">
<source>Search engine does not respond</source>
<target>Search engine does not respond</target>
<note>key: monitor.search_engine.no_ping</note>
</trans-unit>
<trans-unit id="7c134d36ac04d67e19455a41b5aea0285dc927b1" resname="monitor.tab_name">
<source>%service_name% Monitor</source>
<target>%service_name% Monitor</target>
<note>key: monitor.tab_name</note>
</trans-unit>
<trans-unit id="487b94edfbcb49dd8d8741483b69d81abb55c413" resname="physical_memory">
<source>Physical Memory</source>
<target>Physical Memory</target>
<note>key: physical_memory</note>
</trans-unit>
<trans-unit id="77eb0b8664cedd2ca5cb4d8be38efc6567a5eac0" resname="swap_space">
<source>Swap Space</source>
<target>Swap Space</target>
<note>key: swap_space</note>
</trans-unit>
<trans-unit id="63df899ddd006f60746f4fbd75408644c2ca49a1" resname="total_physical_memory">
<source>Total</source>
<target>Total</target>
<note>key: total_physical_memory</note>
</trans-unit>
<trans-unit id="0c1f7aafa7b74ea5694e48fbe4ad147ffa652df8" resname="total_swap_space">
<source>Total</source>
<target>Total</target>
<note>key: total_swap_space</note>
</trans-unit>
<trans-unit id="91f2d9b1d10220c18d50d2ac1bb1d84f5a280050" resname="used_physical_memory">
<source>Used</source>
<target>Used</target>
<note>key: used_physical_memory</note>
</trans-unit>
<trans-unit id="da6c0593bc39627e3306603b1ae650956dd20e81" resname="used_swap_space">
<source>Used</source>
<target>Used</target>
<note>key: used_swap_space</note>
</trans-unit>
</body>
</file>
</xliff>
Loading