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

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