You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@skywalking.apache.org by wu...@apache.org on 2018/08/09 11:14:25 UTC
[incubator-skywalking-data-collect-protocol] branch master updated:
Add Istio bypass service proto files.
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking-data-collect-protocol.git
The following commit(s) were added to refs/heads/master by this push:
new 56de879 Add Istio bypass service proto files.
56de879 is described below
commit 56de879d0e5edb073a34f5efe51f2a5187dc7eba
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Thu Aug 9 19:14:19 2018 +0800
Add Istio bypass service proto files.
---
service-mesh-probe/gogoproto/gogo.proto | 136 +++++++++++++++++++
service-mesh-probe/istio-metric.proto | 151 +++++++++++++++++++++
.../mixer/adapter/model/v1beta1/extensions.proto | 48 +++++++
.../mixer/adapter/model/v1beta1/report.proto | 28 ++++
service-mesh-probe/policy/v1beta1/type.proto | 132 ++++++++++++++++++
service-mesh-probe/policy/v1beta1/value_type.proto | 61 +++++++++
6 files changed, 556 insertions(+)
diff --git a/service-mesh-probe/gogoproto/gogo.proto b/service-mesh-probe/gogoproto/gogo.proto
new file mode 100644
index 0000000..ff85176
--- /dev/null
+++ b/service-mesh-probe/gogoproto/gogo.proto
@@ -0,0 +1,136 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2013, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+syntax = "proto2";
+package gogoproto;
+
+import "google/protobuf/descriptor.proto";
+
+option java_package = "com.google.protobuf";
+option java_outer_classname = "GoGoProtos";
+option go_package = "github.com/gogo/protobuf/gogoproto";
+
+extend google.protobuf.EnumOptions {
+ optional bool goproto_enum_prefix = 62001;
+ optional bool goproto_enum_stringer = 62021;
+ optional bool enum_stringer = 62022;
+ optional string enum_customname = 62023;
+ optional bool enumdecl = 62024;
+}
+
+extend google.protobuf.EnumValueOptions {
+ optional string enumvalue_customname = 66001;
+}
+
+extend google.protobuf.FileOptions {
+ optional bool goproto_getters_all = 63001;
+ optional bool goproto_enum_prefix_all = 63002;
+ optional bool goproto_stringer_all = 63003;
+ optional bool verbose_equal_all = 63004;
+ optional bool face_all = 63005;
+ optional bool gostring_all = 63006;
+ optional bool populate_all = 63007;
+ optional bool stringer_all = 63008;
+ optional bool onlyone_all = 63009;
+
+ optional bool equal_all = 63013;
+ optional bool description_all = 63014;
+ optional bool testgen_all = 63015;
+ optional bool benchgen_all = 63016;
+ optional bool marshaler_all = 63017;
+ optional bool unmarshaler_all = 63018;
+ optional bool stable_marshaler_all = 63019;
+
+ optional bool sizer_all = 63020;
+
+ optional bool goproto_enum_stringer_all = 63021;
+ optional bool enum_stringer_all = 63022;
+
+ optional bool unsafe_marshaler_all = 63023;
+ optional bool unsafe_unmarshaler_all = 63024;
+
+ optional bool goproto_extensions_map_all = 63025;
+ optional bool goproto_unrecognized_all = 63026;
+ optional bool gogoproto_import = 63027;
+ optional bool protosizer_all = 63028;
+ optional bool compare_all = 63029;
+ optional bool typedecl_all = 63030;
+ optional bool enumdecl_all = 63031;
+
+ optional bool goproto_registration = 63032;
+ optional bool messagename_all = 63033;
+}
+
+extend google.protobuf.MessageOptions {
+ optional bool goproto_getters = 64001;
+ optional bool goproto_stringer = 64003;
+ optional bool verbose_equal = 64004;
+ optional bool face = 64005;
+ optional bool gostring = 64006;
+ optional bool populate = 64007;
+ optional bool stringer = 67008;
+ optional bool onlyone = 64009;
+
+ optional bool equal = 64013;
+ optional bool description = 64014;
+ optional bool testgen = 64015;
+ optional bool benchgen = 64016;
+ optional bool marshaler = 64017;
+ optional bool unmarshaler = 64018;
+ optional bool stable_marshaler = 64019;
+
+ optional bool sizer = 64020;
+
+ optional bool unsafe_marshaler = 64023;
+ optional bool unsafe_unmarshaler = 64024;
+
+ optional bool goproto_extensions_map = 64025;
+ optional bool goproto_unrecognized = 64026;
+
+ optional bool protosizer = 64028;
+ optional bool compare = 64029;
+
+ optional bool typedecl = 64030;
+
+ optional bool messagename = 64033;
+}
+
+extend google.protobuf.FieldOptions {
+ optional bool nullable = 65001;
+ optional bool embed = 65002;
+ optional string customtype = 65003;
+ optional string customname = 65004;
+ optional string jsontag = 65005;
+ optional string moretags = 65006;
+ optional string casttype = 65007;
+ optional string castkey = 65008;
+ optional string castvalue = 65009;
+
+ optional bool stdtime = 65010;
+ optional bool stdduration = 65011;
+}
diff --git a/service-mesh-probe/istio-metric.proto b/service-mesh-probe/istio-metric.proto
new file mode 100644
index 0000000..f74fa1d
--- /dev/null
+++ b/service-mesh-probe/istio-metric.proto
@@ -0,0 +1,151 @@
+// Copyright 2017 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.
+
+// THIS FILE IS AUTOMATICALLY GENERATED.
+
+syntax = "proto3";
+
+
+// The `metric` template is designed to let you describe runtime metric to dispatch to
+// monitoring backends.
+//
+// Example config:
+//
+// ```yaml
+// apiVersion: "config.istio.io/v1alpha2"
+// kind: metric
+// metadata:
+// name: requestsize
+// namespace: istio-system
+// spec:
+// value: request.size | 0
+// dimensions:
+// source_service: source.service | "unknown"
+// source_version: source.labels["version"] | "unknown"
+// destination_service: destination.service | "unknown"
+// destination_version: destination.labels["version"] | "unknown"
+// response_code: response.code | 200
+// monitored_resource_type: '"UNSPECIFIED"'
+// ```
+//
+// The `metric` template represents a single piece of data to report.
+//
+// When writing the configuration, the value for the fields associated with this template can either be a
+// literal or an [expression](https://istio.io/docs/reference//config/policy-and-telemetry/expression-language/). Please note that if the datatype of a field is not istio.policy.v1beta1.Value,
+// then the expression's [inferred type](https://istio.io/docs/reference//config/policy-and-telemetry/expression-language/#type-checking) must match the datatype of the field.
+package metric;
+
+
+import "gogoproto/gogo.proto";
+import "mixer/adapter/model/v1beta1/extensions.proto";
+import "google/protobuf/any.proto";
+import "mixer/adapter/model/v1beta1/report.proto";
+import "policy/v1beta1/value_type.proto";
+import "policy/v1beta1/type.proto";
+
+option (istio.mixer.adapter.model.v1beta1.template_variety) = TEMPLATE_VARIETY_REPORT;
+option (istio.mixer.adapter.model.v1beta1.template_name) = "metric";
+
+option (gogoproto.goproto_getters_all) = false;
+option (gogoproto.equal_all) = false;
+option (gogoproto.gostring_all) = false;
+
+// HandleMetricService is implemented by backends that wants to handle request-time 'metric' instances.
+service HandleMetricService {
+ // HandleMetric is called by Mixer at request-time to deliver 'metric' instances to the backend.
+ rpc HandleMetric(HandleMetricRequest) returns (istio.mixer.adapter.model.v1beta1.ReportResult);
+
+}
+
+// Request message for HandleMetric method.
+message HandleMetricRequest {
+
+ // 'metric' instances.
+ repeated InstanceMsg instances = 1;
+
+ // Adapter specific handler configuration.
+ //
+ // Note: Backends can also implement [InfrastructureBackend][https://istio.io/docs/reference/config/mixer/istio.mixer.adapter.model.v1beta1.html#InfrastructureBackend]
+ // service and therefore opt to receive handler configuration during session creation through [InfrastructureBackend.CreateSession][TODO: Link to this fragment]
+ // call. In that case, adapter_config will have type_url as 'google.protobuf.Any.type_url' and would contain string
+ // value of session_id (returned from InfrastructureBackend.CreateSession).
+ google.protobuf.Any adapter_config = 2;
+
+ // Id to dedupe identical requests from Mixer.
+ string dedup_id = 3;
+}
+
+// Contains instance payload for 'metric' template. This is passed to infrastructure backends during request-time
+// through HandleMetricService.HandleMetric.
+message InstanceMsg {
+
+ // Name of the instance as specified in configuration.
+ string name = 72295727;
+
+ // The value being reported.
+ istio.policy.v1beta1.Value value = 1;
+
+ // The unique identity of the particular metric to report.
+ map<string, istio.policy.v1beta1.Value> dimensions = 2;
+
+ // Optional. An expression to compute the type of the monitored resource this metric is being reported on.
+ // If the metric backend supports monitored resources, these fields are used to populate that resource. Otherwise
+ // these fields will be ignored by the adapter.
+ string monitored_resource_type = 3;
+
+ // Optional. A set of expressions that will form the dimensions of the monitored resource this metric is being reported on.
+ // If the metric backend supports monitored resources, these fields are used to populate that resource. Otherwise
+ // these fields will be ignored by the adapter.
+ map<string, istio.policy.v1beta1.Value> monitored_resource_dimensions = 4;
+
+}
+
+// Contains inferred type information about specific instance of 'metric' template. This is passed to
+// infrastructure backends during configuration-time through [InfrastructureBackend.CreateSession][TODO: Link to this fragment].
+message Type {
+
+ // The value being reported.
+ istio.policy.v1beta1.ValueType value = 1;
+
+ // The unique identity of the particular metric to report.
+ map<string, istio.policy.v1beta1.ValueType> dimensions = 2;
+
+ // Optional. A set of expressions that will form the dimensions of the monitored resource this metric is being reported on.
+ // If the metric backend supports monitored resources, these fields are used to populate that resource. Otherwise
+ // these fields will be ignored by the adapter.
+ map<string, istio.policy.v1beta1.ValueType> monitored_resource_dimensions = 4;
+
+}
+
+// Represents instance configuration schema for 'metric' template.
+message InstanceParam {
+
+ // The value being reported.
+ string value = 1;
+
+ // The unique identity of the particular metric to report.
+ map<string, string> dimensions = 2;
+
+ // Optional. An expression to compute the type of the monitored resource this metric is being reported on.
+ // If the metric backend supports monitored resources, these fields are used to populate that resource. Otherwise
+ // these fields will be ignored by the adapter.
+ string monitored_resource_type = 3;
+
+ // Optional. A set of expressions that will form the dimensions of the monitored resource this metric is being reported on.
+ // If the metric backend supports monitored resources, these fields are used to populate that resource. Otherwise
+ // these fields will be ignored by the adapter.
+ map<string, string> monitored_resource_dimensions = 4;
+
+}
+
diff --git a/service-mesh-probe/mixer/adapter/model/v1beta1/extensions.proto b/service-mesh-probe/mixer/adapter/model/v1beta1/extensions.proto
new file mode 100644
index 0000000..5237ac9
--- /dev/null
+++ b/service-mesh-probe/mixer/adapter/model/v1beta1/extensions.proto
@@ -0,0 +1,48 @@
+// Copyright 2018 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.adapter.model.v1beta1;
+
+option go_package="istio.io/api/mixer/adapter/model/v1beta1";
+
+import "google/protobuf/descriptor.proto";
+
+
+// The available varieties of templates, controlling the semantics of what an adapter does with each instance.
+enum TemplateVariety {
+ // Makes the template applicable for Mixer's check calls. Instances of such template are created during
+ // report calls in Mixer and passed to the handlers based on the rule configurations.
+ TEMPLATE_VARIETY_CHECK = 0;
+ // Makes the template applicable for Mixer's report calls. Instances of such template are created during
+ // check calls in Mixer and passed to the handlers based on the rule configurations.
+ TEMPLATE_VARIETY_REPORT = 1;
+ // Makes the template applicable for Mixer's quota calls. Instances of such template are created during
+ // quota check calls in Mixer and passed to the handlers based on the rule configurations.
+ TEMPLATE_VARIETY_QUOTA = 2;
+ // Makes the template applicable for Mixer's attribute generation phase. Instances of such template are created during
+ // pre-processing attribute generation phase and passed to the handlers based on the rule configurations.
+ TEMPLATE_VARIETY_ATTRIBUTE_GENERATOR = 3;
+}
+
+// File level options for the template.
+extend google.protobuf.FileOptions {
+ // Required: option for the TemplateVariety.
+ TemplateVariety template_variety = 72295727;
+ // Optional: option for the template name.
+ // If not specified, the last segment of the template proto's package name is used to
+ // derive the template name.
+ string template_name = 72295888;
+}
diff --git a/service-mesh-probe/mixer/adapter/model/v1beta1/report.proto b/service-mesh-probe/mixer/adapter/model/v1beta1/report.proto
new file mode 100644
index 0000000..bc4bee8
--- /dev/null
+++ b/service-mesh-probe/mixer/adapter/model/v1beta1/report.proto
@@ -0,0 +1,28 @@
+// Copyright 2018 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.adapter.model.v1beta1;
+
+option go_package="istio.io/api/mixer/adapter/model/v1beta1";
+
+import "gogoproto/gogo.proto";
+
+option (gogoproto.goproto_getters_all) = false;
+option (gogoproto.equal_all) = false;
+option (gogoproto.gostring_all) = false;
+
+// Expresses the result of a report call.
+message ReportResult {}
diff --git a/service-mesh-probe/policy/v1beta1/type.proto b/service-mesh-probe/policy/v1beta1/type.proto
new file mode 100644
index 0000000..d6027d1
--- /dev/null
+++ b/service-mesh-probe/policy/v1beta1/type.proto
@@ -0,0 +1,132 @@
+// Copyright 2018 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";
+
+// $title: Rules
+// $description: Describes the rules used to configure Mixer's policy and telemetry features.
+// $location: https://istio.io/docs/reference/config/policy-and-telemetry/istio.policy.v1beta1.html
+
+// Describes the rules used to configure Mixer's policy and telemetry features.
+package istio.policy.v1beta1;
+
+option go_package="istio.io/api/policy/v1beta1";
+
+import "google/protobuf/duration.proto";
+import "google/protobuf/timestamp.proto";
+
+// An instance field of type Value denotes that the expression for the field is of dynamic type and can evalaute to any
+// [ValueType][istio.policy.v1beta1.ValueType] enum values. For example, when
+// authoring an instance configuration for a template that has a field `data` of type `istio.policy.v1beta1.Value`,
+// both of the following expressions are valid `data: source.ip | ip("0.0.0.0")`, `data: request.id | ""`;
+// the resulting type is either ValueType.IP_ADDRESS or ValueType.STRING for the two cases respectively.
+//
+// Objects of type Value are also passed to the adapters during request-time. There is a 1:1 mapping between
+// oneof fields in `Value` and enum values inside `ValueType`. Depending on the expression's evaluated `ValueType`,
+// the equivalent oneof field in `Value` is populated by Mixer and passed to the adapters.
+message Value {
+ oneof value {
+ // Used for values of type STRING
+ string string_value = 1;
+
+ // Used for values of type INT64
+ int64 int64_value = 2;
+
+ // Used for values of type DOUBLE
+ double double_value = 3;
+
+ // Used for values of type BOOL
+ bool bool_value = 4;
+
+ // Used for values of type IPAddress
+ IPAddress ip_address_value = 5;
+
+ // Used for values of type TIMESTAMP
+ TimeStamp timestamp_value = 6;
+
+ // Used for values of type DURATION
+ Duration duration_value = 7;
+
+ // Used for values of type EmailAddress
+ EmailAddress email_address_value = 8;
+
+ // Used for values of type DNSName
+ DNSName dns_name_value = 9;
+
+ // Used for values of type Uri
+ Uri uri_value = 10;
+ }
+}
+
+// An instance field of type IPAddress denotes that the expression for the field must evalaute to
+// [ValueType.IP_ADDRESS][istio.policy.v1beta1.ValueType.IP_ADDRESS]
+//
+// Objects of type IPAddress are also passed to the adapters during request-time for the instance fields of
+// type IPAddress
+message IPAddress {
+ // IPAddress encoded as bytes.
+ bytes value = 1;
+}
+
+// An instance field of type Duration denotes that the expression for the field must evalaute to
+// [ValueType.DURATION][istio.policy.v1beta1.ValueType.DURATION]
+//
+// Objects of type Duration are also passed to the adapters during request-time for the instance fields of
+// type Duration
+message Duration {
+ // Duration encoded as google.protobuf.Duration.
+ google.protobuf.Duration value = 1;
+}
+
+// An instance field of type TimeStamp denotes that the expression for the field must evalaute to
+// [ValueType.TIMESTAMP][istio.policy.v1beta1.ValueType.TIMESTAMP]
+//
+// Objects of type TimeStamp are also passed to the adapters during request-time for the instance fields of
+// type TimeStamp
+message TimeStamp {
+ // TimeStamp encoded as google.protobuf.Timestamp.
+ google.protobuf.Timestamp value = 1;
+}
+
+// An instance field of type DNSName denotes that the expression for the field must evalaute to
+// [ValueType.DNS_NAME][istio.policy.v1beta1.ValueType.DNS_NAME]
+//
+// Objects of type DNSName are also passed to the adapters during request-time for the instance fields of
+// type DNSName
+message DNSName {
+ // DNSName encoded as string.
+ string value = 1;
+}
+
+// DO NOT USE !! Under Development
+// An instance field of type EmailAddress denotes that the expression for the field must evalaute to
+// [ValueType.EMAIL_ADDRESS][istio.policy.v1beta1.ValueType.EMAIL_ADDRESS]
+//
+// Objects of type EmailAddress are also passed to the adapters during request-time for the instance fields of
+// type EmailAddress
+message EmailAddress {
+ // EmailAddress encoded as string.
+ string value = 1;
+}
+
+// DO NOT USE !! Under Development
+// An instance field of type Uri denotes that the expression for the field must evalaute to
+// [ValueType.URI][istio.policy.v1beta1.ValueType.URI]
+//
+// Objects of type Uri are also passed to the adapters during request-time for the instance fields of
+// type Uri
+message Uri {
+ // Uri encoded as string.
+ string value = 1;
+}
diff --git a/service-mesh-probe/policy/v1beta1/value_type.proto b/service-mesh-probe/policy/v1beta1/value_type.proto
new file mode 100644
index 0000000..23194f3
--- /dev/null
+++ b/service-mesh-probe/policy/v1beta1/value_type.proto
@@ -0,0 +1,61 @@
+// Copyright 2018 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.policy.v1beta1;
+
+option go_package="istio.io/api/policy/v1beta1";
+
+// ValueType describes the types that values in the Istio system can take. These
+// are used to describe the type of Attributes at run time, describe the type of
+// the result of evaluating an expression, and to describe the runtime type of
+// fields of other descriptors.
+enum ValueType {
+ // Invalid, default value.
+ VALUE_TYPE_UNSPECIFIED = 0;
+
+ // An undiscriminated variable-length string.
+ STRING = 1;
+
+ // An undiscriminated 64-bit signed integer.
+ INT64 = 2;
+
+ // An undiscriminated 64-bit floating-point value.
+ DOUBLE = 3;
+
+ // An undiscriminated boolean value.
+ BOOL = 4;
+
+ // A point in time.
+ TIMESTAMP = 5;
+
+ // An IP address.
+ IP_ADDRESS = 6;
+
+ // An email address.
+ EMAIL_ADDRESS = 7;
+
+ // A URI.
+ URI = 8;
+
+ // A DNS name.
+ DNS_NAME = 9;
+
+ // A span between two points in time.
+ DURATION = 10;
+
+ // A map string -> string, typically used by headers.
+ STRING_MAP = 11;
+}