mirror of https://github.com/docker/cli.git
Merge pull request #4625 from thaJeztah/bump_engine
vendor: github.com/docker/docker fc4d035e7a4e (v25.0.0-dev)
This commit is contained in:
commit
5fc42fc64e
10
vendor.mod
10
vendor.mod
|
@ -13,7 +13,7 @@ require (
|
||||||
github.com/creack/pty v1.1.18
|
github.com/creack/pty v1.1.18
|
||||||
github.com/distribution/reference v0.5.0
|
github.com/distribution/reference v0.5.0
|
||||||
github.com/docker/distribution v2.8.3+incompatible
|
github.com/docker/distribution v2.8.3+incompatible
|
||||||
github.com/docker/docker v24.0.0-rc.2.0.20231013183648-cdb3f9fb8dca+incompatible // master (v25.0.0-dev)
|
github.com/docker/docker v24.0.0-rc.2.0.20231025221548-fc4d035e7a4e+incompatible // master (v25.0.0-dev)
|
||||||
github.com/docker/docker-credential-helpers v0.8.0
|
github.com/docker/docker-credential-helpers v0.8.0
|
||||||
github.com/docker/go-connections v0.4.0
|
github.com/docker/go-connections v0.4.0
|
||||||
github.com/docker/go-units v0.5.0
|
github.com/docker/go-units v0.5.0
|
||||||
|
@ -24,13 +24,13 @@ require (
|
||||||
github.com/mattn/go-runewidth v0.0.14
|
github.com/mattn/go-runewidth v0.0.14
|
||||||
github.com/mitchellh/mapstructure v1.3.2
|
github.com/mitchellh/mapstructure v1.3.2
|
||||||
github.com/moby/patternmatcher v0.6.0
|
github.com/moby/patternmatcher v0.6.0
|
||||||
github.com/moby/swarmkit/v2 v2.0.0-20230823155524-12f0c246fed0
|
github.com/moby/swarmkit/v2 v2.0.0-20230911190601-f082dd7a0cee
|
||||||
github.com/moby/sys/sequential v0.5.0
|
github.com/moby/sys/sequential v0.5.0
|
||||||
github.com/moby/sys/signal v0.7.0
|
github.com/moby/sys/signal v0.7.0
|
||||||
github.com/moby/term v0.5.0
|
github.com/moby/term v0.5.0
|
||||||
github.com/morikuni/aec v1.0.0
|
github.com/morikuni/aec v1.0.0
|
||||||
github.com/opencontainers/go-digest v1.0.0
|
github.com/opencontainers/go-digest v1.0.0
|
||||||
github.com/opencontainers/image-spec v1.1.0-rc4
|
github.com/opencontainers/image-spec v1.1.0-rc5
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/sirupsen/logrus v1.9.3
|
github.com/sirupsen/logrus v1.9.3
|
||||||
github.com/spf13/cobra v1.7.0
|
github.com/spf13/cobra v1.7.0
|
||||||
|
@ -57,7 +57,7 @@ require (
|
||||||
github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect
|
github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect
|
||||||
github.com/docker/go-metrics v0.0.1 // indirect
|
github.com/docker/go-metrics v0.0.1 // indirect
|
||||||
github.com/felixge/httpsnoop v1.0.3 // indirect
|
github.com/felixge/httpsnoop v1.0.3 // indirect
|
||||||
github.com/go-logr/logr v1.2.3 // indirect
|
github.com/go-logr/logr v1.2.4 // indirect
|
||||||
github.com/go-logr/stdr v1.2.2 // indirect
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
github.com/golang/protobuf v1.5.3 // indirect
|
github.com/golang/protobuf v1.5.3 // indirect
|
||||||
github.com/gorilla/mux v1.8.0 // indirect
|
github.com/gorilla/mux v1.8.0 // indirect
|
||||||
|
@ -66,7 +66,7 @@ require (
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
|
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
|
||||||
github.com/miekg/pkcs11 v1.1.1 // indirect
|
github.com/miekg/pkcs11 v1.1.1 // indirect
|
||||||
github.com/moby/sys/symlink v0.2.0 // indirect
|
github.com/moby/sys/symlink v0.2.0 // indirect
|
||||||
github.com/opencontainers/runc v1.1.7 // indirect
|
github.com/moby/sys/user v0.1.0 // indirect
|
||||||
github.com/prometheus/client_golang v1.14.0 // indirect
|
github.com/prometheus/client_golang v1.14.0 // indirect
|
||||||
github.com/prometheus/client_model v0.3.0 // indirect
|
github.com/prometheus/client_model v0.3.0 // indirect
|
||||||
github.com/prometheus/common v0.42.0 // indirect
|
github.com/prometheus/common v0.42.0 // indirect
|
||||||
|
|
20
vendor.sum
20
vendor.sum
|
@ -56,8 +56,8 @@ github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5
|
||||||
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
|
github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
|
||||||
github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/docker v24.0.0-rc.2.0.20231013183648-cdb3f9fb8dca+incompatible h1:dPyJJJlyetVDyMqY664Mopg71y+2yY5RQ4VN90ZChds=
|
github.com/docker/docker v24.0.0-rc.2.0.20231025221548-fc4d035e7a4e+incompatible h1:06ap953LHT+0JPkzYkYPMQHPxaC6NhzTSYaTS2/BeRc=
|
||||||
github.com/docker/docker v24.0.0-rc.2.0.20231013183648-cdb3f9fb8dca+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v24.0.0-rc.2.0.20231025221548-fc4d035e7a4e+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker-credential-helpers v0.8.0 h1:YQFtbBQb4VrpoPxhFuzEBPQ9E16qz5SpHLS+uswaCp8=
|
github.com/docker/docker-credential-helpers v0.8.0 h1:YQFtbBQb4VrpoPxhFuzEBPQ9E16qz5SpHLS+uswaCp8=
|
||||||
github.com/docker/docker-credential-helpers v0.8.0/go.mod h1:UGFXcuoQ5TxPiB54nHOZ32AWRqQdECoh/Mg0AlEYb40=
|
github.com/docker/docker-credential-helpers v0.8.0/go.mod h1:UGFXcuoQ5TxPiB54nHOZ32AWRqQdECoh/Mg0AlEYb40=
|
||||||
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
|
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
|
||||||
|
@ -85,8 +85,8 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||||
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
|
github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
|
||||||
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||||
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
||||||
|
@ -167,14 +167,16 @@ github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYG
|
||||||
github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||||
github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
|
github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
|
||||||
github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
|
github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
|
||||||
github.com/moby/swarmkit/v2 v2.0.0-20230823155524-12f0c246fed0 h1:DBx1xD69N0nQjoMQskoTQQTb0hpZbo+8Rk9ug0wUMKs=
|
github.com/moby/swarmkit/v2 v2.0.0-20230911190601-f082dd7a0cee h1:T7Mz81wbNduphN0195OfYadKSs/uQKr4zrKtsCSfQTc=
|
||||||
github.com/moby/swarmkit/v2 v2.0.0-20230823155524-12f0c246fed0/go.mod h1:dHTjRFlamMrutFg1Vi0AEZKtVx2qZV/7A/imviPXQiE=
|
github.com/moby/swarmkit/v2 v2.0.0-20230911190601-f082dd7a0cee/go.mod h1:z90qBxgz/fNu4YjmMHi0hyPDKDitpOWzOJnvv9+KB2U=
|
||||||
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
|
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
|
||||||
github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
|
github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
|
||||||
github.com/moby/sys/signal v0.7.0 h1:25RW3d5TnQEoKvRbEKUGay6DCQ46IxAVTT9CUMgmsSI=
|
github.com/moby/sys/signal v0.7.0 h1:25RW3d5TnQEoKvRbEKUGay6DCQ46IxAVTT9CUMgmsSI=
|
||||||
github.com/moby/sys/signal v0.7.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
|
github.com/moby/sys/signal v0.7.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
|
||||||
github.com/moby/sys/symlink v0.2.0 h1:tk1rOM+Ljp0nFmfOIBtlV3rTDlWOwFRhjEeAhZB0nZc=
|
github.com/moby/sys/symlink v0.2.0 h1:tk1rOM+Ljp0nFmfOIBtlV3rTDlWOwFRhjEeAhZB0nZc=
|
||||||
github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs=
|
github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs=
|
||||||
|
github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg=
|
||||||
|
github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU=
|
||||||
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
|
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
|
||||||
github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
|
github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
|
@ -192,10 +194,8 @@ github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoT
|
||||||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
||||||
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
||||||
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
||||||
github.com/opencontainers/image-spec v1.1.0-rc4 h1:oOxKUJWnFC4YGHCCMNql1x4YaDfYBTS5Y4x/Cgeo1E0=
|
github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI=
|
||||||
github.com/opencontainers/image-spec v1.1.0-rc4/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
|
github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
|
||||||
github.com/opencontainers/runc v1.1.7 h1:y2EZDS8sNng4Ksf0GUYNhKbTShZJPJg1FiXJNH/uoCk=
|
|
||||||
github.com/opencontainers/runc v1.1.7/go.mod h1:CbUumNnWCuTGFukNXahoo/RFBZvDAgRh/smNYNOhA50=
|
|
||||||
github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
|
github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
|
||||||
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
|
|
|
@ -16,7 +16,7 @@ import (
|
||||||
"go.opentelemetry.io/otel"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
"go.opentelemetry.io/otel/propagation"
|
"go.opentelemetry.io/otel/propagation"
|
||||||
semconv "go.opentelemetry.io/otel/semconv/v1.7.0"
|
"go.opentelemetry.io/otel/semconv/v1.17.0/httpconv"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -65,8 +65,8 @@ func (cli *Client) setupHijackConn(req *http.Request, proto string) (_ net.Conn,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx, span := tp.Tracer("").Start(ctx, req.Method+" "+req.URL.Path)
|
ctx, span := tp.Tracer("").Start(ctx, req.Method+" "+req.URL.Path, trace.WithSpanKind(trace.SpanKindClient))
|
||||||
span.SetAttributes(semconv.HTTPClientAttributesFromHTTPRequest(req)...)
|
span.SetAttributes(httpconv.ClientRequest(req)...)
|
||||||
defer func() {
|
defer func() {
|
||||||
if retErr != nil {
|
if retErr != nil {
|
||||||
span.RecordError(retErr)
|
span.RecordError(retErr)
|
||||||
|
@ -98,7 +98,7 @@ func (cli *Client) setupHijackConn(req *http.Request, proto string) (_ net.Conn,
|
||||||
// Server hijacks the connection, error 'connection closed' expected
|
// Server hijacks the connection, error 'connection closed' expected
|
||||||
resp, err := clientconn.Do(req)
|
resp, err := clientconn.Do(req)
|
||||||
if resp != nil {
|
if resp != nil {
|
||||||
span.SetStatus(semconv.SpanStatusFromHTTPStatusCode(resp.StatusCode))
|
span.SetStatus(httpconv.ClientStatus(resp.StatusCode))
|
||||||
}
|
}
|
||||||
|
|
||||||
//nolint:staticcheck // ignore SA1019 for connecting to old (pre go1.8) daemons
|
//nolint:staticcheck // ignore SA1019 for connecting to old (pre go1.8) daemons
|
||||||
|
|
|
@ -12,7 +12,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/opencontainers/runc/libcontainer/user"
|
"github.com/moby/sys/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
func mkdirAs(path string, mode os.FileMode, owner Identity, mkAll, chownExisting bool) error {
|
func mkdirAs(path string, mode os.FileMode, owner Identity, mkAll, chownExisting bool) error {
|
||||||
|
|
|
@ -6,7 +6,6 @@ linters:
|
||||||
disable-all: true
|
disable-all: true
|
||||||
enable:
|
enable:
|
||||||
- asciicheck
|
- asciicheck
|
||||||
- deadcode
|
|
||||||
- errcheck
|
- errcheck
|
||||||
- forcetypeassert
|
- forcetypeassert
|
||||||
- gocritic
|
- gocritic
|
||||||
|
@ -18,10 +17,8 @@ linters:
|
||||||
- misspell
|
- misspell
|
||||||
- revive
|
- revive
|
||||||
- staticcheck
|
- staticcheck
|
||||||
- structcheck
|
|
||||||
- typecheck
|
- typecheck
|
||||||
- unused
|
- unused
|
||||||
- varcheck
|
|
||||||
|
|
||||||
issues:
|
issues:
|
||||||
exclude-use-default: false
|
exclude-use-default: false
|
||||||
|
|
|
@ -20,35 +20,5 @@ package logr
|
||||||
// used whenever the caller is not interested in the logs. Logger instances
|
// used whenever the caller is not interested in the logs. Logger instances
|
||||||
// produced by this function always compare as equal.
|
// produced by this function always compare as equal.
|
||||||
func Discard() Logger {
|
func Discard() Logger {
|
||||||
return Logger{
|
return New(nil)
|
||||||
level: 0,
|
|
||||||
sink: discardLogSink{},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// discardLogSink is a LogSink that discards all messages.
|
|
||||||
type discardLogSink struct{}
|
|
||||||
|
|
||||||
// Verify that it actually implements the interface
|
|
||||||
var _ LogSink = discardLogSink{}
|
|
||||||
|
|
||||||
func (l discardLogSink) Init(RuntimeInfo) {
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l discardLogSink) Enabled(int) bool {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l discardLogSink) Info(int, string, ...interface{}) {
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l discardLogSink) Error(error, string, ...interface{}) {
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l discardLogSink) WithValues(...interface{}) LogSink {
|
|
||||||
return l
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l discardLogSink) WithName(string) LogSink {
|
|
||||||
return l
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,13 +21,13 @@ limitations under the License.
|
||||||
// github.com/go-logr/logr.LogSink with output through an arbitrary
|
// github.com/go-logr/logr.LogSink with output through an arbitrary
|
||||||
// "write" function. See New and NewJSON for details.
|
// "write" function. See New and NewJSON for details.
|
||||||
//
|
//
|
||||||
// Custom LogSinks
|
// # Custom LogSinks
|
||||||
//
|
//
|
||||||
// For users who need more control, a funcr.Formatter can be embedded inside
|
// For users who need more control, a funcr.Formatter can be embedded inside
|
||||||
// your own custom LogSink implementation. This is useful when the LogSink
|
// your own custom LogSink implementation. This is useful when the LogSink
|
||||||
// needs to implement additional methods, for example.
|
// needs to implement additional methods, for example.
|
||||||
//
|
//
|
||||||
// Formatting
|
// # Formatting
|
||||||
//
|
//
|
||||||
// This will respect logr.Marshaler, fmt.Stringer, and error interfaces for
|
// This will respect logr.Marshaler, fmt.Stringer, and error interfaces for
|
||||||
// values which are being logged. When rendering a struct, funcr will use Go's
|
// values which are being logged. When rendering a struct, funcr will use Go's
|
||||||
|
@ -37,6 +37,7 @@ package funcr
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding"
|
"encoding"
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
@ -217,7 +218,7 @@ func newFormatter(opts Options, outfmt outputFormat) Formatter {
|
||||||
prefix: "",
|
prefix: "",
|
||||||
values: nil,
|
values: nil,
|
||||||
depth: 0,
|
depth: 0,
|
||||||
opts: opts,
|
opts: &opts,
|
||||||
}
|
}
|
||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
|
@ -231,7 +232,7 @@ type Formatter struct {
|
||||||
values []interface{}
|
values []interface{}
|
||||||
valuesStr string
|
valuesStr string
|
||||||
depth int
|
depth int
|
||||||
opts Options
|
opts *Options
|
||||||
}
|
}
|
||||||
|
|
||||||
// outputFormat indicates which outputFormat to use.
|
// outputFormat indicates which outputFormat to use.
|
||||||
|
@ -447,6 +448,7 @@ func (f Formatter) prettyWithFlags(value interface{}, flags uint32, depth int) s
|
||||||
if flags&flagRawStruct == 0 {
|
if flags&flagRawStruct == 0 {
|
||||||
buf.WriteByte('{')
|
buf.WriteByte('{')
|
||||||
}
|
}
|
||||||
|
printComma := false // testing i>0 is not enough because of JSON omitted fields
|
||||||
for i := 0; i < t.NumField(); i++ {
|
for i := 0; i < t.NumField(); i++ {
|
||||||
fld := t.Field(i)
|
fld := t.Field(i)
|
||||||
if fld.PkgPath != "" {
|
if fld.PkgPath != "" {
|
||||||
|
@ -478,9 +480,10 @@ func (f Formatter) prettyWithFlags(value interface{}, flags uint32, depth int) s
|
||||||
if omitempty && isEmpty(v.Field(i)) {
|
if omitempty && isEmpty(v.Field(i)) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if i > 0 {
|
if printComma {
|
||||||
buf.WriteByte(',')
|
buf.WriteByte(',')
|
||||||
}
|
}
|
||||||
|
printComma = true // if we got here, we are rendering a field
|
||||||
if fld.Anonymous && fld.Type.Kind() == reflect.Struct && name == "" {
|
if fld.Anonymous && fld.Type.Kind() == reflect.Struct && name == "" {
|
||||||
buf.WriteString(f.prettyWithFlags(v.Field(i).Interface(), flags|flagRawStruct, depth+1))
|
buf.WriteString(f.prettyWithFlags(v.Field(i).Interface(), flags|flagRawStruct, depth+1))
|
||||||
continue
|
continue
|
||||||
|
@ -500,6 +503,20 @@ func (f Formatter) prettyWithFlags(value interface{}, flags uint32, depth int) s
|
||||||
}
|
}
|
||||||
return buf.String()
|
return buf.String()
|
||||||
case reflect.Slice, reflect.Array:
|
case reflect.Slice, reflect.Array:
|
||||||
|
// If this is outputing as JSON make sure this isn't really a json.RawMessage.
|
||||||
|
// If so just emit "as-is" and don't pretty it as that will just print
|
||||||
|
// it as [X,Y,Z,...] which isn't terribly useful vs the string form you really want.
|
||||||
|
if f.outputFormat == outputJSON {
|
||||||
|
if rm, ok := value.(json.RawMessage); ok {
|
||||||
|
// If it's empty make sure we emit an empty value as the array style would below.
|
||||||
|
if len(rm) > 0 {
|
||||||
|
buf.Write(rm)
|
||||||
|
} else {
|
||||||
|
buf.WriteString("null")
|
||||||
|
}
|
||||||
|
return buf.String()
|
||||||
|
}
|
||||||
|
}
|
||||||
buf.WriteByte('[')
|
buf.WriteByte('[')
|
||||||
for i := 0; i < v.Len(); i++ {
|
for i := 0; i < v.Len(); i++ {
|
||||||
if i > 0 {
|
if i > 0 {
|
||||||
|
|
|
@ -21,7 +21,7 @@ limitations under the License.
|
||||||
// to back that API. Packages in the Go ecosystem can depend on this package,
|
// to back that API. Packages in the Go ecosystem can depend on this package,
|
||||||
// while callers can implement logging with whatever backend is appropriate.
|
// while callers can implement logging with whatever backend is appropriate.
|
||||||
//
|
//
|
||||||
// Usage
|
// # Usage
|
||||||
//
|
//
|
||||||
// Logging is done using a Logger instance. Logger is a concrete type with
|
// Logging is done using a Logger instance. Logger is a concrete type with
|
||||||
// methods, which defers the actual logging to a LogSink interface. The main
|
// methods, which defers the actual logging to a LogSink interface. The main
|
||||||
|
@ -30,16 +30,20 @@ limitations under the License.
|
||||||
// "structured logging".
|
// "structured logging".
|
||||||
//
|
//
|
||||||
// With Go's standard log package, we might write:
|
// With Go's standard log package, we might write:
|
||||||
// log.Printf("setting target value %s", targetValue)
|
//
|
||||||
|
// log.Printf("setting target value %s", targetValue)
|
||||||
//
|
//
|
||||||
// With logr's structured logging, we'd write:
|
// With logr's structured logging, we'd write:
|
||||||
// logger.Info("setting target", "value", targetValue)
|
//
|
||||||
|
// logger.Info("setting target", "value", targetValue)
|
||||||
//
|
//
|
||||||
// Errors are much the same. Instead of:
|
// Errors are much the same. Instead of:
|
||||||
// log.Printf("failed to open the pod bay door for user %s: %v", user, err)
|
//
|
||||||
|
// log.Printf("failed to open the pod bay door for user %s: %v", user, err)
|
||||||
//
|
//
|
||||||
// We'd write:
|
// We'd write:
|
||||||
// logger.Error(err, "failed to open the pod bay door", "user", user)
|
//
|
||||||
|
// logger.Error(err, "failed to open the pod bay door", "user", user)
|
||||||
//
|
//
|
||||||
// Info() and Error() are very similar, but they are separate methods so that
|
// Info() and Error() are very similar, but they are separate methods so that
|
||||||
// LogSink implementations can choose to do things like attach additional
|
// LogSink implementations can choose to do things like attach additional
|
||||||
|
@ -47,7 +51,7 @@ limitations under the License.
|
||||||
// always logged, regardless of the current verbosity. If there is no error
|
// always logged, regardless of the current verbosity. If there is no error
|
||||||
// instance available, passing nil is valid.
|
// instance available, passing nil is valid.
|
||||||
//
|
//
|
||||||
// Verbosity
|
// # Verbosity
|
||||||
//
|
//
|
||||||
// Often we want to log information only when the application in "verbose
|
// Often we want to log information only when the application in "verbose
|
||||||
// mode". To write log lines that are more verbose, Logger has a V() method.
|
// mode". To write log lines that are more verbose, Logger has a V() method.
|
||||||
|
@ -58,20 +62,22 @@ limitations under the License.
|
||||||
// Error messages do not have a verbosity level and are always logged.
|
// Error messages do not have a verbosity level and are always logged.
|
||||||
//
|
//
|
||||||
// Where we might have written:
|
// Where we might have written:
|
||||||
// if flVerbose >= 2 {
|
//
|
||||||
// log.Printf("an unusual thing happened")
|
// if flVerbose >= 2 {
|
||||||
// }
|
// log.Printf("an unusual thing happened")
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
// We can write:
|
// We can write:
|
||||||
// logger.V(2).Info("an unusual thing happened")
|
|
||||||
//
|
//
|
||||||
// Logger Names
|
// logger.V(2).Info("an unusual thing happened")
|
||||||
|
//
|
||||||
|
// # Logger Names
|
||||||
//
|
//
|
||||||
// Logger instances can have name strings so that all messages logged through
|
// Logger instances can have name strings so that all messages logged through
|
||||||
// that instance have additional context. For example, you might want to add
|
// that instance have additional context. For example, you might want to add
|
||||||
// a subsystem name:
|
// a subsystem name:
|
||||||
//
|
//
|
||||||
// logger.WithName("compactor").Info("started", "time", time.Now())
|
// logger.WithName("compactor").Info("started", "time", time.Now())
|
||||||
//
|
//
|
||||||
// The WithName() method returns a new Logger, which can be passed to
|
// The WithName() method returns a new Logger, which can be passed to
|
||||||
// constructors or other functions for further use. Repeated use of WithName()
|
// constructors or other functions for further use. Repeated use of WithName()
|
||||||
|
@ -82,25 +88,27 @@ limitations under the License.
|
||||||
// joining operation (e.g. whitespace, commas, periods, slashes, brackets,
|
// joining operation (e.g. whitespace, commas, periods, slashes, brackets,
|
||||||
// quotes, etc).
|
// quotes, etc).
|
||||||
//
|
//
|
||||||
// Saved Values
|
// # Saved Values
|
||||||
//
|
//
|
||||||
// Logger instances can store any number of key/value pairs, which will be
|
// Logger instances can store any number of key/value pairs, which will be
|
||||||
// logged alongside all messages logged through that instance. For example,
|
// logged alongside all messages logged through that instance. For example,
|
||||||
// you might want to create a Logger instance per managed object:
|
// you might want to create a Logger instance per managed object:
|
||||||
//
|
//
|
||||||
// With the standard log package, we might write:
|
// With the standard log package, we might write:
|
||||||
// log.Printf("decided to set field foo to value %q for object %s/%s",
|
//
|
||||||
// targetValue, object.Namespace, object.Name)
|
// log.Printf("decided to set field foo to value %q for object %s/%s",
|
||||||
|
// targetValue, object.Namespace, object.Name)
|
||||||
//
|
//
|
||||||
// With logr we'd write:
|
// With logr we'd write:
|
||||||
// // Elsewhere: set up the logger to log the object name.
|
|
||||||
// obj.logger = mainLogger.WithValues(
|
|
||||||
// "name", obj.name, "namespace", obj.namespace)
|
|
||||||
//
|
//
|
||||||
// // later on...
|
// // Elsewhere: set up the logger to log the object name.
|
||||||
// obj.logger.Info("setting foo", "value", targetValue)
|
// obj.logger = mainLogger.WithValues(
|
||||||
|
// "name", obj.name, "namespace", obj.namespace)
|
||||||
//
|
//
|
||||||
// Best Practices
|
// // later on...
|
||||||
|
// obj.logger.Info("setting foo", "value", targetValue)
|
||||||
|
//
|
||||||
|
// # Best Practices
|
||||||
//
|
//
|
||||||
// Logger has very few hard rules, with the goal that LogSink implementations
|
// Logger has very few hard rules, with the goal that LogSink implementations
|
||||||
// might have a lot of freedom to differentiate. There are, however, some
|
// might have a lot of freedom to differentiate. There are, however, some
|
||||||
|
@ -124,15 +132,15 @@ limitations under the License.
|
||||||
// around. For cases where passing a logger is optional, a pointer to Logger
|
// around. For cases where passing a logger is optional, a pointer to Logger
|
||||||
// should be used.
|
// should be used.
|
||||||
//
|
//
|
||||||
// Key Naming Conventions
|
// # Key Naming Conventions
|
||||||
//
|
//
|
||||||
// Keys are not strictly required to conform to any specification or regex, but
|
// Keys are not strictly required to conform to any specification or regex, but
|
||||||
// it is recommended that they:
|
// it is recommended that they:
|
||||||
// * be human-readable and meaningful (not auto-generated or simple ordinals)
|
// - be human-readable and meaningful (not auto-generated or simple ordinals)
|
||||||
// * be constant (not dependent on input data)
|
// - be constant (not dependent on input data)
|
||||||
// * contain only printable characters
|
// - contain only printable characters
|
||||||
// * not contain whitespace or punctuation
|
// - not contain whitespace or punctuation
|
||||||
// * use lower case for simple keys and lowerCamelCase for more complex ones
|
// - use lower case for simple keys and lowerCamelCase for more complex ones
|
||||||
//
|
//
|
||||||
// These guidelines help ensure that log data is processed properly regardless
|
// These guidelines help ensure that log data is processed properly regardless
|
||||||
// of the log implementation. For example, log implementations will try to
|
// of the log implementation. For example, log implementations will try to
|
||||||
|
@ -141,51 +149,54 @@ limitations under the License.
|
||||||
// While users are generally free to use key names of their choice, it's
|
// While users are generally free to use key names of their choice, it's
|
||||||
// generally best to avoid using the following keys, as they're frequently used
|
// generally best to avoid using the following keys, as they're frequently used
|
||||||
// by implementations:
|
// by implementations:
|
||||||
// * "caller": the calling information (file/line) of a particular log line
|
// - "caller": the calling information (file/line) of a particular log line
|
||||||
// * "error": the underlying error value in the `Error` method
|
// - "error": the underlying error value in the `Error` method
|
||||||
// * "level": the log level
|
// - "level": the log level
|
||||||
// * "logger": the name of the associated logger
|
// - "logger": the name of the associated logger
|
||||||
// * "msg": the log message
|
// - "msg": the log message
|
||||||
// * "stacktrace": the stack trace associated with a particular log line or
|
// - "stacktrace": the stack trace associated with a particular log line or
|
||||||
// error (often from the `Error` message)
|
// error (often from the `Error` message)
|
||||||
// * "ts": the timestamp for a log line
|
// - "ts": the timestamp for a log line
|
||||||
//
|
//
|
||||||
// Implementations are encouraged to make use of these keys to represent the
|
// Implementations are encouraged to make use of these keys to represent the
|
||||||
// above concepts, when necessary (for example, in a pure-JSON output form, it
|
// above concepts, when necessary (for example, in a pure-JSON output form, it
|
||||||
// would be necessary to represent at least message and timestamp as ordinary
|
// would be necessary to represent at least message and timestamp as ordinary
|
||||||
// named values).
|
// named values).
|
||||||
//
|
//
|
||||||
// Break Glass
|
// # Break Glass
|
||||||
//
|
//
|
||||||
// Implementations may choose to give callers access to the underlying
|
// Implementations may choose to give callers access to the underlying
|
||||||
// logging implementation. The recommended pattern for this is:
|
// logging implementation. The recommended pattern for this is:
|
||||||
// // Underlier exposes access to the underlying logging implementation.
|
//
|
||||||
// // Since callers only have a logr.Logger, they have to know which
|
// // Underlier exposes access to the underlying logging implementation.
|
||||||
// // implementation is in use, so this interface is less of an abstraction
|
// // Since callers only have a logr.Logger, they have to know which
|
||||||
// // and more of way to test type conversion.
|
// // implementation is in use, so this interface is less of an abstraction
|
||||||
// type Underlier interface {
|
// // and more of way to test type conversion.
|
||||||
// GetUnderlying() <underlying-type>
|
// type Underlier interface {
|
||||||
// }
|
// GetUnderlying() <underlying-type>
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
// Logger grants access to the sink to enable type assertions like this:
|
// Logger grants access to the sink to enable type assertions like this:
|
||||||
// func DoSomethingWithImpl(log logr.Logger) {
|
//
|
||||||
// if underlier, ok := log.GetSink()(impl.Underlier) {
|
// func DoSomethingWithImpl(log logr.Logger) {
|
||||||
// implLogger := underlier.GetUnderlying()
|
// if underlier, ok := log.GetSink().(impl.Underlier); ok {
|
||||||
// ...
|
// implLogger := underlier.GetUnderlying()
|
||||||
// }
|
// ...
|
||||||
// }
|
// }
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
// Custom `With*` functions can be implemented by copying the complete
|
// Custom `With*` functions can be implemented by copying the complete
|
||||||
// Logger struct and replacing the sink in the copy:
|
// Logger struct and replacing the sink in the copy:
|
||||||
// // WithFooBar changes the foobar parameter in the log sink and returns a
|
//
|
||||||
// // new logger with that modified sink. It does nothing for loggers where
|
// // WithFooBar changes the foobar parameter in the log sink and returns a
|
||||||
// // the sink doesn't support that parameter.
|
// // new logger with that modified sink. It does nothing for loggers where
|
||||||
// func WithFoobar(log logr.Logger, foobar int) logr.Logger {
|
// // the sink doesn't support that parameter.
|
||||||
// if foobarLogSink, ok := log.GetSink()(FoobarSink); ok {
|
// func WithFoobar(log logr.Logger, foobar int) logr.Logger {
|
||||||
// log = log.WithSink(foobarLogSink.WithFooBar(foobar))
|
// if foobarLogSink, ok := log.GetSink().(FoobarSink); ok {
|
||||||
// }
|
// log = log.WithSink(foobarLogSink.WithFooBar(foobar))
|
||||||
// return log
|
// }
|
||||||
// }
|
// return log
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
// Don't use New to construct a new Logger with a LogSink retrieved from an
|
// Don't use New to construct a new Logger with a LogSink retrieved from an
|
||||||
// existing Logger. Source code attribution might not work correctly and
|
// existing Logger. Source code attribution might not work correctly and
|
||||||
|
@ -201,11 +212,14 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// New returns a new Logger instance. This is primarily used by libraries
|
// New returns a new Logger instance. This is primarily used by libraries
|
||||||
// implementing LogSink, rather than end users.
|
// implementing LogSink, rather than end users. Passing a nil sink will create
|
||||||
|
// a Logger which discards all log lines.
|
||||||
func New(sink LogSink) Logger {
|
func New(sink LogSink) Logger {
|
||||||
logger := Logger{}
|
logger := Logger{}
|
||||||
logger.setSink(sink)
|
logger.setSink(sink)
|
||||||
sink.Init(runtimeInfo)
|
if sink != nil {
|
||||||
|
sink.Init(runtimeInfo)
|
||||||
|
}
|
||||||
return logger
|
return logger
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -244,7 +258,7 @@ type Logger struct {
|
||||||
// Enabled tests whether this Logger is enabled. For example, commandline
|
// Enabled tests whether this Logger is enabled. For example, commandline
|
||||||
// flags might be used to set the logging verbosity and disable some info logs.
|
// flags might be used to set the logging verbosity and disable some info logs.
|
||||||
func (l Logger) Enabled() bool {
|
func (l Logger) Enabled() bool {
|
||||||
return l.sink.Enabled(l.level)
|
return l.sink != nil && l.sink.Enabled(l.level)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Info logs a non-error message with the given key/value pairs as context.
|
// Info logs a non-error message with the given key/value pairs as context.
|
||||||
|
@ -254,6 +268,9 @@ func (l Logger) Enabled() bool {
|
||||||
// information. The key/value pairs must alternate string keys and arbitrary
|
// information. The key/value pairs must alternate string keys and arbitrary
|
||||||
// values.
|
// values.
|
||||||
func (l Logger) Info(msg string, keysAndValues ...interface{}) {
|
func (l Logger) Info(msg string, keysAndValues ...interface{}) {
|
||||||
|
if l.sink == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
if l.Enabled() {
|
if l.Enabled() {
|
||||||
if withHelper, ok := l.sink.(CallStackHelperLogSink); ok {
|
if withHelper, ok := l.sink.(CallStackHelperLogSink); ok {
|
||||||
withHelper.GetCallStackHelper()()
|
withHelper.GetCallStackHelper()()
|
||||||
|
@ -273,6 +290,9 @@ func (l Logger) Info(msg string, keysAndValues ...interface{}) {
|
||||||
// triggered this log line, if present. The err parameter is optional
|
// triggered this log line, if present. The err parameter is optional
|
||||||
// and nil may be passed instead of an error instance.
|
// and nil may be passed instead of an error instance.
|
||||||
func (l Logger) Error(err error, msg string, keysAndValues ...interface{}) {
|
func (l Logger) Error(err error, msg string, keysAndValues ...interface{}) {
|
||||||
|
if l.sink == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
if withHelper, ok := l.sink.(CallStackHelperLogSink); ok {
|
if withHelper, ok := l.sink.(CallStackHelperLogSink); ok {
|
||||||
withHelper.GetCallStackHelper()()
|
withHelper.GetCallStackHelper()()
|
||||||
}
|
}
|
||||||
|
@ -284,6 +304,9 @@ func (l Logger) Error(err error, msg string, keysAndValues ...interface{}) {
|
||||||
// level means a log message is less important. Negative V-levels are treated
|
// level means a log message is less important. Negative V-levels are treated
|
||||||
// as 0.
|
// as 0.
|
||||||
func (l Logger) V(level int) Logger {
|
func (l Logger) V(level int) Logger {
|
||||||
|
if l.sink == nil {
|
||||||
|
return l
|
||||||
|
}
|
||||||
if level < 0 {
|
if level < 0 {
|
||||||
level = 0
|
level = 0
|
||||||
}
|
}
|
||||||
|
@ -294,6 +317,9 @@ func (l Logger) V(level int) Logger {
|
||||||
// WithValues returns a new Logger instance with additional key/value pairs.
|
// WithValues returns a new Logger instance with additional key/value pairs.
|
||||||
// See Info for documentation on how key/value pairs work.
|
// See Info for documentation on how key/value pairs work.
|
||||||
func (l Logger) WithValues(keysAndValues ...interface{}) Logger {
|
func (l Logger) WithValues(keysAndValues ...interface{}) Logger {
|
||||||
|
if l.sink == nil {
|
||||||
|
return l
|
||||||
|
}
|
||||||
l.setSink(l.sink.WithValues(keysAndValues...))
|
l.setSink(l.sink.WithValues(keysAndValues...))
|
||||||
return l
|
return l
|
||||||
}
|
}
|
||||||
|
@ -304,6 +330,9 @@ func (l Logger) WithValues(keysAndValues ...interface{}) Logger {
|
||||||
// contain only letters, digits, and hyphens (see the package documentation for
|
// contain only letters, digits, and hyphens (see the package documentation for
|
||||||
// more information).
|
// more information).
|
||||||
func (l Logger) WithName(name string) Logger {
|
func (l Logger) WithName(name string) Logger {
|
||||||
|
if l.sink == nil {
|
||||||
|
return l
|
||||||
|
}
|
||||||
l.setSink(l.sink.WithName(name))
|
l.setSink(l.sink.WithName(name))
|
||||||
return l
|
return l
|
||||||
}
|
}
|
||||||
|
@ -324,6 +353,9 @@ func (l Logger) WithName(name string) Logger {
|
||||||
// WithCallDepth(1) because it works with implementions that support the
|
// WithCallDepth(1) because it works with implementions that support the
|
||||||
// CallDepthLogSink and/or CallStackHelperLogSink interfaces.
|
// CallDepthLogSink and/or CallStackHelperLogSink interfaces.
|
||||||
func (l Logger) WithCallDepth(depth int) Logger {
|
func (l Logger) WithCallDepth(depth int) Logger {
|
||||||
|
if l.sink == nil {
|
||||||
|
return l
|
||||||
|
}
|
||||||
if withCallDepth, ok := l.sink.(CallDepthLogSink); ok {
|
if withCallDepth, ok := l.sink.(CallDepthLogSink); ok {
|
||||||
l.setSink(withCallDepth.WithCallDepth(depth))
|
l.setSink(withCallDepth.WithCallDepth(depth))
|
||||||
}
|
}
|
||||||
|
@ -345,6 +377,9 @@ func (l Logger) WithCallDepth(depth int) Logger {
|
||||||
// implementation does not support either of these, the original Logger will be
|
// implementation does not support either of these, the original Logger will be
|
||||||
// returned.
|
// returned.
|
||||||
func (l Logger) WithCallStackHelper() (func(), Logger) {
|
func (l Logger) WithCallStackHelper() (func(), Logger) {
|
||||||
|
if l.sink == nil {
|
||||||
|
return func() {}, l
|
||||||
|
}
|
||||||
var helper func()
|
var helper func()
|
||||||
if withCallDepth, ok := l.sink.(CallDepthLogSink); ok {
|
if withCallDepth, ok := l.sink.(CallDepthLogSink); ok {
|
||||||
l.setSink(withCallDepth.WithCallDepth(1))
|
l.setSink(withCallDepth.WithCallDepth(1))
|
||||||
|
@ -357,6 +392,11 @@ func (l Logger) WithCallStackHelper() (func(), Logger) {
|
||||||
return helper, l
|
return helper, l
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsZero returns true if this logger is an uninitialized zero value
|
||||||
|
func (l Logger) IsZero() bool {
|
||||||
|
return l.sink == nil
|
||||||
|
}
|
||||||
|
|
||||||
// contextKey is how we find Loggers in a context.Context.
|
// contextKey is how we find Loggers in a context.Context.
|
||||||
type contextKey struct{}
|
type contextKey struct{}
|
||||||
|
|
||||||
|
@ -442,7 +482,7 @@ type LogSink interface {
|
||||||
WithName(name string) LogSink
|
WithName(name string) LogSink
|
||||||
}
|
}
|
||||||
|
|
||||||
// CallDepthLogSink represents a Logger that knows how to climb the call stack
|
// CallDepthLogSink represents a LogSink that knows how to climb the call stack
|
||||||
// to identify the original call site and can offset the depth by a specified
|
// to identify the original call site and can offset the depth by a specified
|
||||||
// number of frames. This is useful for users who have helper functions
|
// number of frames. This is useful for users who have helper functions
|
||||||
// between the "real" call site and the actual calls to Logger methods.
|
// between the "real" call site and the actual calls to Logger methods.
|
||||||
|
@ -467,7 +507,7 @@ type CallDepthLogSink interface {
|
||||||
WithCallDepth(depth int) LogSink
|
WithCallDepth(depth int) LogSink
|
||||||
}
|
}
|
||||||
|
|
||||||
// CallStackHelperLogSink represents a Logger that knows how to climb
|
// CallStackHelperLogSink represents a LogSink that knows how to climb
|
||||||
// the call stack to identify the original call site and can skip
|
// the call stack to identify the original call site and can skip
|
||||||
// intermediate helper functions if they mark themselves as
|
// intermediate helper functions if they mark themselves as
|
||||||
// helper. Go's testing package uses that approach.
|
// helper. Go's testing package uses that approach.
|
||||||
|
|
13
vendor/github.com/opencontainers/runc/LICENSE → vendor/github.com/moby/sys/user/LICENSE
generated
vendored
13
vendor/github.com/opencontainers/runc/LICENSE → vendor/github.com/moby/sys/user/LICENSE
generated
vendored
|
@ -176,7 +176,18 @@
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
Copyright 2014 Docker, Inc.
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
|
@ -201,7 +201,7 @@ func ParseGroupFilter(r io.Reader, filter func(Group) bool) ([]Group, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// We should return no error if EOF is reached
|
// We should return no error if EOF is reached
|
||||||
// without a match.
|
// without a match.
|
||||||
if err == io.EOF { //nolint:errorlint // comparison with io.EOF is legit, https://github.com/polyfloyd/go-errorlint/pull/12
|
if err == io.EOF {
|
||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
return out, err
|
return out, err
|
|
@ -21,7 +21,7 @@ import digest "github.com/opencontainers/go-digest"
|
||||||
// when marshalled to JSON.
|
// when marshalled to JSON.
|
||||||
type Descriptor struct {
|
type Descriptor struct {
|
||||||
// MediaType is the media type of the object this schema refers to.
|
// MediaType is the media type of the object this schema refers to.
|
||||||
MediaType string `json:"mediaType,omitempty"`
|
MediaType string `json:"mediaType"`
|
||||||
|
|
||||||
// Digest is the digest of the targeted content.
|
// Digest is the digest of the targeted content.
|
||||||
Digest digest.Digest `json:"digest"`
|
Digest digest.Digest `json:"digest"`
|
||||||
|
|
|
@ -15,10 +15,14 @@
|
||||||
package v1
|
package v1
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// ImageLayoutFile is the file name of oci image layout file
|
// ImageLayoutFile is the file name containing ImageLayout in an OCI Image Layout
|
||||||
ImageLayoutFile = "oci-layout"
|
ImageLayoutFile = "oci-layout"
|
||||||
// ImageLayoutVersion is the version of ImageLayout
|
// ImageLayoutVersion is the version of ImageLayout
|
||||||
ImageLayoutVersion = "1.0.0"
|
ImageLayoutVersion = "1.0.0"
|
||||||
|
// ImageIndexFile is the file name of the entry point for references and descriptors in an OCI Image Layout
|
||||||
|
ImageIndexFile = "index.json"
|
||||||
|
// ImageBlobsDir is the directory name containing content addressable blobs in an OCI Image Layout
|
||||||
|
ImageBlobsDir = "blobs"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ImageLayout is the structure in the "oci-layout" file, found in the root
|
// ImageLayout is the structure in the "oci-layout" file, found in the root
|
||||||
|
|
|
@ -25,7 +25,7 @@ const (
|
||||||
VersionPatch = 0
|
VersionPatch = 0
|
||||||
|
|
||||||
// VersionDev indicates development branch. Releases will be empty string.
|
// VersionDev indicates development branch. Releases will be empty string.
|
||||||
VersionDev = "-rc.4"
|
VersionDev = "-rc.5"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Version is the specification version that the package types support.
|
// Version is the specification version that the package types support.
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
runc
|
|
||||||
|
|
||||||
Copyright 2012-2015 Docker, Inc.
|
|
||||||
|
|
||||||
This product includes software developed at Docker, Inc. (http://www.docker.com).
|
|
||||||
|
|
||||||
The following is courtesy of our legal counsel:
|
|
||||||
|
|
||||||
|
|
||||||
Use and transfer of Docker may be subject to certain restrictions by the
|
|
||||||
United States and other governments.
|
|
||||||
It is your responsibility to ensure that your use and/or transfer does not
|
|
||||||
violate applicable laws.
|
|
||||||
|
|
||||||
For more information, please see http://www.bis.doc.gov
|
|
||||||
|
|
||||||
See also http://www.apache.org/dev/crypto.html and/or seek legal counsel.
|
|
|
@ -1,336 +0,0 @@
|
||||||
// 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 internal // import "go.opentelemetry.io/otel/semconv/internal"
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"net"
|
|
||||||
"net/http"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/attribute"
|
|
||||||
"go.opentelemetry.io/otel/codes"
|
|
||||||
"go.opentelemetry.io/otel/trace"
|
|
||||||
)
|
|
||||||
|
|
||||||
// SemanticConventions are the semantic convention values defined for a
|
|
||||||
// version of the OpenTelemetry specification.
|
|
||||||
type SemanticConventions struct {
|
|
||||||
EnduserIDKey attribute.Key
|
|
||||||
HTTPClientIPKey attribute.Key
|
|
||||||
HTTPFlavorKey attribute.Key
|
|
||||||
HTTPHostKey attribute.Key
|
|
||||||
HTTPMethodKey attribute.Key
|
|
||||||
HTTPRequestContentLengthKey attribute.Key
|
|
||||||
HTTPRouteKey attribute.Key
|
|
||||||
HTTPSchemeHTTP attribute.KeyValue
|
|
||||||
HTTPSchemeHTTPS attribute.KeyValue
|
|
||||||
HTTPServerNameKey attribute.Key
|
|
||||||
HTTPStatusCodeKey attribute.Key
|
|
||||||
HTTPTargetKey attribute.Key
|
|
||||||
HTTPURLKey attribute.Key
|
|
||||||
HTTPUserAgentKey attribute.Key
|
|
||||||
NetHostIPKey attribute.Key
|
|
||||||
NetHostNameKey attribute.Key
|
|
||||||
NetHostPortKey attribute.Key
|
|
||||||
NetPeerIPKey attribute.Key
|
|
||||||
NetPeerNameKey attribute.Key
|
|
||||||
NetPeerPortKey attribute.Key
|
|
||||||
NetTransportIP attribute.KeyValue
|
|
||||||
NetTransportOther attribute.KeyValue
|
|
||||||
NetTransportTCP attribute.KeyValue
|
|
||||||
NetTransportUDP attribute.KeyValue
|
|
||||||
NetTransportUnix attribute.KeyValue
|
|
||||||
}
|
|
||||||
|
|
||||||
// NetAttributesFromHTTPRequest generates attributes of the net
|
|
||||||
// namespace as specified by the OpenTelemetry specification for a
|
|
||||||
// span. The network parameter is a string that net.Dial function
|
|
||||||
// from standard library can understand.
|
|
||||||
func (sc *SemanticConventions) NetAttributesFromHTTPRequest(network string, request *http.Request) []attribute.KeyValue {
|
|
||||||
attrs := []attribute.KeyValue{}
|
|
||||||
|
|
||||||
switch network {
|
|
||||||
case "tcp", "tcp4", "tcp6":
|
|
||||||
attrs = append(attrs, sc.NetTransportTCP)
|
|
||||||
case "udp", "udp4", "udp6":
|
|
||||||
attrs = append(attrs, sc.NetTransportUDP)
|
|
||||||
case "ip", "ip4", "ip6":
|
|
||||||
attrs = append(attrs, sc.NetTransportIP)
|
|
||||||
case "unix", "unixgram", "unixpacket":
|
|
||||||
attrs = append(attrs, sc.NetTransportUnix)
|
|
||||||
default:
|
|
||||||
attrs = append(attrs, sc.NetTransportOther)
|
|
||||||
}
|
|
||||||
|
|
||||||
peerIP, peerName, peerPort := hostIPNamePort(request.RemoteAddr)
|
|
||||||
if peerIP != "" {
|
|
||||||
attrs = append(attrs, sc.NetPeerIPKey.String(peerIP))
|
|
||||||
}
|
|
||||||
if peerName != "" {
|
|
||||||
attrs = append(attrs, sc.NetPeerNameKey.String(peerName))
|
|
||||||
}
|
|
||||||
if peerPort != 0 {
|
|
||||||
attrs = append(attrs, sc.NetPeerPortKey.Int(peerPort))
|
|
||||||
}
|
|
||||||
|
|
||||||
hostIP, hostName, hostPort := "", "", 0
|
|
||||||
for _, someHost := range []string{request.Host, request.Header.Get("Host"), request.URL.Host} {
|
|
||||||
hostIP, hostName, hostPort = hostIPNamePort(someHost)
|
|
||||||
if hostIP != "" || hostName != "" || hostPort != 0 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if hostIP != "" {
|
|
||||||
attrs = append(attrs, sc.NetHostIPKey.String(hostIP))
|
|
||||||
}
|
|
||||||
if hostName != "" {
|
|
||||||
attrs = append(attrs, sc.NetHostNameKey.String(hostName))
|
|
||||||
}
|
|
||||||
if hostPort != 0 {
|
|
||||||
attrs = append(attrs, sc.NetHostPortKey.Int(hostPort))
|
|
||||||
}
|
|
||||||
|
|
||||||
return attrs
|
|
||||||
}
|
|
||||||
|
|
||||||
// hostIPNamePort extracts the IP address, name and (optional) port from hostWithPort.
|
|
||||||
// It handles both IPv4 and IPv6 addresses. If the host portion is not recognized
|
|
||||||
// as a valid IPv4 or IPv6 address, the `ip` result will be empty and the
|
|
||||||
// host portion will instead be returned in `name`.
|
|
||||||
func hostIPNamePort(hostWithPort string) (ip string, name string, port int) {
|
|
||||||
var (
|
|
||||||
hostPart, portPart string
|
|
||||||
parsedPort uint64
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
if hostPart, portPart, err = net.SplitHostPort(hostWithPort); err != nil {
|
|
||||||
hostPart, portPart = hostWithPort, ""
|
|
||||||
}
|
|
||||||
if parsedIP := net.ParseIP(hostPart); parsedIP != nil {
|
|
||||||
ip = parsedIP.String()
|
|
||||||
} else {
|
|
||||||
name = hostPart
|
|
||||||
}
|
|
||||||
if parsedPort, err = strconv.ParseUint(portPart, 10, 16); err == nil {
|
|
||||||
port = int(parsedPort)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// EndUserAttributesFromHTTPRequest generates attributes of the
|
|
||||||
// enduser namespace as specified by the OpenTelemetry specification
|
|
||||||
// for a span.
|
|
||||||
func (sc *SemanticConventions) EndUserAttributesFromHTTPRequest(request *http.Request) []attribute.KeyValue {
|
|
||||||
if username, _, ok := request.BasicAuth(); ok {
|
|
||||||
return []attribute.KeyValue{sc.EnduserIDKey.String(username)}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTTPClientAttributesFromHTTPRequest generates attributes of the
|
|
||||||
// http namespace as specified by the OpenTelemetry specification for
|
|
||||||
// a span on the client side.
|
|
||||||
func (sc *SemanticConventions) HTTPClientAttributesFromHTTPRequest(request *http.Request) []attribute.KeyValue {
|
|
||||||
attrs := []attribute.KeyValue{}
|
|
||||||
|
|
||||||
// remove any username/password info that may be in the URL
|
|
||||||
// before adding it to the attributes
|
|
||||||
userinfo := request.URL.User
|
|
||||||
request.URL.User = nil
|
|
||||||
|
|
||||||
attrs = append(attrs, sc.HTTPURLKey.String(request.URL.String()))
|
|
||||||
|
|
||||||
// restore any username/password info that was removed
|
|
||||||
request.URL.User = userinfo
|
|
||||||
|
|
||||||
return append(attrs, sc.httpCommonAttributesFromHTTPRequest(request)...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (sc *SemanticConventions) httpCommonAttributesFromHTTPRequest(request *http.Request) []attribute.KeyValue {
|
|
||||||
attrs := []attribute.KeyValue{}
|
|
||||||
if ua := request.UserAgent(); ua != "" {
|
|
||||||
attrs = append(attrs, sc.HTTPUserAgentKey.String(ua))
|
|
||||||
}
|
|
||||||
if request.ContentLength > 0 {
|
|
||||||
attrs = append(attrs, sc.HTTPRequestContentLengthKey.Int64(request.ContentLength))
|
|
||||||
}
|
|
||||||
|
|
||||||
return append(attrs, sc.httpBasicAttributesFromHTTPRequest(request)...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (sc *SemanticConventions) httpBasicAttributesFromHTTPRequest(request *http.Request) []attribute.KeyValue {
|
|
||||||
// as these attributes are used by HTTPServerMetricAttributesFromHTTPRequest, they should be low-cardinality
|
|
||||||
attrs := []attribute.KeyValue{}
|
|
||||||
|
|
||||||
if request.TLS != nil {
|
|
||||||
attrs = append(attrs, sc.HTTPSchemeHTTPS)
|
|
||||||
} else {
|
|
||||||
attrs = append(attrs, sc.HTTPSchemeHTTP)
|
|
||||||
}
|
|
||||||
|
|
||||||
if request.Host != "" {
|
|
||||||
attrs = append(attrs, sc.HTTPHostKey.String(request.Host))
|
|
||||||
} else if request.URL != nil && request.URL.Host != "" {
|
|
||||||
attrs = append(attrs, sc.HTTPHostKey.String(request.URL.Host))
|
|
||||||
}
|
|
||||||
|
|
||||||
flavor := ""
|
|
||||||
if request.ProtoMajor == 1 {
|
|
||||||
flavor = fmt.Sprintf("1.%d", request.ProtoMinor)
|
|
||||||
} else if request.ProtoMajor == 2 {
|
|
||||||
flavor = "2"
|
|
||||||
}
|
|
||||||
if flavor != "" {
|
|
||||||
attrs = append(attrs, sc.HTTPFlavorKey.String(flavor))
|
|
||||||
}
|
|
||||||
|
|
||||||
if request.Method != "" {
|
|
||||||
attrs = append(attrs, sc.HTTPMethodKey.String(request.Method))
|
|
||||||
} else {
|
|
||||||
attrs = append(attrs, sc.HTTPMethodKey.String(http.MethodGet))
|
|
||||||
}
|
|
||||||
|
|
||||||
return attrs
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTTPServerMetricAttributesFromHTTPRequest generates low-cardinality attributes
|
|
||||||
// to be used with server-side HTTP metrics.
|
|
||||||
func (sc *SemanticConventions) HTTPServerMetricAttributesFromHTTPRequest(serverName string, request *http.Request) []attribute.KeyValue {
|
|
||||||
attrs := []attribute.KeyValue{}
|
|
||||||
if serverName != "" {
|
|
||||||
attrs = append(attrs, sc.HTTPServerNameKey.String(serverName))
|
|
||||||
}
|
|
||||||
return append(attrs, sc.httpBasicAttributesFromHTTPRequest(request)...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTTPServerAttributesFromHTTPRequest generates attributes of the
|
|
||||||
// http namespace as specified by the OpenTelemetry specification for
|
|
||||||
// a span on the server side. Currently, only basic authentication is
|
|
||||||
// supported.
|
|
||||||
func (sc *SemanticConventions) HTTPServerAttributesFromHTTPRequest(serverName, route string, request *http.Request) []attribute.KeyValue {
|
|
||||||
attrs := []attribute.KeyValue{
|
|
||||||
sc.HTTPTargetKey.String(request.RequestURI),
|
|
||||||
}
|
|
||||||
|
|
||||||
if serverName != "" {
|
|
||||||
attrs = append(attrs, sc.HTTPServerNameKey.String(serverName))
|
|
||||||
}
|
|
||||||
if route != "" {
|
|
||||||
attrs = append(attrs, sc.HTTPRouteKey.String(route))
|
|
||||||
}
|
|
||||||
if values, ok := request.Header["X-Forwarded-For"]; ok && len(values) > 0 {
|
|
||||||
if addresses := strings.SplitN(values[0], ",", 2); len(addresses) > 0 {
|
|
||||||
attrs = append(attrs, sc.HTTPClientIPKey.String(addresses[0]))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return append(attrs, sc.httpCommonAttributesFromHTTPRequest(request)...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTTPAttributesFromHTTPStatusCode generates attributes of the http
|
|
||||||
// namespace as specified by the OpenTelemetry specification for a
|
|
||||||
// span.
|
|
||||||
func (sc *SemanticConventions) HTTPAttributesFromHTTPStatusCode(code int) []attribute.KeyValue {
|
|
||||||
attrs := []attribute.KeyValue{
|
|
||||||
sc.HTTPStatusCodeKey.Int(code),
|
|
||||||
}
|
|
||||||
return attrs
|
|
||||||
}
|
|
||||||
|
|
||||||
type codeRange struct {
|
|
||||||
fromInclusive int
|
|
||||||
toInclusive int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r codeRange) contains(code int) bool {
|
|
||||||
return r.fromInclusive <= code && code <= r.toInclusive
|
|
||||||
}
|
|
||||||
|
|
||||||
var validRangesPerCategory = map[int][]codeRange{
|
|
||||||
1: {
|
|
||||||
{http.StatusContinue, http.StatusEarlyHints},
|
|
||||||
},
|
|
||||||
2: {
|
|
||||||
{http.StatusOK, http.StatusAlreadyReported},
|
|
||||||
{http.StatusIMUsed, http.StatusIMUsed},
|
|
||||||
},
|
|
||||||
3: {
|
|
||||||
{http.StatusMultipleChoices, http.StatusUseProxy},
|
|
||||||
{http.StatusTemporaryRedirect, http.StatusPermanentRedirect},
|
|
||||||
},
|
|
||||||
4: {
|
|
||||||
{http.StatusBadRequest, http.StatusTeapot}, // yes, teapot is so useful…
|
|
||||||
{http.StatusMisdirectedRequest, http.StatusUpgradeRequired},
|
|
||||||
{http.StatusPreconditionRequired, http.StatusTooManyRequests},
|
|
||||||
{http.StatusRequestHeaderFieldsTooLarge, http.StatusRequestHeaderFieldsTooLarge},
|
|
||||||
{http.StatusUnavailableForLegalReasons, http.StatusUnavailableForLegalReasons},
|
|
||||||
},
|
|
||||||
5: {
|
|
||||||
{http.StatusInternalServerError, http.StatusLoopDetected},
|
|
||||||
{http.StatusNotExtended, http.StatusNetworkAuthenticationRequired},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
// SpanStatusFromHTTPStatusCode generates a status code and a message
|
|
||||||
// as specified by the OpenTelemetry specification for a span.
|
|
||||||
func SpanStatusFromHTTPStatusCode(code int) (codes.Code, string) {
|
|
||||||
spanCode, valid := validateHTTPStatusCode(code)
|
|
||||||
if !valid {
|
|
||||||
return spanCode, fmt.Sprintf("Invalid HTTP status code %d", code)
|
|
||||||
}
|
|
||||||
return spanCode, ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// SpanStatusFromHTTPStatusCodeAndSpanKind generates a status code and a message
|
|
||||||
// as specified by the OpenTelemetry specification for a span.
|
|
||||||
// Exclude 4xx for SERVER to set the appropriate status.
|
|
||||||
func SpanStatusFromHTTPStatusCodeAndSpanKind(code int, spanKind trace.SpanKind) (codes.Code, string) {
|
|
||||||
spanCode, valid := validateHTTPStatusCode(code)
|
|
||||||
if !valid {
|
|
||||||
return spanCode, fmt.Sprintf("Invalid HTTP status code %d", code)
|
|
||||||
}
|
|
||||||
category := code / 100
|
|
||||||
if spanKind == trace.SpanKindServer && category == 4 {
|
|
||||||
return codes.Unset, ""
|
|
||||||
}
|
|
||||||
return spanCode, ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// validateHTTPStatusCode validates the HTTP status code and returns
|
|
||||||
// corresponding span status code. If the `code` is not a valid HTTP status
|
|
||||||
// code, returns span status Error and false.
|
|
||||||
func validateHTTPStatusCode(code int) (codes.Code, bool) {
|
|
||||||
category := code / 100
|
|
||||||
ranges, ok := validRangesPerCategory[category]
|
|
||||||
if !ok {
|
|
||||||
return codes.Error, false
|
|
||||||
}
|
|
||||||
ok = false
|
|
||||||
for _, crange := range ranges {
|
|
||||||
ok = crange.contains(code)
|
|
||||||
if ok {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !ok {
|
|
||||||
return codes.Error, false
|
|
||||||
}
|
|
||||||
if category > 0 && category < 4 {
|
|
||||||
return codes.Unset, true
|
|
||||||
}
|
|
||||||
return codes.Error, true
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
// 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 semconv implements OpenTelemetry semantic conventions.
|
|
||||||
//
|
|
||||||
// OpenTelemetry semantic conventions are agreed standardized naming
|
|
||||||
// patterns for OpenTelemetry things. This package represents the conventions
|
|
||||||
// as of the v1.7.0 version of the OpenTelemetry specification.
|
|
||||||
package semconv // import "go.opentelemetry.io/otel/semconv/v1.7.0"
|
|
|
@ -1,20 +0,0 @@
|
||||||
// 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 semconv // import "go.opentelemetry.io/otel/semconv/v1.7.0"
|
|
||||||
|
|
||||||
const (
|
|
||||||
// ExceptionEventName is the name of the Span event representing an exception.
|
|
||||||
ExceptionEventName = "exception"
|
|
||||||
)
|
|
|
@ -1,114 +0,0 @@
|
||||||
// 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 semconv // import "go.opentelemetry.io/otel/semconv/v1.7.0"
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/attribute"
|
|
||||||
"go.opentelemetry.io/otel/codes"
|
|
||||||
"go.opentelemetry.io/otel/semconv/internal"
|
|
||||||
"go.opentelemetry.io/otel/trace"
|
|
||||||
)
|
|
||||||
|
|
||||||
// HTTP scheme attributes.
|
|
||||||
var (
|
|
||||||
HTTPSchemeHTTP = HTTPSchemeKey.String("http")
|
|
||||||
HTTPSchemeHTTPS = HTTPSchemeKey.String("https")
|
|
||||||
)
|
|
||||||
|
|
||||||
var sc = &internal.SemanticConventions{
|
|
||||||
EnduserIDKey: EnduserIDKey,
|
|
||||||
HTTPClientIPKey: HTTPClientIPKey,
|
|
||||||
HTTPFlavorKey: HTTPFlavorKey,
|
|
||||||
HTTPHostKey: HTTPHostKey,
|
|
||||||
HTTPMethodKey: HTTPMethodKey,
|
|
||||||
HTTPRequestContentLengthKey: HTTPRequestContentLengthKey,
|
|
||||||
HTTPRouteKey: HTTPRouteKey,
|
|
||||||
HTTPSchemeHTTP: HTTPSchemeHTTP,
|
|
||||||
HTTPSchemeHTTPS: HTTPSchemeHTTPS,
|
|
||||||
HTTPServerNameKey: HTTPServerNameKey,
|
|
||||||
HTTPStatusCodeKey: HTTPStatusCodeKey,
|
|
||||||
HTTPTargetKey: HTTPTargetKey,
|
|
||||||
HTTPURLKey: HTTPURLKey,
|
|
||||||
HTTPUserAgentKey: HTTPUserAgentKey,
|
|
||||||
NetHostIPKey: NetHostIPKey,
|
|
||||||
NetHostNameKey: NetHostNameKey,
|
|
||||||
NetHostPortKey: NetHostPortKey,
|
|
||||||
NetPeerIPKey: NetPeerIPKey,
|
|
||||||
NetPeerNameKey: NetPeerNameKey,
|
|
||||||
NetPeerPortKey: NetPeerPortKey,
|
|
||||||
NetTransportIP: NetTransportIP,
|
|
||||||
NetTransportOther: NetTransportOther,
|
|
||||||
NetTransportTCP: NetTransportTCP,
|
|
||||||
NetTransportUDP: NetTransportUDP,
|
|
||||||
NetTransportUnix: NetTransportUnix,
|
|
||||||
}
|
|
||||||
|
|
||||||
// NetAttributesFromHTTPRequest generates attributes of the net
|
|
||||||
// namespace as specified by the OpenTelemetry specification for a
|
|
||||||
// span. The network parameter is a string that net.Dial function
|
|
||||||
// from standard library can understand.
|
|
||||||
func NetAttributesFromHTTPRequest(network string, request *http.Request) []attribute.KeyValue {
|
|
||||||
return sc.NetAttributesFromHTTPRequest(network, request)
|
|
||||||
}
|
|
||||||
|
|
||||||
// EndUserAttributesFromHTTPRequest generates attributes of the
|
|
||||||
// enduser namespace as specified by the OpenTelemetry specification
|
|
||||||
// for a span.
|
|
||||||
func EndUserAttributesFromHTTPRequest(request *http.Request) []attribute.KeyValue {
|
|
||||||
return sc.EndUserAttributesFromHTTPRequest(request)
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTTPClientAttributesFromHTTPRequest generates attributes of the
|
|
||||||
// http namespace as specified by the OpenTelemetry specification for
|
|
||||||
// a span on the client side.
|
|
||||||
func HTTPClientAttributesFromHTTPRequest(request *http.Request) []attribute.KeyValue {
|
|
||||||
return sc.HTTPClientAttributesFromHTTPRequest(request)
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTTPServerMetricAttributesFromHTTPRequest generates low-cardinality attributes
|
|
||||||
// to be used with server-side HTTP metrics.
|
|
||||||
func HTTPServerMetricAttributesFromHTTPRequest(serverName string, request *http.Request) []attribute.KeyValue {
|
|
||||||
return sc.HTTPServerMetricAttributesFromHTTPRequest(serverName, request)
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTTPServerAttributesFromHTTPRequest generates attributes of the
|
|
||||||
// http namespace as specified by the OpenTelemetry specification for
|
|
||||||
// a span on the server side. Currently, only basic authentication is
|
|
||||||
// supported.
|
|
||||||
func HTTPServerAttributesFromHTTPRequest(serverName, route string, request *http.Request) []attribute.KeyValue {
|
|
||||||
return sc.HTTPServerAttributesFromHTTPRequest(serverName, route, request)
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTTPAttributesFromHTTPStatusCode generates attributes of the http
|
|
||||||
// namespace as specified by the OpenTelemetry specification for a
|
|
||||||
// span.
|
|
||||||
func HTTPAttributesFromHTTPStatusCode(code int) []attribute.KeyValue {
|
|
||||||
return sc.HTTPAttributesFromHTTPStatusCode(code)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SpanStatusFromHTTPStatusCode generates a status code and a message
|
|
||||||
// as specified by the OpenTelemetry specification for a span.
|
|
||||||
func SpanStatusFromHTTPStatusCode(code int) (codes.Code, string) {
|
|
||||||
return internal.SpanStatusFromHTTPStatusCode(code)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SpanStatusFromHTTPStatusCodeAndSpanKind generates a status code and a message
|
|
||||||
// as specified by the OpenTelemetry specification for a span.
|
|
||||||
// Exclude 4xx for SERVER to set the appropriate status.
|
|
||||||
func SpanStatusFromHTTPStatusCodeAndSpanKind(code int, spanKind trace.SpanKind) (codes.Code, string) {
|
|
||||||
return internal.SpanStatusFromHTTPStatusCodeAndSpanKind(code, spanKind)
|
|
||||||
}
|
|
|
@ -1,946 +0,0 @@
|
||||||
// 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.
|
|
||||||
|
|
||||||
// Code generated from semantic convention specification. DO NOT EDIT.
|
|
||||||
|
|
||||||
package semconv // import "go.opentelemetry.io/otel/semconv/v1.7.0"
|
|
||||||
|
|
||||||
import "go.opentelemetry.io/otel/attribute"
|
|
||||||
|
|
||||||
// A cloud environment (e.g. GCP, Azure, AWS)
|
|
||||||
const (
|
|
||||||
// Name of the cloud provider.
|
|
||||||
//
|
|
||||||
// Type: Enum
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
CloudProviderKey = attribute.Key("cloud.provider")
|
|
||||||
// The cloud account ID the resource is assigned to.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '111111111111', 'opentelemetry'
|
|
||||||
CloudAccountIDKey = attribute.Key("cloud.account.id")
|
|
||||||
// The geographical region the resource is running. Refer to your provider's docs
|
|
||||||
// to see the available regions, for example [Alibaba Cloud
|
|
||||||
// regions](https://www.alibabacloud.com/help/doc-detail/40654.htm), [AWS
|
|
||||||
// regions](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/),
|
|
||||||
// [Azure regions](https://azure.microsoft.com/en-us/global-
|
|
||||||
// infrastructure/geographies/), or [Google Cloud
|
|
||||||
// regions](https://cloud.google.com/about/locations).
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'us-central1', 'us-east-1'
|
|
||||||
CloudRegionKey = attribute.Key("cloud.region")
|
|
||||||
// Cloud regions often have multiple, isolated locations known as zones to
|
|
||||||
// increase availability. Availability zone represents the zone where the resource
|
|
||||||
// is running.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'us-east-1c'
|
|
||||||
// Note: Availability zones are called "zones" on Alibaba Cloud and Google Cloud.
|
|
||||||
CloudAvailabilityZoneKey = attribute.Key("cloud.availability_zone")
|
|
||||||
// The cloud platform in use.
|
|
||||||
//
|
|
||||||
// Type: Enum
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Note: The prefix of the service SHOULD match the one specified in
|
|
||||||
// `cloud.provider`.
|
|
||||||
CloudPlatformKey = attribute.Key("cloud.platform")
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// Alibaba Cloud
|
|
||||||
CloudProviderAlibabaCloud = CloudProviderKey.String("alibaba_cloud")
|
|
||||||
// Amazon Web Services
|
|
||||||
CloudProviderAWS = CloudProviderKey.String("aws")
|
|
||||||
// Microsoft Azure
|
|
||||||
CloudProviderAzure = CloudProviderKey.String("azure")
|
|
||||||
// Google Cloud Platform
|
|
||||||
CloudProviderGCP = CloudProviderKey.String("gcp")
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// Alibaba Cloud Elastic Compute Service
|
|
||||||
CloudPlatformAlibabaCloudECS = CloudPlatformKey.String("alibaba_cloud_ecs")
|
|
||||||
// Alibaba Cloud Function Compute
|
|
||||||
CloudPlatformAlibabaCloudFc = CloudPlatformKey.String("alibaba_cloud_fc")
|
|
||||||
// AWS Elastic Compute Cloud
|
|
||||||
CloudPlatformAWSEC2 = CloudPlatformKey.String("aws_ec2")
|
|
||||||
// AWS Elastic Container Service
|
|
||||||
CloudPlatformAWSECS = CloudPlatformKey.String("aws_ecs")
|
|
||||||
// AWS Elastic Kubernetes Service
|
|
||||||
CloudPlatformAWSEKS = CloudPlatformKey.String("aws_eks")
|
|
||||||
// AWS Lambda
|
|
||||||
CloudPlatformAWSLambda = CloudPlatformKey.String("aws_lambda")
|
|
||||||
// AWS Elastic Beanstalk
|
|
||||||
CloudPlatformAWSElasticBeanstalk = CloudPlatformKey.String("aws_elastic_beanstalk")
|
|
||||||
// Azure Virtual Machines
|
|
||||||
CloudPlatformAzureVM = CloudPlatformKey.String("azure_vm")
|
|
||||||
// Azure Container Instances
|
|
||||||
CloudPlatformAzureContainerInstances = CloudPlatformKey.String("azure_container_instances")
|
|
||||||
// Azure Kubernetes Service
|
|
||||||
CloudPlatformAzureAKS = CloudPlatformKey.String("azure_aks")
|
|
||||||
// Azure Functions
|
|
||||||
CloudPlatformAzureFunctions = CloudPlatformKey.String("azure_functions")
|
|
||||||
// Azure App Service
|
|
||||||
CloudPlatformAzureAppService = CloudPlatformKey.String("azure_app_service")
|
|
||||||
// Google Cloud Compute Engine (GCE)
|
|
||||||
CloudPlatformGCPComputeEngine = CloudPlatformKey.String("gcp_compute_engine")
|
|
||||||
// Google Cloud Run
|
|
||||||
CloudPlatformGCPCloudRun = CloudPlatformKey.String("gcp_cloud_run")
|
|
||||||
// Google Cloud Kubernetes Engine (GKE)
|
|
||||||
CloudPlatformGCPKubernetesEngine = CloudPlatformKey.String("gcp_kubernetes_engine")
|
|
||||||
// Google Cloud Functions (GCF)
|
|
||||||
CloudPlatformGCPCloudFunctions = CloudPlatformKey.String("gcp_cloud_functions")
|
|
||||||
// Google Cloud App Engine (GAE)
|
|
||||||
CloudPlatformGCPAppEngine = CloudPlatformKey.String("gcp_app_engine")
|
|
||||||
)
|
|
||||||
|
|
||||||
// Resources used by AWS Elastic Container Service (ECS).
|
|
||||||
const (
|
|
||||||
// The Amazon Resource Name (ARN) of an [ECS container instance](https://docs.aws.
|
|
||||||
// amazon.com/AmazonECS/latest/developerguide/ECS_instances.html).
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'arn:aws:ecs:us-
|
|
||||||
// west-1:123456789123:container/32624152-9086-4f0e-acae-1a75b14fe4d9'
|
|
||||||
AWSECSContainerARNKey = attribute.Key("aws.ecs.container.arn")
|
|
||||||
// The ARN of an [ECS cluster](https://docs.aws.amazon.com/AmazonECS/latest/develo
|
|
||||||
// perguide/clusters.html).
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster'
|
|
||||||
AWSECSClusterARNKey = attribute.Key("aws.ecs.cluster.arn")
|
|
||||||
// The [launch type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/l
|
|
||||||
// aunch_types.html) for an ECS task.
|
|
||||||
//
|
|
||||||
// Type: Enum
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
AWSECSLaunchtypeKey = attribute.Key("aws.ecs.launchtype")
|
|
||||||
// The ARN of an [ECS task definition](https://docs.aws.amazon.com/AmazonECS/lates
|
|
||||||
// t/developerguide/task_definitions.html).
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'arn:aws:ecs:us-
|
|
||||||
// west-1:123456789123:task/10838bed-421f-43ef-870a-f43feacbbb5b'
|
|
||||||
AWSECSTaskARNKey = attribute.Key("aws.ecs.task.arn")
|
|
||||||
// The task definition family this task definition is a member of.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'opentelemetry-family'
|
|
||||||
AWSECSTaskFamilyKey = attribute.Key("aws.ecs.task.family")
|
|
||||||
// The revision for this task definition.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '8', '26'
|
|
||||||
AWSECSTaskRevisionKey = attribute.Key("aws.ecs.task.revision")
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// ec2
|
|
||||||
AWSECSLaunchtypeEC2 = AWSECSLaunchtypeKey.String("ec2")
|
|
||||||
// fargate
|
|
||||||
AWSECSLaunchtypeFargate = AWSECSLaunchtypeKey.String("fargate")
|
|
||||||
)
|
|
||||||
|
|
||||||
// Resources used by AWS Elastic Kubernetes Service (EKS).
|
|
||||||
const (
|
|
||||||
// The ARN of an EKS cluster.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster'
|
|
||||||
AWSEKSClusterARNKey = attribute.Key("aws.eks.cluster.arn")
|
|
||||||
)
|
|
||||||
|
|
||||||
// Resources specific to Amazon Web Services.
|
|
||||||
const (
|
|
||||||
// The name(s) of the AWS log group(s) an application is writing to.
|
|
||||||
//
|
|
||||||
// Type: string[]
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '/aws/lambda/my-function', 'opentelemetry-service'
|
|
||||||
// Note: Multiple log groups must be supported for cases like multi-container
|
|
||||||
// applications, where a single application has sidecar containers, and each write
|
|
||||||
// to their own log group.
|
|
||||||
AWSLogGroupNamesKey = attribute.Key("aws.log.group.names")
|
|
||||||
// The Amazon Resource Name(s) (ARN) of the AWS log group(s).
|
|
||||||
//
|
|
||||||
// Type: string[]
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:*'
|
|
||||||
// Note: See the [log group ARN format
|
|
||||||
// documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-
|
|
||||||
// access-control-overview-cwl.html#CWL_ARN_Format).
|
|
||||||
AWSLogGroupARNsKey = attribute.Key("aws.log.group.arns")
|
|
||||||
// The name(s) of the AWS log stream(s) an application is writing to.
|
|
||||||
//
|
|
||||||
// Type: string[]
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'logs/main/10838bed-421f-43ef-870a-f43feacbbb5b'
|
|
||||||
AWSLogStreamNamesKey = attribute.Key("aws.log.stream.names")
|
|
||||||
// The ARN(s) of the AWS log stream(s).
|
|
||||||
//
|
|
||||||
// Type: string[]
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:log-
|
|
||||||
// stream:logs/main/10838bed-421f-43ef-870a-f43feacbbb5b'
|
|
||||||
// Note: See the [log stream ARN format
|
|
||||||
// documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-
|
|
||||||
// access-control-overview-cwl.html#CWL_ARN_Format). One log group can contain
|
|
||||||
// several log streams, so these ARNs necessarily identify both a log group and a
|
|
||||||
// log stream.
|
|
||||||
AWSLogStreamARNsKey = attribute.Key("aws.log.stream.arns")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A container instance.
|
|
||||||
const (
|
|
||||||
// Container name.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'opentelemetry-autoconf'
|
|
||||||
ContainerNameKey = attribute.Key("container.name")
|
|
||||||
// Container ID. Usually a UUID, as for example used to [identify Docker
|
|
||||||
// containers](https://docs.docker.com/engine/reference/run/#container-
|
|
||||||
// identification). The UUID might be abbreviated.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'a3bf90e006b2'
|
|
||||||
ContainerIDKey = attribute.Key("container.id")
|
|
||||||
// The container runtime managing this container.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'docker', 'containerd', 'rkt'
|
|
||||||
ContainerRuntimeKey = attribute.Key("container.runtime")
|
|
||||||
// Name of the image the container was built on.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'gcr.io/opentelemetry/operator'
|
|
||||||
ContainerImageNameKey = attribute.Key("container.image.name")
|
|
||||||
// Container image tag.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '0.1'
|
|
||||||
ContainerImageTagKey = attribute.Key("container.image.tag")
|
|
||||||
)
|
|
||||||
|
|
||||||
// The software deployment.
|
|
||||||
const (
|
|
||||||
// Name of the [deployment
|
|
||||||
// environment](https://en.wikipedia.org/wiki/Deployment_environment) (aka
|
|
||||||
// deployment tier).
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'staging', 'production'
|
|
||||||
DeploymentEnvironmentKey = attribute.Key("deployment.environment")
|
|
||||||
)
|
|
||||||
|
|
||||||
// The device on which the process represented by this resource is running.
|
|
||||||
const (
|
|
||||||
// A unique identifier representing the device
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '2ab2916d-a51f-4ac8-80ee-45ac31a28092'
|
|
||||||
// Note: The device identifier MUST only be defined using the values outlined
|
|
||||||
// below. This value is not an advertising identifier and MUST NOT be used as
|
|
||||||
// such. On iOS (Swift or Objective-C), this value MUST be equal to the [vendor id
|
|
||||||
// entifier](https://developer.apple.com/documentation/uikit/uidevice/1620059-iden
|
|
||||||
// tifierforvendor). On Android (Java or Kotlin), this value MUST be equal to the
|
|
||||||
// Firebase Installation ID or a globally unique UUID which is persisted across
|
|
||||||
// sessions in your application. More information can be found
|
|
||||||
// [here](https://developer.android.com/training/articles/user-data-ids) on best
|
|
||||||
// practices and exact implementation details. Caution should be taken when
|
|
||||||
// storing personal data or anything which can identify a user. GDPR and data
|
|
||||||
// protection laws may apply, ensure you do your own due diligence.
|
|
||||||
DeviceIDKey = attribute.Key("device.id")
|
|
||||||
// The model identifier for the device
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'iPhone3,4', 'SM-G920F'
|
|
||||||
// Note: It's recommended this value represents a machine readable version of the
|
|
||||||
// model identifier rather than the market or consumer-friendly name of the
|
|
||||||
// device.
|
|
||||||
DeviceModelIdentifierKey = attribute.Key("device.model.identifier")
|
|
||||||
// The marketing name for the device model
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'iPhone 6s Plus', 'Samsung Galaxy S6'
|
|
||||||
// Note: It's recommended this value represents a human readable version of the
|
|
||||||
// device model rather than a machine readable alternative.
|
|
||||||
DeviceModelNameKey = attribute.Key("device.model.name")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A serverless instance.
|
|
||||||
const (
|
|
||||||
// The name of the single function that this runtime instance executes.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: Always
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'my-function'
|
|
||||||
// Note: This is the name of the function as configured/deployed on the FaaS
|
|
||||||
// platform and is usually different from the name of the callback function (which
|
|
||||||
// may be stored in the
|
|
||||||
// [`code.namespace`/`code.function`](../../trace/semantic_conventions/span-
|
|
||||||
// general.md#source-code-attributes) span attributes).
|
|
||||||
FaaSNameKey = attribute.Key("faas.name")
|
|
||||||
// The unique ID of the single function that this runtime instance executes.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'arn:aws:lambda:us-west-2:123456789012:function:my-function'
|
|
||||||
// Note: Depending on the cloud provider, use:
|
|
||||||
|
|
||||||
// * **AWS Lambda:** The function
|
|
||||||
// [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-
|
|
||||||
// namespaces.html).
|
|
||||||
// Take care not to use the "invoked ARN" directly but replace any
|
|
||||||
// [alias suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-
|
|
||||||
// aliases.html) with the resolved function version, as the same runtime instance
|
|
||||||
// may be invokable with multiple
|
|
||||||
// different aliases.
|
|
||||||
// * **GCP:** The [URI of the resource](https://cloud.google.com/iam/docs/full-
|
|
||||||
// resource-names)
|
|
||||||
// * **Azure:** The [Fully Qualified Resource ID](https://docs.microsoft.com/en-
|
|
||||||
// us/rest/api/resources/resources/get-by-id).
|
|
||||||
|
|
||||||
// On some providers, it may not be possible to determine the full ID at startup,
|
|
||||||
// which is why this field cannot be made required. For example, on AWS the
|
|
||||||
// account ID
|
|
||||||
// part of the ARN is not available without calling another AWS API
|
|
||||||
// which may be deemed too slow for a short-running lambda function.
|
|
||||||
// As an alternative, consider setting `faas.id` as a span attribute instead.
|
|
||||||
FaaSIDKey = attribute.Key("faas.id")
|
|
||||||
// The immutable version of the function being executed.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '26', 'pinkfroid-00002'
|
|
||||||
// Note: Depending on the cloud provider and platform, use:
|
|
||||||
|
|
||||||
// * **AWS Lambda:** The [function
|
|
||||||
// version](https://docs.aws.amazon.com/lambda/latest/dg/configuration-
|
|
||||||
// versions.html)
|
|
||||||
// (an integer represented as a decimal string).
|
|
||||||
// * **Google Cloud Run:** The
|
|
||||||
// [revision](https://cloud.google.com/run/docs/managing/revisions)
|
|
||||||
// (i.e., the function name plus the revision suffix).
|
|
||||||
// * **Google Cloud Functions:** The value of the
|
|
||||||
// [`K_REVISION` environment
|
|
||||||
// variable](https://cloud.google.com/functions/docs/env-
|
|
||||||
// var#runtime_environment_variables_set_automatically).
|
|
||||||
// * **Azure Functions:** Not applicable. Do not set this attribute.
|
|
||||||
FaaSVersionKey = attribute.Key("faas.version")
|
|
||||||
// The execution environment ID as a string, that will be potentially reused for
|
|
||||||
// other invocations to the same function/function version.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '2021/06/28/[$LATEST]2f399eb14537447da05ab2a2e39309de'
|
|
||||||
// Note: * **AWS Lambda:** Use the (full) log stream name.
|
|
||||||
FaaSInstanceKey = attribute.Key("faas.instance")
|
|
||||||
// The amount of memory available to the serverless function in MiB.
|
|
||||||
//
|
|
||||||
// Type: int
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 128
|
|
||||||
// Note: It's recommended to set this attribute since e.g. too little memory can
|
|
||||||
// easily stop a Java AWS Lambda function from working correctly. On AWS Lambda,
|
|
||||||
// the environment variable `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this
|
|
||||||
// information.
|
|
||||||
FaaSMaxMemoryKey = attribute.Key("faas.max_memory")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A host is defined as a general computing instance.
|
|
||||||
const (
|
|
||||||
// Unique host ID. For Cloud, this must be the instance_id assigned by the cloud
|
|
||||||
// provider.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'opentelemetry-test'
|
|
||||||
HostIDKey = attribute.Key("host.id")
|
|
||||||
// Name of the host. On Unix systems, it may contain what the hostname command
|
|
||||||
// returns, or the fully qualified hostname, or another name specified by the
|
|
||||||
// user.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'opentelemetry-test'
|
|
||||||
HostNameKey = attribute.Key("host.name")
|
|
||||||
// Type of host. For Cloud, this must be the machine type.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'n1-standard-1'
|
|
||||||
HostTypeKey = attribute.Key("host.type")
|
|
||||||
// The CPU architecture the host system is running on.
|
|
||||||
//
|
|
||||||
// Type: Enum
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
HostArchKey = attribute.Key("host.arch")
|
|
||||||
// Name of the VM image or OS install the host was instantiated from.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'infra-ami-eks-worker-node-7d4ec78312', 'CentOS-8-x86_64-1905'
|
|
||||||
HostImageNameKey = attribute.Key("host.image.name")
|
|
||||||
// VM image ID. For Cloud, this value is from the provider.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'ami-07b06b442921831e5'
|
|
||||||
HostImageIDKey = attribute.Key("host.image.id")
|
|
||||||
// The version string of the VM image as defined in [Version
|
|
||||||
// Attributes](README.md#version-attributes).
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '0.1'
|
|
||||||
HostImageVersionKey = attribute.Key("host.image.version")
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// AMD64
|
|
||||||
HostArchAMD64 = HostArchKey.String("amd64")
|
|
||||||
// ARM32
|
|
||||||
HostArchARM32 = HostArchKey.String("arm32")
|
|
||||||
// ARM64
|
|
||||||
HostArchARM64 = HostArchKey.String("arm64")
|
|
||||||
// Itanium
|
|
||||||
HostArchIA64 = HostArchKey.String("ia64")
|
|
||||||
// 32-bit PowerPC
|
|
||||||
HostArchPPC32 = HostArchKey.String("ppc32")
|
|
||||||
// 64-bit PowerPC
|
|
||||||
HostArchPPC64 = HostArchKey.String("ppc64")
|
|
||||||
// 32-bit x86
|
|
||||||
HostArchX86 = HostArchKey.String("x86")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Kubernetes Cluster.
|
|
||||||
const (
|
|
||||||
// The name of the cluster.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'opentelemetry-cluster'
|
|
||||||
K8SClusterNameKey = attribute.Key("k8s.cluster.name")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Kubernetes Node object.
|
|
||||||
const (
|
|
||||||
// The name of the Node.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'node-1'
|
|
||||||
K8SNodeNameKey = attribute.Key("k8s.node.name")
|
|
||||||
// The UID of the Node.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '1eb3a0c6-0477-4080-a9cb-0cb7db65c6a2'
|
|
||||||
K8SNodeUIDKey = attribute.Key("k8s.node.uid")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Kubernetes Namespace.
|
|
||||||
const (
|
|
||||||
// The name of the namespace that the pod is running in.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'default'
|
|
||||||
K8SNamespaceNameKey = attribute.Key("k8s.namespace.name")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Kubernetes Pod object.
|
|
||||||
const (
|
|
||||||
// The UID of the Pod.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'
|
|
||||||
K8SPodUIDKey = attribute.Key("k8s.pod.uid")
|
|
||||||
// The name of the Pod.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'opentelemetry-pod-autoconf'
|
|
||||||
K8SPodNameKey = attribute.Key("k8s.pod.name")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A container in a [PodTemplate](https://kubernetes.io/docs/concepts/workloads/pods/#pod-templates).
|
|
||||||
const (
|
|
||||||
// The name of the Container in a Pod template.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'redis'
|
|
||||||
K8SContainerNameKey = attribute.Key("k8s.container.name")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Kubernetes ReplicaSet object.
|
|
||||||
const (
|
|
||||||
// The UID of the ReplicaSet.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'
|
|
||||||
K8SReplicaSetUIDKey = attribute.Key("k8s.replicaset.uid")
|
|
||||||
// The name of the ReplicaSet.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'opentelemetry'
|
|
||||||
K8SReplicaSetNameKey = attribute.Key("k8s.replicaset.name")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Kubernetes Deployment object.
|
|
||||||
const (
|
|
||||||
// The UID of the Deployment.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'
|
|
||||||
K8SDeploymentUIDKey = attribute.Key("k8s.deployment.uid")
|
|
||||||
// The name of the Deployment.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'opentelemetry'
|
|
||||||
K8SDeploymentNameKey = attribute.Key("k8s.deployment.name")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Kubernetes StatefulSet object.
|
|
||||||
const (
|
|
||||||
// The UID of the StatefulSet.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'
|
|
||||||
K8SStatefulSetUIDKey = attribute.Key("k8s.statefulset.uid")
|
|
||||||
// The name of the StatefulSet.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'opentelemetry'
|
|
||||||
K8SStatefulSetNameKey = attribute.Key("k8s.statefulset.name")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Kubernetes DaemonSet object.
|
|
||||||
const (
|
|
||||||
// The UID of the DaemonSet.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'
|
|
||||||
K8SDaemonSetUIDKey = attribute.Key("k8s.daemonset.uid")
|
|
||||||
// The name of the DaemonSet.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'opentelemetry'
|
|
||||||
K8SDaemonSetNameKey = attribute.Key("k8s.daemonset.name")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Kubernetes Job object.
|
|
||||||
const (
|
|
||||||
// The UID of the Job.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'
|
|
||||||
K8SJobUIDKey = attribute.Key("k8s.job.uid")
|
|
||||||
// The name of the Job.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'opentelemetry'
|
|
||||||
K8SJobNameKey = attribute.Key("k8s.job.name")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Kubernetes CronJob object.
|
|
||||||
const (
|
|
||||||
// The UID of the CronJob.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'
|
|
||||||
K8SCronJobUIDKey = attribute.Key("k8s.cronjob.uid")
|
|
||||||
// The name of the CronJob.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'opentelemetry'
|
|
||||||
K8SCronJobNameKey = attribute.Key("k8s.cronjob.name")
|
|
||||||
)
|
|
||||||
|
|
||||||
// The operating system (OS) on which the process represented by this resource is running.
|
|
||||||
const (
|
|
||||||
// The operating system type.
|
|
||||||
//
|
|
||||||
// Type: Enum
|
|
||||||
// Required: Always
|
|
||||||
// Stability: stable
|
|
||||||
OSTypeKey = attribute.Key("os.type")
|
|
||||||
// Human readable (not intended to be parsed) OS version information, like e.g.
|
|
||||||
// reported by `ver` or `lsb_release -a` commands.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'Microsoft Windows [Version 10.0.18363.778]', 'Ubuntu 18.04.1 LTS'
|
|
||||||
OSDescriptionKey = attribute.Key("os.description")
|
|
||||||
// Human readable operating system name.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'iOS', 'Android', 'Ubuntu'
|
|
||||||
OSNameKey = attribute.Key("os.name")
|
|
||||||
// The version string of the operating system as defined in [Version
|
|
||||||
// Attributes](../../resource/semantic_conventions/README.md#version-attributes).
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '14.2.1', '18.04.1'
|
|
||||||
OSVersionKey = attribute.Key("os.version")
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// Microsoft Windows
|
|
||||||
OSTypeWindows = OSTypeKey.String("windows")
|
|
||||||
// Linux
|
|
||||||
OSTypeLinux = OSTypeKey.String("linux")
|
|
||||||
// Apple Darwin
|
|
||||||
OSTypeDarwin = OSTypeKey.String("darwin")
|
|
||||||
// FreeBSD
|
|
||||||
OSTypeFreeBSD = OSTypeKey.String("freebsd")
|
|
||||||
// NetBSD
|
|
||||||
OSTypeNetBSD = OSTypeKey.String("netbsd")
|
|
||||||
// OpenBSD
|
|
||||||
OSTypeOpenBSD = OSTypeKey.String("openbsd")
|
|
||||||
// DragonFly BSD
|
|
||||||
OSTypeDragonflyBSD = OSTypeKey.String("dragonflybsd")
|
|
||||||
// HP-UX (Hewlett Packard Unix)
|
|
||||||
OSTypeHPUX = OSTypeKey.String("hpux")
|
|
||||||
// AIX (Advanced Interactive eXecutive)
|
|
||||||
OSTypeAIX = OSTypeKey.String("aix")
|
|
||||||
// Oracle Solaris
|
|
||||||
OSTypeSolaris = OSTypeKey.String("solaris")
|
|
||||||
// IBM z/OS
|
|
||||||
OSTypeZOS = OSTypeKey.String("z_os")
|
|
||||||
)
|
|
||||||
|
|
||||||
// An operating system process.
|
|
||||||
const (
|
|
||||||
// Process identifier (PID).
|
|
||||||
//
|
|
||||||
// Type: int
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 1234
|
|
||||||
ProcessPIDKey = attribute.Key("process.pid")
|
|
||||||
// The name of the process executable. On Linux based systems, can be set to the
|
|
||||||
// `Name` in `proc/[pid]/status`. On Windows, can be set to the base name of
|
|
||||||
// `GetProcessImageFileNameW`.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: See below
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'otelcol'
|
|
||||||
ProcessExecutableNameKey = attribute.Key("process.executable.name")
|
|
||||||
// The full path to the process executable. On Linux based systems, can be set to
|
|
||||||
// the target of `proc/[pid]/exe`. On Windows, can be set to the result of
|
|
||||||
// `GetProcessImageFileNameW`.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: See below
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '/usr/bin/cmd/otelcol'
|
|
||||||
ProcessExecutablePathKey = attribute.Key("process.executable.path")
|
|
||||||
// The command used to launch the process (i.e. the command name). On Linux based
|
|
||||||
// systems, can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows,
|
|
||||||
// can be set to the first parameter extracted from `GetCommandLineW`.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: See below
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'cmd/otelcol'
|
|
||||||
ProcessCommandKey = attribute.Key("process.command")
|
|
||||||
// The full command used to launch the process as a single string representing the
|
|
||||||
// full command. On Windows, can be set to the result of `GetCommandLineW`. Do not
|
|
||||||
// set this if you have to assemble it just for monitoring; use
|
|
||||||
// `process.command_args` instead.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: See below
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'C:\\cmd\\otecol --config="my directory\\config.yaml"'
|
|
||||||
ProcessCommandLineKey = attribute.Key("process.command_line")
|
|
||||||
// All the command arguments (including the command/executable itself) as received
|
|
||||||
// by the process. On Linux-based systems (and some other Unixoid systems
|
|
||||||
// supporting procfs), can be set according to the list of null-delimited strings
|
|
||||||
// extracted from `proc/[pid]/cmdline`. For libc-based executables, this would be
|
|
||||||
// the full argv vector passed to `main`.
|
|
||||||
//
|
|
||||||
// Type: string[]
|
|
||||||
// Required: See below
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'cmd/otecol', '--config=config.yaml'
|
|
||||||
ProcessCommandArgsKey = attribute.Key("process.command_args")
|
|
||||||
// The username of the user that owns the process.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'root'
|
|
||||||
ProcessOwnerKey = attribute.Key("process.owner")
|
|
||||||
)
|
|
||||||
|
|
||||||
// The single (language) runtime instance which is monitored.
|
|
||||||
const (
|
|
||||||
// The name of the runtime of this process. For compiled native binaries, this
|
|
||||||
// SHOULD be the name of the compiler.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'OpenJDK Runtime Environment'
|
|
||||||
ProcessRuntimeNameKey = attribute.Key("process.runtime.name")
|
|
||||||
// The version of the runtime of this process, as returned by the runtime without
|
|
||||||
// modification.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '14.0.2'
|
|
||||||
ProcessRuntimeVersionKey = attribute.Key("process.runtime.version")
|
|
||||||
// An additional description about the runtime of the process, for example a
|
|
||||||
// specific vendor customization of the runtime environment.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0'
|
|
||||||
ProcessRuntimeDescriptionKey = attribute.Key("process.runtime.description")
|
|
||||||
)
|
|
||||||
|
|
||||||
// A service instance.
|
|
||||||
const (
|
|
||||||
// Logical name of the service.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: Always
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'shoppingcart'
|
|
||||||
// Note: MUST be the same for all instances of horizontally scaled services. If
|
|
||||||
// the value was not specified, SDKs MUST fallback to `unknown_service:`
|
|
||||||
// concatenated with [`process.executable.name`](process.md#process), e.g.
|
|
||||||
// `unknown_service:bash`. If `process.executable.name` is not available, the
|
|
||||||
// value MUST be set to `unknown_service`.
|
|
||||||
ServiceNameKey = attribute.Key("service.name")
|
|
||||||
// A namespace for `service.name`.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'Shop'
|
|
||||||
// Note: A string value having a meaning that helps to distinguish a group of
|
|
||||||
// services, for example the team name that owns a group of services.
|
|
||||||
// `service.name` is expected to be unique within the same namespace. If
|
|
||||||
// `service.namespace` is not specified in the Resource then `service.name` is
|
|
||||||
// expected to be unique for all services that have no explicit namespace defined
|
|
||||||
// (so the empty/unspecified namespace is simply one more valid namespace). Zero-
|
|
||||||
// length namespace string is assumed equal to unspecified namespace.
|
|
||||||
ServiceNamespaceKey = attribute.Key("service.namespace")
|
|
||||||
// The string ID of the service instance.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '627cc493-f310-47de-96bd-71410b7dec09'
|
|
||||||
// Note: MUST be unique for each instance of the same
|
|
||||||
// `service.namespace,service.name` pair (in other words
|
|
||||||
// `service.namespace,service.name,service.instance.id` triplet MUST be globally
|
|
||||||
// unique). The ID helps to distinguish instances of the same service that exist
|
|
||||||
// at the same time (e.g. instances of a horizontally scaled service). It is
|
|
||||||
// preferable for the ID to be persistent and stay the same for the lifetime of
|
|
||||||
// the service instance, however it is acceptable that the ID is ephemeral and
|
|
||||||
// changes during important lifetime events for the service (e.g. service
|
|
||||||
// restarts). If the service has no inherent unique ID that can be used as the
|
|
||||||
// value of this attribute it is recommended to generate a random Version 1 or
|
|
||||||
// Version 4 RFC 4122 UUID (services aiming for reproducible UUIDs may also use
|
|
||||||
// Version 5, see RFC 4122 for more recommendations).
|
|
||||||
ServiceInstanceIDKey = attribute.Key("service.instance.id")
|
|
||||||
// The version string of the service API or implementation.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '2.0.0'
|
|
||||||
ServiceVersionKey = attribute.Key("service.version")
|
|
||||||
)
|
|
||||||
|
|
||||||
// The telemetry SDK used to capture data recorded by the instrumentation libraries.
|
|
||||||
const (
|
|
||||||
// The name of the telemetry SDK as defined above.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'opentelemetry'
|
|
||||||
TelemetrySDKNameKey = attribute.Key("telemetry.sdk.name")
|
|
||||||
// The language of the telemetry SDK.
|
|
||||||
//
|
|
||||||
// Type: Enum
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
TelemetrySDKLanguageKey = attribute.Key("telemetry.sdk.language")
|
|
||||||
// The version string of the telemetry SDK.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '1.2.3'
|
|
||||||
TelemetrySDKVersionKey = attribute.Key("telemetry.sdk.version")
|
|
||||||
// The version string of the auto instrumentation agent, if used.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '1.2.3'
|
|
||||||
TelemetryAutoVersionKey = attribute.Key("telemetry.auto.version")
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// cpp
|
|
||||||
TelemetrySDKLanguageCPP = TelemetrySDKLanguageKey.String("cpp")
|
|
||||||
// dotnet
|
|
||||||
TelemetrySDKLanguageDotnet = TelemetrySDKLanguageKey.String("dotnet")
|
|
||||||
// erlang
|
|
||||||
TelemetrySDKLanguageErlang = TelemetrySDKLanguageKey.String("erlang")
|
|
||||||
// go
|
|
||||||
TelemetrySDKLanguageGo = TelemetrySDKLanguageKey.String("go")
|
|
||||||
// java
|
|
||||||
TelemetrySDKLanguageJava = TelemetrySDKLanguageKey.String("java")
|
|
||||||
// nodejs
|
|
||||||
TelemetrySDKLanguageNodejs = TelemetrySDKLanguageKey.String("nodejs")
|
|
||||||
// php
|
|
||||||
TelemetrySDKLanguagePHP = TelemetrySDKLanguageKey.String("php")
|
|
||||||
// python
|
|
||||||
TelemetrySDKLanguagePython = TelemetrySDKLanguageKey.String("python")
|
|
||||||
// ruby
|
|
||||||
TelemetrySDKLanguageRuby = TelemetrySDKLanguageKey.String("ruby")
|
|
||||||
// webjs
|
|
||||||
TelemetrySDKLanguageWebjs = TelemetrySDKLanguageKey.String("webjs")
|
|
||||||
)
|
|
||||||
|
|
||||||
// Resource describing the packaged software running the application code. Web engines are typically executed using process.runtime.
|
|
||||||
const (
|
|
||||||
// The name of the web engine.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: Always
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'WildFly'
|
|
||||||
WebEngineNameKey = attribute.Key("webengine.name")
|
|
||||||
// The version of the web engine.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: '21.0.0'
|
|
||||||
WebEngineVersionKey = attribute.Key("webengine.version")
|
|
||||||
// Additional description of the web engine (e.g. detailed version and edition
|
|
||||||
// information).
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// Required: No
|
|
||||||
// Stability: stable
|
|
||||||
// Examples: 'WildFly Full 21.0.0.Final (WildFly Core 13.0.1.Final) - 2.2.2.Final'
|
|
||||||
WebEngineDescriptionKey = attribute.Key("webengine.description")
|
|
||||||
)
|
|
|
@ -1,20 +0,0 @@
|
||||||
// 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 semconv // import "go.opentelemetry.io/otel/semconv/v1.7.0"
|
|
||||||
|
|
||||||
// SchemaURL is the schema URL that matches the version of the semantic conventions
|
|
||||||
// that this package defines. Semconv packages starting from v1.4.0 must declare
|
|
||||||
// non-empty schema URL in the form https://opentelemetry.io/schemas/<version>
|
|
||||||
const SchemaURL = "https://opentelemetry.io/schemas/1.7.0"
|
|
File diff suppressed because it is too large
Load Diff
|
@ -56,7 +56,7 @@ github.com/docker/distribution/registry/client/transport
|
||||||
github.com/docker/distribution/registry/storage/cache
|
github.com/docker/distribution/registry/storage/cache
|
||||||
github.com/docker/distribution/registry/storage/cache/memory
|
github.com/docker/distribution/registry/storage/cache/memory
|
||||||
github.com/docker/distribution/uuid
|
github.com/docker/distribution/uuid
|
||||||
# github.com/docker/docker v24.0.0-rc.2.0.20231013183648-cdb3f9fb8dca+incompatible
|
# github.com/docker/docker v24.0.0-rc.2.0.20231025221548-fc4d035e7a4e+incompatible
|
||||||
## explicit
|
## explicit
|
||||||
github.com/docker/docker/api
|
github.com/docker/docker/api
|
||||||
github.com/docker/docker/api/types
|
github.com/docker/docker/api/types
|
||||||
|
@ -123,7 +123,7 @@ github.com/felixge/httpsnoop
|
||||||
# github.com/fvbommel/sortorder v1.0.2
|
# github.com/fvbommel/sortorder v1.0.2
|
||||||
## explicit; go 1.13
|
## explicit; go 1.13
|
||||||
github.com/fvbommel/sortorder
|
github.com/fvbommel/sortorder
|
||||||
# github.com/go-logr/logr v1.2.3
|
# github.com/go-logr/logr v1.2.4
|
||||||
## explicit; go 1.16
|
## explicit; go 1.16
|
||||||
github.com/go-logr/logr
|
github.com/go-logr/logr
|
||||||
github.com/go-logr/logr/funcr
|
github.com/go-logr/logr/funcr
|
||||||
|
@ -187,7 +187,7 @@ github.com/mitchellh/mapstructure
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
github.com/moby/patternmatcher
|
github.com/moby/patternmatcher
|
||||||
github.com/moby/patternmatcher/ignorefile
|
github.com/moby/patternmatcher/ignorefile
|
||||||
# github.com/moby/swarmkit/v2 v2.0.0-20230823155524-12f0c246fed0
|
# github.com/moby/swarmkit/v2 v2.0.0-20230911190601-f082dd7a0cee
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
github.com/moby/swarmkit/v2/api
|
github.com/moby/swarmkit/v2/api
|
||||||
github.com/moby/swarmkit/v2/api/deepcopy
|
github.com/moby/swarmkit/v2/api/deepcopy
|
||||||
|
@ -204,6 +204,9 @@ github.com/moby/sys/signal
|
||||||
# github.com/moby/sys/symlink v0.2.0
|
# github.com/moby/sys/symlink v0.2.0
|
||||||
## explicit; go 1.16
|
## explicit; go 1.16
|
||||||
github.com/moby/sys/symlink
|
github.com/moby/sys/symlink
|
||||||
|
# github.com/moby/sys/user v0.1.0
|
||||||
|
## explicit; go 1.17
|
||||||
|
github.com/moby/sys/user
|
||||||
# github.com/moby/term v0.5.0
|
# github.com/moby/term v0.5.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
github.com/moby/term
|
github.com/moby/term
|
||||||
|
@ -214,13 +217,10 @@ github.com/morikuni/aec
|
||||||
# github.com/opencontainers/go-digest v1.0.0
|
# github.com/opencontainers/go-digest v1.0.0
|
||||||
## explicit; go 1.13
|
## explicit; go 1.13
|
||||||
github.com/opencontainers/go-digest
|
github.com/opencontainers/go-digest
|
||||||
# github.com/opencontainers/image-spec v1.1.0-rc4
|
# github.com/opencontainers/image-spec v1.1.0-rc5
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
github.com/opencontainers/image-spec/specs-go
|
github.com/opencontainers/image-spec/specs-go
|
||||||
github.com/opencontainers/image-spec/specs-go/v1
|
github.com/opencontainers/image-spec/specs-go/v1
|
||||||
# github.com/opencontainers/runc v1.1.7
|
|
||||||
## explicit; go 1.17
|
|
||||||
github.com/opencontainers/runc/libcontainer/user
|
|
||||||
# github.com/pkg/errors v0.9.1
|
# github.com/pkg/errors v0.9.1
|
||||||
## explicit
|
## explicit
|
||||||
github.com/pkg/errors
|
github.com/pkg/errors
|
||||||
|
@ -299,11 +299,9 @@ go.opentelemetry.io/otel/internal/attribute
|
||||||
go.opentelemetry.io/otel/internal/baggage
|
go.opentelemetry.io/otel/internal/baggage
|
||||||
go.opentelemetry.io/otel/internal/global
|
go.opentelemetry.io/otel/internal/global
|
||||||
go.opentelemetry.io/otel/propagation
|
go.opentelemetry.io/otel/propagation
|
||||||
go.opentelemetry.io/otel/semconv/internal
|
|
||||||
go.opentelemetry.io/otel/semconv/internal/v2
|
go.opentelemetry.io/otel/semconv/internal/v2
|
||||||
go.opentelemetry.io/otel/semconv/v1.17.0
|
go.opentelemetry.io/otel/semconv/v1.17.0
|
||||||
go.opentelemetry.io/otel/semconv/v1.17.0/httpconv
|
go.opentelemetry.io/otel/semconv/v1.17.0/httpconv
|
||||||
go.opentelemetry.io/otel/semconv/v1.7.0
|
|
||||||
# go.opentelemetry.io/otel/metric v0.37.0
|
# go.opentelemetry.io/otel/metric v0.37.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
go.opentelemetry.io/otel/metric
|
go.opentelemetry.io/otel/metric
|
||||||
|
|
Loading…
Reference in New Issue