UUID

UUIDs metrics are used to record values that uniquely identify some entity, such as a client id.

Recording API

generateAndSet

Sets a UUID metric to a randomly generated UUID value (UUID v4) .

import org.mozilla.yourApplication.GleanMetrics.User // Generate a new UUID and record it User.clientId.generateAndSet()
import org.mozilla.yourApplication.GleanMetrics.User; // Generate a new UUID and record it User.INSTANCE.clientId().generateAndSet();
// Generate a new UUID and record it User.clientId.generateAndSet()
from glean import load_metrics metrics = load_metrics("metrics.yaml") # Generate a new UUID and record it metrics.user.client_id.generate_and_set()
use uuid::Uuid; use glean_metrics::user; // Generate a new UUID and record it user::client_id.generate_and_set();
import * as user from "./path/to/generated/files/user.js"; user.clientId.generateAndSet();

C++

#include "mozilla/glean/TelemetryMetrics.h" // Generate a new UUID and record it. mozilla::glean::user::client_id.GenerateAndSet();

JavaScript

// Generate a new UUID and record it. Glean.user.clientId.generateAndSet();

set

Sets a UUID metric to a specific value. Accepts any UUID version.

import org.mozilla.yourApplication.GleanMetrics.User // Set a UUID explicitly User.clientId.set(UUID.randomUUID()) // Set a UUID explicitly
import org.mozilla.yourApplication.GleanMetrics.User; // Set a UUID explicitly User.INSTANCE.clientId().set(UUID.randomUUID());
User.clientId.set(UUID()) // Set a UUID explicitly
import uuid from glean import load_metrics metrics = load_metrics("metrics.yaml") # Set a UUID explicitly metrics.user.client_id.set(uuid.uuid4())
use uuid::Uuid; use glean_metrics::user; // Set a UUID explicitly user::client_id.set(Uuid::new_v4());
import * as user from "./path/to/generated/files/user.js"; const uuid = "decafdec-afde-cafd-ecaf-decafdecafde"; user.clientId.set(uuid);

C++

#include "mozilla/glean/TelemetryMetrics.h" // Set a specific value. nsCString kUuid("decafdec-afde-cafd-ecaf-decafdecafde"); mozilla::glean::user::client_id.Set(kUuid);

JavaScript

// Set a specific value. const uuid = "decafdec-afde-cafd-ecaf-decafdecafde"; Glean.user.clientId.set(uuid);

Recorded errors

  • invalid_value: if the value is set to a string that is not a UUID (only applies for dynamically-typed languages, such as Python).
  • invalid_type: if a non-string or non-UUID value is given.

Testing API

testGetValue

Gets the recorded value for a given UUID metric.
Returns a UUID if data is stored.
Returns a language-specific empty/null value 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.User // Was it the expected value? assertEquals(uuid, User.clientId.testGetValue())
import org.mozilla.yourApplication.GleanMetrics.User; // Was it the expected value? assertEquals(uuid, User.INSTANCE.clientId().testGetValue());
// Was it the expected value? XCTAssertEqual(uuid, try User.clientId.testGetValue())
from glean import load_metrics metrics = load_metrics("metrics.yaml") # Was it the expected value? assert uuid == metrics.user.client_id.test_get_value()
use uuid::Uuid; use glean_metrics::user; let u = Uuid::new_v4(); // Does it have the expected value? assert_eq!(u, user::client_id.test_get_value(None).unwrap());
import * as user from "./path/to/generated/files/user.js"; const uuid = "decafdec-afde-cafd-ecaf-decafdecafde"; assert(uuid, await user.clientId.testGetValue());

C++

#include "mozilla/glean/TelemetryMetrics.h" // Is it clear of errors? ASSERT_TRUE(mozilla::glean::user::client_id.TestGetValue().isOk()); // Does it have an expected values? ASSERT_STREQ(kUuid.get(), mozilla::glean::user::client_id.TestGetValue().unwrap().value().get());

JavaScript

const uuid = "decafdec-afde-cafd-ecaf-decafdecafde"; // testGetValue will throw NS_ERROR_LOSS_OF_SIGNIFICANT_DATA on error. Assert.equal(Glean.user.clientId.testGetValue(), uuid);

testGetNumRecordedErrors

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

import org.mozilla.yourApplication.GleanMetrics.User assertEquals( 0, User.clientId.testGetNumRecordedErrors(ErrorType.INVALID_VALUE) )
import org.mozilla.yourApplication.GleanMetrics.User; assertEquals( 0, User.INSTANCE.clientId().testGetNumRecordedErrors(ErrorType.INVALID_VALUE) );
XCTAssertEqual(0, User.clientId.testGetNumRecordedErrors(.invalidValue))
from glean import load_metrics metrics = load_metrics("metrics.yaml") from glean.testing import ErrorType assert 0 == metrics.user.client_id.test_get_num_recorded_errors( ErrorType.INVALID_VALUE )
use glean::ErrorType; use glean_metrics::user; assert_eq!( 0, user::client_id.test_get_num_recorded_errors( ErrorType::InvalidValue ) );
import * as user from "./path/to/generated/files/user.js"; import { ErrorType } from "@mozilla/glean/error"; // Was the string truncated, and an error reported? assert.strictEqual( 0, await user.clientId.testGetNumRecordedErrors(ErrorType.InvalidValue) );

Metric Parameters

You first need to add an entry for it to the metrics.yaml file:

user: client_id: type: uuid description: > A unique identifier for the client's profile bugs: - https://bugzilla.mozilla.org/000000 data_reviews: - https://bugzilla.mozilla.org/show_bug.cgi?id=000000#c3 notification_emails: - me@mozilla.com expires: 2020-10-01

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

Extra metric parameters

N/A

Data questions

  • A unique identifier for the client.

Reference