glean-parser 18.2.0__tar.gz → 19.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {glean_parser-18.2.0 → glean_parser-19.0.0}/PKG-INFO +2 -2
- {glean_parser-18.2.0 → glean_parser-19.0.0}/README.md +1 -1
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/__main__.py +3 -54
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/go_server.py +8 -1
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/lint.py +12 -4
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/schemas/metrics.2-0-0.schema.yaml +3 -2
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/schemas/pings.2-0-0.schema.yaml +2 -2
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/templates/go_server.jinja2 +1 -1
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/templates/javascript_server.jinja2 +1 -1
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/templates/python_server.jinja2 +24 -15
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/templates/ruby_server.jinja2 +1 -1
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/templates/rust_server.jinja2 +3 -3
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/conftest.py +3 -1
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/server_custom_ping_only_compare.go +1 -1
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/server_custom_ping_only_compare.rs +3 -3
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/server_events_and_custom_ping_compare.go +1 -1
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/server_events_and_custom_ping_compare.rs +3 -3
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/server_events_compare.rb +1 -1
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/server_events_only_compare.go +1 -1
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/server_events_only_compare.rs +3 -3
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test-py/test.py +4 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_kotlin.py +3 -3
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_lint.py +14 -11
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_parser.py +16 -4
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_python_server.py +24 -23
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_swift.py +2 -7
- glean_parser-18.2.0/glean_parser/coverage.py +0 -140
- {glean_parser-18.2.0 → glean_parser-19.0.0}/.gitignore +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/AUTHORS.md +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/LICENSE +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/__init__.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/data_review.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/javascript.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/javascript_server.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/kotlin.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/markdown.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/metrics.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/parser.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/pings.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/python_server.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/ruby_server.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/rust.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/rust_server.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/schemas/metrics.1-0-0.schema.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/schemas/pings.1-0-0.schema.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/schemas/tags.1-0-0.schema.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/swift.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/tags.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/templates/data_review.jinja2 +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/templates/javascript.buildinfo.jinja2 +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/templates/javascript.jinja2 +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/templates/kotlin.buildinfo.jinja2 +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/templates/kotlin.jinja2 +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/templates/markdown.jinja2 +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/templates/qmldir.jinja2 +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/templates/rust.jinja2 +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/templates/swift.jinja2 +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/translate.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/translation_options.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/util.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/glean_parser/validate_ping.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/pyproject.toml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/server_telemetry/sdk-metrics-compat.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/server_telemetry/server-side-pings.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/all_metrics.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/all_pings.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/attribution.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/bad_attribution.yamlx +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/bad_ping.yamlx +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/core.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/custom_ping_no_event_metrics.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/custom_ping_no_event_pings.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/dual_labeled.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/dual_labeled_invalid.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/duplicate_labeled.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/duplicate_send_in_ping.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/empty.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/event_key_ordering.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/events_data_sensitivity.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/events_with_types.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/fxa-server-metrics.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/fxa-server-pings.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/go_server_custom_ping_only_metrics.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/go_server_custom_ping_only_pings.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/go_server_events_and_custom_ping_metrics.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/go_server_events_and_custom_ping_pings.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/go_server_events_only_metrics.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/go_server_metrics_unsupported.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/invalid-ping-names.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/invalid.yamlx +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/jwe.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/metric-with-tags.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/mixed-expirations.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/name_too_similar.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/object.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/old_event_api.yamlx +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/ordering.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/pings.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/python_server_metrics_unsupported.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/rate.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/redefined_category.yamlx +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/redefined_metric.yamlx +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/redefined_ping.yamlx +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/reserved_categories.yamlx +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/ruby_server_metrics_unsupported.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/ruby_server_pings_unsupported.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/rust_server_custom_ping_only_metrics.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/rust_server_custom_ping_only_pings.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/rust_server_events_and_custom_ping_metrics.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/rust_server_events_and_custom_ping_pings.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/rust_server_events_only_metrics.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/rust_server_metrics_unsupported.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/same_name_different_category.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/schema-violation.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/send_if_empty_with_metrics.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/server_metrics_no_events_no_pings.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/server_metrics_with_event.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/server_pings.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/single_labeled.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/smaller.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/tags.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/telemetry_mirror.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/text.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/text_invalid.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/unknown_ping_used.yaml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/wrong_key.yamlx +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/yaml_nits.yamlx +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/detekt.yml +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test-go/test.go.tmpl +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test-js/package.json +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test-js/test.js.tmpl +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test-rb/test.rb.tmpl +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test-rs/test.rs.tmpl +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_cli.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_go_server.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_javascript.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_javascript_server.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_markdown.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_metrics.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_pings.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_ruby_server.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_rust.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_rust_server.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_tags.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_translate.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_utils.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/test_validate_ping.py +0 -0
- {glean_parser-18.2.0 → glean_parser-19.0.0}/tests/util.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: glean-parser
|
|
3
|
-
Version:
|
|
3
|
+
Version: 19.0.0
|
|
4
4
|
Summary: Parser tools for Mozilla's Glean telemetry
|
|
5
5
|
Project-URL: Homepage, https://mozilla.github.io/glean
|
|
6
6
|
Project-URL: Repository, https://github.com/mozilla/glean_parser
|
|
@@ -34,7 +34,7 @@ Parser tools for Mozilla's Glean telemetry.
|
|
|
34
34
|
|
|
35
35
|
Contains various utilities for handling `metrics.yaml` and `pings.yaml` for [the
|
|
36
36
|
Glean SDKs](https://mozilla.github.io/glean). This includes producing generated
|
|
37
|
-
code for various integrations
|
|
37
|
+
code for various integrations and linting.
|
|
38
38
|
|
|
39
39
|
## Documentation
|
|
40
40
|
|
|
@@ -6,7 +6,7 @@ Parser tools for Mozilla's Glean telemetry.
|
|
|
6
6
|
|
|
7
7
|
Contains various utilities for handling `metrics.yaml` and `pings.yaml` for [the
|
|
8
8
|
Glean SDKs](https://mozilla.github.io/glean). This includes producing generated
|
|
9
|
-
code for various integrations
|
|
9
|
+
code for various integrations and linting.
|
|
10
10
|
|
|
11
11
|
## Documentation
|
|
12
12
|
|
|
@@ -18,7 +18,6 @@ import json
|
|
|
18
18
|
import glean_parser
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
from . import coverage as mod_coverage
|
|
22
21
|
from . import data_review as mod_data_review
|
|
23
22
|
from . import lint
|
|
24
23
|
from . import translate as mod_translate
|
|
@@ -172,7 +171,9 @@ def check(schema):
|
|
|
172
171
|
type=click.INT,
|
|
173
172
|
required=False,
|
|
174
173
|
)
|
|
175
|
-
def glinter(
|
|
174
|
+
def glinter(
|
|
175
|
+
input, allow_reserved, allow_missing_files, require_tags, expire_by_version
|
|
176
|
+
):
|
|
176
177
|
"""
|
|
177
178
|
Runs a linter over the metrics.
|
|
178
179
|
"""
|
|
@@ -250,57 +251,6 @@ def dump(input, allow_reserved, allow_missing_files, require_tags):
|
|
|
250
251
|
)
|
|
251
252
|
|
|
252
253
|
|
|
253
|
-
@click.command()
|
|
254
|
-
@click.option(
|
|
255
|
-
"-c",
|
|
256
|
-
"--coverage_file",
|
|
257
|
-
type=click.Path(exists=True, dir_okay=False, file_okay=True, readable=True),
|
|
258
|
-
required=True,
|
|
259
|
-
multiple=True,
|
|
260
|
-
)
|
|
261
|
-
@click.argument(
|
|
262
|
-
"metrics_files",
|
|
263
|
-
type=click.Path(exists=True, dir_okay=False, file_okay=True, readable=True),
|
|
264
|
-
nargs=-1,
|
|
265
|
-
)
|
|
266
|
-
@click.option(
|
|
267
|
-
"-o",
|
|
268
|
-
"--output",
|
|
269
|
-
type=click.Path(exists=False, dir_okay=False, file_okay=True, writable=True),
|
|
270
|
-
required=True,
|
|
271
|
-
)
|
|
272
|
-
@click.option(
|
|
273
|
-
"--format",
|
|
274
|
-
"-f",
|
|
275
|
-
type=click.Choice(list(mod_coverage.OUTPUTTERS.keys())),
|
|
276
|
-
required=True,
|
|
277
|
-
)
|
|
278
|
-
@click.option(
|
|
279
|
-
"--allow-reserved",
|
|
280
|
-
is_flag=True,
|
|
281
|
-
help=(
|
|
282
|
-
"If provided, allow the use of reserved fields. "
|
|
283
|
-
"Should only be set when building the Glean library itself."
|
|
284
|
-
),
|
|
285
|
-
)
|
|
286
|
-
def coverage(coverage_file, metrics_files, format, output, allow_reserved):
|
|
287
|
-
"""
|
|
288
|
-
Produce a coverage analysis file given raw coverage output and a set of
|
|
289
|
-
metrics.yaml files.
|
|
290
|
-
"""
|
|
291
|
-
sys.exit(
|
|
292
|
-
mod_coverage.coverage(
|
|
293
|
-
[Path(x) for x in coverage_file],
|
|
294
|
-
[Path(x) for x in metrics_files],
|
|
295
|
-
format,
|
|
296
|
-
Path(output),
|
|
297
|
-
{
|
|
298
|
-
"allow_reserved": allow_reserved,
|
|
299
|
-
},
|
|
300
|
-
)
|
|
301
|
-
)
|
|
302
|
-
|
|
303
|
-
|
|
304
254
|
@click.command()
|
|
305
255
|
@click.argument("bug", type=str)
|
|
306
256
|
@click.argument(
|
|
@@ -334,7 +284,6 @@ main.add_command(translate)
|
|
|
334
284
|
main.add_command(check)
|
|
335
285
|
main.add_command(glinter)
|
|
336
286
|
main.add_command(dump)
|
|
337
|
-
main.add_command(coverage)
|
|
338
287
|
main.add_command(data_review_request, "data-review")
|
|
339
288
|
|
|
340
289
|
|
|
@@ -32,7 +32,14 @@ from . import util
|
|
|
32
32
|
|
|
33
33
|
# Adding a metric here will require updating the `generate_metric_type` function
|
|
34
34
|
# and require adjustments to `metrics` variables the the template.
|
|
35
|
-
SUPPORTED_METRIC_TYPES = [
|
|
35
|
+
SUPPORTED_METRIC_TYPES = [
|
|
36
|
+
"string",
|
|
37
|
+
"quantity",
|
|
38
|
+
"event",
|
|
39
|
+
"datetime",
|
|
40
|
+
"boolean",
|
|
41
|
+
"string_list",
|
|
42
|
+
]
|
|
36
43
|
|
|
37
44
|
|
|
38
45
|
def generate_ping_type_name(ping_name: str) -> str:
|
|
@@ -35,7 +35,7 @@ NitGenerator = Generator["GlinterNit", None, None]
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
def noop(*args):
|
|
38
|
-
"""
|
|
38
|
+
"""A noop `LintGenerator`. Never yields a GlinterNit."""
|
|
39
39
|
return
|
|
40
40
|
yield
|
|
41
41
|
|
|
@@ -307,8 +307,12 @@ def check_event_on_non_events_ping(
|
|
|
307
307
|
An event metric should usually go on the `events` ping or a custom ping,
|
|
308
308
|
not on a builtin ping.
|
|
309
309
|
"""
|
|
310
|
-
disallowed_pings = set(pings.RESERVED_PING_NAMES) - {"default", "events"} | {
|
|
311
|
-
|
|
310
|
+
disallowed_pings = set(pings.RESERVED_PING_NAMES) - {"default", "events"} | {
|
|
311
|
+
"health"
|
|
312
|
+
}
|
|
313
|
+
if metric.type == "event" and any(
|
|
314
|
+
[ping in disallowed_pings for ping in metric.send_in_pings]
|
|
315
|
+
):
|
|
312
316
|
yield (
|
|
313
317
|
"An event metric should usually go on the `events` ping or a custom ping, "
|
|
314
318
|
+ "not on a builtin ping."
|
|
@@ -709,7 +713,11 @@ def lint_metrics(
|
|
|
709
713
|
|
|
710
714
|
for check_name, (check_func, check_type) in METRIC_CHECKS.items():
|
|
711
715
|
new_nits = list(check_func(metric, parser_config))
|
|
712
|
-
if
|
|
716
|
+
if (
|
|
717
|
+
check_unused_lints
|
|
718
|
+
and check_name in metric.no_lint
|
|
719
|
+
and not len(new_nits)
|
|
720
|
+
):
|
|
713
721
|
nits.append(
|
|
714
722
|
GlinterNit(
|
|
715
723
|
"UNUSED_NO_LINT",
|
|
@@ -254,7 +254,7 @@ definitions:
|
|
|
254
254
|
|
|
255
255
|
A list of bug URLs (e.g. Bugzilla and Github) that are relevant to
|
|
256
256
|
this metric, e.g., tracking its original implementation or later
|
|
257
|
-
changes to it.
|
|
257
|
+
changes to it, including renewals.
|
|
258
258
|
|
|
259
259
|
Prior to version 2.0.0 of the schema, bugs could also be integers.
|
|
260
260
|
type: array
|
|
@@ -268,7 +268,8 @@ definitions:
|
|
|
268
268
|
description: |
|
|
269
269
|
**Required.**
|
|
270
270
|
|
|
271
|
-
A list of
|
|
271
|
+
A list of URLs to any data collection reviews relevant to the metric.
|
|
272
|
+
This should also include links to data reviews for renewals.
|
|
272
273
|
type: array
|
|
273
274
|
items:
|
|
274
275
|
type: string
|
|
@@ -168,7 +168,7 @@ additionalProperties:
|
|
|
168
168
|
ping, e.g., tracking its original implementation or later changes to
|
|
169
169
|
it.
|
|
170
170
|
|
|
171
|
-
It must be a
|
|
171
|
+
It must be a URL to a bug page in a tracker.
|
|
172
172
|
|
|
173
173
|
Prior to version 2.0.0 of the schema, bugs could also be integers.
|
|
174
174
|
type: array
|
|
@@ -182,7 +182,7 @@ additionalProperties:
|
|
|
182
182
|
description: |
|
|
183
183
|
**Required.**
|
|
184
184
|
|
|
185
|
-
A list of
|
|
185
|
+
A list of URLs to any data collection reviews relevant to the ping.
|
|
186
186
|
type: array
|
|
187
187
|
items:
|
|
188
188
|
type: string
|
|
@@ -126,7 +126,7 @@ class {{ ping|event_class_name(metrics_by_type) }} {
|
|
|
126
126
|
const now = new Date();
|
|
127
127
|
const timestamp = now.toISOString();
|
|
128
128
|
{% if 'event' in metrics_by_type %}
|
|
129
|
-
event.timestamp =
|
|
129
|
+
event.timestamp = 0;
|
|
130
130
|
{% endif %}
|
|
131
131
|
const eventPayload = {
|
|
132
132
|
metrics: {
|
|
@@ -35,29 +35,34 @@ class {{ ping|camelize }}ServerEventLogger:
|
|
|
35
35
|
|
|
36
36
|
def record(
|
|
37
37
|
self,
|
|
38
|
-
user_agent: str,
|
|
39
|
-
ip_address: str,
|
|
38
|
+
user_agent: str | None = None,
|
|
39
|
+
ip_address: str | None = None,
|
|
40
40
|
{% for metric_type, metrics in metrics_by_type.items() %}
|
|
41
41
|
{% if metric_type != 'event' %}
|
|
42
42
|
{% for metric in metrics %}
|
|
43
|
-
{{ metric.category }}_{{ metric.name }}: {{ metric.type|py_metric_type }},
|
|
43
|
+
{{ metric.category }}_{{ metric.name }}: {{ metric.type|py_metric_type }} | None = None,
|
|
44
44
|
{% endfor %}
|
|
45
45
|
{% endif %}
|
|
46
46
|
{% endfor %}
|
|
47
|
-
events: list[dict[str, Any]]
|
|
47
|
+
events: list[dict[str, Any]] | None = None,
|
|
48
48
|
) -> None:
|
|
49
49
|
now = datetime.now(timezone.utc)
|
|
50
50
|
timestamp = now.isoformat()
|
|
51
|
+
events = [] if events is None else events
|
|
51
52
|
for event in events:
|
|
52
|
-
event["timestamp"] =
|
|
53
|
+
event["timestamp"] = 0
|
|
53
54
|
event_payload = {
|
|
54
55
|
"metrics": {
|
|
55
56
|
{% for metric_type, metrics in metrics_by_type.items() %}
|
|
56
57
|
{% if metric_type != 'event' %}
|
|
57
58
|
"{{ metric_type }}": {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
key: value
|
|
60
|
+
for key, value in [
|
|
61
|
+
{% for metric in metrics %}
|
|
62
|
+
("{{ metric.category }}.{{ metric.name }}", {{ metric.category }}_{{ metric.name }}),
|
|
63
|
+
{% endfor %}
|
|
64
|
+
]
|
|
65
|
+
if value is not None
|
|
61
66
|
},
|
|
62
67
|
{% endif %}
|
|
63
68
|
{% endfor %}
|
|
@@ -117,17 +122,17 @@ class {{ ping|camelize }}ServerEventLogger:
|
|
|
117
122
|
{% for event in metrics_by_type["event"] %}
|
|
118
123
|
def {{ event|record_event_function_name }}(
|
|
119
124
|
self,
|
|
120
|
-
user_agent: str,
|
|
121
|
-
ip_address: str,
|
|
125
|
+
user_agent: str | None = None,
|
|
126
|
+
ip_address: str | None = None,
|
|
122
127
|
{% for metric_type, metrics in metrics_by_type.items() %}
|
|
123
128
|
{% if metric_type != 'event' %}
|
|
124
129
|
{% for metric in metrics %}
|
|
125
|
-
{{ metric.category }}_{{ metric.name }}: {{ metric.type|py_metric_type }},
|
|
130
|
+
{{ metric.category }}_{{ metric.name }}: {{ metric.type|py_metric_type }} | None = None,
|
|
126
131
|
{% endfor %}
|
|
127
132
|
{% endif %}
|
|
128
133
|
{% endfor %}
|
|
129
134
|
{% for extra, metadata in event.extra_keys.items() %}
|
|
130
|
-
{{ extra }}: {{ metadata.type|py_metric_type }},
|
|
135
|
+
{{ extra }}: {{ metadata.type|py_metric_type }} | None = None,
|
|
131
136
|
{% endfor %}
|
|
132
137
|
) -> None:
|
|
133
138
|
"""
|
|
@@ -156,9 +161,13 @@ class {{ ping|camelize }}ServerEventLogger:
|
|
|
156
161
|
"name": "{{ event.name }}",
|
|
157
162
|
{% if event.extra_keys %}
|
|
158
163
|
"extra": {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
164
|
+
key: value
|
|
165
|
+
for key, value in [
|
|
166
|
+
{% for extra, metadata in event.extra_keys.items() %}
|
|
167
|
+
("{{ extra }}", str({{ extra }}){% if 'bool' == metadata.type|py_metric_type %}.lower(){% endif %}),
|
|
168
|
+
{% endfor %}
|
|
169
|
+
]
|
|
170
|
+
if value is not None
|
|
162
171
|
},
|
|
163
172
|
{% endif %}
|
|
164
173
|
}
|
|
@@ -152,7 +152,7 @@ module Glean
|
|
|
152
152
|
{
|
|
153
153
|
'category' => '{{ event.category }}',
|
|
154
154
|
'name' => '{{ event.name }}',
|
|
155
|
-
'timestamp' =>
|
|
155
|
+
'timestamp' => 0,
|
|
156
156
|
'extra' => [
|
|
157
157
|
{% for extra, metadata in event.extra_keys.items() %}
|
|
158
158
|
['{{ extra }}', {{ extra }}.to_s],
|
|
@@ -108,7 +108,7 @@ pub fn new_glean_event(
|
|
|
108
108
|
GleanEvent {
|
|
109
109
|
category: category.to_owned(),
|
|
110
110
|
name: name.to_owned(),
|
|
111
|
-
timestamp:
|
|
111
|
+
timestamp: 0,
|
|
112
112
|
extra,
|
|
113
113
|
}
|
|
114
114
|
}
|
|
@@ -227,7 +227,7 @@ impl {{ ping|ping_events_type_name }} for {{ event|event_type_name }} {
|
|
|
227
227
|
/// Create a GleanEvent for the above-defined Event struct ({{ event|event_type_name }}).
|
|
228
228
|
/// Any metadata `extra` values are passed into the extra HashMap.
|
|
229
229
|
fn glean_event(&self) -> GleanEvent {
|
|
230
|
-
// Any `extra_keys` will be output below to be inserted into `extra`.
|
|
230
|
+
// Any `extra_keys` will be output below to be inserted into `extra`.
|
|
231
231
|
// If there are none, an empty, immutable HashMap is created.
|
|
232
232
|
{% if event.extra_keys.items()|length == 0 %}
|
|
233
233
|
let extra: HashMap<String, String> = HashMap::new();
|
|
@@ -323,7 +323,7 @@ impl GleanEventsLogger {
|
|
|
323
323
|
if let Some(event) = ¶ms.event {
|
|
324
324
|
events.push(event.glean_event());
|
|
325
325
|
}
|
|
326
|
-
|
|
326
|
+
|
|
327
327
|
{% else %}
|
|
328
328
|
let events: Vec<GleanEvent> = Vec::new();
|
|
329
329
|
{% endif %}
|
|
@@ -50,7 +50,9 @@ def pytest_collection_modifyitems(config, items):
|
|
|
50
50
|
else:
|
|
51
51
|
# Node.js removed some deprecated items currently in use by dependencies of mozlog.
|
|
52
52
|
# We can't fix that.
|
|
53
|
-
node_version =
|
|
53
|
+
node_version = (
|
|
54
|
+
subprocess.check_output(["node", "--version"]).decode("utf-8").strip()
|
|
55
|
+
)
|
|
54
56
|
major_version = int(node_version[1:].split(".")[0])
|
|
55
57
|
print(f"jer. {node_version=}, {major_version=}")
|
|
56
58
|
if major_version >= 24:
|
|
@@ -107,7 +107,7 @@ pub fn new_glean_event(
|
|
|
107
107
|
GleanEvent {
|
|
108
108
|
category: category.to_owned(),
|
|
109
109
|
name: name.to_owned(),
|
|
110
|
-
timestamp:
|
|
110
|
+
timestamp: 0,
|
|
111
111
|
extra,
|
|
112
112
|
}
|
|
113
113
|
}
|
|
@@ -217,7 +217,7 @@ impl ServerTelemetryScenarioOnePingEvent for BackendSpecialEventEvent {
|
|
|
217
217
|
/// Create a GleanEvent for the above-defined Event struct (BackendSpecialEventEvent).
|
|
218
218
|
/// Any metadata `extra` values are passed into the extra HashMap.
|
|
219
219
|
fn glean_event(&self) -> GleanEvent {
|
|
220
|
-
// Any `extra_keys` will be output below to be inserted into `extra`.
|
|
220
|
+
// Any `extra_keys` will be output below to be inserted into `extra`.
|
|
221
221
|
// If there are none, an empty, immutable HashMap is created.
|
|
222
222
|
let mut extra: HashMap<String, String> = HashMap::new();
|
|
223
223
|
|
|
@@ -295,7 +295,7 @@ impl GleanEventsLogger {
|
|
|
295
295
|
if let Some(event) = ¶ms.event {
|
|
296
296
|
events.push(event.glean_event());
|
|
297
297
|
}
|
|
298
|
-
|
|
298
|
+
|
|
299
299
|
self.record("server-telemetry-scenario-one", request_info, metrics, events);
|
|
300
300
|
}
|
|
301
301
|
}
|
{glean_parser-18.2.0 → glean_parser-19.0.0}/tests/data/server_events_and_custom_ping_compare.rs
RENAMED
|
@@ -107,7 +107,7 @@ pub fn new_glean_event(
|
|
|
107
107
|
GleanEvent {
|
|
108
108
|
category: category.to_owned(),
|
|
109
109
|
name: name.to_owned(),
|
|
110
|
-
timestamp:
|
|
110
|
+
timestamp: 0,
|
|
111
111
|
extra,
|
|
112
112
|
}
|
|
113
113
|
}
|
|
@@ -217,7 +217,7 @@ impl EventsPingEvent for BackendTestEventEvent {
|
|
|
217
217
|
/// Create a GleanEvent for the above-defined Event struct (BackendTestEventEvent).
|
|
218
218
|
/// Any metadata `extra` values are passed into the extra HashMap.
|
|
219
219
|
fn glean_event(&self) -> GleanEvent {
|
|
220
|
-
// Any `extra_keys` will be output below to be inserted into `extra`.
|
|
220
|
+
// Any `extra_keys` will be output below to be inserted into `extra`.
|
|
221
221
|
// If there are none, an empty, immutable HashMap is created.
|
|
222
222
|
let mut extra: HashMap<String, String> = HashMap::new();
|
|
223
223
|
|
|
@@ -295,7 +295,7 @@ impl GleanEventsLogger {
|
|
|
295
295
|
if let Some(event) = ¶ms.event {
|
|
296
296
|
events.push(event.glean_event());
|
|
297
297
|
}
|
|
298
|
-
|
|
298
|
+
|
|
299
299
|
self.record("events", request_info, metrics, events);
|
|
300
300
|
}
|
|
301
301
|
}
|
|
@@ -107,7 +107,7 @@ pub fn new_glean_event(
|
|
|
107
107
|
GleanEvent {
|
|
108
108
|
category: category.to_owned(),
|
|
109
109
|
name: name.to_owned(),
|
|
110
|
-
timestamp:
|
|
110
|
+
timestamp: 0,
|
|
111
111
|
extra,
|
|
112
112
|
}
|
|
113
113
|
}
|
|
@@ -217,7 +217,7 @@ impl EventsPingEvent for BackendTestEventEvent {
|
|
|
217
217
|
/// Create a GleanEvent for the above-defined Event struct (BackendTestEventEvent).
|
|
218
218
|
/// Any metadata `extra` values are passed into the extra HashMap.
|
|
219
219
|
fn glean_event(&self) -> GleanEvent {
|
|
220
|
-
// Any `extra_keys` will be output below to be inserted into `extra`.
|
|
220
|
+
// Any `extra_keys` will be output below to be inserted into `extra`.
|
|
221
221
|
// If there are none, an empty, immutable HashMap is created.
|
|
222
222
|
let mut extra: HashMap<String, String> = HashMap::new();
|
|
223
223
|
|
|
@@ -295,7 +295,7 @@ impl GleanEventsLogger {
|
|
|
295
295
|
if let Some(event) = ¶ms.event {
|
|
296
296
|
events.push(event.glean_event());
|
|
297
297
|
}
|
|
298
|
-
|
|
298
|
+
|
|
299
299
|
self.record("events", request_info, metrics, events);
|
|
300
300
|
}
|
|
301
301
|
}
|
|
@@ -334,9 +334,9 @@ def test_event_extra_keys_with_types(tmp_path):
|
|
|
334
334
|
assert (
|
|
335
335
|
'allowedExtraKeys = listOf("enabled", "preference", "swapped")' in content
|
|
336
336
|
)
|
|
337
|
-
assert
|
|
338
|
-
assert
|
|
339
|
-
assert
|
|
337
|
+
assert 'map.put("enabled", it.toString())' in content
|
|
338
|
+
assert 'map.put("preference", it)' in content
|
|
339
|
+
assert 'map.put("swapped", it.toString())' in content
|
|
340
340
|
|
|
341
341
|
|
|
342
342
|
def test_reasons(tmp_path):
|
|
@@ -774,7 +774,11 @@ def test_events_data_sensitivity_from_file():
|
|
|
774
774
|
"too_many_no_lints": {
|
|
775
775
|
"type": "counter",
|
|
776
776
|
"expires": "2100-01-01",
|
|
777
|
-
"no_lint": [
|
|
777
|
+
"no_lint": [
|
|
778
|
+
"EXPIRATION_DATE_TOO_FAR",
|
|
779
|
+
"UNIT_IN_NAME",
|
|
780
|
+
"UNUSED_NO_LINT",
|
|
781
|
+
],
|
|
778
782
|
}
|
|
779
783
|
},
|
|
780
784
|
0,
|
|
@@ -812,9 +816,8 @@ def test_unused_no_lint_warning(content, num_nits):
|
|
|
812
816
|
nits = lint.lint_metrics(all_metrics.value)
|
|
813
817
|
assert len(nits) == num_nits
|
|
814
818
|
if num_nits > 0:
|
|
815
|
-
assert set(["UNUSED_NO_LINT"]) == set(
|
|
816
|
-
|
|
817
|
-
)
|
|
819
|
+
assert set(["UNUSED_NO_LINT"]) == set(v.check_name for v in nits)
|
|
820
|
+
|
|
818
821
|
|
|
819
822
|
@pytest.mark.parametrize(
|
|
820
823
|
"content,num_nits",
|
|
@@ -824,7 +827,11 @@ def test_unused_no_lint_warning(content, num_nits):
|
|
|
824
827
|
"unknown_lint": {
|
|
825
828
|
"type": "counter",
|
|
826
829
|
"expires": "2100-01-01",
|
|
827
|
-
"no_lint": [
|
|
830
|
+
"no_lint": [
|
|
831
|
+
"EXPIRATION_DATE_TOO_FAR",
|
|
832
|
+
"DOES_NOT_EXIST",
|
|
833
|
+
"UNKNOWN_LINT",
|
|
834
|
+
],
|
|
828
835
|
}
|
|
829
836
|
},
|
|
830
837
|
0,
|
|
@@ -872,9 +879,7 @@ def test_unknown_lint_warning(content, num_nits):
|
|
|
872
879
|
nits = lint.lint_metrics(all_metrics.value)
|
|
873
880
|
assert len(nits) == num_nits
|
|
874
881
|
if num_nits > 0:
|
|
875
|
-
assert set(["UNKNOWN_LINT"]) == set(
|
|
876
|
-
v.check_name for v in nits
|
|
877
|
-
)
|
|
882
|
+
assert set(["UNKNOWN_LINT"]) == set(v.check_name for v in nits)
|
|
878
883
|
|
|
879
884
|
|
|
880
885
|
@pytest.mark.parametrize(
|
|
@@ -958,6 +963,4 @@ def test_events_on_metrics_ping(content, num_nits):
|
|
|
958
963
|
nits = lint.lint_metrics(all_metrics.value)
|
|
959
964
|
assert len(nits) == num_nits
|
|
960
965
|
if num_nits > 0:
|
|
961
|
-
assert set(["EVENT_ON_NON_EVENTS_PING"]) == set(
|
|
962
|
-
v.check_name for v in nits
|
|
963
|
-
)
|
|
966
|
+
assert set(["EVENT_ON_NON_EVENTS_PING"]) == set(v.check_name for v in nits)
|
|
@@ -1299,28 +1299,40 @@ def test_object_invalid():
|
|
|
1299
1299
|
(
|
|
1300
1300
|
{
|
|
1301
1301
|
"type": "object",
|
|
1302
|
-
"properties": {
|
|
1302
|
+
"properties": {
|
|
1303
|
+
"key": {"type": "string"},
|
|
1304
|
+
"value": {"oneOf": [{"type": "object"}]},
|
|
1305
|
+
},
|
|
1303
1306
|
},
|
|
1304
1307
|
1,
|
|
1305
1308
|
),
|
|
1306
1309
|
(
|
|
1307
1310
|
{
|
|
1308
1311
|
"type": "object",
|
|
1309
|
-
"properties": {
|
|
1312
|
+
"properties": {
|
|
1313
|
+
"key": {"type": "string"},
|
|
1314
|
+
"value": {"oneOf": [{"type": "number", "other": "unsupported"}]},
|
|
1315
|
+
},
|
|
1310
1316
|
},
|
|
1311
1317
|
1,
|
|
1312
1318
|
),
|
|
1313
1319
|
(
|
|
1314
1320
|
{
|
|
1315
1321
|
"type": "object",
|
|
1316
|
-
"properties": {
|
|
1322
|
+
"properties": {
|
|
1323
|
+
"key": {"type": "string"},
|
|
1324
|
+
"value": {"oneOf": [{"type": "number"}]},
|
|
1325
|
+
},
|
|
1317
1326
|
},
|
|
1318
1327
|
0,
|
|
1319
1328
|
),
|
|
1320
1329
|
(
|
|
1321
1330
|
{
|
|
1322
1331
|
"type": "object",
|
|
1323
|
-
"properties": {
|
|
1332
|
+
"properties": {
|
|
1333
|
+
"key": {"type": "string"},
|
|
1334
|
+
"value": {"oneOf": [{"type": "number", "description": "desc"}]},
|
|
1335
|
+
},
|
|
1324
1336
|
},
|
|
1325
1337
|
0,
|
|
1326
1338
|
),
|