aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Bersenev <bay@hackerdom.ru>2011-07-02 19:01:33 +0000
committerAlexander Bersenev <bay@hackerdom.ru>2011-07-02 19:01:33 +0000
commite9693f76713e6cd44b4215d016a7430acd6137ac (patch)
tree5465671281514e7671550b598f31c574fd746333
parentctrl-c handling (diff)
downloadautodep-e9693f76713e6cd44b4215d016a7430acd6137ac.tar.gz
autodep-e9693f76713e6cd44b4215d016a7430acd6137ac.tar.bz2
autodep-e9693f76713e6cd44b4215d016a7430acd6137ac.zip
changed format of outout
-rw-r--r--NOTES24
-rwxr-xr-xlogger/src/autodep/showfsevents.py81
2 files changed, 96 insertions, 9 deletions
diff --git a/NOTES b/NOTES
index 91c3df3..54b2aee 100644
--- a/NOTES
+++ b/NOTES
@@ -18,4 +18,26 @@ This is few notes mainly for myself.
{
<stage of building>:{<filename>:[<was not found>,<was blocked>]}
}
- ] \ No newline at end of file
+ ]
+
+4. Format of converted events structure:
+ {
+ packagesinfo: {
+ <package>: {
+ stage: {
+ <filename>:
+ {found:[<was readed>,<was writed>],
+ notfound:[<was not found>,<was blocked>]}
+ }
+ }
+ }
+
+ otherfilesinfo: {
+ stage:{
+ <filename>:
+ {found:[<was readed>,<was writed>],
+ notfound:[<was not found>,<was blocked>]}
+ }
+ }
+ }
+
diff --git a/logger/src/autodep/showfsevents.py b/logger/src/autodep/showfsevents.py
index aa03d9f..9d252c3 100755
--- a/logger/src/autodep/showfsevents.py
+++ b/logger/src/autodep/showfsevents.py
@@ -1,5 +1,7 @@
#!/usr/bin/env python2
+import optparse
+
import os
import sys
@@ -8,13 +10,19 @@ import logfs.portage_utils
#logfs.fstracer.getfsevents("/bin/sh", ["sh" , "-c", "/usr/bin/tac bay_success; /usr/bin/tac bay_god bay_god2"])
#events=logfs.fstracer.getfsevents("/bin/cat", ["cat" , "l l l"])
-if len(sys.argv)<2:
- print "Usage: showfsevents.py <command>"
- exit(1)
+#if len(sys.argv)<2:
+# print "Usage: showfsevents.py <command>"
+# exit(1)
-events=logfs.fstracer.getfsevents(sys.argv[1], sys.argv[1:],approach="fusefs")
+args_parser=optparse.OptionParser("%prog [options] <command>")
+args_parser.add_option("-v", action="store_true", dest="verbose", default=False, help="show accessed files")
+
+(options, args) = args_parser.parse_args()
+print args
+
+events=logfs.fstracer.getfsevents(args[0], args,approach="hooklib")
print "Program finished, analyzing dependencies"
-exit(0);
+
# get unique filenames
filenames={}
for stage in events:
@@ -27,13 +35,70 @@ for stage in events:
filenames=filenames.keys();
# temporary disabled
-#file_to_package=logfs.portage_utils.getpackagesbyfiles(filenames)
-file_to_package={}
+file_to_package=logfs.portage_utils.getpackagesbyfiles(filenames)
+#file_to_package={}
#print events
+# this part is completly unreadable. It converting one complex struct(returned with getfsevents) to
+# another which good for user
+
+events_converted_for_output={}
+packagesinfo={}
+events_converted_for_output["packagesinfo"]=packagesinfo
+otherfilesinfo={}
+events_converted_for_output["otherfilesinfo"]=otherfilesinfo
+
+for stage in sorted(events):
+ succ_events=events[stage][0]
+ fail_events=events[stage][1]
+
+ for filename in succ_events:
+ if filename in file_to_package:
+ package=file_to_package[filename]
+ if not package in packagesinfo:
+ packagesinfo[package]={}
+ stageinfo=packagesinfo[package]
+ if not stage in stageinfo:
+ stageinfo[stage]={}
+ else:
+ stageinfo=otherfilesinfo
+ if not stage in stageinfo:
+ stageinfo[stage]={}
+
+ filesinfo=stageinfo[stage]
+ if not filename in filesinfo:
+ filesinfo[filename]={"found":[],"notfound":[]}
+ filesinfo[filename]["found"]=succ_events[filename]
+
+ for filename in fail_events:
+ if filename in file_to_package:
+ package=file_to_package[filename]
+ if not package in packagesinfo:
+ packagesinfo[package]={}
+ stageinfo=packagesinfo[package]
+ if not stage in stageinfo:
+ stageinfo[stage]={}
+ else:
+ stageinfo=otherfilesinfo
+ if not stage in stageinfo:
+ stageinfo[stage]={}
+
+ filesinfo=stageinfo[stage]
+ if not filename in filesinfo:
+ filesinfo[filename]={"found":[],"notfound":[]}
+ filesinfo[filename]["notfound"]=fail_events[filename]
+
+#print events_converted_for_output
+
stagesorder={"clean":1,"setup":2,"unpack":3,"prepare":4,"configure":5,"compile":6,"test":7,
"install":8,"preinst":9,"postinst":10,"prerm":11,"postrm":12,"unknown":13}
+
+for package in sorted(packagesinfo):
+ print "%-40s: %s"%(package,packagesinfo[package].keys())
+
+
+"""
for stage in sorted(events, key=stagesorder.get):
succ_events=events[stage][0]
fail_events=events[stage][1]
@@ -70,5 +135,5 @@ for stage in sorted(events, key=stagesorder.get):
if filename in file_to_package:
print file_to_package[filename],
print
-
+ """
##logfs.fstracer.getfsevents("emerge", ["emerge","--info"]) \ No newline at end of file