github.com/m3db/m3@v1.5.1-0.20231129193456-75a402aa583b/src/x/headers/headers.go (about) 1 // Copyright (c) 2020 Uber Technologies, Inc. 2 // 3 // Permission is hereby granted, free of charge, to any person obtaining a copy 4 // of this software and associated documentation files (the "Software"), to deal 5 // in the Software without restriction, including without limitation the rights 6 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 // copies of the Software, and to permit persons to whom the Software is 8 // furnished to do so, subject to the following conditions: 9 // 10 // The above copyright notice and this permission notice shall be included in 11 // all copies or substantial portions of the Software. 12 // 13 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 // THE SOFTWARE. 20 21 package headers 22 23 const ( 24 // M3HeaderPrefix is the prefix all M3-specific headers that affect query or 25 // write behavior (not necessarily m3admin headers) are guaranteed to have. 26 M3HeaderPrefix = "M3-" 27 28 // WarningsHeader is the M3 warnings header when to display a warning to a 29 // user. 30 WarningsHeader = M3HeaderPrefix + "Warnings" 31 32 // RetryHeader is the M3 retry header to display when it is safe to retry. 33 RetryHeader = M3HeaderPrefix + "Retry" 34 35 // ServedByHeader is the M3 query storage execution breakdown. 36 ServedByHeader = M3HeaderPrefix + "Storage-By" 37 38 // DeprecatedHeader is the M3 deprecated header. 39 DeprecatedHeader = M3HeaderPrefix + "Deprecated" 40 41 // EngineHeaderName defines header name which is used to switch between 42 // prometheus and m3query engines. 43 EngineHeaderName = M3HeaderPrefix + "Engine" 44 45 // MetricsTypeHeader sets the write or read metrics type to restrict 46 // metrics to. 47 // Valid values are "unaggregated" or "aggregated". 48 MetricsTypeHeader = M3HeaderPrefix + "Metrics-Type" 49 50 // PromTypeHeader sets the prometheus metric type. Valid values are 51 // "counter", "gauge", etc. (see src/query/api/v1/handler/prometheus/remote/write.go 52 // field `headerToMetricType`) 53 PromTypeHeader = "Prometheus-Metric-Type" 54 55 // WriteTypeHeader is a header that controls if default 56 // writes should be written to both unaggregated and aggregated 57 // namespaces, or if unaggregated values are skipped and 58 // only aggregated values are written. 59 // Valid values are "default" or "aggregate". 60 WriteTypeHeader = M3HeaderPrefix + "Write-Type" 61 62 // SourceHeader tracks bytes and docs read for the given source, if provided. 63 SourceHeader = M3HeaderPrefix + "Source" 64 65 // DefaultWriteType is the default write type. 66 DefaultWriteType = "default" 67 68 // AggregateWriteType is the aggregate write type. This writes to 69 // only aggregated namespaces 70 AggregateWriteType = "aggregate" 71 72 // MetricsStoragePolicyHeader specifies the resolution and retention of 73 // metrics being written or read. 74 // In the form of a storage policy string, e.g. "1m:14d". 75 // Only required if the metrics type header does not specify unaggregated 76 // metrics type. 77 MetricsStoragePolicyHeader = M3HeaderPrefix + "Storage-Policy" 78 79 // MetricsRestrictByStoragePoliciesHeader provides the policies options to 80 // enforce on queries, in the form of a list of storage policies. 81 // "1m:14d;5m:60d" 82 MetricsRestrictByStoragePoliciesHeader = M3HeaderPrefix + "Restrict-By-Storage-Policies" 83 84 // RestrictByTagsJSONHeader provides tag options to enforces on queries, 85 // in JSON format. See `handler.stringTagOptions` for definitions.` 86 RestrictByTagsJSONHeader = M3HeaderPrefix + "Restrict-By-Tags-JSON" 87 88 // MapTagsByJSONHeader provides the ability to mutate tags of timeseries in 89 // incoming write requests. See `MapTagsOptions` for structure. 90 MapTagsByJSONHeader = M3HeaderPrefix + "Map-Tags-JSON" 91 92 // ReadConsistencyLevelHeader defines the read consistency enforced for a query. 93 ReadConsistencyLevelHeader = M3HeaderPrefix + "Read-Consistency-Level" 94 95 // IterateEqualTimestampStrategyHeader defines the timestamp equality strategy for a query. 96 IterateEqualTimestampStrategyHeader = M3HeaderPrefix + "Iterate-Equal-Timestamp-Strategy" 97 98 // LimitMaxSeriesHeader is the M3 limit timeseries header that limits 99 // the number of time series returned by each storage node. 100 LimitMaxSeriesHeader = M3HeaderPrefix + "Limit-Max-Series" 101 102 // LimitInstanceMultipleHeader overrides the PerQueryLimitsConfiguration.InstanceMultiple for the request. 103 LimitInstanceMultipleHeader = M3HeaderPrefix + "Limit-Instance-Multiple" 104 105 // LimitMaxDocsHeader is the M3 limit docs header that limits 106 // the number of docs returned by each storage node. 107 LimitMaxDocsHeader = M3HeaderPrefix + "Limit-Max-Docs" 108 109 // LimitMaxRangeHeader is the M3 limit range header that limits 110 // the time range returned by each storage node. 111 LimitMaxRangeHeader = M3HeaderPrefix + "Limit-Max-Range" 112 113 // LimitMaxReturnedDatapointsHeader is the M3 header that limits 114 // the number of datapoints returned in total to the client. 115 LimitMaxReturnedDatapointsHeader = M3HeaderPrefix + "Limit-Max-Returned-Datapoints" 116 117 // LimitMaxReturnedSeriesHeader is the M3 header that limits 118 // the number of series returned in total to the client. 119 LimitMaxReturnedSeriesHeader = M3HeaderPrefix + "Limit-Max-Returned-Series" 120 121 // LimitMaxReturnedSeriesMetadataHeader is the M3 header that limits 122 // the number of series metadata returned in total to the client. 123 LimitMaxReturnedSeriesMetadataHeader = M3HeaderPrefix + "Limit-Max-Returned-SeriesMetadata" 124 125 // LimitRequireExhaustiveHeader is the M3 limit exhaustive header that will 126 // ensure M3 returns an error if the results set is not exhaustive. 127 LimitRequireExhaustiveHeader = M3HeaderPrefix + "Limit-Require-Exhaustive" 128 129 // LimitRequireNoWaitHeader is the M3 header that ensures 130 // M3 returns an error if query execution must wait for permits. 131 LimitRequireNoWaitHeader = M3HeaderPrefix + "Limit-Require-No-Wait" 132 133 // LimitMaxMetricMetadataStatsHeader is the M3 header that limits 134 // the number of metric metadata stats returned in M3-Metric-Stats. 135 LimitMaxMetricMetadataStatsHeader = M3HeaderPrefix + "Limit-Max-Metric-Metadata-Stats" 136 137 // UnaggregatedStoragePolicy specifies the unaggregated storage policy. 138 UnaggregatedStoragePolicy = "unaggregated" 139 140 // DefaultServiceEnvironment is the default service ID environment. 141 DefaultServiceEnvironment = "default_env" 142 // DefaultServiceZone is the default service ID zone. 143 DefaultServiceZone = "embedded" 144 145 // HeaderClusterEnvironmentName is the header used to specify the 146 // environment name. 147 HeaderClusterEnvironmentName = "Cluster-Environment-Name" 148 // HeaderClusterZoneName is the header used to specify the zone name. 149 HeaderClusterZoneName = "Cluster-Zone-Name" 150 // HeaderDryRun is the header used to specify whether this should be a dry 151 // run. 152 HeaderDryRun = "Dry-Run" 153 // HeaderForce is the header used to specify whether this should be a forced 154 // operation. 155 HeaderForce = "Force" 156 157 // LimitHeader is the header added when returned series are limited. 158 LimitHeader = M3HeaderPrefix + "Results-Limited" 159 160 // ReturnedDataLimitedHeader is the header added when returned 161 // data are limited either by series or datapoints. 162 ReturnedDataLimitedHeader = M3HeaderPrefix + "Returned-Data-Limited" 163 164 // ReturnedMetadataLimitedHeader is the header added when returned 165 // metadata is limited. 166 ReturnedMetadataLimitedHeader = M3HeaderPrefix + "Returned-Metadata-Limited" 167 168 // TimeoutHeader is the header added with the effective timeout. 169 TimeoutHeader = M3HeaderPrefix + "Timeout" 170 171 // LimitHeaderSeriesLimitApplied is the header applied when fetch results 172 // are maxed. 173 LimitHeaderSeriesLimitApplied = "max_fetch_series_limit_applied" 174 175 // WaitedHeader is the header added when permits had to be waited for. 176 WaitedHeader = M3HeaderPrefix + "Waited" 177 178 // FetchedSeriesCount is the header added that tracks the total number of 179 // series that were fetched by the query, before computation. 180 FetchedSeriesCount = M3HeaderPrefix + "Series-Count" 181 182 // FetchedSeriesNoSamplesCount is the header added that tracks the total number of 183 // fetched series that were fetched by the query but had no samples. 184 FetchedSeriesNoSamplesCount = M3HeaderPrefix + "Series-No-Samples-Count" 185 186 // FetchedSeriesWithSamplesCount is the header added that tracks the total number of 187 // fetched series that were fetched by the query and had non-zero samples. 188 FetchedSeriesWithSamplesCount = M3HeaderPrefix + "Series-With-Samples-Count" 189 190 // FetchedAggregatedSeriesCount is the header added that tracks the total number of 191 // aggregated series that were fetched by the query, before computation. 192 FetchedAggregatedSeriesCount = M3HeaderPrefix + "Aggregated-Series-Count" 193 194 // FetchedUnaggregatedSeriesCount is the header added that tracks the total number of 195 // unaggregated series that were fetched by the query, before computation. 196 FetchedUnaggregatedSeriesCount = M3HeaderPrefix + "Unaggregated-Series-Count" 197 198 // MetricStats is the header added that tracks the unique set of metric stats 199 // all series fetched by this query, before computation, by metric name. 200 MetricStats = M3HeaderPrefix + "Metric-Stats" 201 202 // NamespacesHeader is the header added that tracks the unique set of namespaces 203 // read by this query. 204 NamespacesHeader = M3HeaderPrefix + "Namespaces" 205 206 // FetchedResponsesHeader is the header added that tracks the number of M3DB responses 207 // read by this query. 208 FetchedResponsesHeader = M3HeaderPrefix + "Fetched-Responses" 209 210 // FetchedBytesEstimateHeader is the header added that tracks the estimated number 211 // of bytes returned by all fetch responses (counted by FetchedResponsesHeader). 212 FetchedBytesEstimateHeader = M3HeaderPrefix + "Fetched-Bytes-Estimate" 213 214 // FetchedMetadataCount is the header added that tracks the total amount of 215 // metadata that was fetched by the query, before computation. 216 FetchedMetadataCount = M3HeaderPrefix + "Metadata-Count" 217 218 // RenderFormat is used to switch result format for query results rendering. 219 RenderFormat = M3HeaderPrefix + "Render-Format" 220 221 // JSONDisableDisallowUnknownFields is header if set to true that allows 222 // for clients to send fields unknown by a HTTP/JSON endpoint and still 223 // parse the request, this is helpful for sending a request with a new 224 // schema to an older instance and still have it respond successfully 225 // using the fields it knows about. 226 JSONDisableDisallowUnknownFields = M3HeaderPrefix + "JSON-Disable-Disallow-Unknown-Fields" 227 228 // CustomResponseMetricsType is a header that, if set, will override the `type` tag 229 // on the request's response metrics. 230 CustomResponseMetricsType = M3HeaderPrefix + "Custom-Response-Metrics-Type" 231 232 // RelatedQueriesHeader is a header that, if set, will be used by clients to send a set of colon separated 233 // start/end time pairs as unix timestamps (e.g. 1635160222:1635166222). Multiple 234 // RelatedQueriesHeader headers may NOT be sent. When multiple values are required, they can be separated 235 // by a semicolons (e.g. startTs:endTs;startTs:endTs). 236 RelatedQueriesHeader = M3HeaderPrefix + "Related-Queries" 237 )