#! /usr/bin/python #-*- coding: utf-8 -*- import os # abrt_v4 TABLE columns: UUID = 0 UID = 1 INFORMALL = 2 DUMPDIR_PATH = 3 COUNT = 4 REPORTED = 5 TIME = 6 MESSAGE = 7 # abrt_v4_reportresult columns: #UUID = 0 #UID = 1 REPORTER = 2 RESULT_MESSAGE = 3 def get_db_path(): path = "/var/spool/abrt/abrt-db" try: with open("/etc/abrt/plugins/SQLite3.conf") as f: for line in f: line = line.split('=', 1) if len(line) == 2 and line[0].strip() == "DBPath": path = line[1].strip() except Exception, ex: pass return path def get_url_from_text(text): url_marks = ["http://", "https://", "ftp://", "ftps://", "file://"] lines = text.split('\n') url = "" for mark in url_marks: for line in lines: last_mark = line.find(mark) if last_mark != -1: url_end = line.find(' ',last_mark) if url_end == -1: url_end = len(line) url = "URL=" + line[last_mark:url_end] return url def format_reported_to(reported_to): reporter = reported_to[REPORTER] url = get_url_from_text(reported_to[RESULT_MESSAGE]) if not url: url = reported_to[RESULT_MESSAGE] return reporter + ": " + url if __name__ == "__main__": try: from sqlite3 import dbapi2 as sqlite db = sqlite.connect(get_db_path()) crashes = db.execute("SELECT * FROM abrt_v4") # abrt_v4 TABLE columns: # UUID | UID | INFORMALL | DUMPDIR_PATH | COUNT | REPORTED | TIME | MESSAGE for crash in crashes: # abrt_v4_reportresult columns: # UUID | UID | REPORTER | MESSAGE report_results = db.execute("SELECT * FROM abrt_v4_reportresult WHERE UUID='%s'" % crash[UUID]) # save count from db to file count_file = "%s/count" % crash[DUMPDIR_PATH] # don't overwrite if not os.path.exists(count_file): try: fout = open(count_file, "w") fout.write(str(crash[COUNT])) fout.close() except Exception, ex: # silently ignore errors -> probably stalled db, but we can't # do much about it, so it's better to not polute the rpm output pass # save uuid from db to file uuid_file = "%s/uuid" % crash[DUMPDIR_PATH] # don't overwrite if not os.path.exists(uuid_file): try: fout = open(uuid_file, "w") fout.write(str(crash[UUID])) fout.close() except Exception, ex: # silently ignore errors -> probably stalled db, but we can't # do much about it, so it's better to not polute the rpm output pass results = report_results.fetchall() if results: # save report results from db to file reported_to_file = "%s/reported_to" % crash[DUMPDIR_PATH] if not os.path.exists(reported_to_file): try: fout = open(reported_to_file, "w") except Exception, ex: # silently ignore errors -> probably stalled db, but we can't # do much about it, so it's better to not polute the rpm output continue for report_result in results: # print "\t", format_reported_to(report_result) # I know, it adds a '\n' to the end, but it's not a problem fout.write("%s\n" % format_reported_to(report_result)) fout.close() db.close() except Exception, ex: # in case of any unhandled error, just ignore it, the worst, what # can happen is that the old reports are marked as unreported #print ex pass