From 42412e261337b6c83fe2c3426ab4f77f545e426e Mon Sep 17 00:00:00 2001 From: Andre Lorbach Date: Wed, 2 Apr 2008 14:34:22 +0200 Subject: [PATCH 1/3] Created abstract LineParser class, moved Parser Class to LineParserSyslog. --- src/classes/logstreamlineparser.class.php | 43 +++++++++++++++++++ ...hp => logstreamlineparsersyslog.class.php} | 41 ++++++++++-------- 2 files changed, 65 insertions(+), 19 deletions(-) create mode 100644 src/classes/logstreamlineparser.class.php rename src/classes/{logstreamparser.class.php => logstreamlineparsersyslog.class.php} (58%) diff --git a/src/classes/logstreamlineparser.class.php b/src/classes/logstreamlineparser.class.php new file mode 100644 index 0000000..beb28d2 --- /dev/null +++ b/src/classes/logstreamlineparser.class.php @@ -0,0 +1,43 @@ + www.phplogcon.org <- * + * * + * Use this script at your own risk! * + * ----------------------------------------------------------------- * + * LogStream LineParser abstract basic class * + * * + * All directives are explained within this file * + ********************************************************************* +*/ + +// --- Avoid directly accessing this file! +if ( !defined('IN_PHPLOGCON') ) +{ + die('Hacking attempt'); + exit; +} +// --- + +// --- Basic Includes +require_once($gl_root_path . 'classes/enums.class.php'); +require_once($gl_root_path . 'include/constants_errors.php'); +require_once($gl_root_path . 'include/constants_logstream.php'); +// --- + + +abstract class LogStreamLineParser { +// protected $_arrProperties = null; + + /** + * ParseLine + * + * @param arrArguments array in&out: properties of interest. There can be no guarantee the logstream can actually deliver them. + * @return integer Error stat + */ + public abstract function ParseLine(&$arrArguments); + +} + +?> \ No newline at end of file diff --git a/src/classes/logstreamparser.class.php b/src/classes/logstreamlineparsersyslog.class.php similarity index 58% rename from src/classes/logstreamparser.class.php rename to src/classes/logstreamlineparsersyslog.class.php index 73af73d..cd74b30 100644 --- a/src/classes/logstreamparser.class.php +++ b/src/classes/logstreamlineparsersyslog.class.php @@ -27,34 +27,24 @@ require_once($gl_root_path . 'include/constants_logstream.php'); // --- -class LogStreamParser { -// protected $_readDirection = EnumReadDirection::Forward; -// protected $_filters = null; -// protected $_current_uId = -1; -// protected $_logStreamConfigObj = null; +class LogStreamLineParserSyslog extends LogStreamLineParser { // protected $_arrProperties = null; // Constructor - public function LogStreamParser() { + public function LogStreamLineParserSyslog() { return; // Nothing } /** - * ParseSyslogMessage + * ParseLine * - * @param arrProperties string in: properties of interest. There can be no guarantee the logstream can actually deliver them. + * @param arrArguments array in&out: properties of interest. There can be no guarantee the logstream can actually deliver them. * @return integer Error stat */ - public function ParseSyslogMessage(&$arrArguments) + public function ParseLine(&$arrArguments) { - /* Sample: - * Mar 10 14:45:39 debandre syslogd 1.4.1#18: restart. - * Mar 10 14:45:44 debandre anacron[3226]: Job `cron.daily' terminated (mailing output) - * - */ - - // Typical Syslog Message - if ( preg_match("/(... [0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}) (.*?) (.*?)\[(.*?)\]: (.*?)$/", $arrArguments[SYSLOG_MESSAGE], $out ) ) + // Sample (Syslog): Mar 10 14:45:44 debandre anacron[3226]: Job `cron.daily' terminated (mailing output) + if ( preg_match("/(... [0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}) (.*?) (.*?)\[(.*?)\]:(.*?)$/", $arrArguments[SYSLOG_MESSAGE], $out ) ) { // Copy parsed properties! $arrArguments[SYSLOG_DATE] = $out[1]; @@ -63,7 +53,17 @@ class LogStreamParser { $arrArguments[SYSLOG_PROCESSID] = $out[4]; $arrArguments[SYSLOG_MESSAGE] = $out[5]; } - else if ( preg_match("/(... [0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}) (.*?) (.*?): (.*?)$/", $arrArguments[SYSLOG_MESSAGE], $out ) ) + // Sample (Syslog): Mar 10 14:45:39 debandre syslogd 1.4.1#18: restart. + else if ( preg_match("/(... [0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}) (.*?) (.*?):(.*?)$/", $arrArguments[SYSLOG_MESSAGE], $out ) ) + { + // Copy parsed properties! + $arrArguments[SYSLOG_DATE] = $out[1]; + $arrArguments[SYSLOG_HOST] = $out[2]; + $arrArguments[SYSLOG_SYSLOGTAG] = $out[3]; + $arrArguments[SYSLOG_MESSAGE] = $out[4]; + } + // Sample (RSyslog): 2008-03-28T11:07:40.591633+01:00 localhost rger: test 1 + else if ( preg_match("/([0-9]{4,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\.[0-9]{1,6}\+[0-9]{1,2}:[0-9]{1,2}) (.*?) (.*?):(.*?)$/", $arrArguments[SYSLOG_MESSAGE], $out ) ) { // Copy parsed properties! $arrArguments[SYSLOG_DATE] = $out[1]; @@ -73,9 +73,12 @@ class LogStreamParser { } else { - // Cannot Parse Syslog message with this pattern! + // TODO: Cannot Parse Syslog message with this pattern! die ("wtf - " . $arrArguments[SYSLOG_MESSAGE] ); } + + // Return success! + return SUCCESS; } From 46540c8fe29ee36a04c1dd915acbbaea2d01c5a6 Mon Sep 17 00:00:00 2001 From: Andre Lorbach Date: Wed, 2 Apr 2008 15:03:32 +0200 Subject: [PATCH 2/3] enhanced objectmodel.dia --- doc/objectmodel.dia | Bin 3792 -> 4160 bytes src/classes/logstreamconfigdisk.class.php | 15 +++++++++++++++ src/classes/logstreamdisk.class.php | 6 +----- src/config.php | 4 ++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/doc/objectmodel.dia b/doc/objectmodel.dia index d6702033c48d300a01aee1f82e15fb7d5877e335..1479082bc1bfe5346f13d27c2e6608ccc5ae5a3f 100644 GIT binary patch literal 4160 zcmZYBbx;&~*9UM3>CUA~78Imex?8%tmWHLf1tgblkWgYN0cj+bkX}+sE)CMTgdoV} zQSZEWo_XHiXXeaz&Y!=TGv_csv7Y>SxF_bO-pe40u&Mfu_WS9{N}l=>y~TrXYm*>P zn1(%rL@L%Ogk1+$+HWrQ;RIKw5u#EipN1ZKFF-1mE<^jIU*y)KuIKOXp(Ip>iBO(+ z%@j^BJryTCPzI2qnF0?BeDprsZ_D8h!c)#j!dsR1QL0DEf~KW zIrb)ly@0qc`BAAfj=n~5Sc%&bFtkd5`oigM=|cAfDl{9gRZe&r@66xZbRlS+S3SMzz70*mY?l1b8n`5X80ZplNdo0 z3P22X6bsEh?6zg7oGlN#oW>})M-R(Q+t6PUNYM{9@mPVUK&I}x)3ZB`OGvo>I>gY= znu5WVc7ZBBZj#E<@A2+?E-2gbTxV;=INJ7Hh-Pf(3Lf@z_I4?NRGTT;jVTtD*4iV; z$G)z9Vi%&P`Rds9<)nb|3FF(`qD5`2q1A$m)?W4!9sq=7!}+HGy%I!W;7SyDaH9!{ z^`W!WzKU~LvJfoc1ZP04`?p=KrZ?vJUgTjd6|Eh{HOB3Ib$k4-AGN@WJDk&)o4Z4@ z==S<6hLK6st8n19ca^e+7x65U-W%Hj)&n3{iT>L+TVvSJ^47l(q$N~iP0{@}qN5BP zL4{txfx$yUFk5+2MmI^7e1y}BEW8=T!`+n^B2|Y7f4RzUnTMn%ZbIg^bs~j_#cGPt z$zQg06#NL7{GRg^a6#ue{Rm1zAYyb@nBzOsS->OTWO+v%qw%K z>shh??iif8nA;-JctqnaHSOk8e8lYUkCtOJ<`(`iUn@K+Yt$CVTdZE9zwJslWPyK* zk!z@ny%uvYs1s3&>U&B+r#ypf50iNAA6+S{9E#oK$L?yGATaqtVaS?nERbG=VhV_G zxiIfWY}$IATC@5VlV@}9tm5*jT?i@Kd3_2h%MMWLQ;WXo6R@J@QFnq-O$r;DZn+dh zc1o>92KP#A6n$A?;bXmc`;0z%yQyz|gWiL%y+YtdYf|b`kDOBu*ekYCSkWhjNtKO@ z&m{7p&DpH@+K)!MhSRH#NpBtGnu1Whh%)w0X&u>ey|4gS^3lJdCR|dO@n6W*(l!K0 zhL4k!PlspLtS9uz)3?y7Gz3|dh6Xw{glezgdfkj46B(?PgjtX{8q&$F8Cw*g)aXn& z1U>llM0;w3qcKcT1^nc(9kxuwDE{h?jYRnktD916(yyIzAAM4K z>?NaJr$||d)QzZua>2wiKX$+U?Jh)l0G`pmOjNCSkF~5C?)$)dkqz!oZ2k}7R;5_@ z&FMPj-WmKSxbhk#YdwyRiD~ zY!^-H@1-$Isr<;5VC(X4q7rK}t@CcG_b?4KF-jf1nNS3x5u*MgX)fNbWVSDkFPIiX z@Xfd=INWK}KI+dG^z3cf-$sn4s9}lPyQdrDxyvaN|B{BI^G$s7A`w$fX%ZWY^p^}w zMl}LeYKc5WJwEgJ7WX^KBXSuEU+!x1{*TU-{pXF$ zF>(m=aP)n+f$HbszXB#y+{u)f_=TU0N?p{B0YHs zb1_?C2D2ws+lGy%1R>R}u&g_+&w8d~PPmt(4R=a?U_~nt+&VtPYK|Bo};l2&@DANBIX1l2h zBKyt+2$=WB8S*A+=WDfAad@dl=5fkz`4QKNhX$#1zg46Y1&>jmT0SF5r-Sx+8b*Ha-lHYJc z{KyyeSj1Ch>Ohza=|c^0QLjw&oB@W_$LEumCqh9D3-hR9mqUYe7NC#p{UumX zX3m8F30qAq?DSGUg1>VxrCYbhS+#e&nj)54E$>@Th`4>5TH@-P#O+=UY1^uO@z*?- z^mH9QyHaj@q0Yt4-DpfJ*;e4^%m}B}T=J9TJxUbQjy-Jc;+}3GcQ6%=v$5yf9927& ztDfh5s5=TdG4&vVEjvlXR0PZr=mZYPG??~Vkh2)7E+z!|@j-2cllrYAB3pkrQch+Z zfts5S?*^7~U%~XxR+@u4%Qn$z_WK}=N7|5g<|Qt<14vn%gxUwcOUi9N#QWS;7rT=4 zh`Z4H#o5x6?U#GTEr0r` zXFPiCC-_SK$=s8<4K>utJ`B{#PncRZ45-d4_o#voe=&Upd7Aka-OD>XXHytFbN3HHnhXUIGA}QHXux9US6DblvX;{7fU{gWo0Z zr=J*^_v1W@P>6n$P?z>eO&*!SjDven*96vYGu>kl8eiKuKw^!k`%?2_CU0@jj9dM; zh?Z6PuSCjf=C@jSt7wmPN)$Bl7dmL7Gvt(+7~78Ag+he6SO1I9PhH-a#$2mZt*hq1v7th{j`GoEwVd(9ZIZWO=BcEcTeLgI7H&<=7B zvZ0j4_gw;#Md3UcY7$N%qW9pqC98Z%hM#j9-|VhuNg{Hvy5u)lQMri&;(JxmEtt>$ zv_jG&a%v46$G8X&e6h&$=@t9A^&FjhF`{tPhcfD?ZAH{G9WO-vEFb2~N}jW%D|+6z z)^F#_2M5ATW?z&O`F#1b@-nYXTgb7B+_ZjbuFLIwH7mWtvOiLOGDVdoS3^!&G!KU* zQ31dcRo+C3u`~W|Mz9b!s!4CKT+%LrH<#vuk8CLN9?R>a3^|rQqh5s8Q`!Fx8#c9v zSNS-t9YoDAzkBM~^`za=lI$nW*ej+e$v$F_83QL-K{^4CPF@;()Y!lz1~%&goPpv* zVol)CBDcH6>xv>uP4#{zO>`Qd=abfIgh56sVGi_puQFjwn%2I(Q-kM`31r1>_pp9G zV)+C{wb4a7#k?vIoS;fu3ttx8(;G6{CU&1N(7gs3O&V=O7CN2Qj4qKsKkIt0XXkKw zPZa5JCD~?n8@92@3?FW&C%zudocQWLy7l_$FnBD|gN%SOn~o(>37c2)%O_r|A+?Y1 zY!XT8@@o)=1ENlZHc#8ZtR{82$YLIXbQfz|P`y+}15(7BB!`J~;5M^N>47y1_pR10 z-6a0Cl&Er@5vVSUp*u}Q2iyxrhZ1utegyRWPe_>uH@BOFmXOAPXL*PuTQEY=!&Ds3I;Z62)-RA0R@-#b>Y`1F9o2E>e(C+God{PebxHOGX ze;30XZsV~vOQqIsgY@QtDTT~L?N$09ul-Su{n1~0nrufaQ%;*eLFC`i_<<3D(;Pf~ zDnWT-LGWJ(XUqNH3L@cy!%fG2hVA4x|AGU7r5`UY_`c z*C!o0M%G<17ENE#7SzM78boVK&x`x}jaM-;=eonz&x|BW_)SxfND)Z)v3MActx#=; z6AZpDs;c-+le?|(Ky>xuJE}eiI*dL&hMI^nFUv2z^=XS71;mDF>mq_ z9FDnX_ zI^buta~}RXg+2+0jLqlst1{OzdJOWv%K%2uSDH%CkY;U}X|Kax7KAu};pLi=&*UwF Y5-N1Ko;y2=pnSxP&tR0s7(#jSALpp}GXMYp literal 3792 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 diff --git a/src/classes/logstreamconfigdisk.class.php b/src/classes/logstreamconfigdisk.class.php index 023e84a..2375a4d 100644 --- a/src/classes/logstreamconfigdisk.class.php +++ b/src/classes/logstreamconfigdisk.class.php @@ -23,16 +23,31 @@ if ( !defined('IN_PHPLOGCON') ) class LogStreamConfigDisk extends LogStreamConfig { public $FileName = ''; + public $_lineParser = null; public function LogStreamFactory($o) { // An instance is created, then include the logstreamdisk class as well! global $gl_root_path; require_once($gl_root_path . 'classes/logstreamdisk.class.php'); + + // Create and set LineParser Instance + $this->_lineParser = $this->CreateLineParser(); // return LogStreamDisk instance return new LogStreamDisk($o); } + private function CreateLineParser() + { + // We need to include Line Parser on demand! + global $gl_root_path; + require_once($gl_root_path . 'classes/logstreamlineparser.class.php'); + require_once($gl_root_path . 'classes/logstreamlineparsersyslog.class.php'); + + //return LineParser Instance + return new LogStreamLineParserSyslog(); + } + } ?> \ No newline at end of file diff --git a/src/classes/logstreamdisk.class.php b/src/classes/logstreamdisk.class.php index eebf67e..37f982a 100644 --- a/src/classes/logstreamdisk.class.php +++ b/src/classes/logstreamdisk.class.php @@ -29,7 +29,6 @@ if ( !defined('IN_PHPLOGCON') ) // --- Required Includes! require_once($gl_root_path . 'include/constants_errors.php'); -require_once($gl_root_path . 'classes/logstreamparser.class.php'); // --- class LogStreamDisk extends LogStream { @@ -43,12 +42,9 @@ class LogStreamDisk extends LogStream { private $_buffer_length = 0; private $_p_buffer = -1; - private $_msgParser = null; - // Constructor public function LogStreamDisk($streamConfigObj) { $this->_logStreamConfigObj = $streamConfigObj; - $this->_msgParser = new LogStreamParser(); } /** @@ -187,7 +183,7 @@ class LogStreamDisk extends LogStream { else $ret = $this->ReadNextBackwards($uID, $arrProperitesOut); -$this->_msgParser->ParseSyslogMessage($arrProperitesOut); +$this->_logStreamConfigObj->_lineParser->ParseLine($arrProperitesOut); // Loop until the filter applies, or another error occurs. } while ( $this->ApplyFilters($ret, $arrProperitesOut) != SUCCESS && $ret == SUCCESS ); diff --git a/src/config.php b/src/config.php index 196964f..d08184b 100644 --- a/src/config.php +++ b/src/config.php @@ -44,5 +44,9 @@ $CFG['Sources'][1]['Name'] = "Old Syslog Disk File"; $CFG['Sources'][1]['SourceType'] = SOURCE_DISK; $CFG['Sources'][1]['DiskFile'] = $gl_root_path . "samplelogs/syslog.0"; + $CFG['Sources'][2]['ID'] = "Source3"; + $CFG['Sources'][2]['Name'] = "RSyslog Disk File"; + $CFG['Sources'][2]['SourceType'] = SOURCE_DISK; + $CFG['Sources'][2]['DiskFile'] = $gl_root_path . "samplelogs/rsyslog"; // --- ?> \ No newline at end of file From 53c48767946bb96a3848830a9513f08da937d5e4 Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Wed, 2 Apr 2008 17:06:36 +0200 Subject: [PATCH 3/3] clarified licensing --- src/config.php | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/src/config.php b/src/config.php index d08184b..d1f3909 100644 --- a/src/config.php +++ b/src/config.php @@ -1,14 +1,31 @@ www.phplogcon.org <- * - * * - * Use this script at your own risk! * - * ----------------------------------------------------------------- * - * Main Configuration File * - * * - * -> Configuration need variables for the Database connection * + * phpLogCon - http://www.phplogcon.org + * ----------------------------------------------------------------- + * Main Configuration File + * + * -> Configuration need variables for the Database connection + * + * Copyright (C) 2008 Adiscon GmbH. + * + * This file is part of phpLogCon. + * + * PhpLogCon is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * PhpLogCon is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with phpLogCon. If not, see . + * + * A copy of the GPL can be found in the file "COPYING" in this + * distribution. ********************************************************************* */ @@ -49,4 +66,4 @@ $CFG['Sources'][2]['SourceType'] = SOURCE_DISK; $CFG['Sources'][2]['DiskFile'] = $gl_root_path . "samplelogs/rsyslog"; // --- -?> \ No newline at end of file +?>