Example #1
0
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))
Example #2
0
 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",
         )
     )
Example #3
0
    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)
Example #4
0
    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'])
Example #5
0
    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'
     }
Example #7
0
    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)
Example #8
0
File: LSB.py Project: ypsah/shinken
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))