Skip to content

Commit 46f60b1

Browse files
author
cgroskopf
committed
Attempting to handle socket errors.
1 parent b0992b6 commit 46f60b1

File tree

1 file changed

+39
-27
lines changed

1 file changed

+39
-27
lines changed

‎beeswithmachineguns/bees.py‎

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
frommultiprocessingimportPool
2828
importos
2929
importre
30+
importsocket
31+
importsys
3032
importtime
3133
importurllib2
3234

@@ -168,42 +170,47 @@ def _attack(params):
168170
"""
169171
print'Bee %i is joining the swarm.'%params['i']
170172

171-
client=paramiko.SSHClient()
172-
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
173-
client.connect(
174-
params['instance_name'],
175-
username=params['username'],
176-
key_filename=_get_pem_path(params['key_name']))
173+
try:
174+
client=paramiko.SSHClient()
175+
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
176+
client.connect(
177+
params['instance_name'],
178+
username=params['username'],
179+
key_filename=_get_pem_path(params['key_name']))
177180

178-
print'Bee %i is firing his machine gun. Bang bang!'%params['i']
181+
print'Bee %i is firing his machine gun. Bang bang!'%params['i']
179182

180-
stdin, stdout, stderr=client.exec_command('ab -r -n %(num_requests)s -c %(concurrent_requests)s -C "sessionid=NotARealSessionID" %(url)s'%params)
183+
stdin, stdout, stderr=client.exec_command('ab -r -n %(num_requests)s -c %(concurrent_requests)s -C "sessionid=NotARealSessionID" %(url)s'%params)
181184

182-
response={}
185+
response={}
183186

184-
ab_results=stdout.read()
185-
ms_per_request_search=re.search('Time\ per\ request:\s+([0-9.]+)\ \[ms\]\ \(mean\)', ab_results)
187+
ab_results=stdout.read()
188+
ms_per_request_search=re.search('Time\ per\ request:\s+([0-9.]+)\ \[ms\]\ \(mean\)', ab_results)
186189

187-
ifnotms_per_request_search:
188-
print'Bee %i lost sight of the target (connection timed out).'%params['i']
189-
returnNone
190+
ifnotms_per_request_search:
191+
print'Bee %i lost sight of the target (connection timed out).'%params['i']
192+
returnNone
193+
194+
requests_per_second_search=re.search('Requests\ per\ second:\s+([0-9.]+)\ \[#\/sec\]\ \(mean\)', ab_results)
195+
fifty_percent_search=re.search('\s+50\%\s+([0-9]+)', ab_results)
196+
ninety_percent_search=re.search('\s+90\%\s+([0-9]+)', ab_results)
197+
complete_requests_search=re.search('Complete\ requests:\s+([0-9]+)', ab_results)
190198

191-
requests_per_second_search=re.search('Requests\ per\ second:\s+([0-9.]+)\ \[#\/sec\]\ \(mean\)', ab_results)
192-
fifty_percent_search=re.search('\s+50\%\s+([0-9]+)', ab_results)
193-
ninety_percent_search=re.search('\s+90\%\s+([0-9]+)', ab_results)
194-
complete_requests_search=re.search('Complete\ requests:\s+([0-9]+)', ab_results)
199+
response['ms_per_request'] =float(ms_per_request_search.group(1))
200+
response['requests_per_second'] =float(requests_per_second_search.group(1))
201+
response['fifty_percent'] =float(fifty_percent_search.group(1))
202+
response['ninety_percent'] =float(ninety_percent_search.group(1))
203+
response['complete_requests'] =float(complete_requests_search.group(1))
195204

196-
response['ms_per_request'] =float(ms_per_request_search.group(1))
197-
response['requests_per_second'] =float(requests_per_second_search.group(1))
198-
response['fifty_percent'] =float(fifty_percent_search.group(1))
199-
response['ninety_percent'] =float(ninety_percent_search.group(1))
200-
response['complete_requests'] =float(complete_requests_search.group(1))
205+
print'Bee %i is out of ammo.'%params['i']
201206

202-
print'Bee %i is out of ammo.'%params['i']
207+
client.close()
203208

204-
client.close()
209+
returnresponse
210+
exceptsocket.error:
211+
print'Uh oh, one of your bees is out of the action. He might be taking a little longer than normal to find his machine gun, or may have been terminated without using "bees down".'
212+
returnNone
205213

206-
returnresponse
207214

208215
def_print_results(results):
209216
"""
@@ -215,6 +222,10 @@ def _print_results(results):
215222
print' Target failed to fully respond to %i bees.'%len(incomplete_results)
216223

217224
complete_results= [r['complete_requests'] forrinresultsifrisnotNone]
225+
226+
iflen(complete_results==0):
227+
print' No results were completed. Apparently your bees are peace-loving hippies.'
228+
218229
total_complete_requests=sum(complete_results)
219230
print' Complete requests:\t\t%i'%total_complete_requests
220231

@@ -223,6 +234,7 @@ def _print_results(results):
223234
print' Requests per second:\t%f [#/sec] (mean)'%mean_requests
224235

225236
complete_results= [r['ms_per_request'] forrinresultsifrisnotNone]
237+
226238
mean_response=sum(complete_results) /len(complete_results)
227239
print' Time per request:\t\t%f [ms] (mean)'%mean_response
228240

@@ -244,7 +256,7 @@ def _print_results(results):
244256
print'Mission Assessment: Target severely compromised.'
245257
else:
246258
print'Mission Assessment: Swarm annihilated target.'
247-
259+
248260
defattack(url, n, c):
249261
"""
250262
Test the root url of this site.

0 commit comments

Comments
(0)