diff --git a/application/views/scripts/deployment/index.phtml b/application/views/scripts/deployment/index.phtml
index ecd5d9a6..00aa77a8 100644
--- a/application/views/scripts/deployment/index.phtml
+++ b/application/views/scripts/deployment/index.phtml
@@ -1,94 +1,7 @@
$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,
- '\1/\2',
- $line
- );
- }
-
- if ($markPattern !== null) {
- $line = preg_replace($markPattern, $markReplace, $line);
- }
- $line = preg_replace('/([\^]{2,})/', '\1', $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;
?>
= $this->tabs ?>
@@ -162,10 +75,7 @@ if ($deployment->startup_succeeded === null) {
startup_succeeded !== null): ?>
Startup log
-= colorize(
- $this->escape($deployment->startup_log),
- $logLink
-) ?>
+= StartupLogRenderer::beautify($deployment, $this) ?>
diff --git a/library/Director/StartupLogRenderer.php b/library/Director/StartupLogRenderer.php
new file mode 100644
index 00000000..599f5a71
--- /dev/null
+++ b/library/Director/StartupLogRenderer.php
@@ -0,0 +1,98 @@
+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,
+ '\1/\2',
+ $line
+ );
+ }
+
+ if ($markPattern !== null) {
+ $line = preg_replace($markPattern, $markReplace, $line);
+ }
+ $line = preg_replace('/([\^]{2,})/', '\1', $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;
+ }
+}
\ No newline at end of file