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 10 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.Version;
using Volo.Abp.Cli.Utils; using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Internal.Telemetry;
using Volo.Abp.Internal.Telemetry.Constants;
namespace Volo.Abp.Cli; namespace Volo.Abp.Cli;
@ -21,6 +23,7 @@ public class CliService : ITransientDependency
{ {
private readonly MemoryService _memoryService; private readonly MemoryService _memoryService;
public ILogger<CliService> Logger { get; set; } public ILogger<CliService> Logger { get; set; }
public ITelemetryService TelemetryService { get; set; }
protected ICommandLineArgumentParser CommandLineArgumentParser { get; } protected ICommandLineArgumentParser CommandLineArgumentParser { get; }
protected ICommandSelector CommandSelector { get; } protected ICommandSelector CommandSelector { get; }
protected IServiceScopeFactory ServiceScopeFactory { get; } protected IServiceScopeFactory ServiceScopeFactory { get; }
@ -64,6 +67,7 @@ public class CliService : ITransientDependency
try try
{ {
await using var _ = TelemetryService.TrackActivityAsync(ActivityNameConsts.AbpCliRun);
if (commandLineArgs.IsCommand("prompt")) if (commandLineArgs.IsCommand("prompt"))
{ {
await RunPromptAsync(); await RunPromptAsync();
@ -80,10 +84,13 @@ public class CliService : ITransientDependency
catch (CliUsageException usageException) catch (CliUsageException usageException)
{ {
Logger.LogWarning(usageException.Message); Logger.LogWarning(usageException.Message);
await TelemetryService.AddActivityAsync(ActivityNameConsts.AbpCliExit);
Environment.ExitCode = 1; Environment.ExitCode = 1;
} }
catch (Exception ex) catch (Exception ex)
{ {
await TelemetryService.AddErrorActivityAsync(ex.Message);
await TelemetryService.AddActivityAsync(ActivityNameConsts.AbpCliExit);
Logger.LogException(ex); Logger.LogException(ex);
throw; 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.LIbs;
using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.Cli.ProjectBuilding;
using Volo.Abp.Cli.ProjectBuilding.Events; 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.ProjectModification;
using Volo.Abp.Cli.Utils; using Volo.Abp.Cli.Utils;
using Volo.Abp.Cli.Version; using Volo.Abp.Cli.Version;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Local; 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; namespace Volo.Abp.Cli.Commands;
@ -25,6 +30,7 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien
protected TemplateProjectBuilder TemplateProjectBuilder { get; } protected TemplateProjectBuilder TemplateProjectBuilder { get; }
public ITemplateInfoProvider TemplateInfoProvider { get; } public ITemplateInfoProvider TemplateInfoProvider { get; }
public ITelemetryService TelemetryService { get; set; }
public NewCommand( public NewCommand(
ConnectionStringProvider connectionStringProvider, ConnectionStringProvider connectionStringProvider,
@ -94,6 +100,20 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien
var result = await TemplateProjectBuilder.BuildAsync( var result = await TemplateProjectBuilder.BuildAsync(
projectArgs 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); 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.Args;
using Volo.Abp.Cli.ProjectModification; using Volo.Abp.Cli.ProjectModification;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Internal.Telemetry;
using Volo.Abp.Internal.Telemetry.Constants;
namespace Volo.Abp.Cli.Commands; namespace Volo.Abp.Cli.Commands;
@ -17,6 +19,7 @@ public class UpdateCommand : IConsoleCommand, ITransientDependency
public const string Name = "update"; public const string Name = "update";
public ILogger<UpdateCommand> Logger { get; set; } public ILogger<UpdateCommand> Logger { get; set; }
public ITelemetryService TelemetryService { get; set; }
private readonly VoloNugetPackagesVersionUpdater _nugetPackagesVersionUpdater; private readonly VoloNugetPackagesVersionUpdater _nugetPackagesVersionUpdater;
private readonly NpmPackagesUpdater _npmPackagesUpdater; private readonly NpmPackagesUpdater _npmPackagesUpdater;
@ -32,6 +35,7 @@ public class UpdateCommand : IConsoleCommand, ITransientDependency
public async Task ExecuteAsync(CommandLineArgs commandLineArgs) public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
{ {
await using var _ = TelemetryService.TrackActivityAsync(ActivityNameConsts.AbpCliCommandsUpdate);
var updateNpm = commandLineArgs.Options.ContainsKey(Options.Packages.Npm); var updateNpm = commandLineArgs.Options.ContainsKey(Options.Packages.Npm);
var updateNuget = commandLineArgs.Options.ContainsKey(Options.Packages.NuGet); var updateNuget = commandLineArgs.Options.ContainsKey(Options.Packages.NuGet);

Loading…
Cancel
Save