2 import random, traceback, os
3 from constrictor.script import Script, ScriptThread
4 from constrictor.properties import Properties
5 import constrictor.log as log
13 props = Properties.get_properties()
16 class BatchMethodTask(eg_tasks.AbstractMethodTask):
17 def __init__(self, service, method):
18 eg_tasks.AbstractMethodTask.__init__(self, method)
19 self.service = service
23 log.log_info("Batch call: %s %s" % (self.method, osrf.json.to_json(kw['params'])))
24 return self.run_method(*kw['params'])
27 class BatchScript(Script):
36 batch_file = props.get_property('evergreen.batchAPIFile')
37 log.log_info("loading " + batch_file)
38 file = open(batch_file)
39 dm = eg_data.DataManager()
41 for line in file.readlines():
42 line = line[0:len(line)-1] # chomp
43 parts = line.split(None, 2)
48 params = "[%s]" % parts[2]
50 params = params.replace('AUTHTOKEN', '"%s"' % eg_utils.authtoken())
54 try: # get past some encoding oddities in the dict files
55 params = params.replace('DICT_KEYWORD', '"%s"' % eg_utils.random_phrase(1))
56 params = params.replace('DICT_SUBJECT', '"%s"' % eg_utils.random_phrase(1))
57 params = params.replace('DICT_USER', '"%s"' % eg_utils.random_phrase(1))
58 params = params.replace('DICT_ISBN', '"%s"' % eg_utils.random_phrase(1))
59 params = params.replace('DICT_KEYWORD', '"%s"' % eg_utils.random_phrase(1))
64 # TODO: fill in props values for all of these, pre-collecting data as necessary
84 prop_name = 'PROP_%s' % prop
85 if hasattr(eg_data, prop_name):
86 value = dm.get_thread_data(getattr(eg_data, prop_name))
88 params = params.replace(prop, '"%s"' % value)
90 params = osrf.json.to_object(params)
91 for idx in range(0, int(weight)):
93 'service' : '.'.join(method.split('.')[0:2]),
105 for idx in range(0, len(self.calls)):
106 call = self.calls[int(random.random() * len(self.calls))]
108 BatchMethodTask(call['service'], call['method']).start(params=call['params'])
110 log.log_error("Batch Method Error")
111 traceback.print_exc()
115 ScriptManager.go(BatchScript())