def connect(self): if self._connected(): self._comm.pushMessage( TracerError(type(self), 'Dump database is already connected.')) try: self._connect() except Exception as e: self._comm.pushMessage(TracerError(type(self), e)) self._comm.pushMessage(TracerMessage('Connected to dump database.'))
def disconnect(self): if not self._connected(): self._comm.pushMessage( TracerError(type(self), 'Database is already disconnected.')) try: self._disconnect() except Exception as e: self._comm.pushMessage(TracerError(type(self), e)) else: self._comm.pushMessage( TracerMessage('Disconnected from Dump database.'))
def runDump(self): while True: try: line = self._comm.popLine() if line: self._parser.parse(line) self._linesProcessed += 1 event = self._parser.popEvent() if event: self._dump(event) self._eventsDumped += 1 if self._eventsDumped % 10000 == 0: self._comm.pushMessage( TracerMessage( 'Dumped {} events, {} lines processed, {} lines left.' .format(self._eventsDumped, self._linesProcessed, self._comm.linesLeft()))) except EOFReached: print('\nAll data has been processed. Exiting...') self._comm.stop() break except Exception as e: self._comm.pushMessage(TracerError(type(self), e)) if self._comm.stopped(): break self.disconnect()
def disconnect(self): try: self._svcAux.trace_stop(self._traceId) self._svcAux.close() self._svc.close() self._traceId = 0 except Exception as e: self._comm.pushMessage(TracerError(type(self), e)) else: self._comm.pushMessage( TracerMessage("Disconnected from traced DB."))
def runTrace(self): while True: try: line = self._svc.readline() while not self._comm.pushLine(line): if self._comm.stopped(): break except Exception as e: self._comm.pushMessage(TracerError(type(self), e)) if self._comm.stopped(): break self.disconnect()
def createDb(self): if os.path.exists(self._dbPath): self._comm.pushMessage( TracerMessage('Dump database file already exists.')) return try: self._createDb() except Exception as e: self._comm.pushMessage(TracerError(type(self), e)) else: self._comm.pushMessage( TracerMessage('Dump database file created: {}.'.format( self._dbPath)))
def _dump(self, event): try: self._connection.begin() cur = self._connection.cursor() fields = vars(event) fieldNames = ','.join(tuple(fields.keys())) fieldValues = tuple(fields.values()) placeholders = ','.join('?' * len(fields)) cur.execute( 'insert into trace_data_parsed ({}) values ({}) '.format( fieldNames, placeholders), fieldValues) except Exception as e: self._connection.rollback() self._comm.pushMessage(TracerError(type(self), e)) self._connection.commit()
def connect(self): try: self._svc = fdb.services.connect( host=self._traceParams.host, user=self._traceParams.login, password=self._traceParams.password) if self._svc.engine_version >= 3.0: self._svc.charset = 'UTF8' # Because trace session blocks the connection, we need another one to stop trace session! self._svcAux = fdb.services.connect( host=self._traceParams.host, user=self._traceParams.login, password=self._traceParams.password) self._traceId = self._svc.trace_start(self._traceParams.traceConf, 'test_trace1') except Exception as e: self._comm.pushMessage(TracerError(type(self), e)) else: self._comm.pushMessage(TracerMessage("Connected to traced DB."))