def get(self): """ Returns a list with all scenarios (and URL paths to these resources), stub count """ # getting all scenarios cursor = self.db.scenario.find() # sorting based on name cursor.sort([('name', pymongo.ASCENDING)]) # get size scenario_cl = Scenario() scenarios_sizes = scenario_cl.size() scenarios_recorded = scenario_cl.recorded() scenarios_stub_counts = scenario_cl.stub_counts() # start mapping data scenarios = [] result_dict = {} while (yield cursor.fetch_next): document = cursor.next_object() try: # getting information about recorded, sizes and stub counts scenario_recorded = scenarios_recorded.get( document['name'], '-') scenario_size = int(scenarios_sizes.get(document['name'], 0)) scenario_stub_count = scenarios_stub_counts.get( document['name'], 0) scenario_name = document['name'] host, scenario = scenario_name.split(':') # getting session data sessions = [] cache = Cache(host) for session_info in cache.get_scenario_sessions_information( scenario): sessions.append(session_info) scenarios.append({ 'name': scenario_name, 'recorded': scenario_recorded, 'space_used_kb': scenario_size, 'stub_count': scenario_stub_count, 'sessions': sessions, 'scenarioRef': '/stubo/api/v2/scenarios/objects/%s' % document['name'] }) except KeyError: log.warn('Scenario name not found for object: %s' % document['_id']) result_dict['data'] = scenarios self.set_status(200) self.write(result_dict)
def get_session_status(handler, all_hosts=True): scenario = Scenario() host_scenarios = defaultdict() # getting a dictionary with sizes for all scenarios scenario_sizes = scenario.size() scenarios_recorded = scenario.recorded() for s in scenario.get_all(): host, scenario_name = s['name'].split(':') if not all_hosts and get_hostname(handler.request) != host: continue if host not in host_scenarios: host_scenarios[host] = {} # getting session data sessions = [] cache = Cache(host) for session_name, session in cache.get_sessions(scenario_name): # try and get the last_used from the last tracker get/response # else when the begin/session playback was called last_used = session_last_used(s['name'], session_name, 'playback') if last_used: last_used = last_used['start_time'].strftime('%Y-%m-%d %H:%M:%S') else: # session has never been used for playback last_used = session.get('last_used', '-') session['last_used'] = last_used # removing stub information since we aren't using it anyway and it can consume a lot of memory session.pop('stubs', None) # creating sessions list sessions.append(session) # getting stub count stub_counts = stub_count(host, scenario_name)['data']['count'] recorded = '-' # adding session information if sessions: if stub_counts: # getting scenario size and recorded values scenario_size = 0 try: scenario_size = scenario_sizes[s['name']] recorded = scenarios_recorded[s['name']] except KeyError: log.debug("Could not get scenario size for: %s" % s['name']) except Exception as ex: log.warn("Failed to get scenario size for: %s, got error: %s" % (s['name'], ex)) # creating a dict with scenario information host_scenarios[host][scenario_name] = (sessions, stub_counts, recorded, round(scenario_size, 0)) else: host_scenarios[host][scenario_name] = (sessions, 0, '-', 0) return host_scenarios
def get(self, scenario_name): """ Returns scenario name, current sessions and their states, stub count, total, document size. Also, provides direct URL link to stub list. :param scenario_name: <string> scenario name Response JSON: { "stubs": 32, "space_used_kb": 840, "recorded": "2015-07-15", "name": "localhost:scenario_16", "scenarioRef": "/stubo/api/v2/scenarios/objects/localhost:scenario_16" } """ # check if hostname is supplied - if not, override scenario name with new value scenario_name = _get_scenario_full_name(self, scenario_name) # query MongoDB document = yield self.db.scenario.find_one({'name': scenario_name}) # form a result dictionary if document is not None: # get stub count stub_count = yield self.db.scenario_stub.find({'scenario': scenario_name}).count() # get size scenario_cl = Scenario() size = scenario_cl.size(scenario_name) # check if size is None if size is None: size = 0 recorded = scenario_cl.recorded(scenario_name) if recorded is None: recorded = '-' host, scenario = scenario_name.split(':') # getting session data sessions = [] cache = Cache(host) for session_info in cache.get_scenario_sessions_information(scenario): sessions.append(session_info) result_dict = {'name': scenario_name, 'stub_count': stub_count, 'recorded': recorded, 'space_used_kb': int(size), 'scenarioRef': '/stubo/api/v2/scenarios/objects/{0}'.format(scenario_name), 'sessions': sessions} self.set_status(200) self.write(result_dict) else: self.send_error(404)
def get(self): """ Returns a list with all scenarios (and URL paths to these resources), stub count """ # getting all scenarios cursor = self.db.scenario.find() # sorting based on name cursor.sort([('name', pymongo.ASCENDING)]) # get size scenario_cl = Scenario() scenarios_sizes = scenario_cl.size() scenarios_recorded = scenario_cl.recorded() scenarios_stub_counts = scenario_cl.stub_counts() # start mapping data scenarios = [] result_dict = {} while (yield cursor.fetch_next): document = cursor.next_object() try: # getting information about recorded, sizes and stub counts scenario_recorded = scenarios_recorded.get(document['name'], '-') scenario_size = int(scenarios_sizes.get(document['name'], 0)) scenario_stub_count = scenarios_stub_counts.get(document['name'], 0) scenario_name = document['name'] host, scenario = scenario_name.split(':') # getting session data sessions = [] cache = Cache(host) for session_info in cache.get_scenario_sessions_information(scenario): sessions.append(session_info) scenarios.append({'name': scenario_name, 'recorded': scenario_recorded, 'space_used_kb': scenario_size, 'stub_count': scenario_stub_count, 'sessions': sessions, 'scenarioRef': '/stubo/api/v2/scenarios/objects/%s' % document['name']}) except KeyError: log.warn('Scenario name not found for object: %s' % document['_id']) result_dict['data'] = scenarios self.set_status(200) self.write(result_dict)
def get_session_status(handler, all_hosts=True): scenario = Scenario() host_scenarios = defaultdict() # getting a dictionary with sizes for all scenarios scenario_sizes = scenario.size() scenarios_recorded = scenario.recorded() for s in scenario.get_all(): host, scenario_name = s['name'].split(':') if not all_hosts and get_hostname(handler.request) != host: continue if host not in host_scenarios: host_scenarios[host] = {} # getting session data sessions = [] cache = Cache(host) for session_name, session in cache.get_sessions(scenario_name): # try and get the last_used from the last tracker get/response # else when the begin/session playback was called last_used = session_last_used(s['name'], session_name, 'playback') if last_used: last_used = last_used['start_time'].strftime( '%Y-%m-%d %H:%M:%S') else: # session has never been used for playback last_used = session.get('last_used', '-') session['last_used'] = last_used # removing stub information since we aren't using it anyway and it can consume a lot of memory session.pop('stubs', None) # creating sessions list sessions.append(session) # getting stub count stub_counts = stub_count(host, scenario_name)['data']['count'] recorded = '-' # adding session information if sessions: if stub_counts: # getting scenario size and recorded values scenario_size = 0 try: scenario_size = scenario_sizes[s['name']] recorded = scenarios_recorded[s['name']] except KeyError: log.debug("Could not get scenario size for: %s" % s['name']) except Exception as ex: log.warn( "Failed to get scenario size for: %s, got error: %s" % (s['name'], ex)) # creating a dict with scenario information host_scenarios[host][scenario_name] = (sessions, stub_counts, recorded, round(scenario_size, 0)) else: host_scenarios[host][scenario_name] = (sessions, 0, '-', 0) return host_scenarios
def get(self, scenario_name): """ Returns scenario name, current sessions and their states, stub count, total, document size. Also, provides direct URL link to stub list. :param scenario_name: <string> scenario name Response JSON: { "stubs": 32, "space_used_kb": 840, "recorded": "2015-07-15", "name": "localhost:scenario_16", "scenarioRef": "/stubo/api/v2/scenarios/objects/localhost:scenario_16" } """ # check if hostname is supplied - if not, override scenario name with new value scenario_name = _get_scenario_full_name(self, scenario_name) # query MongoDB document = yield self.db.scenario.find_one({'name': scenario_name}) # form a result dictionary if document is not None: # get stub count stub_count = yield self.db.scenario_stub.find({ 'scenario': scenario_name }).count() # get size scenario_cl = Scenario() size = scenario_cl.size(scenario_name) # check if size is None if size is None: size = 0 recorded = scenario_cl.recorded(scenario_name) if recorded is None: recorded = '-' host, scenario = scenario_name.split(':') # getting session data sessions = [] cache = Cache(host) for session_info in cache.get_scenario_sessions_information( scenario): sessions.append(session_info) result_dict = { 'name': scenario_name, 'stub_count': stub_count, 'recorded': recorded, 'space_used_kb': int(size), 'scenarioRef': '/stubo/api/v2/scenarios/objects/{0}'.format(scenario_name), 'sessions': sessions } self.set_status(200) self.write(result_dict) else: self.send_error(404)