history stats - check that command exists and compute hourly stats
This commit is contained in:
parent
9fdf5b935c
commit
df5d6290c4
1 changed files with 83 additions and 0 deletions
83
src/history_stats_3.py
Normal file
83
src/history_stats_3.py
Normal file
|
|
@ -0,0 +1,83 @@
|
||||||
|
#!/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)
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
hours = {}
|
||||||
|
for y in dates:
|
||||||
|
for m in dates[y]:
|
||||||
|
for d in dates[y][m]:
|
||||||
|
for h in dates[y][m][d]:
|
||||||
|
hours[h] = hours.get( h, 0 ) + 1
|
||||||
|
smax = 4
|
||||||
|
for h in hours:
|
||||||
|
sh = " "*(smax-len(str(h)))
|
||||||
|
print(h,end=sh)
|
||||||
|
print()
|
||||||
|
for h in hours:
|
||||||
|
shh = " "*(smax-len(str(hours[h])))
|
||||||
|
print(hours[h],end=shh)
|
||||||
|
print()
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue