blob: 057e353f5b12c3da1b6e708efd1929614462bd06 [file] [log] [blame] [view]
<link rel="stylesheet" href="../style.css" />
[TOC]
# fuchsia.metrics
<p>This file contains interfaces that allow clients to log events that are
associated with metrics. These events are collected and later analyzed.
Metrics are organized under a Project, which are associated with a Customer.
Each of these objects has an integer ID and those IDs are used as parameters
in the methods in this file. Metrics can also have one or more dimensions
associated with them, which are then passed as a vector of event codes when
logging the event.</p>
<p>Usage: First use MetricEventLoggerFactory to get a MetricEventLogger for your
project. Then you log Events as they occur, using the Log*() methods on it.</p>
<p>The default implementation of this service in Fuchsia is Cobalt. For more
details on how to use these interfaces with Cobalt, see README.md.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 7</span></div>
## **PROTOCOLS**
## MetricEventLogger {#MetricEventLogger}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=106)*
<p>A logger for events that are associated with one project's metrics.</p>
### LogInteger {#MetricEventLogger.LogInteger}
<p>Logs an integer measurement.</p>
<p><code>metric_id</code> ID of the metric being logged.</p>
<p><code>value</code> The integer measurement.</p>
<p><code>event_codes</code> Ordered list of parameters, one for each of the metric's
dimensions. Integer values with the same event codes are aggregated
based on these parameters.</p>
#### Request {#MetricEventLogger.LogInteger_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>metric_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
<tr>
<td><code>value</code></td>
<td>
<code>int64</code>
</td>
</tr>
<tr>
<td><code>event_codes</code></td>
<td>
<code><a class='link' href='#EventVector'>EventVector</a></code>
</td>
</tr>
</table>
#### Response {#MetricEventLogger.LogInteger_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>result</code></td>
<td>
<code><a class='link' href='#MetricEventLogger_LogInteger_Result'>MetricEventLogger_LogInteger_Result</a></code>
</td>
</tr>
</table>
### LogIntegerHistogram {#MetricEventLogger.LogIntegerHistogram}
<p>Logs a histogram giving many approximate integer measurements.</p>
<p><code>metric_id</code> ID of the metric being logged.</p>
<p><code>histogram</code> The collection of approximate integer measurements. Buckets
that have no measurement (empty buckets) should not be sent.</p>
<p><code>event_codes</code> Ordered list of parameters, one for each of the metric's
dimensions. Histograms with the same event codes are aggregated together
based on these parameters.</p>
#### Request {#MetricEventLogger.LogIntegerHistogram_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>metric_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
<tr>
<td><code>histogram</code></td>
<td>
<code><a class='link' href='#IntegerHistogram'>IntegerHistogram</a></code>
</td>
</tr>
<tr>
<td><code>event_codes</code></td>
<td>
<code><a class='link' href='#EventVector'>EventVector</a></code>
</td>
</tr>
</table>
#### Response {#MetricEventLogger.LogIntegerHistogram_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>result</code></td>
<td>
<code><a class='link' href='#MetricEventLogger_LogIntegerHistogram_Result'>MetricEventLogger_LogIntegerHistogram_Result</a></code>
</td>
</tr>
</table>
### LogMetricEvents {#MetricEventLogger.LogMetricEvents}
<p>Bulk logging method, equivalent to making many of the above Log*() calls
at once.</p>
#### Request {#MetricEventLogger.LogMetricEvents_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>events</code></td>
<td>
<code>vector&lt;<a class='link' href='#MetricEvent'>MetricEvent</a>&gt;[500]</code>
</td>
</tr>
</table>
#### Response {#MetricEventLogger.LogMetricEvents_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>result</code></td>
<td>
<code><a class='link' href='#MetricEventLogger_LogMetricEvents_Result'>MetricEventLogger_LogMetricEvents_Result</a></code>
</td>
</tr>
</table>
### LogOccurrence {#MetricEventLogger.LogOccurrence}
<p>Logs the fact that an event has occurred a number of times.</p>
<p><code>metric_id</code> ID of the metric being logged.</p>
<p><code>count</code> The number of times the event has occurred. The value should
be positive as a value of 0 is ignored.</p>
<p><code>event_codes</code> Ordered list of parameters, one for each of the metric's
dimensions. Occurrence counts with the same event codes are aggregated
based on these parameters.</p>
#### Request {#MetricEventLogger.LogOccurrence_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>metric_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
<tr>
<td><code>count</code></td>
<td>
<code>uint64</code>
</td>
</tr>
<tr>
<td><code>event_codes</code></td>
<td>
<code><a class='link' href='#EventVector'>EventVector</a></code>
</td>
</tr>
</table>
#### Response {#MetricEventLogger.LogOccurrence_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>result</code></td>
<td>
<code><a class='link' href='#MetricEventLogger_LogOccurrence_Result'>MetricEventLogger_LogOccurrence_Result</a></code>
</td>
</tr>
</table>
### LogString {#MetricEventLogger.LogString}
<p>Logs a string value that was observed.</p>
<p><code>metric_id</code> ID of the metric being logged.</p>
<p><code>string_value</code> The string to log.</p>
<p><code>event_codes</code> Ordered list of parameters, one for each of the metric's
dimensions. Counts of logged strings are aggregated separately based on
these parameters.</p>
#### Request {#MetricEventLogger.LogString_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>metric_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
<tr>
<td><code>string_value</code></td>
<td>
<code>string[256]</code>
</td>
</tr>
<tr>
<td><code>event_codes</code></td>
<td>
<code><a class='link' href='#EventVector'>EventVector</a></code>
</td>
</tr>
</table>
#### Response {#MetricEventLogger.LogString_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>result</code></td>
<td>
<code><a class='link' href='#MetricEventLogger_LogString_Result'>MetricEventLogger_LogString_Result</a></code>
</td>
</tr>
</table>
## MetricEventLoggerFactory {#MetricEventLoggerFactory}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=72)*
<p>A factory that is used to create a MetricEventLogger for a specific project.</p>
### CreateMetricEventLogger {#MetricEventLoggerFactory.CreateMetricEventLogger}
<p>Create a MetricEventLogger for the project specified by <code>project_spec</code>.</p>
#### Request {#MetricEventLoggerFactory.CreateMetricEventLogger_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>project_spec</code></td>
<td>
<code><a class='link' href='#ProjectSpec'>ProjectSpec</a></code>
</td>
</tr>
<tr>
<td><code>logger</code></td>
<td>
<code>server_end&lt;<a class='link' href='#MetricEventLogger'>MetricEventLogger</a>&gt;</code>
</td>
</tr>
</table>
#### Response {#MetricEventLoggerFactory.CreateMetricEventLogger_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>result</code></td>
<td>
<code><a class='link' href='#MetricEventLoggerFactory_CreateMetricEventLogger_Result'>MetricEventLoggerFactory_CreateMetricEventLogger_Result</a></code>
</td>
</tr>
</table>
### CreateMetricEventLoggerWithExperiments {#MetricEventLoggerFactory.CreateMetricEventLoggerWithExperiments}
<p>Create a MetricEventLogger with experiment metadata.</p>
<p>This temporary method exposes experiment data to Cobalt directly from
components. In the future, experiment state will be managed by the
system and passed directly to Cobalt. Contact the Cobalt team before
using this interface.</p>
<p>To update experiment state create a new logger.</p>
#### Request {#MetricEventLoggerFactory.CreateMetricEventLoggerWithExperiments_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>project_spec</code></td>
<td>
<code><a class='link' href='#ProjectSpec'>ProjectSpec</a></code>
</td>
</tr>
<tr>
<td><code>experiment_ids</code></td>
<td>
<code>vector&lt;uint32&gt;[100]</code>
</td>
</tr>
<tr>
<td><code>logger</code></td>
<td>
<code>server_end&lt;<a class='link' href='#MetricEventLogger'>MetricEventLogger</a>&gt;</code>
</td>
</tr>
</table>
#### Response {#MetricEventLoggerFactory.CreateMetricEventLoggerWithExperiments_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>result</code></td>
<td>
<code><a class='link' href='#MetricEventLoggerFactory_CreateMetricEventLoggerWithExperiments_Result'>MetricEventLoggerFactory_CreateMetricEventLoggerWithExperiments_Result</a></code>
</td>
</tr>
</table>
## **STRUCTS**
### HistogramBucket {#HistogramBucket data-text="HistogramBucket"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=238)*
<p>One bucket of a histogram, used by the method LogIntegerHistogram.</p>
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="HistogramBucket.index">
<td><code>index</code></td>
<td>
<code>uint32</code>
</td>
<td><p>The index of the bucket. The metric includes a specification
of a sequence of N+1 integer-range buckets that are indexed from
0, the underflow bucket, to N, the overflow bucket.</p>
</td>
<td>No default</td>
</tr>
<tr id="HistogramBucket.count">
<td><code>count</code></td>
<td>
<code>uint64</code>
</td>
<td><p>The number of values in that bucket.
To save space/memory/bandwidth, empty buckets should not be included.</p>
</td>
<td>No default</td>
</tr>
</table>
### MetricEvent {#MetricEvent data-text="MetricEvent"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=190)*
<p>A specification of an event that occurred to be passed to LogMetricEvents().</p>
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="MetricEvent.metric_id">
<td><code>metric_id</code></td>
<td>
<code>uint32</code>
</td>
<td><p>ID of the metric being logged.</p>
</td>
<td>No default</td>
</tr>
<tr id="MetricEvent.event_codes">
<td><code>event_codes</code></td>
<td>
<code><a class='link' href='#EventVector'>EventVector</a></code>
</td>
<td><p><code>event_codes</code> Ordered list of parameters, one for each of the metric's
dimensions.</p>
</td>
<td>No default</td>
</tr>
<tr id="MetricEvent.payload">
<td><code>payload</code></td>
<td>
<code><a class='link' href='#MetricEventPayload'>MetricEventPayload</a></code>
</td>
<td><p>The metric-type-specific data for the event being logged.</p>
</td>
<td>No default</td>
</tr>
</table>
### MetricEventLoggerFactory_CreateMetricEventLoggerWithExperiments_Response {#MetricEventLoggerFactory_CreateMetricEventLoggerWithExperiments_Response data-text="MetricEventLoggerFactory_CreateMetricEventLoggerWithExperiments_Response"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=91)*
&lt;EMPTY&gt;
### MetricEventLoggerFactory_CreateMetricEventLogger_Response {#MetricEventLoggerFactory_CreateMetricEventLogger_Response data-text="MetricEventLoggerFactory_CreateMetricEventLogger_Response"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=77)*
&lt;EMPTY&gt;
### MetricEventLogger_LogIntegerHistogram_Response {#MetricEventLogger_LogIntegerHistogram_Response data-text="MetricEventLogger_LogIntegerHistogram_Response"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=152)*
&lt;EMPTY&gt;
### MetricEventLogger_LogInteger_Response {#MetricEventLogger_LogInteger_Response data-text="MetricEventLogger_LogInteger_Response"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=136)*
&lt;EMPTY&gt;
### MetricEventLogger_LogMetricEvents_Response {#MetricEventLogger_LogMetricEvents_Response data-text="MetricEventLogger_LogMetricEvents_Response"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=173)*
&lt;EMPTY&gt;
### MetricEventLogger_LogOccurrence_Response {#MetricEventLogger_LogOccurrence_Response data-text="MetricEventLogger_LogOccurrence_Response"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=121)*
&lt;EMPTY&gt;
### MetricEventLogger_LogString_Response {#MetricEventLogger_LogString_Response data-text="MetricEventLogger_LogString_Response"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=167)*
&lt;EMPTY&gt;
## **ENUMS**
### Error [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Error data-text="Error"}
Type: <code>int32</code>
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=40)*
<p>Error codes for MetricEventLogger operations.</p>
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="Error.INVALID_ARGUMENTS">
<td><h3 id="Error.INVALID_ARGUMENTS" class="add-link hide-from-toc">INVALID_ARGUMENTS</h3></td>
<td><code>1</code></td>
<td><p>For example, the supplied metric id is invalid.</p>
</td>
</tr>
<tr id="Error.EVENT_TOO_BIG">
<td><h3 id="Error.EVENT_TOO_BIG" class="add-link hide-from-toc">EVENT_TOO_BIG</h3></td>
<td><code>2</code></td>
<td><p>An attempt was made to log an Event whose serialized size exceeds
MAX_BYTES_PER_EVENT.</p>
</td>
</tr>
<tr id="Error.BUFFER_FULL">
<td><h3 id="Error.BUFFER_FULL" class="add-link hide-from-toc">BUFFER_FULL</h3></td>
<td><code>3</code></td>
<td><p>The logger's local buffer is temporarily full and cannot handle any more
Events at this time. Try again later. This condition should be rare.</p>
</td>
</tr>
<tr id="Error.SHUT_DOWN">
<td><h3 id="Error.SHUT_DOWN" class="add-link hide-from-toc">SHUT_DOWN</h3></td>
<td><code>4</code></td>
<td></td>
</tr>
<tr id="Error.INTERNAL_ERROR">
<td><h3 id="Error.INTERNAL_ERROR" class="add-link hide-from-toc">INTERNAL_ERROR</h3></td>
<td><code>-1</code></td>
<td><p>Catch-all for unexpected errors.</p>
</td>
</tr>
</table>
## **TABLES**
### ProjectSpec {#ProjectSpec data-text="ProjectSpec"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=61)*
<p>A specification identifying a project to log events for.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="ProjectSpec.customer_id">
<td><h3 id="ProjectSpec.customer_id" class="add-link hide-from-toc">1</h3></td>
<td><code>customer_id</code></td>
<td>
<code>uint32</code>
</td>
<td><p>The customer ID. If omitted (i.e. set to 0) then it defaults to the
customer ID for the default &quot;fuchsia&quot; customer.</p>
</td>
</tr>
<tr id="ProjectSpec.project_id">
<td><h3 id="ProjectSpec.project_id" class="add-link hide-from-toc">2</h3></td>
<td><code>project_id</code></td>
<td>
<code>uint32</code>
</td>
<td><p>The ID of the project.</p>
</td>
</tr>
</table>
## **UNIONS**
### MetricEventLoggerFactory_CreateMetricEventLoggerWithExperiments_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#MetricEventLoggerFactory_CreateMetricEventLoggerWithExperiments_Result data-text="MetricEventLoggerFactory_CreateMetricEventLoggerWithExperiments_Result"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=91)*
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="MetricEventLoggerFactory_CreateMetricEventLoggerWithExperiments_Result.response">
<td><h3 id="MetricEventLoggerFactory_CreateMetricEventLoggerWithExperiments_Result.response" class="add-link hide-from-toc">1</h3></td>
<td><code>response</code></td>
<td>
<code><a class='link' href='#MetricEventLoggerFactory_CreateMetricEventLoggerWithExperiments_Response'>MetricEventLoggerFactory_CreateMetricEventLoggerWithExperiments_Response</a></code>
</td>
<td></td>
</tr>
<tr id="MetricEventLoggerFactory_CreateMetricEventLoggerWithExperiments_Result.err">
<td><h3 id="MetricEventLoggerFactory_CreateMetricEventLoggerWithExperiments_Result.err" class="add-link hide-from-toc">2</h3></td>
<td><code>err</code></td>
<td>
<code><a class='link' href='#Error'>Error</a></code>
</td>
<td></td>
</tr>
</table>
### MetricEventLoggerFactory_CreateMetricEventLogger_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#MetricEventLoggerFactory_CreateMetricEventLogger_Result data-text="MetricEventLoggerFactory_CreateMetricEventLogger_Result"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=77)*
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="MetricEventLoggerFactory_CreateMetricEventLogger_Result.response">
<td><h3 id="MetricEventLoggerFactory_CreateMetricEventLogger_Result.response" class="add-link hide-from-toc">1</h3></td>
<td><code>response</code></td>
<td>
<code><a class='link' href='#MetricEventLoggerFactory_CreateMetricEventLogger_Response'>MetricEventLoggerFactory_CreateMetricEventLogger_Response</a></code>
</td>
<td></td>
</tr>
<tr id="MetricEventLoggerFactory_CreateMetricEventLogger_Result.err">
<td><h3 id="MetricEventLoggerFactory_CreateMetricEventLogger_Result.err" class="add-link hide-from-toc">2</h3></td>
<td><code>err</code></td>
<td>
<code><a class='link' href='#Error'>Error</a></code>
</td>
<td></td>
</tr>
</table>
### MetricEventLogger_LogIntegerHistogram_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#MetricEventLogger_LogIntegerHistogram_Result data-text="MetricEventLogger_LogIntegerHistogram_Result"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=152)*
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="MetricEventLogger_LogIntegerHistogram_Result.response">
<td><h3 id="MetricEventLogger_LogIntegerHistogram_Result.response" class="add-link hide-from-toc">1</h3></td>
<td><code>response</code></td>
<td>
<code><a class='link' href='#MetricEventLogger_LogIntegerHistogram_Response'>MetricEventLogger_LogIntegerHistogram_Response</a></code>
</td>
<td></td>
</tr>
<tr id="MetricEventLogger_LogIntegerHistogram_Result.err">
<td><h3 id="MetricEventLogger_LogIntegerHistogram_Result.err" class="add-link hide-from-toc">2</h3></td>
<td><code>err</code></td>
<td>
<code><a class='link' href='#Error'>Error</a></code>
</td>
<td></td>
</tr>
</table>
### MetricEventLogger_LogInteger_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#MetricEventLogger_LogInteger_Result data-text="MetricEventLogger_LogInteger_Result"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=136)*
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="MetricEventLogger_LogInteger_Result.response">
<td><h3 id="MetricEventLogger_LogInteger_Result.response" class="add-link hide-from-toc">1</h3></td>
<td><code>response</code></td>
<td>
<code><a class='link' href='#MetricEventLogger_LogInteger_Response'>MetricEventLogger_LogInteger_Response</a></code>
</td>
<td></td>
</tr>
<tr id="MetricEventLogger_LogInteger_Result.err">
<td><h3 id="MetricEventLogger_LogInteger_Result.err" class="add-link hide-from-toc">2</h3></td>
<td><code>err</code></td>
<td>
<code><a class='link' href='#Error'>Error</a></code>
</td>
<td></td>
</tr>
</table>
### MetricEventLogger_LogMetricEvents_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#MetricEventLogger_LogMetricEvents_Result data-text="MetricEventLogger_LogMetricEvents_Result"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=173)*
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="MetricEventLogger_LogMetricEvents_Result.response">
<td><h3 id="MetricEventLogger_LogMetricEvents_Result.response" class="add-link hide-from-toc">1</h3></td>
<td><code>response</code></td>
<td>
<code><a class='link' href='#MetricEventLogger_LogMetricEvents_Response'>MetricEventLogger_LogMetricEvents_Response</a></code>
</td>
<td></td>
</tr>
<tr id="MetricEventLogger_LogMetricEvents_Result.err">
<td><h3 id="MetricEventLogger_LogMetricEvents_Result.err" class="add-link hide-from-toc">2</h3></td>
<td><code>err</code></td>
<td>
<code><a class='link' href='#Error'>Error</a></code>
</td>
<td></td>
</tr>
</table>
### MetricEventLogger_LogOccurrence_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#MetricEventLogger_LogOccurrence_Result data-text="MetricEventLogger_LogOccurrence_Result"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=121)*
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="MetricEventLogger_LogOccurrence_Result.response">
<td><h3 id="MetricEventLogger_LogOccurrence_Result.response" class="add-link hide-from-toc">1</h3></td>
<td><code>response</code></td>
<td>
<code><a class='link' href='#MetricEventLogger_LogOccurrence_Response'>MetricEventLogger_LogOccurrence_Response</a></code>
</td>
<td></td>
</tr>
<tr id="MetricEventLogger_LogOccurrence_Result.err">
<td><h3 id="MetricEventLogger_LogOccurrence_Result.err" class="add-link hide-from-toc">2</h3></td>
<td><code>err</code></td>
<td>
<code><a class='link' href='#Error'>Error</a></code>
</td>
<td></td>
</tr>
</table>
### MetricEventLogger_LogString_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#MetricEventLogger_LogString_Result data-text="MetricEventLogger_LogString_Result"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=167)*
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="MetricEventLogger_LogString_Result.response">
<td><h3 id="MetricEventLogger_LogString_Result.response" class="add-link hide-from-toc">1</h3></td>
<td><code>response</code></td>
<td>
<code><a class='link' href='#MetricEventLogger_LogString_Response'>MetricEventLogger_LogString_Response</a></code>
</td>
<td></td>
</tr>
<tr id="MetricEventLogger_LogString_Result.err">
<td><h3 id="MetricEventLogger_LogString_Result.err" class="add-link hide-from-toc">2</h3></td>
<td><code>err</code></td>
<td>
<code><a class='link' href='#Error'>Error</a></code>
</td>
<td></td>
</tr>
</table>
### MetricEventPayload [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#MetricEventPayload data-text="MetricEventPayload"}
*Defined in [fuchsia.metrics/metric_event_logger.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=203)*
<p>The variadic part of a MetricEvent.</p>
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="MetricEventPayload.count">
<td><h3 id="MetricEventPayload.count" class="add-link hide-from-toc">1</h3></td>
<td><code>count</code></td>
<td>
<code>uint64</code>
</td>
<td><p>The number of times the event has occurred, see LogOccurrence().</p>
</td>
</tr>
<tr id="MetricEventPayload.integer_value">
<td><h3 id="MetricEventPayload.integer_value" class="add-link hide-from-toc">2</h3></td>
<td><code>integer_value</code></td>
<td>
<code>int64</code>
</td>
<td><p>The integer measured, see LogInteger().</p>
</td>
</tr>
<tr id="MetricEventPayload.histogram">
<td><h3 id="MetricEventPayload.histogram" class="add-link hide-from-toc">3</h3></td>
<td><code>histogram</code></td>
<td>
<code><a class='link' href='#IntegerHistogram'>IntegerHistogram</a></code>
</td>
<td><p>The collection of approximate integer measurements, see
LogIntegerHistogram().</p>
</td>
</tr>
<tr id="MetricEventPayload.string_value">
<td><h3 id="MetricEventPayload.string_value" class="add-link hide-from-toc">4</h3></td>
<td><code>string_value</code></td>
<td>
<code>string[256]</code>
</td>
<td><p>The string to log, see LogString().</p>
</td>
</tr>
</table>
## **CONSTANTS**
<table>
<tr><th>Name</th><th>Value</th><th>Type</th><th>Description</th></tr>
<tr id="MAX_BATCHED_EVENTS">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=28">MAX_BATCHED_EVENTS</a></td>
<td>
<code>500</code>
</td>
<td><code>uint32</code></td>
<td><p>Maximum number of events that may be logged in a single FIDL call.</p>
</td>
</tr>
<tr id="MAX_BYTES_PER_EVENT">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=21">MAX_BYTES_PER_EVENT</a></td>
<td>
<code>102400</code>
</td>
<td><code>int64</code></td>
<td><p>The maximum size of a single Event is 100 KB.</p>
</td>
</tr>
<tr id="MAX_EXPERIMENT_IDS">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=37">MAX_EXPERIMENT_IDS</a></td>
<td>
<code>100</code>
</td>
<td><code>uint32</code></td>
<td><p>Maximum number of experiment ids that can be provided to a single logger.</p>
</td>
</tr>
<tr id="MAX_HISTOGRAM_BUCKETS">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=25">MAX_HISTOGRAM_BUCKETS</a></td>
<td>
<code>500</code>
</td>
<td><code>uint32</code></td>
<td><p>This is intended as a reasonable maximum number of histogram buckets per
event.</p>
</td>
</tr>
<tr id="MAX_METRIC_DIMENSIONS">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=34">MAX_METRIC_DIMENSIONS</a></td>
<td>
<code>10</code>
</td>
<td><code>uint32</code></td>
<td><p>Maximum number of event codes that can be associated with a single event.</p>
</td>
</tr>
<tr id="MAX_STRING_EVENT_SIZE">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=31">MAX_STRING_EVENT_SIZE</a></td>
<td>
<code>256</code>
</td>
<td><code>uint32</code></td>
<td><p>String events should not be longer than this.</p>
</td>
</tr>
</table>
## **ALIASES**
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="EventVector">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=97">EventVector</a></td>
<td>
<code>vector</code>[<code><a class='link' href='#MAX_METRIC_DIMENSIONS'>MAX_METRIC_DIMENSIONS</a></code>]</td>
<td><p>A vector of event codes. When used in one of the Log*() calls below,
there must be one event code for each dimension of the metric whose
metric_id is supplied, or else the call will return INVALID_ARGUMENTS.</p>
</td>
</tr>
<tr id="IntegerHistogram">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.metrics/metric_event_logger.fidl;l=103">IntegerHistogram</a></td>
<td>
<code>vector</code>[<code><a class='link' href='#MAX_HISTOGRAM_BUCKETS'>MAX_HISTOGRAM_BUCKETS</a></code>]</td>
<td><p>A histogram that assigns a count to each of several integer ranges.
To save space/memory/bandwidth, each bucket index should only be included
once, and empty buckets should not be included. The order of the vector
is immaterial.</p>
</td>
</tr>
</table>