def run(url, requests, concurrency, qg): if (concurrency > requests): concurrency = requests remaining = requests conns = [] queries_durations = {} if url.startswith('tcp:'): url = url[4:] addr = url.split(':')[0] port = int(url.split(':')[1]) else: return for x in xrange(0, concurrency): conns.append(LSAsynConnection(addr=addr, port=port)) (query_class, query_str) = qg.get() q = Query(query_str) q.query_class = query_class conns[x].stack_query(q) print "Start queries" t = time.time() while remaining > 0: asyncore.poll(timeout=1) for c in conns: if c.is_finished(): # Store query duration to compute stats q = c.results.pop() duration = q.duration if q.query_class not in queries_durations: queries_durations[q.query_class] = [] queries_durations[q.query_class].append(q.duration) sys.stdout.flush() remaining -= 1 # Print a dot every 10 completed queries if (remaining % 10 == 0): print '.', sys.stdout.flush() # Run another query (query_class, query_str) = qg.get() q = Query(query_str) q.query_class = query_class c.stack_query(q) running_time = time.time() - t print "End queries" print "\n===============" print "Execution report" print "===============" print "Running time is %04f s" % running_time print "Query Class nb min max mean median" for query_class, durations in queries_durations.items(): print "%s %03d %03f %03f %03f %03f" % (query_class.ljust(20), len(durations), min(durations), max(durations), mean(durations), median(durations))
def create_livestatus_query(self, columns: Sequence[LivestatusColumn], headers: str) -> Query: return Query( QuerySpecification( table="services", columns=columns, headers=headers + "Filter: check_command = check-mk-inventory\n", ) )
def test_init(self): q = Query('table') self.assertEqual(q.table, 'table') self.assertEqual(q.columns, []) self.assertEqual(q.ls_filters, []) self.assertEqual(q.post_filters, []) self.assertFalse(q.omit_monitor_column) self.assertFalse(q.auto_detect_types)
def test_build_stats(self): q = Query('table', stats=['state != 0']) expected = 'GET table\nStats: state != 0\nResponseHeader: fixed16\n' self.assertEqual(expected, q.query_text) self.assertRaises(ValueError, Query.__init__, q, 'table', columns=['col1', 'col2'], stats=['state = 0', 'state = 1'])
def test_build_special_filters(self): q = Query('table', ['col1', 'col2'], ['1 = 2', '3 = 4', 'Or: 2']) expected = 'GET table\n' + \ 'Columns: col1 col2\n' + \ 'Filter: 1 = 2\n' + \ 'Filter: 3 = 4\n' + \ 'Or: 2\n' + \ 'ResponseHeader: fixed16\n' self.assertEqual(expected, q.query_text)
def setUp(self): self.q = Query('some_table') self.result_set = QueryResultSet(self.q) self.monitor1 = { 'monitor': 'my-monitor01', 'data': 'col1;col2;col3\nn1;n2;n3\n', 'error': None } self.monitor2 = { 'monitor': 'my-monitor02', 'data': None, 'error': 'my-monitor02 did not respond' }
def test_build(self): # No kwargs q = Query('table') expected = 'GET table\n' + \ 'ResponseHeader: fixed16\n' self.assertEqual(q.query_text, expected) # Columns q = Query('table', ['col1', 'col2']) expected = 'GET table\n' + \ 'Columns: col1 col2\n' + \ 'ResponseHeader: fixed16\n' self.assertEqual(q.query_text, expected) # Columns and filters: q = Query('table', ['col1', 'col2'], ['1 = 2']) expected = 'GET table\n' + \ 'Columns: col1 col2\n' + \ 'Filter: 1 = 2\n' + \ 'ResponseHeader: fixed16\n' self.assertEqual(q.query_text, expected)
def run(url, requests, concurrency, qg): if (concurrency > requests): concurrency = requests remaining = requests conns = [] queries_durations = {} if url.startswith('tcp:'): url = url[4:] addr = url.split(':')[0] port = int(url.split(':')[1]) else: return for x in xrange(0, concurrency): conns.append(LSAsynConnection(addr=addr, port=port)) (query_class, query_str) = qg.get() q = Query(query_str) q.query_class = query_class conns[x].stack_query(q) print "Start queries" t = time.time() while remaining > 0: asyncore.poll(timeout=1) for c in conns: if c.is_finished(): # Store query duration to compute stats q = c.results.pop() duration = q.duration if q.query_class not in queries_durations: queries_durations[q.query_class] = [] queries_durations[q.query_class].append(q.duration) sys.stdout.flush() remaining -= 1 # Print a dot every 10 completed queries if (remaining % 10 == 0): print '.', sys.stdout.flush() # Run another query (query_class, query_str) = qg.get() q = Query(query_str) q.query_class = query_class c.stack_query(q) running_time = time.time() - t print "End queries" print "\n===============" print "Execution report" print "===============" print "Running time is %04f s" % running_time print "Query Class nb min max mean median" for query_class, durations in queries_durations.items(): print "%s %03d %03f %03f %03f %03f" % ( query_class.ljust(20), len(durations), min(durations), max(durations), mean(durations), median(durations))