| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| library fuchsia.feedback; |
| |
| /// Registers data useful to attach in feedback reports (crash, user feedback or bug reports). |
| /// |
| /// This can be used by components to augment the data attached to all feedback reports. By default |
| /// the Feedback service attaches data exposed to the platform. This protocol is useful for data |
| /// known by certain components in certain products, but that is not exposed to the platform. |
| /// |
| /// The epitaph ZX_ERR_INVALID_ARGS indicates that the client is sending invalid requests. See |
| /// below for each request why they might be invalid. |
| /// |
| /// The epitaph ZX_ERR_NO_RESOURCES indicates that the server can no longer store additional |
| /// component data and will not service new connections. |
| [Discoverable] |
| protocol ComponentDataRegister { |
| /// Updates or inserts extra component data to be included in feedback reports. |
| /// |
| /// The namespace and each annotation key are used to decide whether to update or insert an |
| /// annotation. If an annotation is already present for a given key within the same namespace, |
| /// update the value, otherwise insert the annotation with that key under that namespace. |
| /// |
| /// For instance, assuming these are the data already held by the server (from previous calls |
| /// to Upsert()): |
| /// { |
| /// "bar": { # namespace |
| /// "channel": "stable", |
| /// }, |
| /// "foo": { # namespace |
| /// "version": "0.2", |
| /// }, |
| /// } |
| /// |
| /// then Upsert({ |
| /// "namespace": "bar", |
| /// "annotations": [ |
| /// "version": "1.2.3.45", |
| /// "channel": "beta", |
| /// ] |
| /// }) would result in the server now holding: |
| /// { |
| /// "bar": { # namespace |
| /// "channel": "beta", # updated |
| /// "version": "1.2.3.45" # inserted |
| /// }, |
| /// "foo": { # namespace |
| /// "version": "0.2", # untouched |
| /// }, |
| /// } |
| /// |
| /// Note that the server will only hold at most MAX_NUM_ANNOTATIONS_PER_NAMESPACE distinct |
| /// annotation keys per namespace, picking up the latest values. |
| Upsert(ComponentData data) -> (); |
| }; |
| |
| const uint32 MAX_NAMESPACE_LENGTH = 32; |
| const uint32 MAX_NUM_ANNOTATIONS_PER_NAMESPACE = 16; |
| |
| /// Data known to a component, but not exposed to the platform, to attach to feedback reports. |
| table ComponentData { |
| /// The top-level namespace associated with the data: |
| /// * Is intended to group related data together and reduce data key collisions across |
| /// namespaces. |
| /// * May be shared by multiple clients, e.g., there could be multiple clients within the same |
| /// component or across components that want to expose related data and they would all use |
| /// the same namespace. |
| /// * Will be prefixed to every data key passed within that namespace in all feedback reports, |
| /// e.g., the annotation "version" would appear as "foo.version" in all feedback reports if |
| /// the namespace is "foo". |
| /// * Must match [a-z\-]+, i.e. only lowercase letters and hyphens or this will result in a |
| /// ZX_ERR_INVALID_ARGS epitaph. |
| /// * Must not match a reserved namespace used internally for platform data, e.g., "build", or |
| /// this will result in a ZX_ERR_INVALID_ARGS epitaph. The list of reserved namespaces is |
| /// internal and subject to change for now. |
| 1: string:MAX_NAMESPACE_LENGTH namespace; |
| |
| /// A vector of key-value string pairs, e.g., `<"version", "1.2.3.45">`. |
| /// |
| /// Keys: |
| /// * Should be unique as only the latest value for a given key in the vector will be |
| /// considered. |
| /// * Must match [a-z\-\.]+, i.e. only lowercase letters, hyphens and periods. Use periods for |
| /// sub-namespacing, e.g., "build.label" and "build.type", so that related annotations are |
| /// grouped together (here related to "build") when sorted lexicographically. |
| 2: vector<Annotation>:MAX_NUM_ANNOTATIONS_PER_NAMESPACE annotations; |
| }; |