aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Kenna <cjk@cs.unc.edu>2010-12-07 02:36:57 -0500
committerChristopher Kenna <cjk@cs.unc.edu>2010-12-07 02:36:57 -0500
commit95dc8d1d0c2a2fadb58111e810f39dd9344b3b88 (patch)
treea0595a7bc3f2b0fd3c9ac5e3b46470bdc182b600
parent5122a33e162b84fe1f5ff681c85c9bb6b7ae8af5 (diff)
hc plotting for ASeswip-netsec
-rwxr-xr-xnetsec.py86
1 files changed, 66 insertions, 20 deletions
diff --git a/netsec.py b/netsec.py
index b1f4f30..ad88b90 100755
--- a/netsec.py
+++ b/netsec.py
@@ -115,6 +115,68 @@ class NetsecPlotter(defapp.App):
115 else: 115 else:
116 p.gnuplot_exec() 116 p.gnuplot_exec()
117 117
118 def plot_hc(self, datafile, name, conf):
119 current_host_num = 0
120 host_mapping = {}
121
122 name += "_counts"
123
124 data = self.load(datafile)
125 for row in data:
126 if row[0] not in host_mapping:
127 current_host_num += 1
128 host_mapping[row[0]] = current_host_num
129 row[0] = host_mapping[row[0]]
130
131 del host_mapping
132
133 fname = self.write(data, name, ext='data')
134
135 p = self.make_plot(name)
136
137 p.labels = [label(0.5, 0.9, get_stats_label(data[:,1]),
138 coord=['graph', 'screen'], align='center')]
139
140 # plot raw samples
141 p.title = "hop counts by hosts"
142 p.title += self.get_as_title(conf)
143 p.ylabel = "hop count"
144 p.xlabel = "host id"
145 p.xrange = (0, current_host_num)
146 #p.xticks = (0, 100)
147 #p.yticks = (0, 1)
148 p.yrange = (1, amax(data[:,1]) + 1)
149 if amax(data[:,1]) > 100:
150 p.ylog = True
151
152 p.curves = [curve(fname=fname, xcol=1, ycol=2, title="hop count")]
153
154 #### Styling.
155
156 if not self.setup_png(p):
157 p.rounded_caps = True
158 p.font = 'Helvetica'
159
160 p.font_size = '10'
161 p.size = ('20cm', '10cm')
162 p.monochrome = False
163 p.dashed_lines = False
164 p.key = 'off'
165 p.default_style = 'points lw 1'
166
167 if self.options.smooth:
168 p.default_style += " smooth bezier"
169
170 self.render(p)
171
172 def get_as_title(self, conf):
173 if 'as-num' in conf:
174 return " AS=%s, IP/mask=%s/%s MB=%s Unique Hosts=%s" % \
175 (conf['as-num'], conf['as-str'], conf['as-mask'], \
176 conf['megabytes'], conf['num-hosts'])
177 return ""
178
179
118 def plot_hchisto(self, datafile, name, conf): 180 def plot_hchisto(self, datafile, name, conf):
119 data = self.load(datafile) 181 data = self.load(datafile)
120 182
@@ -139,10 +201,7 @@ class NetsecPlotter(defapp.App):
139 if 'per-host' in conf: 201 if 'per-host' in conf:
140 p.title += " HC per-host: %s" % conf['per-host'] 202 p.title += " HC per-host: %s" % conf['per-host']
141 203
142 if 'as-num' in conf: 204 p.title += self.get_as_title(conf)
143 p.title += " AS=%s, IP/mask=%s/%s MB=%s Unique Hosts=%s" % \
144 (conf['as-num'], conf['as-str'], conf['as-mask'], \
145 conf['megabytes'], conf['num-hosts'])
146 205
147# p.xrange = (0, ceil(max_cost)) 206# p.xrange = (0, ceil(max_cost))
148 p.xticks = (0, 10) 207 p.xticks = (0, 10)
@@ -157,22 +216,6 @@ class NetsecPlotter(defapp.App):
157 if ymax > 10000: 216 if ymax > 10000:
158 p.ylog = True 217 p.ylog = True
159 218
160 #print "not implemented yet..."
161 #return
162 ## plot raw samples
163 #p.title = "raw decoding cost; input=%s; host=%s" \
164 # % (conf['file'], conf['host'])
165
166 #p.ylabel = "decoding cost (ms)"
167 #p.xlabel = "frame number"
168 #p.xrange = (0, len(data))
169 ##p.xticks = (0, 100)
170 #p.yticks = (0, 1)
171 #p.yrange = (1, ceil(max_cost) + 2)
172
173 #p.curves = [curve(fname=fname, xcol=2, ycol=1, title="decoding cost")]
174
175
176 #### Styling. 219 #### Styling.
177 220
178 if not self.setup_png(p): 221 if not self.setup_png(p):
@@ -197,6 +240,9 @@ class NetsecPlotter(defapp.App):
197 name, ext = splitext(bname) 240 name, ext = splitext(bname)
198 conf = decode(name) 241 conf = decode(name)
199 242
243 self.plot_hc(datafile, name, conf)
244 return
245
200 if 'per-host' in conf or 'as-num' in conf: 246 if 'per-host' in conf or 'as-num' in conf:
201 self.plot_hchisto(datafile, name, conf) 247 self.plot_hchisto(datafile, name, conf)
202 248