1 |
commit: e9693f76713e6cd44b4215d016a7430acd6137ac |
2 |
Author: Alexander Bersenev <bay <AT> hackerdom <DOT> ru> |
3 |
AuthorDate: Sat Jul 2 19:01:33 2011 +0000 |
4 |
Commit: Александр Берсенев <bay <AT> hackerdom <DOT> ru> |
5 |
CommitDate: Sat Jul 2 19:01:33 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/autodep.git;a=commit;h=e9693f76 |
7 |
|
8 |
changed format of outout |
9 |
|
10 |
--- |
11 |
NOTES | 24 ++++++++++- |
12 |
logger/src/autodep/showfsevents.py | 81 ++++++++++++++++++++++++++++++++---- |
13 |
2 files changed, 96 insertions(+), 9 deletions(-) |
14 |
|
15 |
diff --git a/NOTES b/NOTES |
16 |
index 91c3df3..54b2aee 100644 |
17 |
--- a/NOTES |
18 |
+++ b/NOTES |
19 |
@@ -18,4 +18,26 @@ This is few notes mainly for myself. |
20 |
{ |
21 |
<stage of building>:{<filename>:[<was not found>,<was blocked>]} |
22 |
} |
23 |
- ] |
24 |
\ No newline at end of file |
25 |
+ ] |
26 |
+ |
27 |
+4. Format of converted events structure: |
28 |
+ { |
29 |
+ packagesinfo: { |
30 |
+ <package>: { |
31 |
+ stage: { |
32 |
+ <filename>: |
33 |
+ {found:[<was readed>,<was writed>], |
34 |
+ notfound:[<was not found>,<was blocked>]} |
35 |
+ } |
36 |
+ } |
37 |
+ } |
38 |
+ |
39 |
+ otherfilesinfo: { |
40 |
+ stage:{ |
41 |
+ <filename>: |
42 |
+ {found:[<was readed>,<was writed>], |
43 |
+ notfound:[<was not found>,<was blocked>]} |
44 |
+ } |
45 |
+ } |
46 |
+ } |
47 |
+ |
48 |
|
49 |
diff --git a/logger/src/autodep/showfsevents.py b/logger/src/autodep/showfsevents.py |
50 |
index aa03d9f..9d252c3 100755 |
51 |
--- a/logger/src/autodep/showfsevents.py |
52 |
+++ b/logger/src/autodep/showfsevents.py |
53 |
@@ -1,5 +1,7 @@ |
54 |
#!/usr/bin/env python2 |
55 |
|
56 |
+import optparse |
57 |
+ |
58 |
import os |
59 |
import sys |
60 |
|
61 |
@@ -8,13 +10,19 @@ import logfs.portage_utils |
62 |
|
63 |
#logfs.fstracer.getfsevents("/bin/sh", ["sh" , "-c", "/usr/bin/tac bay_success; /usr/bin/tac bay_god bay_god2"]) |
64 |
#events=logfs.fstracer.getfsevents("/bin/cat", ["cat" , "l l l"]) |
65 |
-if len(sys.argv)<2: |
66 |
- print "Usage: showfsevents.py <command>" |
67 |
- exit(1) |
68 |
+#if len(sys.argv)<2: |
69 |
+# print "Usage: showfsevents.py <command>" |
70 |
+# exit(1) |
71 |
|
72 |
-events=logfs.fstracer.getfsevents(sys.argv[1], sys.argv[1:],approach="fusefs") |
73 |
+args_parser=optparse.OptionParser("%prog [options] <command>") |
74 |
+args_parser.add_option("-v", action="store_true", dest="verbose", default=False, help="show accessed files") |
75 |
+ |
76 |
+(options, args) = args_parser.parse_args() |
77 |
+print args |
78 |
+ |
79 |
+events=logfs.fstracer.getfsevents(args[0], args,approach="hooklib") |
80 |
print "Program finished, analyzing dependencies" |
81 |
-exit(0); |
82 |
+ |
83 |
# get unique filenames |
84 |
filenames={} |
85 |
for stage in events: |
86 |
@@ -27,13 +35,70 @@ for stage in events: |
87 |
filenames=filenames.keys(); |
88 |
|
89 |
# temporary disabled |
90 |
-#file_to_package=logfs.portage_utils.getpackagesbyfiles(filenames) |
91 |
-file_to_package={} |
92 |
+file_to_package=logfs.portage_utils.getpackagesbyfiles(filenames) |
93 |
+#file_to_package={} |
94 |
#print events |
95 |
|
96 |
+# this part is completly unreadable. It converting one complex struct(returned with getfsevents) to |
97 |
+# another which good for user |
98 |
+ |
99 |
+events_converted_for_output={} |
100 |
+packagesinfo={} |
101 |
+events_converted_for_output["packagesinfo"]=packagesinfo |
102 |
+otherfilesinfo={} |
103 |
+events_converted_for_output["otherfilesinfo"]=otherfilesinfo |
104 |
+ |
105 |
+for stage in sorted(events): |
106 |
+ succ_events=events[stage][0] |
107 |
+ fail_events=events[stage][1] |
108 |
+ |
109 |
+ for filename in succ_events: |
110 |
+ if filename in file_to_package: |
111 |
+ package=file_to_package[filename] |
112 |
+ if not package in packagesinfo: |
113 |
+ packagesinfo[package]={} |
114 |
+ stageinfo=packagesinfo[package] |
115 |
+ if not stage in stageinfo: |
116 |
+ stageinfo[stage]={} |
117 |
+ else: |
118 |
+ stageinfo=otherfilesinfo |
119 |
+ if not stage in stageinfo: |
120 |
+ stageinfo[stage]={} |
121 |
+ |
122 |
+ filesinfo=stageinfo[stage] |
123 |
+ if not filename in filesinfo: |
124 |
+ filesinfo[filename]={"found":[],"notfound":[]} |
125 |
+ filesinfo[filename]["found"]=succ_events[filename] |
126 |
+ |
127 |
+ for filename in fail_events: |
128 |
+ if filename in file_to_package: |
129 |
+ package=file_to_package[filename] |
130 |
+ if not package in packagesinfo: |
131 |
+ packagesinfo[package]={} |
132 |
+ stageinfo=packagesinfo[package] |
133 |
+ if not stage in stageinfo: |
134 |
+ stageinfo[stage]={} |
135 |
+ else: |
136 |
+ stageinfo=otherfilesinfo |
137 |
+ if not stage in stageinfo: |
138 |
+ stageinfo[stage]={} |
139 |
+ |
140 |
+ filesinfo=stageinfo[stage] |
141 |
+ if not filename in filesinfo: |
142 |
+ filesinfo[filename]={"found":[],"notfound":[]} |
143 |
+ filesinfo[filename]["notfound"]=fail_events[filename] |
144 |
+ |
145 |
+#print events_converted_for_output |
146 |
+ |
147 |
stagesorder={"clean":1,"setup":2,"unpack":3,"prepare":4,"configure":5,"compile":6,"test":7, |
148 |
"install":8,"preinst":9,"postinst":10,"prerm":11,"postrm":12,"unknown":13} |
149 |
|
150 |
+ |
151 |
+for package in sorted(packagesinfo): |
152 |
+ print "%-40s: %s"%(package,packagesinfo[package].keys()) |
153 |
+ |
154 |
+ |
155 |
+""" |
156 |
for stage in sorted(events, key=stagesorder.get): |
157 |
succ_events=events[stage][0] |
158 |
fail_events=events[stage][1] |
159 |
@@ -70,5 +135,5 @@ for stage in sorted(events, key=stagesorder.get): |
160 |
if filename in file_to_package: |
161 |
print file_to_package[filename], |
162 |
print |
163 |
- |
164 |
+ """ |
165 |
##logfs.fstracer.getfsevents("emerge", ["emerge","--info"]) |
166 |
\ No newline at end of file |