build(deps): Bump github.com/moby/buildkit
Bumps [github.com/moby/buildkit](https://github.com/moby/buildkit) from 0.11.0-rc3.0.20230216100651-46e4e7e51b01 to 0.11.4. - [Release notes](https://github.com/moby/buildkit/releases) - [Commits](https://github.com/moby/buildkit/commits/v0.11.4) --- updated-dependencies: - dependency-name: github.com/moby/buildkit dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>pull/1667/head
parent
f815f4acf7
commit
c9529e282e
@ -0,0 +1,2 @@
|
|||||||
|
*.test
|
||||||
|
coverage.txt
|
@ -0,0 +1,191 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
https://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
Copyright The containerd 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
|
||||||
|
|
||||||
|
https://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.
|
@ -0,0 +1,20 @@
|
|||||||
|
# typeurl
|
||||||
|
|
||||||
|
[](https://pkg.go.dev/github.com/containerd/typeurl)
|
||||||
|
[](https://github.com/containerd/typeurl/actions?query=workflow%3ACI)
|
||||||
|
[](https://codecov.io/gh/containerd/typeurl)
|
||||||
|
[](https://goreportcard.com/report/github.com/containerd/typeurl)
|
||||||
|
|
||||||
|
A Go package for managing the registration, marshaling, and unmarshaling of encoded types.
|
||||||
|
|
||||||
|
This package helps when types are sent over a GRPC API and marshaled as a [protobuf.Any](https://github.com/gogo/protobuf/blob/master/protobuf/google/protobuf/any.proto).
|
||||||
|
|
||||||
|
## Project details
|
||||||
|
|
||||||
|
**typeurl** is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE).
|
||||||
|
As a containerd sub-project, you will find the:
|
||||||
|
* [Project governance](https://github.com/containerd/project/blob/master/GOVERNANCE.md),
|
||||||
|
* [Maintainers](https://github.com/containerd/project/blob/master/MAINTAINERS),
|
||||||
|
* and [Contributing guidelines](https://github.com/containerd/project/blob/master/CONTRIBUTING.md)
|
||||||
|
|
||||||
|
information in our [`containerd/project`](https://github.com/containerd/project) repository.
|
@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
Copyright The containerd 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 typeurl
|
||||||
|
|
||||||
|
// Package typeurl assists with managing the registration, marshaling, and
|
||||||
|
// unmarshaling of types encoded as protobuf.Any.
|
||||||
|
//
|
||||||
|
// A protobuf.Any is a proto message that can contain any arbitrary data. It
|
||||||
|
// consists of two components, a TypeUrl and a Value, and its proto definition
|
||||||
|
// looks like this:
|
||||||
|
//
|
||||||
|
// message Any {
|
||||||
|
// string type_url = 1;
|
||||||
|
// bytes value = 2;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// The TypeUrl is used to distinguish the contents from other proto.Any
|
||||||
|
// messages. This typeurl library manages these URLs to enable automagic
|
||||||
|
// marshaling and unmarshaling of the contents.
|
||||||
|
//
|
||||||
|
// For example, consider this go struct:
|
||||||
|
//
|
||||||
|
// type Foo struct {
|
||||||
|
// Field1 string
|
||||||
|
// Field2 string
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// To use typeurl, types must first be registered. This is typically done in
|
||||||
|
// the init function
|
||||||
|
//
|
||||||
|
// func init() {
|
||||||
|
// typeurl.Register(&Foo{}, "Foo")
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// This will register the type Foo with the url path "Foo". The arguments to
|
||||||
|
// Register are variadic, and are used to construct a url path. Consider this
|
||||||
|
// example, from the github.com/containerd/containerd/client package:
|
||||||
|
//
|
||||||
|
// func init() {
|
||||||
|
// const prefix = "types.containerd.io"
|
||||||
|
// // register TypeUrls for commonly marshaled external types
|
||||||
|
// major := strconv.Itoa(specs.VersionMajor)
|
||||||
|
// typeurl.Register(&specs.Spec{}, prefix, "opencontainers/runtime-spec", major, "Spec")
|
||||||
|
// // this function has more Register calls, which are elided.
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// This registers several types under a more complex url, which ends up mapping
|
||||||
|
// to `types.containerd.io/opencontainers/runtime-spec/1/Spec` (or some other
|
||||||
|
// value for major).
|
||||||
|
//
|
||||||
|
// Once a type is registered, it can be marshaled to a proto.Any message simply
|
||||||
|
// by calling `MarshalAny`, like this:
|
||||||
|
//
|
||||||
|
// foo := &Foo{Field1: "value1", Field2: "value2"}
|
||||||
|
// anyFoo, err := typeurl.MarshalAny(foo)
|
||||||
|
//
|
||||||
|
// MarshalAny will resolve the correct URL for the type. If the type in
|
||||||
|
// question implements the proto.Message interface, then it will be marshaled
|
||||||
|
// as a proto message. Otherwise, it will be marshaled as json. This means that
|
||||||
|
// typeurl will work on any arbitrary data, whether or not it has a proto
|
||||||
|
// definition, as long as it can be serialized to json.
|
||||||
|
//
|
||||||
|
// To unmarshal, the process is simply inverse:
|
||||||
|
//
|
||||||
|
// iface, err := typeurl.UnmarshalAny(anyFoo)
|
||||||
|
// foo := iface.(*Foo)
|
||||||
|
//
|
||||||
|
// The correct type is automatically chosen from the type registry, and the
|
||||||
|
// returned interface can be cast straight to that type.
|
@ -0,0 +1,214 @@
|
|||||||
|
/*
|
||||||
|
Copyright The containerd 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 typeurl
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"path"
|
||||||
|
"reflect"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"github.com/gogo/protobuf/proto"
|
||||||
|
"github.com/gogo/protobuf/types"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
mu sync.RWMutex
|
||||||
|
registry = make(map[reflect.Type]string)
|
||||||
|
)
|
||||||
|
|
||||||
|
// Definitions of common error types used throughout typeurl.
|
||||||
|
//
|
||||||
|
// These error types are used with errors.Wrap and errors.Wrapf to add context
|
||||||
|
// to an error.
|
||||||
|
//
|
||||||
|
// To detect an error class, use errors.Is() functions to tell whether an
|
||||||
|
// error is of this type.
|
||||||
|
var (
|
||||||
|
ErrNotFound = errors.New("not found")
|
||||||
|
)
|
||||||
|
|
||||||
|
// Register a type with a base URL for JSON marshaling. When the MarshalAny and
|
||||||
|
// UnmarshalAny functions are called they will treat the Any type value as JSON.
|
||||||
|
// To use protocol buffers for handling the Any value the proto.Register
|
||||||
|
// function should be used instead of this function.
|
||||||
|
func Register(v interface{}, args ...string) {
|
||||||
|
var (
|
||||||
|
t = tryDereference(v)
|
||||||
|
p = path.Join(args...)
|
||||||
|
)
|
||||||
|
mu.Lock()
|
||||||
|
defer mu.Unlock()
|
||||||
|
if et, ok := registry[t]; ok {
|
||||||
|
if et != p {
|
||||||
|
panic(errors.Errorf("type registered with alternate path %q != %q", et, p))
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
registry[t] = p
|
||||||
|
}
|
||||||
|
|
||||||
|
// TypeURL returns the type url for a registered type.
|
||||||
|
func TypeURL(v interface{}) (string, error) {
|
||||||
|
mu.RLock()
|
||||||
|
u, ok := registry[tryDereference(v)]
|
||||||
|
mu.RUnlock()
|
||||||
|
if !ok {
|
||||||
|
// fallback to the proto registry if it is a proto message
|
||||||
|
pb, ok := v.(proto.Message)
|
||||||
|
if !ok {
|
||||||
|
return "", errors.Wrapf(ErrNotFound, "type %s", reflect.TypeOf(v))
|
||||||
|
}
|
||||||
|
return proto.MessageName(pb), nil
|
||||||
|
}
|
||||||
|
return u, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Is returns true if the type of the Any is the same as v.
|
||||||
|
func Is(any *types.Any, v interface{}) bool {
|
||||||
|
// call to check that v is a pointer
|
||||||
|
tryDereference(v)
|
||||||
|
url, err := TypeURL(v)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return any.TypeUrl == url
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalAny marshals the value v into an any with the correct TypeUrl.
|
||||||
|
// If the provided object is already a proto.Any message, then it will be
|
||||||
|
// returned verbatim. If it is of type proto.Message, it will be marshaled as a
|
||||||
|
// protocol buffer. Otherwise, the object will be marshaled to json.
|
||||||
|
func MarshalAny(v interface{}) (*types.Any, error) {
|
||||||
|
var marshal func(v interface{}) ([]byte, error)
|
||||||
|
switch t := v.(type) {
|
||||||
|
case *types.Any:
|
||||||
|
// avoid reserializing the type if we have an any.
|
||||||
|
return t, nil
|
||||||
|
case proto.Message:
|
||||||
|
marshal = func(v interface{}) ([]byte, error) {
|
||||||
|
return proto.Marshal(t)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
marshal = json.Marshal
|
||||||
|
}
|
||||||
|
|
||||||
|
url, err := TypeURL(v)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err := marshal(v)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &types.Any{
|
||||||
|
TypeUrl: url,
|
||||||
|
Value: data,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalAny unmarshals the any type into a concrete type.
|
||||||
|
func UnmarshalAny(any *types.Any) (interface{}, error) {
|
||||||
|
return UnmarshalByTypeURL(any.TypeUrl, any.Value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalByTypeURL unmarshals the given type and value to into a concrete type.
|
||||||
|
func UnmarshalByTypeURL(typeURL string, value []byte) (interface{}, error) {
|
||||||
|
return unmarshal(typeURL, value, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalTo unmarshals the any type into a concrete type passed in the out
|
||||||
|
// argument. It is identical to UnmarshalAny, but lets clients provide a
|
||||||
|
// destination type through the out argument.
|
||||||
|
func UnmarshalTo(any *types.Any, out interface{}) error {
|
||||||
|
return UnmarshalToByTypeURL(any.TypeUrl, any.Value, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalTo unmarshals the given type and value into a concrete type passed
|
||||||
|
// in the out argument. It is identical to UnmarshalByTypeURL, but lets clients
|
||||||
|
// provide a destination type through the out argument.
|
||||||
|
func UnmarshalToByTypeURL(typeURL string, value []byte, out interface{}) error {
|
||||||
|
_, err := unmarshal(typeURL, value, out)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func unmarshal(typeURL string, value []byte, v interface{}) (interface{}, error) {
|
||||||
|
t, err := getTypeByUrl(typeURL)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if v == nil {
|
||||||
|
v = reflect.New(t.t).Interface()
|
||||||
|
} else {
|
||||||
|
// Validate interface type provided by client
|
||||||
|
vURL, err := TypeURL(v)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if typeURL != vURL {
|
||||||
|
return nil, errors.Errorf("can't unmarshal type %q to output %q", typeURL, vURL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if t.isProto {
|
||||||
|
err = proto.Unmarshal(value, v.(proto.Message))
|
||||||
|
} else {
|
||||||
|
err = json.Unmarshal(value, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return v, err
|
||||||
|
}
|
||||||
|
|
||||||
|
type urlType struct {
|
||||||
|
t reflect.Type
|
||||||
|
isProto bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func getTypeByUrl(url string) (urlType, error) {
|
||||||
|
mu.RLock()
|
||||||
|
for t, u := range registry {
|
||||||
|
if u == url {
|
||||||
|
mu.RUnlock()
|
||||||
|
return urlType{
|
||||||
|
t: t,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mu.RUnlock()
|
||||||
|
// fallback to proto registry
|
||||||
|
t := proto.MessageType(url)
|
||||||
|
if t != nil {
|
||||||
|
return urlType{
|
||||||
|
// get the underlying Elem because proto returns a pointer to the type
|
||||||
|
t: t.Elem(),
|
||||||
|
isProto: true,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
return urlType{}, errors.Wrapf(ErrNotFound, "type with url %s", url)
|
||||||
|
}
|
||||||
|
|
||||||
|
func tryDereference(v interface{}) reflect.Type {
|
||||||
|
t := reflect.TypeOf(v)
|
||||||
|
if t.Kind() == reflect.Ptr {
|
||||||
|
// require check of pointer but dereference to register
|
||||||
|
return t.Elem()
|
||||||
|
}
|
||||||
|
panic("v is not a pointer to a type")
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package srctypes
|
||||||
|
|
||||||
|
const (
|
||||||
|
DockerImageScheme = "docker-image"
|
||||||
|
GitScheme = "git"
|
||||||
|
LocalScheme = "local"
|
||||||
|
HTTPScheme = "http"
|
||||||
|
HTTPSScheme = "https"
|
||||||
|
OCIScheme = "oci-layout"
|
||||||
|
)
|
@ -0,0 +1,55 @@
|
|||||||
|
// Package binfotypes implements types for build information.
|
||||||
|
//
|
||||||
|
// Deprecated: Build information is deprecated: https://github.com/moby/buildkit/blob/master/docs/deprecated.md
|
||||||
|
package binfotypes
|
||||||
|
|
||||||
|
import (
|
||||||
|
srctypes "github.com/moby/buildkit/source/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ImageConfigField defines the key of build dependencies.
|
||||||
|
const ImageConfigField = "moby.buildkit.buildinfo.v1"
|
||||||
|
|
||||||
|
// ImageConfig defines the structure of build dependencies
|
||||||
|
// inside image config.
|
||||||
|
type ImageConfig struct {
|
||||||
|
BuildInfo string `json:"moby.buildkit.buildinfo.v1,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// BuildInfo defines the main structure added to image config as
|
||||||
|
// ImageConfigField key and returned in solver ExporterResponse as
|
||||||
|
// exptypes.ExporterBuildInfo key.
|
||||||
|
type BuildInfo struct {
|
||||||
|
// Frontend defines the frontend used to build.
|
||||||
|
Frontend string `json:"frontend,omitempty"`
|
||||||
|
// Attrs defines build request attributes.
|
||||||
|
Attrs map[string]*string `json:"attrs,omitempty"`
|
||||||
|
// Sources defines build dependencies.
|
||||||
|
Sources []Source `json:"sources,omitempty"`
|
||||||
|
// Deps defines context dependencies.
|
||||||
|
Deps map[string]BuildInfo `json:"deps,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Source defines a build dependency.
|
||||||
|
type Source struct {
|
||||||
|
// Type defines the SourceType source type (docker-image, git, http).
|
||||||
|
Type SourceType `json:"type,omitempty"`
|
||||||
|
// Ref is the reference of the source.
|
||||||
|
Ref string `json:"ref,omitempty"`
|
||||||
|
// Alias is a special field used to match with the actual source ref
|
||||||
|
// because frontend might have already transformed a string user typed
|
||||||
|
// before generating LLB.
|
||||||
|
Alias string `json:"alias,omitempty"`
|
||||||
|
// Pin is the source digest.
|
||||||
|
Pin string `json:"pin,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SourceType contains source type.
|
||||||
|
type SourceType string
|
||||||
|
|
||||||
|
// List of source types.
|
||||||
|
const (
|
||||||
|
SourceTypeDockerImage SourceType = srctypes.DockerImageScheme
|
||||||
|
SourceTypeGit SourceType = srctypes.GitScheme
|
||||||
|
SourceTypeHTTP SourceType = srctypes.HTTPScheme
|
||||||
|
)
|
@ -0,0 +1,34 @@
|
|||||||
|
package imageutil
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/base64"
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
binfotypes "github.com/moby/buildkit/util/buildinfo/types"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
// BuildInfo returns build info from image config.
|
||||||
|
//
|
||||||
|
// Deprecated: Build information is deprecated: https://github.com/moby/buildkit/blob/master/docs/deprecated.md
|
||||||
|
func BuildInfo(dt []byte) (*binfotypes.BuildInfo, error) {
|
||||||
|
if len(dt) == 0 {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
var config binfotypes.ImageConfig
|
||||||
|
if err := json.Unmarshal(dt, &config); err != nil {
|
||||||
|
return nil, errors.Wrap(err, "failed to unmarshal image config")
|
||||||
|
}
|
||||||
|
if len(config.BuildInfo) == 0 {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
dtbi, err := base64.StdEncoding.DecodeString(config.BuildInfo)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
var bi binfotypes.BuildInfo
|
||||||
|
if err = json.Unmarshal(dtbi, &bi); err != nil {
|
||||||
|
return nil, errors.Wrap(err, "failed to decode buildinfo from image config")
|
||||||
|
}
|
||||||
|
return &bi, nil
|
||||||
|
}
|
@ -0,0 +1,336 @@
|
|||||||
|
// 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
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
// 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"
|
@ -0,0 +1,20 @@
|
|||||||
|
// 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"
|
||||||
|
)
|
@ -0,0 +1,114 @@
|
|||||||
|
// 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)
|
||||||
|
}
|
@ -0,0 +1,946 @@
|
|||||||
|
// 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")
|
||||||
|
)
|
@ -0,0 +1,20 @@
|
|||||||
|
// 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
Loading…
Reference in New Issue