-! Copyright (C) 2008, 2010 Slava Pestov.\r
-! See http://factorcode.org/license.txt for BSD license.\r
-USING: kernel sequences namespaces words assocs logging sorting\r
-prettyprint io io.styles io.files io.encodings.utf8\r
-strings combinators accessors arrays math\r
-logging.server logging.parser calendar.format ;\r
-IN: logging.analysis\r
-\r
-SYMBOL: word-names\r
-SYMBOL: errors\r
-SYMBOL: word-histogram\r
-SYMBOL: message-histogram\r
-\r
-: analyze-entry ( entry -- )\r
- dup level>> { ERROR CRITICAL } member-eq? [ dup errors get push ] when\r
- dup word-name>> word-histogram get inc-at\r
- dup word-name>> word-names get member? [\r
- dup [ level>> ] [ word-name>> ] [ message>> ] tri 3array\r
- message-histogram get inc-at\r
- ] when\r
- drop ;\r
-\r
-: recent-histogram ( assoc n -- alist )\r
- [ sort-values <reversed> ] dip short head ;\r
-\r
-: analyze-entries ( entries word-names -- errors word-histogram message-histogram )\r
- [\r
- word-names set\r
- V{ } clone errors set\r
- H{ } clone word-histogram set\r
- H{ } clone message-histogram set\r
-\r
- [ analyze-entry ] each\r
-\r
- errors get\r
- word-histogram get 10 recent-histogram\r
- message-histogram get 10 recent-histogram\r
- ] with-scope ;\r
-\r
-: histogram. ( assoc quot -- )\r
- standard-table-style [\r
- [\r
- [ swapd with-cell pprint-cell ] with-row\r
- ] curry assoc-each\r
- ] tabular-output ; inline\r
-\r
-: 10-most-recent ( errors -- errors )\r
- 10 tail* "Only showing 10 most recent errors" print nl ;\r
-\r
-: errors. ( errors -- )\r
- dup length 10 >= [ 10-most-recent ] when\r
- log-entries. ;\r
-\r
-: analysis. ( errors word-histogram message-histogram -- )\r
- nl "==== FREQUENT MESSAGES:" print nl\r
- "Total: " write dup values sum . nl\r
- [\r
- [ first name>> write bl ]\r
- [ second write ": " write ]\r
- [ third "\n" join write ]\r
- tri\r
- ] histogram.\r
- nl nl\r
- "==== FREQUENT WORDS:" print nl\r
- [ write ] histogram.\r
- nl nl\r
- "==== ERRORS:" print nl\r
- errors. ;\r
-\r
-: analyze-log ( lines word-names -- )\r
- [ parse-log ] dip analyze-entries analysis. ;\r
-\r
-: analyze-log-file ( service word-names -- )\r
- [ parse-log-file ] dip analyze-entries analysis. ;\r
+! Copyright (C) 2008, 2010 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel sequences namespaces words assocs logging sorting
+prettyprint io io.styles io.files io.encodings.utf8
+strings combinators accessors arrays math
+logging.server logging.parser calendar.format ;
+IN: logging.analysis
+
+SYMBOL: word-names
+SYMBOL: errors
+SYMBOL: word-histogram
+SYMBOL: message-histogram
+
+: analyze-entry ( entry -- )
+ dup level>> { ERROR CRITICAL } member-eq? [ dup errors get push ] when
+ dup word-name>> word-histogram get inc-at
+ dup word-name>> word-names get member? [
+ dup [ level>> ] [ word-name>> ] [ message>> ] tri 3array
+ message-histogram get inc-at
+ ] when
+ drop ;
+
+: recent-histogram ( assoc n -- alist )
+ [ sort-values <reversed> ] dip short head ;
+
+: analyze-entries ( entries word-names -- errors word-histogram message-histogram )
+ [
+ word-names set
+ V{ } clone errors set
+ H{ } clone word-histogram set
+ H{ } clone message-histogram set
+
+ [ analyze-entry ] each
+
+ errors get
+ word-histogram get 10 recent-histogram
+ message-histogram get 10 recent-histogram
+ ] with-scope ;
+
+: histogram. ( assoc quot -- )
+ standard-table-style [
+ [
+ [ swapd with-cell pprint-cell ] with-row
+ ] curry assoc-each
+ ] tabular-output ; inline
+
+: 10-most-recent ( errors -- errors )
+ 10 tail* "Only showing 10 most recent errors" print nl ;
+
+: errors. ( errors -- )
+ dup length 10 >= [ 10-most-recent ] when
+ log-entries. ;
+
+: analysis. ( errors word-histogram message-histogram -- )
+ nl "==== FREQUENT MESSAGES:" print nl
+ "Total: " write dup values sum . nl
+ [
+ [ first name>> write bl ]
+ [ second write ": " write ]
+ [ third "\n" join write ]
+ tri
+ ] histogram.
+ nl nl
+ "==== FREQUENT WORDS:" print nl
+ [ write ] histogram.
+ nl nl
+ "==== ERRORS:" print nl
+ errors. ;
+
+: analyze-log ( lines word-names -- )
+ [ parse-log ] dip analyze-entries analysis. ;
+
+: analyze-log-file ( service word-names -- )
+ [ parse-log-file ] dip analyze-entries analysis. ;