Skip to content

Commit 26ff713

Browse files
authored
Merge pull request #34 from sjinks/otel-1.18
fix: add support for OpenTelemetry 1.18
2 parents 6b4a293 + a17aba0 commit 26ff713

File tree

7 files changed

+250
-136
lines changed

7 files changed

+250
-136
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1+
/.cache/
12
/.vscode/
23
/build*/

src/container_resource_detector.cpp

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
#include "opentelemetry/resource/wwa/container_resource_detector.h"
22

33
#include <fstream>
4-
#include <regex>
5-
#include <stdexcept>
64
#include <string>
75

8-
#include <opentelemetry/sdk/resource/semantic_conventions.h>
6+
#include <opentelemetry/version.h>
7+
8+
#if OPENTELEMETRY_VERSION_MAJOR == 1 && OPENTELEMETRY_VERSION_MINOR < 18
9+
# include <opentelemetry/sdk/resource/semantic_conventions.h>
10+
#else
11+
# include <opentelemetry/semconv/incubating/container_attributes.h>
12+
# include <opentelemetry/semconv/schema_url.h>
13+
#endif
914

1015
#include "container_utils.h"
1116

@@ -31,12 +36,18 @@ ::opentelemetry::sdk::resource::Resource container_resource_detector::Detect()
3136
return ::opentelemetry::sdk::resource::Resource::GetEmpty();
3237
}
3338

39+
# if OPENTELEMETRY_VERSION_MAJOR == 1 && OPENTELEMETRY_VERSION_MINOR < 18
40+
using ::opentelemetry::sdk::resource::SemanticConventions::kContainerId;
41+
using ::opentelemetry::sdk::resource::SemanticConventions::kSchemaUrl;
42+
# else
43+
using ::opentelemetry::semconv::container::kContainerId;
44+
using ::opentelemetry::semconv::kSchemaUrl;
45+
# endif
46+
3447
::opentelemetry::sdk::resource::ResourceAttributes attrs;
35-
attrs[::opentelemetry::sdk::resource::SemanticConventions::kContainerId] = cid;
48+
attrs[kContainerId] = cid;
3649

37-
return ::opentelemetry::sdk::resource::Resource::Create(
38-
attrs, ::opentelemetry::sdk::resource::SemanticConventions::kSchemaUrl
39-
);
50+
return ::opentelemetry::sdk::resource::Resource::Create(attrs, kSchemaUrl);
4051
#endif
4152
}
4253

src/os_resource_detector.cpp

Lines changed: 45 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,15 @@
1313
# include "tstring.h"
1414
#endif
1515

16-
#include <opentelemetry/sdk/resource/semantic_conventions.h>
16+
#include <opentelemetry/version.h>
17+
18+
#if OPENTELEMETRY_VERSION_MAJOR == 1 && OPENTELEMETRY_VERSION_MINOR < 18
19+
# include <opentelemetry/sdk/resource/semantic_conventions.h>
20+
#else
21+
# include <opentelemetry/semconv/incubating/host_attributes.h>
22+
# include <opentelemetry/semconv/incubating/os_attributes.h>
23+
# include <opentelemetry/semconv/schema_url.h>
24+
#endif
1725

1826
#include "os_utils.h"
1927

