affichage de graphiques de stats
This commit is contained in:
parent
df5d6290c4
commit
9049f03cc0
1 changed files with 99 additions and 0 deletions
99
src/history_stats_4.py
Normal file
99
src/history_stats_4.py
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
#!/bin/env python3
|
||||
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import subprocess
|
||||
|
||||
if __name__=="__main__":
|
||||
|
||||
limit = None
|
||||
if len(sys.argv) > 1:
|
||||
limit = int(sys.argv[1])
|
||||
if limit <= 0:
|
||||
limit = None
|
||||
|
||||
history = {}
|
||||
dates = {}
|
||||
hist_conf = os.path.expanduser("~/.bash_history")
|
||||
with open(hist_conf) as hfile:
|
||||
for line in hfile:
|
||||
if line[0] == "#":
|
||||
epoch = int(line[1:])
|
||||
t = time.localtime(epoch)
|
||||
(y,m,d,h) = (t.tm_year,t.tm_mon,t.tm_mday,t.tm_hour)
|
||||
if y not in dates:
|
||||
dates[y] = {}
|
||||
else:
|
||||
if m not in dates[y]:
|
||||
dates[y][m] = {}
|
||||
else:
|
||||
if d not in dates[y][m]:
|
||||
dates[y][m][d] = {}
|
||||
else:
|
||||
if h not in dates[y][m][d]:
|
||||
dates[y][m][d][h] = 0
|
||||
else:
|
||||
dates[y][m][d][h] += 1
|
||||
|
||||
#elif line[0] != '"':
|
||||
else:
|
||||
|
||||
items = line.split()
|
||||
if len(items) > 0:
|
||||
|
||||
cmd = os.path.basename(items[0])
|
||||
|
||||
history[cmd] = history.get(cmd,0) + 1
|
||||
|
||||
for j in range(len(items[1:])):
|
||||
cmd = items[j]
|
||||
if cmd in ("sudo", "|", "xargs"):
|
||||
cmd = os.path.basename(items[j])
|
||||
history[cmd] = history.get(cmd,0) + 1
|
||||
cmd = os.path.basename(items[j+1])
|
||||
history[cmd] = history.get(cmd,0) + 1
|
||||
|
||||
stats = [ (history[cmd],cmd) for cmd in history ]
|
||||
|
||||
stats.sort(reverse=True)
|
||||
|
||||
counts = []
|
||||
for count,cmd in stats[0:limit]:
|
||||
with open("/dev/null","w") as dn:
|
||||
rcode = subprocess.call(["/bin/bash","-i","-c","type "+cmd+";exit"], stdout=dn, stderr=dn)
|
||||
if rcode == 0:
|
||||
#print(count,"\t",cmd)
|
||||
print count,"\t",cmd
|
||||
counts.append( count )
|
||||
|
||||
|
||||
hours = []
|
||||
for y in dates:
|
||||
for m in dates[y]:
|
||||
for d in dates[y][m]:
|
||||
for h in dates[y][m][d]:
|
||||
hours.append(h)
|
||||
|
||||
import pylab as p
|
||||
|
||||
fig = p.figure()
|
||||
ax_h = fig.add_subplot(211)
|
||||
|
||||
n, bins, patches = ax_h.hist( hours )
|
||||
ax_h.legend()
|
||||
ax_h.set_title("Distribution du nombre de commandes par heures")
|
||||
ax_h.set_ylabel("# cmd")
|
||||
ax_h.set_xlabel("Hours")
|
||||
|
||||
ax_l = fig.add_subplot(212)
|
||||
ax_l.plot( counts, "b.-" )
|
||||
ax_l.set_yscale("log")
|
||||
ax_l.set_xscale("log")
|
||||
ax_l.legend()
|
||||
ax_l.set_title("Distribution du nombre de commandes par heures")
|
||||
ax_l.set_ylabel("Freq")
|
||||
ax_l.set_xlabel("# cmd")
|
||||
|
||||
p.show()
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue