1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
// This file is @generated by prost-build.
/// This message defines the standard attribute vocabulary for Google APIs.
///
/// An attribute is a piece of metadata that describes an activity on a network
/// service. For example, the size of an HTTP request, or the status code of
/// an HTTP response.
///
/// Each attribute has a type and a name, which is logically defined as
/// a proto message field in `AttributeContext`. The field type becomes the
/// attribute type, and the field path becomes the attribute name. For example,
/// the attribute `source.ip` maps to field `AttributeContext.source.ip`.
///
/// This message definition is guaranteed not to have any wire breaking change.
/// So you can use it directly for passing attributes across different systems.
///
/// NOTE: Different system may generate different subset of attributes. Please
/// verify the system specification before relying on an attribute generated
/// a system.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AttributeContext {
    /// The origin of a network activity. In a multi hop network activity,
    /// the origin represents the sender of the first hop. For the first hop,
    /// the `source` and the `origin` must have the same content.
    #[prost(message, optional, tag = "7")]
    pub origin: ::core::option::Option<attribute_context::Peer>,
    /// The source of a network activity, such as starting a TCP connection.
    /// In a multi hop network activity, the source represents the sender of the
    /// last hop.
    #[prost(message, optional, tag = "1")]
    pub source: ::core::option::Option<attribute_context::Peer>,
    /// The destination of a network activity, such as accepting a TCP connection.
    /// In a multi hop network activity, the destination represents the receiver of
    /// the last hop.
    #[prost(message, optional, tag = "2")]
    pub destination: ::core::option::Option<attribute_context::Peer>,
    /// Represents a network request, such as an HTTP request.
    #[prost(message, optional, tag = "3")]
    pub request: ::core::option::Option<attribute_context::Request>,
    /// Represents a network response, such as an HTTP response.
    #[prost(message, optional, tag = "4")]
    pub response: ::core::option::Option<attribute_context::Response>,
    /// Represents a target resource that is involved with a network activity.
    /// If multiple resources are involved with an activity, this must be the
    /// primary one.
    #[prost(message, optional, tag = "5")]
    pub resource: ::core::option::Option<attribute_context::Resource>,
    /// Represents an API operation that is involved to a network activity.
    #[prost(message, optional, tag = "6")]
    pub api: ::core::option::Option<attribute_context::Api>,
    /// Supports extensions for advanced use cases, such as logs and metrics.
    #[prost(message, repeated, tag = "8")]
    pub extensions: ::prost::alloc::vec::Vec<::prost_types::Any>,
}
/// Nested message and enum types in `AttributeContext`.
pub mod attribute_context {
    /// This message defines attributes for a node that handles a network request.
    /// The node can be either a service or an application that sends, forwards,
    /// or receives the request. Service peers should fill in
    /// `principal` and `labels` as appropriate.
    #[allow(clippy::derive_partial_eq_without_eq)]
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct Peer {
        /// The IP address of the peer.
        #[prost(string, tag = "1")]
        pub ip: ::prost::alloc::string::String,
        /// The network port of the peer.
        #[prost(int64, tag = "2")]
        pub port: i64,
        /// The labels associated with the peer.
        #[prost(btree_map = "string, string", tag = "6")]
        pub labels: ::prost::alloc::collections::BTreeMap<
            ::prost::alloc::string::String,
            ::prost::alloc::string::String,
        >,
        /// The identity of this peer. Similar to `Request.auth.principal`, but
        /// relative to the peer instead of the request. For example, the
        /// identity associated with a load balancer that forwarded the request.
        #[prost(string, tag = "7")]
        pub principal: ::prost::alloc::string::String,
        /// The CLDR country/region code associated with the above IP address.
        /// If the IP address is private, the `region_code` should reflect the
        /// physical location where this peer is running.
        #[prost(string, tag = "8")]
        pub region_code: ::prost::alloc::string::String,
    }
    /// This message defines attributes associated with API operations, such as
    /// a network API request. The terminology is based on the conventions used
    /// by Google APIs, Istio, and OpenAPI.
    #[allow(clippy::derive_partial_eq_without_eq)]
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct Api {
        /// The API service name. It is a logical identifier for a networked API,
        /// such as "pubsub.googleapis.com". The naming syntax depends on the
        /// API management system being used for handling the request.
        #[prost(string, tag = "1")]
        pub service: ::prost::alloc::string::String,
        /// The API operation name. For gRPC requests, it is the fully qualified API
        /// method name, such as "google.pubsub.v1.Publisher.Publish". For OpenAPI
        /// requests, it is the `operationId`, such as "getPet".
        #[prost(string, tag = "2")]
        pub operation: ::prost::alloc::string::String,
        /// The API protocol used for sending the request, such as "http", "https",
        /// "grpc", or "internal".
        #[prost(string, tag = "3")]
        pub protocol: ::prost::alloc::string::String,
        /// The API version associated with the API operation above, such as "v1" or
        /// "v1alpha1".
        #[prost(string, tag = "4")]
        pub version: ::prost::alloc::string::String,
    }
    /// This message defines request authentication attributes. Terminology is
    /// based on the JSON Web Token (JWT) standard, but the terms also
    /// correlate to concepts in other standards.
    #[allow(clippy::derive_partial_eq_without_eq)]
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct Auth {
        /// The authenticated principal. Reflects the issuer (`iss`) and subject
        /// (`sub`) claims within a JWT. The issuer and subject should be `/`
        /// delimited, with `/` percent-encoded within the subject fragment. For
        /// Google accounts, the principal format is:
        /// "<https://accounts.google.com/{id}">
        #[prost(string, tag = "1")]
        pub principal: ::prost::alloc::string::String,
        /// The intended audience(s) for this authentication information. Reflects
        /// the audience (`aud`) claim within a JWT. The audience
        /// value(s) depends on the `issuer`, but typically include one or more of
        /// the following pieces of information:
        ///
        /// *  The services intended to receive the credential. For example,
        ///     \["<https://pubsub.googleapis.com/",> "<https://storage.googleapis.com/"\].>
        /// *  A set of service-based scopes. For example,
        ///     \["<https://www.googleapis.com/auth/cloud-platform"\].>
        /// *  The client id of an app, such as the Firebase project id for JWTs
        ///     from Firebase Auth.
        ///
        /// Consult the documentation for the credential issuer to determine the
        /// information provided.
        #[prost(string, repeated, tag = "2")]
        pub audiences: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
        /// The authorized presenter of the credential. Reflects the optional
        /// Authorized Presenter (`azp`) claim within a JWT or the
        /// OAuth client id. For example, a Google Cloud Platform client id looks
        /// as follows: "123456789012.apps.googleusercontent.com".
        #[prost(string, tag = "3")]
        pub presenter: ::prost::alloc::string::String,
        /// Structured claims presented with the credential. JWTs include
        /// `{key: value}` pairs for standard and private claims. The following
        /// is a subset of the standard required and optional claims that would
        /// typically be presented for a Google-based JWT:
        ///
        ///     {'iss': 'accounts.google.com',
        ///      'sub': '113289723416554971153',
        ///      'aud': \['123456789012', 'pubsub.googleapis.com'\],
        ///      'azp': '123456789012.apps.googleusercontent.com',
        ///      'email': 'jsmith@example.com',
        ///      'iat': 1353601026,
        ///      'exp': 1353604926}
        ///
        /// SAML assertions are similarly specified, but with an identity provider
        /// dependent structure.
        #[prost(message, optional, tag = "4")]
        pub claims: ::core::option::Option<::prost_types::Struct>,
        /// A list of access level resource names that allow resources to be
        /// accessed by authenticated requester. It is part of Secure GCP processing
        /// for the incoming request. An access level string has the format:
        /// "//{api_service_name}/accessPolicies/{policy_id}/accessLevels/{short_name}"
        ///
        /// Example:
        /// "//accesscontextmanager.googleapis.com/accessPolicies/MY_POLICY_ID/accessLevels/MY_LEVEL"
        #[prost(string, repeated, tag = "5")]
        pub access_levels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
    }
    /// This message defines attributes for an HTTP request. If the actual
    /// request is not an HTTP request, the runtime system should try to map
    /// the actual request to an equivalent HTTP request.
    #[allow(clippy::derive_partial_eq_without_eq)]
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct Request {
        /// The unique ID for a request, which can be propagated to downstream
        /// systems. The ID should have low probability of collision
        /// within a single day for a specific service.
        #[prost(string, tag = "1")]
        pub id: ::prost::alloc::string::String,
        /// The HTTP request method, such as `GET`, `POST`.
        #[prost(string, tag = "2")]
        pub method: ::prost::alloc::string::String,
        /// The HTTP request headers. If multiple headers share the same key, they
        /// must be merged according to the HTTP spec. All header keys must be
        /// lowercased, because HTTP header keys are case-insensitive.
        #[prost(btree_map = "string, string", tag = "3")]
        pub headers: ::prost::alloc::collections::BTreeMap<
            ::prost::alloc::string::String,
            ::prost::alloc::string::String,
        >,
        /// The HTTP URL path, excluding the query parameters.
        #[prost(string, tag = "4")]
        pub path: ::prost::alloc::string::String,
        /// The HTTP request `Host` header value.
        #[prost(string, tag = "5")]
        pub host: ::prost::alloc::string::String,
        /// The HTTP URL scheme, such as `http` and `https`.
        #[prost(string, tag = "6")]
        pub scheme: ::prost::alloc::string::String,
        /// The HTTP URL query in the format of `name1=value1&name2=value2`, as it
        /// appears in the first line of the HTTP request. No decoding is performed.
        #[prost(string, tag = "7")]
        pub query: ::prost::alloc::string::String,
        /// The timestamp when the `destination` service receives the last byte of
        /// the request.
        #[prost(message, optional, tag = "9")]
        pub time: ::core::option::Option<::prost_types::Timestamp>,
        /// The HTTP request size in bytes. If unknown, it must be -1.
        #[prost(int64, tag = "10")]
        pub size: i64,
        /// The network protocol used with the request, such as "http/1.1",
        /// "spdy/3", "h2", "h2c", "webrtc", "tcp", "udp", "quic". See
        /// <https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids>
        /// for details.
        #[prost(string, tag = "11")]
        pub protocol: ::prost::alloc::string::String,
        /// A special parameter for request reason. It is used by security systems
        /// to associate auditing information with a request.
        #[prost(string, tag = "12")]
        pub reason: ::prost::alloc::string::String,
        /// The request authentication. May be absent for unauthenticated requests.
        /// Derived from the HTTP request `Authorization` header or equivalent.
        #[prost(message, optional, tag = "13")]
        pub auth: ::core::option::Option<Auth>,
    }
    /// This message defines attributes for a typical network response. It
    /// generally models semantics of an HTTP response.
    #[allow(clippy::derive_partial_eq_without_eq)]
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct Response {
        /// The HTTP response status code, such as `200` and `404`.
        #[prost(int64, tag = "1")]
        pub code: i64,
        /// The HTTP response size in bytes. If unknown, it must be -1.
        #[prost(int64, tag = "2")]
        pub size: i64,
        /// The HTTP response headers. If multiple headers share the same key, they
        /// must be merged according to HTTP spec. All header keys must be
        /// lowercased, because HTTP header keys are case-insensitive.
        #[prost(btree_map = "string, string", tag = "3")]
        pub headers: ::prost::alloc::collections::BTreeMap<
            ::prost::alloc::string::String,
            ::prost::alloc::string::String,
        >,
        /// The timestamp when the `destination` service sends the last byte of
        /// the response.
        #[prost(message, optional, tag = "4")]
        pub time: ::core::option::Option<::prost_types::Timestamp>,
        /// The amount of time it takes the backend service to fully respond to a
        /// request. Measured from when the destination service starts to send the
        /// request to the backend until when the destination service receives the
        /// complete response from the backend.
        #[prost(message, optional, tag = "5")]
        pub backend_latency: ::core::option::Option<::prost_types::Duration>,
    }
    /// This message defines core attributes for a resource. A resource is an
    /// addressable (named) entity provided by the destination service. For
    /// example, a file stored on a network storage service.
    #[allow(clippy::derive_partial_eq_without_eq)]
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct Resource {
        /// The name of the service that this resource belongs to, such as
        /// `pubsub.googleapis.com`. The service may be different from the DNS
        /// hostname that actually serves the request.
        #[prost(string, tag = "1")]
        pub service: ::prost::alloc::string::String,
        /// The stable identifier (name) of a resource on the `service`. A resource
        /// can be logically identified as "//{resource.service}/{resource.name}".
        /// The differences between a resource name and a URI are:
        ///
        /// *   Resource name is a logical identifier, independent of network
        ///      protocol and API version. For example,
        ///      `//pubsub.googleapis.com/projects/123/topics/news-feed`.
        /// *   URI often includes protocol and version information, so it can
        ///      be used directly by applications. For example,
        ///      `<https://pubsub.googleapis.com/v1/projects/123/topics/news-feed`.>
        ///
        /// See <https://cloud.google.com/apis/design/resource_names> for details.
        #[prost(string, tag = "2")]
        pub name: ::prost::alloc::string::String,
        /// The type of the resource. The syntax is platform-specific because
        /// different platforms define their resources differently.
        ///
        /// For Google APIs, the type format must be "{service}/{kind}", such as
        /// "pubsub.googleapis.com/Topic".
        #[prost(string, tag = "3")]
        pub r#type: ::prost::alloc::string::String,
        /// The labels or tags on the resource, such as AWS resource tags and
        /// Kubernetes resource labels.
        #[prost(btree_map = "string, string", tag = "4")]
        pub labels: ::prost::alloc::collections::BTreeMap<
            ::prost::alloc::string::String,
            ::prost::alloc::string::String,
        >,
        /// The unique identifier of the resource. UID is unique in the time
        /// and space for this resource within the scope of the service. It is
        /// typically generated by the server on successful creation of a resource
        /// and must not be changed. UID is used to uniquely identify resources
        /// with resource name reuses. This should be a UUID4.
        #[prost(string, tag = "5")]
        pub uid: ::prost::alloc::string::String,
        /// Annotations is an unstructured key-value map stored with a resource that
        /// may be set by external tools to store and retrieve arbitrary metadata.
        /// They are not queryable and should be preserved when modifying objects.
        ///
        /// More info: <https://kubernetes.io/docs/user-guide/annotations>
        #[prost(btree_map = "string, string", tag = "6")]
        pub annotations: ::prost::alloc::collections::BTreeMap<
            ::prost::alloc::string::String,
            ::prost::alloc::string::String,
        >,
        /// Mutable. The display name set by clients. Must be <= 63 characters.
        #[prost(string, tag = "7")]
        pub display_name: ::prost::alloc::string::String,
        /// Output only. The timestamp when the resource was created. This may
        /// be either the time creation was initiated or when it was completed.
        #[prost(message, optional, tag = "8")]
        pub create_time: ::core::option::Option<::prost_types::Timestamp>,
        /// Output only. The timestamp when the resource was last updated. Any
        /// change to the resource made by users must refresh this value.
        /// Changes to a resource made by the service should refresh this value.
        #[prost(message, optional, tag = "9")]
        pub update_time: ::core::option::Option<::prost_types::Timestamp>,
        /// Output only. The timestamp when the resource was deleted.
        /// If the resource is not deleted, this must be empty.
        #[prost(message, optional, tag = "10")]
        pub delete_time: ::core::option::Option<::prost_types::Timestamp>,
        /// Output only. An opaque value that uniquely identifies a version or
        /// generation of a resource. It can be used to confirm that the client
        /// and server agree on the ordering of a resource being written.
        #[prost(string, tag = "11")]
        pub etag: ::prost::alloc::string::String,
        /// Immutable. The location of the resource. The location encoding is
        /// specific to the service provider, and new encoding may be introduced
        /// as the service evolves.
        ///
        /// For Google Cloud products, the encoding is what is used by Google Cloud
        /// APIs, such as `us-east1`, `aws-us-east-1`, and `azure-eastus2`. The
        /// semantics of `location` is identical to the
        /// `cloud.googleapis.com/location` label used by some Google Cloud APIs.
        #[prost(string, tag = "12")]
        pub location: ::prost::alloc::string::String,
    }
}
/// `AuditContext` provides information that is needed for audit logging.
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AuditContext {
    /// Serialized audit log.
    #[prost(bytes = "bytes", tag = "1")]
    pub audit_log: ::prost::bytes::Bytes,
    /// An API request message that is scrubbed based on the method annotation.
    /// This field should only be filled if audit_log field is present.
    /// Service Control will use this to assemble a complete log for Cloud Audit
    /// Logs and Google internal audit logs.
    #[prost(message, optional, tag = "2")]
    pub scrubbed_request: ::core::option::Option<::prost_types::Struct>,
    /// An API response message that is scrubbed based on the method annotation.
    /// This field should only be filled if audit_log field is present.
    /// Service Control will use this to assemble a complete log for Cloud Audit
    /// Logs and Google internal audit logs.
    #[prost(message, optional, tag = "3")]
    pub scrubbed_response: ::core::option::Option<::prost_types::Struct>,
    /// Number of scrubbed response items.
    #[prost(int32, tag = "4")]
    pub scrubbed_response_item_count: i32,
    /// Audit resource name which is scrubbed.
    #[prost(string, tag = "5")]
    pub target_resource: ::prost::alloc::string::String,
}