From 8ca17f4e7ba8ed677a4aa9120edf450356feafd6 Mon Sep 17 00:00:00 2001 From: Thomas Gelf Date: Tue, 8 Nov 2016 16:48:45 +0100 Subject: [PATCH] StartupLogRenderer: remove heavvy logic from view --- .../views/scripts/deployment/index.phtml | 94 +----------------- library/Director/StartupLogRenderer.php | 98 +++++++++++++++++++ 2 files changed, 100 insertions(+), 92 deletions(-) create mode 100644 library/Director/StartupLogRenderer.php 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; ?>
tabs ?> @@ -162,10 +75,7 @@ if ($deployment->startup_succeeded === null) { startup_succeeded !== null): ?>

Startup log

-escape($deployment->startup_log),
-    $logLink
-) ?>
+
 
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