~ubuntu-branches/ubuntu/dapper/ksystemlog/dapper

« back to all changes in this revision

Viewing changes to ksystemlog/src/itemFactory.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Riddell
  • Date: 2005-07-07 16:00:00 UTC
  • Revision ID: james.westby@ubuntu.com-20050707160000-a104d769ph3yfkg4
Tags: upstream-0.3.2
ImportĀ upstreamĀ versionĀ 0.3.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/***************************************************************************
 
2
 *   Copyright (C) 2005 by Nicolas Ternisien                               *
 
3
 *   nicolas.ternisien@gmail.com                                           *
 
4
 *                                                                         *
 
5
 *   This program is free software; you can redistribute it and/or modify  *
 
6
 *   it under the terms of the GNU General Public License as published by  *
 
7
 *   the Free Software Foundation; either version 2 of the License, or     *
 
8
 *   (at your option) any later version.                                   *
 
9
 *                                                                         *
 
10
 *   This program is distributed in the hope that it will be useful,       *
 
11
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 
12
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 
13
 *   GNU General Public License for more details.                          *
 
14
 *                                                                         *
 
15
 *   You should have received a copy of the GNU General Public License     *
 
16
 *   along with this program; if not, write to the                         *
 
17
 *   Free Software Foundation, Inc.,                                       *
 
18
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 
19
 ***************************************************************************/
 
20
 
 
21
//KDE includes
 
22
#include <kdebug.h>
 
23
#include <kiconloader.h>
 
24
#include <klocale.h>
 
25
 
 
26
//KSystemLog includes
 
27
#include "logLine.h"
 
28
#include "childLogLine.h"
 
29
#include "parentLogLine.h"
 
30
 
 
31
#include "logListItem.h"
 
32
 
 
33
#include "logMode.h"
 
34
 
 
35
 
 
36
#include "itemFactory.h"
 
37
 
 
38
LogListItem* ItemFactory::createLogListItem(QListView* view, LogLine* line) {
 
39
        
 
40
        //If it is a parent Log Line
 
41
        if (line->isParentLogLine()==true)
 
42
                return(createParentItem(view, (ParentLogLine*)line));
 
43
                
 
44
        //If it's a child Log Line
 
45
        if (line->isChildLogLine()==true)
 
46
                return(createChildItem(view, (ChildLogLine*)line));
 
47
        
 
48
        /*
 
49
        //If it's a Samba mode item
 
50
        if (line->getType()==Globals::sambaMode->id) {
 
51
                kdDebug() << "Samba... Di Janero!!" << endl;
 
52
                LogListItem* item=createBasicItem(view, line);
 
53
                item->setMultiLinesEnabled(true);
 
54
        }
 
55
        */
 
56
        
 
57
        //It's a normal Log Line
 
58
        return(createBasicItem(view, line));
 
59
        
 
60
}
 
