Skip to content

Commit 080c22e

Browse files
authored
Replace telemetry backend with Devolutions OpenSearch
1 parent dcc1b16 commit 080c22e

File tree

20 files changed

+410
-119
lines changed

20 files changed

+410
-119
lines changed

.github/workflows/build-release.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ jobs:
9191
env:
9292
UNIGETUI_GITHUB_CLIENT_ID: ${{ secrets.UNIGETUI_GITHUB_CLIENT_ID }}
9393
UNIGETUI_GITHUB_CLIENT_SECRET: ${{ secrets.UNIGETUI_GITHUB_CLIENT_SECRET }}
94+
UNIGETUI_OPENSEARCH_USERNAME: ${{ secrets.UNIGETUI_OPENSEARCH_USERNAME }}
95+
UNIGETUI_OPENSEARCH_PASSWORD: ${{ secrets.UNIGETUI_OPENSEARCH_PASSWORD }}
9496
NUGET_PACKAGES: ${{ github.workspace }}\.nuget\packages
9597
strategy:
9698
fail-fast: false
@@ -318,6 +320,8 @@ jobs:
318320
env:
319321
UNIGETUI_GITHUB_CLIENT_ID: ${{ secrets.UNIGETUI_GITHUB_CLIENT_ID }}
320322
UNIGETUI_GITHUB_CLIENT_SECRET: ${{ secrets.UNIGETUI_GITHUB_CLIENT_SECRET }}
323+
UNIGETUI_OPENSEARCH_USERNAME: ${{ secrets.UNIGETUI_OPENSEARCH_USERNAME }}
324+
UNIGETUI_OPENSEARCH_PASSWORD: ${{ secrets.UNIGETUI_OPENSEARCH_PASSWORD }}
321325
NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages
322326
strategy:
323327
fail-fast: false

src/UniGetUI.Avalonia/App.axaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public override void OnFrameworkInitializationCompleted()
4747
ApplyTheme(CoreSettings.GetValue(CoreSettings.K.PreferredTheme));
4848
var mainWindow = new MainWindow();
4949
desktop.MainWindow = mainWindow;
50-
_ = Task.Run(PEInterface.LoadManagers);
50+
_ = AvaloniaBootstrapper.InitializeAsync();
5151
}
5252

5353
base.OnFrameworkInitializationCompleted();

src/UniGetUI.Avalonia/Infrastructure/AvaloniaBootstrapper.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ private static Task InitializeSharedServicesAsync()
5353
CancellationToken.None,
5454
TaskContinuationOptions.OnlyOnFaulted,
5555
TaskScheduler.Default);
56+
TelemetryHandler.Configure(
57+
Secrets.GetOpenSearchUsername(),
58+
Secrets.GetOpenSearchPassword());
5659
_ = TelemetryHandler.InitializeAsync()
5760
.ContinueWith(
5861
t => Logger.Error(t.Exception!),
@@ -82,7 +85,7 @@ private static Task InitializeSharedServicesAsync()
8285

8386
private static async Task InitializePackageEngineAsync()
8487
{
85-
await Task.Run(PEInterface.LoadLoaders);
88+
// LoadLoaders is called synchronously in App.axaml.cs before MainWindow creation
8689
await Task.Run(PEInterface.LoadManagers);
8790
}
8891

src/UniGetUI.Avalonia/Infrastructure/AvaloniaPackageOperationHelper.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using UniGetUI.Core.Logging;
22
using UniGetUI.Interface.Enums;
3+
using UniGetUI.Interface.Telemetry;
34
using UniGetUI.PackageEngine.Enums;
45
using UniGetUI.PackageEngine.Operations;
56
using UniGetUI.PackageEngine.PackageClasses;
@@ -20,6 +21,8 @@ public static async Task UpdateAllAsync()
2021
if (pkg.Tag is PackageTag.BeingProcessed or PackageTag.OnQueue) continue;
2122
var opts = await InstallOptionsFactory.LoadApplicableAsync(pkg);
2223
var op = new UpdatePackageOperation(pkg, opts);
24+
op.OperationSucceeded += (_, _) => TelemetryHandler.UpdatePackage(pkg, TEL_OP_RESULT.SUCCESS);
25+
op.OperationFailed += (_, _) => TelemetryHandler.UpdatePackage(pkg, TEL_OP_RESULT.FAILED);
2326
AvaloniaOperationRegistry.Add(op);
2427
_ = op.MainThread();
2528
}
@@ -34,6 +37,8 @@ public static async Task UpdateAllForManagerAsync(string managerName)
3437
if (pkg.Tag is PackageTag.BeingProcessed or PackageTag.OnQueue) continue;
3538
var opts = await InstallOptionsFactory.LoadApplicableAsync(pkg);
3639
var op = new UpdatePackageOperation(pkg, opts);
40+
op.OperationSucceeded += (_, _) => TelemetryHandler.UpdatePackage(pkg, TEL_OP_RESULT.SUCCESS);
41+
op.OperationFailed += (_, _) => TelemetryHandler.UpdatePackage(pkg, TEL_OP_RESULT.FAILED);
3742
AvaloniaOperationRegistry.Add(op);
3843
_ = op.MainThread();
3944
}
@@ -50,6 +55,8 @@ public static async Task UpdateForIdAsync(string packageId)
5055

