From 7a494d2e92f6e20f194ec13f7d504e3b2660d38d Mon Sep 17 00:00:00 2001 From: Andre Lorbach Date: Fri, 6 Nov 2009 12:36:36 +0100 Subject: [PATCH] Further enhancements of the consolidate functions in logstreamdb --- src/classes/logstream.class.php | 2 +- src/classes/logstreamdb.class.php | 147 ++++++++++++------ src/classes/logstreampdo.class.php | 2 +- .../reports/report.eventlog.monilog.class.php | 4 +- src/include/constants_logstream.php | 3 + 5 files changed, 109 insertions(+), 49 deletions(-) diff --git a/src/classes/logstream.class.php b/src/classes/logstream.class.php index 4371920..2169060 100644 --- a/src/classes/logstream.class.php +++ b/src/classes/logstream.class.php @@ -207,7 +207,7 @@ abstract class LogStream { * * @return integer Error stat */ - public abstract function ConsolidateDataByField($szFieldId, $nRecordLimit); + public abstract function ConsolidateDataByField($szConsFieldId, $nRecordLimit, $szSortFieldId, $nSortingOrder, $bIncludeLogStreamFields = false); /** diff --git a/src/classes/logstreamdb.class.php b/src/classes/logstreamdb.class.php index 53b1f43..8d2040a 100644 --- a/src/classes/logstreamdb.class.php +++ b/src/classes/logstreamdb.class.php @@ -696,67 +696,124 @@ class LogStreamDB extends LogStream { * * @return integer Error stat */ - public function ConsolidateDataByField($szFieldId, $nRecordLimit) + public function ConsolidateDataByField($szConsFieldId, $nRecordLimit, $szSortFieldId, $nSortingOrder, $aIncludeCustomFields = null, $bIncludeLogStreamFields = false) { global $content, $dbmapping, $fields; // Copy helper variables, this is just for better readability $szTableType = $this->_logStreamConfigObj->DBTableType; + + // Check if fields are available + if ( !isset($dbmapping[$szTableType]['DBMAPPINGS'][$szConsFieldId]) || !isset($dbmapping[$szTableType]['DBMAPPINGS'][$szSortFieldId]) ) + return ERROR_DB_DBFIELDNOTFOUND; - if ( isset($dbmapping[$szTableType]['DBMAPPINGS'][$szFieldId]) ) + // --- Set Options + $nConsFieldType = $fields[$szConsFieldId]['FieldType']; + + if ( $nSortingOrder == SORTING_ORDER_DESC ) + $szSortingOrder = "DESC"; + else + $szSortingOrder = "ASC"; + // --- + + // --- Set DB Field names + $myDBConsFieldName = $dbmapping[$szTableType]['DBMAPPINGS'][$szConsFieldId]; + $myDBGroupByFieldName = $myDBConsFieldName; + + // Check which fields to include + if ( $aIncludeCustomFields != null ) { - // Get FieldType - $nFieldType = $fields[$szFieldId]['FieldType']; - - // Set DB Field name first! - $myDBFieldName = $dbmapping[$szTableType]['DBMAPPINGS'][$szFieldId]; - $myDBQueryFieldName = $myDBFieldName; - $mySelectFieldName = $myDBFieldName; - - // Special handling for date fields - if ( $nFieldType == FILTER_TYPE_DATE ) + $myDBQueryFields = ""; + foreach ( $aIncludeCustomFields as $myFieldName ) { - // Helper variable for the select statement - $mySelectFieldName = $mySelectFieldName . "Grouped"; - $myDBQueryFieldName = "DATE( " . $myDBFieldName . ") AS " . $mySelectFieldName ; + if ( isset($dbmapping[$szTableType]['DBMAPPINGS'][$myFieldName]) ) + $myDBQueryFields .= $dbmapping[$szTableType]['DBMAPPINGS'][$myFieldName] . ", "; } - - // Create SQL String now! - $szSql = "SELECT " . - $myDBQueryFieldName . ", " . - "count(" . $myDBFieldName . ") as TotalCount " . - " FROM " . $this->_logStreamConfigObj->DBTableName . - " GROUP BY " . $mySelectFieldName . - " ORDER BY TotalCount DESC" . - " LIMIT " . $nRecordLimit; - - // Perform Database Query - $myquery = mysql_query($szSql, $this->_dbhandle); - if ( !$myquery ) - return ERROR_DB_QUERYFAILED; - // Initialize Array variable - $aResult = array(); - - // read data records - while ($myRow = mysql_fetch_array($myquery, MYSQL_ASSOC)) + // Append Sortingfield + if ( !in_array($szConsFieldId, $aIncludeCustomFields) ) + $myDBQueryFields .= $myDBConsFieldName . ", "; + } + else if ( $bIncludeLogStreamFields ) + { + $myDBQueryFields = ""; + foreach ( $this->_arrProperties as $myFieldName ) { - $aResult[ $myRow[$mySelectFieldName] ] = $myRow; + if ( isset($dbmapping[$szTableType]['DBMAPPINGS'][$myFieldName]) ) + $myDBQueryFields .= $dbmapping[$szTableType]['DBMAPPINGS'][$myFieldName] . ", "; } + } + else // Only Include ConsolidateField + $myDBQueryFields = $myDBConsFieldName . ", "; + + + + if ( $szConsFieldId == $szSortFieldId ) + $myDBSortedFieldName = "ConsolidatedField"; + else + $myDBSortedFieldName = $szSortFieldId; + // --- + + // Special handling for date fields + if ( $nConsFieldType == FILTER_TYPE_DATE ) + { + // Helper variable for the select statement + $mySelectFieldName = $myDBGroupByFieldName . "Grouped"; + $myDBQueryFieldName = "DATE( " . $myDBConsFieldName . ") AS " . $myDBGroupByFieldName ; + } + + // Create SQL String now! + $szSql = "SELECT " . + $myDBQueryFields . + "count(" . $myDBConsFieldName . ") as ConsolidatedField " . + " FROM " . $this->_logStreamConfigObj->DBTableName . + " GROUP BY " . $myDBGroupByFieldName . + " ORDER BY " . $myDBSortedFieldName . " " . $szSortingOrder . + " LIMIT " . $nRecordLimit; + + // Perform Database Query + $myquery = mysql_query($szSql, $this->_dbhandle); + if ( !$myquery ) + return ERROR_DB_QUERYFAILED; + + // Initialize Array variable + $aResult = array(); + + // read data records + while ($myRow = mysql_fetch_array($myquery, MYSQL_ASSOC)) + { + // Create new row + $aNewRow = array(); + + foreach ( $myRow as $myFieldName => $myFieldValue ) + { + if ( $myFieldName == $dbmapping[$szTableType]['DBMAPPINGS'][$szConsFieldId] ) + $aNewRow[$szConsFieldId] = $myFieldValue; + else + $aNewRow[$myFieldName] = $myFieldValue; + +// if ( in_array($myFieldName, $this->_arrProperties) ) +// echo "!!"; +//print_r ( $this->_arrProperties ); +// echo $myFieldName; +// exit; + } + + // Add new row to result + $aResult[] = $aNewRow; + +// $aResult[ $myRow[$myDBGroupByFieldName] ] = $myRow; + } // $aResult[] = $myRow; // $aResult[ $myRow[$mySelectFieldName] ] = $myRow['TotalCount']; - // return finished array - if ( count($aResult) > 0 ) - return $aResult; - else - return ERROR_NOMORERECORDS; - } + // return finished array + if ( count($aResult) > 0 ) + return $aResult; else - { - // return error code, field mapping not found - return ERROR_DB_DBFIELDNOTFOUND; - } + return ERROR_NOMORERECORDS; + + } diff --git a/src/classes/logstreampdo.class.php b/src/classes/logstreampdo.class.php index a0f9918..d4e81bf 100644 --- a/src/classes/logstreampdo.class.php +++ b/src/classes/logstreampdo.class.php @@ -688,7 +688,7 @@ class LogStreamPDO extends LogStream { * * @return integer Error stat */ - public function ConsolidateDataByField($szFieldId, $nRecordLimit) + public function ConsolidateDataByField($szConsFieldId, $nRecordLimit, $szSortFieldId, $nSortingOrder, $bIncludeLogStreamFields = false) { global $content, $dbmapping; diff --git a/src/classes/reports/report.eventlog.monilog.class.php b/src/classes/reports/report.eventlog.monilog.class.php index bb8ca63..f9274e0 100644 --- a/src/classes/reports/report.eventlog.monilog.class.php +++ b/src/classes/reports/report.eventlog.monilog.class.php @@ -107,14 +107,14 @@ class Report_monilog extends Report { // Step 1: Gather Summaries // Obtain data from the logstream! - $reportData = $this->_streamObj->ConsolidateDataByField( SYSLOG_SEVERITY, 10 ); + $reportData = $this->_streamObj->ConsolidateDataByField( SYSLOG_SEVERITY, 10, SYSLOG_SEVERITY, SORTING_ORDER_DESC, null, false ); // If data is valid, we have an array! if ( is_array($reportData) && count($reportData) > 0 ) { foreach ($reportData as &$tmpReportData ) { - $tmpReportData['DisplayName'] = GetFacilityDisplayName( $tmpReportData[SYSLOG_SEVERITY] ); + $tmpReportData['DisplayName'] = GetSeverityDisplayName( $tmpReportData[SYSLOG_SEVERITY] ); } } diff --git a/src/include/constants_logstream.php b/src/include/constants_logstream.php index 99bfcf1..c66bced 100644 --- a/src/include/constants_logstream.php +++ b/src/include/constants_logstream.php @@ -86,6 +86,9 @@ define('ALIGN_RIGHT', 'right'); define('REPORT_OUTPUT_HTML', 'html'); define('REPORT_OUTPUT_PDF', 'pdf'); +// Defines for sorting +define('SORTING_ORDER_ASC', 'asc'); +define('SORTING_ORDER_DESC', 'desc'); // --- Predefine fields array! $fields[SYSLOG_UID]['FieldID'] = SYSLOG_UID;