61
 
 
62
 
 
63
LogListItem* ItemFactory::createParentItem(QListView* view, ParentLogLine* line) {
 
64
        //kdDebug() << "Creating a parent item : " << line->getLogLevel()->name << endl;
 
65
 
 
66
        LogListItem* item=new LogListItem(view, line);
 
67
        
 
68
        //item->setExpandable(true);
 
69
        
 
70
        //Group by Log Level
 
71
        if (line->getGroupBy()==GROUP_BY_LOG_LEVEL) {
 
72
                item->setText(0, line->getLogLevel()->name);
 
73
                item->setPixmap(0, line->getLogLevel()->pixmap);
 
74
                
 
75
                if (line->getLogLevel()==Globals::informationLogLevel) {
 
76
                        item->setOpen(true);
 
77
                        view->ensureItemVisible(item);
 
78
                }
 
79
                else {
 
80
                        item->setOpen(false);
 
81
                }
 
82
 
 
83
        }
 
84
        //Group by Day
 
85
        else if (line->getGroupBy()==GROUP_BY_DAY) {
 
86
                //TODO Move these tests to a dedicated static method (to be able to reuse it)
 
87
                QDate today=QDate::currentDate();
 
88
                QDate yesterday=today.addDays(-1);
 
89
                
 
90
                QDate date=line->getTime().date();
 
91
                
 
92
                if (date==today) {
 
93
                        item->setText(0, i18n("Today"));
 
94
                        item->setOpen(true);
 
95
                        view->ensureItemVisible(item);
 
96
                }
 
97
                else if (date==yesterday) {
 
98
                        item->setText(0, i18n("Yesterday"));
 
99
                        item->setOpen(false);
 
100
                }
 
101
                else {
 
102
                        item->setText(0, date.toString());
 
103
                        item->setOpen(false);
 
104
                }
 
105
                
 
106
                item->setPixmap(0, SmallIcon(GROUP_BY_DAY_ICON));
 
107
        }
 
108
        //Group by Hour
 
109
        else if (line->getGroupBy()==GROUP_BY_HOUR) {
 
110
                QString string(i18n("%1, %2h").arg(line->getTime().date().toString(), line->getTime().time().toString("h")));
 
111
                
 
112
                item->setText(0, string);
 
113
                item->setPixmap(0, SmallIcon(GROUP_BY_HOUR_ICON));
 
114
                
 
115
                QDate today=QDate::currentDate();
 
116
                QTime time=QTime::currentTime();
 
117
                if (line->getTime().date()==today && line->getTime().time().hour()==time.hour()) {
 
118
                        kdDebug() << "Date equals, hour equals" << line->getTime().date().toString() << " and " << line->getTime().time().toString() << endl;
 
119
                        item->setOpen(true);
 
120
                        view->ensureItemVisible(item);
 
121
                }
 
122
                else {
 
123
                        item->setOpen(false);
 
124
                }
 
125
 
 
126
        }
 
127
        //Group by Day
 
128
        else if (line->getGroupBy()==GROUP_BY_LOG_FILE) {
 
129
                item->setText(0, line->getOriginalFile());
 
130
                item->setPixmap(0, SmallIcon(GROUP_BY_LOG_FILE_ICON));
 
131
        }
 
132
        //Group by a specific column
 
133
        else {
 
134
                int index=ParentLogLine::getGroupedColumnIndex(line->getColumns(), line->getGroupByColumn());
 
135
                
 
136
                QStringList& list=line->getItemList();
 
137
 
 
138
                if (index<0 || index>=(int)list.size())
 
139
                        item->setText(0, i18n("none"));
 
140
                else
 
141
                        item->setText(0, list[index]);
 
142
                        
 
143
                item->setPixmap(0, SmallIcon(GROUP_BY_COLUMN_ICON));
 
144
        }
 
145
 
 
146
        return(item);
 
147
}
 
148
 
 
149
LogListItem* ItemFactory::createChildItem(QListView* /*view*/, ChildLogLine* line) {
 
150
        
 
151
        LogListItem* parent=line->getParent()->getLogListItem();
 
152
        
 
153
        if (parent==NULL)
 
154
                kdDebug() << "Parent log list item NULL !!!" << endl;
 
155
        
 
156
        //kdDebug() << "The log level of the parent is " << parent->getLogLine()->getLogLevel()->name << endl;
 
157
        
 
158
        LogListItem* item=new LogListItem(parent, line);
 
159
        
 
160
        initItem(item);
 
161
        
 
162
        return(item);
 
163
}
 
164
 
 
165
LogListItem* ItemFactory::createBasicItem(QListView* view, LogLine* line) {
 
166
        LogListItem* item=new LogListItem(view, line);
 
167
        
 
168
        initItem(item);
 
169
        
 
170
        return(item);
 
171
}
 
172
 
 
173
void ItemFactory::initItem(LogListItem* item) {
 
174
        LogLine* line=item->getLogLine();
 
175
        
 
176
        //If it's a Xorg Log Line
 
177
        if (line->getType() == Globals::xorgMode->id) {
 
178
                initXorgItem(item);
 
179
                return;
 
180
        }
 
181
        
 
182
        //Default Item
 
183
        initDefaultItem(item);
 
184
 
 
185
}
 
186
 
 
187
void ItemFactory::initDefaultItem(LogListItem* item) {
 
188
        LogLine* line=item->getLogLine();
 
189
        
 
190
        item->setText(0, line->getTime().toString(Qt::LocalDate));
 
191
        
 
192
        int i=1;
 
193
        QStringList& labels=line->getItemList();
 
194
        QStringList::iterator it;
 
195
        for(it=labels.begin(); it!=labels.end(); ++it) {
 
196
                item->setText(i, *it);
 
197
                i++;
 
198
        }
 
199
        
 
200
        item->setPixmap(0, line->getLogLevel()->pixmap);
 
201
}
 