5156
var opts = await InstallOptionsFactory.LoadApplicableAsync(pkg);
5257
var op = new UpdatePackageOperation(pkg, opts);
58+
op.OperationSucceeded += (_, _) => TelemetryHandler.UpdatePackage(pkg, TEL_OP_RESULT.SUCCESS);
59+
op.OperationFailed += (_, _) => TelemetryHandler.UpdatePackage(pkg, TEL_OP_RESULT.FAILED);
5360
AvaloniaOperationRegistry.Add(op);
5461
_ = op.MainThread();
5562
}

src/UniGetUI.Avalonia/Infrastructure/Secrets.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,7 @@ internal static partial class Secrets
88
* Seeing errors? Build the project (maybe twice)
99
*/
1010
public static partial string GetGitHubClientId();
11+
public static partial string GetOpenSearchUsername();
12+
public static partial string GetOpenSearchPassword();
1113
/* ------------------------------------------------------------------------ */
1214
}

src/UniGetUI.Avalonia/Infrastructure/generate-secrets.ps1

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,12 @@ if (-not (Test-Path -Path $generatedDir)) {
1212
}
1313

1414
$clientId = $env:UNIGETUI_GITHUB_CLIENT_ID
15+
$openSearchUsername = $env:UNIGETUI_OPENSEARCH_USERNAME
16+
$openSearchPassword = $env:UNIGETUI_OPENSEARCH_PASSWORD
1517

1618
if (-not $clientId) { $clientId = "CLIENT_ID_UNSET" }
19+
if (-not $openSearchUsername) { $openSearchUsername = "OPENSEARCH_USERNAME_UNSET" }
20+
if (-not $openSearchPassword) { $openSearchPassword = "OPENSEARCH_PASSWORD_UNSET" }
1721

1822
@"
1923
// Auto-generated file - do not modify
@@ -22,6 +26,8 @@ namespace UniGetUI.Avalonia.Infrastructure
2226
internal static partial class Secrets
2327
{
2428
public static partial string GetGitHubClientId() => `"$clientId`";
29+
public static partial string GetOpenSearchUsername() => `"$openSearchUsername`";
30+
public static partial string GetOpenSearchPassword() => `"$openSearchPassword`";
2531
}
2632
}
2733
"@ | Set-Content -Encoding UTF8 "Generated Files\Secrets.Generated.cs"

src/UniGetUI.Avalonia/Infrastructure/generate-secrets.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,12 @@ if [ ! -d "Generated Files" ]; then mkdir -p "Generated Files"; fi
55
if [ ! -d "${OUTPUT_PATH}Generated Files" ]; then mkdir -p "${OUTPUT_PATH}Generated Files"; fi
66

77
CLIENT_ID="${UNIGETUI_GITHUB_CLIENT_ID}"
8+
OPENSEARCH_USERNAME="${UNIGETUI_OPENSEARCH_USERNAME}"
9+
OPENSEARCH_PASSWORD="${UNIGETUI_OPENSEARCH_PASSWORD}"
810

911
if [ -z "$CLIENT_ID" ]; then CLIENT_ID="CLIENT_ID_UNSET"; fi
12+
if [ -z "$OPENSEARCH_USERNAME" ]; then OPENSEARCH_USERNAME="OPENSEARCH_USERNAME_UNSET"; fi
13+
if [ -z "$OPENSEARCH_PASSWORD" ]; then OPENSEARCH_PASSWORD="OPENSEARCH_PASSWORD_UNSET"; fi
1014

1115
cat > "Generated Files/Secrets.Generated.cs" << CSEOF
1216
// Auto-generated file - do not modify
@@ -15,6 +19,8 @@ namespace UniGetUI.Avalonia.Infrastructure
1519
internal static partial class Secrets
1620
{
1721
public static partial string GetGitHubClientId() => "$CLIENT_ID";
22+
public static partial string GetOpenSearchUsername() => "$OPENSEARCH_USERNAME";
23+
public static partial string GetOpenSearchPassword() => "$OPENSEARCH_PASSWORD";
1824
}
1925
}
2026
CSEOF

src/UniGetUI.Avalonia/ViewModels/SoftwarePages/PackagesPageViewModel.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using UniGetUI.Avalonia.Views.Controls;
1616
using UniGetUI.Core.SettingsEngine;
1717
using UniGetUI.Core.Tools;
18+
using UniGetUI.Interface.Telemetry;
1819
using UniGetUI.PackageEngine.Enums;
1920
using UniGetUI.PackageEngine.Interfaces;
2021
using UniGetUI.PackageEngine.Operations;
@@ -784,6 +785,8 @@ public static async Task LaunchInstall(
784785
var opts = await InstallOptionsFactory.LoadApplicableAsync(
785786
pkg, elevated: elevated, interactive: interactive, no_integrity: no_integrity);
786787
var op = new InstallPackageOperation(pkg, opts);
788+
op.OperationSucceeded += (_, _) => TelemetryHandler.InstallPackage(pkg, TEL_OP_RESULT.SUCCESS, TEL_InstallReferral.DIRECT_SEARCH);
789+
op.OperationFailed += (_, _) => TelemetryHandler.InstallPackage(pkg, TEL_OP_RESULT.FAILED, TEL_InstallReferral.DIRECT_SEARCH);
787790
AvaloniaOperationRegistry.Add(op);
788791
_ = op.MainThread();
789792
}

src/UniGetUI.Avalonia/Views/DialogPages/PackageDetailsWindow.axaml.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Avalonia.Controls;
22
using UniGetUI.Avalonia.Infrastructure;
33
using UniGetUI.Avalonia.ViewModels;
4+
using UniGetUI.Interface.Telemetry;
45
using UniGetUI.PackageEngine.Enums;
56
using UniGetUI.PackageEngine.Interfaces;
67
using UniGetUI.PackageEngine.Operations;
@@ -35,6 +36,7 @@ protected override void OnOpened(EventArgs e)
3536
{
3637
base.OnOpened(e);
3738
_ = _vm.LoadDetailsAsync();
39+
TelemetryHandler.PackageDetails(_vm.Package, _vm.OperationRole.ToString());
3840
}
3941

4042
private MenuFlyout BuildActionFlyout()
@@ -110,6 +112,22 @@ private async Task LaunchAndClose(
110112
_ => throw new ArgumentOutOfRangeException(nameof(role)),
111113
};
112114

