mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-04-10 03:13:53 +02:00
* Fix construction of path in OpenApiParser (#1265) * Server-Sent Events (#1269) * Server Side Events * fixes * await HandleSseStringAsync(responseMessage, response, bodyData); * 1.7.5-preview-01 * IBlockingQueue * 1.7.5-preview-02 (03 April 2025) * IBlockingQueue * ... * Support OpenApi V31 (#1279) * Support OpenApi V31 * Update src/WireMock.Net.OpenApiParser/Extensions/OpenApiSchemaExtensions.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fx --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Add ProtoDefinitionHelper.FromDirectory (#1263) * Add ProtoDefinitionHelper.FromDirectory * . * unix-windows * move test * imports in the proto files indeed should use a forward slash * updates * . * private Func<IdOrTexts> ProtoDefinitionFunc() * OpenTelemetry * . * fix path utils --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
475 lines
21 KiB
Protocol Buffer
475 lines
21 KiB
Protocol Buffer
// Copyright 2023, OpenTelemetry 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 includes work covered by the following copyright and permission notices:
|
|
//
|
|
// Copyright 2016 Google Inc. All Rights Reserved.
|
|
//
|
|
// 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 opentelemetry.proto.profiles.v1development;
|
|
|
|
import "opentelemetry/proto/common/v1/common.proto";
|
|
import "opentelemetry/proto/resource/v1/resource.proto";
|
|
|
|
option csharp_namespace = "OpenTelemetry.Proto.Profiles.V1Development";
|
|
option java_multiple_files = true;
|
|
option java_package = "io.opentelemetry.proto.profiles.v1development";
|
|
option java_outer_classname = "ProfilesProto";
|
|
option go_package = "go.opentelemetry.io/proto/otlp/profiles/v1development";
|
|
|
|
// Relationships Diagram
|
|
//
|
|
// ┌──────────────────┐ LEGEND
|
|
// │ ProfilesData │
|
|
// └──────────────────┘ ─────▶ embedded
|
|
// │
|
|
// │ 1-n ─────▷ referenced by index
|
|
// ▼
|
|
// ┌──────────────────┐
|
|
// │ ResourceProfiles │
|
|
// └──────────────────┘
|
|
// │
|
|
// │ 1-n
|
|
// ▼
|
|
// ┌──────────────────┐
|
|
// │ ScopeProfiles │
|
|
// └──────────────────┘
|
|
// │
|
|
// │ 1-1
|
|
// ▼
|
|
// ┌──────────────────┐
|
|
// │ Profile │
|
|
// └──────────────────┘
|
|
// │ n-1
|
|
// │ 1-n ┌───────────────────────────────────────┐
|
|
// ▼ │ ▽
|
|
// ┌──────────────────┐ 1-n ┌──────────────┐ ┌──────────┐
|
|
// │ Sample │ ──────▷ │ KeyValue │ │ Link │
|
|
// └──────────────────┘ └──────────────┘ └──────────┘
|
|
// │ 1-n △ △
|
|
// │ 1-n ┌─────────────────┘ │ 1-n
|
|
// ▽ │ │
|
|
// ┌──────────────────┐ n-1 ┌──────────────┐
|
|
// │ Location │ ──────▷ │ Mapping │
|
|
// └──────────────────┘ └──────────────┘
|
|
// │
|
|
// │ 1-n
|
|
// ▼
|
|
// ┌──────────────────┐
|
|
// │ Line │
|
|
// └──────────────────┘
|
|
// │
|
|
// │ 1-1
|
|
// ▽
|
|
// ┌──────────────────┐
|
|
// │ Function │
|
|
// └──────────────────┘
|
|
//
|
|
|
|
// ProfilesData represents the profiles data that can be stored in persistent storage,
|
|
// OR can be embedded by other protocols that transfer OTLP profiles data but do not
|
|
// implement the OTLP protocol.
|
|
//
|
|
// The main difference between this message and collector protocol is that
|
|
// in this message there will not be any "control" or "metadata" specific to
|
|
// OTLP protocol.
|
|
//
|
|
// When new fields are added into this message, the OTLP request MUST be updated
|
|
// as well.
|
|
message ProfilesData {
|
|
// An array of ResourceProfiles.
|
|
// For data coming from a single resource this array will typically contain
|
|
// one element. Intermediary nodes that receive data from multiple origins
|
|
// typically batch the data before forwarding further and in that case this
|
|
// array will contain multiple elements.
|
|
repeated ResourceProfiles resource_profiles = 1;
|
|
}
|
|
|
|
|
|
// A collection of ScopeProfiles from a Resource.
|
|
message ResourceProfiles {
|
|
reserved 1000;
|
|
|
|
// The resource for the profiles in this message.
|
|
// If this field is not set then no resource info is known.
|
|
opentelemetry.proto.resource.v1.Resource resource = 1;
|
|
|
|
// A list of ScopeProfiles that originate from a resource.
|
|
repeated ScopeProfiles scope_profiles = 2;
|
|
|
|
// The Schema URL, if known. This is the identifier of the Schema that the resource data
|
|
// is recorded in. Notably, the last part of the URL path is the version number of the
|
|
// schema: http[s]://server[:port]/path/<version>. To learn more about Schema URL see
|
|
// https://opentelemetry.io/docs/specs/otel/schemas/#schema-url
|
|
// This schema_url applies to the data in the "resource" field. It does not apply
|
|
// to the data in the "scope_profiles" field which have their own schema_url field.
|
|
string schema_url = 3;
|
|
}
|
|
|
|
// A collection of Profiles produced by an InstrumentationScope.
|
|
message ScopeProfiles {
|
|
// The instrumentation scope information for the profiles in this message.
|
|
// Semantically when InstrumentationScope isn't set, it is equivalent with
|
|
// an empty instrumentation scope name (unknown).
|
|
opentelemetry.proto.common.v1.InstrumentationScope scope = 1;
|
|
|
|
// A list of Profiles that originate from an instrumentation scope.
|
|
repeated Profile profiles = 2;
|
|
|
|
// The Schema URL, if known. This is the identifier of the Schema that the profile data
|
|
// is recorded in. Notably, the last part of the URL path is the version number of the
|
|
// schema: http[s]://server[:port]/path/<version>. To learn more about Schema URL see
|
|
// https://opentelemetry.io/docs/specs/otel/schemas/#schema-url
|
|
// This schema_url applies to all profiles in the "profiles" field.
|
|
string schema_url = 3;
|
|
}
|
|
|
|
// Profile is a common stacktrace profile format.
|
|
//
|
|
// Measurements represented with this format should follow the
|
|
// following conventions:
|
|
//
|
|
// - Consumers should treat unset optional fields as if they had been
|
|
// set with their default value.
|
|
//
|
|
// - When possible, measurements should be stored in "unsampled" form
|
|
// that is most useful to humans. There should be enough
|
|
// information present to determine the original sampled values.
|
|
//
|
|
// - On-disk, the serialized proto must be gzip-compressed.
|
|
//
|
|
// - The profile is represented as a set of samples, where each sample
|
|
// references a sequence of locations, and where each location belongs
|
|
// to a mapping.
|
|
// - There is a N->1 relationship from sample.location_id entries to
|
|
// locations. For every sample.location_id entry there must be a
|
|
// unique Location with that index.
|
|
// - There is an optional N->1 relationship from locations to
|
|
// mappings. For every nonzero Location.mapping_id there must be a
|
|
// unique Mapping with that index.
|
|
|
|
// Represents a complete profile, including sample types, samples,
|
|
// mappings to binaries, locations, functions, string table, and additional metadata.
|
|
// It modifies and annotates pprof Profile with OpenTelemetry specific fields.
|
|
//
|
|
// Note that whilst fields in this message retain the name and field id from pprof in most cases
|
|
// for ease of understanding data migration, it is not intended that pprof:Profile and
|
|
// OpenTelemetry:Profile encoding be wire compatible.
|
|
message Profile {
|
|
|
|
// A description of the samples associated with each Sample.value.
|
|
// For a cpu profile this might be:
|
|
// [["cpu","nanoseconds"]] or [["wall","seconds"]] or [["syscall","count"]]
|
|
// For a heap profile, this might be:
|
|
// [["allocations","count"], ["space","bytes"]],
|
|
// If one of the values represents the number of events represented
|
|
// by the sample, by convention it should be at index 0 and use
|
|
// sample_type.unit == "count".
|
|
repeated ValueType sample_type = 1;
|
|
// The set of samples recorded in this profile.
|
|
repeated Sample sample = 2;
|
|
// Mapping from address ranges to the image/binary/library mapped
|
|
// into that address range. mapping[0] will be the main binary.
|
|
// If multiple binaries contribute to the Profile and no main
|
|
// binary can be identified, mapping[0] has no special meaning.
|
|
repeated Mapping mapping_table = 3;
|
|
// Locations referenced by samples via location_indices.
|
|
repeated Location location_table = 4;
|
|
// Array of locations referenced by samples.
|
|
repeated int32 location_indices = 5;
|
|
// Functions referenced by locations.
|
|
repeated Function function_table = 6;
|
|
// Lookup table for attributes.
|
|
repeated opentelemetry.proto.common.v1.KeyValue attribute_table = 7;
|
|
// Represents a mapping between Attribute Keys and Units.
|
|
repeated AttributeUnit attribute_units = 8;
|
|
// Lookup table for links.
|
|
repeated Link link_table = 9;
|
|
// A common table for strings referenced by various messages.
|
|
// string_table[0] must always be "".
|
|
repeated string string_table = 10;
|
|
|
|
// The following fields 9-14 are informational, do not affect
|
|
// interpretation of results.
|
|
|
|
// Time of collection (UTC) represented as nanoseconds past the epoch.
|
|
int64 time_nanos = 11;
|
|
// Duration of the profile, if a duration makes sense.
|
|
int64 duration_nanos = 12;
|
|
// The kind of events between sampled occurrences.
|
|
// e.g [ "cpu","cycles" ] or [ "heap","bytes" ]
|
|
ValueType period_type = 13;
|
|
// The number of events between sampled occurrences.
|
|
int64 period = 14;
|
|
// Free-form text associated with the profile. The text is displayed as is
|
|
// to the user by the tools that read profiles (e.g. by pprof). This field
|
|
// should not be used to store any machine-readable information, it is only
|
|
// for human-friendly content. The profile must stay functional if this field
|
|
// is cleaned.
|
|
repeated int32 comment_strindices = 15; // Indices into string table.
|
|
// Index into the sample_type array to the default sample type.
|
|
int32 default_sample_type_index = 16;
|
|
|
|
|
|
// A globally unique identifier for a profile. The ID is a 16-byte array. An ID with
|
|
// all zeroes is considered invalid.
|
|
//
|
|
// This field is required.
|
|
bytes profile_id = 17;
|
|
|
|
// dropped_attributes_count is the number of attributes that were discarded. Attributes
|
|
// can be discarded because their keys are too long or because there are too many
|
|
// attributes. If this value is 0, then no attributes were dropped.
|
|
uint32 dropped_attributes_count = 19;
|
|
|
|
// Specifies format of the original payload. Common values are defined in semantic conventions. [required if original_payload is present]
|
|
string original_payload_format = 20;
|
|
|
|
// Original payload can be stored in this field. This can be useful for users who want to get the original payload.
|
|
// Formats such as JFR are highly extensible and can contain more information than what is defined in this spec.
|
|
// Inclusion of original payload should be configurable by the user. Default behavior should be to not include the original payload.
|
|
// If the original payload is in pprof format, it SHOULD not be included in this field.
|
|
// The field is optional, however if it is present then equivalent converted data should be populated in other fields
|
|
// of this message as far as is practicable.
|
|
bytes original_payload = 21;
|
|
|
|
// References to attributes in attribute_table. [optional]
|
|
// It is a collection of key/value pairs. Note, global attributes
|
|
// like server name can be set using the resource API. Examples of attributes:
|
|
//
|
|
// "/http/user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
|
|
// "/http/server_latency": 300
|
|
// "abc.com/myattribute": true
|
|
// "abc.com/score": 10.239
|
|
//
|
|
// The OpenTelemetry API specification further restricts the allowed value types:
|
|
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/common/README.md#attribute
|
|
// Attribute keys MUST be unique (it is not allowed to have more than one
|
|
// attribute with the same key).
|
|
repeated int32 attribute_indices = 22;
|
|
}
|
|
|
|
// Represents a mapping between Attribute Keys and Units.
|
|
message AttributeUnit {
|
|
// Index into string table.
|
|
int32 attribute_key_strindex = 1;
|
|
// Index into string table.
|
|
int32 unit_strindex = 2;
|
|
}
|
|
|
|
// A pointer from a profile Sample to a trace Span.
|
|
// Connects a profile sample to a trace span, identified by unique trace and span IDs.
|
|
message Link {
|
|
// A unique identifier of a trace that this linked span is part of. The ID is a
|
|
// 16-byte array.
|
|
bytes trace_id = 1;
|
|
|
|
// A unique identifier for the linked span. The ID is an 8-byte array.
|
|
bytes span_id = 2;
|
|
}
|
|
|
|
// Specifies the method of aggregating metric values, either DELTA (change since last report)
|
|
// or CUMULATIVE (total since a fixed start time).
|
|
enum AggregationTemporality {
|
|
/* UNSPECIFIED is the default AggregationTemporality, it MUST not be used. */
|
|
AGGREGATION_TEMPORALITY_UNSPECIFIED = 0;
|
|
|
|
/** DELTA is an AggregationTemporality for a profiler which reports
|
|
changes since last report time. Successive metrics contain aggregation of
|
|
values from continuous and non-overlapping intervals.
|
|
|
|
The values for a DELTA metric are based only on the time interval
|
|
associated with one measurement cycle. There is no dependency on
|
|
previous measurements like is the case for CUMULATIVE metrics.
|
|
|
|
For example, consider a system measuring the number of requests that
|
|
it receives and reports the sum of these requests every second as a
|
|
DELTA metric:
|
|
|
|
1. The system starts receiving at time=t_0.
|
|
2. A request is received, the system measures 1 request.
|
|
3. A request is received, the system measures 1 request.
|
|
4. A request is received, the system measures 1 request.
|
|
5. The 1 second collection cycle ends. A metric is exported for the
|
|
number of requests received over the interval of time t_0 to
|
|
t_0+1 with a value of 3.
|
|
6. A request is received, the system measures 1 request.
|
|
7. A request is received, the system measures 1 request.
|
|
8. The 1 second collection cycle ends. A metric is exported for the
|
|
number of requests received over the interval of time t_0+1 to
|
|
t_0+2 with a value of 2. */
|
|
AGGREGATION_TEMPORALITY_DELTA = 1;
|
|
|
|
/** CUMULATIVE is an AggregationTemporality for a profiler which
|
|
reports changes since a fixed start time. This means that current values
|
|
of a CUMULATIVE metric depend on all previous measurements since the
|
|
start time. Because of this, the sender is required to retain this state
|
|
in some form. If this state is lost or invalidated, the CUMULATIVE metric
|
|
values MUST be reset and a new fixed start time following the last
|
|
reported measurement time sent MUST be used.
|
|
|
|
For example, consider a system measuring the number of requests that
|
|
it receives and reports the sum of these requests every second as a
|
|
CUMULATIVE metric:
|
|
|
|
1. The system starts receiving at time=t_0.
|
|
2. A request is received, the system measures 1 request.
|
|
3. A request is received, the system measures 1 request.
|
|
4. A request is received, the system measures 1 request.
|
|
5. The 1 second collection cycle ends. A metric is exported for the
|
|
number of requests received over the interval of time t_0 to
|
|
t_0+1 with a value of 3.
|
|
6. A request is received, the system measures 1 request.
|
|
7. A request is received, the system measures 1 request.
|
|
8. The 1 second collection cycle ends. A metric is exported for the
|
|
number of requests received over the interval of time t_0 to
|
|
t_0+2 with a value of 5.
|
|
9. The system experiences a fault and loses state.
|
|
10. The system recovers and resumes receiving at time=t_1.
|
|
11. A request is received, the system measures 1 request.
|
|
12. The 1 second collection cycle ends. A metric is exported for the
|
|
number of requests received over the interval of time t_1 to
|
|
t_1+1 with a value of 1.
|
|
|
|
Note: Even though, when reporting changes since last report time, using
|
|
CUMULATIVE is valid, it is not recommended. */
|
|
AGGREGATION_TEMPORALITY_CUMULATIVE = 2;
|
|
}
|
|
|
|
// ValueType describes the type and units of a value, with an optional aggregation temporality.
|
|
message ValueType {
|
|
int32 type_strindex = 1; // Index into string table.
|
|
int32 unit_strindex = 2; // Index into string table.
|
|
|
|
AggregationTemporality aggregation_temporality = 3;
|
|
}
|
|
|
|
// Each Sample records values encountered in some program
|
|
// context. The program context is typically a stack trace, perhaps
|
|
// augmented with auxiliary information like the thread-id, some
|
|
// indicator of a higher level request being handled etc.
|
|
message Sample {
|
|
// locations_start_index along with locations_length refers to to a slice of locations in Profile.location_indices.
|
|
int32 locations_start_index = 1;
|
|
// locations_length along with locations_start_index refers to a slice of locations in Profile.location_indices.
|
|
// Supersedes location_index.
|
|
int32 locations_length = 2;
|
|
// The type and unit of each value is defined by the corresponding
|
|
// entry in Profile.sample_type. All samples must have the same
|
|
// number of values, the same as the length of Profile.sample_type.
|
|
// When aggregating multiple samples into a single sample, the
|
|
// result has a list of values that is the element-wise sum of the
|
|
// lists of the originals.
|
|
repeated int64 value = 3;
|
|
// References to attributes in Profile.attribute_table. [optional]
|
|
repeated int32 attribute_indices = 4;
|
|
|
|
// Reference to link in Profile.link_table. [optional]
|
|
optional int32 link_index = 5;
|
|
|
|
// Timestamps associated with Sample represented in nanoseconds. These timestamps are expected
|
|
// to fall within the Profile's time range. [optional]
|
|
repeated uint64 timestamps_unix_nano = 6;
|
|
}
|
|
|
|
// Describes the mapping of a binary in memory, including its address range,
|
|
// file offset, and metadata like build ID
|
|
message Mapping {
|
|
// Address at which the binary (or DLL) is loaded into memory.
|
|
uint64 memory_start = 1;
|
|
// The limit of the address range occupied by this mapping.
|
|
uint64 memory_limit = 2;
|
|
// Offset in the binary that corresponds to the first mapped address.
|
|
uint64 file_offset = 3;
|
|
// The object this entry is loaded from. This can be a filename on
|
|
// disk for the main binary and shared libraries, or virtual
|
|
// abstractions like "[vdso]".
|
|
int32 filename_strindex = 4; // Index into string table
|
|
// References to attributes in Profile.attribute_table. [optional]
|
|
repeated int32 attribute_indices = 5;
|
|
// The following fields indicate the resolution of symbolic info.
|
|
bool has_functions = 6;
|
|
bool has_filenames = 7;
|
|
bool has_line_numbers = 8;
|
|
bool has_inline_frames = 9;
|
|
}
|
|
|
|
// Describes function and line table debug information.
|
|
message Location {
|
|
// Reference to mapping in Profile.mapping_table.
|
|
// It can be unset if the mapping is unknown or not applicable for
|
|
// this profile type.
|
|
optional int32 mapping_index = 1;
|
|
// The instruction address for this location, if available. It
|
|
// should be within [Mapping.memory_start...Mapping.memory_limit]
|
|
// for the corresponding mapping. A non-leaf address may be in the
|
|
// middle of a call instruction. It is up to display tools to find
|
|
// the beginning of the instruction if necessary.
|
|
uint64 address = 2;
|
|
// Multiple line indicates this location has inlined functions,
|
|
// where the last entry represents the caller into which the
|
|
// preceding entries were inlined.
|
|
//
|
|
// E.g., if memcpy() is inlined into printf:
|
|
// line[0].function_name == "memcpy"
|
|
// line[1].function_name == "printf"
|
|
repeated Line line = 3;
|
|
// Provides an indication that multiple symbols map to this location's
|
|
// address, for example due to identical code folding by the linker. In that
|
|
// case the line information above represents one of the multiple
|
|
// symbols. This field must be recomputed when the symbolization state of the
|
|
// profile changes.
|
|
bool is_folded = 4;
|
|
|
|
// References to attributes in Profile.attribute_table. [optional]
|
|
repeated int32 attribute_indices = 5;
|
|
}
|
|
|
|
// Details a specific line in a source code, linked to a function.
|
|
message Line {
|
|
// Reference to function in Profile.function_table.
|
|
int32 function_index = 1;
|
|
// Line number in source code.
|
|
int64 line = 2;
|
|
// Column number in source code.
|
|
int64 column = 3;
|
|
}
|
|
|
|
// Describes a function, including its human-readable name, system name,
|
|
// source file, and starting line number in the source.
|
|
message Function {
|
|
// Name of the function, in human-readable form if available.
|
|
int32 name_strindex = 1; // Index into string table
|
|
// Name of the function, as identified by the system.
|
|
// For instance, it can be a C++ mangled name.
|
|
int32 system_name_strindex = 2; // Index into string table
|
|
// Source file containing the function.
|
|
int32 filename_strindex = 3; // Index into string table
|
|
// Line number in source file.
|
|
int64 start_line = 4;
|
|
}
|