Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
4bac0aa
http: add new filter to record request timing stats
ggreenway Oct 29, 2025
70780d5
new version
ggreenway Oct 30, 2025
eb5bf13
map->list
ggreenway Oct 30, 2025
5e26f96
remove duration
ggreenway Oct 30, 2025
4e007d8
add fixed value option
ggreenway Oct 30, 2025
1612f76
extension formatters
ggreenway Oct 30, 2025
8ac56c6
move
ggreenway Oct 30, 2025
7e3bdf4
fix BUILDs
ggreenway Oct 30, 2025
d879a14
format; remove Event type in favor of fixed increaes value
ggreenway Oct 30, 2025
84a8073
add more histogram units; move enum
ggreenway Oct 30, 2025
aa9c227
Starting to implement
ggreenway Oct 31, 2025
77a9430
iterate on API
ggreenway Nov 1, 2025
963417e
implement latest version of api
ggreenway Nov 3, 2025
2c67343
add extension metadata
ggreenway Nov 3, 2025
8b6ea32
add missing files
ggreenway Nov 3, 2025
24dcccc
add evictable to dictionary
ggreenway Nov 3, 2025
f2a9491
add codeowners
ggreenway Nov 4, 2025
32918b6
format
ggreenway Nov 4, 2025
6c2ac6e
add counters implementation
ggreenway Nov 4, 2025
fba6518
add integration test; allow atoi on formatted values
ggreenway Nov 4, 2025
61e0ea5
add missing BUILD file
ggreenway Nov 4, 2025
f37fa81
Merge remote-tracking branch 'upstream/main' into timing_stats
ggreenway Nov 5, 2025
acc1ff6
move unit and add implementation for it
ggreenway Nov 5, 2025
cf9fda4
cleanup includes
ggreenway Nov 5, 2025
fabc985
convert integration test config to yaml for readability
ggreenway Nov 5, 2025
074a326
add more docs
ggreenway Nov 5, 2025
7970417
format
ggreenway Nov 5, 2025
497787c
add tests, fixes
ggreenway Nov 6, 2025
ce0bfb8
release note
ggreenway Nov 6, 2025
29bb77a
fixes
ggreenway Nov 7, 2025
732267f
Merge remote-tracking branch 'upstream/main' into timing_stats
ggreenway Nov 10, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions api/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ proto_library(
"//envoy/extensions/filters/http/stateful_session/v3:pkg",
"//envoy/extensions/filters/http/tap/v3:pkg",
"//envoy/extensions/filters/http/thrift_to_metadata/v3:pkg",
"//envoy/extensions/filters/http/timing_stats/v3:pkg",
"//envoy/extensions/filters/http/upstream_codec/v3:pkg",
"//envoy/extensions/filters/http/wasm/v3:pkg",
"//envoy/extensions/filters/listener/http_inspector/v3:pkg",
Expand Down
9 changes: 9 additions & 0 deletions api/envoy/extensions/filters/http/timing_stats/v3/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# DO NOT EDIT. This file is generated by tools/proto_format/proto_sync.py.

load("@envoy_api//bazel:api_build_system.bzl", "api_proto_package")

licenses(["notice"]) # Apache 2

api_proto_package(
deps = ["@com_github_cncf_xds//udpa/annotations:pkg"],
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
syntax = "proto3";

package envoy.extensions.filters.http.timing_stats.v3;

import "envoy/type/matcher/v3/string.proto";

import "google/protobuf/wrappers.proto";
import "google/protobuf/duration.proto";

import "udpa/annotations/status.proto";

option java_package = "io.envoyproxy.envoy.extensions.filters.http.timing_stats.v3";
option java_outer_classname = "TimingStatsProto";
option java_multiple_files = true;
option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/timing_stats/v3;timing_statsv3";
option (udpa.annotations.file_status).package_version_status = ACTIVE;

// [#protodoc-title: Timing_stats]
// [#extension: envoy.filters.http.timing_stats]

message Config {
message TagFormatString {
string format_string = 1;

// Valid values for this tag. If empty, any value is allowed. Must match at least 1 matcher.
repeated type.matcher.v3.StringMatcher allowed_values = 2;
}

message TagValue {
// onoeof these
string fixed_string = 1;
TagFormatString format_string = 2;
}

message Stat {
string name = 1 [(validate.rules).string = {min_len: 1}];
map<string, TagValue> tags = 2;
google.protobuf.UInt32Value max_cardinality = 3;

// How would this be implemented? @kyessenov you've done some work in this area, right?
// Or should the expiration be at the filter config level, not the individual stat?
google.protobuf.Duration expiration = 4;
}


enum TimeUnit {
Milliseconds = 0;
Microseconds = 1;
Nanoseconds = 2;
}

message Histogram {
Stat stat = 1;
TimeUnit unit = 2;
string value = 3; // format string; must evaluate to a number
}

// Increase the counter by the amount of `value`.
message Counter {
Stat stat = 1;
string value = 2; // format string; must evaluate to a numeric value
}

// Increment the counter with described tags each time the tags match.
// This only makes sense if at least one of the tags is TagFormatString
message Event { // I don't love this name. Any better ideas?
Stat stat = 1;
}

string stat_prefix = 1;
google.protobuf.UInt32Value max_stats = 2; // Overall maximum number of stats from all types.
repeated Histogram histograms = 3;
repeated Counter counters = 4;
repeated Event events = 5;
}
1 change: 1 addition & 0 deletions api/versioning/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ proto_library(
"//envoy/extensions/filters/http/stateful_session/v3:pkg",
"//envoy/extensions/filters/http/tap/v3:pkg",
"//envoy/extensions/filters/http/thrift_to_metadata/v3:pkg",
"//envoy/extensions/filters/http/timing_stats/v3:pkg",
"//envoy/extensions/filters/http/upstream_codec/v3:pkg",
"//envoy/extensions/filters/http/wasm/v3:pkg",
"//envoy/extensions/filters/listener/http_inspector/v3:pkg",
Expand Down