2 /**************************************************************************
3 ** (c) Copyright 2002, Andromeda Technology & Automation
4 ** This is free software; you can redistribute it and/or modify it under the
5 ** terms of the GNU General Public License, see the file COPYING.
6 ***************************************************************************
7 ** MODULE INFORMATION *
8 ***********************
9 ** FILE NAME : irix_syslog_cooker.cpp
11 ** VERSION NUMBER : $Revision: 1.4 $
13 ** DESCRIPTION : Cooks IRIX system log lines
18 ***************************************************************************
19 ** ADMINISTRATIVE INFORMATION *
20 ********************************
21 ** ORIGINAL AUTHOR : Arjen Baart - arjen@andromeda.nl
22 ** CREATION DATE : Aug 09, 2003
23 ** LAST UPDATE : Aug 09, 2003
25 **************************************************************************/
27 /*****************************
28 $Log: irix_syslog_cooker.cpp,v $
29 Revision 1.4 2007-10-19 07:22:12 arjen
30 When extracting the service name for a log entry, the '/' character
31 is not considered part of that name.
33 Revision 1.3 2007/01/11 13:51:40 arjen
34 The '-' character is part of the service name.
36 Revision 1.2 2004/01/13 12:20:13 arjen
37 Accept '/' and '.' characters within the service name
39 Revision 1.1 2003/08/11 16:56:16 arjen
40 Different kinds of log files are parsed by a collection of objects
41 of different classes, derived from the base class line_cooker
42 Depending on the message content or the message_type element in
43 XML, one of these objects is selected.
45 Logrunner is integrated with gcm_input. Although its functionality
46 is still limited, a connection between logrunner and gcm_input
49 *****************************/
51 /* static const char *RCSID = "$Id: irix_syslog_cooker.cpp,v 1.4 2007-10-19 07:22:12 arjen Exp $"; */
55 #include "irix_syslog_cooker.h"
57 static const String syslog_date_re("[[:alpha:]]{3} [ 123][0-9] [0-9]{2}:[0-9]{2}:[0-9]{2}");
58 static const regex re_syslog_irix(syslog_date_re + " [0-7][A-T]:[[:alnum:]]+ [[:alpha:]/]+.*:.+");
60 bool irix_syslog_cooker::check_pattern(String logline)
62 return logline == re_syslog_irix;
65 bool irix_syslog_cooker::cook_this(String logline, UTC arrival)
67 if (check_pattern(logline))
69 String datestring = logline(0,16);
70 date log_date = datestring;
71 hour log_time = datestring;
72 String rest; // Rest of the line to be parsed
75 if (log_date.Year() < 0 || log_date.Year() > 2500)
77 // The year is not in the log file. Assume the year of arrival,
78 // unless this puts the log entry at a later date than the arrival date.
79 // This happens e.g. when a log entry from December arrives in Januari.
81 log_date = date(log_date.Day(), log_date.Month(), date(arrival).Year());
82 if (log_date > date(arrival))
84 log_date = date(log_date.Day(), log_date.Month(), date(arrival).Year() - 1);
88 ts = UTC(log_date, log_time);
90 // Extract the hostname
96 // Extract the service
99 for (i = 0; (isalpha(rest[i]) || rest[i] == '.' || rest[i] == '-') && i < ~rest; i++);