@@ -23,35 +31,52 @@ ::opentelemetry::sdk::resource::Resource os_resource_detector::Detect()
2331
{
2432
::opentelemetry::sdk::resource::ResourceAttributes attrs;
2533

34+
#if OPENTELEMETRY_VERSION_MAJOR == 1 && OPENTELEMETRY_VERSION_MINOR < 18
35+
using ::opentelemetry::sdk::resource::SemanticConventions::kHostArch;
36+
using ::opentelemetry::sdk::resource::SemanticConventions::kHostName;
37+
using ::opentelemetry::sdk::resource::SemanticConventions::kOsType;
38+
using ::opentelemetry::sdk::resource::SemanticConventions::kOsVersion;
39+
using ::opentelemetry::sdk::resource::SemanticConventions::kSchemaUrl;
40+
41+
using namespace ::opentelemetry::sdk::resource::SemanticConventions::HostArchValues;
42+
using namespace ::opentelemetry::sdk::resource::SemanticConventions::OsTypeValues;
43+
#else
44+
using ::opentelemetry::semconv::host::kHostArch;
45+
using ::opentelemetry::semconv::host::kHostName;
46+
using ::opentelemetry::semconv::kSchemaUrl;
47+
using ::opentelemetry::semconv::os::kOsType;
48+
using ::opentelemetry::semconv::os::kOsVersion;
49+
50+
using namespace ::opentelemetry::semconv::host::HostArchValues;
51+
using namespace ::opentelemetry::semconv::os::OsTypeValues;
52+
#endif
53+
2654
#ifndef _WIN32
2755
utsname info{};
2856
if (uname(&info) == -1) {
2957
return ::opentelemetry::sdk::resource::Resource::GetEmpty();
3058
}
3159

3260
// NOLINTBEGIN(*-bounds-array-to-pointer-decay) -- we have no control over the system interface
33-
attrs[::opentelemetry::sdk::resource::SemanticConventions::kHostArch] = get_host_arch(info.machine);
34-
attrs[::opentelemetry::sdk::resource::SemanticConventions::kHostName] = std::string(info.nodename);
35-
attrs[::opentelemetry::sdk::resource::SemanticConventions::kOsType] = get_os_type(info.sysname);
36-
attrs[::opentelemetry::sdk::resource::SemanticConventions::kOsVersion] = std::string(info.release);
61+
attrs[kHostArch] = get_host_arch(info.machine);
62+
attrs[kHostName] = std::string(info.nodename);
63+
attrs[kOsType] = get_os_type(info.sysname);
64+
attrs[kOsVersion] = std::string(info.release);
3765
// NOLINTEND(*-bounds-array-to-pointer-decay)
3866
#else
3967
SYSTEM_INFO si{};
4068
GetSystemInfo(&si);
4169
switch (si.wProcessorArchitecture) {
4270
case PROCESSOR_ARCHITECTURE_AMD64:
43-
attrs[::opentelemetry::sdk::resource::SemanticConventions::kHostArch] =
44-
std::string(::opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kAmd64);
71+
attrs[kHostArch] = std::string(kAmd64);
4572
break;
4673

4774
case PROCESSOR_ARCHITECTURE_INTEL:
48-
attrs[::opentelemetry::sdk::resource::SemanticConventions::kHostArch] =
49-
std::string(::opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kX86);
75+
attrs[kHostArch] = std::string(kX86);
5076
break;
5177

5278
case PROCESSOR_ARCHITECTURE_ARM64:
53-
attrs[::opentelemetry::sdk::resource::SemanticConventions::kHostArch] =
54-
std::string(::opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kArm64);
79+
attrs[kHostArch] = std::string(kArm64);
5580
break;
5681

5782
default:
@@ -60,28 +85,24 @@ ::opentelemetry::sdk::resource::Resource os_resource_detector::Detect()
6085

6186
std::array<TCHAR, MAX_COMPUTERNAME_LENGTH + 1> buf;
6287
if (auto size = static_cast<DWORD>(buf.size()); GetComputerName(buf.data(), &size)) {
63-
attrs[::opentelemetry::sdk::resource::SemanticConventions::kHostName] = convert(buf.data());
88+
attrs[kHostName] = convert(buf.data());
6489
}
6590

66-
attrs[::opentelemetry::sdk::resource::SemanticConventions::kOsType] =
67-
std::string(::opentelemetry::sdk::resource::SemanticConventions::OsTypeValues::kWindows);
91+
attrs[kOsType] = std::string(kWindows);
6892

6993
OSVERSIONINFO osvi{};
7094
osvi.dwOSVersionInfoSize = sizeof(osvi);
7195
if (GetVersionEx(&osvi)) {
72-
attrs[::opentelemetry::sdk::resource::SemanticConventions::kOsVersion] =
73-
std::to_string(osvi.dwMajorVersion)
74-
.append(".")
75-
.append(std::to_string(osvi.dwMinorVersion))
76-
.append(" (Build ")
77-
.append(std::to_string(osvi.dwBuildNumber))
78-
.append(")");
96+
attrs[kOsVersion] = std::to_string(osvi.dwMajorVersion)
97+
.append(".")
98+
.append(std::to_string(osvi.dwMinorVersion))
99+
.append(" (Build ")
100+
.append(std::to_string(osvi.dwBuildNumber))
101+
.append(")");
79102
}
80103
#endif
81104

82-
return ::opentelemetry::sdk::resource::Resource::Create(
83-
attrs, ::opentelemetry::sdk::resource::SemanticConventions::kSchemaUrl
84-
);
105+
return ::opentelemetry::sdk::resource::Resource::Create(attrs, kSchemaUrl);
85106
}
86107

87108
} // namespace wwa::opentelemetry::resource

