Showing preview only (230K chars total). Download the full file or copy to clipboard to get everything.
Repository: philovivero/distribution
Branch: master
Commit: 50d6fe2f089c
Files: 26
Total size: 219.9 KB
Directory structure:
gitextract_1pfsqkt6/
├── .flake8
├── LICENSE.md
├── README.md
├── VERSION
├── distribution
├── distribution.py
├── distributionrc
└── tests/
├── runTests.sh
├── stderr.01.expected.txt
├── stderr.02.expected.txt
├── stderr.03.expected.txt
├── stderr.04.expected.txt
├── stderr.05.expected.txt
├── stderr.06.expected.txt
├── stderr.07.expected.txt
├── stdin.01.txt
├── stdin.02.txt
├── stdin.03.txt
├── stdin.04.txt
├── stdout.01.expected.txt
├── stdout.02.expected.txt
├── stdout.03.expected.txt
├── stdout.04.expected.txt
├── stdout.05.expected.txt
├── stdout.06.expected.txt
└── stdout.07.expected.txt
================================================
FILE CONTENTS
================================================
================================================
FILE: .flake8
================================================
[flake8]
ignore = E501, W503
================================================
FILE: LICENSE.md
================================================
GNU GENERAL PUBLIC LICENSE
==========================
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.
Preamble
========
The licenses for most software are designed to take away your freedom to share
and change it. By contrast, the GNU General Public License is intended to
guarantee your freedom to share and change free software--to make sure the
software is free for all its users. This General Public License applies to most
of the Free Software Foundation's software and to any other program whose
authors commit to using it. (Some other Free Software Foundation software is
covered by the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not price. Our
General Public Licenses are designed to make sure that you have the freedom to
distribute copies of free software (and charge for this service if you wish),
that you receive source code or can get it if you want it, that you can change
the software or use pieces of it in new free programs; and that you know you
can do these things.
To protect your rights, we need to make restrictions that forbid anyone to deny
you these rights or to ask you to surrender the rights. These restrictions
translate to certain responsibilities for you if you distribute copies of the
software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis or for
a fee, you must give the recipients all the rights that you have. You must make
sure that they, too, receive or can get the source code. And you must show them
these terms so they know their rights.
We protect your rights with two steps: (1) copyright the software, and (2)
offer you this license which gives you legal permission to copy, distribute
and/or modify the software.
Also, for each author's protection and ours, we want to make certain that
everyone understands that there is no warranty for this free software. If the
software is modified by someone else and passed on, we want its recipients to
know that what they have is not the original, so that any problems introduced
by others will not reflect on the original authors' reputations.
Finally, any free program is threatened constantly by software patents. We wish
to avoid the danger that redistributors of a free program will individually
obtain patent licenses, in effect making the program proprietary. To prevent
this, we have made it clear that any patent must be licensed for everyone's
free use or not licensed at all.
The precise terms and conditions for copying, distribution and modification
follow.
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
===============================================================
0. This License applies to any program or other work which contains a notice
placed by the copyright holder saying it may be distributed under the terms of
this General Public License. The "Program", below, refers to any such program
or work, and a "work based on the Program" means either the Program or any
derivative work under copyright law: that is to say, a work containing the
Program or a portion of it, either verbatim or with modifications and/or
translated into another language. (Hereinafter, translation is included without
limitation in the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not covered by
this License; they are outside its scope. The act of running the Program is not
restricted, and the output from the Program is covered only if its contents
constitute a work based on the Program (independent of having been made by
running the Program). Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's source code as
you receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice and
disclaimer of warranty; keep intact all the notices that refer to this License
and to the absence of any warranty; and give any other recipients of the
Program a copy of this License along with the Program.
You may charge a fee for the physical act of transferring a copy, and you may
at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion of it, thus
forming a work based on the Program, and copy and distribute such modifications
or work under the terms of Section 1 above, provided that you also meet all of
these conditions:
a) You must cause the modified files to carry prominent notices stating that
you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in whole or in
part contains or is derived from the Program or any part thereof, to be
licensed as a whole at no charge to all third parties under the terms of this
License.
c) If the modified program normally reads commands interactively when run, you
must cause it, when started running for such interactive use in the most
ordinary way, to print or display an announcement including an appropriate
copyright notice and a notice that there is no warranty (or else, saying that
you provide a warranty) and that users may redistribute the program under these
conditions, and telling the user how to view a copy of this License.
(Exception: if the Program itself is interactive but does not normally print
such an announcement, your work based on the Program is not required to print
an announcement.)
These requirements apply to the modified work as a whole. If identifiable
sections of that work are not derived from the Program, and can be reasonably
considered independent and separate works in themselves, then this License, and
its terms, do not apply to those sections when you distribute them as separate
works. But when you distribute the same sections as part of a whole which is a
work based on the Program, the distribution of the whole must be on the terms
of this License, whose permissions for other licensees extend to the entire
whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your
rights to work written entirely by you; rather, the intent is to exercise the
right to control the distribution of derivative or collective works based on
the Program.
In addition, mere aggregation of another work not based on the Program with the
Program (or with a work based on the Program) on a volume of a storage or
distribution medium does not bring the other work under the scope of this
License.
3. You may copy and distribute the Program (or a work based on it, under
Section 2) in object code or executable form under the terms of Sections 1 and
2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable source code,
which must be distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three years, to give
any third party, for a charge no more than your cost of physically performing
source distribution, a complete machine-readable copy of the corresponding
source code, to be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer to distribute
corresponding source code. (This alternative is allowed only for noncommercial
distribution and only if you received the program in object code or executable
form with such an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for making
modifications to it. For an executable work, complete source code means all the
source code for all modules it contains, plus any associated interface
definition files, plus the scripts used to control compilation and installation
of the executable. However, as a special exception, the source code distributed
need not include anything that is normally distributed (in either source or
binary form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component itself
accompanies the executable.
If distribution of executable or object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the source
code from the same place counts as distribution of the source code, even though
third parties are not compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program except as
expressly provided under this License. Any attempt otherwise to copy, modify,
sublicense or distribute the Program is void, and will automatically terminate
your rights under this License. However, parties who have received copies, or
rights, from you under this License will not have their licenses terminated so
long as such parties remain in full compliance.
5. You are not required to accept this License, since you have not signed it.
However, nothing else grants you permission to modify or distribute the Program
or its derivative works. These actions are prohibited by law if you do not
accept this License. Therefore, by modifying or distributing the Program (or
any work based on the Program), you indicate your acceptance of this License to
do so, and all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the Program),
the recipient automatically receives a license from the original licensor to
copy, distribute or modify the Program subject to these terms and conditions.
You may not impose any further restrictions on the recipients' exercise of the
rights granted herein. You are not responsible for enforcing compliance by
third parties to this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues), conditions
are imposed on you (whether by court order, agreement or otherwise) that
contradict the conditions of this License, they do not excuse you from the
conditions of this License. If you cannot distribute so as to satisfy
simultaneously your obligations under this License and any other pertinent
obligations, then as a consequence you may not distribute the Program at all.
For example, if a patent license would not permit royalty-free redistribution
of the Program by all those who receive copies directly or indirectly through
you, then the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply and
the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or
other property right claims or to contest validity of any such claims; this
section has the sole purpose of protecting the integrity of the free software
distribution system, which is implemented by public license practices. Many
people have made generous contributions to the wide range of software
distributed through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing to
distribute software through any other system and a licensee cannot impose that
choice.
This section is intended to make thoroughly clear what is believed to be a
consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in certain
countries either by patents or by copyrighted interfaces, the original
copyright holder who places the Program under this License may add an explicit
geographical distribution limitation excluding those countries, so that
distribution is permitted only in or among countries not thus excluded. In such
case, this License incorporates the limitation as if written in the body of
this License.
9. The Free Software Foundation may publish revised and/or new versions of the
General Public License from time to time. Such new versions will be similar in
spirit to the present version, but may differ in detail to address new problems
or concerns.
Each version is given a distinguishing version number. If the Program specifies
a version number of this License which applies to it and "any later version",
you have the option of following the terms and conditions either of that
version or of any later version published by the Free Software Foundation. If
the Program does not specify a version number of this License, you may choose
any version ever published by the Free Software Foundation.
10. If you wish to incorporate parts of the Program into other free programs
whose distribution conditions are different, write to the author to ask for
permission. For software which is copyrighted by the Free Software Foundation,
write to the Free Software Foundation; we sometimes make exceptions for this.
Our decision will be guided by the two goals of preserving the free status of
all derivatives of our free software and of promoting the sharing and reuse of
software generally.
NO WARRANTY
===========
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU
ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
===========================
================================================
FILE: README.md
================================================
New Canonical Source
====================
I have taken employment such that it is difficult for me to be the owner of this project.
I have transferred control to [the excellent engineer wizzat](https://github.com/wizzat/distribution).
Please contribute any PRs, issues, etc to that project rather than this one. Thank you,
and it's been good serving you these past years.
distribution
============
Short, simple, direct scripts for creating character-based graphs in a
command terminal. Status: stable. Features added very rarely.

Purpose
=======
To generate graphs directly in the (ASCII-based) terminal. Most common use-case:
if you type `long | list | of | commands | sort | uniq -c | sort -rn` in the terminal,
then you could replace the final `| sort | uniq -c | sort -rn` with `| distribution` and
very likely be happier with what you see.
The tool is mis-named. It was originally for generating histograms (a distribution
of the frequency of input tokens) but it has since been expanded to generate
time-series graphs (or, in fact, graphs with any arbitrary "x-axis") as well.
At first, there will be only two scripts, the originals written in Perl and
Python by Tim Ellis. Any other versions people are willing to create will be placed
here. The next likely candidate language is C++.
There are a few typical use cases for graphs in a terminal as we'll lay out here:
## Tokenize and Graph
A stream of ASCII bytes, tokenize it, tally the matching tokens, and graph
the result. For this example, assume "file" is a list of words with one word
per line, so passing it to "xargs" makes it all-one-line.
```
$ cat file | xargs #put all words on one line
this is an arbitrary stream of tokens. this will be graphed with tokens pulled out. this is the first use case.
$ cat file | xargs | distribution --tokenize=word --match=word --size=small -v
tokens/lines examined: 25
tokens/lines matched: 21
histogram keys: 17
runtime: 8.00ms
Key|Ct (Pct) Histogram
this|3 (14.29%) -----------------------------------------------------------------------o
is|2 (9.52%) ---------------------------------------o
tokens|2 (9.52%) ---------------------------------------o
graphed|1 (4.76%) -------o
will|1 (4.76%) -------o
```
## Aggregate and Graph
An already-tokenised input, one-per-line, tally and graph them.
```
$ cat file | distribution -s=small -v
tokens/lines examined: 21
tokens/lines matched: 21
histogram keys: 18
runtime: 14.00ms
Key|Ct (Pct) Histogram
this|3 (14.29%) -----------------------------------------------------------------------o
is|2 (9.52%) ---------------------------------------o
graphed|1 (4.76%) -------o
be|1 (4.76%) -------o
```
## Graph Already-Aggregated/Counted Tokens
A list of tallies + tokens, one-per-line. Create a graph with labels. This matches
the typical output of several Unix commands such as "du."
```
$ du -s /etc/*/ 2>/dev/null | distribution -g -v
tokens/lines examined: 107
tokens/lines matched: 5,176
histogram keys: 107
runtime: 2.00ms
Key|Ct (Pct) Histogram
/etc/ssl/|920 (17.77%) -------------------------------------------
/etc/init.d/|396 (7.65%) -------------------
/etc/apt/|284 (5.49%) -------------
/etc/nagios-plugins/|224 (4.33%) -----------
/etc/cis/|188 (3.63%) ---------
/etc/nagios/|180 (3.48%) ---------
/etc/fonts/|172 (3.32%) --------
/etc/ssh/|172 (3.32%) --------
/etc/default/|164 (3.17%) --------
/etc/console-setup/|132 (2.55%) -------
```
## Graph a List of Integers
A list of tallies only. Create a graph without labels. This is typical if you just
have a stream of numbers and wonder what they look like. The `--numonly` switch is
used to toggle this behaviour.
There is a different project: https://github.com/holman/spark that will produce
simpler, more-compact graphs. By contrast, this project will produce rather
lengthy and verbose graphs with far more resolution, which you may prefer.
Features
========
0. Configurable colourised output.
1. rcfile for your own preferred default commandline options.
2. Full Perl tokenising and regexp matching.
3. Partial-width Unicode characters for high-resolution charts.
4. Configurable chart sizes including "fill up my whole screen."
Installation
============
If you use homebrew, `brew install distribution` should do the trick, although
if you already have Perl or Python installed, you can simply download the file
and put it into your path.
To put the script into your homedir on the machine you plan to run the script:
```
$ wget https://raw.githubusercontent.com/philovivero/distribution/master/distribution.py
$ sudo mv distribution.py /usr/local/bin/distribution
$ alias worddist="distribution -t=word"
```
It is fine to place the script anywhere in your `$PATH`. The worddist alias is
useful for asking the script to tokenize the input for you eg `ls -alR | worddist`.
Options
=======
```
--keys=K periodically prune hash to K keys (default 5000)
--char=C character(s) to use for histogram character, some substitutions follow:
pl Use 1/3-width unicode partial lines to simulate 3x actual terminal width
pb Use 1/8-width unicode partial blocks to simulate 8x actual terminal width
ba (▬) Bar
bl (Ξ) Building
em (—) Emdash
me (⋯) Mid-Elipses
di (♦) Diamond
dt (•) Dot
sq (□) Square
--color colourise the output
--graph[=G] input is already key/value pairs. vk is default:
kv input is ordered key then value
vk input is ordered value then key
--height=N height of histogram, headers non-inclusive, overrides --size
--help get help
--logarithmic logarithmic graph
--match=RE only match lines (or tokens) that match this regexp, some substitutions follow:
word ^[A-Z,a-z]+$ - tokens/lines must be entirely alphabetic
num ^\d+$ - tokens/lines must be entirely numeric
--numonly[=N] input is numerics, simply graph values without labels
actual input is just values (default - abs, absolute are synonymous to actual)
diff input monotonically-increasing, graph differences (of 2nd and later values)
--palette=P comma-separated list of ANSI colour values for portions of the output
in this order: regular, key, count, percent, graph. implies --color.
--rcfile=F use this rcfile instead of $HOME/.distributionrc - must be first argument!
--size=S size of histogram, can abbreviate to single character, overridden by --width/--height
small 40x10
medium 80x20
large 120x30
full terminal width x terminal height (approximately)
--tokenize=RE split input on regexp RE and make histogram of all resulting tokens
word [^\w] - split on non-word characters like colons, brackets, commas, etc
white \s - split on whitespace
--width=N width of the histogram report, N characters, overrides --size
--verbose be verbose
```
Syslog Analysis Example
=======================
You can grab out parts of your syslog ask the script to tokenize on non-word
delimiters, then only match words. The verbosity gives you some stats as it
works and right before it prints the histogram.
```
$ zcat /var/log/syslog*gz \
| awk '{print $5" "$6}' \
| distribution --tokenize=word --match=word --height=10 --verbose --char=o
tokens/lines examined: 16,645
tokens/lines matched: 5,843
histogram keys: 92
runtime: 10.75ms
Val |Ct (Pct) Histogram
ntop |1818 (31.11%) ooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WARNING |1619 (27.71%) ooooooooooooooooooooooooooooooooooooooooooooooooo
kernel |1146 (19.61%) ooooooooooooooooooooooooooooooooooo
CRON |153 (2.62%) ooooo
root |147 (2.52%) ooooo
message |99 (1.69%) ooo
last |99 (1.69%) ooo
ntpd |99 (1.69%) ooo
dhclient |88 (1.51%) ooo
THREADMGMT|52 (0.89%) oo
```
Process List Example
====================
You can start thinking of normal commands in new ways. For example, you can take
your "ps ax" output, get just the command portion, and do a word-analysis on it.
You might find some words are rather interesting. In this case, it appears Chrome
is doing some sort of A/B testing and their commandline exposes that.
```
$ ps axww \
| cut -c 28- \
| distribution --tokenize=word --match=word --char='|' --width=90 --height=25
Val |Ct (Pct) Histogram
usr |100 (6.17%) |||||||||||||||||||||||||||||||||||||||||||||||||||||
lib |73 (4.51%) ||||||||||||||||||||||||||||||||||||||
browser |38 (2.35%) ||||||||||||||||||||
chromium |38 (2.35%) ||||||||||||||||||||
P |32 (1.98%) |||||||||||||||||
daemon |31 (1.91%) |||||||||||||||||
sbin |26 (1.60%) ||||||||||||||
gnome |23 (1.42%) ||||||||||||
bin |22 (1.36%) ||||||||||||
kworker |21 (1.30%) |||||||||||
type |19 (1.17%) ||||||||||
gvfs |17 (1.05%) |||||||||
no |17 (1.05%) |||||||||
en |16 (0.99%) |||||||||
indicator |15 (0.93%) ||||||||
channel |14 (0.86%) ||||||||
bash |14 (0.86%) ||||||||
US |14 (0.86%) ||||||||
lang |14 (0.86%) ||||||||
force |12 (0.74%) |||||||
pluto |12 (0.74%) |||||||
ProxyConnectionImpact |12 (0.74%) |||||||
HiddenExperimentB |12 (0.74%) |||||||
ConnectBackupJobsEnabled|12 (0.74%) |||||||
session |12 (0.74%) |||||||
```
Graphing Pre-Tallied Tokens Example
===================================
Sometimes the output you have is already some keys with their counts. For
example the output of "du" or "command | uniq -c". In these cases, use the
--graph (-g) option, which skips the parsing and tokenizing of the input.
Further, you can use very short versions of the options in case you don't like
typing a lot. The default character is "+" because it creates a type of grid
system which makes it easy for the eye to trace right/left or up/down.
```
$ sudo du -sb /etc/* | distribution -w=90 -h=15 -g
Val |Ct (Pct) Histogram
/etc/mateconf |7780758 (44.60%) +++++++++++++++++++++++++++++++++++++++++++++++++
/etc/brltty |3143272 (18.02%) ++++++++++++++++++++
/etc/apparmor.d |1597915 (9.16%) ++++++++++
/etc/bash_completion.d|597836 (3.43%) ++++
/etc/mono |535352 (3.07%) ++++
/etc/ssl |465414 (2.67%) +++
/etc/ardour2 |362303 (2.08%) +++
/etc/X11 |226309 (1.30%) ++
/etc/ImageMagick |202358 (1.16%) ++
/etc/init.d |143281 (0.82%) +
/etc/ssh |138042 (0.79%) +
/etc/fonts |119862 (0.69%) +
/etc/sound |112051 (0.64%) +
/etc/xdg |111971 (0.64%) +
/etc/java-7-openjdk |100414 (0.58%) +
```
Keys in Natural Order Examples
==============================
The output is separated between STDOUT and STDERR so you can sort the resulting
histogram by values. This is useful for time series or other cases where the
keys you're graphing are in some natural order. Note how the "-v" output still
appears at the top.
```
$ cat NotServingRegionException-DateHour.txt \
| distribution -v \
| sort -n
tokens/lines examined: 1,414,196
tokens/lines matched: 1,414,196
histogram keys: 453
runtime: 1279.30ms
Val |Ct (Pct) Histogram
2012-07-13 03|38360 (2.71%) ++++++++++++++++++++++++
2012-07-28 21|18293 (1.29%) ++++++++++++
2012-07-28 23|20748 (1.47%) +++++++++++++
2012-07-29 06|15692 (1.11%) ++++++++++
2012-07-29 07|30432 (2.15%) +++++++++++++++++++
2012-07-29 08|76943 (5.44%) ++++++++++++++++++++++++++++++++++++++++++++++++
2012-07-29 09|54955 (3.89%) ++++++++++++++++++++++++++++++++++
2012-07-30 05|15652 (1.11%) ++++++++++
2012-07-30 09|40102 (2.84%) +++++++++++++++++++++++++
2012-07-30 10|21718 (1.54%) ++++++++++++++
2012-07-30 16|16041 (1.13%) ++++++++++
2012-08-01 09|22740 (1.61%) ++++++++++++++
2012-08-02 04|31851 (2.25%) ++++++++++++++++++++
2012-08-02 06|28748 (2.03%) ++++++++++++++++++
2012-08-02 07|18062 (1.28%) ++++++++++++
2012-08-02 20|23519 (1.66%) +++++++++++++++
2012-08-03 03|21587 (1.53%) ++++++++++++++
2012-08-03 08|33409 (2.36%) +++++++++++++++++++++
2012-08-03 10|15854 (1.12%) ++++++++++
2012-08-03 15|29828 (2.11%) +++++++++++++++++++
2012-08-03 16|20478 (1.45%) +++++++++++++
2012-08-03 17|39758 (2.81%) +++++++++++++++++++++++++
2012-08-03 18|19514 (1.38%) ++++++++++++
2012-08-03 19|18353 (1.30%) ++++++++++++
2012-08-03 22|18726 (1.32%) ++++++++++++
__________________
$ cat /usr/share/dict/words \
| awk '{print length($1)}' \
| distribution -c=: -w=90 -h=16 \
| sort -n
Val|Ct (Pct) Histogram
2 |182 (0.18%) :
3 |845 (0.85%) ::::
4 |3346 (3.37%) ::::::::::::::::
5 |6788 (6.84%) :::::::::::::::::::::::::::::::
6 |11278 (11.37%) ::::::::::::::::::::::::::::::::::::::::::::::::::::
7 |14787 (14.91%) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
8 |15674 (15.81%) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
9 |14262 (14.38%) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
10|11546 (11.64%) :::::::::::::::::::::::::::::::::::::::::::::::::::::
11|8415 (8.49%) :::::::::::::::::::::::::::::::::::::::
12|5508 (5.55%) :::::::::::::::::::::::::
13|3236 (3.26%) :::::::::::::::
14|1679 (1.69%) ::::::::
15|893 (0.90%) :::::
16|382 (0.39%) ::
17|176 (0.18%) :
```
MySQL Slow Query Log Analysis Examples
======================================
You can sometimes gain interesting insights just by measuring the size of files
on your filesystem. Someone had captured slow-query-logs for every hour for
most of a day. Assuming they all compressed the same (a proper analysis would
be on uncompressed files - uncompressing them would have caused server impact -
this is good enough for illustration's sake), we can determine how much slow
query traffic appeared during a given hour of the day.
Something happened around 8am but otherwise the server seems to follow a normal
sinusoidal pattern. But note because we're only analysing the file size, it
could be that 8am had the same number of slow queries, but that the queries
themselves were larger in byte-count. Or that the queries didn't compress as
well.
Also note that we aren't seeing every histogram entry here. Always take care to
remember the tool is hiding low-frequency data from you unless you ask it to
draw uncommonly-tall histograms.
```
$ du -sb mysql-slow.log.*.gz | ~/distribution -g | sort -n
Val |Ct (Pct) Histogram
mysql-slow.log.01.gz|1426694 (5.38%) ++++++++++++++++++++
mysql-slow.log.02.gz|1499467 (5.65%) +++++++++++++++++++++
mysql-slow.log.03.gz|1840727 (6.94%) ++++++++++++++++++++++++++
mysql-slow.log.04.gz|1570131 (5.92%) ++++++++++++++++++++++
mysql-slow.log.05.gz|1439021 (5.42%) ++++++++++++++++++++
mysql-slow.log.07.gz|859939 (3.24%) ++++++++++++
mysql-slow.log.08.gz|2976177 (11.21%) ++++++++++++++++++++++++++++++++++++++++++
mysql-slow.log.09.gz|792269 (2.99%) +++++++++++
mysql-slow.log.11.gz|722148 (2.72%) ++++++++++
mysql-slow.log.12.gz|825731 (3.11%) ++++++++++++
mysql-slow.log.14.gz|1476023 (5.56%) +++++++++++++++++++++
mysql-slow.log.15.gz|2087129 (7.86%) +++++++++++++++++++++++++++++
mysql-slow.log.16.gz|1905867 (7.18%) +++++++++++++++++++++++++++
mysql-slow.log.19.gz|1314297 (4.95%) +++++++++++++++++++
mysql-slow.log.20.gz|802212 (3.02%) ++++++++++++
```
A more-proper analysis on another set of slow logs involved actually getting
the time the query ran, pulling out the date/hour portion of the timestamp, and
graphing the result.
At first blush, it might appear someone had captured logs for various hours of
one day and at 10am for several days in a row. However, note that the Pct
column shows this is only about 20% of all data, which we can also conclude
because there are 964 histogram entries, of which we're only seeing a couple
dozen. This means something happened on July 31st that caused slow queries all
day, and then 10am is a time of day when slow queries tend to happen. To test
this theory, we might re-run this with a "--height=600" (or even 900) to see
nearly all the entries to get a more precise idea of what's going on.
```
$ zcat mysql-slow.log.*.gz \
| fgrep Time: \
| cut -c 9-17 \
| ~/distribution --width=90 --verbose \
| sort -n
tokens/lines examined: 30,027
tokens/lines matched: 30,027
histogram keys: 964
runtime: 1224.58ms
Val |Ct (Pct) Histogram
120731 03|274 (0.91%) ++++++++++++++++++++++++++++++++++
120731 04|210 (0.70%) ++++++++++++++++++++++++++
120731 07|208 (0.69%) ++++++++++++++++++++++++++
120731 08|271 (0.90%) +++++++++++++++++++++++++++++++++
120731 09|403 (1.34%) +++++++++++++++++++++++++++++++++++++++++++++++++
120731 10|556 (1.85%) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
120731 11|421 (1.40%) +++++++++++++++++++++++++++++++++++++++++++++++++++
120731 12|293 (0.98%) ++++++++++++++++++++++++++++++++++++
120731 13|327 (1.09%) ++++++++++++++++++++++++++++++++++++++++
120731 14|318 (1.06%) +++++++++++++++++++++++++++++++++++++++
120731 15|446 (1.49%) ++++++++++++++++++++++++++++++++++++++++++++++++++++++
120731 16|397 (1.32%) ++++++++++++++++++++++++++++++++++++++++++++++++
120731 17|228 (0.76%) ++++++++++++++++++++++++++++
120801 10|515 (1.72%) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
120803 10|223 (0.74%) +++++++++++++++++++++++++++
120809 10|215 (0.72%) ++++++++++++++++++++++++++
120810 10|210 (0.70%) ++++++++++++++++++++++++++
120814 10|193 (0.64%) ++++++++++++++++++++++++
120815 10|205 (0.68%) +++++++++++++++++++++++++
120816 10|207 (0.69%) +++++++++++++++++++++++++
120817 10|226 (0.75%) ++++++++++++++++++++++++++++
120819 10|197 (0.66%) ++++++++++++++++++++++++
```
A typical problem for MySQL administrators is figuring out how many slow queries
are taking how long. The slow query log can be quite verbose. Analysing it in a
visual nature can help. For example, there is a line that looks like this in the
slow query log:
```
# Query_time: 5.260353 Lock_time: 0.000052 Rows_sent: 0 Rows_examined: 2414 Rows_affected: 1108 Rows_read: 2
```
It might be useful to see how many queries ran for how long in increments of
tenths of seconds. You can grab that third field and get tenth-second
precision with a simple awk command, then graph the result.
It seems interesting that there are spikes at 3.2, 3.5, 4, 4.3, 4.5 seconds.
One hypothesis might be that those are individual queries, each warranting its
own analysis.
```
$ head -90000 mysql-slow.log.20120710 \
| fgrep Query_time: \
| awk '{print int($3 * 10)/10}' \
| ~/distribution --verbose --height=30 --char='|o' \
| sort -n
tokens/lines examined: 12,269
tokens/lines matched: 12,269
histogram keys: 481
runtime: 12.53ms
Val|Ct (Pct) Histogram
0 |1090 (8.88%) ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||o
2 |1018 (8.30%) |||||||||||||||||||||||||||||||||||||||||||||||||||||||||o
2.1|949 (7.73%) |||||||||||||||||||||||||||||||||||||||||||||||||||||o
2.2|653 (5.32%) |||||||||||||||||||||||||||||||||||||o
2.3|552 (4.50%) |||||||||||||||||||||||||||||||o
2.4|554 (4.52%) |||||||||||||||||||||||||||||||o
2.5|473 (3.86%) ||||||||||||||||||||||||||o
2.6|423 (3.45%) ||||||||||||||||||||||||o
2.7|394 (3.21%) ||||||||||||||||||||||o
2.8|278 (2.27%) |||||||||||||||o
2.9|189 (1.54%) ||||||||||o
3 |173 (1.41%) |||||||||o
3.1|193 (1.57%) ||||||||||o
3.2|200 (1.63%) |||||||||||o
3.3|138 (1.12%) |||||||o
3.4|176 (1.43%) ||||||||||o
3.5|213 (1.74%) ||||||||||||o
3.6|157 (1.28%) ||||||||o
3.7|134 (1.09%) |||||||o
3.8|121 (0.99%) ||||||o
3.9|96 (0.78%) |||||o
4 |110 (0.90%) ||||||o
4.1|80 (0.65%) ||||o
4.2|84 (0.68%) ||||o
4.3|90 (0.73%) |||||o
4.4|76 (0.62%) ||||o
4.5|93 (0.76%) |||||o
4.6|79 (0.64%) ||||o
4.7|71 (0.58%) ||||o
5.1|70 (0.57%) |||o
```
Apache Logs Analysis Example
============================
Even if you know sed/awk/grep, the built-in tokenizing/matching can be less
verbose. Say you want to look at all the URLs in your Apache logs. People will
be doing GET /a/b/c /a/c/f q/r/s q/n/p. A and Q are the most common, so you can
tokenize on / and the latter parts of the URL will be buried, statistically.
By tokenizing and matching using the script, you may also find unexpected
common portions of the URL that don't show up in the prefix.
```
$ zcat access.log*gz \
| awk '{print $7}' \
| distribution -t=/ -h=15
Val |Ct (Pct) Histogram
Art |1839 (16.58%) +++++++++++++++++++++++++++++++++++++++++++++++++
Rendered |1596 (14.39%) ++++++++++++++++++++++++++++++++++++++++++
Blender |1499 (13.52%) ++++++++++++++++++++++++++++++++++++++++
AznRigging |760 (6.85%) ++++++++++++++++++++
Music |457 (4.12%) ++++++++++++
Ringtones |388 (3.50%) +++++++++++
CuteStance |280 (2.52%) ++++++++
Traditional |197 (1.78%) ++++++
Technology |171 (1.54%) +++++
CreativeExhaust|134 (1.21%) ++++
Fractals |127 (1.15%) ++++
robots.txt |125 (1.13%) ++++
RingtoneEP1.mp3|125 (1.13%) ++++
Poetry |108 (0.97%) +++
RingtoneEP2.mp3|95 (0.86%) +++
```
Here we had pulled apart our access logs and put them in TSV format for input
into Hive. The user agent string was in the 13th position. I wanted to just get an
overall idea of what sort of user agents were coming to the site. I'm using the
minimal argument size and my favorite "character" combo of "|o". I find it interesting
that there were only 474 unique word-based tokens in the input. Also, it's clear
that a large percentage of the visitors come with mobile devices now.
```
$ zcat weblog-2014-05.tsv.gz \
| awk -F '\t' '{print $13}' \
| distribution -t=word -m=word -c='|o' -s=m -v
tokens/lines examined: 28,062,913
tokens/lines matched: 11,507,407
histogram keys: 474
runtime: 15659.97ms
Val |Ct (Pct) Histogram
Mozilla |912852 (7.93%) ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||o
like |722945 (6.28%) |||||||||||||||||||||||||||||||||||||||||||||||||||||||||o
OS |611503 (5.31%) ||||||||||||||||||||||||||||||||||||||||||||||||o
AppleWebKit|605618 (5.26%) |||||||||||||||||||||||||||||||||||||||||||||||o
Gecko |535620 (4.65%) ||||||||||||||||||||||||||||||||||||||||||o
Windows |484056 (4.21%) ||||||||||||||||||||||||||||||||||||||o
NT |483085 (4.20%) ||||||||||||||||||||||||||||||||||||||o
KHTML |356730 (3.10%) ||||||||||||||||||||||||||||o
Safari |355400 (3.09%) ||||||||||||||||||||||||||||o
X |347033 (3.02%) |||||||||||||||||||||||||||o
Mac |344205 (2.99%) |||||||||||||||||||||||||||o
appversion |300816 (2.61%) |||||||||||||||||||||||o
Type |299085 (2.60%) |||||||||||||||||||||||o
Connection |299085 (2.60%) |||||||||||||||||||||||o
Mobile |282759 (2.46%) ||||||||||||||||||||||o
CPU |266837 (2.32%) |||||||||||||||||||||o
NET |247418 (2.15%) |||||||||||||||||||o
CLR |247418 (2.15%) |||||||||||||||||||o
Aspect |242566 (2.11%) |||||||||||||||||||o
Ratio |242566 (2.11%) |||||||||||||||||||o
```
And here we had a list of referrers in "referrer [count]" format. They were done one per day, but I wanted a count for January through September, so I used a shell glob to specify all those files for my 'cat'. Distribution will notice that it's getting the same key as previously and just add the new value, so the key "x1" can come in many times and we'll get the aggregate in the output. The referrers have been anonymized here since they are very specific to the company.
```
$ cat referrers-20140* | distribution -v -g=kv -s=m
tokens/lines examined: 133,564
tokens/lines matched: 31,498,986
histogram keys: 14,882
runtime: 453.45ms
Val |Ct (Pct) Histogram
x1 |24313595 (77.19%) ++++++++++++++++++++++++++++++++++++++++++++++++++++
x2 |3430278 (10.89%) ++++++++
x3 |1049996 (3.33%) +++
x4 |210083 (0.67%) +
x5 |179554 (0.57%) +
x6 |163158 (0.52%) +
x7 |129997 (0.41%) +
x8 |122725 (0.39%) +
x9 |120487 (0.38%) +
xa |109085 (0.35%) +
xb |99956 (0.32%) +
xc |92208 (0.29%) +
xd |90017 (0.29%) +
xe |79416 (0.25%) +
xf |70094 (0.22%) +
xg |58089 (0.18%) +
xh |52349 (0.17%) +
xi |37002 (0.12%) +
xj |36651 (0.12%) +
xk |32860 (0.10%) +
```
This seems a really good time to use the --logarithmic option, since that top referrer
is causing a loss of resolution on the following ones! I'll re-run this for one month.
```
$ cat referrers-201402* | distribution -v -g=kv -s=m -l
tokens/lines examined: 23,517
tokens/lines matched: 5,908,765
histogram keys: 5,888
runtime: 78.28ms
Val |Ct (Pct) Histogram
x1 |4471708 (75.68%) +++++++++++++++++++++++++++++++++++++++++++++++++++++
x2 |670703 (11.35%) ++++++++++++++++++++++++++++++++++++++++++++++
x3 |203489 (3.44%) ++++++++++++++++++++++++++++++++++++++++++
x4 |43751 (0.74%) +++++++++++++++++++++++++++++++++++++
x5 |36211 (0.61%) ++++++++++++++++++++++++++++++++++++
x6 |34589 (0.59%) ++++++++++++++++++++++++++++++++++++
x7 |31279 (0.53%) ++++++++++++++++++++++++++++++++++++
x8 |29596 (0.50%) +++++++++++++++++++++++++++++++++++
x9 |23125 (0.39%) +++++++++++++++++++++++++++++++++++
xa |21429 (0.36%) ++++++++++++++++++++++++++++++++++
xb |19670 (0.33%) ++++++++++++++++++++++++++++++++++
xc |19057 (0.32%) ++++++++++++++++++++++++++++++++++
xd |18945 (0.32%) ++++++++++++++++++++++++++++++++++
xe |18936 (0.32%) ++++++++++++++++++++++++++++++++++
xf |16015 (0.27%) +++++++++++++++++++++++++++++++++
xg |13115 (0.22%) +++++++++++++++++++++++++++++++++
xh |12067 (0.20%) ++++++++++++++++++++++++++++++++
xi |8485 (0.14%) +++++++++++++++++++++++++++++++
xj |7694 (0.13%) +++++++++++++++++++++++++++++++
xk |7199 (0.12%) +++++++++++++++++++++++++++++++
```
Graphing a Series of Numbers Example
====================================
Suppose you just have a list of integers you want to graph. For example, you've
captured a "show global status" for every second for 5 minutes, and you want to
grep out just one stat for the five-minute sample and graph it.
Or, slightly more-difficult, you want to pull out the series of numbers and
only graph the difference between each pair (as in a monotonically-increasing
counter). The ```--numonly=``` option takes care of both these cases. This option
will override any "height" and simply graph all the numbers, since there's no
frequency to dictate which values are more important to graph than others.
Therefore there's a lot of output, which is snipped in the example output that
follows. The "val" column is simply an ascending list of integers, so you can
tell where output was snipped by the jumps in those values.
```
$ grep ^Innodb_data_reads globalStatus*.txt \
| awk '{print $2}' \
| distribution --numonly=mon --char='|+'
Val|Ct (Pct) Histogram
1 |0 (0.00%) +
91 |15 (0.05%) +
92 |14 (0.04%) +
93 |30 (0.10%) |+
94 |11 (0.03%) +
95 |922 (2.93%) |||||||||||||||||||||||||||||||||||||||||||||||||||||||||+
96 |372 (1.18%) |||||||||||||||||||||||+
97 |44 (0.14%) ||+
98 |37 (0.12%) ||+
99 |110 (0.35%) ||||||+
100|18 (0.06%) |+
101|12 (0.04%) +
102|19 (0.06%) |+
103|164 (0.52%) ||||||||||+
200|62 (0.20%) |||+
201|372 (1.18%) |||||||||||||||||||||||+
202|228 (0.72%) ||||||||||||||+
203|43 (0.14%) ||+
204|917 (2.91%) ||||||||||||||||||||||||||||||||||||||||||||||||||||||||+
205|64 (0.20%) |||+
206|178 (0.57%) |||||||||||+
207|90 (0.29%) |||||+
208|90 (0.29%) |||||+
209|101 (0.32%) ||||||+
453|0 (0.00%) +
454|0 (0.00%) +
```
The Python version eschews the header and superfluous "key" as the Perl version
will probably also soon do:
```
$ cat ~/tmp/numberSeries.txt | xargs
01 05 06 09 12 22 28 32 34 30 37 44 48 54 63 70 78 82 85 88 89 89 90 92 95
$ cat ~/tmp/numberSeries.txt \
| ~/Dev/distribution/distribution.py --numonly -c='|o' -s=s
5 (0.39%) ||o
6 (0.47%) ||o
9 (0.70%) ||||o
12 (0.94%) |||||o
22 (1.71%) ||||||||||o
28 (2.18%) |||||||||||||o
32 (2.49%) |||||||||||||||o
34 (2.65%) ||||||||||||||||o
30 (2.34%) ||||||||||||||o
37 (2.88%) |||||||||||||||||o
44 (3.43%) ||||||||||||||||||||o
48 (3.74%) ||||||||||||||||||||||o
54 (4.21%) |||||||||||||||||||||||||o
63 (4.91%) |||||||||||||||||||||||||||||o
70 (5.46%) |||||||||||||||||||||||||||||||||o
78 (6.08%) ||||||||||||||||||||||||||||||||||||o
82 (6.39%) ||||||||||||||||||||||||||||||||||||||o
85 (6.63%) ||||||||||||||||||||||||||||||||||||||||o
88 (6.86%) |||||||||||||||||||||||||||||||||||||||||o
89 (6.94%) ||||||||||||||||||||||||||||||||||||||||||o
89 (6.94%) ||||||||||||||||||||||||||||||||||||||||||o
90 (7.01%) ||||||||||||||||||||||||||||||||||||||||||o
92 (7.17%) |||||||||||||||||||||||||||||||||||||||||||o
95 (7.40%) |||||||||||||||||||||||||||||||||||||||||||||o
$ cat ~/tmp/numberSeries.txt \
| ~/Dev/distribution/distribution.py --numonly=diff -c='|o' -s=s
4 (4.26%) ||||||||||||||||||o
1 (1.06%) ||||o
3 (3.19%) |||||||||||||o
3 (3.19%) |||||||||||||o
10 (10.64%) |||||||||||||||||||||||||||||||||||||||||||||o
6 (6.38%) |||||||||||||||||||||||||||o
4 (4.26%) ||||||||||||||||||o
2 (2.13%) |||||||||o
-4 (-4.26%) o
7 (7.45%) |||||||||||||||||||||||||||||||o
7 (7.45%) |||||||||||||||||||||||||||||||o
4 (4.26%) ||||||||||||||||||o
6 (6.38%) |||||||||||||||||||||||||||o
9 (9.57%) ||||||||||||||||||||||||||||||||||||||||o
7 (7.45%) |||||||||||||||||||||||||||||||o
8 (8.51%) ||||||||||||||||||||||||||||||||||||o
4 (4.26%) ||||||||||||||||||o
3 (3.19%) |||||||||||||o
3 (3.19%) |||||||||||||o
1 (1.06%) ||||o
0 (0.00%) o
1 (1.06%) ||||o
2 (2.13%) |||||||||o
3 (3.19%) |||||||||||||o
```
HDFS DU Example
===============
HDFS files are often rather large, so I first change the numeric file size to
megabytes by dividing by 1048576. I must also change it to an int value, since
distribution doesn't currently deal with non-integer counts.
Also, we are pre-parsing the du output to give us only the megabytes count and
the final entry in the filename. `awk -F /` supports that.
```
$ hdfs dfs -du /apps/hive/warehouse/aedb/hitcounts_byday/cookie_type=shopper \
| awk -F / '{print int($1/1048576) " " $8}' \
| distribution -g -c='-~' --height=20 \
| sort
Key|Ct (Pct) Histogram
dt=2014-11-15|3265438 (2.53%) ----------------------------------------------~
dt=2014-11-16|3241614 (2.51%) ----------------------------------------------~
dt=2014-11-20|2964636 (2.29%) ------------------------------------------~
dt=2014-11-21|3049912 (2.36%) -------------------------------------------~
dt=2014-11-22|3292621 (2.55%) -----------------------------------------------~
dt=2014-11-23|3319538 (2.57%) -----------------------------------------------~
dt=2014-11-24|3070654 (2.38%) -------------------------------------------~
dt=2014-11-25|3086090 (2.39%) --------------------------------------------~
dt=2014-11-27|3113888 (2.41%) --------------------------------------------~
dt=2014-11-28|3124426 (2.42%) --------------------------------------------~
dt=2014-11-29|3431859 (2.66%) -------------------------------------------------~
dt=2014-11-30|3391117 (2.62%) ------------------------------------------------~
dt=2014-12-01|3167744 (2.45%) ---------------------------------------------~
dt=2014-12-02|3134248 (2.43%) --------------------------------------------~
dt=2014-12-03|3023733 (2.34%) -------------------------------------------~
dt=2014-12-04|3022274 (2.34%) -------------------------------------------~
dt=2014-12-05|3040776 (2.35%) -------------------------------------------~
dt=2014-12-06|3054159 (2.36%) -------------------------------------------~
dt=2014-12-09|3065252 (2.37%) -------------------------------------------~
dt=2014-12-10|3316703 (2.57%) -----------------------------------------------~
```
Running Tests
=============
The `tests` directory contains sample input and output files, as well as a
script to verify expected output based on the sample inputs. To use it, first
export an environment variable called `distribution` that points to the
location of your distribution executable. The script must be run from the `tests`
directory. For example, the following will run tests against the Perl script
and then against the Python script:
cd tests/
distribution=../distribution ./runTests.sh
distribution=../distribution.py ./runTests.sh
The `runTests.sh` script takes one optional argument, `-v`. This enables
verbose mode, which prints out any differences in the stderr of the test runs,
for comparing diagnostic info.
To-Do List
==========
New features are unlikely to be added, as the existing functionality is already
arguably a superset of what's necessary. Still, there are some things that need
to be done.
* No Time::HiRes Perl module? Don't die. Much harder than it should be.
Negated by next to-do.
* Get scripts into package managers.
Porting
=======
Perl and Python are fairly common, but I'm not sure 100% of systems out there
have them. A C/C++ port would be most welcome.
If you write a port, send me a pull request so I can include it in this repo.
Port requirements: from the user's point of view, it's the exact same script.
They pass in the same options in the same way, and get the same output,
byte-for-byte if possible. This means you'll need (Perl) regexp support in your
language of choice. Also a hash map structure makes the implementation simple,
but more-efficient methods are welcome.
I imagine, in order of nice-to-haveness:
* C or C++
* Go
* Lisp
* Ocaml
* Java
* Ruby
List of known ports
-------------------
1. [go-distribution](https://github.com/bradfordboyle/go-distribution)
Authors
=======
* Tim Ellis
* Philo Vivero
* Taylor Stearns
================================================
FILE: VERSION
================================================
1.2.2
================================================
FILE: distribution
================================================
#!/usr/bin/env perl
# vim: set noexpandtab sw=4 ts=4:
# --
# A recent battle with vim and a Go program finally settled this for me.
# Tabs for indent, spaces for formatting. If you change your shiftwidth and
# tabstop to different values and your code looks ugly, say aloud: tabs
# for indent, spaces for formatting.
# distribution - creates histograms based on input
#
# Version 1.0
#
# Written by Tim Ellis of Fifth Sigma, Inc.
# Copyright (c) 2012-2014 by Tim Ellis
# Released under the terms of GNU GPLv2:
#
# This program 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; version 2 of the License.
#
# This program 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
# this program; if not, visit http://www.gnu.org/licenses/gpl-2.0.html in your
# web browser.
#
# If you're still living in the 1800's, you can instead write to:
#
# Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
use warnings;
use strict;
# Time::HiRes will be used if found, to provide more precise timings
# with --verbose.
BEGIN {
eval { require Time::HiRes; Time::HiRes->import('time'); 1; };
}
# for determining how long this program ran
my $startTime = time() * 1000;
# defaults - overridden first by distributionrc then by commandline options
my $size = '';
my $width = 80;
my $height = 15;
my $widthArg = 0;
my $heightArg = 0;
my $logarithmic = 0;
# every keyPruneInterval keys, prune the hash to maxKeys top keys
my $keyPruneInterval = 1500000;
my $maxKeys = 5000;
my $numOnly = '';
my $histogramChar = "-";
my $unicode = 0;
my $tokenize = 0;
# by default, everything matches (nothing is stripped out)
my $matchRegexp = ".";
# status and summary statistics
my $verbose = 0;
# how often to give status if verbose
my $statInterval = 1.0;
my $numPrunes = 0;
# whether or not to parse input into bins (if data is pre-summarised and we're
# just presenting results)
my $graphValues = "";
# variables to support colourised output
my $colourisedOutput = 0;
my $colourPalette = '0,0,32,35,34';
my $regularColour = "";
my $keyColour = "";
my $ctColour = "";
my $pctColour = "";
my $graphColour = "";
# we'll re-use inLine at various times for reading files
my $inLine;
# if they want an rcfile, must be first arg
my $rcFile = $ENV{"HOME"} . "/.distributionrc";
if (@ARGV && $ARGV[0] =~ /^-+r(cfile)*=(.+)$/) { $rcFile = $2; }
# read in rcfile if it exists - it'll just be args
if (open (IFILE, "< $rcFile")) {
while ($inLine = <IFILE>) {
chomp ($inLine);
# must put args from rcfile at start so options passed on the
# commandline will override them
unshift (@ARGV, $inLine);
}
}
# process input arguments -- any arguments that aren't known switches are stuck
# onto @extraArgs - note that you can have one or two dashes before the option,
# and only need the first character. also options that take values and switches
# can be overloaded, so -c=o -c means use the o character and colourise the
# output. this can be confusing.
my @extraArgs;
foreach my $arg (@ARGV) {
if ($arg =~ /^-+h(elp)*$/) { doArgs(); exit 0; }
elsif ($arg =~ /^-+w(idth)*=(.+)$/) { $widthArg = $2; }
elsif ($arg =~ /^-+h(eight)*=(.+)$/) { $heightArg = $2; }
elsif ($arg =~ /^-+k(eys)*=(.+)$/) { $maxKeys = $2; }
# --char takes option...
elsif ($arg =~ /^-+c(har)*=(.+)$/) { $histogramChar = $2; }
# ...--color doesn't.
elsif ($arg =~ /^-+c(olor)*$/) { $colourisedOutput = 1; }
# can pass --graph without option, will default to value/key ordering
# since Unix prefers that for piping-to-sort reasons
elsif ($arg =~ /^-+g(raph)*=(.+)$/) { $graphValues = $2; }
elsif ($arg =~ /^-+g(raph)*$/) { $graphValues = 'vk'; }
elsif ($arg =~ /^-+l(ogarithmic)*$/) { $logarithmic = 2; }
# can pass --numonly without option
elsif ($arg =~ /^-+n(umonly)$/) { $numOnly = 'abs'; }
elsif ($arg =~ /^-+n(umonly)*=(.+)$/) { $numOnly = $2; }
# palette is a comma-separated list of ANSI colour values
elsif ($arg =~ /^-+p(alette)*=(.+)$/) { $colourPalette = $2; $colourisedOutput = 1; }
# size has somewhat complex override semantics including some
# non-obvious ones like if passing --numonly for example
elsif ($arg =~ /^-+s(ize)*=(.+)$/) { $size = $2; }
# tokenize the input based on Perl regexp
elsif ($arg =~ /^-+t(okenize)*=(.+)$/) { $tokenize = $2; }
# match tokens based on Perl regexp
elsif ($arg =~ /^-+m(atch)*=(.+)$/) { $matchRegexp = $2; }
elsif ($arg =~ /^-+v(erbose)*$/) { $verbose = 1; }
else { push (@extraArgs, $arg); }
}
# variables to support colourised output
if ($colourisedOutput) {
# input should be comma-separated list of numerals
my @cp = split (',', $colourPalette);
# add ANSI colour commands around the values - final looks like ^[[32m
for (my $i=0; $i < scalar @cp; $i++) {
$cp[$i] = chr(27) . '[' . $cp[$i] . 'm';
}
($regularColour, $keyColour, $ctColour, $pctColour, $graphColour) = @cp;
}
# for advanced graphing
my $verticalBlocks = ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"]; # for future?
my $partialBlocks = ["▏", "▎", "▍", "▌", "▋", "▊", "▉", "█"]; # char=pb
my $partialCircles = ["◖", "●"]; # char=pc
my $partialLines = ["╸", "╾", "━"]; # char=pl
# some useful substitutions for prettiness
if ($histogramChar eq "ba") { $unicode = 1; $histogramChar = "▬"; }
elsif ($histogramChar eq "bl") { $unicode = 1; $histogramChar = "Ξ"; }
elsif ($histogramChar eq "em") { $unicode = 1; $histogramChar = "—"; }
elsif ($histogramChar eq "me") { $unicode = 1; $histogramChar = "⋯"; }
elsif ($histogramChar eq "di") { $unicode = 1; $histogramChar = "♦"; }
elsif ($histogramChar eq "dt") { $unicode = 1; $histogramChar = "•"; }
elsif ($histogramChar eq "sq") { $unicode = 1; $histogramChar = "□"; }
# high-bit set means we're not in ASCIIland anymore
if (ord (substr ($histogramChar, 0, 1)) >= 128) { $unicode = 1; }
# sub-full character width graphing systems
my $charWidth = 1;
my $graphChars = undef;
if ($histogramChar eq "pb") {
$charWidth = 0.125;
$graphChars = $partialBlocks;
} elsif ($histogramChar eq "pl") {
$charWidth = 0.3334;
$graphChars = $partialLines;
}
# some useful regexp replacements
if ($matchRegexp eq 'word') { $matchRegexp = '^[A-Z,a-z]+$'; }
elsif ($matchRegexp eq 'num') { $matchRegexp = '^\d+$'; }
if ($tokenize eq 'word') { $tokenize = '[^\w]'; }
elsif ($tokenize eq 'white') { $tokenize = '\s'; }
# set the heigh/width of the histogram based on size input,
# this is the lowest level of height/width priority
if ($size =~ /^f/) {
$width = int (`tput cols` * 0.99);
if ($width < 80) { $width = 80; }
$height = int (`tput lines` - 3);
if ($verbose) { $height -= 4; }
if ($height < 20) { $height = 20; }
} elsif ($size =~ /^s/) {
$width = 60;
$height = 10;
} elsif ($size =~ /^m/) {
$width = 100;
$height = 20;
} elsif ($size =~ /^l/) {
$width = 140;
$height = 35;
}
# if they passed in --width or --height, they probably meant it moreso than
# defaults or the --size parameter - so code this last
if ($widthArg) { $width = $widthArg; }
if ($heightArg) { $height = $heightArg; }
# maxKeys should be at least a few thousand greater than height to reduce odds
# of throwing away high-count values that appear sparingly in the data
if ($maxKeys < $height + 3000) {
$maxKeys = $height + 3000;
print STDERR "Updated maxKeys to $maxKeys (height + 3000)\n";
}
my $nextStat = time() + $statInterval;
my $valuesDict;
my $totalValues = 0;
my $totalObjects = 0;
my $graphVal = 0;
my $maxVal = 0;
# build the dict/map/hash of input values in one of the three modes of operation
if ($numOnly) {
readNumerics();
} elsif ($graphValues) {
readPretalliedTokens();
} else {
readLinesBuildHash();
}
# see if there was input
checkValuesObjects();
my $totalKeys;
my @sortedKeys;
# if we're just graphing a bunch of numbers, no need to sort
# the values dict/map/hash
if ($numOnly) {
# here we sort on KEYS not VALUES like other cases
@sortedKeys = sortKeysByKey();
# we graph everything we're given - throw away nothing! this overrides
# --height or --size options! it is the highest priority height directive
$height = $totalObjects;
} else {
# build the sorted dict/map/hash
@sortedKeys = sortKeysByValueFrequency();
$maxVal = $valuesDict->{$sortedKeys[0]};
}
# if there aren't height # of distinct values, choose the number
# of values so the loop later on doesn't have to check for special
# cases
$totalKeys = scalar @sortedKeys;
if ($totalKeys < $height) { $height = $totalKeys; }
# for logarithmic graphs
my $maxLog = 0;
if ($logarithmic) {
$maxLog = log($maxVal);
}
my $i;
my $j;
my $keyText;
my $ctText;
my $pctText;
my $preBarLen;
my $barWidth;
my $maxPreBarLen = 0;
my $maxKeyLen = 0;
# here is the complex part - read it carefully
for ($i = 0; $i < $height; $i++) {
# print the i'th most-common key
$keyText->[$i] = $sortedKeys[$i];
# how many times this key occurred in the input
my $count = $valuesDict->{$sortedKeys[$i]};
# determine the bar width based on key occurence
if ($logarithmic) {
if ($count > 0) {
$barWidth->[$i] = log($count) / $maxLog;
} else {
$barWidth->[$i] = 0;
}
} else {
$barWidth->[$i] = $count / $maxVal;
}
# determine the percent of key frequency
my $percentile = $count / $totalValues * 100;
# graph axis labels, really
$ctText->[$i] = sprintf ("%d", $count);
$pctText->[$i] = sprintf ("(%3.02f%%)", $percentile);
$preBarLen = length ($ctText->[$i]) + length ($pctText->[$i]);
# determine the longest key name and longest count/percent text for
# aligning the output
if ($preBarLen > $maxPreBarLen) { $maxPreBarLen = $preBarLen; }
if (length ($sortedKeys[$i]) > $maxKeyLen) { $maxKeyLen = length ($sortedKeys[$i]); }
}
my $endTime = time() * 1000;
my $totalMillis = sprintf ("%.2f", ($endTime - $startTime));
# TODO: Collect stats on histogram keys, like how many times maxKeys was
# reached and pruned, and present them here. For now that seems complicated
# for the end-user, so I'll wait until there's a feature request
if ($verbose) {
print STDERR "tokens/lines examined: " . addCommas($totalObjects) . " \n";
print STDERR " tokens/lines matched: " . addCommas($totalValues) . "\n";
print STDERR " histogram keys: " . addCommas($totalKeys) . "\n";
print STDERR " runtime: " . addCommas($totalMillis) . "ms\n";
}
# almost done now!
outputGraph();
exit 0;
# --------------------------------------------------------------------------- #
# subroutines
# --------------------------------------------------------------------------- #
# get the keys ordered - we'll only print the most common keys
sub sortKeysByValueFrequency {
# sort first by the value of a key, then by the key itself in case of a tie.
# this allows us to create deterministic sorts when we have multiple entries
# in our histogram with the same frequency. particularly important given that
# perl intentionally randomizes the order of dictionary keys, so not even a
# stable sort would save us.
my @sortedKeys = reverse sort { int($valuesDict->{$a}) <=> int($valuesDict->{$b}) || $a cmp $b } keys %{$valuesDict};
return @sortedKeys;
}
# keep only the most maxKeys keys
sub pruneKeys {
my $newDict;
my $numKeysTransferred = 0;
foreach my $key (&sortKeysByValueFrequency) {
$newDict->{$key} = $valuesDict->{$key};
$numKeysTransferred++;
last if ($numKeysTransferred > $maxKeys);
}
$valuesDict = $newDict;
$numPrunes++;
}
# get the keys ordered simply by key
sub sortKeysByKey {
my @sortedKeys = sort { int($a) <=> int($b) } keys %{$valuesDict};
return @sortedKeys;
}
# here we just pull in a stream of numerics and graph them, optionally graphing
# the difference between each pair of values
sub readNumerics {
# monotonically-increasing pairs, must have at least one value
my $lastVal = undef;
while ($inLine = <STDIN>) {
chomp ($inLine);
if ($numOnly =~ /^m/i || $numOnly =~ /^d/i) {
if (defined $lastVal) {
$graphVal = $inLine - $lastVal;
$totalValues += $graphVal;
$totalObjects++;
}
$lastVal = $inLine;
} else {
$graphVal= $inLine;
$totalValues += $inLine;
$totalObjects++;
}
if ($graphVal > $maxVal) { $maxVal = $graphVal; }
# we just build a list where the keys are line num and values are the
# value
if ($totalObjects > 0) {
$valuesDict->{$totalObjects} = $graphVal;
}
}
}
# read in lines and build dict/map/hash object from it
sub readLinesBuildHash {
my $pruneObjects = 0;
while ($inLine = <STDIN>) {
chomp($inLine);
if ($tokenize) {
# in this case we break the line into tokens and tally them
foreach my $lineToken (split (/$tokenize/, $inLine)) {
$totalObjects++;
if ($lineToken =~ /$matchRegexp/) {
$valuesDict->{$lineToken}++;
$totalValues++;
$pruneObjects++;
}
}
} else {
# in this case the entire line is the token to be tallied
$totalObjects++;
if ($inLine =~ /$matchRegexp/) {
$valuesDict->{$inLine}++;
$totalValues++;
$pruneObjects++;
}
}
if ($verbose && time() > $nextStat) {
print STDERR "tokens/lines examined: " . addCommas($totalObjects) . "... ; hash prunes: $numPrunes" . chr(13);
$nextStat = time() + $statInterval;
}
if ($pruneObjects >= $keyPruneInterval) {
pruneKeys();
$pruneObjects = 0;
}
}
}
# here is the case where we don't need to put the input into bins and tally -
# the data is pre-tallied for us
sub readPretalliedTokens {
while ($inLine = <STDIN>) {
chomp ($inLine);
if ($graphValues eq 'vk') {
if ($inLine =~ /^\s*(\d+)\s+(.+)$/) {
$valuesDict->{$2} += $1;
$totalValues += $1;
if ($1 > $maxVal) { $maxVal = $1; }
$totalObjects++;
} else {
print STDERR " E Input malformed+discarded (perhaps pass -g=kv?): $inLine\n";
}
} elsif ($graphValues eq 'kv') {
if ($inLine =~ /^(.+?)\s+(\d+)$/) {
$valuesDict->{$1} += $2;
$totalValues += $2;
if ($2 > $maxVal) { $maxVal = $2; }
$totalObjects++;
} else {
print STDERR " E Input malformed+discarded (perhaps pass -g=vk?): $inLine\n";
}
}
}
}
# see if there was input
sub checkValuesObjects {
# the input may be empty. or we may have been too strict on the
# matching regexp passed in. either way, we were left with nothing.
if ($totalValues == 0) {
if ($totalObjects > 0) {
print STDERR "All input filtered! ";
} else {
print STDERR "No input! ";
}
print STDERR "No histogram for you. Sorry?\n";
exit 255;
}
}
# make a number filled with commas - humans hate to see a number like
# 18008675309. is that 180M or 1.8B? look again. 18B.
sub addCommas {
my $theNumber = shift;
$theNumber = reverse $theNumber;
$theNumber =~ s<(\d\d\d)(?=\d)(?!\d*\.)><$1,>g;
return reverse $theNumber;
}
# the following arrays, hashes, variables must be correct for this to work
# keyText->[] - list of the keys
# pctText->[] - list of the percents
# ctText->[] - list of the counts
# barWidth->[] - list of the widths of the bars
sub outputGraph {
# print a header with alignment from key names
for ($j = 4; $j <= $maxKeyLen; $j++) { print STDERR " "; }
print STDERR "Key";
print STDERR "|Ct (Pct)";
for ($j = 7; $j <= $maxPreBarLen; $j++) { print STDERR " "; }
print STDERR "Histogram";
# get ready for the output, but sorting gets hosed if we print the
# colour code before the key, so put it on the line before
print STDERR "$keyColour\n";
# amount of other output reduces possible size of bar - alas
my $maxBarWidth = $width - $maxPreBarLen - $maxKeyLen - 4;
for ($i = 0; $i < $height; $i++) {
# first the key that we aggregated
for ($j = length ($keyText->[$i]); $j < $maxKeyLen; $j++) { print " "; }
print $keyText->[$i];
print $regularColour;
# alignment
# separater between keys and count/pct
print "|";
print $ctColour;
print $ctText->[$i] . " ";
print $pctColour;
print $pctText->[$i];
# spaces 'til time to print the bar
for ($j = length ($ctText->[$i]) + length ($pctText->[$i]); $j <= $maxPreBarLen; $j++) { print " "; }
print $graphColour;
for ($j = 0; $j < int ($barWidth->[$i] * $maxBarWidth); $j++) {
if ($charWidth < 1) {
# print out maximum-width character (always last in array)
print $graphChars->[scalar @$graphChars - 1];
} else {
# we're printing regular non-unicode characters
if (length ($histogramChar) > 1 && !$unicode) {
# but still we have >1 byte! so print initial byte
# for all but the last character (printed outside loop)
print substr ($histogramChar, 0, 1);
} else {
print $histogramChar;
}
}
}
# print one too many bar characters so we always see something
if ($charWidth < 1) {
# if we have partial-width characters, get higher resolution
my $remainder = ($barWidth->[$i] * $maxBarWidth) - int ($barWidth->[$i] * $maxBarWidth);
my $whichChar = int ($remainder / $charWidth);
if ($barWidth->[$i] * $maxBarWidth > $charWidth) {
# we have more than charWidth remainder, so print out a
# remainder portion
print $graphChars->[$whichChar];
} else {
# we had minimum remainder, so print minimum-width
# character just print the minimum-width portion
print $graphChars->[0];
}
} else {
# we're printing regular non-unicode characters
if (length ($histogramChar) > 1 && !$unicode) {
# but still we have >1 byte! so print final byte of input string
print substr ($histogramChar, -1, 1);
} else {
print $histogramChar;
}
}
# FIXME: even with all these colour-printing antics, still one key will
# be printed with the wrong colour on sorted output most of the time,
# but i have no idea how to fix this other than to implement sorting of
# the output within the script itself.
if ($i == $height - 1) {
# put the terminal back into a normal-colour mode on last entry
print "$regularColour\n";
} else {
# we do these antics of printing $keyColour on the line before
# the key so that piping output to sort will work
print "$keyColour\n";
}
}
}
# usage
sub doArgs {
print "\n";
print "usage: <commandWithOutput> | $0\n";
print " [--rcfile=<rcFile>]\n";
print " [--size={sm|med|lg|full} | --width=<width> --height=<height>]\n";
print " [--color] [--palette=r,k,c,p,g]\n";
print " [--tokenize=<tokenChar>]\n";
print " [--graph[=[kv|vk]] [--numonly[=derivative,diff|abs,absolute,actual]]\n";
print " [--char=<barChars>|<substitutionString>]\n";
print " [--help] [--verbose]\n";
print " --keys=K every $keyPruneInterval values added, prune hash to K keys (default 5000)\n";
print " --char=C character(s) to use for histogram character, some substitutions follow:\n";
print " pl Use 1/3-width unicode partial lines to simulate 3x actual terminal width\n";
print " pb Use 1/8-width unicode partial blocks to simulate 8x actual terminal width\n";
print " ba (▬) Bar\n";
print " bl (Ξ) Building\n";
print " em (—) Emdash\n";
print " me (⋯) Mid-Elipses\n";
print " di (♦) Diamond\n";
print " dt (•) Dot\n";
print " sq (□) Square\n";
print " --color colourise the output\n";
print " --graph[=G] input is already key/value pairs. vk is default:\n";
print " kv input is ordered key then value\n";
print " vk input is ordered value then key\n";
print " --height=N height of histogram, headers non-inclusive, overrides --size\n";
print " --help get help\n";
print " --logarithmic logarithmic graph\n";
print " --match=RE only match lines (or tokens) that match this regexp, some substitutions follow:\n";
print " word ^[A-Z,a-z]+\$ - tokens/lines must be entirely alphabetic\n";
print " num ^\\d+\$ - tokens/lines must be entirely numeric\n";
print " --numonly[=N] input is numerics, simply graph values without labels\n";
print " actual input is just values (default - abs, absolute are synonymous to actual)\n";
print " diff input monotonically-increasing, graph differences (of 2nd and later values)\n";
print " --palette=P comma-separated list of ANSI colour values for portions of the output\n";
print " in this order: regular, key, count, percent, graph. implies --color.\n";
print " --rcfile=F use this rcfile instead of \$HOME/.distributionrc - must be first argument!\n";
print " --size=S size of histogram, can abbreviate to single character, overridden by --width/--height\n";
print " small 40x10\n";
print " medium 80x20\n";
print " large 120x30\n";
print " full terminal width x terminal height (approximately)\n";
print " --tokenize=RE split input on regexp RE and make histogram of all resulting tokens\n";
print " word [^\\w] - split on non-word characters like colons, brackets, commas, etc\n";
print " white \\s - split on whitespace\n";
print " --width=N width of the histogram report, N characters, overrides --size\n";
print " --verbose be verbose\n";
print "\n";
print "You can use single-characters options, like so: -h=25 -w=20 -v. You must still include the =\n";
print "\n";
print "Samples:\n";
print " du -sb /etc/* | $0 --palette=0,37,34,33,32 --graph\n";
print " du -sk /etc/* | awk '{print \$2\" \"\$1}' | $0 --graph=kv\n";
print " zcat /var/log/syslog*gz | $0 --char=o --tokenize=white\n";
print " zcat /var/log/syslog*gz | awk '{print \$5}' | $0 --t=word --m-word --h=15 --c=/\n";
print " zcat /var/log/syslog*gz | cut -c 1-9 | $0 --width=60 --height=10 --char=em\n";
print " find /etc -type f | cut -c 6- | $0 --tokenize=/ --w=90 --h=35 --c=dt\n";
print " cat /usr/share/dict/words | awk '{print length(\$1)}' | $0 --c=* --w=50 --h=10 | sort -n\n";
print "\n";
}
================================================
FILE: distribution.py
================================================
#! /usr/bin/env python3
"""
Generate Graphs Directly in the (ASCII- or Unicode-based) Terminal
If you find yourself typing:
[long | list | of | commands | sort | uniq -c | sort -rn]
Replace:
[| sort | uniq -c | sort -rn]
With:
[| distribution]
Then bask in the glory of your new-found data visualization. There are other
use cases as well.
"""
import math
import os
import re
import shutil
import sys
import time
from pathlib import Path
class Histogram:
"""
Takes the tokenDict built in the InputReader class and goes through it,
printing a histogram for each of the highest height entries
"""
def __init__(self):
pass
def histogram_bar(self, s, histWidth, maxVal, barVal):
# given a value and max, return string for histogram bar of the proper
# number of characters, including unicode partial-width characters
returnBar = ""
# first case is partial-width chars
if s.charWidth < 1:
zeroChar = s.graphChars[-1]
elif len(s.histogramChar) > 1 and not s.unicodeMode:
zeroChar = s.histogramChar[0]
oneChar = s.histogramChar[1]
else:
zeroChar = s.histogramChar
oneChar = s.histogramChar
# write out the full-width integer portion of the histogram
if s.logarithmic:
maxLog = math.log(maxVal)
barLog = math.log(barVal) if barVal > 0 else 0
intWidth = int(barLog / maxLog * histWidth)
remainderWidth = (barLog / maxLog * histWidth) - intWidth
else:
intWidth = int(barVal * 1.0 / maxVal * histWidth)
remainderWidth = (barVal * 1.0 / maxVal * histWidth) - intWidth
# write the zeroeth character intWidth times...
returnBar += zeroChar * intWidth
# we always have at least one remaining char for histogram - if
# we have full-width chars, then just print it, otherwise do a
# calculation of how much remainder we need to print
#
# FIXME: The remainder partial char printed does not take into
# account logarithmic scale (can humans notice?).
if s.charWidth == 1:
returnBar += oneChar
elif s.charWidth < 1:
# this is high-resolution, so figure out what remainder we
# have to represent
if remainderWidth > s.charWidth:
whichChar = int(remainderWidth / s.charWidth)
returnBar += s.graphChars[whichChar]
return returnBar
def write_hist(self, s, tokenDict):
maxTokenLen = 0
outputDict = {}
numItems = 0
maxVal = 0
s.totalValues = int(s.totalValues)
# given a dict, create a comparison tuple that sorts first by the value of a key,
# then by the key itself in case of a tie. this allows us to create deterministic sorts
# when we have multiple entries in our histogram with the same frequency.
def value_key_compare(dict):
return lambda key: (dict.get(key), key)
for k in sorted(tokenDict, key=value_key_compare(tokenDict), reverse=True):
# can't remember what feature "if k:" adds - i think there's an
# off-by-one death the script sometimes suffers without it.
if k:
outputDict[k] = tokenDict[k]
if len(str(k)) > maxTokenLen:
maxTokenLen = len(str(k))
if outputDict[k] > maxVal:
maxVal = outputDict[k]
numItems += 1
if numItems >= s.height:
break
s.endTime = int(time.time() * 1000)
totalMillis = s.endTime - s.startTime
if s.verbose:
sys.stderr.write(f"tokens/lines examined: {s.totalObjects:,d}\n")
sys.stderr.write(f" tokens/lines matched: {s.totalValues:,d}\n")
sys.stderr.write(f" histogram keys: {len(tokenDict):,d}\n")
sys.stderr.write(f" runtime: {totalMillis:,.2f}ms\n")
# the first entry will determine these values
maxValueWidth = 0
maxPctWidth = 0
sortedOutput = sorted(
outputDict, key=value_key_compare(outputDict), reverse=True
)
for i in range(0, len(sortedOutput)):
k = sortedOutput[i]
# can't remember what feature "if k:" adds - i think there's an
# off-by-one death the script sometimes suffers without it.
if k:
if maxValueWidth == 0:
testString = f"{outputDict[k]}"
maxValueWidth = len(testString)
testString = f"({outputDict[k] * 1.0 / s.totalValues * 100:2.2f}%)"
maxPctWidth = len(testString)
# we always output a single histogram char at the end, so
# we output one less than actual number here
histWidth = (
s.width
- (maxTokenLen + 1)
- (maxValueWidth + 1)
- (maxPctWidth + 1)
- 1
)
# output a header
sys.stderr.write("Key".rjust(maxTokenLen) + "|")
sys.stderr.write("Ct".ljust(maxValueWidth) + " ")
sys.stderr.write("(Pct)".ljust(maxPctWidth) + " ")
sys.stderr.write("Histogram")
# get ready for the output, but sorting gets hosed if we print the
# colour code before the key, so put it on the line before
sys.stderr.write(s.keyColour)
sys.stderr.write("\n")
sys.stdout.write(str(k).rjust(maxTokenLen))
sys.stdout.write(s.regularColour)
sys.stdout.write("|")
sys.stdout.write(s.ctColour)
outVal = f"{outputDict[k]}"
sys.stdout.write(outVal.rjust(maxValueWidth) + " ")
pct = f"({outputDict[k] * 1.0 / s.totalValues * 100:2.2f}%)"
sys.stdout.write(s.pctColour)
sys.stdout.write(pct.rjust(maxPctWidth) + " ")
sys.stdout.write(s.graphColour)
sys.stdout.write(
self.histogram_bar(s, histWidth, maxVal, outputDict[k])
)
if i == len(sortedOutput) - 1:
# put the terminal back into a normal-colour mode on last entry
sys.stdout.write(s.regularColour)
else:
# we do these antics of printing $keyColour on the line before
# the key so that piping output to sort will work
sys.stdout.write(s.keyColour)
sys.stdout.write("\n")
class InputReader:
"""
Reads stdin, parses it into a dictionary of key and value is number
of appearances of that key in the input - this will also prune the
token frequency dict on after a certain number of insertions to
prevent OOME on large datasets
"""
def __init__(self):
self.tokenDict = {}
def prune_keys(self, s):
newDict = {}
numKeysTransferred = 0
for k in sorted(self.tokenDict, key=self.tokenDict.get, reverse=True):
if k:
newDict[k] = self.tokenDict[k]
numKeysTransferred += 1
if numKeysTransferred > s.maxKeys:
break
self.tokenDict = newDict
s.numPrunes += 1
def tokenize_input(self, s):
# how to split the input... typically we split on whitespace or
# word boundaries, but the user can specify any regexp
if s.tokenize == "white":
s.tokenize = r"\s+"
elif s.tokenize == "word":
s.tokenize = r"\W"
# how to match (filter) the input... typically we want either
# all-alpha or all-numeric, but again, user can specify
if s.matchRegexp == "word":
s.matchRegexp = r"^[A-Z,a-z]+$"
elif s.matchRegexp in ["num", "number"]:
s.matchRegexp = r"^\d+$"
# docs say these are cached, but i got about 2x speed boost
# from doing the compile
pt = re.compile(s.tokenize)
pm = re.compile(s.matchRegexp)
nextStat = time.time() + s.statInterval
pruneObjects = 0
for line in sys.stdin:
line = line.rstrip("\n")
if s.tokenize:
for token in pt.split(line):
# user desires to break line into tokens...
s.totalObjects += 1
if pm.match(token):
s.totalValues += 1
pruneObjects += 1
if token in self.tokenDict:
self.tokenDict[token] += 1
else:
self.tokenDict[token] = 1
else:
# user just wants every line to be a token
s.totalObjects += 1
if pm.match(line):
s.totalValues += 1
pruneObjects += 1
if line in self.tokenDict:
self.tokenDict[line] += 1
else:
self.tokenDict[line] = 1
# prune the hash if it gets too large
if pruneObjects >= s.keyPruneInterval:
self.prune_keys(s)
pruneObjects = 0
if s.verbose and time.time() > nextStat:
sys.stderr.write(
f"tokens/lines examined: {s.totalObjects:,d} ; hash prunes: {s.numPrunes:,d}..."
+ chr(13)
)
nextStat = time.time() + s.statInterval
def read_pretallied_tokens(self, s):
# the input is already just a series of keys with the frequency of the
# keys precomputed, as in "du -sb" - vk means the number is first, key
# second. kv means key first, number second
vk = re.compile(r"^\s*(\d+)\s+(.+)$")
kv = re.compile(r"^(.+?)\s+(\d+)$")
if s.graphValues == "vk":
for line in sys.stdin:
m = vk.match(line)
try:
if m.group(2) in self.tokenDict:
self.tokenDict[m.group(2)] += int(m.group(1))
else:
self.tokenDict[m.group(2)] = int(m.group(1))
s.totalValues += int(m.group(1))
s.totalObjects += 1
except Exception:
sys.stderr.write(
f" E Input malformed+discarded (perhaps pass -g=kv?): {line}\n"
)
elif s.graphValues == "kv":
for line in sys.stdin:
m = kv.match(line)
try:
if m.group(1) in self.tokenDict:
self.tokenDict[m.group(1)] += int(m.group(2))
else:
self.tokenDict[m.group(1)] = int(m.group(2))
s.totalValues += int(m.group(2))
s.totalObjects += 1
except Exception:
sys.stderr.write(
f" E Input malformed+discarded (perhaps pass -g=vk?): {line}\n"
)
def read_numerics(self, s, h):
# in this special mode, we print out the histogram here instead
# of later - because it's a far simpler histogram without all the
# totals, percentages, etc of the real histogram. we're just
# showing a graph of a series of numbers
lastVal = 0
maxVal = 0
maxWidth = 0
sumVal = 0
outList = []
for line in sys.stdin:
try:
line = float(line.rstrip())
except Exception:
line = lastVal
graphVal = 0
if s.numOnly == "mon":
if s.totalObjects > 0:
graphVal = line - lastVal
lastVal = line
else:
graphVal = line
if graphVal > maxVal:
maxVal = graphVal
maxWidth = len(str(graphVal))
sumVal += int(graphVal)
if s.totalObjects > 0:
outList.append(graphVal)
s.totalObjects += 1
# simple graphical output
for k in outList:
sys.stdout.write(s.keyColour)
sys.stdout.write(str(int(k)).rjust(maxWidth))
pct = f"({float(k) / float(sumVal) * 100:2.2f}%)"
sys.stdout.write(s.pctColour)
sys.stdout.write(pct.rjust(9) + " ")
sys.stdout.write(s.graphColour)
sys.stdout.write(
h.histogram_bar(s, s.width - 11 - maxWidth, maxVal, k) + "\n"
)
sys.stdout.write(s.regularColour)
class Settings:
def __init__(self):
self.totalMillis = 0
self.startTime = int(time.time() * 1000)
self.endTime = 0
self.widthArg = 0
self.heightArg = 0
self.width = 80
self.height = 15
self.histogramChar = "-"
self.colourisedOutput = False
self.logarithmic = False
self.numOnly = "XXX"
self.verbose = False
self.graphValues = ""
self.size = ""
self.tokenize = ""
# by default, everything matches (nothing is stripped out)
self.matchRegexp = "."
# how often to give status if verbose
self.statInterval = 1.0
self.numPrunes = 0
# for colourised output
self.colourPalette = "0,0,32,35,34"
self.regularColour = ""
self.keyColour = ""
self.ctColour = ""
self.pctColour = ""
self.graphColour = ""
# for stats
self.totalObjects = 0
self.totalValues = 0
# every keyPruneInterval keys, prune the hash to maxKeys top keys
self.keyPruneInterval = 1500000
self.maxKeys = 5000
# for advanced graphing
self.unicodeMode = False
self.charWidth = 1
self.graphChars = []
self.partialBlocks = ["▏", "▎", "▍", "▌", "▋", "▊", "▉", "█"] # char=pb
self.partialLines = ["╸", "╾", "━"] # char=hl
# rcfile grabbing/parsing if specified
if len(sys.argv) > 1 and "--rcfile" in sys.argv[1]:
rcFile = sys.argv[1].split("=")[1]
rcFile = os.path.expanduser(rcFile)
else:
rcFile = os.environ.get("HOME") + "/.distributionrc"
# parse opts from the rcFile if it exists
try:
with open(rcFile) as f:
rcfileOptList = f.readlines()
for rcOpt in rcfileOptList:
rcOpt = rcOpt.rstrip().split("#")[0]
if rcOpt:
sys.argv.insert(0, rcOpt)
except OSError:
# don't die or in fact do anything if rcfile doesn't exist
pass
# manual argument parsing easier than getopts IMO
for arg in sys.argv:
if arg in ("-h", "--help"):
doUsage(self)
sys.exit(0)
elif arg in ("-c", "--color", "--colour"):
self.colourisedOutput = True
elif arg in ("-g", "--graph"):
# can pass --graph without option, will default to value/key ordering
# since Unix prefers that for piping-to-sort reasons
self.graphValues = "vk"
elif arg in ("-l", "--logarithmic"):
self.logarithmic = True
elif arg in ("-n", "--numonly"):
self.numOnly = "abs"
elif arg in ("-v", "--verbose"):
self.verbose = True
else:
argList = arg.split("=", 1)
if argList[0] in ("-w", "--width"):
self.widthArg = int(argList[1])
elif argList[0] in ("-h", "--height"):
self.heightArg = int(argList[1])
elif argList[0] in ("-k", "--keys"):
self.maxKeys = int(argList[1])
elif argList[0] in ("-c", "--char"):
self.histogramChar = argList[1]
elif argList[0] in ("-g", "--graph"):
self.graphValues = argList[1]
elif argList[0] in ("-n", "--numonly"):
self.numOnly = argList[1]
elif argList[0] in ("-p", "--palette"):
self.colourPalette = argList[1]
self.colourisedOutput = True
elif argList[0] in ("-s", "--size"):
self.size = argList[1]
elif argList[0] in ("-t", "--tokenize"):
self.tokenize = argList[1]
elif argList[0] in ("-m", "--match"):
self.matchRegexp = argList[1]
# first, size, which might be further overridden by width/height later
if self.size in ("full", "fl", "f"):
# tput will tell us the term width/height even if input is stdin
self.width, self.height = shutil.get_terminal_size()
# convert to numerics from string
self.width = int(self.width)
self.height = int(self.height) - 3
# need room for the verbosity output
if self.verbose:
self.height -= 4
# in case tput went all bad, ensure some minimum size
self.width = max(self.width, 40)
self.height = max(self.height, 10)
elif self.size in ("small", "sm", "s"):
self.width = 60
self.height = 10
elif self.size in ("medium", "med", "m"):
self.width = 100
self.height = 20
elif self.size in ("large", "lg", "l"):
self.width = 140
self.height = 35
# synonyms "monotonically-increasing": derivative, difference, delta, increasing
# so all "d" "i" and "m" words will be graphing those differences
if self.numOnly[0] in ("d", "i", "m"):
self.numOnly = "mon"
# synonyms "actual values": absolute, actual, number, normal, noop,
# so all "a" and "n" words will graph straight up numbers
if self.numOnly[0] in ("a", "n"):
self.numOnly = "abs"
# override variables if they were explicitly given
if self.widthArg != 0:
self.width = self.widthArg
if self.heightArg != 0:
self.height = self.heightArg
# maxKeys should be at least a few thousand greater than height to reduce odds
# of throwing away high-count values that appear sparingly in the data
if self.maxKeys < self.height + 3000:
self.maxKeys = self.height + 3000
if self.verbose:
sys.stderr.write(f"Updated maxKeys to {self.maxKeys} (height + 3000)\n")
# colour palette
if self.colourisedOutput:
cl = self.colourPalette.split(",")
# ANSI color code is ESC+[+NN+m where ESC=chr(27), [ and m are
# the literal characters, and NN is a two-digit number, typically
# from 31 to 37 - why is this knowledge still useful in 2014?
cl = [chr(27) + "[" + e + "m" for e in cl]
(
self.regularColour,
self.keyColour,
self.ctColour,
self.pctColour,
self.graphColour,
) = cl
# some useful ASCII-->utf-8 substitutions
if self.histogramChar == "ba":
self.unicodeMode = True
self.histogramChar = "▬"
elif self.histogramChar == "bl":
self.unicodeMode = True
self.histogramChar = "Ξ"
elif self.histogramChar == "em":
self.unicodeMode = True
self.histogramChar = "—"
elif self.histogramChar == "me":
self.unicodeMode = True
self.histogramChar = "⋯"
elif self.histogramChar == "di":
self.unicodeMode = True
self.histogramChar = "♦"
elif self.histogramChar == "dt":
self.unicodeMode = True
self.histogramChar = "•"
elif self.histogramChar == "sq":
self.unicodeMode = True
self.histogramChar = "□"
# sub-full character width graphing systems
if self.histogramChar == "pb":
self.charWidth = 0.125
self.graphChars = self.partialBlocks
elif self.histogramChar == "pl":
self.charWidth = 0.3334
self.graphChars = self.partialLines
# detect whether the user has passed a multibyte unicode character directly as the histogram char
if ord(self.histogramChar[0]) >= 128:
self.unicodeMode = True
def doUsage(s):
print(
f"""
usage: <commandWithOutput> | {scriptName}
[--rcfile=<rcFile>]
[--size={{sm|med|lg|full}} | --width=<width> --height=<height>]
[--color] [--palette=r,k,c,p,g]
[--tokenize=<tokenChar>]
[--graph[=[kv|vk]] [--numonly[=derivative,diff|abs,absolute,actual]]
[--char=<barChars>|<substitutionString>]
[--help] [--verbose]
--keys=K every {s.keyPruneInterval} values added, prune hash to K keys (default 5000)
--char=C character(s) to use for histogram character, some substitutions follow:
pl Use 1/3-width unicode partial lines to simulate 3x actual terminal width
pb Use 1/8-width unicode partial blocks to simulate 8x actual terminal width
ba (▬) Bar
bl (Ξ) Building
em (—) Emdash
me (⋯) Mid-Elipses
di (♦) Diamond
dt (•) Dot
sq (□) Square
--color colourise the output
--graph[=G] input is already key/value pairs. vk is default:
kv input is ordered key then value
vk input is ordered value then key
--height=N height of histogram, headers non-inclusive, overrides --size
--help get help
--logarithmic logarithmic graph
--match=RE only match lines (or tokens) that match this regexp, some substitutions follow:
word ^[A-Z,a-z]+\\$ - tokens/lines must be entirely alphabetic
num ^\\d+\\$ - tokens/lines must be entirely numeric
--numonly[=N] input is numerics, simply graph values without labels
actual input is just values (default - abs, absolute are synonymous to actual)
diff input monotonically-increasing, graph differences (of 2nd and later values)
--palette=P comma-separated list of ANSI colour values for portions of the output
in this order: regular, key, count, percent, graph. implies --color.
--rcfile=F use this rcfile instead of ~/.distributionrc - must be first argument!
--size=S size of histogram, can abbreviate to single character, overridden by --width/--height
small 40x10
medium 80x20
large 120x30
full terminal width x terminal height (approximately)
--tokenize=RE split input on regexp RE and make histogram of all resulting tokens
word [^\\w] - split on non-word characters like colons, brackets, commas, etc
white \\s - split on whitespace
--width=N width of the histogram report, N characters, overrides --size
--verbose be verbose
You can use single-characters options, like so: -h=25 -w=20 -v. You must still include the =
Samples:
du -sb /etc/* | {scriptName} --palette=0,37,34,33,32 --graph
du -sk /etc/* | awk '{{print $2\" \"$1}}' | {scriptName} --graph=kv
zcat /var/log/syslog*gz | {scriptName} --char=o --tokenize=white
zcat /var/log/syslog*gz | awk '{{print $5}}' | {scriptName} -t=word -m-word -h=15 -c=/
zcat /var/log/syslog*gz | cut -c 1-9 | {scriptName} -width=60 -height=10 -char=em
find /etc -type f | cut -c 6- | {scriptName} -tokenize=/ -w=90 -h=35 -c=dt
cat /usr/share/dict/words | awk '{{print length($1)}}' | {scriptName} -c=* -w=50 -h=10 | sort -n
"""
)
# simple argument parsing and call top-level routines
def main():
# instantiate our classes
s = Settings()
i = InputReader()
h = Histogram()
if s.graphValues:
# user passed g=vk or g=kv
i.read_pretallied_tokens(s)
elif s.numOnly != "XXX":
# s.numOnly was specified by the user
i.read_numerics(s, h)
# read_numerics will have output a graph already, so exit
sys.exit(0)
else:
# this is the original behaviour of distribution
i.tokenize_input(s)
h.write_hist(s, i.tokenDict)
# what is this magic?
scriptName = str(Path(sys.argv[0]).name)
if __name__ == "__main__":
main()
================================================
FILE: distributionrc
================================================
# put this file at $HOME/.distributionrc or specify it as --rcfile=<location>
# AS THE FIRST ARGUMENT to the script
#
# options for the distribution program can be specified one per line exactly as
# you'd specify them on the commandline. options in this file are overridden by
# the commandline options passed
#
# do not try to specify the same option twice in this file, you'll probably be
# surprised by the reverse-order of overrides
# obvious options?
--color
#--size=full
# two-char choice
--char=-o
# cool unicode partial-width characters
# --char=pb
# other interesting-but-unusual graph bar choices
#--char=◵
#--char=■
#--char=◣
#--char=░
#--char=▞
# ANSI colour palette, in this order:
# regular, key, count, percent, graph
--palette=0,32,34,35,37
================================================
FILE: tests/runTests.sh
================================================
#!/bin/sh
# make sure env is setup proper
if [ "xxx$distribution" == "xxx" ] ; then
echo "To run tests, first export distribution=<pathToDistributionToTest>"
exit 255
fi
getopts "v" verbose
# the tests
echo ""
printf "Running test: 1. "
cat stdin.01.txt | $distribution --rcfile=../distributionrc --graph --height=35 --width=120 --char=dt --color --verbose > stdout.01.actual.txt 2> stderr.01.actual.txt
printf "2. "
cat stdin.02.txt | awk '{print $4" "$5}' | $distribution --rcfile=../distributionrc -s=med --width=110 --tokenize=word --match=word -v -c > stdout.02.actual.txt 2> stderr.02.actual.txt
printf "3. "
grep modem stdin.02.txt | awk '{print $1}' | $distribution --rcfile=../distributionrc --width=110 -h=15 -c='|' -v -c 2> stderr.03.actual.txt | sort > stdout.03.actual.txt
printf "4. "
cat stdin.03.txt | $distribution --rcfile=../distributionrc --size=large --height=8 --width=60 -t=/ --palette=0,31,33,35,37 -c='()' > stdout.04.actual.txt 2> stderr.04.actual.txt
printf "5. "
cat stdin.03.txt | $distribution --rcfile=../distributionrc -c=pc -w=48 --tokenize=word --match=num --size=large --verbose 2> stderr.05.actual.txt | sort -n > stdout.05.actual.txt
printf "6. "
# generate a large list of deterministic but meaningless numbers
(( i=0 )) ; while [[ $i -lt 3141592 ]] ; do
echo $(( i ^ (i+=17) ))
done | cut -c 2-6 | $distribution --rcfile=../distributionrc --width=124 --height=29 -p=0,32,34,36,31 -c=^ -v > stdout.06.actual.txt 2> stderr.06.actual.txt
printf "7. "
cat stdin.04.txt | awk '{print $8}' | $distribution --rcfile=../distributionrc -s=s -w=90 --char=Ξ > stdout.07.actual.txt 2> stderr.07.actual.txt
echo "done."
# be sure output is proper
err=0
printf "Comparing results: "
for i in 01 02 03 04 05 06 07 ; do
printf "$i. "
diff -w stdout.$i.expected.txt stdout.$i.actual.txt
if [ $? -ne 0 ]; then
err=1
fi
# when in verbose mode, ignore any "runtime lines, since those may differ by
# milliseconds from machine to machine. Also ignore any lines with "^M" markers,
# which are line-erase signals used for updating the screen interactively, and
# thus don't need to be stored or compared.
if [ "$verbose" = "v" ]; then
diff -w -I "runtime:" -I "
" stderr.$i.expected.txt stderr.$i.actual.txt
fi
done
echo "done."
# clean up
rm stdout.*.actual.txt stderr.*.actual.txt
exit $err
================================================
FILE: tests/stderr.01.expected.txt
================================================
tokens/lines examined: 279
tokens/lines matched: 17,444,532
histogram keys: 279
runtime: 1.52ms
Key|Ct (Pct) Histogram[32m
================================================
FILE: tests/stderr.02.expected.txt
================================================
tokens/lines examined: 5,480
tokens/lines matched: 1,104
histogram keys: 144
runtime: 6.19ms
Key|Ct (Pct) Histogram[32m
================================================
FILE: tests/stderr.03.expected.txt
================================================
tokens/lines examined: 29
tokens/lines matched: 29
histogram keys: 9
runtime: 0.31ms
Key|Ct (Pct) Histogram[32m
================================================
FILE: tests/stderr.04.expected.txt
================================================
Key|Ct (Pct) Histogram[31m
================================================
FILE: tests/stderr.05.expected.txt
================================================
tokens/lines examined: 1,942
tokens/lines matched: 191
histogram keys: 11
runtime: 2.12ms
Key|Ct (Pct) Histogram[32m
================================================
FILE: tests/stderr.06.expected.txt
================================================
tokens/lines examined: 56,960... ; hash prunes: 0
tokens/lines examined: 113,920... ; hash prunes: 0
tokens/lines examined: 171,773... ; hash prunes: 0
tokens/lines examined: 184,800
tokens/lines matched: 184,800
histogram keys: 68
runtime: 3,243.41ms
Key|Ct (Pct) Histogram[32m
================================================
FILE: tests/stderr.07.expected.txt
================================================
Key|Ct (Pct) Histogram[32m
================================================
FILE: tests/stdin.01.txt
================================================
27944 /etc/acpi
2981 /etc/adduser.conf
10 /etc/adjtime
15375 /etc/alternatives
395 /etc/anacrontab
1096 /etc/ansible
800 /etc/anthy
95556 /etc/apache2
112 /etc/apg.conf
3397 /etc/apm
16922 /etc/apparmor
1597915 /etc/apparmor.d
2666 /etc/apport
40810 /etc/apt
362303 /etc/ardour2
144 /etc/at.deny
41 /etc/ati
1366 /etc/at-spi2
5791 /etc/avahi
9085 /etc/avserver.conf
2076 /etc/bash.bashrc
58753 /etc/bash_completion
597836 /etc/bash_completion.d
356 /etc/bindresvport.blacklist
321 /etc/blkid.conf
15 /etc/blkid.tab
5306 /etc/bluetooth
7439 /etc/bogofilter.cf
392 /etc/bonobo-activation
33 /etc/brlapi.key
3143272 /etc/brltty
19925 /etc/brltty.conf
1878 /etc/ca-certificates
6961 /etc/ca-certificates.conf
632 /etc/calendar
2301 /etc/chatscripts
509 /etc/checkbox.d
248 /etc/chromium-browser
186 /etc/clutter-imcontext
699 /etc/colord.conf
1122 /etc/compizconfig
161 /etc/ConsoleKit
57645 /etc/console-setup
3300 /etc/corosync
429 /etc/cron.d
30047 /etc/cron.daily
127 /etc/cron.hourly
455 /etc/cron.monthly
722 /etc/crontab
2127 /etc/cron.weekly
67 /etc/crypttab
14653 /etc/cups
8964 /etc/cupshelpers
70918 /etc/dbus-1
3694 /etc/dconf
2969 /etc/debconf.conf
11 /etc/debian_version
32218 /etc/default
604 /etc/deluser.conf
55 /etc/depmod.d
18191 /etc/dhcp
1785 /etc/dhcp3
71 /etc/dictionaries-common
4730 /etc/dkms
352 /etc/doc-base
1308 /etc/dpkg
1616 /etc/emacs
343 /etc/environment
389 /etc/esound
574 /etc/firefox
119862 /etc/fonts
1171 /etc/foomatic
743 /etc/fstab
6 /etc/fstab.d
216 /etc/fuse.conf
3343 /etc/gai.conf
4975 /etc/gconf
59 /etc/gdb
9937 /etc/gdm
10799 /etc/ghostscript
41894 /etc/gimp
8395 /etc/ginn
580 /etc/gnashpluginrc
5767 /etc/gnashrc
690 /etc/gnashthumbnailrc
33126 /etc/gnome
200 /etc/gnome-app-install
25 /etc/gnome-settings-daemon
603 /etc/gnome-vfs-2.0
2550 /etc/gnucash
1741 /etc/groff
977 /etc/group
958 /etc/group-
40058 /etc/grub.d
800 /etc/gshadow
789 /etc/gshadow-
921 /etc/gtk-2.0
1116 /etc/gtk-3.0
2105 /etc/ha.d
4233 /etc/haproxy
6748 /etc/hddtemp.db
4728 /etc/hdparm.conf
92 /etc/host.conf
7 /etc/hostname
271 /etc/hosts
580 /etc/hosts.allow
880 /etc/hosts.deny
900 /etc/hp
163 /etc/icedtea-web
78 /etc/ifplugd
202358 /etc/ImageMagick
58780 /etc/init
143281 /etc/init.d
6610 /etc/initramfs-tools
1721 /etc/inputrc
28 /etc/insserv
839 /etc/insserv.conf
6 /etc/insserv.conf.d
1256 /etc/iproute2
853 /etc/ipsec.conf
20491 /etc/ipsec.d
698 /etc/ipsec.secrets
24 /etc/issue
17 /etc/issue.net
100414 /etc/java-7-openjdk
2838 /etc/kbd
6035 /etc/kernel
91 /etc/kernel-img.conf
1309 /etc/kerneloops.conf
354 /etc/ldap
92934 /etc/ld.so.cache
34 /etc/ld.so.conf
342 /etc/ld.so.conf.d
267 /etc/legal
2695 /etc/libnl-3
6 /etc/libpaper.d
5336 /etc/libreoffice
564 /etc/lightdm
2570 /etc/locale.alias
2819 /etc/localtime
8750 /etc/logcheck
1475 /etc/logd.cf
10551 /etc/login.defs
599 /etc/logrotate.conf
8279 /etc/logrotate.d
6 /etc/lsb-base
3279 /etc/lsb-base-logging.sh
104 /etc/lsb-release
15752 /etc/ltrace.conf
111 /etc/magic
111 /etc/magic.mime
23576 /etc/mailcap
449 /etc/mailcap.order
5173 /etc/manpath.config
416 /etc/matecomponent-activation
7780758 /etc/mateconf
15409 /etc/mate-system-tools
584 /etc/mate-vfs-2.0
10862 /etc/mate-vfs-mime-magic
440 /etc/menu
15646 /etc/menu-methods
23958 /etc/mime.types
956 /etc/mke2fs.conf
11521 /etc/modprobe.d
198 /etc/modules
535352 /etc/mono
13 /etc/motd
13899 /etc/mplayer
887 /etc/mtab
0 /etc/mtab.fuselock
624 /etc/mtools.conf
5181 /etc/mysql
8453 /etc/nanorc
2064 /etc/netscsid.conf
12602 /etc/network
12958 /etc/NetworkManager
91 /etc/networks
739 /etc/newt
513 /etc/nsswitch.conf
689 /etc/obex-data-server
6 /etc/ODBCDataSources
0 /etc/odbc.ini
0 /etc/odbcinst.ini
9012 /etc/openal
90 /etc/OpenCL
10421 /etc/openhpi
15684 /etc/openvpn
6 /etc/opt
552 /etc/pam.conf
24963 /etc/pam.d
7 /etc/papersize
2039 /etc/passwd
2036 /etc/passwd-
1141 /etc/pcmcia
667 /etc/perl
346 /etc/pkcs11
2243 /etc/pm
7649 /etc/pnm2ppa.conf
1084 /etc/polkit-1
350 /etc/popularity-contest.conf
41552 /etc/ppp
22 /etc/printcap
665 /etc/profile
506 /etc/profile.d
2933 /etc/protocols
11511 /etc/pulse
2172 /etc/purple
120 /etc/python
184 /etc/python2.7
4900 /etc/rc0.d
4861 /etc/rc1.d
5288 /etc/rc2.d
5263 /etc/rc3.d
5263 /etc/rc4.d
5263 /etc/rc5.d
4900 /etc/rc6.d
306 /etc/rc.local
608 /etc/rcS.d
1889 /etc/request-key.conf
9102 /etc/resolvconf
60 /etc/resolv.conf
147 /etc/resolv.conf.orig
268 /etc/rmt
887 /etc/rpc
1263 /etc/rsyslog.conf
2677 /etc/rsyslog.d
12559 /etc/samba
71429 /etc/sane.d
3902 /etc/securetty
24629 /etc/security
10333 /etc/sensors3.conf
25 /etc/sensors.d
19281 /etc/services
19266 /etc/sgml
1356 /etc/shadow
1231 /etc/shadow-
73 /etc/shells
12903 /etc/skel
235 /etc/snmp
112051 /etc/sound
53500 /etc/speech-dispatcher
138042 /etc/ssh
465414 /etc/ssl
741 /etc/sudoers
772 /etc/sudoers.d
19 /etc/su-to-rootrc
2112 /etc/sysctl.conf
8215 /etc/sysctl.d
118 /etc/systemd
231 /etc/terminfo
186 /etc/thunderbird
20 /etc/timezone
4680 /etc/timidity
645 /etc/ts.conf
1260 /etc/ucf.conf
3665 /etc/udev
9425 /etc/ufw
326 /etc/updatedb.conf
1141 /etc/update-manager
8396 /etc/update-motd.d
6 /etc/update-notifier
1678 /etc/UPower
572 /etc/usb_modeswitch.conf
6 /etc/usb_modeswitch.d
25081 /etc/vga
2912 /etc/vim
496 /etc/vlc
21837 /etc/vpnc
23 /etc/vtrgb
4496 /etc/wgetrc
4680 /etc/wildmidi
1343 /etc/wodim.conf
31611 /etc/wpa_supplicant
226309 /etc/X11
111971 /etc/xdg
769 /etc/xl2tpd
35802 /etc/xml
326 /etc/xul-ext
349 /etc/zsh_command_not_found
================================================
FILE: tests/stdin.02.txt
================================================
2012-01-01 08:01:52 anacron[14182]: Job `cron.daily'
2012-01-02 08:01:52 anacron[14182]: Normal exit
2012-01-03 08:17:01 CRON[14610]: (root) CMD
2012-01-04 09:07:50 pppd[13041]: Modem hangup
2012-01-05 09:07:50 pppd[13041]: Connect time
2012-01-06 09:07:50 pppd[13041]: Sent 19243191
2012-01-07 09:07:50 modem-manager[1113]: <info> (ttyUSB0)
2012-01-08 09:07:50 modem-manager[1113]: <info> (ttyUSB0)
2012-01-09 09:07:50 modem-manager[1113]: <info> (ttyUSB2)
2012-01-01 09:07:50 modem-manager[1113]: <info> (ttyUSB2)
2012-01-02 09:07:50 kernel: [142597.045021] usb
2012-01-03 09:07:50 kernel: [142597.045214] option:
2012-01-04 09:07:50 kernel: [142597.045492] option1
2012-01-05 09:07:50 kernel: [142597.045525] option
2012-01-06 09:07:50 kernel: [142597.045773] option1
2012-01-07 09:07:50 kernel: [142597.045814] option
2012-01-08 09:07:50 pppd[13041]: Connection terminated.
2012-01-09 09:07:50 modem-manager[1113]: <info> (tty/ttyUSB0):
2012-01-01 09:07:50 kernel: [142597.046728] option1
2012-01-02 09:07:50 kernel: [142597.046777] option
2012-01-03 09:07:50 modem-manager[1113]: <info> Modem
2012-01-04 09:07:50 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-05 09:07:50 NetworkManager[1127]: <warn> Activation
2012-01-06 09:07:50 NetworkManager[1127]: SCPlugin-Ifupdown: devices
2012-01-07 09:07:50 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-08 09:07:50 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-09 09:07:50 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-01 09:07:50 dbus[1092]: [system] Activating
2012-01-02 09:07:50 NetworkManager[1127]: <warn> could
2012-01-03 09:07:50 NetworkManager[1127]: nm_system_iface_flush_routes: assertion
2012-01-04 09:07:50 NetworkManager[1127]: nm_system_iface_flush_addresses: assertion
2012-01-05 09:07:50 dbus[1092]: [system] Successfully
2012-01-06 09:07:50 dnsmasq[13066]: exiting on
2012-01-07 09:07:50 NetworkManager[1127]: <info> DNS:
2012-01-08 09:07:50 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-09 09:07:50 dnsmasq[14766]: started, version
2012-01-01 09:07:50 dnsmasq[14766]: compile time
2012-01-02 09:07:50 dnsmasq[14766]: warning: no
2012-01-03 09:07:50 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-04 09:07:50 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-05 09:07:50 NetworkManager[1127]: <info> Unmanaged
2012-01-06 09:07:50 NetworkManager[1127]: <info> Unmanaged
2012-01-07 09:07:52 pppd[13041]: Exit.
2012-01-08 09:07:54 NetworkManager[1127]: <info> sleep
2012-01-09 09:07:54 NetworkManager[1127]: <info> sleeping
2012-01-01 09:07:54 NetworkManager[1127]: <info> (eth0):
2012-01-02 09:07:54 NetworkManager[1127]: <info> (eth0):
2012-01-03 09:07:54 NetworkManager[1127]: <info> (eth0):
2012-01-04 09:07:54 NetworkManager[1127]: <info> (eth0):
2012-01-05 09:07:55 anacron[14932]: Anacron 2.3
2012-01-06 09:07:55 anacron[14932]: Normal exit
2012-01-07 09:07:56 NetworkManager[1127]: <info> (wlan0):
2012-01-08 09:07:56 NetworkManager[1127]: <info> (wlan0):
2012-01-09 09:07:56 NetworkManager[1127]: SCPlugin-Ifupdown: devices
2012-01-01 09:07:56 NetworkManager[1127]: <info> radio
2012-01-02 09:07:56 NetworkManager[1127]: <info> WiFi
2012-01-03 09:07:57 kernel: [142603.804145] bcma-pci-bridge
2012-01-04 09:37:34 kernel: [142606.236638] PM:
2012-01-05 09:37:34 kernel: [142606.399207] PM:
2012-01-06 09:37:34 kernel: [142606.399218] Freezing
2012-01-07 09:37:34 kernel: [142606.413472] Freezing
2012-01-08 09:37:34 kernel: [142606.429503] PM:
2012-01-09 09:37:34 kernel: [142606.429522] Suspending
2012-01-01 09:37:34 kernel: [142606.430280] sd
2012-01-02 09:37:34 kernel: [142606.430306] apple-gmux
2012-01-03 09:37:34 kernel: [142606.430367] sd
2012-01-04 09:37:34 kernel: [142606.431471] snd_hda_intel
2012-01-05 09:37:34 kernel: [142606.431474] [fglrx]
2012-01-06 09:37:34 kernel: [142606.431534] pciehp
2012-01-07 09:37:34 kernel: [142606.431537] [fglrx]
2012-01-08 09:37:34 kernel: [142606.469351] uhci_hcd
2012-01-09 09:37:34 kernel: [142606.469376] uhci_hcd
2012-01-01 09:37:34 kernel: [142606.477296] ehci_hcd
2012-01-02 09:37:34 kernel: [142606.493280] ehci_hcd
2012-01-03 09:37:34 kernel: [142606.533344] snd_hda_intel
2012-01-04 09:37:34 kernel: [142606.549221] PM:
2012-01-05 09:37:34 kernel: [142607.070401] PM:
2012-01-06 09:37:34 kernel: [142607.070417] PM:
2012-01-07 09:37:34 kernel: [142607.070424] PM:
2012-01-08 09:37:34 kernel: [142607.070680] ata_piix
2012-01-09 09:37:34 kernel: [142607.084707] PM:
2012-01-01 09:37:34 kernel: [142607.361272] [fglrx]
2012-01-02 09:37:34 kernel: [142607.361274] [fglrx]
2012-01-03 09:37:34 kernel: [142607.361345] PM:
2012-01-04 09:37:34 kernel: [142607.361366] PM:
2012-01-05 09:37:34 kernel: [142607.361418] PM:
2012-01-06 09:37:34 kernel: [142607.361461] PM:
2012-01-07 09:37:34 kernel: [142607.361463] PM:
2012-01-08 09:37:34 kernel: [142607.361901] ehci_hcd
2012-01-09 09:37:34 kernel: [142607.361908] ehci_hcd
2012-01-01 09:37:34 kernel: [142607.376801] ehci_hcd
2012-01-02 09:37:34 kernel: [142607.376807] ehci_hcd
2012-01-03 09:37:34 kernel: [142607.408538] PM:
2012-01-04 09:37:34 kernel: [142607.408793] ACPI:
2012-01-05 09:37:34 kernel: [142607.448529] PM:
2012-01-06 09:37:34 kernel: [142607.448680] Disabling
2012-01-07 09:37:34 kernel: [142607.552327] CPU
2012-01-08 09:37:34 kernel: [142607.656226] CPU
2012-01-09 09:37:34 kernel: [142607.760122] CPU
2012-01-01 09:37:34 kernel: [142607.864015] CPU
2012-01-02 09:37:34 kernel: [142607.967918] CPU
2012-01-03 09:37:34 kernel: [142608.071815] CPU
2012-01-04 09:37:34 kernel: [142608.175716] CPU
2012-01-05 09:37:34 kernel: [142608.176048] Extended
2012-01-06 09:37:34 kernel: [142608.176319] ACPI:
2012-01-07 09:37:34 kernel: [142608.176359] PM:
2012-01-08 09:37:34 kernel: [142608.176667] Extended
2012-01-09 09:37:34 kernel: [142608.176704] Enabling
2012-01-01 09:37:34 kernel: [142608.176802] Booting
2012-01-02 09:37:34 kernel: [142608.176804] smpboot
2012-01-03 09:37:34 kernel: [142608.187115] Initializing
2012-01-04 09:37:34 kernel: [142608.187819] Calibrating
2012-01-05 09:37:34 kernel: [142608.208146] NMI
2012-01-06 09:37:34 kernel: [142608.208802] CPU1
2012-01-07 09:37:34 kernel: [142608.208915] Booting
2012-01-08 09:37:34 kernel: [142608.208916] smpboot
2012-01-09 09:37:34 kernel: [142608.219212] Initializing
2012-01-01 09:37:34 kernel: [142608.219930] Calibrating
2012-01-02 09:37:34 kernel: [142608.240268] NMI
2012-01-03 09:37:34 kernel: [142608.240987] CPU2
2012-01-04 09:37:34 kernel: [142608.241045] Booting
2012-01-05 09:37:34 kernel: [142608.241047] smpboot
2012-01-06 09:37:34 kernel: [142608.251343] Initializing
2012-01-07 09:37:34 kernel: [142608.252061] Calibrating
2012-01-08 09:37:34 kernel: [142608.272427] NMI
2012-01-09 09:37:34 kernel: [142608.273159] CPU3
2012-01-01 09:37:34 kernel: [142608.273233] Booting
2012-01-02 09:37:34 kernel: [142608.273234] smpboot
2012-01-03 09:37:34 kernel: [142608.283529] Initializing
2012-01-04 09:37:34 kernel: [142608.284247] Calibrating
2012-01-05 09:37:34 kernel: [142608.304827] NMI
2012-01-06 09:37:34 kernel: [142608.305639] CPU4
2012-01-07 09:37:34 kernel: [142608.305738] Booting
2012-01-08 09:37:34 kernel: [142608.305739] smpboot
2012-01-09 09:37:34 kernel: [142608.316043] Initializing
2012-01-01 09:37:34 kernel: [142608.316754] Calibrating
2012-01-02 09:37:34 kernel: [142608.337444] NMI
2012-01-03 09:37:34 kernel: [142608.338329] CPU5
2012-01-04 09:37:34 kernel: [142608.338442] Booting
2012-01-05 09:37:34 kernel: [142608.338444] smpboot
2012-01-06 09:37:34 kernel: [142608.348727] Initializing
2012-01-07 09:37:34 kernel: [142608.349456] Calibrating
2012-01-08 09:37:34 kernel: [142608.370266] NMI
2012-01-09 09:37:34 kernel: [142608.371217] CPU6
2012-01-01 09:37:34 kernel: [142608.371481] Booting
2012-01-02 09:37:34 kernel: [142608.371483] smpboot
2012-01-03 09:37:34 kernel: [142608.381765] Initializing
2012-01-04 09:37:34 kernel: [142608.382495] Calibrating
2012-01-05 09:37:34 kernel: [142608.403488] NMI
2012-01-06 09:37:34 kernel: [142608.404562] CPU7
2012-01-07 09:37:34 kernel: [142608.412434] ACPI:
2012-01-08 09:37:34 kernel: [142609.363300] pcieport
2012-01-09 09:37:34 kernel: [142609.363305] pcieport
2012-01-01 09:37:34 kernel: [142609.363307] pcieport
2012-01-02 09:37:34 kernel: [142609.363309] pcieport
2012-01-03 09:37:34 kernel: [142609.363312] pcieport
2012-01-04 09:37:34 kernel: [142609.363315] pcieport
2012-01-05 09:37:34 kernel: [142609.363331] pcieport
2012-01-06 09:37:34 kernel: [142609.363335] pcieport
2012-01-07 09:37:34 kernel: [142609.363337] pcieport
2012-01-08 09:37:34 kernel: [142609.363339] pcieport
2012-01-09 09:37:34 kernel: [142609.363341] pcieport
2012-01-01 09:37:34 kernel: [142609.363344] pcieport
2012-01-02 09:37:34 kernel: [142609.363346] pcieport
2012-01-03 09:37:34 kernel: [142609.363363] mei
2012-01-04 09:37:34 kernel: [142609.363376] mei
2012-01-05 09:37:34 kernel: [142609.363394] uhci_hcd
2012-01-06 09:37:34 kernel: [142609.363404] uhci_hcd
2012-01-07 09:37:34 kernel: [142609.363413] uhci_hcd
2012-01-08 09:37:34 kernel: [142609.363433] ehci_hcd
2012-01-09 09:37:34 kernel: [142609.363448] ehci_hcd
2012-01-01 09:37:34 kernel: [142609.363454] ehci_hcd
2012-01-02 09:37:34 kernel: [142609.363470] ehci_hcd
2012-01-03 09:37:34 kernel: [142609.363474] ehci_hcd
2012-01-04 09:37:34 kernel: [142609.363487] snd_hda_intel
2012-01-05 09:37:34 kernel: [142609.363499] snd_hda_intel
2012-01-06 09:37:34 kernel: [142609.363503] snd_hda_intel
2012-01-07 09:37:34 kernel: [142609.363508] snd_hda_intel
2012-01-08 09:37:34 kernel: [142609.363532] pcieport
2012-01-09 09:37:34 kernel: [142609.363541] pcieport
2012-01-01 09:37:34 kernel: [142609.363545] pcieport
2012-01-02 09:37:34 kernel: [142609.363549] pcieport
2012-01-03 09:37:34 kernel: [142609.363553] pcieport
2012-01-04 09:37:34 kernel: [142609.363559] pcieport
2012-01-05 09:37:34 kernel: [142609.363563] pcieport
2012-01-06 09:37:34 kernel: [142609.363601] pcieport
2012-01-07 09:37:34 kernel: [142609.363610] pcieport
2012-01-08 09:37:34 kernel: [142609.363614] pcieport
2012-01-09 09:37:34 kernel: [142609.363618] pcieport
2012-01-01 09:37:34 kernel: [142609.363622] pcieport
2012-01-02 09:37:34 kernel: [142609.363628] pcieport
2012-01-03 09:37:34 kernel: [142609.363632] pcieport
2012-01-04 09:37:34 kernel: [142609.363671] pcieport
2012-01-05 09:37:34 kernel: [142609.363679] pcieport
2012-01-06 09:37:34 kernel: [142609.363684] pcieport
2012-01-07 09:37:34 kernel: [142609.363691] pcieport
2012-01-08 09:37:34 kernel: [142609.363696] pcieport
2012-01-09 09:37:34 kernel: [142609.363734] pcieport
2012-01-01 09:37:34 kernel: [142609.363743] pcieport
2012-01-02 09:37:34 kernel: [142609.363747] pcieport
2012-01-03 09:37:34 kernel: [142609.363751] pcieport
2012-01-04 09:37:34 kernel: [142609.363755] pcieport
2012-01-05 09:37:34 kernel: [142609.363760] pcieport
2012-01-06 09:37:34 kernel: [142609.363765] pcieport
2012-01-07 09:37:34 kernel: [142609.363796] uhci_hcd
2012-01-08 09:37:34 kernel: [142609.363806] uhci_hcd
2012-01-09 09:37:34 kernel: [142609.363815] uhci_hcd
2012-01-01 09:37:34 kernel: [142609.363834] ehci_hcd
2012-01-02 09:37:34 kernel: [142609.363849] ehci_hcd
2012-01-03 09:37:34 kernel: [142609.363855] ehci_hcd
2012-01-04 09:37:34 kernel: [142609.363869] ehci_hcd
2012-01-05 09:37:34 kernel: [142609.363873] ehci_hcd
2012-01-06 09:37:34 kernel: [142609.363915] ata_piix
2012-01-07 09:37:34 kernel: [142609.363923] ata_piix
2012-01-08 09:37:34 kernel: [142609.363927] ata_piix
2012-01-09 09:37:34 kernel: [142609.363931] ata_piix
2012-01-01 09:37:34 kernel: [142609.363935] ata_piix
2012-01-02 09:37:34 kernel: [142609.363939] ata_piix
2012-01-03 09:37:34 kernel: [142609.363944] ata_piix
2012-01-04 09:37:34 kernel: [142609.363956] pci
2012-01-05 09:37:34 kernel: [142609.363968] pci
2012-01-06 09:37:34 kernel: [142609.363974] pci
2012-01-07 09:37:34 kernel: [142609.363994] fglrx_pci
2012-01-08 09:37:34 kernel: [142609.363999] fglrx_pci
2012-01-09 09:37:34 kernel: [142609.364005] fglrx_pci
2012-01-01 09:37:34 kernel: [142609.364009] fglrx_pci
2012-01-02 09:37:34 kernel: [142609.364013] fglrx_pci
2012-01-03 09:37:34 kernel: [142609.364017] fglrx_pci
2012-01-04 09:37:34 kernel: [142609.364021] fglrx_pci
2012-01-05 09:37:34 kernel: [142609.364056] snd_hda_intel
2012-01-06 09:37:34 kernel: [142609.364069] snd_hda_intel
2012-01-07 09:37:34 kernel: [142609.364072] snd_hda_intel
2012-01-08 09:37:34 kernel: [142609.364077] snd_hda_intel
2012-01-09 09:37:34 kernel: [142609.364165] tg3
2012-01-01 09:37:34 kernel: [142609.364190] tg3
2012-01-02 09:37:34 kernel: [142609.364198] tg3
2012-01-03 09:37:34 kernel: [142609.364204] tg3
2012-01-04 09:37:34 kernel: [142609.364212] tg3
2012-01-05 09:37:34 kernel: [142609.364303] pci
2012-01-06 09:37:34 kernel: [142609.364320] pci
2012-01-07 09:37:34 kernel: [142609.364346] pci
2012-01-08 09:37:34 kernel: [142609.364354] pci
2012-01-09 09:37:34 kernel: [142609.364365] pci
2012-01-01 09:37:34 kernel: [142609.364433] firewire_ohci
2012-01-02 09:37:34 kernel: [142609.364465] firewire_ohci
2012-01-03 09:37:34 kernel: [142609.364473] firewire_ohci
2012-01-04 09:37:34 kernel: [142609.364560] PM:
2012-01-05 09:37:34 kernel: [142609.364660] uhci_hcd
2012-01-06 09:37:34 kernel: [142609.364669] uhci_hcd
2012-01-07 09:37:34 kernel: [142609.364685] mei
2012-01-08 09:37:34 kernel: [142609.364694] ehci_hcd
2012-01-09 09:37:34 kernel: [142609.364697] usb
2012-01-01 09:37:34 kernel: [142609.364699] snd_hda_intel
2012-01-02 09:37:34 kernel: [142609.364705] ehci_hcd
2012-01-03 09:37:34 kernel: [142609.364714] snd_hda_intel
2012-01-04 09:37:34 kernel: [142609.364736] uhci_hcd
2012-01-05 09:37:34 kernel: [142609.364739] ehci_hcd
2012-01-06 09:37:34 kernel: [142609.364744] pciehp
2012-01-07 09:37:34 kernel: [142609.364747] ata_piix
2012-01-08 09:37:34 kernel: [142609.364753] snd_hda_intel
2012-01-09 09:37:34 kernel: [142609.364765] uhci_hcd
2012-01-01 09:37:34 kernel: [142609.364767] ata_piix
2012-01-02 09:37:34 kernel: [142609.364770] ehci_hcd
2012-01-03 09:37:34 kernel: [142609.364775] snd_hda_intel
2012-01-04 09:37:34 kernel: [142609.364817] usb
2012-01-05 09:37:34 kernel: [142609.364871] snd_hda_intel
2012-01-06 09:37:34 kernel: [142609.364910] fglrx_pci
2012-01-07 09:37:34 kernel: [142609.364932] snd_hda_intel
2012-01-08 09:37:34 kernel: [142609.365580] sd
2012-01-09 09:37:34 kernel: [142609.369962] [fglrx]
2012-01-01 09:37:34 kernel: [142609.370140] [fglrx]
2012-01-02 09:37:34 kernel: [142609.414760] [fglrx]
2012-01-03 09:37:34 kernel: [142609.414831] [fglrx]
2012-01-04 09:37:34 kernel: [142609.419272] firewire_ohci
2012-01-05 09:37:34 kernel: [142609.419483] firewire_core:
2012-01-06 09:37:34 kernel: [142609.483100] PM:
2012-01-07 09:37:34 kernel: [142609.483105] PM:
2012-01-08 09:37:34 kernel: [142609.483108] PM:
2012-01-09 09:37:34 kernel: [142609.483113] PM:
2012-01-01 09:37:34 kernel: [142609.483116] PM:
2012-01-02 09:37:34 kernel: [142609.483122] PM:
2012-01-03 09:37:34 kernel: [142609.487587] PM:
2012-01-04 09:37:34 kernel: [142609.487603] PM:
2012-01-05 09:37:34 kernel: [142609.487607] PM:
2012-01-06 09:37:34 kernel: [142609.487611] PM:
2012-01-07 09:37:34 kernel: [142609.487614] PM:
2012-01-08 09:37:34 kernel: [142609.487617] PM:
2012-01-09 09:37:34 kernel: [142609.487648] PM:
2012-01-01 09:37:34 kernel: [142609.487936] PM:
2012-01-02 09:37:34 kernel: [142609.487939] PM:
2012-01-03 09:37:34 kernel: [142609.487942] PM:
2012-01-04 09:37:34 kernel: [142609.487947] PM:
2012-01-05 09:37:34 kernel: [142609.487950] PM:
2012-01-06 09:37:34 kernel: [142609.487953] PM:
2012-01-07 09:37:34 kernel: [142609.515164] PM:
2012-01-08 09:37:34 kernel: [142609.515377] Extended
2012-01-09 09:37:34 kernel: [142609.535655] PM:
2012-01-01 09:37:34 kernel: [142609.535659] PM:
2012-01-02 09:37:34 kernel: [142609.535663] PM:
2012-01-03 09:37:34 kernel: [142609.535667] PM:
2012-01-04 09:37:34 kernel: [142609.535670] PM:
2012-01-05 09:37:34 kernel: [142609.535673] PM:
2012-01-06 09:37:34 kernel: [142609.535675] PM:
2012-01-07 09:37:34 kernel: [142609.535680] PM:
2012-01-08 09:37:34 kernel: [142609.535693] PM:
2012-01-09 09:37:34 kernel: [142609.535695] PM:
2012-01-01 09:37:34 kernel: [142609.535697] PM:
2012-01-02 09:37:34 kernel: [142609.535701] PM:
2012-01-03 09:37:34 kernel: [142609.918715] firewire_core:
2012-01-04 09:37:34 kernel: [142610.709877] ata2.01:
2012-01-05 09:37:34 kernel: [142610.709966] ata1.01:
2012-01-06 09:37:34 kernel: [142610.865813] ata2.00:
2012-01-07 09:37:34 kernel: [142610.865826] ata2.01:
2012-01-08 09:37:34 kernel: [142610.865835] ata2.01:
2012-01-09 09:37:34 kernel: [142610.873997] ata2.00:
2012-01-01 09:37:34 kernel: [142610.889964] ata2.00:
2012-01-02 09:37:34 kernel: [142611.145547] ata1.00:
2012-01-03 09:37:34 kernel: [142611.145558] ata1.01:
2012-01-04 09:37:34 kernel: [142611.153728] ata1.00:
2012-01-05 09:37:34 kernel: [142611.161928] ata1.00:
2012-01-06 09:37:34 kernel: [142611.190133] PM:
2012-01-07 09:37:34 kernel: [142611.190169] PM:
2012-01-08 09:37:34 kernel: [142611.190173] PM:
2012-01-09 09:37:34 kernel: [142611.191213] PM:
2012-01-01 09:37:34 kernel: [142611.191267] PM:
2012-01-02 09:37:34 kernel: [142611.191296] PM:
2012-01-03 09:37:34 kernel: [142611.191297] Restarting
2012-01-04 09:37:34 anacron[15579]: Anacron 2.3
2012-01-05 09:37:34 anacron[15579]: Normal exit
2012-01-06 09:37:34 kernel: [142611.282257] bcma-pci-bridge
2012-01-07 09:37:34 kernel: [142611.282274] bcma-pci-bridge
2012-01-08 09:37:34 kernel: [142611.282356] bcma:
2012-01-09 09:37:34 kernel: [142611.282393] bcma:
2012-01-01 09:37:34 kernel: [142611.282481] bcma:
2012-01-02 09:37:34 kernel: [142611.282678] bcma:
2012-01-03 09:37:34 kernel: [142611.358663] bcma:
2012-01-04 09:37:34 kernel: [142611.360598] cfg80211:
2012-01-05 09:37:34 kernel: [142611.365308] cfg80211:
2012-01-06 09:37:34 kernel: [142611.365310] cfg80211:
2012-01-07 09:37:34 kernel: [142611.365313] cfg80211:
2012-01-08 09:37:34 kernel: [142611.365316] cfg80211:
2012-01-09 09:37:34 kernel: [142611.365318] cfg80211:
2012-01-01 09:37:34 kernel: [142611.365321] cfg80211:
2012-01-02 09:37:34 kernel: [142611.365323] cfg80211:
2012-01-03 09:37:34 kernel: [142611.366185] b43-phy0:
2012-01-04 09:37:34 kernel: [142611.366858] cfg80211:
2012-01-05 09:37:34 kernel: [142611.366860] cfg80211:
2012-01-06 09:37:34 kernel: [142611.366861] cfg80211:
2012-01-07 09:37:34 kernel: [142611.366863] cfg80211:
2012-01-08 09:37:34 kernel: [142611.366865] cfg80211:
2012-01-09 09:37:34 kernel: [142611.366866] cfg80211:
2012-01-01 09:37:34 kernel: [142611.366868] cfg80211:
2012-01-02 09:37:34 kernel: [142611.366870] cfg80211:
2012-01-03 09:37:34 kernel: [142611.366871] cfg80211:
2012-01-04 09:37:34 kernel: [142611.366873] cfg80211:
2012-01-05 09:37:34 kernel: [142611.366874] cfg80211:
2012-01-06 09:37:34 kernel: [142611.366876] cfg80211:
2012-01-07 09:37:34 kernel: [142611.366877] cfg80211:
2012-01-08 09:37:34 kernel: [142611.366879] cfg80211:
2012-01-09 09:37:34 kernel: [142611.366881] cfg80211:
2012-01-01 09:37:34 kernel: [142611.366882] cfg80211:
2012-01-02 09:37:34 kernel: [142611.366884] cfg80211:
2012-01-03 09:37:34 kernel: [142611.366886] cfg80211:
2012-01-04 09:37:34 kernel: [142611.366887] cfg80211:
2012-01-05 09:37:34 kernel: [142611.366889] cfg80211:
2012-01-06 09:37:34 kernel: [142611.366890] cfg80211:
2012-01-07 09:37:34 kernel: [142611.366892] cfg80211:
2012-01-08 09:37:34 kernel: [142611.366893] cfg80211:
2012-01-09 09:37:34 kernel: [142611.366895] cfg80211:
2012-01-01 09:37:34 kernel: [142611.366896] cfg80211:
2012-01-02 09:37:34 kernel: [142611.366898] cfg80211:
2012-01-03 09:37:34 kernel: [142611.366900] cfg80211:
2012-01-04 09:37:34 kernel: [142611.366901] cfg80211:
2012-01-05 09:37:34 kernel: [142611.366998] ieee80211
2012-01-06 09:37:34 kernel: [142611.367354] Broadcom
2012-01-07 09:37:34 NetworkManager[1127]: <info> found
2012-01-08 09:37:34 NetworkManager[1127]: <info> WiFi
2012-01-09 09:37:34 NetworkManager[1127]: SCPlugin-Ifupdown: devices
2012-01-01 09:37:34 NetworkManager[1127]: SCPlugin-Ifupdown: device
2012-01-02 09:37:34 NetworkManager[1127]: <info> (wlan0):
2012-01-03 09:37:34 NetworkManager[1127]: <warn> (wlan0):
2012-01-04 09:37:34 NetworkManager[1127]: <info> (wlan0):
2012-01-05 09:37:34 NetworkManager[1127]: <info> (wlan0):
2012-01-06 09:37:35 NetworkManager[1127]: <info> wake
2012-01-07 09:37:35 NetworkManager[1127]: <info> waking
2012-01-08 09:37:35 NetworkManager[1127]: <info> (eth0):
2012-01-09 09:37:35 NetworkManager[1127]: <info> (eth0):
2012-01-01 09:37:35 NetworkManager[1127]: <info> (eth0):
2012-01-02 09:37:35 kernel: [142611.760464] tg3
2012-01-03 09:37:35 kernel: [142611.760472] tg3
2012-01-04 09:37:35 kernel: [142611.760480] tg3
2012-01-05 09:37:35 kernel: [142611.760487] tg3
2012-01-06 09:37:35 kernel: [142611.760492] tg3
2012-01-07 09:37:35 NetworkManager[1127]: <info> (eth0):
2012-01-08 09:37:35 NetworkManager[1127]: <info> (eth0):
2012-01-09 09:37:35 NetworkManager[1127]: <info> Unmanaged
2012-01-01 09:37:35 NetworkManager[1127]: <info> Unmanaged
2012-01-02 09:37:35 NetworkManager[1127]: <info> (wlan0):
2012-01-03 09:37:35 NetworkManager[1127]: <info> (wlan0):
2012-01-04 09:37:35 NetworkManager[1127]: <info> (wlan0):
2012-01-05 09:37:35 NetworkManager[1127]: <info> (wlan0):
2012-01-06 09:37:35 kernel: [142612.052707] ADDRCONF(NETDEV_UP):
2012-01-07 09:37:35 kernel: [142612.053500] ADDRCONF(NETDEV_UP):
2012-01-08 09:37:36 NetworkManager[1127]: <info> (eth0):
2012-01-09 09:37:36 NetworkManager[1127]: <info> (eth0):
2012-01-01 09:37:36 NetworkManager[1127]: <info> Auto-activating
2012-01-02 09:37:36 NetworkManager[1127]: <info> Activation
2012-01-03 09:37:36 kernel: [142613.615346] tg3
2012-01-04 09:37:36 kernel: [142613.615356] tg3
2012-01-05 09:37:36 NetworkManager[1127]: <info> (eth0):
2012-01-06 09:37:36 kernel: [142613.615363] tg3
2012-01-07 09:37:36 kernel: [142613.615668] ADDRCONF(NETDEV_CHANGE):
2012-01-08 09:37:36 NetworkManager[1127]: <info> Activation
2012-01-09 09:37:36 NetworkManager[1127]: <info> Activation
2012-01-01 09:37:36 NetworkManager[1127]: <info> Activation
2012-01-02 09:37:36 NetworkManager[1127]: <info> Activation
2012-01-03 09:37:36 NetworkManager[1127]: <info> Activation
2012-01-04 09:37:36 NetworkManager[1127]: <info> (eth0):
2012-01-05 09:37:36 NetworkManager[1127]: <info> Activation
2012-01-06 09:37:36 NetworkManager[1127]: <info> Activation
2012-01-07 09:37:36 NetworkManager[1127]: <info> Activation
2012-01-08 09:37:36 NetworkManager[1127]: <info> Activation
2012-01-09 09:37:36 NetworkManager[1127]: <info> (eth0):
2012-01-01 09:37:36 NetworkManager[1127]: <info> Activation
2012-01-02 09:37:36 dhclient: Internet Systems
2012-01-03 09:37:36 dhclient: Copyright 2004-2011
2012-01-04 09:37:36 dhclient: All rights
2012-01-05 09:37:36 dhclient: For info,
2012-01-06 09:37:36 dhclient:
2012-01-07 09:37:36 NetworkManager[1127]: <info> dhclient
2012-01-08 09:37:36 NetworkManager[1127]: <info> Activation
2012-01-09 09:37:36 NetworkManager[1127]: <info> Activation
2012-01-01 09:37:36 NetworkManager[1127]: <info> (eth0):
2012-01-02 09:37:36 dhclient: Listening on
2012-01-03 09:37:36 dhclient: Sending on
2012-01-04 09:37:36 dhclient: Sending on
2012-01-05 09:37:36 dhclient: DHCPDISCOVER on
2012-01-06 09:37:37 dhclient: DHCPREQUEST of
2012-01-07 09:37:37 dhclient: DHCPOFFER of
2012-01-08 09:37:37 dhclient: DHCPACK of
2012-01-09 09:37:37 dhclient: bound to
2012-01-01 09:37:37 NetworkManager[1127]: <info> (eth0):
2012-01-02 09:37:37 NetworkManager[1127]: <info> address
2012-01-03 09:37:37 NetworkManager[1127]: <info> prefix
2012-01-04 09:37:37 NetworkManager[1127]: <info> gateway
2012-01-05 09:37:37 NetworkManager[1127]: <info> hostname
2012-01-06 09:37:37 NetworkManager[1127]: <info> nameserver
2012-01-07 09:37:37 NetworkManager[1127]: <info> nameserver
2012-01-08 09:37:37 NetworkManager[1127]: <info> Activation
2012-01-09 09:37:37 NetworkManager[1127]: <info> Activation
2012-01-01 09:37:38 dnsmasq[14766]: exiting on
2012-01-02 09:37:38 NetworkManager[1127]: <info> DNS:
2012-01-03 09:37:38 NetworkManager[1127]: <info> (eth0):
2012-01-04 09:37:38 NetworkManager[1127]: <info> (eth0):
2012-01-05 09:37:38 dnsmasq[16068]: started, version
2012-01-06 09:37:38 dnsmasq[16068]: compile time
2012-01-07 09:37:38 dnsmasq[16068]: using nameserver
2012-01-08 09:37:38 dnsmasq[16068]: using nameserver
2012-01-09 09:37:39 NetworkManager[1127]: <info> Policy
2012-01-01 09:37:39 NetworkManager[1127]: <info> Activation
2012-01-02 09:37:39 NetworkManager[1127]: <info> Activation
2012-01-03 09:37:39 dbus[1092]: [system] Activating
2012-01-04 09:37:39 dbus[1092]: [system] Successfully
2012-01-05 09:37:41 gnome-screensaver-dialog: pam_ecryptfs: pam_sm_authenticate:
2012-01-06 09:37:47 kernel: [142623.749159] eth0:
2012-01-07 09:37:47 ntpdate[16132]: step time
2012-01-08 09:37:55 NetworkManager[1127]: <info> (eth0):
2012-01-09 09:37:55 NetworkManager[1127]: <info> Activation
2012-01-01 09:37:55 NetworkManager[1127]: <info> Activation
2012-01-02 09:37:55 NetworkManager[1127]: <info> Activation
2012-01-03 09:38:19 dbus[1092]: [system] Activating
2012-01-04 09:38:19 AptDaemon: INFO: Initializing
2012-01-05 09:38:19 dbus[1092]: [system] Successfully
2012-01-06 09:38:19 AptDaemon.PackageKit: INFO: Initializing
2012-01-07 09:38:19 AptDaemon: INFO: CommitPackages()
2012-01-08 09:38:20 AptDaemon.Trans: INFO: Queuing
2012-01-09 09:38:24 AptDaemon.Worker: INFO: Simulating
2012-01-01 09:38:24 AptDaemon.Worker: INFO: Committing
2012-01-02 09:38:25 AptDaemon.Worker: INFO: Processing
2012-01-03 09:43:30 anacron[16257]: Anacron 2.3
2012-01-04 09:43:30 anacron[16257]: Normal exit
2012-01-05 10:05:34 kernel: [144290.760767] CPU6:
2012-01-06 10:05:34 kernel: [144290.760771] CPU2:
2012-01-07 10:05:34 kernel: [144290.760774] CPU0:
2012-01-08 10:05:34 kernel: [144290.760779] CPU3:
2012-01-09 10:05:34 kernel: [144290.760783] CPU5:
2012-01-01 10:05:34 kernel: [144290.760786] CPU1:
2012-01-02 10:05:34 kernel: [144290.760790] CPU7:
2012-01-03 10:05:34 kernel: [144290.760794] CPU4:
2012-01-04 10:05:34 kernel: [144290.760797] CPU2:
2012-01-05 10:05:34 kernel: [144290.760801] CPU6:
2012-01-06 10:05:34 kernel: [144290.765807] CPU2:
2012-01-07 10:05:34 kernel: [144290.765810] CPU6:
2012-01-08 10:05:34 kernel: [144290.765813] CPU3:
2012-01-09 10:05:34 kernel: [144290.765816] CPU0:
2012-01-01 10:05:34 kernel: [144290.765819] CPU7:
2012-01-02 10:05:34 kernel: [144290.765822] CPU1:
2012-01-03 10:05:34 kernel: [144290.765825] CPU4:
2012-01-04 10:05:34 kernel: [144290.765827] CPU5:
2012-01-05 10:05:34 kernel: [144290.765829] CPU6:
2012-01-06 10:05:34 kernel: [144290.765832] CPU2:
2012-01-07 10:05:39 AptDaemon.Trans: INFO: Cancelling
2012-01-08 10:05:40 AptDaemon.Worker: INFO: Finished
2012-01-09 10:05:54 kernel: [144310.995421] [Hardware
2012-01-01 10:06:40 AptDaemon.PackageKit: INFO: Initializing
2012-01-02 10:06:40 AptDaemon.Worker: INFO: Simulating
2012-01-03 10:06:40 AptDaemon.Worker: INFO: Processing
2012-01-04 10:06:41 AptDaemon.PackageKit: INFO: Get
2012-01-05 10:06:41 AptDaemon.Worker: INFO: Finished
2012-01-06 10:12:33 AptDaemon: INFO: Quitting
2012-01-07 10:12:33 AptDaemon: INFO: Quitting
2012-01-08 10:15:44 kernel: [144899.845423] CPU6:
2012-01-09 10:15:44 kernel: [144899.845427] CPU3:
2012-01-01 10:15:44 kernel: [144899.845432] CPU0:
2012-01-02 10:15:44 kernel: [144899.845436] CPU1:
2012-01-03 10:15:44 kernel: [144899.845439] CPU2:
2012-01-04 10:15:44 kernel: [144899.845442] CPU5:
2012-01-05 10:15:44 kernel: [144899.845445] CPU4:
2012-01-06 10:15:44 kernel: [144899.845449] CPU7:
2012-01-07 10:15:44 kernel: [144899.845452] CPU2:
2012-01-08 10:15:44 kernel: [144899.845455] CPU6:
2012-01-09 10:15:44 kernel: [144899.846383] CPU6:
2012-01-01 10:15:44 kernel: [144899.846385] CPU1:
2012-01-02 10:15:44 kernel: [144899.846388] CPU3:
2012-01-03 10:15:44 kernel: [144899.846390] CPU4:
2012-01-04 10:15:44 kernel: [144899.846393] CPU7:
2012-01-05 10:15:44 kernel: [144899.846395] CPU0:
2012-01-06 10:15:44 kernel: [144899.846397] CPU2:
2012-01-07 10:15:44 kernel: [144899.846399] CPU5:
2012-01-08 10:15:44 kernel: [144899.846402] CPU2:
2012-01-09 10:15:44 kernel: [144899.846404] CPU6:
2012-01-01 10:17:01 CRON[16609]: (root) CMD
2012-01-02 10:17:30 kernel: [145006.236581] [Hardware
2012-01-03 10:32:27 NetworkManager[1127]: <info> (eth0):
2012-01-04 10:32:27 kernel: [145902.179285] tg3
2012-01-05 10:32:31 NetworkManager[1127]: <info> (eth0):
2012-01-06 10:32:31 NetworkManager[1127]: <info> (eth0):
2012-01-07 10:32:32 NetworkManager[1127]: <info> (eth0):
2012-01-08 10:32:32 dnsmasq[16068]: exiting on
2012-01-09 10:32:32 NetworkManager[1127]: <info> DNS:
2012-01-01 10:32:32 NetworkManager[1127]: <info> (eth0):
2012-01-02 10:32:32 dnsmasq[16617]: started, version
2012-01-03 10:32:32 dnsmasq[16617]: compile time
2012-01-04 10:32:32 dnsmasq[16617]: warning: no
2012-01-05 10:32:32 kernel: [145906.703379] ADDRCONF(NETDEV_UP):
2012-01-06 10:32:32 dbus[1092]: [system] Activating
2012-01-07 10:32:32 dbus[1092]: [system] Successfully
2012-01-08 10:32:32 kernel: [145906.924958] CPU0:
2012-01-09 10:32:32 kernel: [145906.924963] CPU3:
2012-01-01 10:32:32 kernel: [145906.924966] CPU4:
2012-01-02 10:32:32 kernel: [145906.924970] CPU5:
2012-01-03 10:32:32 kernel: [145906.924974] CPU1:
2012-01-04 10:32:32 kernel: [145906.924977] CPU7:
2012-01-05 10:32:32 kernel: [145906.924981] CPU2:
2012-01-06 10:32:32 kernel: [145906.924984] CPU6:
2012-01-07 10:32:32 kernel: [145906.924987] CPU2:
2012-01-08 10:32:32 kernel: [145906.924989] CPU6:
2012-01-09 10:32:32 kernel: [145906.925967] CPU4:
2012-01-01 10:32:32 kernel: [145906.925969] CPU6:
2012-01-02 10:32:32 kernel: [145906.925971] CPU2:
2012-01-03 10:32:32 kernel: [145906.925973] CPU3:
2012-01-04 10:32:32 kernel: [145906.925975] CPU5:
2012-01-05 10:32:32 kernel: [145906.925977] CPU1:
2012-01-06 10:32:32 kernel: [145906.925979] CPU0:
2012-01-07 10:32:32 kernel: [145906.925982] CPU7:
2012-01-08 10:32:32 kernel: [145906.925984] CPU6:
2012-01-09 10:32:32 kernel: [145906.925985] CPU2:
2012-01-01 10:33:13 NetworkManager[1127]: <info> (eth0):
2012-01-02 10:33:13 NetworkManager[1127]: <info> (eth0):
2012-01-03 10:33:13 NetworkManager[1127]: <info> Auto-activating
2012-01-04 10:33:13 NetworkManager[1127]: <info> Activation
2012-01-05 10:33:13 NetworkManager[1127]: <info> (eth0):
2012-01-06 10:33:13 kernel: [145947.980648] tg3
2012-01-07 10:33:13 kernel: [145947.980650] tg3
2012-01-08 10:33:13 kernel: [145947.980652] tg3
2012-01-09 10:33:13 kernel: [145947.980737] ADDRCONF(NETDEV_CHANGE):
2012-01-01 10:33:13 NetworkManager[1127]: <info> Activation
2012-01-02 10:33:13 NetworkManager[1127]: <info> Activation
2012-01-03 10:33:13 NetworkManager[1127]: <info> Activation
2012-01-04 10:33:13 NetworkManager[1127]: <info> Activation
2012-01-05 10:33:13 NetworkManager[1127]: <info> Activation
2012-01-06 10:33:13 NetworkManager[1127]: <info> (eth0):
2012-01-07 10:33:13 NetworkManager[1127]: <info> Activation
2012-01-08 10:33:13 NetworkManager[1127]: <info> Activation
2012-01-09 10:33:13 NetworkManager[1127]: <info> Activation
2012-01-01 10:33:13 NetworkManager[1127]: <info> Activation
2012-01-02 10:33:13 NetworkManager[1127]: <info> (eth0):
2012-01-03 10:33:13 NetworkManager[1127]: <info> Activation
2012-01-04 10:33:13 NetworkManager[1127]: <info> dhclient
2012-01-05 10:33:13 NetworkManager[1127]: <info> Activation
2012-01-06 10:33:13 NetworkManager[1127]: <info> Activation
2012-01-07 10:33:13 dhclient: Internet Systems
2012-01-08 10:33:13 dhclient: Copyright 2004-2011
2012-01-09 10:33:13 dhclient: All rights
2012-01-01 10:33:13 dhclient: For info,
2012-01-02 10:33:13 dhclient:
2012-01-03 10:33:13 NetworkManager[1127]: <info> (eth0):
2012-01-04 10:33:13 dhclient: Listening on
2012-01-05 10:33:13 dhclient: Sending on
2012-01-06 10:33:13 dhclient: Sending on
2012-01-07 10:33:13 dhclient: DHCPREQUEST of
2012-01-08 10:33:13 dhclient: DHCPACK of
2012-01-09 10:33:13 dhclient: bound to
2012-01-01 10:33:13 NetworkManager[1127]: <info> (eth0):
2012-01-02 10:33:13 NetworkManager[1127]: <info> address
2012-01-03 10:33:13 NetworkManager[1127]: <info> prefix
2012-01-04 10:33:13 NetworkManager[1127]: <info> gateway
2012-01-05 10:33:13 NetworkManager[1127]: <info> hostname
2012-01-06 10:33:13 NetworkManager[1127]: <info> nameserver
2012-01-07 10:33:13 NetworkManager[1127]: <info> nameserver
2012-01-08 10:33:13 NetworkManager[1127]: <info> Activation
2012-01-09 10:33:13 NetworkManager[1127]: <info> Activation
2012-01-01 10:33:14 dnsmasq[16617]: exiting on
2012-01-02 10:33:14 NetworkManager[1127]: <info> DNS:
2012-01-03 10:33:14 NetworkManager[1127]: <info> (eth0):
2012-01-04 10:33:14 dnsmasq[16644]: started, version
2012-01-05 10:33:14 dnsmasq[16644]: compile time
2012-01-06 10:33:14 dnsmasq[16644]: using nameserver
2012-01-07 10:33:14 dnsmasq[16644]: using nameserver
2012-01-08 10:33:14 NetworkManager[1127]: <info> (eth0):
2012-01-09 10:33:14 NetworkManager[1127]: <info> Policy
2012-01-01 10:33:14 NetworkManager[1127]: <info> Activation
2012-01-02 10:33:14 dbus[1092]: [system] Activating
2012-01-03 10:33:14 NetworkManager[1127]: <info> Activation
2012-01-04 10:33:14 dbus[1092]: [system] Successfully
2012-01-05 10:33:23 kernel: [145958.164609] eth0:
2012-01-06 10:33:24 ntpdate[16708]: adjust time
2012-01-07 10:33:24 kernel: [145959.395445] [Hardware
2012-01-08 10:33:33 NetworkManager[1127]: <info> (eth0):
2012-01-09 10:33:33 NetworkManager[1127]: <info> Activation
2012-01-01 10:33:33 NetworkManager[1127]: <info> Activation
2012-01-02 10:33:33 NetworkManager[1127]: <info> Activation
2012-01-03 10:43:49 kernel: [146583.435659] CPU2:
2012-01-04 10:43:49 kernel: [146583.435663] CPU6:
2012-01-05 10:43:49 kernel: [146583.435667] CPU7:
2012-01-06 10:43:49 kernel: [146583.435670] CPU3:
2012-01-07 10:43:49 kernel: [146583.435673] CPU4:
2012-01-08 10:43:49 kernel: [146583.435677] CPU0:
2012-01-09 10:43:49 kernel: [146583.435680] CPU6:
2012-01-01 10:43:49 kernel: [146583.435683] CPU2:
2012-01-02 10:43:49 kernel: [146583.435687] CPU5:
2012-01-03 10:43:49 kernel: [146583.435690] CPU1:
2012-01-04 10:43:49 kernel: [146583.436659] CPU6:
2012-01-05 10:43:49 kernel: [146583.436661] CPU2:
2012-01-06 10:43:49 kernel: [146583.436663] CPU4:
2012-01-07 10:43:49 kernel: [146583.436665] CPU3:
2012-01-08 10:43:49 kernel: [146583.436668] CPU7:
2012-01-09 10:43:49 kernel: [146583.436670] CPU0:
2012-01-01 10:43:49 kernel: [146583.436672] CPU2:
2012-01-02 10:43:49 kernel: [146583.436674] CPU6:
2012-01-03 10:43:49 kernel: [146583.436685] CPU1:
2012-01-04 10:43:49 kernel: [146583.436688] CPU5:
2012-01-05 10:45:00 kernel: [146654.791212] [Hardware
2012-01-06 10:58:24 dbus[1092]: [system] Activating
2012-01-07 10:58:24 AptDaemon: INFO: Initializing
2012-01-08 10:58:24 dbus[1092]: [system] Successfully
2012-01-09 10:58:24 AptDaemon.PackageKit: INFO: Initializing
2012-01-01 10:58:24 AptDaemon: INFO: CommitPackages()
2012-01-02 10:58:24 AptDaemon.Trans: INFO: Queuing
2012-01-03 10:58:31 AptDaemon.Worker: INFO: Simulating
2012-01-04 10:58:32 AptDaemon.Worker: INFO: Committing
2012-01-05 10:58:32 AptDaemon.Worker: INFO: Processing
2012-01-06 11:02:06 AptDaemon.Trans: INFO: Cancelling
2012-01-07 11:02:08 AptDaemon.Worker: INFO: Finished
2012-01-08 11:03:09 AptDaemon.PackageKit: INFO: Initializing
2012-01-09 11:03:09 AptDaemon.Worker: INFO: Simulating
2012-01-01 11:03:09 AptDaemon.Worker: INFO: Processing
2012-01-02 11:03:09 AptDaemon.PackageKit: INFO: Get
2012-01-03 11:03:09 AptDaemon.Worker: INFO: Finished
2012-01-04 11:04:55 AptDaemon: INFO: CommitPackages()
2012-01-05 11:04:55 AptDaemon.Trans: INFO: Queuing
2012-01-06 11:05:00 AptDaemon.Worker: INFO: Simulating
2012-01-07 11:05:00 AptDaemon.Worker: INFO: Committing
2012-01-08 11:05:01 AptDaemon.Worker: INFO: Processing
2012-01-09 11:16:31 AptDaemon.Trans: INFO: Cancelling
2012-01-01 11:16:32 AptDaemon.Worker: INFO: Finished
2012-01-02 11:17:01 CRON[16971]: (root) CMD
2012-01-03 11:17:32 AptDaemon.PackageKit: INFO: Initializing
2012-01-04 11:17:32 AptDaemon.Worker: INFO: Simulating
2012-01-05 11:17:32 AptDaemon.Worker: INFO: Processing
2012-01-06 11:17:33 AptDaemon.PackageKit: INFO: Get
2012-01-07 11:17:33 AptDaemon.Worker: INFO: Finished
2012-01-08 11:23:32 AptDaemon: INFO: Quitting
2012-01-09 11:23:32 AptDaemon: INFO: Quitting
2012-01-01 11:25:04 gnome-screensaver-dialog: pam_ecryptfs: pam_sm_authenticate:
2012-01-02 11:25:18 NetworkManager[1127]: <info> sleep
2012-01-03 11:25:18 NetworkManager[1127]: <info> sleeping
2012-01-04 11:25:18 NetworkManager[1127]: <info> (eth0):
2012-01-05 11:25:18 NetworkManager[1127]: <info> (eth0):
2012-01-06 11:25:18 NetworkManager[1127]: <info> (eth0):
2012-01-07 11:25:18 kernel: [149069.922286] tg3
2012-01-08 11:25:18 NetworkManager[1127]: <info> (eth0):
2012-01-09 11:25:18 dnsmasq[16644]: exiting on
2012-01-01 11:25:18 NetworkManager[1127]: <info> DNS:
2012-01-02 11:25:18 NetworkManager[1127]: <info> (eth0):
2012-01-03 11:25:18 NetworkManager[1127]: <info> (eth0):
2012-01-04 11:25:18 dnsmasq[17021]: started, version
2012-01-05 11:25:18 dnsmasq[17021]: compile time
2012-01-06 11:25:18 dnsmasq[17021]: warning: no
2012-01-07 11:25:18 NetworkManager[1127]: <info> (eth0):
2012-01-08 11:25:18 kernel: [149069.943676] ADDRCONF(NETDEV_UP):
2012-01-09 11:25:18 NetworkManager[1127]: <info> (wlan0):
2012-01-01 11:25:18 NetworkManager[1127]: <info> (wlan0):
2012-01-02 11:25:18 dbus[1092]: [system] Activating
2012-01-03 11:25:18 NetworkManager[1127]: <info> (eth0):
2012-01-04 11:25:18 dbus[1092]: [system] Successfully
2012-01-05 11:25:19 anacron[17112]: Anacron 2.3
2012-01-06 11:25:19 anacron[17112]: Normal exit
2012-01-07 11:25:19 NetworkManager[1127]: SCPlugin-Ifupdown: devices
2012-01-08 11:25:19 NetworkManager[1127]: <info> radio
2012-01-09 11:25:19 NetworkManager[1127]: <info> WiFi
2012-01-01 11:25:20 kernel: [149071.669528] bcma-pci-bridge
2012-01-02 11:41:37 kernel: [149074.113021] PM:
2012-01-03 11:41:37 kernel: [149074.258012] PM:
2012-01-04 11:41:37 kernel: [149074.258023] Freezing
2012-01-05 11:41:37 kernel: [149074.274770] Freezing
2012-01-06 11:41:37 kernel: [149074.290744] PM:
2012-01-07 11:41:37 kernel: [149074.290797] Suspending
2012-01-08 11:41:37 kernel: [149074.291460] sd
2012-01-09 11:41:37 kernel: [149074.291526] apple-gmux
2012-01-01 11:41:37 kernel: [149074.291565] sd
2012-01-02 11:41:37 kernel: [149074.292207] snd_hda_intel
2012-01-03 11:41:37 kernel: [149074.292219] [fglrx]
2012-01-04 11:41:37 kernel: [149074.292257] pciehp
2012-01-05 11:41:37 kernel: [149074.292293] [fglrx]
2012-01-06 11:41:37 kernel: [149074.330712] uhci_hcd
2012-01-07 11:41:37 kernel: [149074.330736] uhci_hcd
2012-01-08 11:41:37 kernel: [149074.338654] ehci_hcd
2012-01-09 11:41:37 kernel: [149074.354637] ehci_hcd
2012-01-01 11:41:37 kernel: [149074.394719] snd_hda_intel
2012-01-02 11:41:37 kernel: [149074.410580] PM:
2012-01-03 11:41:37 kernel: [149074.920661] PM:
2012-01-04 11:41:37 kernel: [149074.920679] PM:
2012-01-05 11:41:37 kernel: [149074.920714] PM:
2012-01-06 11:41:37 kernel: [149074.920979] ata_piix
2012-01-07 11:41:37 kernel: [149074.934071] PM:
2012-01-08 11:41:37 kernel: [149075.224839] [fglrx]
2012-01-09 11:41:37 kernel: [149075.224841] [fglrx]
2012-01-01 11:41:37 kernel: [149075.224916] PM:
2012-01-02 11:41:37 kernel: [149075.224964] PM:
2012-01-03 11:41:37 kernel: [149075.225034] PM:
2012-01-04 11:41:37 kernel: [149075.225041] PM:
2012-01-05 11:41:37 kernel: [149075.225044] PM:
2012-01-06 11:41:37 kernel: [149075.225460] ehci_hcd
2012-01-07 11:41:37 kernel: [149075.225467] ehci_hcd
2012-01-08 11:41:37 kernel: [149075.238178] ehci_hcd
2012-01-09 11:41:37 kernel: [149075.238188] ehci_hcd
2012-01-01 11:41:37 kernel: [149075.269910] PM:
2012-01-02 11:41:37 kernel: [149075.270103] ACPI:
2012-01-03 11:41:37 kernel: [149075.309888] PM:
2012-01-04 11:41:37 kernel: [149075.310033] Disabling
2012-01-05 11:41:37 kernel: [149075.413683] CPU
2012-01-06 11:41:37 kernel: [149075.517580] CPU
2012-01-07 11:41:37 kernel: [149075.621476] CPU
2012-01-08 11:41:37 kernel: [149075.725376] CPU
2012-01-09 11:41:37 kernel: [149075.829271] CPU
2012-01-01 11:41:37 kernel: [149075.933171] CPU
2012-01-02 11:41:37 kernel: [149076.037069] CPU
2012-01-03 11:41:37 kernel: [149076.037411] Extended
2012-01-04 11:41:37 kernel: [149076.037683] ACPI:
2012-01-05 11:41:37 kernel: [149076.037723] PM:
2012-01-06 11:41:37 kernel: [149076.038031] Extended
2012-01-07 11:41:37 kernel: [149076.038071] Enabling
2012-01-08 11:41:37 kernel: [149076.038169] Booting
2012-01-09 11:41:37 kernel: [149076.038171] smpboot
2012-01-01 11:41:37 kernel: [149076.048481] Initializing
2012-01-02 11:41:37 kernel: [149076.049185] Calibrating
2012-01-03 11:41:37 kernel: [149076.069509] NMI
2012-01-04 11:41:37 kernel: [149076.070168] CPU1
2012-01-05 11:41:37 kernel: [149076.070245] Booting
2012-01-06 11:41:37 kernel: [149076.070247] smpboot
2012-01-07 11:41:37 kernel: [149076.080542] Initializing
2012-01-08 11:41:37 kernel: [149076.081260] Calibrating
2012-01-09 11:41:37 kernel: [149076.101586] NMI
2012-01-01 11:41:37 kernel: [149076.102306] CPU2
2012-01-02 11:41:37 kernel: [149076.102379] Booting
2012-01-03 11:41:37 kernel: [149076.102381] smpboot
2012-01-04 11:41:37 kernel: [149076.112677] Initializing
2012-01-05 11:41:37 kernel: [149076.113395] Calibrating
2012-01-06 11:41:37 kernel: [149076.133822] NMI
2012-01-07 11:41:37 kernel: [149076.134548] CPU3
2012-01-08 11:41:37 kernel: [149076.134619] Booting
2012-01-09 11:41:37 kernel: [149076.134621] smpboot
2012-01-01 11:41:37 kernel: [149076.144917] Initializing
2012-01-02 11:41:37 kernel: [149076.145634] Calibrating
2012-01-03 11:41:37 kernel: [149076.166190] NMI
2012-01-04 11:41:37 kernel: [149076.166995] CPU4
2012-01-05 11:41:37 kernel: [149076.167157] Booting
2012-01-06 11:41:37 kernel: [149076.167159] smpboot
2012-01-07 11:41:37 kernel: [149076.177441] Initializing
2012-01-08 11:41:37 kernel: [149076.178171] Calibrating
2012-01-09 11:41:37 kernel: [149076.198875] NMI
2012-01-01 11:41:37 kernel: [149076.199832] CPU5
2012-01-02 11:41:37 kernel: [149076.200194] Booting
2012-01-03 11:41:37 kernel: [149076.200196] smpboot
2012-01-04 11:41:37 kernel: [149076.210499] Initializing
2012-01-05 11:41:37 kernel: [149076.211210] Calibrating
2012-01-06 11:41:37 kernel: [149076.232001] NMI
2012-01-07 11:41:37 kernel: [149076.232992] CPU6
2012-01-08 11:41:37 kernel: [149076.233154] Booting
2012-01-09 11:41:37 kernel: [149076.233155] smpboot
2012-01-01 11:41:37 kernel: [149076.243438] Initializing
2012-01-02 11:41:37 kernel: [149076.244168] Calibrating
2012-01-03 11:41:37 kernel: [149076.265066] NMI
2012-01-04 11:41:37 kernel: [149076.266094] CPU7
2012-01-05 11:41:37 kernel: [149076.273980] ACPI:
2012-01-06 11:41:37 kernel: [149077.228656] pcieport
2012-01-07 11:41:37 kernel: [149077.228660] pcieport
2012-01-08 11:41:37 kernel: [149077.228663] pcieport
2012-01-09 11:41:37 kernel: [149077.228665] pcieport
2012-01-01 11:41:37 kernel: [149077.228668] pcieport
2012-01-02 11:41:37 kernel: [149077.228670] pcieport
2012-01-03 11:41:37 kernel: [149077.228687] pcieport
2012-01-04 11:41:37 kernel: [149077.228690] pcieport
2012-01-05 11:41:37 kernel: [149077.228692] pcieport
2012-01-06 11:41:37 kernel: [149077.228695] pcieport
2012-01-07 11:41:37 kernel: [149077.228697] pcieport
2012-01-08 11:41:37 kernel: [149077.228699] pcieport
2012-01-09 11:41:37 kernel: [149077.228702] pcieport
2012-01-01 11:41:37 kernel: [149077.228718] mei
2012-01-02 11:41:37 kernel: [149077.228731] mei
2012-01-03 11:41:37 kernel: [149077.228749] uhci_hcd
2012-01-04 11:41:37 kernel: [149077.228759] uhci_hcd
2012-01-05 11:41:37 kernel: [149077.228768] uhci_hcd
2012-01-06 11:41:37 kernel: [149077.228788] ehci_hcd
2012-01-07 11:41:37 kernel: [149077.228803] ehci_hcd
2012-01-08 11:41:37 kernel: [149077.228809] ehci_hcd
2012-01-09 11:41:37 kernel: [149077.228825] ehci_hcd
2012-01-01 11:41:37 kernel: [149077.228829] ehci_hcd
2012-01-02 11:41:37 kernel: [149077.228842] snd_hda_intel
2012-01-03 11:41:37 kernel: [149077.228854] snd_hda_intel
2012-01-04 11:41:37 kernel: [149077.228857] snd_hda_intel
2012-01-05 11:41:37 kernel: [149077.228862] snd_hda_intel
2012-01-06 11:41:37 kernel: [149077.228886] pcieport
2012-01-07 11:41:37 kernel: [149077.228895] pcieport
2012-01-08 11:41:37 kernel: [149077.228899] pcieport
2012-01-09 11:41:37 kernel: [149077.228903] pcieport
2012-01-01 11:41:37 kernel: [149077.228907] pcieport
2012-01-02 11:41:37 kernel: [149077.228913] pcieport
2012-01-03 11:41:37 kernel: [149077.228918] pcieport
2012-01-04 11:41:37 kernel: [149077.228955] pcieport
2012-01-05 11:41:37 kernel: [149077.228964] pcieport
2012-01-06 11:41:37 kernel: [149077.228968] pcieport
2012-01-07 11:41:37 kernel: [149077.228972] pcieport
2012-01-08 11:41:37 kernel: [149077.228976] pcieport
2012-01-09 11:41:37 kernel: [149077.228982] pcieport
2012-01-01 11:41:37 kernel: [149077.228986] pcieport
2012-01-02 11:41:37 kernel: [149077.229025] pcieport
2012-01-03 11:41:37 kernel: [149077.229034] pcieport
2012-01-04 11:41:37 kernel: [149077.229038] pcieport
2012-01-05 11:41:37 kernel: [149077.229045] pcieport
2012-01-06 11:41:37 kernel: [149077.229050] pcieport
2012-01-07 11:41:37 kernel: [149077.229088] pcieport
2012-01-08 11:41:37 kernel: [149077.229097] pcieport
2012-01-09 11:41:37 kernel: [149077.229101] pcieport
2012-01-01 11:41:37 kernel: [149077.229105] pcieport
2012-01-02 11:41:37 kernel: [149077.229109] pcieport
2012-01-03 11:41:37 kernel: [149077.229115] pcieport
2012-01-04 11:41:37 kernel: [149077.229119] pcieport
2012-01-05 11:41:37 kernel: [149077.229150] uhci_hcd
2012-01-06 11:41:37 kernel: [149077.229160] uhci_hcd
2012-01-07 11:41:37 kernel: [149077.229169] uhci_hcd
2012-01-08 11:41:37 kernel: [149077.229189] ehci_hcd
2012-01-09 11:41:37 kernel: [149077.229203] ehci_hcd
2012-01-01 11:41:37 kernel: [149077.229209] ehci_hcd
2012-01-02 11:41:37 kernel: [149077.229223] ehci_hcd
2012-01-03 11:41:37 kernel: [149077.229227] ehci_hcd
2012-01-04 11:41:37 kernel: [149077.229268] ata_piix
2012-01-05 11:41:37 kernel: [149077.229277] ata_piix
2012-01-06 11:41:37 kernel: [149077.229281] ata_piix
2012-01-07 11:41:37 kernel: [149077.229284] ata_piix
2012-01-08 11:41:37 kernel: [149077.229288] ata_piix
2012-01-09 11:41:37 kernel: [149077.229292] ata_piix
2012-01-01 11:41:37 kernel: [149077.229297] ata_piix
2012-01-02 11:41:37 kernel: [149077.229309] pci
2012-01-03 11:41:37 kernel: [149077.229322] pci
2012-01-04 11:41:37 kernel: [149077.229327] pci
2012-01-05 11:41:37 kernel: [149077.229347] fglrx_pci
2012-01-06 11:41:37 kernel: [149077.229352] fglrx_pci
2012-01-07 11:41:37 kernel: [149077.229358] fglrx_pci
2012-01-08 11:41:37 kernel: [149077.229363] fglrx_pci
2012-01-09 11:41:37 kernel: [149077.229367] fglrx_pci
2012-01-01 11:41:37 kernel: [149077.229370] fglrx_pci
2012-01-02 11:41:37 kernel: [149077.229374] fglrx_pci
2012-01-03 11:41:37 kernel: [149077.229410] snd_hda_intel
2012-01-04 11:41:37 kernel: [149077.229423] snd_hda_intel
2012-01-05 11:41:37 kernel: [149077.229426] snd_hda_intel
2012-01-06 11:41:37 kernel: [149077.229431] snd_hda_intel
2012-01-07 11:41:37 kernel: [149077.229519] tg3
2012-01-08 11:41:37 kernel: [149077.229544] tg3
2012-01-09 11:41:37 kernel: [149077.229552] tg3
2012-01-01 11:41:37 kernel: [149077.229558] tg3
2012-01-02 11:41:37 kernel: [149077.229566] tg3
2012-01-03 11:41:37 kernel: [149077.229659] pci
2012-01-04 11:41:37 kernel: [149077.229698] pci
2012-01-05 11:41:37 kernel: [149077.229707] pci
2012-01-06 11:41:37 kernel: [149077.229719] pci
2012-01-07 11:41:37 kernel: [149077.229788] firewire_ohci
2012-01-08 11:41:37 kernel: [149077.229820] firewire_ohci
2012-01-09 11:41:37 kernel: [149077.229827] firewire_ohci
2012-01-01 11:41:37 kernel: [149077.229916] PM:
2012-01-02 11:41:37 kernel: [149077.229991] uhci_hcd
2012-01-03 11:41:37 kernel: [149077.229999] uhci_hcd
2012-01-04 11:41:37 kernel: [149077.230025] ehci_hcd
2012-01-05 11:41:37 kernel: [149077.230027] usb
2012-01-06 11:41:37 kernel: [149077.230033] mei
2012-01-07 11:41:37 kernel: [149077.230035] ehci_hcd
2012-01-08 11:41:37 kernel: [149077.230043] snd_hda_intel
2012-01-09 11:41:37 kernel: [149077.230049] snd_hda_intel
2012-01-01 11:41:37 kernel: [149077.230072] uhci_hcd
2012-01-02 11:41:37 kernel: [149077.230075] ehci_hcd
2012-01-03 11:41:37 kernel: [149077.230080] pciehp
2012-01-04 11:41:37 kernel: [149077.230087] ata_piix
2012-01-05 11:41:37 kernel: [149077.230090] uhci_hcd
2012-01-06 11:41:37 kernel: [149077.230092] ehci_hcd
2012-01-07 11:41:37 kernel: [149077.230097] ata_piix
2012-01-08 11:41:37 kernel: [149077.230121] snd_hda_intel
2012-01-09 11:41:37 kernel: [149077.230140] usb
2012-01-01 11:41:37 kernel: [149077.230143] snd_hda_intel
2012-01-02 11:41:37 kernel: [149077.230175] snd_hda_intel
2012-01-03 11:41:37 kernel: [149077.230230] fglrx_pci
2012-01-04 11:41:37 kernel: [149077.230268] snd_hda_intel
2012-01-05 11:41:37 kernel: [149077.233469] sd
2012-01-06 11:41:37 kernel: [149077.235355] [fglrx]
2012-01-07 11:41:37 kernel: [149077.235534] [fglrx]
2012-01-08 11:41:37 kernel: [149077.280813] [fglrx]
2012-01-09 11:41:37 kernel: [149077.280889] [fglrx]
2012-01-01 11:41:37 kernel: [149077.284586] firewire_ohci
2012-01-02 11:41:37 kernel: [149077.284829] firewire_core:
2012-01-03 11:41:37 kernel: [149077.348453] PM:
2012-01-04 11:41:37 kernel: [149077.348457] PM:
2012-01-05 11:41:37 kernel: [149077.348460] PM:
2012-01-06 11:41:37 kernel: [149077.348464] PM:
2012-01-07 11:41:37 kernel: [149077.348474] PM:
2012-01-08 11:41:37 kernel: [149077.348477] PM:
2012-01-09 11:41:37 kernel: [149077.353290] PM:
2012-01-01 11:41:37 kernel: [149077.353293] PM:
2012-01-02 11:41:37 kernel: [149077.353307] PM:
2012-01-03 11:41:37 kernel: [149077.353310] PM:
2012-01-04 11:41:37 kernel: [149077.353313] PM:
2012-01-05 11:41:37 kernel: [149077.353316] PM:
2012-01-06 11:41:37 kernel: [149077.353319] PM:
2012-01-07 11:41:37 kernel: [149077.353321] PM:
2012-01-08 11:41:37 kernel: [149077.353324] PM:
2012-01-09 11:41:37 kernel: [149077.353327] PM:
2012-01-01 11:41:37 kernel: [149077.353646] PM:
2012-01-02 11:41:37 kernel: [149077.353650] PM:
2012-01-03 11:41:37 kernel: [149077.353686] PM:
2012-01-04 11:41:37 kernel: [149077.370456] PM:
2012-01-05 11:41:37 kernel: [149077.401047] PM:
2012-01-06 11:41:37 kernel: [149077.401052] PM:
2012-01-07 11:41:37 kernel: [149077.401056] PM:
2012-01-08 11:41:37 kernel: [149077.401059] PM:
2012-01-09 11:41:37 kernel: [149077.401062] PM:
2012-01-01 11:41:37 kernel: [149077.401067] PM:
2012-01-02 11:41:37 kernel: [149077.401069] PM:
2012-01-03 11:41:37 kernel: [149077.401078] PM:
2012-01-04 11:41:37 kernel: [149077.401084] PM:
2012-01-05 11:41:37 kernel: [149077.401087] PM:
2012-01-06 11:41:37 kernel: [149077.401091] PM:
2012-01-07 11:41:37 kernel: [149077.401094] PM:
2012-01-08 11:41:37 kernel: [149077.784066] firewire_core:
2012-01-09 11:41:37 kernel: [149078.575242] ata1.01:
2012-01-01 11:41:37 kernel: [149078.575356] ata2.01:
2012-01-02 11:41:37 kernel: [149078.731176] ata2.00:
2012-01-03 11:41:37 kernel: [149078.731190] ata2.01:
2012-01-04 11:41:37 kernel: [149078.731201] ata2.01:
2012-01-05 11:41:37 kernel: [149078.739345] ata2.00:
2012-01-06 11:41:37 kernel: [149078.755319] ata2.00:
2012-01-07 11:41:37 kernel: [149079.010899] ata1.00:
2012-01-08 11:41:37 kernel: [149079.010911] ata1.01:
2012-01-09 11:41:37 kernel: [149079.019081] ata1.00:
2012-01-01 11:41:37 kernel: [149079.035295] ata1.00:
2012-01-02 11:41:37 kernel: [149079.060709] PM:
2012-01-03 11:41:37 kernel: [149079.060745] PM:
2012-01-04 11:41:37 kernel: [149079.060749] PM:
2012-01-05 11:41:37 kernel: [149079.061816] PM:
2012-01-06 11:41:37 kernel: [149079.061870] PM:
2012-01-07 11:41:37 kernel: [149079.061899] PM:
2012-01-08 11:41:37 kernel: [149079.061900] Restarting
2012-01-09 11:41:37 anacron[17778]: Anacron 2.3
2012-01-01 11:41:37 anacron[17778]: Normal exit
2012-01-02 11:41:37 kernel: [149079.280801] bcma-pci-bridge
2012-01-03 11:41:37 kernel: [149079.280815] bcma-pci-bridge
2012-01-04 11:41:37 kernel: [149079.280867] bcma:
2012-01-05 11:41:37 kernel: [149079.280892] bcma:
2012-01-06 11:41:37 kernel: [149079.280948] bcma:
2012-01-07 11:41:37 kernel: [149079.281076] bcma:
2012-01-08 11:41:37 kernel: [149079.354368] bcma:
2012-01-09 11:41:37 kernel: [149079.357149] cfg80211:
2012-01-01 11:41:37 kernel: [149079.362622] cfg80211:
2012-01-02 11:41:37 kernel: [149079.362625] cfg80211:
2012-01-03 11:41:37 kernel: [149079.362627] cfg80211:
2012-01-04 11:41:37 kernel: [149079.362629] cfg80211:
2012-01-05 11:41:37 kernel: [149079.362630] cfg80211:
2012-01-06 11:41:37 kernel: [149079.362632] cfg80211:
2012-01-07 11:41:37 kernel: [149079.362633] cfg80211:
2012-01-08 11:41:37 kernel: [149079.365442] b43-phy0:
2012-01-09 11:41:37 kernel: [149079.366080] cfg80211:
2012-01-01 11:41:37 kernel: [149079.366083] cfg80211:
2012-01-02 11:41:37 kernel: [149079.366084] cfg80211:
2012-01-03 11:41:37 kernel: [149079.366086] cfg80211:
2012-01-04 11:41:37 kernel: [149079.366087] cfg80211:
2012-01-05 11:41:37 kernel: [149079.366089] cfg80211:
2012-01-06 11:41:37 kernel: [149079.366091] cfg80211:
2012-01-07 11:41:37 kernel: [149079.366092] cfg80211:
2012-01-08 11:41:37 kernel: [149079.366094] cfg80211:
2012-01-09 11:41:37 kernel: [149079.366096] cfg80211:
2012-01-01 11:41:37 kernel: [149079.366097] cfg80211:
2012-01-02 11:41:37 kernel: [149079.366099] cfg80211:
2012-01-03 11:41:37 kernel: [149079.366100] cfg80211:
2012-01-04 11:41:37 kernel: [149079.366102] cfg80211:
2012-01-05 11:41:37 kernel: [149079.366103] cfg80211:
2012-01-06 11:41:37 kernel: [149079.366105] cfg80211:
2012-01-07 11:41:37 kernel: [149079.366107] cfg80211:
2012-01-08 11:41:37 kernel: [149079.366108] cfg80211:
2012-01-09 11:41:37 kernel: [149079.366110] cfg80211:
2012-01-01 11:41:37 kernel: [149079.366111] cfg80211:
2012-01-02 11:41:37 kernel: [149079.366113] cfg80211:
2012-01-03 11:41:37 kernel: [149079.366115] cfg80211:
2012-01-04 11:41:37 kernel: [149079.366116] cfg80211:
2012-01-05 11:41:37 kernel: [149079.366118] cfg80211:
2012-01-06 11:41:37 kernel: [149079.366119] cfg80211:
2012-01-07 11:41:37 kernel: [149079.366121] cfg80211:
2012-01-08 11:41:37 kernel: [149079.366122] cfg80211:
2012-01-09 11:41:37 kernel: [149079.366124] cfg80211:
2012-01-01 11:41:37 kernel: [149079.366216] ieee80211
2012-01-02 11:41:37 kernel: [149079.366616] Broadcom
2012-01-03 11:41:37 NetworkManager[1127]: <info> found
2012-01-04 11:41:37 NetworkManager[1127]: <info> WiFi
2012-01-05 11:41:37 NetworkManager[1127]: SCPlugin-Ifupdown: devices
2012-01-06 11:41:37 NetworkManager[1127]: SCPlugin-Ifupdown: device
2012-01-07 11:41:37 NetworkManager[1127]: <info> (wlan0):
2012-01-08 11:41:37 NetworkManager[1127]: <warn> (wlan0):
2012-01-09 11:41:37 NetworkManager[1127]: <info> (wlan0):
2012-01-01 11:41:37 NetworkManager[1127]: <info> (wlan0):
2012-01-02 11:41:37 pulseaudio[2813]: [pulseaudio] module-console-kit.c:
2012-01-03 11:41:38 NetworkManager[1127]: <info> wake
2012-01-04 11:41:38 NetworkManager[1127]: <info> waking
2012-01-05 11:41:38 NetworkManager[1127]: <info> (eth0):
2012-01-06 11:41:38 NetworkManager[1127]: <info> (eth0):
2012-01-07 11:41:38 NetworkManager[1127]: <info> (eth0):
2012-01-08 11:41:38 kernel: [149079.666712] tg3
2012-01-09 11:41:38 kernel: [149079.666718] tg3
2012-01-01 11:41:38 kernel: [149079.666723] tg3
2012-01-02 11:41:38 kernel: [149079.666727] tg3
2012-01-03 11:41:38 kernel: [149079.666731] tg3
2012-01-04 11:41:39 NetworkManager[1127]: <info> (eth0):
2012-01-05 11:41:39 NetworkManager[1127]: <info> (eth0):
2012-01-06 11:41:39 NetworkManager[1127]: <info> Unmanaged
2012-01-07 11:41:39 NetworkManager[1127]: <info> Unmanaged
2012-01-08 11:41:39 NetworkManager[1127]: <info> (wlan0):
2012-01-09 11:41:39 kernel: [149080.696203] ADDRCONF(NETDEV_UP):
2012-01-01 11:41:39 kernel: [149080.696984] ADDRCONF(NETDEV_UP):
2012-01-02 11:41:39 NetworkManager[1127]: <info> (wlan0):
2012-01-03 11:41:39 NetworkManager[1127]: <info> (wlan0):
2012-01-04 11:41:39 NetworkManager[1127]: <info> (wlan0):
2012-01-05 11:41:51 kernel: [149093.289101] usb
2012-01-06 11:41:51 mtp-probe: checking bus
2012-01-07 11:41:51 mtp-probe: bus: 2,
2012-01-08 11:41:51 kernel: [149093.412961] scsi18
2012-01-09 11:41:51 kernel: [149093.413315] scsi19
2012-01-01 11:41:52 kernel: [149094.415839] scsi
2012-01-02 11:41:52 kernel: [149094.418988] scsi
2012-01-03 11:41:52 kernel: [149094.427538] sr1:
2012-01-04 11:41:52 kernel: [149094.427938] sr
2012-01-05 11:41:52 kernel: [149094.428204] sr
2012-01-06 11:41:52 kernel: [149094.429028] sd
2012-01-07 11:41:52 kernel: [149094.439790] sd
2012-01-08 11:41:53 usb_modeswitch: switching device
2012-01-09 11:41:53 kernel: [149094.623497] usb
2012-01-01 11:41:56 gnome-screensaver-dialog: pam_ecryptfs: pam_sm_authenticate:
2012-01-02 11:41:59 kernel: [149100.961756] usb
2012-01-03 11:41:59 mtp-probe: checking bus
2012-01-04 11:41:59 kernel: [149101.085787] option
2012-01-05 11:41:59 kernel: [149101.086042] usb
2012-01-06 11:41:59 kernel: [149101.086506] option
2012-01-07 11:41:59 kernel: [149101.086813] usb
2012-01-08 11:41:59 kernel: [149101.087252] option
2012-01-09 11:41:59 kernel: [149101.087510] usb
2012-01-01 11:41:59 kernel: [149101.088432] scsi23
2012-01-02 11:41:59 kernel: [149101.090303] scsi24
2012-01-03 11:41:59 mtp-probe: bus: 2,
2012-01-04 11:41:59 modem-manager[1113]: <info> (ttyUSB0)
2012-01-05 11:42:00 kernel: [149102.088636] scsi
2012-01-06 11:42:00 kernel: [149102.094152] scsi
2012-01-07 11:42:00 usb_modeswitch: switched to
2012-01-08 11:42:00 kernel: [149102.103624] sr1:
2012-01-09 11:42:00 kernel: [149102.103784] sr
2012-01-01 11:42:00 kernel: [149102.103864] sr
2012-01-02 11:42:00 kernel: [149102.104437] sd
2012-01-03 11:42:00 kernel: [149102.114620] sd
2012-01-04 11:42:01 usb_modeswitch[18278]: usb_modeswitch: switched
2012-01-05 11:42:01 modem-manager[1113]: <info> (ttyUSB0)
2012-01-06 11:42:01 modem-manager[1113]: <info> (ttyUSB0)
2012-01-07 11:42:01 modem-manager[1113]: <info> (ttyUSB0)
2012-01-08 11:42:01 modem-manager[1113]: <info> (Huawei):
2012-01-09 11:42:02 modem-manager[1113]: <info> (ttyUSB1)
2012-01-01 11:42:02 modem-manager[1113]: <info> (ttyUSB2)
2012-01-02 11:42:06 modem-manager[1113]: <info> (ttyUSB2)
2012-01-03 11:42:06 modem-manager[1113]: <info> (ttyUSB2)
2012-01-04 11:42:06 modem-manager[1113]: <info> (Huawei):
2012-01-05 11:42:06 modem-manager[1113]: <info> (ttyUSB0)
2012-01-06 11:42:06 modem-manager[1113]: <info> (ttyUSB0)
2012-01-07 11:42:09 modem-manager[1113]: <info> (ttyUSB1)
2012-01-08 11:42:09 modem-manager[1113]: <info> (ttyUSB1)
2012-01-09 11:42:09 modem-manager[1113]: <info> (Huawei):
2012-01-01 11:42:09 NetworkManager[1127]: <warn> (ttyUSB0):
2012-01-02 11:42:09 NetworkManager[1127]: <info> WWAN
2012-01-03 11:42:09 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-04 11:42:09 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-05 11:42:09 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-06 11:42:09 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-07 11:42:09 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-08 11:42:09 NetworkManager[1127]: nm_system_iface_flush_routes: assertion
2012-01-09 11:42:09 NetworkManager[1127]: nm_system_iface_flush_addresses: assertion
2012-01-01 11:42:09 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-02 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-03 11:42:13 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-04 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-05 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-06 11:42:13 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-07 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-08 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-09 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-01 11:42:13 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-02 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-03 11:42:13 modem-manager[1113]: <info> (ttyUSB0)
2012-01-04 11:42:13 modem-manager[1113]: <info> Modem
2012-01-05 11:42:13 modem-manager[1113]: <info> (ttyUSB2)
2012-01-06 11:42:13 modem-manager[1113]: <info> (ttyUSB0):
2012-01-07 11:42:13 modem-manager[1113]: <info> Modem
2012-01-08 11:42:13 NetworkManager[1127]: <info> WWAN
2012-01-09 11:42:13 modem-manager[1113]: <info> Modem
2012-01-01 11:42:13 modem-manager[1113]: <info> Modem
2012-01-02 11:42:13 modem-manager[1113]: <info> Modem
2012-01-03 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-04 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-05 11:42:13 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-06 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-07 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-08 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-09 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-01 11:42:13 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-02 11:42:13 NetworkManager[1127]: <info> starting
2012-01-03 11:42:13 NetworkManager[1127]: <info> pppd
2012-01-04 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-05 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-06 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-07 11:42:13 NetworkManager[1127]: <info> Activation
2012-01-08 11:42:13 pppd[18397]: Plugin /usr/lib/pppd/2.4.5/nm-pppd-plugin.so
2012-01-09 11:42:13 pppd[18397]: pppd 2.4.5
2012-01-01 11:42:13 pppd[18397]: Using interface
2012-01-02 11:42:13 pppd[18397]: Connect: ppp0
2012-01-03 11:42:13 NetworkManager[1127]: SCPlugin-Ifupdown: devices
2012-01-04 11:42:13 NetworkManager[1127]: SCPlugin-Ifupdown: device
2012-01-05 11:42:13 pppd[18397]: PAP authentication
2012-01-06 11:42:16 pppd[18397]: Could not
2012-01-07 11:42:16 pppd[18397]: local IP
2012-01-08 11:42:16 pppd[18397]: remote IP
2012-01-09 11:42:16 pppd[18397]: primary DNS
2012-01-01 11:42:16 pppd[18397]: secondary DNS
2012-01-02 11:42:16 NetworkManager[1127]: <info> PPP
2012-01-03 11:42:16 NetworkManager[1127]: <info> Activation
2012-01-04 11:42:16 NetworkManager[1127]: <info> Activation
2012-01-05 11:42:17 dnsmasq[17021]: exiting on
2012-01-06 11:42:17 NetworkManager[1127]: <info> DNS:
2012-01-07 11:42:17 NetworkManager[1127]: <info> (ppp0):
2012-01-08 11:42:17 dnsmasq[18416]: started, version
2012-01-09 11:42:17 dnsmasq[18416]: compile time
2012-01-01 11:42:17 dnsmasq[18416]: using nameserver
2012-01-02 11:42:17 dnsmasq[18416]: using nameserver
2012-01-03 11:42:17 NetworkManager[1127]: <info> (ttyUSB0):
2012-01-04 11:42:17 NetworkManager[1127]: <info> Policy
2012-01-05 11:42:17 NetworkManager[1127]: <info> Activation
2012-01-06 11:42:17 NetworkManager[1127]: <info> Activation
2012-01-07 11:42:17 dbus[1092]: [system] Activating
2012-01-08 11:42:17 dbus[1092]: [system] Successfully
2012-01-09 11:42:28 ntpdate[18478]: step time
================================================
FILE: tests/stdin.03.txt
================================================
/var/log
/var/log/ConsoleKit
/var/log/ConsoleKit/history.1
/var/log/ConsoleKit/history
/var/log/apt
/var/log/apt/term.log
/var/log/apt/term.log.1.gz
/var/log/apt/history.log
/var/log/apt/history.log.1.gz
/var/log/cups
/var/log/cups/error_log
/var/log/cups/page_log
/var/log/cups/access_log.7.gz
/var/log/cups/access_log.6.gz
/var/log/cups/access_log.5.gz
/var/log/cups/access_log.4.gz
/var/log/cups/access_log.3.gz
/var/log/cups/access_log.2.gz
/var/log/cups/access_log
/var/log/cups/access_log.1.gz
/var/log/dist-upgrade
/var/log/fsck
/var/log/fsck/checkfs
/var/log/fsck/checkroot
/var/log/hp
/var/log/lightdm
/var/log/lightdm/lightdm.log
/var/log/lightdm/x-0.log
/var/log/lightdm/x-0-greeter.log.old
/var/log/lightdm/x-1.log
/var/log/lightdm/x-1-greeter.log
/var/log/lightdm/x-0-greeter.log
/var/log/samba
/var/log/speech-dispatcher
/var/log/unattended-upgrades
/var/log/upstart
/var/log/upstart/rsyslog.log.1.gz
/var/log/upstart/ureadahead-other.log.4.gz
/var/log/upstart/network-interface-ppp0.log.6.gz
/var/log/upstart/isc-dhcp-server6.log.3.gz
/var/log/upstart/modemmanager.log.2.gz
/var/log/upstart/procps-virtual-filesystems.log.4.gz
/var/log/upstart/procps-virtual-filesystems.log.3.gz
/var/log/upstart/resolvconf.log.2.gz
/var/log/upstart/mysql.log.5.gz
/var/log/upstart/mysql.log.3.gz
/var/log/upstart/mysql.log.2.gz
/var/log/upstart/cups.log.4.gz
/var/log/upstart/ureadahead-other.log.5.gz
/var/log/upstart/container-detect.log.6.gz
/var/log/upstart/cups.log.1.gz
/var/log/upstart/alsa-restore.log.1.gz
/var/log/upstart/rsyslog.log.3.gz
/var/log/upstart/cryptdisks-enable.log.3.gz
/var/log/upstart/hybrid-gfx.log.2.gz
/var/log/upstart/mysql.log.1.gz
/var/log/upstart/isc-dhcp-server6.log.4.gz
/var/log/upstart/procps-static-network-up.log.4.gz
/var/log/upstart/console-setup.log.3.gz
/var/log/upstart/hybrid-gfx.log.6.gz
/var/log/upstart/rsyslog.log.2.gz
/var/log/upstart/resolvconf.log.1.gz
/var/log/upstart/ureadahead-other.log.3.gz
/var/log/upstart/procps-static-network-up.log.6.gz
/var/log/upstart/rsyslog.log.4.gz
/var/log/upstart/container-detect.log.7.gz
/var/log/upstart/network-interface-wlan0.log.7.gz
/var/log/upstart/container-detect.log.5.gz
/var/log/upstart/container-detect.log.2.gz
/var/log/upstart/isc-dhcp-server6.log.2.gz
/var/log/upstart/cups.log.5.gz
/var/log/upstart/cryptdisks-enable.log.6.gz
/var/log/upstart/hybrid-gfx.log.5.gz
/var/log/upstart/hybrid-gfx.log.4.gz
/var/log/upstart/hybrid-gfx.log.3.gz
/var/log/upstart/isc-dhcp-server6.log.5.gz
/var/log/upstart/network-interface-ppp0.log.4.gz
/var/log/upstart/network-interface-ppp0.log.3.gz
/var/log/upstart/ureadahead.log.7.gz
/var/log/upstart/network-interface-wlan0.log.6.gz
/var/log/upstart/isc-dhcp-server.log.1.gz
/var/log/upstart/container-detect.log.4.gz
/var/log/upstart/container-detect.log.3.gz
/var/log/upstart/network-interface-wlan0.log.5.gz
/var/log/upstart/rsyslog.log.7.gz
/var/log/upstart/modemmanager.log.7.gz
/var/log/upstart/modemmanager.log.6.gz
/var/log/upstart/console-setup.log.6.gz
/var/log/upstart/failsafe-x.log.1.gz
/var/log/upstart/procps-static-network-up.log.3.gz
/var/log/upstart/procps-virtual-filesystems.log.7.gz
/var/log/upstart/rsyslog.log.6.gz
/var/log/upstart/ureadahead-other.log.2.gz
/var/log/upstart/mysql.log.6.gz
/var/log/upstart/mysql.log.4.gz
/var/log/upstart/network-interface-wlan0.log.4.gz
/var/log/upstart/procps-static-network-up.log.5.gz
/var/log/upstart/procps-virtual-filesystems.log.2.gz
/var/log/upstart/ureadahead.log.6.gz
/var/log/upstart/ureadahead.log.3.gz
/var/log/upstart/ureadahead.log.2.gz
/var/log/upstart/ureadahead.log.1.gz
/var/log/upstart/modemmanager.log.5.gz
/var/log/upstart/ureadahead.log.4.gz
/var/log/upstart/modemmanager.log
/var/log/upstart/network-interface-wlan0.log.3.gz
/var/log/upstart/network-interface-wlan0.log.2.gz
/var/log/upstart/modemmanager.log.3.gz
/var/log/upstart/console-setup.log.5.gz
/var/log/upstart/procps-static-network-up.log.7.gz
/var/log/upstart/console-setup.log.2.gz
/var/log/upstart/cryptdisks-enable.log.5.gz
/var/log/upstart/network-interface-tun0.log.5.gz
/var/log/upstart/network-interface-ppp0.log.2.gz
/var/log/upstart/network-interface-tun0.log.3.gz
/var/log/upstart/modemmanager.log.4.gz
/var/log/upstart/cups.log.6.gz
/var/log/upstart/procps-static-network-up.log.2.gz
/var/log/upstart/ureadahead.log.5.gz
/var/log/upstart/mysql.log.7.gz
/var/log/upstart/procps-virtual-filesystems.log.6.gz
/var/log/upstart/procps-virtual-filesystems.log.5.gz
/var/log/upstart/rsyslog.log.5.gz
/var/log/upstart/cryptdisks-enable.log.7.gz
/var/log/upstart/cups.log.3.gz
/var/log/upstart/cups.log.2.gz
/var/log/upstart/network-interface-tun0.log.4.gz
/var/log/upstart/network-interface-tun0.log.1.gz
/var/log/upstart/network-interface-ppp1.log.1.gz
/var/log/upstart/network-interface-tun0.log.2.gz
/var/log/upstart/console-setup.log.4.gz
/var/log/upstart/cryptdisks-enable.log.4.gz
/var/log/upstart/cryptdisks-enable.log.2.gz
/var/log/upstart/hybrid-gfx.log.7.gz
/var/log/upstart/isc-dhcp-server6.log.6.gz
/var/log/upstart/isc-dhcp-server6.log.1.gz
/var/log/upstart/modemmanager.log.1.gz
/var/log/upstart/network-interface-lo.log.2.gz
/var/log/upstart/network-interface-lo.log.1.gz
/var/log/upstart/network-interface-ppp0.log.7.gz
/var/log/upstart/network-interface-ppp0.log.5.gz
/var/log/upstart/network-interface-tun0.log.7.gz
/var/log/upstart/procps-static-network-up.log.1.gz
/var/log/upstart/ureadahead-other.log.6.gz
/var/log/upstart/ureadahead-other.log.1.gz
/var/log/upstart/network-interface-ppp0.log
/var/log/upstart/network-interface-wlan0.log
/var/log/upstart/console-setup.log.7.gz
/var/log/upstart/console-setup.log.1.gz
/var/log/upstart/container-detect.log.1.gz
/var/log/upstart/hybrid-gfx.log.1.gz
/var/log/upstart/network-interface-ppp0.log.1.gz
/var/log/upstart/procps-virtual-filesystems.log.1.gz
/var/log/upstart/network-interface-tun1.log.1.gz
/var/log/upstart/cryptdisks-enable.log.1.gz
/var/log/upstart/isc-dhcp-server6.log.7.gz
/var/log/upstart/network-interface-tun0.log.6.gz
/var/log/upstart/network-interface-wlan0.log.1.gz
/var/log/boot
/var/log/bootstrap.log
/var/log/dmesg
/var/log/faillog
/var/log/fontconfig.log
/var/log/lastlog
/var/log/installer
/var/log/installer/syslog
/var/log/installer/partman
/var/log/installer/version
/var/log/installer/casper.log
/var/log/installer/debug
/var/log/installer/media-info
/var/log/installer/initial-status.gz
/var/log/ufw.log
/var/log/alternatives.log.1
/var/log/mail.log
/var/log/mail.err
/var/log/news
/var/log/news/news.crit
/var/log/news/news.err
/var/log/news/news.notice
/var/log/jockey.log.7.gz
/var/log/pm-powersave.log
/var/log/jockey.log
/var/log/aptitude
/var/log/gdm
/var/log/mysql
/var/log/mysql.err
/var/log/apache2
/var/log/apache2/other_vhosts_access.log
/var/log/apache2/access.log.1
/var/log/apache2/access.log
/var/log/apache2/error.log.2.gz
/var/log/apache2/error.log.1
/var/log/apache2/error.log
/var/log/corosync
/var/log/corosync/.empty
/var/log/pycentral.log
/var/log/dpkg.log.1
/var/log/alternatives.log
/var/log/Xorg.0.log.old
/var/log/pm-suspend.log
/var/log/pm-powersave.log.1
/var/log/Xorg.1.log
/var/log/pm-suspend.log.1
/var/log/auth.log.3.gz
/var/log/kern.log.1
/var/log/kern.log
/var/log/auth.log.1
/var/log/udev
/var/log/apport.log.7.gz
/var/log/apport.log
/var/log/mysql.log.4.gz
/var/log/Xorg.failsafe.log.old
/var/log/Xorg.failsafe.log
/var/log/apport.log.3.gz
/var/log/dmesg.4.gz
/var/log/dmesg.3.gz
/var/log/dmesg.2.gz
/var/log/apport.log.6.gz
/var/log/wtmp.1
/var/log/boot.log
/var/log/wtmp
/var/log/btmp
/var/log/aptitude.1.gz
/var/log/auth.log
/var/log/Xorg.0.log
/var/log/kern.log.2.gz
/var/log/jockey.log.1
/var/log/btmp.1
/var/log/apport.log.4.gz
/var/log/jockey.log.8.gz
/var/log/jockey.log.5.gz
/var/log/auth.log.4.gz
/var/log/apport.log.5.gz
/var/log/kern.log.4.gz
/var/log/kern.log.3.gz
/var/log/jockey.log.9.gz
/var/log/l2tpipsecvpn.pipe
/var/log/jockey.log.6.gz
/var/log/apport.log.2.gz
/var/log/apport.log.1
/var/log/jockey.log.10.gz
/var/log/dpkg.log
/var/log/mysql.log.2.gz
/var/log/mysql.log
/var/log/mysql.log.1.gz
/var/log/syslog.5.gz
/var/log/syslog.4.gz
/var/log/syslog.7.gz
/var/log/syslog.6.gz
/var/log/syslog.2.gz
/var/log/syslog.1
/var/log/syslog
/var/log/auth.log.2.gz
/var/log/jockey.log.4.gz
/var/log/jockey.log.3.gz
/var/log/jockey.log.2.gz
/var/log/syslog.3.gz
/var/log/mysql.log.7.gz
/var/log/mysql.log.5.gz
/var/log/apparmor
/var/log/dmesg.1.gz
/var/log/dmesg.0
/var/log/mysql.log.3.gz
/var/log/mysql.log.6.gz
================================================
FILE: tests/stdin.04.txt
================================================
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S 15:30 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 15:30 0:01 \_ [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 15:30 0:00 \_ [kworker/u:0]
root 6 0.0 0.0 0 0 ? S 15:30 0:00 \_ [migration/0]
root 7 0.0 0.0 0 0 ? S 15:30 0:00 \_ [watchdog/0]
root 8 0.0 0.0 0 0 ? S 15:30 0:00 \_ [migration/1]
root 9 0.0 0.0 0 0 ? S 15:30 0:00 \_ [kworker/1:0]
root 10 0.0 0.0 0 0 ? S 15:30 0:00 \_ [ksoftirqd/1]
root 12 0.0 0.0 0 0 ? S 15:31 0:00 \_ [watchdog/1]
root 13 0.0 0.0 0 0 ? S 15:31 0:00 \_ [migration/2]
root 15 0.0 0.0 0 0 ? S 15:31 0:00 \_ [ksoftirqd/2]
root 16 0.0 0.0 0 0 ? S 15:31 0:00 \_ [watchdog/2]
root 17 0.0 0.0 0 0 ? S 15:31 0:00 \_ [migration/3]
root 19 0.0 0.0 0 0 ? S 15:31 0:00 \_ [ksoftirqd/3]
root 20 0.0 0.0 0 0 ? S 15:31 0:00 \_ [watchdog/3]
root 21 0.0 0.0 0 0 ? S 15:31 0:00 \_ [migration/4]
root 23 0.0 0.0 0 0 ? S 15:31 0:00 \_ [ksoftirqd/4]
root 24 0.0 0.0 0 0 ? S 15:31 0:00 \_ [watchdog/4]
root 25 0.0 0.0 0 0 ? S 15:31 0:00 \_ [migration/5]
root 27 0.0 0.0 0 0 ? S 15:31 0:00 \_ [ksoftirqd/5]
root 28 0.0 0.0 0 0 ? S 15:32 0:00 \_ [watchdog/5]
root 29 0.0 0.0 0 0 ? S 15:32 0:00 \_ [migration/6]
root 31 0.0 0.0 0 0 ? S 15:32 0:00 \_ [ksoftirqd/6]
root 32 0.0 0.0 0 0 ? S 15:32 0:00 \_ [watchdog/6]
root 33 0.0 0.0 0 0 ? S 15:32 0:00 \_ [migration/7]
root 35 0.0 0.0 0 0 ? S 15:32 0:00 \_ [ksoftirqd/7]
root 36 0.0 0.0 0 0 ? S 15:32 0:00 \_ [watchdog/7]
root 37 0.0 0.0 0 0 ? S< 15:32 0:00 \_ [cpuset]
root 38 0.0 0.0 0 0 ? S< 15:32 0:00 \_ [khelper]
root 39 0.0 0.0 0 0 ? S 15:32 0:00 \_ [kdevtmpfs]
root 40 0.0 0.0 0 0 ? S< 15:32 0:00 \_ [netns]
root 42 0.0 0.0 0 0 ? S 15:32 0:00 \_ [sync_supers]
root 43 0.0 0.0 0 0 ? S 15:32 0:00 \_ [bdi-default]
root 44 0.0 0.0 0 0 ? S< 15:33 0:00 \_ [kintegrityd]
root 45 0.0 0.0 0 0 ? S< 15:33 0:00 \_ [kblockd]
root 46 0.0 0.0 0 0 ? S< 15:33 0:00 \_ [ata_sff]
root 47 0.0 0.0 0 0 ? S 15:33 0:00 \_ [khubd]
root 48 0.0 0.0 0 0 ? S< 15:33 0:00 \_ [md]
root 51 0.0 0.0 0 0 ? S 15:33 0:00 \_ [khungtaskd]
root 52 0.0 0.0 0 0 ? S 15:33 0:00 \_ [kswapd0]
root 53 0.0 0.0 0 0 ? SN 15:33 0:00 \_ [ksmd]
root 54 0.0 0.0 0 0 ? SN 15:33 0:00 \_ [khugepaged]
root 55 0.0 0.0 0 0 ? S 15:33 0:00 \_ [fsnotify_mark]
root 56 0.0 0.0 0 0 ? S 15:33 0:00 \_ [ecryptfs-kthrea]
root 57 0.0 0.0 0 0 ? S< 15:33 0:00 \_ [crypto]
root 65 0.0 0.0 0 0 ? S< 15:33 0:00 \_ [kthrotld]
root 67 0.0 0.0 0 0 ? S 15:33 0:00 \_ [scsi_eh_0]
root 68 0.0 0.0 0 0 ? S 15:33 0:00 \_ [scsi_eh_1]
root 69 0.0 0.0 0 0 ? S 15:34 0:01 \_ [kworker/2:1]
root 70 0.0 0.0 0 0 ? S 15:34 0:00 \_ [kworker/u:3]
root 89 0.0 0.0 0 0 ? S< 15:34 0:00 \_ [devfreq_wq]
root 90 0.0 0.0 0 0 ? S 15:34 0:00 \_ [kworker/7:1]
root 91 0.0 0.0 0 0 ? S 15:34 0:00 \_ [kworker/4:1]
root 92 0.0 0.0 0 0 ? S 15:34 0:05 \_ [kworker/1:1]
root 94 0.0 0.0 0 0 ? S 15:34 0:00 \_ [kworker/6:1]
root 97 0.0 0.0 0 0 ? S 15:35 0:00 \_ [kworker/5:1]
root 140 0.0 0.0 0 0 ? S 15:35 0:00 \_ [kworker/7:2]
root 231 0.0 0.0 0 0 ? S< 15:35 0:00 \_ [firewire]
root 300 0.0 0.0 0 0 ? S< 15:35 0:00 \_ [xfs_mru_cache]
root 301 0.0 0.0 0 0 ? S< 15:35 0:00 \_ [xfslogd]
root 302 0.0 0.0 0 0 ? S< 15:35 0:00 \_ [xfsdatad]
root 304 0.0 0.0 0 0 ? S< 15:35 0:00 \_ [xfsconvertd]
root 306 0.0 0.0 0 0 ? S 15:35 0:00 \_ [xfsbufd/sda3]
root 307 0.0 0.0 0 0 ? S 15:35 0:03 \_ [xfsaild/sda3]
root 703 0.0 0.0 0 0 ? S 15:35 0:00 \_ [irq/47-mei]
root 718 0.0 0.0 0 0 ? S< 15:35 0:00 \_ [applesmc-led]
root 722 0.0 0.0 0 0 ? S 15:35 0:00 \_ [kworker/5:2]
root 789 0.0 0.0 0 0 ? S< 15:35 0:00 \_ [cfg80211]
root 834 0.0 0.0 0 0 ? S< 15:35 0:00 \_ [hci0]
root 858 0.0 0.0 0 0 ? S< 15:35 0:00 \_ [hd-audio0]
root 862 0.0 0.0 0 0 ? S< 15:35 0:00 \_ [hd-audio1]
root 986 0.0 0.0 0 0 ? S< 15:36 0:00 \_ [kdmflush]
root 994 0.0 0.0 0 0 ? S< 15:36 0:00 \_ [kcryptd_io]
root 995 0.0 0.0 0 0 ? S< 15:36 0:00 \_ [kcryptd]
root 1177 0.0 0.0 0 0 ? S 15:36 0:00 \_ [flush-8:0]
root 1279 0.0 0.0 0 0 ? S< 15:36 0:00 \_ [krfcommd]
root 1867 0.0 0.0 0 0 ? S 15:36 0:00 \_ [firegl]
root 1868 0.0 0.0 0 0 ? S 15:36 0:00 \_ [firegl]
root 1869 0.0 0.0 0 0 ? S 15:36 0:00 \_ [firegl]
root 1983 0.0 0.0 0 0 ? S< 15:36 0:00 \_ [iprt]
root 2677 0.0 0.0 0 0 ? S 15:37 0:03 \_ [kworker/2:2]
root 2826 0.0 0.0 0 0 ? S 15:37 0:00 \_ [kworker/6:2]
root 2840 0.0 0.0 0 0 ? S 15:37 0:00 \_ [kworker/4:2]
root 2914 0.0 0.0 0 0 ? S 15:37 0:00 \_ [scsi_eh_7]
root 2915 0.0 0.0 0 0 ? S 15:37 0:01 \_ [usb-storage]
root 2916 0.0 0.0 0 0 ? S 15:37 0:00 \_ [scsi_eh_8]
root 2917 0.0 0.0 0 0 ? S 15:37 0:01 \_ [usb-storage]
root 3046 0.1 0.0 0 0 ? S 15:37 0:08 \_ [flush-ecryptfs-]
root 3769 0.0 0.0 0 0 ? S 15:41 0:05 \_ [kworker/3:0]
root 4812 0.0 0.0 0 0 ? S 17:31 0:01 \_ [kworker/0:2]
root 4915 0.1 0.0 0 0 ? S 17:39 0:01 \_ [kworker/0:3]
root 4940 0.0 0.0 0 0 ? S 17:43 0:00 \_ [kworker/3:2]
root 4958 0.1 0.0 0 0 ? S 17:47 0:00 \_ [kworker/0:1]
root 5108 0.0 0.0 0 0 ? S 17:49 0:00 \_ [kworker/3:1]
root 5160 0.0 0.0 0 0 ? S 17:51 0:00 \_ [scsi_eh_9]
root 5161 0.0 0.0 0 0 ? S 17:51 0:00 \_ [usb-storage]
root 5190 0.0 0.0 0 0 ? S 17:51 0:00 \_ [kworker/7:0]
root 5195 0.0 0.0 0 0 ? S 17:51 0:00 \_ [xfsbufd/sdc1]
root 5198 0.0 0.0 0 0 ? S 17:51 0:00 \_ [xfsaild/sdc1]
root 5221 0.0 0.0 0 0 ? S 17:51 0:00 \_ [flush-8:32]
root 1 0.0 0.0 3720 2148 ? Ss 15:35 0:01 /sbin/init
root 375 0.0 0.0 2816 612 ? S 15:36 0:00 upstart-udev-bridge --daemon
root 377 0.0 0.0 3504 1696 ? Ss 15:36 0:00 /sbin/udevd --daemon
root 5176 0.0 0.0 3500 1264 ? S 17:51 0:00 \_ /sbin/udevd --daemon
root 5177 0.0 0.0 3500 1220 ? S 17:51 0:00 \_ /sbin/udevd --daemon
root 890 0.0 0.0 2828 360 ? S 15:36 0:00 upstart-socket-bridge --daemon
root 1048 0.0 0.0 6664 2416 ? Ss 15:36 0:00 /usr/sbin/sshd -D
syslog 1109 0.0 0.0 31044 1372 ? Sl 15:36 0:00 rsyslogd -c5
102 1130 0.0 0.0 4372 2008 ? Ss 15:36 0:01 dbus-daemon --system --fork --activation=upstart
root 1150 0.0 0.0 4612 856 tty4 Ss+ 15:36 0:00 /sbin/getty -8 38400 tty4
root 1156 0.0 0.0 4612 844 tty5 Ss+ 15:36 0:00 /sbin/getty -8 38400 tty5
root 1173 0.0 0.0 4724 1832 ? Ss 15:36 0:00 /usr/sbin/bluetoothd
root 1201 0.0 0.0 4612 856 tty2 Ss+ 15:36 0:00 /sbin/getty -8 38400 tty2
root 1202 0.0 0.0 4612 852 tty3 Ss+ 15:36 0:00 /sbin/getty -8 38400 tty3
root 1205 0.0 0.0 4612 840 tty6 Ss+ 15:36 0:00 /sbin/getty -8 38400 tty6
root 1234 0.0 0.0 7204 3184 ? Ss 15:36 0:03 /usr/sbin/modem-manager
root 1239 0.0 0.0 2288 720 ? Ss 15:36 0:00 acpid -c /etc/acpi/events -s /var/run/acpid.socket
root 1243 0.0 0.0 34020 3124 ? Ssl 15:36 0:00 lightdm
root 1452 5.9 3.6 122592 296884 tty7 Ss+ 15:36 8:08 \_ /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch -background none
root 2572 0.0 0.0 18200 3616 ? Sl 15:36 0:00 \_ lightdm --session-child 12 19
reze 2886 0.0 0.1 49672 8440 ? Ssl 15:37 0:00 \_ gnome-session --session=gnome-classic
reze 2965 0.0 0.0 4060 208 ? Ss 15:37 0:00 \_ /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session gnome-session --session=gnome-classic
reze 3005 0.0 0.2 245988 17284 ? Sl 15:37 0:05 \_ /usr/lib/gnome-settings-daemon/gnome-settings-daemon
reze 3034 0.0 0.0 3692 780 ? S 15:37 0:05 | \_ syndaemon -i 2.0 -K -R -t
reze 3047 0.1 0.3 201020 29104 ? Sl 15:37 0:09 \_ gnome-panel
reze 3056 0.0 0.0 57992 7748 ? Sl 15:37 0:00 \_ /usr/lib/gnome-settings-daemon/gnome-fallback-mount-helper
reze 3064 0.0 0.1 152360 14100 ? Sl 15:37 0:04 \_ /usr/lib/notification-daemon/notification-daemon
reze 3065 0.1 0.3 234464 26660 ? Sl 15:37 0:09 \_ nautilus -n
reze 3068 0.0 0.1 254220 14692 ? Sl 15:37 0:01 \_ nm-applet
reze 3076 0.0 0.0 39344 7312 ? Sl 15:37 0:00 \_ /usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1
reze 3098 0.0 0.1 149008 10360 ? Sl 15:37 0:00 \_ bluetooth-applet
reze 3194 0.0 0.0 41024 7904 ? Sl 15:37 0:00 \_ /usr/lib/gnome-disk-utility/gdu-notification-daemon
reze 3218 0.0 0.1 74232 9272 ? Sl 15:37 0:00 \_ telepathy-indicator
reze 3292 0.0 0.0 39768 7640 ? Sl 15:37 0:00 \_ gnome-screensaver
reze 3293 0.0 0.0 54716 5472 ? Sl 15:37 0:00 \_ zeitgeist-datahub
reze 3396 0.0 0.1 51284 10472 ? Sl 15:38 0:00 \_ /usr/lib/evolution/3.2/evolution-alarm-notify
reze 3629 0.0 0.1 52616 11196 ? Sl 15:38 0:00 \_ update-notifier
reze 3673 0.0 0.0 35720 3636 ? Sl 15:39 0:00 \_ /usr/lib/deja-dup/deja-dup/deja-dup-monitor
root 1247 0.0 0.0 11060 3584 ? Ss 15:36 0:00 /usr/sbin/cupsd -F
daemon 1257 0.0 0.0 2452 352 ? Ss 15:36 0:00 atd
root 1265 0.0 0.0 2600 872 ? Ss 15:36 0:00 cron
mysql 1275 0.0 0.4 319484 33812 ? Ssl 15:36 0:02 /usr/sbin/mysqld
root 1284 0.0 0.0 3584 660 ? Ss 15:36 0:02 /usr/sbin/irqbalance
avahi 1298 0.0 0.0 3584 1700 ? S 15:36 0:00 avahi-daemon: running [prolix.local]
avahi 1299 0.0 0.0 3436 432 ? S 15:36 0:00 \_ avahi-daemon: chroot helper
whoopsie 1370 0.0 0.0 25920 4460 ? Ssl 15:36 0:00 whoopsie
root 1464 0.0 0.0 31104 5080 ? Ssl 15:36 0:00 NetworkManager
root 5016 0.0 0.0 7364 2632 ? S 17:48 0:00 \_ /usr/sbin/pppd nodetach lock nodefaultroute user movistarcr ttyUSB0 noipdefault noauth refuse-eap refuse-chap refuse-mschap refuse-mschap-v2 usepeerdns lcp-echo-failure 5 lcp-echo-interval 30 ipparam /org/freedesktop/NetworkManager/PPP/1 plugin /usr/lib/pppd/2.4.5/nm-pppd-plugin.so
nobody 5038 0.0 0.0 5384 1164 ? S 17:48 0:00 \_ /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/sendsigs.omit.d/network-manager.dnsmasq.pid --listen-address=127.0.0.1 --conf-file=/var/run/nm-dns-dnsmasq.conf --cache-size=0 --proxy-dnssec
root 1482 0.0 0.0 25352 3764 ? Sl 15:36 0:00 /usr/lib/policykit-1/polkitd --no-debug
root 1571 0.0 0.0 2216 256 ? S 15:36 0:00 /bin/sh /usr/lib/ipsec/_plutorun --debug --uniqueids yes --force_busy no --nocrsend no --strictcrlpolicy no --nat_traversal yes --keep_alive --protostack netkey --force_keepalive no --disable_port_floating no --virtual_private --listen --crlcheckinterval 0 --ocspuri --nhelpers --dump --opts --stderrlog --wait no --pre --post --log daemon.error --plutorestartoncrash true --pid /var/run/pluto/pluto.pid
root 1573 0.0 0.0 2216 272 ? S 15:36 0:00 \_ /bin/sh /usr/lib/ipsec/_plutorun --debug --uniqueids yes --force_busy no --nocrsend no --strictcrlpolicy no --nat_traversal yes --keep_alive --protostack netkey --force_keepalive no --disable_port_floating no --virtual_private --listen --crlcheckinterval 0 --ocspuri --nhelpers --dump --opts --stderrlog --wait no --pre --post --log daemon.error --plutorestartoncrash true --pid /var/run/pluto/pluto.pid
root 1577 0.0 0.0 13304 3160 ? S 15:36 0:00 | \_ /usr/lib/ipsec/pluto --nofork --secretsfile /etc/ipsec.secrets --ipsecdir /etc/ipsec.d --use-netkey --uniqueids --nat_traversal
root 1587 0.0 0.0 13200 836 ? SN 15:36 0:00 | \_ pluto helper # 0
root 1588 0.0 0.0 13200 836 ? SN 15:36 0:00 | \_ pluto helper # 1
root 1589 0.0 0.0 13200 836 ? SN 15:36 0:00 | \_ pluto helper # 2
root 1590 0.0 0.0 13200 836 ? SN 15:36 0:00 | \_ pluto helper # 3
root 1591 0.0 0.0 13200 836 ? SN 15:36 0:00 | \_ pluto helper # 4
root 1592 0.0 0.0 13200 836 ? SN 15:36 0:00 | \_ pluto helper # 5
root 1593 0.0 0.0 13200 836 ? SN 15:36 0:00 | \_ pluto helper # 6
root 1743 0.0 0.0 2088 304 ? S 15:36 0:00 | \_ _pluto_adns
root 1574 0.0 0.0 2216 544 ? S 15:36 0:00 \_ /bin/sh /usr/lib/ipsec/_plutoload --wait no --post
root 1572 0.0 0.0 2132 548 ? S 15:36 0:00 logger -s -p daemon.error -t ipsec__plutorun
root 1897 0.0 0.0 39560 1840 ? Ss 15:36 0:00 /usr/lib/l2tp-ipsec-vpn-daemon/L2tpIPsecVpnControlDaemon
root 1906 0.0 0.0 0 0 ? Z 15:36 0:00 \_ [echo] <defunct>
root 1911 0.0 0.0 4136 1188 ? Ss 15:36 0:00 ha_logd: read process
root 1925 0.0 0.0 4136 684 ? S 15:36 0:00 \_ ha_logd: write process
root 2009 0.0 0.0 2232
gitextract_1pfsqkt6/
├── .flake8
├── LICENSE.md
├── README.md
├── VERSION
├── distribution
├── distribution.py
├── distributionrc
└── tests/
├── runTests.sh
├── stderr.01.expected.txt
├── stderr.02.expected.txt
├── stderr.03.expected.txt
├── stderr.04.expected.txt
├── stderr.05.expected.txt
├── stderr.06.expected.txt
├── stderr.07.expected.txt
├── stdin.01.txt
├── stdin.02.txt
├── stdin.03.txt
├── stdin.04.txt
├── stdout.01.expected.txt
├── stdout.02.expected.txt
├── stdout.03.expected.txt
├── stdout.04.expected.txt
├── stdout.05.expected.txt
├── stdout.06.expected.txt
└── stdout.07.expected.txt
SYMBOL INDEX (14 symbols across 1 files)
FILE: distribution.py
class Histogram (line 28) | class Histogram:
method __init__ (line 34) | def __init__(self):
method histogram_bar (line 37) | def histogram_bar(self, s, histWidth, maxVal, barVal):
method write_hist (line 82) | def write_hist(self, s, tokenDict):
class InputReader (line 182) | class InputReader:
method __init__ (line 190) | def __init__(self):
method prune_keys (line 193) | def prune_keys(self, s):
method tokenize_input (line 205) | def tokenize_input(self, s):
method read_pretallied_tokens (line 264) | def read_pretallied_tokens(self, s):
method read_numerics (line 299) | def read_numerics(self, s, h):
class Settings (line 347) | class Settings:
method __init__ (line 348) | def __init__(self):
function doUsage (line 545) | def doUsage(s):
function main (line 609) | def main():
Condensed preview — 26 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (237K chars).
[
{
"path": ".flake8",
"chars": 29,
"preview": "[flake8]\nignore = E501, W503\n"
},
{
"path": "LICENSE.md",
"chars": 14993,
"preview": "GNU GENERAL PUBLIC LICENSE\n==========================\n\nVersion 2, June 1991\n\nCopyright (C) 1989, 1991 Free Software Foun"
},
{
"path": "README.md",
"chars": 35213,
"preview": "New Canonical Source\n====================\n\nI have taken employment such that it is difficult for me to be the owner of t"
},
{
"path": "VERSION",
"chars": 6,
"preview": "1.2.2\n"
},
{
"path": "distribution",
"chars": 22353,
"preview": "#!/usr/bin/env perl\n\n# vim: set noexpandtab sw=4 ts=4:\n# --\n# A recent battle with vim and a Go program finally settled "
},
{
"path": "distribution.py",
"chars": 25044,
"preview": "#! /usr/bin/env python3\n\n\"\"\"\nGenerate Graphs Directly in the (ASCII- or Unicode-based) Terminal\n\nIf you find yourself ty"
},
{
"path": "distributionrc",
"chars": 763,
"preview": "# put this file at $HOME/.distributionrc or specify it as --rcfile=<location>\n# AS THE FIRST ARGUMENT to the script\n#\n# "
},
{
"path": "tests/runTests.sh",
"chars": 2341,
"preview": "#!/bin/sh\n\n# make sure env is setup proper\nif [ \"xxx$distribution\" == \"xxx\" ] ; then\n\techo \"To run tests, first export d"
},
{
"path": "tests/stderr.01.expected.txt",
"chars": 177,
"preview": "tokens/lines examined: 279 \n tokens/lines matched: 17,444,532\n histogram keys: 279\n runtime: 1.52m"
},
{
"path": "tests/stderr.02.expected.txt",
"chars": 160,
"preview": "tokens/lines examined: 5,480 \n tokens/lines matched: 1,104\n histogram keys: 144\n runtime: 6.19ms\n "
},
{
"path": "tests/stderr.03.expected.txt",
"chars": 148,
"preview": "tokens/lines examined: 29 \n tokens/lines matched: 29\n histogram keys: 9\n runtime: 0.31ms\n Ke"
},
{
"path": "tests/stderr.04.expected.txt",
"chars": 38,
"preview": " Key|Ct (Pct) Histogram\u001b[31m\n"
},
{
"path": "tests/stderr.05.expected.txt",
"chars": 147,
"preview": "tokens/lines examined: 1,942 \n tokens/lines matched: 191\n histogram keys: 11\n runtime: 2.12ms\nKey|"
},
{
"path": "tests/stderr.06.expected.txt",
"chars": 312,
"preview": "tokens/lines examined: 56,960... ; hash prunes: 0\rtokens/lines examined: 113,920... ; hash prunes: 0\rtokens/lines examin"
},
{
"path": "tests/stderr.07.expected.txt",
"chars": 33,
"preview": " Key|Ct (Pct) Histogram\u001b[32m\n"
},
{
"path": "tests/stdin.01.txt",
"chars": 5413,
"preview": "27944\t/etc/acpi\n2981\t/etc/adduser.conf\n10\t/etc/adjtime\n15375\t/etc/alternatives\n395\t/etc/anacrontab\n1096\t/etc/ansible\n800"
},
{
"path": "tests/stdin.02.txt",
"chars": 64936,
"preview": "2012-01-01 08:01:52 anacron[14182]: Job `cron.daily'\n2012-01-02 08:01:52 anacron[14182]: Normal exit\n2012-01-03 08:"
},
{
"path": "tests/stdin.03.txt",
"chars": 8441,
"preview": "/var/log\n/var/log/ConsoleKit\n/var/log/ConsoleKit/history.1\n/var/log/ConsoleKit/history\n/var/log/apt\n/var/log/apt/term.lo"
},
{
"path": "tests/stdin.04.txt",
"chars": 36589,
"preview": "USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND\nroot 2 0.0 0.0 0 0 ? "
},
{
"path": "tests/stdout.01.expected.txt",
"chars": 2463,
"preview": " /etc/mateconf\u001b[0m|\u001b[34m7780758 \u001b[35m(44.60%) \u001b[37m•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••"
},
{
"path": "tests/stdout.02.expected.txt",
"chars": 1296,
"preview": " info\u001b[0m|\u001b[34m229 \u001b[35m(20.74%) \u001b[37m---------------------------------------------------------------------------"
},
{
"path": "tests/stdout.03.expected.txt",
"chars": 933,
"preview": "2012-01-01\u001b[0m|\u001b[34m3 \u001b[35m(10.34%) \u001b[37m|||||||||||||||||||||||||||||||||||||||||||||||||||||\u001b[32m\n2012-01-02\u001b[0m|\u001b[34m"
},
{
"path": "tests/stdout.04.expected.txt",
"chars": 481,
"preview": " var\u001b[0m|\u001b[33m265 \u001b[35m(27.69%) \u001b[37m(((((((((((((((((((((((((((((((((((()\u001b[31m\n log\u001b[0m|\u001b[33m265 \u001b[35m(27.69%"
},
{
"path": "tests/stdout.05.expected.txt",
"chars": 577,
"preview": " 0\u001b[0m|\u001b[34m6 \u001b[35m(3.14%) \u001b[37mppppc\u001b[32m\n 1\u001b[0m|\u001b[34m46 \u001b[35m(24.08%) \u001b[37mppppppppppppppppppppppppppppppppc\u001b[32m\n 2"
},
{
"path": "tests/stdout.06.expected.txt",
"chars": 1654,
"preview": " 7\u001b[0m|\u001b[34m51975 \u001b[36m(28.12%) \u001b[31m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
},
{
"path": "tests/stdout.07.expected.txt",
"chars": 603,
"preview": " S\u001b[0m|\u001b[34m113 \u001b[35m(41.39%) \u001b[37mΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞ\u001b[32m\n Sl\u001b"
}
]
About this extraction
This page contains the full source code of the philovivero/distribution GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 26 files (219.9 KB), approximately 85.0k tokens, and a symbol index with 14 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.