Skip to content

Commit 1da2709

Browse files
authored
Geneva trace/log exporter include wrappers (#262)
1 parent 8bdab8d commit 1da2709

File tree

12 files changed

+301
-0
lines changed

12 files changed

+301
-0
lines changed

.github/workflows/geneva_trace.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Copyright The OpenTelemetry Authors
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
name: Geneva Trace Nuget Generation
5+
6+
on:
7+
push:
8+
branches: "*"
9+
paths:
10+
- "exporters/geneva-trace/**"
11+
- ".github/workflows/geneva_trace.yml"
12+
pull_request:
13+
branches: [main]
14+
paths:
15+
- "exporters/geneva-trace/**"
16+
- ".github/workflows/geneva_trace.yml"
17+
18+
jobs:
19+
geneva-trace-nuget-generation:
20+
name: Geneva Trace
21+
runs-on: windows-latest
22+
steps:
23+
- name: github config
24+
run: git config --system core.longpaths true
25+
- uses: actions/checkout@v3
26+
with:
27+
submodules: 'recursive'
28+
- name: NuGet package generation
29+
env:
30+
PackageVersion: 0.0.1
31+
run: |
32+
cd exporters\geneva-trace\tools && .\build-nuget.cmd

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[submodule "exporters/geneva-trace/third_party/opentelemetry-cpp"]
2+
path = exporters/geneva-trace/third_party/opentelemetry-cpp
3+
url = https://github.com/open-telemetry/opentelemetry-cpp
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#pragma once
5+
6+
/* clang-format off */
7+
8+
/**
9+
* List of configurable Field Name constants:
10+
*
11+
* - env_ver - Schema version (optional for ETW exporter).
12+
* - env_name - Built-in ETW name at envelope level (dedicated ETW field).
13+
* - env_time - Built-in ETW time at envelope level.
14+
* - env_dt_spanId - OT SpanId
15+
* - env_dt_traceId - OT TraceId
16+
* - startTime - OT Span start time
17+
* - kind - OT Span kind
18+
* - name - OT Span name in ETW 'Payload["name"]'
19+
* - parentId - OT Span parentId
20+
* - links - OT Span links array
21+
*
22+
* Other standard fields (reserved names) that may be appended by ETW channel:
23+
*
24+
* - Level
25+
* - ProviderGuid
26+
* - ProviderName
27+
* - OpcodeName
28+
* - KeywordName
29+
* - TaskName
30+
* - ChannelName
31+
* - EventMessage
32+
* - ActivityId
33+
* - Pid
34+
* - Tid
35+
*
36+
*/
37+
# define ETW_FIELD_VERSION "env_ver" /* Event version */
38+
# define ETW_FIELD_TYPE "env_type" /* Event type */
39+
# define ETW_FIELD_NAME "env_name" /* Event name */
40+
41+
#ifndef HAVE_FIELD_TIME
42+
#define HAVE_FIELD_TIME
43+
#endif
44+
# define ETW_FIELD_TIME "env_time" /* Event time at envelope */
45+
46+
# define ETW_FIELD_OPCODE "env_opcode" /* OpCode for TraceLogging */
47+
48+
# define ETW_FIELD_TRACE_ID "env_dt_traceId" /* Trace Id */
49+
# define ETW_FIELD_SPAN_ID "env_dt_spanId" /* Span Id */
50+
# define ETW_FIELD_SPAN_PARENTID "parentId" /* Span ParentId */
51+
# define ETW_FIELD_SPAN_KIND "kind" /* Span Kind */
52+
# define ETW_FIELD_SPAN_LINKS "links" /* Span Links array */
53+
54+
# define ETW_FIELD_PAYLOAD_NAME "name" /* ETW Payload["name"] */
55+
56+
/* Span option constants */
57+
# define ETW_FIELD_STARTTIME "startTime" /* Operation start time */
58+
# define ETW_FIELD_ENDTTIME "env_time" /* Operation end time */
59+
# define ETW_FIELD_DURATION "duration" /* Operation duration */
60+
# define ETW_FIELD_STATUSCODE "statusCode" /* OT Span status code */
61+
# define ETW_FIELD_STATUSMESSAGE "statusMessage" /* OT Span status message */
62+
# define ETW_FIELD_SUCCESS "success" /* OT Span success */
63+
# define ETW_FIELD_TIMESTAMP "Timestamp" /* Log timestamp */
64+
65+
# define ETW_FIELD_CLIENTREQID "clientRequestId"
66+
# define ETW_FIELD_CORRELREQID "correlationRequestId"
67+
68+
/* Value constants */
69+
# define ETW_VALUE_SPAN "Span" /* ETW event name for Span */
70+
# define ETW_VALUE_LOG "Log" /* ETW event name for Log */
71+
72+
# define ETW_VALUE_SPAN_START "SpanStart" /* ETW for Span Start */
73+
# define ETW_VALUE_SPAN_END "SpanEnd" /* ETW for Span Start */
74+
75+
# define ETW_FIELD_LOG_BODY "body" /* Log body */
76+
# define ETW_FIELD_LOG_SEVERITY_TEXT "severityText" /* Sev text */
77+
# define ETW_FIELD_LOG_SEVERITY_NUM "severityNumber" /* Sev num */
78+
79+
/* clang-format on */
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#pragma once
5+
6+
#ifndef CUSTOM_ETW_FIELDS_H
7+
#define CUSTOM_ETW_FIELDS_H <opentelemetry/exporters/geneva/geneva_fields.h>
8+
#endif
9+
10+
#define ENABLE_LOGS_PREVIEW
11+
#include <opentelemetry/exporters/etw/etw_logger_exporter.h>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#pragma once
5+
6+
#ifndef CUSTOM_ETW_FIELDS_H
7+
#define CUSTOM_ETW_FIELDS_H <opentelemetry/exporters/geneva/geneva_fields.h>
8+
#endif
9+
10+
#include <opentelemetry/exporters/etw/etw_tracer_exporter.h>
Submodule opentelemetry-cpp added at 95f6c66
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
Rem Copyright The OpenTelemetry Authors
2+
Rem SPDX-License-Identifier: Apache-2.0
3+
4+
@echo off
5+
pushd "%~dp0"
6+
set "PATH=%CD%;%PATH%"
7+
8+
if not defined PackageVersion (
9+
echo "Set the PackageVersion before proceeding."
10+
exit
11+
)
12+
if not exist "..\packages" mkdir "..\packages"
13+
14+
REM This script assumes that the main OpenTelemetry C++ repo
15+
REM has been checked out as submodule
16+
powershell -File .\build-nuget.ps1 %CD%\..\third_party\opentelemetry-cpp
17+
18+
REM If %OUTPUTROOT% variable is defined, then copy the packages
19+
REM to %OUTPUTROOT%\packages for subsequent deployment.
20+
if defined OUTPUTROOT (
21+
if not exist "%OUTPUTROOT%\packages" mkdir "%OUTPUTROOT%\packages"
22+
copy /Y ..\packages\*.nupkg "%OUTPUTROOT%\packages"
23+
)
24+
popd
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# Copyright The OpenTelemetry Authors
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
$otel_repo_main=$args[0]
5+
6+
# Function returns 4-part 'classic' version string from SemVer 2.0 string
7+
function GenVer4Part([String] $Version)
8+
{
9+
if ($Version[0] -eq 'v')
10+
{
11+
# If tag contains 'v' then strip it
12+
$Version = $Version.substring(1)
13+
}
14+
# Converts from 1.2.3-build4 to 1.2.3.4
15+
$Version = $Version -replace "-build", "."
16+
$Version = $Version -replace "-", "."
17+
18+
[int32[]]$parts = $Version.Split('.');
19+
# Add missing tuples
20+
$i = $parts.Count
21+
while($i -lt 4)
22+
{
23+
$parts += "0"
24+
$i++
25+
}
26+
27+
,$parts
28+
}
29+
30+
function New-TemporaryDirectory
31+
{
32+
$parent = [System.IO.Path]::GetTempPath()
33+
[string] $name = [System.Guid]::NewGuid()
34+
New-Item -ItemType Directory -Path (Join-Path $parent $name)
35+
}
36+
37+
function GetGitWorkTree()
38+
{
39+
# TODO: presently we assume that GIT_WORK_TREE is 1-level up.
40+
# Uncomment the following line if this is not the case:
41+
# $result = (git rev-parse --show-toplevel) -join ''
42+
$result = ( Get-Item -Path .. ).Fullname
43+
$result = $result -replace '[\\/]', '\'
44+
return $result
45+
}
46+
47+
function CopyAll([String] $src, [String] $dest)
48+
{
49+
$what = @("/E","/XD",".vs","packages","examples",".*")
50+
$options = @("/R:0","/W:0","/NFL","/NDL","/NJH","/NJS","/NC","/NS")
51+
$cmdArgs = @("$src","$dest",$what,$options)
52+
robocopy @cmdArgs
53+
}
54+
55+
$tempDir = New-TemporaryDirectory
56+
$gitWorktree = GetGitWorkTree
57+
58+
$items = Get-ChildItem .\nuget -include *.nuspec -Recurse
59+
foreach ($item in $items)
60+
{
61+
$nugetName = $item.Basename
62+
$v = GenVer4Part $env:PackageVersion
63+
$version = [string]::Join(".", $v, 0, 3)
64+
65+
Write-Output "Creating nuget $nugetName-$version ..."
66+
# Copy all files from Git
67+
CopyAll $otel_repo_main $tempDir.Fullname
68+
69+
CopyAll $gitWorkTree\include\ $tempDir\exporters\etw\include
70+
71+
# Append extra nuget package files
72+
Copy-Item -Path ".\nuget\build" -Recurse -Destination $tempDir.Fullname
73+
Copy-Item -Path ".\nuget\$nugetName.nuspec" -Destination $tempDir.Fullname
74+
Copy-Item -Path ".\nuget\opentelemetry-icon-color.png" -Destination $tempDir.Fullname
75+
# Change to temporary directory
76+
Push-Location -Path $tempDir.Fullname
77+
# Pack the nuget package
78+
nuget pack $nugetName.nuspec -Version $version -NoDefaultExcludes
79+
Pop-Location
80+
$nupkgFileName = "$tempDir\$nugetName.$version.nupkg"
81+
Get-Item $nupkgFileName | Copy-Item -Destination "..\packages"
82+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
2+
<metadata>
3+
<id>OpenTelemetry.Cpp.Geneva</id>
4+
<version>0.0.0</version>
5+
<authors>Microsoft</authors>
6+
<requireLicenseAcceptance>false</requireLicenseAcceptance>
7+
<license type="expression">Apache-2.0</license>
8+
<licenseUrl>https://licenses.nuget.org/Apache-2.0</licenseUrl>
9+
<icon>opentelemetry-icon-color.png</icon>
10+
<projectUrl>https://opentelemetry.io/</projectUrl>
11+
<description>OpenTelemetry C++ API/SDK with Geneva Exporter</description>
12+
<tags>Observability OpenTelemetry Monitoring Telemetry Tracing native C++ Geneva</tags>
13+
<repository type="git" url="https://github.com/microsoft/opentelemetry-cpp-exporters/" />
14+
<dependencies>
15+
</dependencies>
16+
</metadata>
17+
<files>
18+
<file src="build\native\OpenTelemetry.Cpp.Geneva.targets" target="build\native\OpenTelemetry.Cpp.Geneva.targets" />
19+
<file src="api\**\*.*" target="api" />
20+
<file src="exporters\**\*.*" target="exporters" />
21+
<file src="sdk\**\*.*" target="sdk" />
22+
<file src="opentelemetry-icon-color.png" target="\" />
23+
</files>
24+
</package>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# NuGet package creation process
2+
3+
This directory contains NuGet specification files (.nuspec).
4+
5+
Creating nuget packages:
6+
7+
- Set `PackageVersion` environment variable that defines the package version.
8+
9+
```console
10+
set PackageVersion=0.4.0
11+
```
12+
13+
- Run `tools/build-nuget.cmd` script to create the package(s). Packages are copied to `.\packages`
14+
directory.
15+
16+
- Push selected package to nuget feed using `NuGet.exe` tool.
17+
18+
Learn more about native code NuGet packages [here](https://docs.microsoft.com/en-us/nuget/guides/native-packages).
19+
20+
## NuGet package flavors
21+
22+
The following packages created :
23+
24+
| Package Name | Desription | Notes |
25+
|------------------------------|-------------------------------------------------------------|-------|
26+
| OpenTelemetry.Cpp.Geneva | OpenTelemetry C++ SDK with Geneva Exporter in one package | |

0 commit comments

Comments
 (0)