Blame src/plugins/abrt-action-check-oops-for-alt-component

Packit 8ea169
#!/usr/bin/python3 -u
Packit 8ea169
Packit 8ea169
import sys
Packit 8ea169
import os
Packit 8ea169
import locale
Packit 8ea169
import gettext
Packit 8ea169
import hashlib
Packit 8ea169
import re
Packit 8ea169
Packit 8ea169
GETTEXT_PROGNAME = "abrt"
Packit 8ea169
Packit 8ea169
_ = gettext.gettext
Packit 8ea169
Packit 8ea169
tags = [
Packit 8ea169
"WARNING:",
Packit 8ea169
"[ER]IP[^:]",
Packit 8ea169
" \\[<[a-f0-9]{8,16}>\\]"
Packit 8ea169
]
Packit 8ea169
Packit 8ea169
checks = [
Packit 8ea169
 ("i915", "xorg-x11-drv-intel"),
Packit 8ea169
 ("nouveau", "xorg-x11-drv-nouveau"),
Packit 8ea169
 ("radeon", "xorg-x11-drv-ati"),
Packit 8ea169
 ("qxl", "xorg-x11-drv-qxl"),
Packit 8ea169
]
Packit 8ea169
Packit 8ea169
def check_tag(line):
Packit 8ea169
    for tag in tags:
Packit 8ea169
        if re.match(tag, line) is not None:
Packit 8ea169
            for (mod, component) in checks:
Packit 8ea169
                if re.search(mod, line) is not None:
Packit 8ea169
                    return component
Packit 8ea169
    return None
Packit 8ea169
Packit 8ea169
def get_new_component(filename):
Packit 8ea169
    try:
Packit 8ea169
        f = open(filename, "r")
Packit 8ea169
    except IOError as e:
Packit 8ea169
        return None
Packit 8ea169
    for line in f:
Packit 8ea169
        c = check_tag(line)
Packit 8ea169
        if c is not None:
Packit 8ea169
            f.close()
Packit 8ea169
            return c
Packit 8ea169
    f.close()
Packit 8ea169
    return None
Packit 8ea169
Packit 8ea169
def open_or_die(filename, mode):
Packit 8ea169
    try:
Packit 8ea169
        f = open(filename, mode)
Packit 8ea169
    except IOError as e:
Packit 8ea169
        sys.stderr.write(str(e) + "\n")
Packit 8ea169
        sys.exit(1)
Packit 8ea169
    return f
Packit 8ea169
Packit 8ea169
Packit 8ea169
if __name__ == "__main__":
Packit 8ea169
    try:
Packit 8ea169
        locale.setlocale(locale.LC_ALL, "")
Packit 8ea169
    except locale.Error:
Packit 8ea169
        os.environ['LC_ALL'] = 'C'
Packit 8ea169
        locale.setlocale(locale.LC_ALL, "")
Packit 8ea169
Packit 8ea169
    # Defeat "AttributeError: 'module' object has no attribute 'nl_langinfo'"
Packit 8ea169
    try:
Packit 8ea169
        gettext.bind_textdomain_codeset(GETTEXT_PROGNAME,
Packit 8ea169
                                        locale.nl_langinfo(locale.CODESET))
Packit 8ea169
    except AttributeError:
Packit 8ea169
        pass
Packit 8ea169
Packit 8ea169
    gettext.bindtextdomain(GETTEXT_PROGNAME, '/usr/share/locale')
Packit 8ea169
    gettext.textdomain(GETTEXT_PROGNAME)
Packit 8ea169
Packit 8ea169
    #
Packit 8ea169
    # Certain drivers are in the kernel but need to be tracked separtely
Packit 8ea169
    # in other components. This fixes those components.
Packit 8ea169
    #
Packit 8ea169
Packit 8ea169
    new_component = get_new_component("backtrace")
Packit 8ea169
    if new_component is None:
Packit 8ea169
        sys.exit(0)
Packit 8ea169
Packit 8ea169
    print("Oops looks like a problem in kernel module, new component {0}"
Packit 8ea169
            .format(new_component))
Packit 8ea169
Packit 8ea169
    f = open_or_die("component", "w")
Packit 8ea169
    f.write(new_component)
Packit 8ea169
    f.close()
Packit 8ea169
Packit 8ea169
    # keep kernel maint in the loop even if the component gets changed
Packit 8ea169
    f = open_or_die("extra-cc", "w")
Packit 8ea169
    f.write("kernel-maint@redhat.com")
Packit 8ea169
    f.close()