Пример #1
0
    def run(self):
        logging.basicConfig(filename=self.log)
        logging.info('Sniper starting')
        while True:
            time.sleep(1)

            # fetch
            logging.info('FETCHING')
            proc_info = ''
            ret = commands.getstatusoutput(
                'mysql -u%s -p%s -s -e '\
                '"SHOW ENGINE INNODB STATUS\G"' % (self.user, self.password))
            if ret[0] == 0:
                proc_info = ret[1]
            else:
                logging.error(
                    'sniper.py - Failed to fetch DB status: %s' % ret[1])

            # Parse
            parser = MySqlParser(StringIO.StringIO(proc_info))
            result = {}
            data = parser.initial_parse()
            if _TRANSACTIONS in data:
                result[_TRANSACTIONS] = parser.parse_transactions(data[_TRANSACTIONS])


            # Kill
            if _TRANSACTIONS in result:
                data = result[_TRANSACTIONS]
                self.kill(data)
            else:
                logging.info('sniper.py found no data from the parser')
Пример #2
0
class TestMySqlParser(unittest.TestCase):

    def setUp(self):
        self.parser = MySqlParser(StringIO.StringIO(_TEST_BUFFER))

    def test_initial_parse(self):
        data = self.parser.initial_parse()
        self.assertIn("BACKGROUND THREAD", data.keys())
        self.assertIn("SEMAPHORES", data.keys())
        self.assertIn("TRANSACTIONS", data.keys())
        self.assertIn("FILE I/O", data.keys())
        self.assertIn("INSERT BUFFER AND ADAPTIVE HASH INDEX", data.keys())
        self.assertIn("LOG", data.keys())
        self.assertIn("BUFFER POOL AND MEMORY", data.keys())
        self.assertIn("ROW OPERATIONS", data.keys())

    def test_parse_transactions(self):
        data = self.parser.parse_transactions(_TEST_TRANSACTIONS)
        self.assertEqual(_EXPECTED_TRANSACTIONS, data)