already unpacked logs * started to disect log parsers for using streams in future * Qt Client started * logstream planned.
103 lines
3.3 KiB
Python
103 lines
3.3 KiB
Python
"""
|
|
Main Entry Point / Exe File for QScon, the main log handler / monitor / manager app for log files.
|
|
|
|
"""
|
|
import os, sys, logging
|
|
import sys
|
|
import urllib2
|
|
from PyQt4 import QtCore, QtGui
|
|
from monitor import SconMonitor
|
|
from PyQt4.QtCore import QObject, pyqtSignal, pyqtSlot
|
|
|
|
|
|
class SconMonitorThread(QtCore.QThread):
|
|
updated = pyqtSignal(str, list)
|
|
created = pyqtSignal(str, bool)
|
|
|
|
def __init__(self, path):
|
|
QtCore.QThread.__init__(self)
|
|
self.path = path
|
|
|
|
def notify(self, filename, lines):
|
|
self.updated.emit(filename, lines)
|
|
#self.mainwindow.notify_filelines(filename, lines)
|
|
#self.list_widget.addItem('%s\n%s' % (filename, ''.join(lines)))
|
|
|
|
def notify_event(self, event_type, data):
|
|
if event_type == 'created':
|
|
self.created.emit(data['src'], data['is_dir'])
|
|
|
|
def run(self):
|
|
monitor = SconMonitor(self.path, notifier=self)
|
|
#self.list_widget.addItem('Starting to monitor: %s' % self.path)
|
|
monitor.run()
|
|
|
|
class MainWindow(QtGui.QWidget):
|
|
def __init__(self):
|
|
super(MainWindow, self).__init__()
|
|
self.tab_list = QtGui.QTabWidget()
|
|
self.tabs = {}
|
|
self.button = QtGui.QPushButton("Start")
|
|
self.button.clicked.connect(self.start_monitor)
|
|
layout = QtGui.QVBoxLayout()
|
|
layout.addWidget(self.button)
|
|
layout.addWidget(self.tab_list)
|
|
self.setLayout(layout)
|
|
|
|
|
|
def notify_filelines(self, filename, lines):
|
|
if filename not in self.tabs.keys():
|
|
new_tab = QtGui.QWidget()
|
|
new_tab.list_widget = QtGui.QListWidget()
|
|
layout = QtGui.QVBoxLayout(new_tab)
|
|
layout.addWidget(new_tab.list_widget)
|
|
self.tabs[filename] = new_tab
|
|
self.tab_list.addTab(new_tab, "%s" % os.path.split(str(filename))[-1])
|
|
self.tabs[filename].list_widget.addItem(''.join(lines)[:-1])
|
|
|
|
def notify_created(self, filename, is_directory):
|
|
if is_directory:
|
|
print "Created Directory %s" % filename
|
|
else:
|
|
print "Created File %s" % filename
|
|
|
|
def start_monitor(self):
|
|
self.button.setDisabled(True)
|
|
paths = [os.path.join(os.path.expanduser('~'),'Documents','My Games','StarConflict','logs'),
|
|
]
|
|
self.threads = []
|
|
for path in paths:
|
|
athread = SconMonitorThread(path)
|
|
athread.updated.connect(self.notify_filelines)
|
|
athread.created.connect(self.notify_created)
|
|
self.threads.append(athread)
|
|
athread.start()
|
|
|
|
########################################################################
|
|
|
|
def _main():
|
|
app = QtGui.QApplication(sys.argv)
|
|
window = MainWindow()
|
|
window.resize(640, 480)
|
|
window.show()
|
|
return app.exec_()
|
|
|
|
def main():
|
|
r = _main()
|
|
try:
|
|
import psutil #@UnresolvedImport
|
|
except ImportError:
|
|
logging.warning('Cannot import PsUtil, terminating without cleaning up threads explicitly.')
|
|
sys.exit(r)
|
|
|
|
def kill_proc_tree(pid, including_parent=True):
|
|
parent = psutil.Process(pid)
|
|
if including_parent:
|
|
parent.kill()
|
|
me = os.getpid()
|
|
kill_proc_tree(me)
|
|
sys.exit(r)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|