115+
switch (role)
116+
{
117+
case OperationType.Install:
118+
op.OperationSucceeded += (_, _) => TelemetryHandler.InstallPackage(pkg, TEL_OP_RESULT.SUCCESS, TEL_InstallReferral.DIRECT_SEARCH);
119+
op.OperationFailed += (_, _) => TelemetryHandler.InstallPackage(pkg, TEL_OP_RESULT.FAILED, TEL_InstallReferral.DIRECT_SEARCH);
120+
break;
121+
case OperationType.Update:
122+
op.OperationSucceeded += (_, _) => TelemetryHandler.UpdatePackage(pkg, TEL_OP_RESULT.SUCCESS);
123+
op.OperationFailed += (_, _) => TelemetryHandler.UpdatePackage(pkg, TEL_OP_RESULT.FAILED);
124+
break;
125+
case OperationType.Uninstall:
126+
op.OperationSucceeded += (_, _) => TelemetryHandler.UninstallPackage(pkg, TEL_OP_RESULT.SUCCESS);
127+
op.OperationFailed += (_, _) => TelemetryHandler.UninstallPackage(pkg, TEL_OP_RESULT.FAILED);
128+
break;
129+
}
130+
113131
AvaloniaOperationRegistry.Add(op);
114132
_ = op.MainThread();
115133
}

src/UniGetUI.Avalonia/Views/SoftwarePages/InstalledPackagesPage.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using UniGetUI.Core.Logging;
88
using UniGetUI.Core.SettingsEngine;
99
using UniGetUI.Core.Tools;
10+
using UniGetUI.Interface.Telemetry;
1011
using UniGetUI.PackageEngine.Classes.Manager.Classes;
1112
using UniGetUI.PackageEngine.Enums;
1213
using UniGetUI.PackageEngine.Interfaces;
@@ -320,6 +321,8 @@ private static async Task LaunchUninstall(
320321
var opts = await InstallOptionsFactory.LoadApplicableAsync(
321322
pkg, elevated: elevated, interactive: interactive, remove_data: remove_data);
322323
var op = new UninstallPackageOperation(pkg, opts);
324+
op.OperationSucceeded += (_, _) => TelemetryHandler.UninstallPackage(pkg, TEL_OP_RESULT.SUCCESS);
325+
op.OperationFailed += (_, _) => TelemetryHandler.UninstallPackage(pkg, TEL_OP_RESULT.FAILED);
323326
AvaloniaOperationRegistry.Add(op);
324327
_ = op.MainThread();
325328
}
@@ -330,6 +333,8 @@ private static async Task LaunchReinstall(IPackage? package)
330333
if (package is null || package.Source.IsVirtualManager) return;
331334
var opts = await InstallOptionsFactory.LoadApplicableAsync(package);
332335
var op = new InstallPackageOperation(package, opts);
336+
op.OperationSucceeded += (_, _) => TelemetryHandler.InstallPackage(package, TEL_OP_RESULT.SUCCESS, TEL_InstallReferral.ALREADY_INSTALLED);
337+
op.OperationFailed += (_, _) => TelemetryHandler.InstallPackage(package, TEL_OP_RESULT.FAILED, TEL_InstallReferral.ALREADY_INSTALLED);
333338
AvaloniaOperationRegistry.Add(op);
334339
_ = op.MainThread();
335340
}
@@ -340,7 +345,11 @@ private static async Task LaunchUninstallThenReinstall(IPackage? package)
340345
var uninstallOpts = await InstallOptionsFactory.LoadApplicableAsync(package);
341346
var reinstallOpts = await InstallOptionsFactory.LoadApplicableAsync(package);
342347
var uninstallOp = new UninstallPackageOperation(package, uninstallOpts);
348+
uninstallOp.OperationSucceeded += (_, _) => TelemetryHandler.UninstallPackage(package, TEL_OP_RESULT.SUCCESS);
349+
uninstallOp.OperationFailed += (_, _) => TelemetryHandler.UninstallPackage(package, TEL_OP_RESULT.FAILED);
343350
var reinstallOp = new InstallPackageOperation(package, reinstallOpts, req: uninstallOp);
351+
reinstallOp.OperationSucceeded += (_, _) => TelemetryHandler.InstallPackage(package, TEL_OP_RESULT.SUCCESS, TEL_InstallReferral.ALREADY_INSTALLED);
352+
reinstallOp.OperationFailed += (_, _) => TelemetryHandler.InstallPackage(package, TEL_OP_RESULT.FAILED, TEL_InstallReferral.ALREADY_INSTALLED);
344353
AvaloniaOperationRegistry.Add(uninstallOp);
345354
AvaloniaOperationRegistry.Add(reinstallOp);
346355
_ = uninstallOp.MainThread();

0 commit comments

Comments
 (0)