Skip to content

Commit 31f1612

Browse files
committed
feat(Telemetry): enhance telemetry metadata and build configuration
- Added support for telemetry build channel and configuration in the project file, allowing for better tracking of build environments. - Updated TelemetryEnvelopeFactory to include new metadata attributes for build channel and configuration, improving telemetry insights. - Modified the release script to set the appropriate build channel based on the environment, ensuring accurate telemetry reporting.
1 parent 51c0efb commit 31f1612

3 files changed

Lines changed: 58 additions & 0 deletions

File tree

STS2-RitsuLib.csproj

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
<EnableDynamicLoading>true</EnableDynamicLoading>
2727
<GenerateDocumentationFile>true</GenerateDocumentationFile>
2828
<NoWarn>$(NoWarn);CS0436</NoWarn>
29+
<RitsuLibTelemetryBuildChannel Condition="'$(RitsuLibTelemetryBuildChannel)' == '' and '$(Configuration)' == 'Debug'">local_debug</RitsuLibTelemetryBuildChannel>
30+
<RitsuLibTelemetryBuildChannel Condition="'$(RitsuLibTelemetryBuildChannel)' == ''">local_release</RitsuLibTelemetryBuildChannel>
31+
<RitsuLibTelemetryBuildConfiguration Condition="'$(RitsuLibTelemetryBuildConfiguration)' == ''">$(Configuration)</RitsuLibTelemetryBuildConfiguration>
2932
</PropertyGroup>
3033

3134
<PropertyGroup Label="NuGet package">
@@ -63,6 +66,14 @@
6366
</Target>
6467

6568
<ItemGroup>
69+
<AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
70+
<_Parameter1>RitsuLibTelemetryBuildChannel</_Parameter1>
71+
<_Parameter2>$(RitsuLibTelemetryBuildChannel)</_Parameter2>
72+
</AssemblyAttribute>
73+
<AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
74+
<_Parameter1>RitsuLibTelemetryBuildConfiguration</_Parameter1>
75+
<_Parameter2>$(RitsuLibTelemetryBuildConfiguration)</_Parameter2>
76+
</AssemblyAttribute>
6677
<PackageReference Include="Krafs.Publicizer" Version="2.3.0" PrivateAssets="all"/>
6778
<PackageReference Include="System.IO.Hashing" Version="9.0.0"/>
6879
</ItemGroup>

Telemetry/Core/TelemetryEnvelopeFactory.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Reflection;
12
using System.Text.Json.Nodes;
23
using STS2RitsuLib.Telemetry.RunHistory;
34

@@ -6,7 +7,17 @@ namespace STS2RitsuLib.Telemetry
67
internal static class TelemetryEnvelopeFactory
78
{
89
internal const string BasePayloadOverrideKey = "__ritsulib_base_payload";
10+
private const string DevPackageVersionPrefix = "9999.0.0-dev.";
911
private static readonly string SessionId = Guid.NewGuid().ToString("N");
12+
private static readonly Assembly Assembly = typeof(Const).Assembly;
13+
14+
private static readonly string InformationalVersion =
15+
Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion ??
16+
Const.Version;
17+
18+
private static readonly IReadOnlyDictionary<string, string> Metadata =
19+
Assembly.GetCustomAttributes<AssemblyMetadataAttribute>()
20+
.ToDictionary(x => x.Key, x => x.Value ?? "", StringComparer.OrdinalIgnoreCase);
1021

1122
internal static TelemetryEnvelope Create(
1223
TelemetryApplicant applicant,
@@ -39,13 +50,46 @@ internal static TelemetryEnvelope Create(
3950
["anonymous_install_id"] = TelemetryIdentityStore.AnonymousInstallId,
4051
["session_id"] = SessionId,
4152
["ritsulib_version"] = Const.Version,
53+
["ritsulib_informational_version"] = InformationalVersion,
54+
["ritsulib_build_channel"] = ResolveBuildChannel(),
55+
["ritsulib_build_configuration"] = ResolveBuildConfiguration(),
4256
["applicant_id"] = applicant.ApplicantId,
4357
["owner_mod_id"] = applicant.OwnerModId,
4458
["applicant_display_name"] = applicant.ResolveDisplayName(),
4559
["platform"] = Environment.OSVersion.Platform.ToString(),
4660
};
4761
}
4862

63+
private static string ResolveBuildChannel()
64+
{
65+
if (Metadata.TryGetValue("RitsuLibTelemetryBuildChannel", out var channel) &&
66+
!string.IsNullOrWhiteSpace(channel))
67+
return channel;
68+
69+
// ReSharper disable once ConvertIfStatementToReturnStatement
70+
if (InformationalVersion.StartsWith(DevPackageVersionPrefix, StringComparison.OrdinalIgnoreCase))
71+
return "dev";
72+
73+
#if DEBUG
74+
return "local_debug";
75+
#else
76+
return "release";
77+
#endif
78+
}
79+
80+
private static string ResolveBuildConfiguration()
81+
{
82+
if (Metadata.TryGetValue("RitsuLibTelemetryBuildConfiguration", out var configuration) &&
83+
!string.IsNullOrWhiteSpace(configuration))
84+
return configuration;
85+
86+
#if DEBUG
87+
return "Debug";
88+
#else
89+
return "Release";
90+
#endif
91+
}
92+
4993
private static JsonObject BuildPayload(
5094
TelemetryApplicant applicant,
5195
TelemetryRequest request,

scripts/release_lib/nuget.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ def run_pack(
130130
args.append(f"/p:Version={override}")
131131
args.append(f"/p:PackageVersion={override}")
132132
args.append(f"/p:AssemblyInformationalVersion={override}")
133+
args.append("/p:RitsuLibTelemetryBuildChannel=dev")
134+
else:
135+
args.append("/p:RitsuLibTelemetryBuildChannel=release")
133136
if sts2_api_signature_root is not None:
134137
args.append(f"/p:Sts2ApiSignatureRoot={sts2_api_signature_root}")
135138
if sts2_dir is not None:

0 commit comments

Comments
 (0)