1 ! Copyright (C) 2008 Slava Pestov.
\r
2 ! See http://factorcode.org/license.txt for BSD license.
\r
3 USING: kernel sequences namespaces words assocs logging sorting
\r
4 prettyprint io io.styles io.files io.encodings.utf8
\r
5 strings combinators accessors arrays
\r
6 logging.server logging.parser calendar.format ;
\r
11 SYMBOL: word-histogram
\r
12 SYMBOL: message-histogram
\r
14 : analyze-entry ( entry -- )
\r
15 dup level>> { ERROR CRITICAL } memq? [ dup errors get push ] when
\r
16 1 over word-name>> word-histogram get at+
\r
17 dup word-name>> word-names get member? [
\r
18 1 over [ level>> ] [ word-name>> ] [ message>> ] tri 3array
\r
19 message-histogram get at+
\r
23 : analyze-entries ( entries word-names -- errors word-histogram message-histogram )
\r
26 V{ } clone errors set
\r
27 H{ } clone word-histogram set
\r
28 H{ } clone message-histogram set
\r
36 message-histogram get
\r
39 : histogram. ( assoc quot -- )
\r
40 standard-table-style [
\r
41 >r >alist sort-values <reversed> r> [
\r
42 [ >r swap r> with-cell pprint-cell ] with-row
\r
46 : log-entry. ( entry -- )
\r
49 [ date>> (timestamp>string) bl ]
\r
50 [ level>> pprint bl ]
\r
51 [ word-name>> write nl ]
\r
52 [ message>> "\n" join print ]
\r
55 : errors. ( errors -- )
\r
56 [ log-entry. ] each ;
\r
58 : analysis. ( errors word-histogram message-histogram -- )
\r
59 "==== INTERESTING MESSAGES:" print nl
\r
60 "Total: " write dup values sum . nl
\r
62 dup level>> write ": " write message>> "\n" join write
\r
65 "==== WORDS:" print nl
\r
66 [ write ] histogram.
\r
68 "==== ERRORS:" print nl
\r
71 : analyze-log ( lines word-names -- )
\r
72 >r parse-log r> analyze-entries analysis. ;
\r
74 : analyze-log-file ( service word-names -- )
\r
75 >r parse-log-file r> analyze-entries analysis. ;
\r