コード例 #1
0
ファイル: level.py プロジェクト: littlekign/sentry
    def passes(self, event: Event, state: EventState, **kwargs: Any) -> bool:
        desired_level_raw = self.get_option("level")
        desired_match = self.get_option("match")

        if not (desired_level_raw and desired_match):
            return False

        desired_level = int(desired_level_raw)
        # Fetch the event level from the tags since event.level is
        # event.group.level which may have changed
        try:
            level: int = LOG_LEVELS_MAP[event.get_tag("level")]
        except KeyError:
            return False

        if desired_match == MatchType.EQUAL:
            return level == desired_level
        elif desired_match == MatchType.GREATER_OR_EQUAL:
            return level >= desired_level
        elif desired_match == MatchType.LESS_OR_EQUAL:
            return level <= desired_level
        return False
コード例 #2
0
    def _get_attribute_values(self, event: Event, attr: str) -> Sequence[str]:
        # TODO(dcramer): we should validate attributes (when we can) before
        path = attr.split(".")

        if path[0] == "platform":
            if len(path) != 1:
                return []
            return [event.platform]

        if path[0] == "message":
            if len(path) != 1:
                return []
            return [event.message, event.search_message]
        elif path[0] == "environment":
            return [event.get_tag("environment")]

        elif path[0] == "type":
            return [event.data["type"]]

        elif len(path) == 1:
            return []

        elif path[0] == "extra":
            path.pop(0)
            value = event.data["extra"]
            while path:
                bit = path.pop(0)
                value = value.get(bit)
                if not value:
                    return []

            if isinstance(value, (list, tuple)):
                return value
            return [value]

        elif len(path) != 2:
            return []

        elif path[0] == "exception":
            if path[1] not in ("type", "value"):
                return []

            return [getattr(e, path[1]) for e in event.interfaces["exception"].values]

        elif path[0] == "user":
            if path[1] in ("id", "ip_address", "email", "username"):
                return [getattr(event.interfaces["user"], path[1])]
            return [getattr(event.interfaces["user"].data, path[1])]

        elif path[0] == "http":
            if path[1] not in ("url", "method"):
                return []

            return [getattr(event.interfaces["request"], path[1])]

        elif path[0] == "sdk":
            if path[1] != "name":
                return []
            return [event.data["sdk"].get(path[1])]

        elif path[0] == "stacktrace":
            stacks = event.interfaces.get("stacktrace")
            if stacks:
                stacks = [stacks]
            else:
                stacks = [
                    e.stacktrace for e in event.interfaces["exception"].values if e.stacktrace
                ]
            result = []
            for st in stacks:
                for frame in st.frames:
                    if path[1] in ("filename", "module", "abs_path", "package"):
                        result.append(getattr(frame, path[1]))
                    elif path[1] == "code":
                        if frame.pre_context:
                            result.extend(frame.pre_context)
                        if frame.context_line:
                            result.append(frame.context_line)
                        if frame.post_context:
                            result.extend(frame.post_context)
            return result
        return []