File: histogram_metadata_json.py

package info (click to toggle)
chromium 120.0.6099.224-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 6,112,112 kB
  • sloc: cpp: 32,907,025; ansic: 8,148,123; javascript: 3,679,536; python: 2,031,248; asm: 959,718; java: 804,675; xml: 617,256; sh: 111,417; objc: 100,835; perl: 88,443; cs: 53,032; makefile: 29,579; fortran: 24,137; php: 21,162; tcl: 21,147; sql: 20,809; ruby: 17,735; pascal: 12,864; yacc: 8,045; lisp: 3,388; lex: 1,323; ada: 727; awk: 329; jsp: 267; csh: 117; exp: 43; sed: 37
file content (115 lines) | stat: -rw-r--r-- 3,305 bytes parent folder | download | duplicates (6)
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# Copyright 2023 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Histogram metadata format specification.

This should be kept in sync with the protobuf specs in
histogram_metadata.proto (Google internal). This format
can be converted to protobuf using json_format.ParseDict:
https://googleapis.dev/python/protobuf/latest/google/protobuf/json_format.html

For example:
{
    "histogramName": "Test.Histogram",
    "nameHash": 3306893902404473075,
    "descriptions": [{"source": "SUMMARY", "content": "A histogram!"}],
    "enumDetails": {
        "name": "WhatHappened",
        "buckets": [
            {"key": 0, "label": "This", "summary": "THIS"},
            {"key": 1, "label": "That", "summary": "THAT"}
        ]
    },
    "owners": [{"email": "a@b.c"}],
    "units": "stuff",
    "obsoletionMessage": "No longer useful.",
    "expiresAfter": "never",
    "estimatedExpiryDate": "never",
    "components": ['foo', 'bar'],
    "improvement": "NEITHER_IS_BETTER",
}
"""

from typing import Literal, TypedDict


class Description(TypedDict):
  """Description of a histogram.

  Attributes:
    source: The source type. This is taken from an enum, but all values
      except for "SUMMARY" (with value 1) are deprecated.
    content: The content of the description.
  """
  source: Literal['SUMMARY']
  content: str


class BucketMetadata(TypedDict, total=False):
  """Metadata for an enum bucket.

  Attributes:
    key: The value to identify this bucket. For enumerated histograms that
      are not sparse, this is read from enums.xml.
    label: The label to describe this bucket.
    summary: An optional longer description of the bucket.
  """
  key: int
  label: str
  summary: str


class EnumDetails(TypedDict, total=False):
  """Metadata for a sequence of enum buckets.

  Attributes:
    buckets: The enum buckets.
    name: Name for this enum.
    summary: Description of this enum.
  """
  buckets: list[BucketMetadata]
  name: str
  summary: str


class Owner(TypedDict):
  """Metadata about a histogram owner.

  Attributes:
    email: The email of the owner.
  """
  email: str


# Which direction of movement is better for the histogram values.
ImprovementDirection = Literal['UNKNOWN', 'HIGHER_IS_BETTER', 'LOWER_IS_BETTER',
                               'NEITHER_IS_BETTER']


class HistogramMetadataJSON(TypedDict, total=False):
  """Histogram metadata as a nested JSON dictionary.

  Attributes:
    histogramName: Name of the histogram.
    nameHash: Hash of the histogram name.
    descriptions: Contains the histogram summary.
    enumDetails: Details about the enum if applicable.
    owners: The histogram owners.
    units: The units for the histogram values.
    obsoletionMessage: Obsoletion message if applicable.
    expiresAfter: Scheduled expiry.
    estimatedExpiryDate: Estimated expiry date.
    components: The components that this histogram applies to.
    improvement: Spec for the desired movement in values.
  """
  histogramName: str
  nameHash: int
  descriptions: list[Description]
  enumDetails: EnumDetails
  owners: list[Owner]
  units: str
  obsoletionMessage: str
  expiresAfter: str
  estimatedExpiryDate: str
  components: list[str]
  improvement: ImprovementDirection