202
 
 
203
 
 
204
void ItemFactory::initXorgItem(LogListItem* item) {
 
205
        LogLine* line=item->getLogLine();
 
206
        
 
207
        item->setText(0, "");
 
208
        
 
209
        int i=1;
 
210
        QStringList& labels=line->getItemList();
 
211
        QStringList::iterator it;
 
212
        for(it=labels.begin(); it!=labels.end(); ++it) {
 
213
                item->setText(i, *it);
 
214
                i++;
 
215
        }
 
216
 
 
217
        item->setPixmap(0, line->getLogLevel()->pixmap);
 
218
 
 
219
}
 
220
 
 
221
 
 
222
 
 
223
QString ItemFactory::createFormattedText(LogLine* line) {
 
224
                
 
225
        //Special case if this is a ParentLogLine (Group By feature)
 
226
        if (line->isParentLogLine())
 
227
                return(createParentFormattedText(line));
 
228
        
 
229
        
 
230
        if (line->getType() == Globals::cronMode->id)
 
231
                return(createCronFormattedText(line));
 
232
        
 
233
        if (line->getType() == Globals::xorgMode->id)
 
234
                return(createXorgFormattedText(line));
 
235
        
 
236
        if (line->getType() == Globals::acpidMode->id)
 
237
                return(createAcpidFormattedText(line));
 
238
        
 
239
        if (line->getType() == Globals::cupsMode->id)
 
240
                return(createCupsFormattedText(line));
 
241
        
 
242
        if (line->getType() == Globals::cupsAccessMode->id)
 
243
                return(createCupsAccessFormattedText(line));
 
244
        
 
245
        if (line->getType() == Globals::apacheMode->id)
 
246
                return(createApacheFormattedText(line));
 
247
        
 
248
        if (line->getType() == Globals::apacheAccessMode->id)
 
249
                return(createApacheAccessFormattedText(line));
 
250
                
 
251
        if (line->getType() == Globals::sambaMode->id)
 
252
                return(createSambaFormattedText(line));
 
253
        
 
254
        //Returns the default formating
 
255
        return(createDefaultFormattedText(line));
 
256
 
 
257
}
 
258
 
 
259
QString ItemFactory::createToolTipText(LogLine* line) {
 
260
        if (line->getType() == Globals::xorgMode->id)
 
261
                return(createXorgToolTipText(line));
 
262
        else
 
263
                return(createDefaultToolTipText(line));
 
264
 
 
265
}
 
266
 
 
267
QString ItemFactory::createParentFormattedText(LogLine* line) {
 
268
        QString result;
 
269
        
 
270
        ParentLogLine* parent=(ParentLogLine*) line;
 
271
        
 
272
        //All Group By cases are showed here
 
273
        if (parent->getGroupBy()==GROUP_BY_LOG_LEVEL) {
 
274
                result.append(i18n("<div align='center'><b>Group:</b> %1</div>").arg(line->getLogLevel()->name));
 
275
        }
 
276
        else if (parent->getGroupBy()==GROUP_BY_DAY) {
 
277
                result.append(i18n("<div align='center'><b>Group:</b> %1</div>").arg(line->getTime().date().toString()));
 
278
        }
 
279
        else if (parent->getGroupBy()==GROUP_BY_HOUR) {
 
280
                QString string(i18n("%1, %2 hour").arg(line->getTime().date().toString(), line->getTime().time().toString("h")));
 
281
                result.append(i18n("<div align='center'><b>Group:</b> %1</div>").arg(string));
 
282
        }
 
283
        else if (parent->getGroupBy()==GROUP_BY_LOG_FILE) {
 
284
                result.append(i18n("<div align='center'><b>Group:</b> %1</div>").arg(line->getOriginalFile()));
 
285
        }
 
286
        else {
 
287
                QStringList& list=line->getItemList();
 
288
                int index=ParentLogLine::getGroupedColumnIndex(parent->getColumns(), parent->getGroupByColumn());
 
289
                if (index<0 || index>=(int) list.size())
 
290
                        result.append(i18n("<div align='center'><b>Group:</b> none</div>"));
 
291
                else
 
292
                        result.append(i18n("<div align='center'><b>Group:</b> %1</div>").arg(list[index]));
 
293
        }
 
294
        
 
295
        return(result);
 
296
}
 
