diff --git a/src/classes/logstream.class.php b/src/classes/logstream.class.php index 728562c..7e35211 100644 --- a/src/classes/logstream.class.php +++ b/src/classes/logstream.class.php @@ -252,6 +252,12 @@ abstract class LogStream { public abstract function SaveMessageChecksum( $arrProperitesIn ); + /* + * Helper function to set the checksum for all messages in the current logstream class + */ + public abstract function UpdateAllMessageChecksum( ); + + /* * Helper function for logstream classes to clear filter based stuff */ @@ -279,7 +285,7 @@ abstract class LogStream { else $finalfilters = $szFilters; - OutputDebugMessage("SetFilter combined = '" . $finalfilters . "'. ", DEBUG_DEBUG); + OutputDebugMessage("LogStream|SetFilter: SetFilter combined = '" . $finalfilters . "'. ", DEBUG_DEBUG); // Reset Filters first to make sure we do not add multiple filters! $this->_filters = null; diff --git a/src/classes/logstreamdb.class.php b/src/classes/logstreamdb.class.php index 598ccca..13d54d3 100644 --- a/src/classes/logstreamdb.class.php +++ b/src/classes/logstreamdb.class.php @@ -601,6 +601,46 @@ class LogStreamDB extends LogStream { return $rowcount; } + + /* + * Implementation of the UpdateAllMessageChecksum + * + * Update all missing checksum properties in the current database + */ + public function UpdateAllMessageChecksum( ) + { + global $querycount, $dbmapping; + $szTableType = $this->_logStreamConfigObj->DBTableType; + + // UPDATE DATA NOW! + $szSql = "UPDATE " . $this->_logStreamConfigObj->DBTableName . + " SET " . $dbmapping[$szTableType]['DBMAPPINGS'][MISC_CHECKSUM] . " = crc32(" . $dbmapping[$szTableType]['DBMAPPINGS'][SYSLOG_MESSAGE] . ") " . + " WHERE " . $dbmapping[$szTableType]['DBMAPPINGS'][MISC_CHECKSUM] . " IS NULL"; + + // Output Debug Informations + OutputDebugMessage("LogStreamDB|UpdateAllMessageChecksum: Running Created SQL Query:
" . $szSql, DEBUG_ULTRADEBUG); + + // Running SQL Query + $myQuery = mysql_query($szSql, $this->_dbhandle); + if ($myQuery) + { + // Debug Output + OutputDebugMessage("LogStreamDB|UpdateAllMessageChecksum: Successfully updated Checksum of '" . mysql_affected_rows($this->_dbhandle) . "' datarecords", DEBUG_INFO); + + // Return success + return SUCCESS; + } + else + { + // error occured, output DEBUG message + $this->PrintDebugError("SaveMessageChecksum failed with SQL Statement ' " . $szSql . " '"); + + // Failed + return ERROR; + } + } + + /* * Implementation of the SaveMessageChecksum * @@ -613,7 +653,7 @@ class LogStreamDB extends LogStream { if ( isset($arrProperitesIn[SYSLOG_UID]) && isset($arrProperitesIn[MISC_CHECKSUM]) && isset($dbmapping[$szTableType]['DBMAPPINGS'][MISC_CHECKSUM]) ) { - // DELETE DATA NOW! + // UPDATE DATA NOW! $szSql = "UPDATE " . $this->_logStreamConfigObj->DBTableName . " SET " . $dbmapping[$szTableType]['DBMAPPINGS'][MISC_CHECKSUM] . " = " . $arrProperitesIn[MISC_CHECKSUM] . " WHERE " . $dbmapping[$szTableType]['DBMAPPINGS'][SYSLOG_UID] . " = " . $arrProperitesIn[SYSLOG_UID]; @@ -712,6 +752,9 @@ class LogStreamDB extends LogStream { " ORDER BY " . $myDBSortedFieldName . " " . $szSortingOrder . $szLimitSql ; + // Output Debug Informations + OutputDebugMessage("LogStreamDB|ConsolidateItemListByField: Running Created SQL Query:
" . $szSql, DEBUG_ULTRADEBUG); + // Perform Database Query $myquery = mysql_query($szSql, $this->_dbhandle); if ( !$myquery ) @@ -849,7 +892,7 @@ class LogStreamDB extends LogStream { $szLimitSql ; // Output Debug Informations - OutputDebugMessage("LogStreamDB|ConsolidateDataByField: Running Created SQL Query:
" . $szSql, DEBUG_DEBUG); + OutputDebugMessage("LogStreamDB|ConsolidateDataByField: Running Created SQL Query:
" . $szSql, DEBUG_ULTRADEBUG); // Perform Database Query $myquery = mysql_query($szSql, $this->_dbhandle); diff --git a/src/classes/logstreamdisk.class.php b/src/classes/logstreamdisk.class.php index 5568a50..875098a 100644 --- a/src/classes/logstreamdisk.class.php +++ b/src/classes/logstreamdisk.class.php @@ -666,6 +666,17 @@ class LogStreamDisk extends LogStream { } + /* + * Implementation of the UpdateAllMessageChecksum + * + * not implemented! + */ + public function UpdateAllMessageChecksum( ) + { + return SUCCESS; + } + + /** * Implementation of ConsolidateItemListByField * @@ -785,6 +796,11 @@ class LogStreamDisk extends LogStream { { if ( isset($logArray[$szConsFieldId]) ) { + // --- Special Case for the checksum field, we need to generate the checksum ourself! + if ( $szConsFieldId == MISC_CHECKSUM ) + $logArray[$szConsFieldId] = crc32( $logArray[SYSLOG_MESSAGE] ); + // --- + if ( $nConsFieldType == FILTER_TYPE_DATE ) { // Convert to FULL Day Date for now! diff --git a/src/classes/logstreampdo.class.php b/src/classes/logstreampdo.class.php index bc4eefb..7cd777b 100644 --- a/src/classes/logstreampdo.class.php +++ b/src/classes/logstreampdo.class.php @@ -690,6 +690,48 @@ class LogStreamPDO extends LogStream { } + /* + * Implementation of the UpdateAllMessageChecksum + * + * Update all missing checksum properties in the current database + */ + public function UpdateAllMessageChecksum( ) + { + global $querycount, $dbmapping; + $szTableType = $this->_logStreamConfigObj->DBTableType; + + // UPDATE DATA NOW! + $szSql = "UPDATE " . $this->_logStreamConfigObj->DBTableName . + " SET " . $dbmapping[$szTableType]['DBMAPPINGS'][MISC_CHECKSUM] . " = crc32(" . $dbmapping[$szTableType]['DBMAPPINGS'][SYSLOG_MESSAGE] . ") " . + " WHERE " . $dbmapping[$szTableType]['DBMAPPINGS'][MISC_CHECKSUM] . " IS NULL"; + + // Output Debug Informations + OutputDebugMessage("LogStreamPDO|UpdateAllMessageChecksum: Running Created SQL Query:
" . $szSql, DEBUG_ULTRADEBUG); + + // Running SQL Query + $myQuery = $this->_dbhandle->query($szSql); + if ( $myQuery ) + { + // Output Debug Informations + OutputDebugMessage("LogStreamPDO|UpdateAllMessageChecksum: Successfully updated Checksum of '" . $myQuery->rowCount() . "' datarecords", DEBUG_INFO); + + // Free query now + $myQuery->closeCursor(); + + // Return success + return SUCCESS; + } + else + { + // error occured, output DEBUG message + $this->PrintDebugError("UpdateAllMessageChecksum failed with SQL Statement ' " . $szSql . " '"); + + // Failed + return ERROR; + } + } + + /* * Implementation of the SaveMessageChecksum * diff --git a/src/classes/reports/report.syslog.syslogsummary.class.php b/src/classes/reports/report.syslog.syslogsummary.class.php index d4af770..16c0ee4 100644 --- a/src/classes/reports/report.syslog.syslogsummary.class.php +++ b/src/classes/reports/report.syslog.syslogsummary.class.php @@ -299,13 +299,18 @@ class Report_syslogsummary extends Report { $res = $this->_streamObj->Open( $this->_arrProperties, true ); if ( $res == SUCCESS ) { - if ( true ) - { // --- New Method to consolidate data! // TimeStats $nowtime = microtime_float(); $content["report_rendertime"] .= number_format($nowtime - $gl_starttime, 2, '.', '') . "s "; + // Update all Checksums first! + $this->_streamObj->UpdateAllMessageChecksum(); + + // TimeStats + $nowtime = microtime_float(); + $content["report_rendertime"] .= number_format($nowtime - $gl_starttime, 2, '.', '') . "s "; + foreach ( $arrHosts as $myHost ) { // Set custom filters @@ -333,97 +338,95 @@ class Report_syslogsummary extends Report { $nowtime = microtime_float(); $content["report_rendertime"] .= number_format($nowtime - $gl_starttime, 2, '.', '') . "s "; // --- - } - else + +/* + // --- Old Method! + // Init uid helper + $uID = UID_UNKNOWN; + + // Set position to BEGIN of FILE + $this->_streamObj->Sseek($uID, EnumSeek::BOS, 0); + + // Start reading data + $ret = $this->_streamObj->Read($uID, $logArray); + + // TimeStats + $nowtime = microtime_float(); + $content["report_rendertime"] .= number_format($nowtime - $gl_starttime, 2, '.', '') . "s "; + + // Found first data record + if ( $ret == SUCCESS ) { - // --- Old Method! - // Init uid helper - $uID = UID_UNKNOWN; + do + { + // Check if Event from host is in our hosts array + if ( in_array($logArray[SYSLOG_HOST], $arrHosts) ) + { + // Set Host Item Basics if not set yet + if ( !isset($content["report_consdata"][ $logArray[SYSLOG_HOST] ][SYSLOG_HOST]) ) + { + $content["report_consdata"][ $logArray[SYSLOG_HOST] ][SYSLOG_HOST] = $logArray[SYSLOG_HOST]; + } - // Set position to BEGIN of FILE - $this->_streamObj->Sseek($uID, EnumSeek::BOS, 0); + // Calc checksum + if ( !isset($logArray[MISC_CHECKSUM]) || $logArray[MISC_CHECKSUM] == 0 ) + { + // Calc crc32 from message, we use this as index + $logArray[MISC_CHECKSUM] = crc32( $logArray[SYSLOG_MESSAGE] ); // Maybe useful somewhere else: sprintf( "%u", crc32 ( $logArray[SYSLOG_MESSAGE] )); + $strChecksum = $logArray[MISC_CHECKSUM]; + + // Save calculated Checksum into DB! + $this->_streamObj->SaveMessageChecksum($logArray); + } + else // Get checksum + $strChecksum = $logArray[MISC_CHECKSUM]; + + // Check if entry exists in result array + if ( isset($content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]) ) + { + // Increment counter and set First/Last Event date + $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['ItemCount']++; + + // Set FirstEvent date if necessary! + if ( $logArray[SYSLOG_DATE][EVTIME_TIMESTAMP] < $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['FirstOccurrence_Date'][EVTIME_TIMESTAMP] ) + $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['FirstOccurrence_Date'] = $logArray[SYSLOG_DATE]; + + // Set LastEvent date if necessary! + if ( $logArray[SYSLOG_DATE][EVTIME_TIMESTAMP] > $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['LastOccurrence_Date'][EVTIME_TIMESTAMP] ) + $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['LastOccurrence_Date'] = $logArray[SYSLOG_DATE]; + } + else + { + // Set Basic data entries + if (isset( $content['filter_facility_list'][$logArray[SYSLOG_FACILITY]] )) + $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ][SYSLOG_FACILITY] = $logArray[SYSLOG_FACILITY]; + else + $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ][SYSLOG_FACILITY] = SYSLOG_LOCAL0; // Set default in this case + if (isset( $content['filter_severity_list'][$logArray[SYSLOG_SEVERITY]] )) + $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ][SYSLOG_SEVERITY] = $logArray[SYSLOG_SEVERITY]; + else + $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ][SYSLOG_SEVERITY] = SYSLOG_NOTICE; // Set default in this case + $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ][SYSLOG_SYSLOGTAG] = $logArray[SYSLOG_SYSLOGTAG]; + $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ][SYSLOG_MESSAGE] = $logArray[SYSLOG_MESSAGE]; + + // Set Counter and First/Last Event date + $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['ItemCount'] = 1; + $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['FirstOccurrence_Date'] = $logArray[SYSLOG_DATE]; + $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['LastOccurrence_Date'] = $logArray[SYSLOG_DATE]; + } + } + + // Get next data record + $ret = $this->_streamObj->ReadNext($uID, $logArray); + } while ( $ret == SUCCESS ); - // Start reading data - $ret = $this->_streamObj->Read($uID, $logArray); - // TimeStats $nowtime = microtime_float(); $content["report_rendertime"] .= number_format($nowtime - $gl_starttime, 2, '.', '') . "s "; - - // Found first data record - if ( $ret == SUCCESS ) - { - do - { - // Check if Event from host is in our hosts array - if ( in_array($logArray[SYSLOG_HOST], $arrHosts) ) - { - // Set Host Item Basics if not set yet - if ( !isset($content["report_consdata"][ $logArray[SYSLOG_HOST] ][SYSLOG_HOST]) ) - { - $content["report_consdata"][ $logArray[SYSLOG_HOST] ][SYSLOG_HOST] = $logArray[SYSLOG_HOST]; - } - - // Calc checksum - if ( !isset($logArray[MISC_CHECKSUM]) || $logArray[MISC_CHECKSUM] == 0 ) - { - // Calc crc32 from message, we use this as index - $logArray[MISC_CHECKSUM] = crc32( $logArray[SYSLOG_MESSAGE] ); // Maybe useful somewhere else: sprintf( "%u", crc32 ( $logArray[SYSLOG_MESSAGE] )); - $strChecksum = $logArray[MISC_CHECKSUM]; - - // Save calculated Checksum into DB! - $this->_streamObj->SaveMessageChecksum($logArray); - } - else // Get checksum - $strChecksum = $logArray[MISC_CHECKSUM]; - - // Check if entry exists in result array - if ( isset($content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]) ) - { - // Increment counter and set First/Last Event date - $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['ItemCount']++; - - // Set FirstEvent date if necessary! - if ( $logArray[SYSLOG_DATE][EVTIME_TIMESTAMP] < $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['FirstOccurrence_Date'][EVTIME_TIMESTAMP] ) - $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['FirstOccurrence_Date'] = $logArray[SYSLOG_DATE]; - - // Set LastEvent date if necessary! - if ( $logArray[SYSLOG_DATE][EVTIME_TIMESTAMP] > $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['LastOccurrence_Date'][EVTIME_TIMESTAMP] ) - $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['LastOccurrence_Date'] = $logArray[SYSLOG_DATE]; - } - else - { - // Set Basic data entries - if (isset( $content['filter_facility_list'][$logArray[SYSLOG_FACILITY]] )) - $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ][SYSLOG_FACILITY] = $logArray[SYSLOG_FACILITY]; - else - $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ][SYSLOG_FACILITY] = SYSLOG_LOCAL0; // Set default in this case - if (isset( $content['filter_severity_list'][$logArray[SYSLOG_SEVERITY]] )) - $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ][SYSLOG_SEVERITY] = $logArray[SYSLOG_SEVERITY]; - else - $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ][SYSLOG_SEVERITY] = SYSLOG_NOTICE; // Set default in this case - $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ][SYSLOG_SYSLOGTAG] = $logArray[SYSLOG_SYSLOGTAG]; - $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ][SYSLOG_MESSAGE] = $logArray[SYSLOG_MESSAGE]; - - // Set Counter and First/Last Event date - $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['ItemCount'] = 1; - $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['FirstOccurrence_Date'] = $logArray[SYSLOG_DATE]; - $content["report_consdata"][ $logArray[SYSLOG_HOST] ]['cons_msgs'][ $strChecksum ]['LastOccurrence_Date'] = $logArray[SYSLOG_DATE]; - } - } - - // Get next data record - $ret = $this->_streamObj->ReadNext($uID, $logArray); - } while ( $ret == SUCCESS ); - - // TimeStats - $nowtime = microtime_float(); - $content["report_rendertime"] .= number_format($nowtime - $gl_starttime, 2, '.', '') . "s "; - } - else - return $ret; } - + else + return $ret; +*/ // --- Start Postprocessing foreach( $content["report_consdata"] as &$tmpConsolidatedComputer ) diff --git a/src/include/functions_common.php b/src/include/functions_common.php index fa90ce3..cbf4fb4 100644 --- a/src/include/functions_common.php +++ b/src/include/functions_common.php @@ -570,7 +570,6 @@ function CheckAndSetRunMode() // --- Check necessary PHP Extensions! $loadedExtensions = get_loaded_extensions(); - // Check for GD libary if ( in_array("gd", $loadedExtensions) ) $content['GD_IS_ENABLED'] = true; @@ -581,6 +580,8 @@ function CheckAndSetRunMode() if ( in_array("mysql", $loadedExtensions) ) { $content['MYSQL_IS_ENABLED'] = true; } else { $content['MYSQL_IS_ENABLED'] = false; } // Check PDO Extension if ( in_array("PDO", $loadedExtensions) ) { $content['PDO_IS_ENABLED'] = true; } else { $content['PDO_IS_ENABLED'] = false; } + // Check sockets Extension + if ( in_array("sockets", $loadedExtensions) ) { $content['SOCKETS_IS_ENABLED'] = true; } else { $content['SOCKETS_IS_ENABLED'] = false; } // --- } @@ -1347,7 +1348,31 @@ function OutputDebugMessage($szDbg, $szDbgLevel = DEBUG_INFO) // Check if the user wants to syslog the error! if ( GetConfigSetting("MiscDebugToSyslog", 0, CFGLEVEL_GLOBAL) == 1 ) { - $syslogSend = syslog(GetPriorityFromDebugLevel($szDbgLevel), $szDbg); + if ( $content['SOCKETS_IS_ENABLED'] ) + { + // Send using UDP ourself! + $sock = @socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); + $stprifac = (SYSLOG_LOCAL0 << 3); + if ( $szDbgLevel == DEBUG_ERROR_WTF ) + $stprifac += SYSLOG_CRIT; + else if ( $szDbgLevel == DEBUG_ERROR ) + $stprifac += SYSLOG_ERR; + else if ( $szDbgLevel == DEBUG_WARN ) + $stprifac += SYSLOG_WARNING; + else if ( $szDbgLevel == DEBUG_INFO ) + $stprifac += SYSLOG_NOTICE; + else if ( $szDbgLevel == DEBUG_DEBUG ) + $stprifac += SYSLOG_INFO; + else if ( $szDbgLevel == DEBUG_ULTRADEBUG ) + $stprifac += SYSLOG_DEBUG; + + // Generate RFC5424 Syslog MSG + $szsyslogmsg = "<" . $stprifac . ">" . date("c") . " " . php_uname ("n") . " " . "loganalyzer - - - " . $szDbg ; + @socket_sendto($sock, $szsyslogmsg, strlen($szsyslogmsg), 0, '127.0.0.1', 514); + @socket_close($sock); + } + else // Use PHP System function to send via syslog + $syslogSend = syslog(GetPriorityFromDebugLevel($szDbgLevel), $szDbg); } }