Browse Source

Integrate telemetry tracking into CLI commands

Added ITelemetryService usage to CliService, NewCommand, and UpdateCommand to track command execution and error activities. This enables better monitoring and diagnostics for CLI operations by reporting activity names and relevant metadata to the telemetry system.
pull/24395/head
SALİH ÖZKARA 8 months ago
parent
commit
b0a1c0ab0e
  1. 7
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs
  2. 20
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs
  3. 4
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/UpdateCommand.cs

7
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs

@ -14,6 +14,8 @@ using Volo.Abp.Cli.Memory;
using Volo.Abp.Cli.Version;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Internal.Telemetry;
using Volo.Abp.Internal.Telemetry.Constants;
namespace Volo.Abp.Cli;
@ -21,6 +23,7 @@ public class CliService : ITransientDependency
{
private readonly MemoryService _memoryService;
public ILogger<CliService> Logger { get; set; }
public ITelemetryService TelemetryService { get; set; }
protected ICommandLineArgumentParser CommandLineArgumentParser { get; }
protected ICommandSelector CommandSelector { get; }
protected IServiceScopeFactory ServiceScopeFactory { get; }
@ -64,6 +67,7 @@ public class CliService : ITransientDependency
try
{
await using var _ = TelemetryService.TrackActivityAsync(ActivityNameConsts.AbpCliRun);
if (commandLineArgs.IsCommand("prompt"))
{
await RunPromptAsync();
@ -80,10 +84,13 @@ public class CliService : ITransientDependency
catch (CliUsageException usageException)
{
Logger.LogWarning(usageException.Message);
await TelemetryService.AddActivityAsync(ActivityNameConsts.AbpCliExit);
Environment.ExitCode = 1;
}
catch (Exception ex)
{
await TelemetryService.AddErrorActivityAsync(ex.Message);
await TelemetryService.AddActivityAsync(ActivityNameConsts.AbpCliExit);
Logger.LogException(ex);
throw;
}

20
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs

@ -11,11 +11,16 @@ using Volo.Abp.Cli.Commands.Services;
using Volo.Abp.Cli.LIbs;
using Volo.Abp.Cli.ProjectBuilding;
using Volo.Abp.Cli.ProjectBuilding.Events;
using Volo.Abp.Cli.ProjectBuilding.Templates.Module;
using Volo.Abp.Cli.ProjectBuilding.Templates.MvcModule;
using Volo.Abp.Cli.ProjectModification;
using Volo.Abp.Cli.Utils;
using Volo.Abp.Cli.Version;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Local;
using Volo.Abp.Internal.Telemetry;
using Volo.Abp.Internal.Telemetry.Constants;
using Volo.Abp.Internal.Telemetry.Constants.Enums;
namespace Volo.Abp.Cli.Commands;
@ -25,6 +30,7 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien
protected TemplateProjectBuilder TemplateProjectBuilder { get; }
public ITemplateInfoProvider TemplateInfoProvider { get; }
public ITelemetryService TelemetryService { get; set; }
public NewCommand(
ConnectionStringProvider connectionStringProvider,
@ -94,6 +100,20 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien
var result = await TemplateProjectBuilder.BuildAsync(
projectArgs
);
var activityName = ActivityNameConsts.AbpCliCommandsNewSolution;
if (ModuleTemplateBase.IsModuleTemplate(template))
{
activityName = ActivityNameConsts.AbpCliCommandsNewModule;
}
await TelemetryService.AddActivityAsync(activityName, o =>
{
o[ActivityPropertyNames.CreationTool] = AbpTool.OldCli;
o[ActivityPropertyNames.Template] = template;
o[ActivityPropertyNames.SolutionPath] = projectArgs.OutputFolder;
});
ExtractProjectZip(result, projectArgs.OutputFolder);

4
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/UpdateCommand.cs

@ -9,6 +9,8 @@ using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.ProjectModification;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Internal.Telemetry;
using Volo.Abp.Internal.Telemetry.Constants;
namespace Volo.Abp.Cli.Commands;
@ -17,6 +19,7 @@ public class UpdateCommand : IConsoleCommand, ITransientDependency
public const string Name = "update";
public ILogger<UpdateCommand> Logger { get; set; }
public ITelemetryService TelemetryService { get; set; }
private readonly VoloNugetPackagesVersionUpdater _nugetPackagesVersionUpdater;
private readonly NpmPackagesUpdater _npmPackagesUpdater;
@ -32,6 +35,7 @@ public class UpdateCommand : IConsoleCommand, ITransientDependency
public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
{
await using var _ = TelemetryService.TrackActivityAsync(ActivityNameConsts.AbpCliCommandsUpdate);
var updateNpm = commandLineArgs.Options.ContainsKey(Options.Packages.Npm);
var updateNuget = commandLineArgs.Options.ContainsKey(Options.Packages.NuGet);

Loading…
Cancel
Save