mirror of
https://github.com/Icinga/icingaweb2-module-director.git
synced 2026-06-09 00:33:03 -04:00
StartupLogRenderer: remove heavvy logic from view
This commit is contained in:
parent
5bae792901
commit
8ca17f4e7b
2 changed files with 100 additions and 92 deletions
|
|
@ -1,94 +1,7 @@
|
|||
<?php
|
||||
|
||||
use Icinga\Util\Format;
|
||||
|
||||
$view = $this;
|
||||
$logLink = function ($match, $severity) use ($view) {
|
||||
$stageDir = $match[1];
|
||||
$filename = $match[2];
|
||||
$suffix = $match[3];
|
||||
if (preg_match('/(\d+).*/', $suffix, $m)) {
|
||||
$lineNumber = $m[1];
|
||||
} else {
|
||||
$lineNumber = null;
|
||||
}
|
||||
|
||||
$params = array(
|
||||
'config_checksum' => $view->config_checksum,
|
||||
'file_path' => $filename,
|
||||
'deployment_id' => $view->deployment->id,
|
||||
'fileOnly' => true,
|
||||
);
|
||||
if ($lineNumber !== null) {
|
||||
$params['highlight'] = $lineNumber;
|
||||
$params['highlightSeverity'] = $severity;
|
||||
}
|
||||
|
||||
return $view->qlink(
|
||||
'[stage]/' . $filename,
|
||||
'director/config/file',
|
||||
$params,
|
||||
array(
|
||||
'data-base-target' => '_next',
|
||||
'title' => $stageDir . $filename
|
||||
)
|
||||
) . $suffix;
|
||||
};
|
||||
|
||||
function colorize($log, $logLink) {
|
||||
|
||||
$lines = array();
|
||||
$severity = 'information';
|
||||
$sevPattern = '/^(debug|notice|information|warning|critical)\/(\w+)/';
|
||||
$filePatternHint = '~(/[\w/]+/api/packages/director/[^/]+/)([^:]+\.conf)(: (\d+))~';
|
||||
$filePatternDetail = '~(/[\w/]+/api/packages/director/[^/]+/)([^:]+\.conf)(\((\d+)\))~';
|
||||
$markPattern = null;
|
||||
// len [stage] + 1
|
||||
$markReplace = ' ^';
|
||||
foreach (preg_split('/\n/', $log) as $line) {
|
||||
if (preg_match($sevPattern, $line, $m)) {
|
||||
$severity = $m[1];
|
||||
$line = preg_replace(
|
||||
$sevPattern,
|
||||
'<span class="loglevel \1">\1</span>/<span class="application">\2</span>',
|
||||
$line
|
||||
);
|
||||
}
|
||||
|
||||
if ($markPattern !== null) {
|
||||
$line = preg_replace($markPattern, $markReplace, $line);
|
||||
}
|
||||
$line = preg_replace('/([\^]{2,})/', '<span class="error-hint">\1</span>', $line);
|
||||
$markPattern = null;
|
||||
|
||||
if (preg_match($filePatternHint, $line, $m)) {
|
||||
$line = preg_replace_callback(
|
||||
$filePatternHint,
|
||||
function ($matches) use ($logLink, $severity) {
|
||||
return $logLink($matches, $severity);
|
||||
},
|
||||
$line
|
||||
);
|
||||
$line = preg_replace('/\(in/', "\n (in", $line);
|
||||
$line = preg_replace('/\), new declaration/', "),\n new declaration", $line);
|
||||
} elseif (preg_match($filePatternDetail, $line, $m)) {
|
||||
$markIndent = strlen($m[1]);
|
||||
$markPattern = '/\s{' . $markIndent . '}\^/';
|
||||
|
||||
$line = preg_replace_callback(
|
||||
$filePatternDetail,
|
||||
function ($matches) use ($logLink, $severity) {
|
||||
return $logLink($matches, $severity);
|
||||
},
|
||||
$line
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
$lines[] .= $line;
|
||||
}
|
||||
return implode("\n", $lines);
|
||||
}
|
||||
use Icinga\Module\Director\StartupLogRenderer;
|
||||
|
||||
?><div class="controls">
|
||||
<?= $this->tabs ?>
|
||||
|
|
@ -162,10 +75,7 @@ if ($deployment->startup_succeeded === null) {
|
|||
<?php if ($deployment->startup_succeeded !== null): ?>
|
||||
<h2>Startup log</h2>
|
||||
<pre class="logfile">
|
||||
<?= colorize(
|
||||
$this->escape($deployment->startup_log),
|
||||
$logLink
|
||||
) ?>
|
||||
<?= StartupLogRenderer::beautify($deployment, $this) ?>
|
||||
</pre>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
|
|
|
|||
98
library/Director/StartupLogRenderer.php
Normal file
98
library/Director/StartupLogRenderer.php
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
<?php
|
||||
|
||||
namespace Icinga\Module\Director;
|
||||
|
||||
use Icinga\Module\Director\Objects\DirectorDeploymentLog;
|
||||
use Icinga\Web\View;
|
||||
|
||||
class StartupLogRenderer
|
||||
{
|
||||
public static function beautify(DirectorDeploymentLog $deploymentLog, View $view)
|
||||
{
|
||||
$log = $view->escape($deploymentLog->get('startup_log'));
|
||||
$lines = array();
|
||||
$severity = 'information';
|
||||
$sevPattern = '/^(debug|notice|information|warning|critical)\/(\w+)/';
|
||||
$filePatternHint = '~(/[\w/]+/api/packages/director/[^/]+/)([^:]+\.conf)(: (\d+))~';
|
||||
$filePatternDetail = '~(/[\w/]+/api/packages/director/[^/]+/)([^:]+\.conf)(\((\d+)\))~';
|
||||
$markPattern = null;
|
||||
// len [stage] + 1
|
||||
$markReplace = ' ^';
|
||||
foreach (preg_split('/\n/', $log) as $line) {
|
||||
|
||||
if (preg_match($sevPattern, $line, $m)) {
|
||||
$severity = $m[1];
|
||||
$line = preg_replace(
|
||||
$sevPattern,
|
||||
'<span class="loglevel \1">\1</span>/<span class="application">\2</span>',
|
||||
$line
|
||||
);
|
||||
}
|
||||
|
||||
if ($markPattern !== null) {
|
||||
$line = preg_replace($markPattern, $markReplace, $line);
|
||||
}
|
||||
$line = preg_replace('/([\^]{2,})/', '<span class="error-hint">\1</span>', $line);
|
||||
$markPattern = null;
|
||||
|
||||
if (preg_match($filePatternHint, $line, $m)) {
|
||||
$line = preg_replace_callback(
|
||||
$filePatternHint,
|
||||
function ($matches) use ($severity, $view, $deploymentLog) {
|
||||
return StartupLogRenderer::logLink($matches, $severity, $deploymentLog, $view);
|
||||
},
|
||||
$line
|
||||
);
|
||||
$line = preg_replace('/\(in/', "\n (in", $line);
|
||||
$line = preg_replace('/\), new declaration/', "),\n new declaration", $line);
|
||||
} elseif (preg_match($filePatternDetail, $line, $m)) {
|
||||
$markIndent = strlen($m[1]);
|
||||
$markPattern = '/\s{' . $markIndent . '}\^/';
|
||||
|
||||
$line = preg_replace_callback(
|
||||
$filePatternDetail,
|
||||
function ($matches) use ($severity, $view, $deploymentLog) {
|
||||
return StartupLogRenderer::logLink($matches, $severity, $deploymentLog, $view);
|
||||
},
|
||||
$line
|
||||
);
|
||||
}
|
||||
|
||||
$lines[] .= $line;
|
||||
}
|
||||
return implode("\n", $lines);
|
||||
}
|
||||
|
||||
public static function logLink($match, $severity, DirectorDeploymentLog $deploymentLog, View $view)
|
||||
{
|
||||
$stageDir = $match[1];
|
||||
$filename = $match[2];
|
||||
$suffix = $match[3];
|
||||
if (preg_match('/(\d+).*/', $suffix, $m)) {
|
||||
$lineNumber = $m[1];
|
||||
} else {
|
||||
$lineNumber = null;
|
||||
}
|
||||
|
||||
$params = array(
|
||||
'config_checksum' => $deploymentLog->getConfigHexChecksum(),
|
||||
'deployment_id' => $deploymentLog->get('id'),
|
||||
'file_path' => $filename,
|
||||
'fileOnly' => true,
|
||||
);
|
||||
if ($lineNumber !== null) {
|
||||
$params['highlight'] = $lineNumber;
|
||||
$params['highlightSeverity'] = $severity;
|
||||
}
|
||||
|
||||
return $view->qlink(
|
||||
'[stage]/' . $filename,
|
||||
'director/config/file',
|
||||
$params,
|
||||
array(
|
||||
'data-base-target' => '_next',
|
||||
'title' => $stageDir . $filename
|
||||
)
|
||||
) . $suffix;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue