summaryrefslogtreecommitdiffstats
path: root/src/gui/CCDump.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/CCDump.py')
-rw-r--r--src/gui/CCDump.py152
1 files changed, 152 insertions, 0 deletions
diff --git a/src/gui/CCDump.py b/src/gui/CCDump.py
new file mode 100644
index 00000000..d8a15f9a
--- /dev/null
+++ b/src/gui/CCDump.py
@@ -0,0 +1,152 @@
+# -*- coding: utf-8 -*-
+from datetime import datetime
+
+from abrt_utils import _, init_logging, log, log1, log2
+
+# Should match CrashTypes.h!
+CD_TYPE = 0
+CD_EDITABLE = 1
+CD_CONTENT = 2
+
+CD_SYS = "s"
+CD_BIN = "b"
+CD_TXT = "t"
+
+FILENAME_ARCHITECTURE = "architecture"
+FILENAME_KERNEL = "kernel"
+FILENAME_TIME = "time"
+FILENAME_PACKAGE = "package"
+FILENAME_COMPONENT = "component"
+FILENAME_DESCRIPTION = "description"
+FILENAME_ANALYZER = "analyzer"
+FILENAME_RELEASE = "release"
+FILENAME_EXECUTABLE = "executable"
+FILENAME_REASON = "reason"
+FILENAME_COMMENT = "comment"
+FILENAME_REPRODUCE = "reproduce"
+FILENAME_RATING = "rating"
+FILENAME_CMDLINE = "cmdline"
+FILENAME_COREDUMP = "coredump"
+FILENAME_BACKTRACE = "backtrace"
+FILENAME_MEMORYMAP = "memorymap"
+
+CD_UID = "uid"
+CD_UUID = "UUID"
+CD_INFORMALL = "InformAll"
+CD_DUPHASH = "DUPHASH"
+CD_DUMPDIR = "DumpDir"
+CD_COUNT = "Count"
+CD_REPORTED = "Reported"
+CD_MESSAGE = "Message"
+
+# FIXME - create method or smth that returns type|editable|content
+
+
+class Dump():
+ """Class for mapping the debug dump to python object"""
+ not_required_fields = ["comment", "Message"]
+ def __init__(self):
+ # we set all attrs dynamically, so no need to have it in init
+ for field in self.not_required_fields:
+ self.__dict__[field] = None
+
+ def __setattr__(self, name, value):
+ if value != None:
+ if name == "time":
+ try:
+ self.__dict__["date"] = datetime.fromtimestamp(int(value[CD_CONTENT])).strftime("%c")
+ except Exception, ex:
+ self.__dict__["date"] = value[CD_CONTENT]
+ log2("can't convert timestamp to date: %s" % ex)
+ self.__dict__[name] = value[CD_CONTENT]
+ else:
+ self.__dict__[name] = value
+
+ def __str__(self):
+ return "Dump instance"
+
+ def getUUID(self):
+ return self.UUID
+
+ def getUID(self):
+ return self.uid
+
+ def getCount(self):
+ return int(self.Count)
+
+ def getExecutable(self):
+ return self.executable
+
+ def getPackage(self):
+ return self.package
+
+ def isReported(self):
+ return self.Reported == "1"
+
+ def getMessage(self):
+ if not self.Message:
+ return "" #[]
+ #return self.Message[CD_CONTENT].split('\n')
+ return self.Message
+
+ def getTime(self, fmt=None):
+ if self.time:
+ if fmt:
+ try:
+ return datetime.fromtimestamp(int(self.time)).strftime(fmt)
+ except Exception, ex:
+ log1(ex)
+ return int(self.time)
+ return self.time
+
+ def getPackageName(self):
+ name_delimiter_pos = self.package[:self.package.rfind("-")].rfind("-")
+ # fix for kerneloops
+ if name_delimiter_pos > 0:
+ return self.package[:name_delimiter_pos]
+ return self.package
+
+ def getDescription(self):
+ return self.description
+
+ def getAnalyzerName(self):
+ return self.analyzer
+
+ def get_release(self):
+ return self.release
+
+ def get_reason(self):
+ return self.reason
+
+ def get_comment(self):
+ return self.comment
+
+ def get_component(self):
+ return self.component
+
+ def get_cmdline(self):
+ return self.cmdline
+
+ def get_arch(self):
+ return self.architecture
+
+ def get_kernel(self):
+ return self.kernel
+
+ def get_backtrace(self):
+ try:
+ return self.backtrace
+ except AttributeError:
+ return None
+
+ def get_rating(self):
+ try:
+ return self.rating
+ except AttributeError:
+ return None
+
+ def get_hostname(self):
+ try:
+ return self.hostname
+ except AttributeError:
+ return None