This repository has been archived by the owner on Nov 6, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FrameworkDescription.cs
93 lines (77 loc) · 3 KB
/
FrameworkDescription.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// <copyright file="FrameworkDescription.cs" company="OpenTelemetry Authors">
// 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.
// </copyright>
using System.Reflection;
using OpenTelemetry.AutoInstrumentation.Logging;
namespace OpenTelemetry.AutoInstrumentation;
internal partial class FrameworkDescription
{
private static readonly IOtelLogger Log = OtelLogging.GetLogger();
private static readonly Assembly RootAssembly = typeof(object).Assembly;
private FrameworkDescription(
string name,
string productVersion,
string osPlatform,
string osArchitecture,
string processArchitecture)
{
Name = name;
ProductVersion = productVersion;
OSPlatform = osPlatform;
OSArchitecture = osArchitecture;
ProcessArchitecture = processArchitecture;
}
public string Name { get; }
public string ProductVersion { get; }
public string OSPlatform { get; }
public string OSArchitecture { get; }
public string ProcessArchitecture { get; }
public override string ToString()
{
// examples:
// .NET Framework 4.8 x86 on Windows x64
// .NET Core 3.0.0 x64 on Linux x64
return $"{Name} {ProductVersion} {ProcessArchitecture} on {OSPlatform} {OSArchitecture}";
}
private static string? GetVersionFromAssemblyAttributes()
{
string? productVersion = null;
try
{
// if we fail to extract version from assembly path, fall back to the [AssemblyInformationalVersion],
var informationalVersionAttribute = RootAssembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();
// split remove the commit hash from pre-release versions
productVersion = informationalVersionAttribute?.InformationalVersion?.Split('+')[0];
}
catch (Exception e)
{
Log.Error(e, "Error getting framework version from [AssemblyInformationalVersion]");
}
if (productVersion == null)
{
try
{
// and if that fails, try [AssemblyFileVersion]
var fileVersionAttribute = RootAssembly.GetCustomAttribute<AssemblyFileVersionAttribute>();
productVersion = fileVersionAttribute?.Version;
}
catch (Exception e)
{
Log.Error(e, "Error getting framework version from [AssemblyFileVersion]");
}
}
return productVersion;
}
}