scon/qscon.py
Gabor Guzmics e43065cc00 * implemented chat protocol, explanation mechanics, reviewed marker for
already unpacked logs
* started to disect log parsers for using streams in future
* Qt Client started
* logstream planned.
2015-04-10 20:33:55 +02:00

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()