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
|
// Copyright 2016 Istio Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package istio.mixer.v1;
option go_package = "istio.io/api/mixer/v1";
import "gogoproto/gogo.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
option (gogoproto.goproto_getters_all) = false;
option (gogoproto.equal_all) = false;
option (gogoproto.gostring_all) = false;
option (gogoproto.stable_marshaler_all) = true;
option cc_enable_arenas = true;
// Attributes represents a set of typed name/value pairs. Many of Mixer's
// API either consume and/or return attributes.
//
// Istio uses attributes to control the runtime behavior of services running in the service mesh.
// Attributes are named and typed pieces of metadata describing ingress and egress traffic and the
// environment this traffic occurs in. An Istio attribute carries a specific piece
// of information such as the error code of an API request, the latency of an API request, or the
// original IP address of a TCP connection. For example:
//
// ```yaml
// request.path: xyz/abc
// request.size: 234
// request.time: 12:34:56.789 04/17/2017
// source.ip: 192.168.0.1
// target.service: example
// ```
//
// A given Istio deployment has a fixed vocabulary of attributes that it understands.
// The specific vocabulary is determined by the set of attribute producers being used
// in the deployment. The primary attribute producer in Istio is Envoy, although
// specialized Mixer adapters and services can also generate attributes.
//
// The common baseline set of attributes available in most Istio deployments is defined
// [here](https://istio.io/docs/reference/config/policy-and-telemetry/attribute-vocabulary/).
//
// Attributes are strongly typed. The supported attribute types are defined by
// [ValueType](https://github.com/istio/api/blob/master/policy/v1beta1/value_type.proto).
// Each type of value is encoded into one of the so-called transport types present
// in this message.
//
// Defines a map of attributes in uncompressed format.
// Following places may use this message:
// 1) Configure Istio/Proxy with static per-proxy attributes, such as source.uid.
// 2) Service IDL definition to extract api attributes for active requests.
// 3) Forward attributes from client proxy to server proxy for HTTP requests.
message Attributes {
// A map of attribute name to its value.
map<string, AttributeValue> attributes = 1;
// Specifies one attribute value with different type.
message AttributeValue {
// The attribute value.
oneof value {
// Used for values of type STRING, DNS_NAME, EMAIL_ADDRESS, and URI
string string_value = 2;
// Used for values of type INT64
int64 int64_value = 3;
// Used for values of type DOUBLE
double double_value = 4;
// Used for values of type BOOL
bool bool_value = 5;
// Used for values of type BYTES
bytes bytes_value = 6;
// Used for values of type TIMESTAMP
google.protobuf.Timestamp timestamp_value = 7;
// Used for values of type DURATION
google.protobuf.Duration duration_value = 8;
// Used for values of type STRING_MAP
StringMap string_map_value = 9;
}
}
// Defines a string map.
message StringMap {
// Holds a set of name/value pairs.
map<string, string> entries = 1;
}
}
// Defines a list of attributes in compressed format optimized for transport.
// Within this message, strings are referenced using integer indices into
// one of two string dictionaries. Positive integers index into the global
// deployment-wide dictionary, whereas negative integers index into the message-level
// dictionary instead. The message-level dictionary is carried by the
// `words` field of this message, the deployment-wide dictionary is determined via
// configuration.
message CompressedAttributes {
// The message-level dictionary.
repeated string words = 1;
// Holds attributes of type STRING, DNS_NAME, EMAIL_ADDRESS, URI
map<sint32, sint32> strings = 2;
// Holds attributes of type INT64
map<sint32, int64> int64s = 3;
// Holds attributes of type DOUBLE
map<sint32, double> doubles = 4;
// Holds attributes of type BOOL
map<sint32, bool> bools = 5;
// Holds attributes of type TIMESTAMP
map<sint32, google.protobuf.Timestamp> timestamps = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
// Holds attributes of type DURATION
map<sint32, google.protobuf.Duration> durations = 7 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true];
// Holds attributes of type BYTES
map<sint32, bytes> bytes = 8;
// Holds attributes of type STRING_MAP
map<sint32, StringMap> string_maps = 9 [(gogoproto.nullable) = false];
}
// A map of string to string. The keys and values in this map are dictionary
// indices (see the [Attributes][istio.mixer.v1.CompressedAttributes] message for an explanation)
message StringMap {
// Holds a set of name/value pairs.
map<sint32, sint32> entries = 1;
}
|