src/os_utils.cpp

Lines changed: 52 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include "os_utils.h"
22

3-
#include <array>
43
#include <string_view>
54
#include <utility>
65

@@ -9,6 +8,7 @@
98
#endif
109

1110
#if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ && __cplusplus >= 202002L && !defined(DISABLE_MPH)
11+
# include <array>
1212
# include <mph>
1313
# define USE_MPH
1414
# define CONTAINER std::array
@@ -19,31 +19,45 @@
1919
# define CONTAINER_CONSTEXPR const
2020
#endif
2121

22-
#include <opentelemetry/sdk/resource/semantic_conventions.h>
22+
#include <opentelemetry/version.h>
23+
24+
#if OPENTELEMETRY_VERSION_MAJOR == 1 && OPENTELEMETRY_VERSION_MINOR < 18
25+
# include <opentelemetry/sdk/resource/semantic_conventions.h>
26+
#else
27+
# include <opentelemetry/semconv/incubating/host_attributes.h>
28+
# include <opentelemetry/semconv/incubating/os_attributes.h>
29+
# include <opentelemetry/semconv/schema_url.h>
30+
#endif
2331

2432
using std::literals::operator""sv;
2533

2634
std::string get_host_arch(std::string_view machine)
2735
{
36+
#if OPENTELEMETRY_VERSION_MAJOR == 1 && OPENTELEMETRY_VERSION_MINOR < 18
37+
using namespace ::opentelemetry::sdk::resource::SemanticConventions::HostArchValues;
38+
#else
39+
using namespace ::opentelemetry::semconv::host::HostArchValues;
40+
#endif
41+
2842
static CONTAINER_CONSTEXPR auto machine_to_arch = CONTAINER{
29-
std::pair{"x86_64"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kAmd64},
30-
std::pair{"amd64"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kAmd64},
31-
std::pair{"aarch64"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kArm64},
32-
std::pair{"arm64"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kArm64},
33-
std::pair{"arm"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kArm32},
34-
std::pair{"armv7l"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kArm32},
35-
std::pair{"ppc"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kPpc32},
36-
std::pair{"ppc64"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kPpc64},
37-
std::pair{"ppc64le"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kPpc64},
38-
std::pair{"s390x"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kS390x},
39-
std::pair{"i386"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kX86},
40-
std::pair{"i486"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kX86},
41-
std::pair{"i586"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kX86},
42-
std::pair{"i686"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kX86},
43-
std::pair{"x86"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kX86},
44-
std::pair{"i86pc"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kX86},
45-
std::pair{"x86pc"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kX86},
46-
std::pair{"ia64"sv, opentelemetry::sdk::resource::SemanticConventions::HostArchValues::kIa64}
43+
std::pair{"x86_64"sv, kAmd64},
44+
std::pair{"amd64"sv, kAmd64},
45+
std::pair{"aarch64"sv, kArm64},
46+
std::pair{"arm64"sv, kArm64},
47+
std::pair{"arm"sv, kArm32},
48+
std::pair{"armv7l"sv, kArm32},
49+
std::pair{"ppc"sv, kPpc32},
50+
std::pair{"ppc64"sv, kPpc64},
51+
std::pair{"ppc64le"sv, kPpc64},
52+
std::pair{"s390x"sv, kS390x},
53+
std::pair{"i386"sv, kX86},
54+
std::pair{"i486"sv, kX86},
55+
std::pair{"i586"sv, kX86},
56+
std::pair{"i686"sv, kX86},
57+
std::pair{"x86"sv, kX86},
58+
std::pair{"i86pc"sv, kX86},
59+
std::pair{"x86pc"sv, kX86},
60+
std::pair{"ia64"sv, kIa64}
4761
};
4862

4963
#ifdef USE_MPH
@@ -61,18 +75,24 @@ std::string get_host_arch(std::string_view machine)
6175

6276
std::string get_os_type(std::string_view os)
6377
{
78+
#if OPENTELEMETRY_VERSION_MAJOR == 1 && OPENTELEMETRY_VERSION_MINOR < 18
79+
using namespace ::opentelemetry::sdk::resource::SemanticConventions::OsTypeValues;
80+
#else
81+
using namespace ::opentelemetry::semconv::os::OsTypeValues;
82+
#endif
83+
6484
static CONTAINER_CONSTEXPR auto os_to_type = CONTAINER{
65-
std::pair{"Linux"sv, opentelemetry::sdk::resource::SemanticConventions::OsTypeValues::kLinux},
66-
std::pair{"Windows_NT"sv, opentelemetry::sdk::resource::SemanticConventions::OsTypeValues::kWindows},
67-
std::pair{"DragonFly"sv, opentelemetry::sdk::resource::SemanticConventions::OsTypeValues::kDragonflybsd},
68-
std::pair{"FreeBSD"sv, opentelemetry::sdk::resource::SemanticConventions::OsTypeValues::kFreebsd},
69-
std::pair{"HP-UX"sv, opentelemetry::sdk::resource::SemanticConventions::OsTypeValues::kHpux},
70-
std::pair{"AIX"sv, opentelemetry::sdk::resource::SemanticConventions::OsTypeValues::kAix},
71-
std::pair{"Darwin"sv, opentelemetry::sdk::resource::SemanticConventions::OsTypeValues::kDarwin},
72-
std::pair{"NetBSD"sv, opentelemetry::sdk::resource::SemanticConventions::OsTypeValues::kNetbsd},
73-
std::pair{"OpenBSD"sv, opentelemetry::sdk::resource::SemanticConventions::OsTypeValues::kOpenbsd},
74-
std::pair{"SunOS"sv, opentelemetry::sdk::resource::SemanticConventions::OsTypeValues::kSolaris},
75-
std::pair{"OS/390"sv, opentelemetry::sdk::resource::SemanticConventions::OsTypeValues::kZOs}
85+
std::pair{"Linux"sv, kLinux},
86+
std::pair{"Windows_NT"sv, kWindows},
87+
std::pair{"DragonFly"sv, kDragonflybsd},
88+
std::pair{"FreeBSD"sv, kFreebsd},
89+
std::pair{"HP-UX"sv, kHpux},
90+
std::pair{"AIX"sv, kAix},
91+
std::pair{"Darwin"sv, kDarwin},
92+
std::pair{"NetBSD"sv, kNetbsd},
93+
std::pair{"OpenBSD"sv, kOpenbsd},
94+
std::pair{"SunOS"sv, kSolaris},
95+
std::pair{"OS/390"sv, kZOs}
7696
};
7797

7898
#ifdef USE_MPH
@@ -86,7 +106,7 @@ std::string get_os_type(std::string_view os)
86106
#endif
87107

88108
if (os.starts_with("CYGWIN") || os.starts_with("MINGW") || os.starts_with("MSYS")) {
89-
return opentelemetry::sdk::resource::SemanticConventions::OsTypeValues::kWindows;
109+
return kWindows;
90110
}
91111

92112
return {os.data(), os.length()};

0 commit comments

Comments
 (0)