def run(self, path, database_uri): setupLogging(self.outf) store = setupStore(database_uri, 'logs') schema = logs.createSchema() logging.info('Creating schema') patchDatabase(store, schema) logging.info('Loading log file %s', path) loadLogs(path, store) logging.info('Finished loading log file %s', path)
def testLoadWithError(self): """ L{loadLogs} stores L{ErrorLine}s instances loaded from the log file in the database. """ path = sibpath(__file__, 'error-line.log') loadLogs(path, self.store) error = self.store.find(ErrorLine).one() self.assertEqual(datetime(2011, 6, 14, 10, 33, 33, 312), error.time) self.assertEqual("Unknown path u'fluidinfo/chrome-ext.xml'.", error.message) self.assertIdentical(None, error.exceptionClass) self.assertIdentical(None, error.traceback)
def testLoadWithStatus(self): """ L{loadLogs} stores L{StatusLine} instances loaded from the log file in the database. """ path = sibpath(__file__, 'status-line.log') loadLogs(path, self.store) status = self.store.find(StatusLine).one() self.assertEqual(datetime(2011, 6, 14, 6, 36, 47, 68), status.time) self.assertEqual(201, status.code) self.assertEqual('POST', status.method) self.assertEqual('/objects', status.endpoint) self.assertEqual('fom/0.9.2', status.agent) self.assertEqual(131, status.contentLength)
def testLoadWithTraceback(self): """ L{loadLogs} stores the tracebacks loaded with errors in the database. """ path = sibpath(__file__, 'error-traceback.log') loadLogs(path, self.store) error = self.store.find(ErrorLine).one() self.assertEqual(datetime(2011, 6, 14, 10, 33, 33, 312), error.time) self.assertEqual("Unknown path u'fluidinfo/chrome-ext.xml'.", error.message) self.assertEqual('UnknownPathError', error.exceptionClass) with open(path, 'r') as stream: traceback = stream.read() traceback = '\n'.join(traceback.split('\n')[1:]) self.assertEqual(traceback.strip(), error.traceback.strip())
def testLoadWithMixedLines(self): """L{loadLogs} correctly parses and skips lines in a log.""" path = sibpath(__file__, 'mixed-lines.log') loadLogs(path, self.store) error = self.store.find(ErrorLine).one() self.assertEqual(datetime(2011, 6, 14, 10, 33, 33, 312), error.time) self.assertEqual("Unknown path u'fluidinfo/chrome-ext.xml'.", error.message) with open(path, 'r') as stream: traceback = stream.read() traceback = '\n'.join(traceback.split('\n')[2:-3]) self.assertEqual(traceback.strip(), error.traceback.strip()) status = self.store.find(StatusLine).one() self.assertEqual(datetime(2011, 6, 14, 11, 36, 47, 68), status.time) self.assertEqual(201, status.code) self.assertEqual('POST', status.method) self.assertEqual('/objects', status.endpoint) self.assertEqual('fom/0.9.2', status.agent) self.assertEqual(131, status.contentLength)
def testLoadWithUnexpectedContent(self): """L{loadLogs} skips lines in the log that can't be parsed.""" path = sibpath(__file__, 'unknown-line.log') loadLogs(path, self.store) self.assertTrue(self.store.find(ErrorLine).is_empty()) self.assertTrue(self.store.find(StatusLine).is_empty())
def testLoadWithEmptyFile(self): """Calling L{loadLogs} with an empty file is essentially a no-op.""" path = self.fs.makePath('') loadLogs(path, self.store) self.assertTrue(self.store.find(ErrorLine).is_empty()) self.assertTrue(self.store.find(StatusLine).is_empty())