Beispiel #1
0
    def __show_data(self):
        log.info("Showing data...")

        self.__status_updater.stop()


        self.__data = self.__data_builder.data
        self.__data_builder = None

        self.__process_data()
Beispiel #2
0
    def refresh(self):
        log.info("Refreshing logs...")
        pb = self.__ui.progressBar
        pb.setValue(0)
        pb.setRange(0, 0)

        self.__logs.clear()

        self.__data_builder = DataBuilder(self.__dialog)
        self.__data_builder.filter = self.__filter;
        self.__data_builder.rule_key = self.__dialog.rule_key
        self.__data_builder.finished.connect(self.__show_data)
        self.__data_builder.start()

        self.__status_updater = QTimer(self.__dialog)
        self.__status_updater.timeout.connect(self.__update_status)
        self.__status_updater.start(1000)
Beispiel #3
0
    def __process_data(self, order_by=None):

        pb = self.__ui.progressBar

        pb.setFormat("Showing data...")
        pb.setValue(0)
        pb.setRange(0, 0)

        data = self.__data

        if order_by is not None:
            print order_by.order, order_by.dir

        rules = data.iteritems()
        if order_by is not None and order_by.order == "by rule name":
            print "rule"
            if order_by.dir == "asc":
                rules = sorted(rules)
            else:
                rules = sorted(rules, reverse=True)

        html = []
        for rule, rule_data in rules:
            html.append("<h2>Rule: %s</h2>" % rule)

            paths = rule_data.iteritems()
            if order_by is not None and order_by.order == "by path":
                print "path"
                if order_by.dir == "asc":
                    paths = sorted(paths)
                else:
                    paths = sorted(paths, reverse=True)

            for path, path_data in paths:
                html.append('<h4 class="path">Path: %s</h4>' % path)

                users = path_data.iteritems()
                if order_by is not None and order_by.order == "by user name":
                    if order_by.dir == "asc":
                        users = sorted(users)
                    else:
                        users = sorted(users, reverse=True)

                for user, user_data in users:
                    html.append('<h4 class="user">User: %s</h4>' % user)

                    progs = user_data.iteritems()
                    if order_by is not None and order_by.order == "by PID":
                        if order_by.dir == "asc":
                            progs = sorted(progs)
                        else:
                            progs = sorted(progs, reverse=True)
                    elif order_by is not None and order_by.order == "by command":
                        print "command"
                        if order_by.dir == "asc":
                            progs = sorted(progs, key=lambda p: p[1]['comm'])
                        else:
                            progs = sorted(progs, key=lambda p: p[1]['comm'], reverse=True)

                    for prog, prog_data in progs:
                        if self.__filter is not None and self.__filter.groupPID:
                            html.append('<h4 class="prog">%s (%s)</h4>' % (prog, prog_data['exe']))
                        else:
                            html.append('<h4 class="prog">PID: %s ---- %s (%s)</h4>' % (prog, prog_data['comm'], prog_data['exe']))
                        html.append('<ul class="calls">')
                        for name, val in prog_data.iteritems():
                            if name not in ['comm', 'exe']:
                                html.append("<li>%s = %s</li>" % (name, val))
                        html.append("</ul>")

        doc = self.__logs.document()
        doc.setDefaultStyleSheet("""
            h2 {background: #e8a49b;}
            .path {margin-left: 20px; background: #b1e89b;}
            .user {margin-left: 40px; background: #9b9be8;}
            .prog {margin-left: 60px; background: #9bc5e8;}
            .calls {margin-left: 60px;}
        """)
        doc.setHtml("\n".join(html))

        self.__html = "\n".join(html)

        pb.setFormat("Done")
        pb.setRange(0, 1)
        pb.setValue(1)

        log.info("Showing data: done.")