• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mozilla / mozregression / 9283882049

29 May 2024 09:44AM CUT coverage: 86.286%. First build
9283882049

Pull #1450

github

web-flow
Merge ee901c877 into 3e46da41f
Pull Request #1450: Bug 1763188 - Add Snap support using TC builds

96 of 217 new or added lines in 8 files covered. (44.24%)

2586 of 2997 relevant lines covered (86.29%)

5.86 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

50.0
/mozregression/telemetry.py
1
import platform
8✔
2
from collections import namedtuple
8✔
3
from multiprocessing import Process
8✔
4
from pathlib import Path
8✔
5

6
import distro
8✔
7
import mozinfo
8✔
8
from glean import Configuration, Glean, load_metrics, load_pings
8✔
9
from mozlog import get_proxy_logger
8✔
10
from pkg_resources import resource_filename
8✔
11

12
from mozregression import __version__
8✔
13
from mozregression.dates import is_date_or_datetime, to_datetime
8✔
14

15
LOG = get_proxy_logger("telemetry")
8✔
16
PINGS = load_pings(resource_filename(__name__, "pings.yaml"))
8✔
17
METRICS = load_metrics(resource_filename(__name__, "metrics.yaml"))
8✔
18

19
UsageMetrics = namedtuple(
8✔
20
    "UsageMetrics",
21
    [
22
        "variant",
23
        "appname",
24
        "build_type",
25
        "good",
26
        "bad",
27
        "launch",
28
        "windows_version",
29
        "mac_version",
30
        "linux_version",
31
        "linux_distro",
32
        "python_version",
33
    ],
34
)
35

36

37
def get_system_info():
8✔
38
    """Return a dictionary with various information about the system."""
39
    UNKNOWN = "unknown"
8✔
40
    info = {
8✔
41
        "windows_version": None,
42
        "mac_version": None,
43
        "linux_version": None,
44
        "linux_distro": None,
45
        "python_version": None,
46
    }
47

48
    if mozinfo.os == "mac":
8✔
49
        try:
×
50
            # Fetch the "release" from tuple containing macOS version information.
51
            # See https://docs.python.org/3/library/platform.html#macos-platform.
52
            info["mac_version"] = platform.mac_ver()[0]
×
53
        except (AttributeError, IndexError):
×
54
            info["mac_version"] = UNKNOWN
×
55
    elif mozinfo.os == "win":
8✔
56
        try:
×
57
            # Fetch "version" from tuple containing Windows version information.
58
            # See https://docs.python.org/3/library/platform.html#windows-platform.
59
            info["windows_version"] = platform.win32_ver()[1]
×
60
        except (AttributeError, IndexError):
×
61
            info["windows_version"] = UNKNOWN
×
62
    elif mozinfo.os == "linux":
8✔
63
        distro_info = distro.info()
8✔
64
        try:
8✔
65
            info["linux_version"] = distro_info["version"]
8✔
66
            info["linux_distro"] = distro_info["id"]
8✔
67
        except KeyError:
×
68
            info["linux_version"] = UNKNOWN
×
69
            info["linux_distro"] = UNKNOWN
×
70
    info["python_version"] = platform.python_version()
8✔
71
    return info
8✔
72

73

74
def initialize_telemetry(upload_enabled, allow_multiprocessing=False):
8✔
75
    mozregression_path = Path.home() / ".mozilla" / "mozregression"
2✔
76
    Glean.initialize(
2✔
77
        application_id="org.mozilla.mozregression",
78
        application_version=__version__,
79
        upload_enabled=upload_enabled,
80
        configuration=Configuration(allow_multiprocessing=allow_multiprocessing),
81
        data_dir=mozregression_path / "data",
82
    )
83

84

85
def _send_telemetry_ping(metrics):
8✔
86
    METRICS.usage.variant.set(metrics.variant)
×
87
    METRICS.usage.app.set(metrics.appname)
×
88
    METRICS.usage.build_type.set(metrics.build_type)
×
89
    if is_date_or_datetime(metrics.good):
×
90
        METRICS.usage.good_date.set(to_datetime(metrics.good))
×
91
    if is_date_or_datetime(metrics.bad):
×
92
        METRICS.usage.bad_date.set(to_datetime(metrics.bad))
×
93
    if is_date_or_datetime(metrics.launch):
×
94
        METRICS.usage.launch_date.set(to_datetime(metrics.launch))
×
95

96
    # System information metrics.
97
    METRICS.usage.mac_version.set(metrics.mac_version)
×
98
    METRICS.usage.linux_version.set(metrics.linux_version)
×
99
    METRICS.usage.linux_distro.set(metrics.linux_distro)
×
100
    METRICS.usage.windows_version.set(metrics.windows_version)
×
101
    METRICS.usage.python_version.set(metrics.python_version)
×
102
    PINGS.usage.submit()
×
103

104

105
def send_telemetry_ping(metrics):
8✔
106
    LOG.debug("Sending usage ping")
×
107
    _send_telemetry_ping(metrics)
×
108

109

110
def _send_telemetry_ping_oop(metrics, upload_enabled):
8✔
111
    initialize_telemetry(upload_enabled, allow_multiprocessing=True)
×
112
    if upload_enabled:
×
113
        _send_telemetry_ping(metrics)
×
114

115

116
def send_telemetry_ping_oop(metrics, upload_enabled):
8✔
117
    """
118
    This somewhat convoluted function forks off a process (using
119
    Python's multiprocessing module) and sends a glean ping --
120
    this is to get around the fact that we sometimes might
121
    call mozregression inside a process which is itself using
122
    Glean for other purposes (e.g. mach)
123
    """
124
    LOG.debug("Sending usage ping (OOP)")
×
125
    p = Process(target=_send_telemetry_ping_oop, args=(metrics, upload_enabled))
×
126
    p.start()
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc