Registering custom pings
After defining custom pings glean_parser
is able to generate code from
pings.yaml
files in a Pings
object, which must be instantiated so Glean can send pings by name.
API
registerPings
Loads custom ping metadata into your application or library.
In Kotlin, this object must be registered from your startup code before calling Glean.initialize
(such as in your application's onCreate
method or a function called from that method).
import org.mozilla.yourApplication.GleanMetrics.Pings
override fun onCreate() {
Glean.registerPings(Pings)
Glean.initialize(applicationContext, uploadEnabled = true)
}
In Swift, this object must be registered from your startup code before calling Glean.shared.initialize
(such as in your application's UIApplicationDelegate
application(_:didFinishLaunchingWithOptions:)
method or a function called from that method).
import Glean
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
Glean.shared.registerPings(GleanMetrics.Pings)
Glean.shared.initialize(uploadEnabled = true)
}
}
For Python, the pings.yaml
file must be available and loaded at runtime.
While the Python SDK does provide a Glean.register_ping_type
function, if your project is a script (i.e. just Python files in a directory), you can load the pings.yaml
before calling Glean.initialize
using:
from glean import load_pings
pings = load_pings("pings.yaml")
Glean.initialize(
application_id="my-app-id",
application_version="0.1.0",
upload_enabled=True,
)
If your project is a distributable Python package, you need to include the pings.yaml
file using one of the myriad ways to include data in a Python package and then use pkg_resources.resource_filename()
to get the filename at runtime.
from glean import load_pings
from pkg_resources import resource_filename
pings = load_pings(resource_filename(__name__, "pings.yaml"))
In Rust custom pings need to be registered individually.
This should be done before calling glean::initialize
.
use your_glean_metrics::pings;
glean::register_ping_type(&pings::custom_ping);
glean::register_ping_type(&pings::search);
glean::initialize(cfg, client_info);