-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add v1.13 semantic conventions (#3499)
* WIP * Add NetConv unit tests * Add ServerRequest unit tests * Unit test ClientRequest * Remove unneeded * Unit test helper funcs * Add unit tests for remaining funcs * Update exported docs * Fix lint * Add changelog entry * Add Client/Server func to semconv/internal/v2 * Generate Client/Server func for semconv ver * Update RELEASING Add note about compatibility. Update example TAG. * Fix errors * Update changelog
- Loading branch information
Showing
18 changed files
with
4,832 additions
and
100 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
135 changes: 135 additions & 0 deletions
135
internal/tools/semconvkit/templates/httpconv/http.go.tmpl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,135 @@ | ||
// Copyright The 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. | ||
|
||
// Package httpconv provides OpenTelemetry semantic convetions for the net/http | ||
// package from the standard library. | ||
package httpconv // import "go.opentelemetry.io/otel/semconv/{{.TagVer}}/httpconv" | ||
|
||
import ( | ||
"net/http" | ||
|
||
"go.opentelemetry.io/otel/attribute" | ||
"go.opentelemetry.io/otel/codes" | ||
"go.opentelemetry.io/otel/semconv/internal/v2" | ||
semconv "go.opentelemetry.io/otel/semconv/{{.TagVer}}" | ||
) | ||
|
||
var ( | ||
nc = &internal.NetConv{ | ||
NetHostNameKey: semconv.NetHostNameKey, | ||
NetHostPortKey: semconv.NetHostPortKey, | ||
NetPeerNameKey: semconv.NetPeerNameKey, | ||
NetPeerPortKey: semconv.NetPeerPortKey, | ||
NetSockPeerAddrKey: semconv.NetSockPeerAddrKey, | ||
NetSockPeerPortKey: semconv.NetSockPeerPortKey, | ||
NetTransportOther: semconv.NetTransportOther, | ||
NetTransportTCP: semconv.NetTransportTCP, | ||
NetTransportUDP: semconv.NetTransportUDP, | ||
NetTransportInProc: semconv.NetTransportInProc, | ||
} | ||
|
||
hc = &internal.HTTPConv{ | ||
NetConv: nc, | ||
|
||
EnduserIDKey: semconv.EnduserIDKey, | ||
HTTPClientIPKey: semconv.HTTPClientIPKey, | ||
HTTPFlavorKey: semconv.HTTPFlavorKey, | ||
HTTPMethodKey: semconv.HTTPMethodKey, | ||
HTTPRequestContentLengthKey: semconv.HTTPRequestContentLengthKey, | ||
HTTPResponseContentLengthKey: semconv.HTTPResponseContentLengthKey, | ||
HTTPRouteKey: semconv.HTTPRouteKey, | ||
HTTPSchemeHTTP: semconv.HTTPSchemeHTTP, | ||
HTTPSchemeHTTPS: semconv.HTTPSchemeHTTPS, | ||
HTTPStatusCodeKey: semconv.HTTPStatusCodeKey, | ||
HTTPTargetKey: semconv.HTTPTargetKey, | ||
HTTPURLKey: semconv.HTTPURLKey, | ||
HTTPUserAgentKey: semconv.HTTPUserAgentKey, | ||
} | ||
) | ||
|
||
// ClientResponse returns attributes for an HTTP response received by a client | ||
// from a server. It will return the following attributes if the related values | ||
// are defined in resp: "http.status.code", "http.response_content_length". | ||
// | ||
// This does not add all OpenTelemetry required attributes for an HTTP event, | ||
// it assumes ClientRequest was used to create the span with a complete set of | ||
// attributes. If a complete set of attributes can be generated using the | ||
// request contained in resp. For example: | ||
// | ||
// append(ClientResponse(resp), ClientRequest(resp.Request)...) | ||
func ClientResponse(resp http.Response) []attribute.KeyValue { | ||
return hc.ClientResponse(resp) | ||
} | ||
|
||
// ClientRequest returns attributes for an HTTP request made by a client. The | ||
// following attributes are always returned: "http.url", "http.flavor", | ||
// "http.method", "net.peer.name". The following attributes are returned if the | ||
// related values are defined in req: "net.peer.port", "http.user_agent", | ||
// "http.request_content_length", "enduser.id". | ||
func ClientRequest(req *http.Request) []attribute.KeyValue { | ||
return hc.ClientRequest(req) | ||
} | ||
|
||
// ClientStatus returns a span status code and message for an HTTP status code | ||
// value received by a client. | ||
func ClientStatus(code int) (codes.Code, string) { | ||
return hc.ClientStatus(code) | ||
} | ||
|
||
// ServerRequest returns attributes for an HTTP request received by a server. | ||
// The following attributes are always returned: "http.method", "http.scheme", | ||
// "http.flavor", "http.target", "net.host.name". The following attributes are | ||
// returned if they related values are defined in req: "net.host.port", | ||
// "net.sock.peer.addr", "net.sock.peer.port", "http.user_agent", "enduser.id", | ||
// "http.client_ip". | ||
func ServerRequest(req *http.Request) []attribute.KeyValue { | ||
return hc.ServerRequest(req) | ||
} | ||
|
||
// ServerStatus returns a span status code and message for an HTTP status code | ||
// value returned by a server. Status codes in the 400-499 range are not | ||
// returned as errors. | ||
func ServerStatus(code int) (codes.Code, string) { | ||
return hc.ServerStatus(code) | ||
} | ||
|
||
// RequestHeader returns the contents of h as attributes. | ||
// | ||
// Instrumentation should require an explicit configuration of which headers to | ||
// captured and then prune what they pass here. Including all headers can be a | ||
// security risk - explicit configuration helps avoid leaking sensitive | ||
// information. | ||
// | ||
// The User-Agent header is already captured in the http.user_agent attribute | ||
// from ClientRequest and ServerRequest. Instrumentation may provide an option | ||
// to capture that header here even though it is not recommended. Otherwise, | ||
// instrumentation should filter that out of what is passed. | ||
func RequestHeader(h http.Header) []attribute.KeyValue { | ||
return hc.RequestHeader(h) | ||
} | ||
|
||
// ResponseHeader returns the contents of h as attributes. | ||
// | ||
// Instrumentation should require an explicit configuration of which headers to | ||
// captured and then prune what they pass here. Including all headers can be a | ||
// security risk - explicit configuration helps avoid leaking sensitive | ||
// information. | ||
// | ||
// The User-Agent header is already captured in the http.user_agent attribute | ||
// from ClientRequest and ServerRequest. Instrumentation may provide an option | ||
// to capture that header here even though it is not recommended. Otherwise, | ||
// instrumentation should filter that out of what is passed. | ||
func ResponseHeader(h http.Header) []attribute.KeyValue { | ||
return hc.ResponseHeader(h) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
// Copyright The 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. | ||
|
||
// Package netconv provides OpenTelemetry semantic convetions for the net | ||
// package from the standard library. | ||
package netconv // import "go.opentelemetry.io/otel/semconv/{{.TagVer}}/netconv" | ||
|
||
import ( | ||
"net" | ||
|
||
"go.opentelemetry.io/otel/attribute" | ||
"go.opentelemetry.io/otel/semconv/internal/v2" | ||
semconv "go.opentelemetry.io/otel/semconv/{{.TagVer}}" | ||
) | ||
|
||
var nc = &internal.NetConv{ | ||
NetHostNameKey: semconv.NetHostNameKey, | ||
NetHostPortKey: semconv.NetHostPortKey, | ||
NetPeerNameKey: semconv.NetPeerNameKey, | ||
NetPeerPortKey: semconv.NetPeerPortKey, | ||
NetSockFamilyKey: semconv.NetSockFamilyKey, | ||
NetSockPeerAddrKey: semconv.NetSockPeerAddrKey, | ||
NetSockPeerPortKey: semconv.NetSockPeerPortKey, | ||
NetSockHostAddrKey: semconv.NetSockHostAddrKey, | ||
NetSockHostPortKey: semconv.NetSockHostPortKey, | ||
NetTransportOther: semconv.NetTransportOther, | ||
NetTransportTCP: semconv.NetTransportTCP, | ||
NetTransportUDP: semconv.NetTransportUDP, | ||
NetTransportInProc: semconv.NetTransportInProc, | ||
} | ||
|
||
// Transport returns an attribute describing the transport protocol of the | ||
// passed network. See the net.Dial for information about acceptable network | ||
// values. | ||
func Transport(network string) attribute.KeyValue { | ||
return nc.Transport(network) | ||
} | ||
|
||
// Client returns attributes for a client network connection to address. See | ||
// net.Dial for information about acceptable address values, address should be | ||
// the same as the one used to create conn. If conn is nil, only network peer | ||
// attributes will be returned that describe address. Otherwise, the socket | ||
// level information about conn will also be included. | ||
func Client(address string, conn net.Conn) []attribute.KeyValue { | ||
return nc.Client(address, conn) | ||
} | ||
|
||
// Server returns attributes for a network listener listening at address. See | ||
// net.Listen for information about acceptable address values, address should | ||
// be the same as the one used to create ln. If ln is nil, only network host | ||
// attributes will be returned that describe address. Otherwise, the socket | ||
// level information about ln will also be included. | ||
func Server(address string, ln net.Listener) []attribute.KeyValue { | ||
return nc.Server(address, ln) | ||
} |
Oops, something went wrong.