summaryrefslogtreecommitdiffstats
path: root/toolkit/components/telemetry/tests/marionette/harness/telemetry_harness/ping_filters.py
blob: 6e003b25d551df203479231ff3278041a5085763 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.


class PingFilter(object):
    """Ping filter that accepts any pings."""

    def __call__(self, ping):
        return True


class DeletionRequestPingFilter(PingFilter):
    """Ping filter that accepts deletion-request pings."""

    def __call__(self, ping):
        if not super(DeletionRequestPingFilter, self).__call__(ping):
            return False

        return ping["type"] == "deletion-request"


class EventPingFilter(PingFilter):
    """Ping filter that accepts event pings."""

    def __call__(self, ping):
        if not super(EventPingFilter, self).__call__(ping):
            return False

        return ping["type"] == "event"


class FirstShutdownPingFilter(PingFilter):
    """Ping filter that accepts first-shutdown pings."""

    def __call__(self, ping):
        if not super(FirstShutdownPingFilter, self).__call__(ping):
            return False

        return ping["type"] == "first-shutdown"


class MainPingFilter(PingFilter):
    """Ping filter that accepts main pings."""

    def __call__(self, ping):
        if not super(MainPingFilter, self).__call__(ping):
            return False

        return ping["type"] == "main"


class MainPingReasonFilter(MainPingFilter):
    """Ping filter that accepts main pings that match the
    specified reason.
    """

    def __init__(self, reason):
        super(MainPingReasonFilter, self).__init__()
        self.reason = reason

    def __call__(self, ping):
        if not super(MainPingReasonFilter, self).__call__(ping):
            return False

        return ping["payload"]["info"]["reason"] == self.reason


ANY_PING = PingFilter()
DELETION_REQUEST_PING = DeletionRequestPingFilter()
EVENT_PING = EventPingFilter()
FIRST_SHUTDOWN_PING = FirstShutdownPingFilter()
MAIN_PING = MainPingFilter()
MAIN_SHUTDOWN_PING = MainPingReasonFilter("shutdown")
MAIN_ENVIRONMENT_CHANGE_PING = MainPingReasonFilter("environment-change")