297
 
 
298
 
 
299
QString ItemFactory::createCronFormattedText(LogLine* line) {
 
300
        QString result;
 
301
        QStringList& items=line->getItemList();
 
302
        
 
303
        result.append("<table>");
 
304
        
 
305
        result.append(labelMessageFormat(i18n("Date:"), line->getTime().toString(Qt::LocalDate)));
 
306
        result.append(labelMessageFormat(i18n("Hostname:"), items[0]));
 
307
        result.append(labelMessageFormat(i18n("Process:"), items[1]));
 
308
        result.append(labelMessageFormat(i18n("User:"), items[2]));
 
309
        result.append(labelMessageFormat(i18n("Level:"), line->getLogLevel()->name));
 
310
        result.append(labelMessageFormat(i18n("Original file:"), line->getOriginalFile()));
 
311
 
 
312
        result.append("</table>");
 
313
 
 
314
        return(result);
 
315
}
 
316
 
 
317
QString ItemFactory::createDefaultFormattedText(LogLine* line) {
 
318
        QString result;
 
319
        
 
320
        QStringList& items=line->getItemList();
 
321
        
 
322
        result.append("<table>");
 
323
        
 
324
        result.append(labelMessageFormat(i18n("Date:"), line->getTime().toString(Qt::LocalDate)));
 
325
        result.append(labelMessageFormat(i18n("Hostname:"), items[0]));
 
326
        result.append(labelMessageFormat(i18n("Process:"), items[1]));
 
327
        result.append(labelMessageFormat(i18n("Level:"), line->getLogLevel()->name));
 
328
        result.append(labelMessageFormat(i18n("Original file:"), line->getOriginalFile()));
 
329
 
 
330
        result.append("</table>");
 
331
 
 
332
        return(result);
 
333
}
 
334
 
 
335
QString ItemFactory::createAcpidFormattedText(LogLine* line) {
 
336
        QString result;
 
337
        
 
338
        QStringList& items=line->getItemList();
 
339
        
 
340
        result.append("<table>");
 
341
        
 
342
        result.append(labelMessageFormat(i18n("Date:"), line->getTime().toString(Qt::LocalDate)));
 
343
        result.append(labelMessageFormat(i18n("Level:"), line->getLogLevel()->name));
 
344
        result.append(labelMessageFormat(i18n("Type:"), items[0]));
 
345
 
 
346
        result.append("</table>");
 
347
 
 
348
        return(result);
 
349
}
 
350
 
 
351
QString ItemFactory::createCupsFormattedText(LogLine* line) {
 
352
        QString result;
 
353
        
 
354
        result.append("<table>");
 
355
        
 
356
        result.append(labelMessageFormat(i18n("Date:"), line->getTime().toString(Qt::LocalDate)));
 
357
        result.append(labelMessageFormat(i18n("Level:"), line->getLogLevel()->name));
 
358
 
 
359
        result.append("</table>");
 
360
 
 
361
        return(result);
 
362
}
 
363
 
 
364
QString ItemFactory::createCupsAccessFormattedText(LogLine* line) {
 
365
        QString result;
 
366
        
 
367
        QStringList& items=line->getItemList();
 
368
        
 
369
        result.append("<table>");
 
370
        
 
371
        result.append(labelMessageFormat(i18n("Date:"), line->getTime().toString(Qt::LocalDate)));
 
372
        result.append(labelMessageFormat(i18n("Level:"), line->getLogLevel()->name));
 
373
        result.append(labelMessageFormat(i18n("Hostname:"), items[0]));
 
374
        result.append(labelMessageFormat(i18n("Identification:"), items[1]));
 
375
        result.append(labelMessageFormat(i18n("Username:"), items[2]));
 
376
        result.append(labelMessageFormat(i18n("HTTP Response:"), items[3]));
 
377
        result.append(labelMessageFormat(i18n("Bytes Sent:"), items[4]));
 
378
 
 
379
        result.append("</table>");
 
380
 
 
381
        return(result);
 
382
}
 
383
 
 
384
 
 
385
QString ItemFactory::createApacheFormattedText(LogLine* line) {
 
386
        QString result;
 
387
        
 
388
        QStringList& items=line->getItemList();
 
389
        
 
390
        result.append("<table>");
 
391
        
 
392
        result.append(labelMessageFormat(i18n("Date:"), line->getTime().toString(Qt::LocalDate)));
 
393
        result.append(labelMessageFormat(i18n("Level:"), line->getLogLevel()->name));
 
394
        result.append(labelMessageFormat(i18n("Client:"), items[0]));
 
395
 
 
396
        result.append("</table>");
 
397
 
 
398
        return(result);
 
399
}
 
400
 
 
401
QString ItemFactory::createApacheAccessFormattedText(LogLine* line) {
 
402
        QString result;
 
403
        
 
404
        QStringList& items=line->getItemList();
 
405
        
 
406
        result.append("<table>");
 
407
        
 
408
        result.append(labelMessageFormat(i18n("Date:"), line->getTime().toString(Qt::LocalDate)));
 
409
        result.append(labelMessageFormat(i18n("Level:"), line->getLogLevel()->name));
 
410
        result.append(labelMessageFormat(i18n("Hostname:"), items[0]));
 
411
        result.append(labelMessageFormat(i18n("Identification:"), items[1]));
 
412
        result.append(labelMessageFormat(i18n("Username:"), items[2]));
 
413
        result.append(labelMessageFormat(i18n("HTTP Response:"), items[3]));
 
414
        result.append(labelMessageFormat(i18n("Bytes Sent:"), items[4]));
 
415
        result.append(labelMessageFormat(i18n("Agent Identity:"), items[5]));
 
416
        result.append(labelMessageFormat(i18n("HTTP Request:"), items[6]));
 
417
 
 
418
        result.append("</table>");
 
419
 
 
420
        return(result);
 
421
}
 
422
 
 
423
 
 
424
QString ItemFactory::createSambaFormattedText(LogLine* line) {
 
425
        QString result;
 
426
        
 
427
        QStringList& items=line->getItemList();
 
428
        
 
429
        result.append("<table>");
 
430
        
 
431
        result.append(labelMessageFormat(i18n("Date:"), line->getTime().toString(Qt::LocalDate)));
 
432
        result.append(labelMessageFormat(i18n("Level:"), line->getLogLevel()->name));
 
433
        result.append(labelMessageFormat(i18n("Source File:"), items[0]));
 
434
        result.append(labelMessageFormat(i18n("Function:"), items[1]));
 
435
        result.append(labelMessageFormat(i18n("Line:"), items[2]));
 
436
 
 
437
        result.append("</table>");
 
438
 
 
439
        return(result);
 
440
}
 
441
 
 
442
 
 
443
QString ItemFactory::createXorgFormattedText(LogLine* line) {
 
444
        //It uses the same formating than the Tooltip
 
445
        return(createXorgToolTipText(line));
 
446
}
 
447
 
 
448
QString ItemFactory::createDefaultToolTipText(LogLine* line) {
 
449
        QString result;
 
450
 
 
451
        result.append("<table>");
 
452
        
 
453
        result.append(labelMessageFormat(i18n("Date:"), line->getTime().toString(Qt::LocalDate)));
 
454
        result.append(labelMessageFormat(i18n("Level:"), line->getLogLevel()->name));
 
455
        result.append(labelMessageFormat(i18n("Original file:"), line->getOriginalFile()));
 
456
 
 
457
        result.append("</table>");
 
458
 
 
459
        return(result);
 
460
}
 
461
 
 
462
QString ItemFactory::createXorgToolTipText(LogLine* line) {
 
463
        QString result;
 
464
        
 
465
        QStringList& items=line->getItemList();
 
466
        
 
467
        result.append("<table>");
 
468
        
 
469
        if (items[0].isEmpty())
 
470
                result.append(labelMessageFormat(i18n("Type:"), i18n("none")));
 
471
        else
 
472
                result.append(labelMessageFormat(i18n("Type:"), items[0]));
 
473
        
 
474
        result.append(labelMessageFormat(i18n("Original file:"), line->getOriginalFile()));
 
475
 
 
476
        result.append("</table>");
 
477
 
 
478
        return(result);
 
479
}
 
480
 
 
481
 
 
482
 
 
483
 
 
484
QString ItemFactory::labelMessageFormat(QString label, QString value) {
 
485
        return ("<tr><td align='right'><b><nobr>" + label + "</nobr></b></td><td>" + messageFormat(value) + "</td></tr>");
 
486
}
 
487
 
 
488
QString ItemFactory::messageFormat(QString& message) {
 
489
        QString transformation(message);
 
490
        transformation.replace(QRegExp("&"), "&amp;");
 
491
        transformation.replace(QRegExp("<"), "&lt;");
 
492
        transformation.replace(QRegExp(">"), "&gt;");
 
493
        return(transformation);
 
494
}