Object

Record structured data.

Recording API

set

Sets an object metric to a specific value.

import org.mozilla.yourApplication.GleanMetrics.Party var balloons = Party.BalloonsObject() balloons.add(Party.BalloonsObjectItem(colour = "red", diameter = 5)) balloons.add(Party.BalloonsObjectItem(colour = "green")) Party.balloons.set(balloons)
var balloons: Party.BalloonsObject = [] balloons.append(Party.BalloonsObjectItem(colour: "red", diameter: 5)) balloons.append(Party.BalloonsObjectItem(colour: "green")) Party.balloons.set(balloons)
from glean import load_metrics metrics = load_metrics("metrics.yaml") balloons = metrics.BalloonsObject() balloons.append(BalloonsObjectItem(colour="red", diameter=5)) balloons.append(BalloonsObjectItem(colour="green")) metrics.party.balloons.set(balloons)

C++

Not yet implemented.

JavaScript

let balloons = [ { colour: "red", diameter: 5 }, { colour: "blue", diameter: 7 }, ]; Glean.party.balloons.set(balloons);

Limits

  • Only objects matching the specified structure will be recorded

Recorded errors

  • invalid_value: if the passed value doesn't match the predefined structure

Testing API

testGetValue

Gets the recorded value for a given object metric.
Returns the data as a JSON object if data is stored.
Returns null if no data is stored. Has an optional argument to specify the name of the ping you wish to retrieve data from, except in Rust where it's required. None or no argument will default to the first value found for send_in_pings.

import org.mozilla.yourApplication.GleanMetrics.Party val snapshot = metric.testGetValue()!! assertEquals(1, snapshot.jsonArray.size)
let snapshot = (try! Party.balloons.testGetValue()) as! [Any] XCTAssertEqual(1, snapshot.size)
from glean import load_metrics metrics = load_metrics("metrics.yaml") snapshot = metrics.party.balloons.test_get_value() assert 2 == len(snapshot)

C++

Not yet implemented.

JavaScript

// testGetValue will throw a data error on invalid value. Assert.equal( [ { colour: "red", diameter: 5 }, { colour: "blue", diameter: 7 }, ], Glean.party.balloons.testGetValue() );

testGetNumRecordedErrors

Gets the number of errors recorded for a given text metric.

import org.mozilla.yourApplication.GleanMetrics.Party assertEquals( 0, Party.balloons.testGetNumRecordedErrors(ErrorType.INVALID_VALUE) )
XCTAssertEqual(0, Party.balloons.testGetNumRecordedErrors(.invalidValue))
from glean import load_metrics from glean.testing import ErrorType metrics = load_metrics("metrics.yaml") assert 0 == metrics.party.balloons.test_get_num_recorded_errors( ErrorType.INVALID_VALUE )

Metric parameters

The definition for an object metric type accepts a structure parameter. This defines the accepted structure of the object using a subset of JSON schema.

The allowed types are:

  • string
  • number
  • boolean
  • array
  • object

The array type takes an items parameter, that does define the element types it can hold.
The object type takes a properties parameter, that defines the nested object structure.

array and object metrics can be nested.
No other schema parameters are allowed.
All fields are optional.

Data is validated against this schema at recording time.
Missing values will not be serialized into the payload.

Example object metric definition:

party: balloons: type: object description: A collection of balloons bugs: - https://bugzilla.mozilla.org/TODO data_reviews: - http://example.com/reviews notification_emails: - CHANGE-ME@example.com expires: never structure: type: array items: type: object properties: colour: type: string diameter: type: number

For a full reference on metrics parameters common to all metric types, refer to the metrics YAML registry format reference page.

Data questions

  • What is the crash stack after a Firefox main process crash?