From 67a81b79aac5a4cbec8e40f41ccfab02773a4426 Mon Sep 17 00:00:00 2001 From: Malavika Date: Tue, 11 Feb 2025 16:01:13 +0530 Subject: [PATCH 01/15] Added the telemetry --- src/LCT.Common/CommonAppSettings.cs | 6 ++ src/LCT.Common/LCT.Common.csproj | 1 + src/LCT.Common/TelemetryHelper.cs | 54 +++++++++++ src/LCT.Common/appSettings.json | 4 + .../ComponentCreator.cs | 4 +- src/LCT.SW360PackageCreator/CreatorHelper.cs | 2 +- .../Interfaces/ICreatorHelper.cs | 2 +- .../LCT.SW360PackageCreator.csproj | 1 + src/LCT.SW360PackageCreator/Program.cs | 31 ++++++- .../ApplicationInsightsTelemetryProvider.cs | 53 +++++++++++ src/LCT.Telemetry/HashUtility.cs | 22 +++++ src/LCT.Telemetry/ITelemetryProvider.cs | 9 ++ src/LCT.Telemetry/LCT.Telemetry.csproj | 13 +++ src/LCT.Telemetry/Telemetry.cs | 86 ++++++++++++++++++ src/LCT.Telemetry/TelemetryProviderFactory.cs | 36 ++++++++ src/LicenseClearingTool.sln | 13 +++ .../LCT.Telemetry.UTest.csproj | 30 ++++++ src/Telemetry.UTest/Telemetry.UTest.cs | 91 +++++++++++++++++++ 18 files changed, 454 insertions(+), 4 deletions(-) create mode 100644 src/LCT.Common/TelemetryHelper.cs create mode 100644 src/LCT.Telemetry/ApplicationInsightsTelemetryProvider.cs create mode 100644 src/LCT.Telemetry/HashUtility.cs create mode 100644 src/LCT.Telemetry/ITelemetryProvider.cs create mode 100644 src/LCT.Telemetry/LCT.Telemetry.csproj create mode 100644 src/LCT.Telemetry/Telemetry.cs create mode 100644 src/LCT.Telemetry/TelemetryProviderFactory.cs create mode 100644 src/Telemetry.UTest/LCT.Telemetry.UTest.csproj create mode 100644 src/Telemetry.UTest/Telemetry.UTest.cs diff --git a/src/LCT.Common/CommonAppSettings.cs b/src/LCT.Common/CommonAppSettings.cs index e7db107e..6172c217 100644 --- a/src/LCT.Common/CommonAppSettings.cs +++ b/src/LCT.Common/CommonAppSettings.cs @@ -62,6 +62,7 @@ public string ProjectType } } public bool MultipleProjectType { get; set; } = false; + public Telemetry Telemetry { get; set; } public SW360 SW360 { get; set; } public Directory Directory { get; set; } public Jfrog Jfrog { get; set; } @@ -95,6 +96,11 @@ public string LogFolderPath } } } + public class Telemetry + { + public bool Enable { get; set; } = true; + public string ApplicationInsightInstrumentKey { get; set; } + } public class SW360 { private string m_URL; diff --git a/src/LCT.Common/LCT.Common.csproj b/src/LCT.Common/LCT.Common.csproj index 48228235..d417d592 100644 --- a/src/LCT.Common/LCT.Common.csproj +++ b/src/LCT.Common/LCT.Common.csproj @@ -35,6 +35,7 @@ + diff --git a/src/LCT.Common/TelemetryHelper.cs b/src/LCT.Common/TelemetryHelper.cs new file mode 100644 index 00000000..b9df8f88 --- /dev/null +++ b/src/LCT.Common/TelemetryHelper.cs @@ -0,0 +1,54 @@ +using LCT.Telemetry; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Globalization; +using System.Linq; +using System.Reflection; + +namespace LCT.Common +{ + public class TelemetryHelper + { + public static void InitializeAndTrackEvent(LCT.Telemetry.Telemetry telemetry, string toolName, string toolVersion, string eventName, + CommonAppSettings appSettings) + { + telemetry.Initialize(toolName, toolVersion); + + telemetry.TrackCustomEvent(eventName, new Dictionary + { + { "CA Tool Version", toolVersion }, + { "SW360 Project Name", appSettings.SW360.ProjectName }, + { "SW360 Project ID", appSettings.SW360.ProjectID }, + { "Project Type", appSettings.ProjectType }, + { "Hashed User ID", HashUtility.GetHashString(Environment.UserName) }, + { "Start Time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) } + }); + } + + public static void TrackKpiDataTelemetry(LCT.Telemetry.Telemetry telemetry, string eventName, T kpiData) + { + var properties = typeof(T).GetProperties(); + var telemetryData = properties.ToDictionary( + prop => prop.GetCustomAttribute()?.DisplayName ?? prop.Name, + prop => prop.GetValue(kpiData)?.ToString() + ); + + telemetryData["Hashed User ID"] = HashUtility.GetHashString(Environment.UserName); + telemetryData["Time stamp"] = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); + + telemetry.TrackCustomEvent(eventName, telemetryData); + } + + public static void TrackException(LCT.Telemetry.Telemetry telemetry, Exception ex) + { + var exceptionData = new Dictionary + { + { "Error Time", DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) }, + { "Stack Trace", ex.StackTrace } + }; + + telemetry.TrackException(ex, exceptionData); + } + } +} \ No newline at end of file diff --git a/src/LCT.Common/appSettings.json b/src/LCT.Common/appSettings.json index 70ac5a75..a12797d5 100644 --- a/src/LCT.Common/appSettings.json +++ b/src/LCT.Common/appSettings.json @@ -8,6 +8,10 @@ "TimeOut": 400, "ProjectType": "", "MultipleProjectType": false, + "Telemetry": { + "Enable": true, + "ApplicationInsightInstrumentKey": "" //From Application Insight to enable Telemetry + }, "SW360": { "URL": "", "ProjectName": "", diff --git a/src/LCT.SW360PackageCreator/ComponentCreator.cs b/src/LCT.SW360PackageCreator/ComponentCreator.cs index 33451d25..689d560f 100644 --- a/src/LCT.SW360PackageCreator/ComponentCreator.cs +++ b/src/LCT.SW360PackageCreator/ComponentCreator.cs @@ -34,6 +34,8 @@ namespace LCT.SW360PackageCreator public class ComponentCreator : IComponentCreator { static readonly ILog Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + public static readonly CreatorKpiData kpiData = new(); public List UpdatedCompareBomData { get; set; } = new List(); public List ReleasesFoundInCbom { get; set; } = new List(); public List ComponentsNotLinked { get; set; } = new List(); @@ -255,7 +257,7 @@ public async Task CreateComponentInSw360(CommonAppSettings appSettings, FileConstant.ComponentsWithoutSrcFileName, appSettings.SW360.ProjectName); // write Kpi Data - CreatorKpiData kpiData = creatorHelper.GetCreatorKpiData(UpdatedCompareBomData); + creatorHelper.GetCreatorKpiData (UpdatedCompareBomData, kpiData); fileOperations.WriteContentToFile(kpiData, bomGenerationPath, FileConstant.CreatorKpiDataFileName, appSettings.SW360.ProjectName); diff --git a/src/LCT.SW360PackageCreator/CreatorHelper.cs b/src/LCT.SW360PackageCreator/CreatorHelper.cs index e5a4c4b4..b842efa1 100644 --- a/src/LCT.SW360PackageCreator/CreatorHelper.cs +++ b/src/LCT.SW360PackageCreator/CreatorHelper.cs @@ -361,7 +361,7 @@ private static string GetDownloadPathForComponetType(ComparisonBomData component return localPathforDownload; } - public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData) + public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData, CreatorKpiData creatorKpi) { CreatorKpiData creatorKpiData = new CreatorKpiData { diff --git a/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs b/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs index 3502d1ac..4d67ce52 100644 --- a/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs +++ b/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs @@ -21,7 +21,7 @@ public interface ICreatorHelper { public Task> SetContentsForComparisonBOM(List lstComponentForBOM, ISW360Service sw360Service); public Task> DownloadReleaseAttachmentSource(ComparisonBomData component); - public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData); + public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData,CreatorKpiData creatorKpi); public void WriteCreatorKpiDataToConsole(CreatorKpiData creatorKpiData); public void WriteSourceNotFoundListToConsole(List comparisionBomDataList, CommonAppSettings appSetting); public List GetDownloadUrlNotFoundList(List comparisionBomDataList); diff --git a/src/LCT.SW360PackageCreator/LCT.SW360PackageCreator.csproj b/src/LCT.SW360PackageCreator/LCT.SW360PackageCreator.csproj index 927cd806..10e3a8c1 100644 --- a/src/LCT.SW360PackageCreator/LCT.SW360PackageCreator.csproj +++ b/src/LCT.SW360PackageCreator/LCT.SW360PackageCreator.csproj @@ -30,6 +30,7 @@ + diff --git a/src/LCT.SW360PackageCreator/Program.cs b/src/LCT.SW360PackageCreator/Program.cs index 9ea1637d..3ec9c880 100644 --- a/src/LCT.SW360PackageCreator/Program.cs +++ b/src/LCT.SW360PackageCreator/Program.cs @@ -99,7 +99,36 @@ static async Task Main(string[] args) await CreatorValidator.TriggerFossologyValidation(appSettings, sW360ApicommunicationFacade); } await InitiatePackageCreatorProcess(appSettings, sw360ProjectService, sW360ApicommunicationFacade); - + // Initialize telemetry with CATool version and instrumentation key only if Telemetry is enabled in appsettings + if (appSettings.Telemetry.Enable == true) + { + Logger.Warn(TelemetryConstant.StartLogMessage); + Telemetry.Telemetry telemetry = new Telemetry.Telemetry("ApplicationInsights", new Dictionary + { + { "InstrumentationKey", appSettings.Telemetry.ApplicationInsightInstrumentKey } + }); + try + { + TelemetryHelper.InitializeAndTrackEvent(telemetry, TelemetryConstant.ToolName, caToolInformation.CatoolVersion, TelemetryConstant.PackageCreator + , appSettings); + // Track KPI data if available + if (ComponentCreator.kpiData != null) + { + TelemetryHelper.TrackKpiDataTelemetry(telemetry, TelemetryConstant.CreatorKpiData, ComponentCreator.kpiData); + } + telemetry.TrackExecutionTime(); + } + catch (Exception ex) + { + Logger.Error($"An error occurred: {ex.Message}"); + TelemetryHelper.TrackException(telemetry, ex); + environmentHelper.CallEnvironmentExit(-1); + } + finally + { + telemetry.Flush(); // Ensure telemetry is sent before application exits + } + } Logger.Logger.Log(null, Level.Notice, $"End of Package Creator execution: {DateTime.Now}\n", null); // publish logs and bom file to pipeline artifact diff --git a/src/LCT.Telemetry/ApplicationInsightsTelemetryProvider.cs b/src/LCT.Telemetry/ApplicationInsightsTelemetryProvider.cs new file mode 100644 index 00000000..615e9e95 --- /dev/null +++ b/src/LCT.Telemetry/ApplicationInsightsTelemetryProvider.cs @@ -0,0 +1,53 @@ +using Microsoft.ApplicationInsights; +using Microsoft.ApplicationInsights.DataContracts; +using Microsoft.ApplicationInsights.Extensibility; + +namespace LCT.Telemetry +{ + public class ApplicationInsightsTelemetryProvider : ITelemetryProvider + { + private readonly TelemetryClient _telemetryClient; + + public ApplicationInsightsTelemetryProvider(Dictionary configuration) + { + var instrumentationKey = configuration.GetValueOrDefault("InstrumentationKey") + ?? Environment.GetEnvironmentVariable("TelemetryInstrumentationKey"); + + if (string.IsNullOrEmpty(instrumentationKey)) + { + throw new InvalidOperationException("Application Insights Instrumentation Key is missing or invalid."); + } + + var aiConfig = TelemetryConfiguration.CreateDefault(); + aiConfig.InstrumentationKey = instrumentationKey; + + _telemetryClient = new TelemetryClient(aiConfig); + } + + public void TrackEvent(string eventName, Dictionary properties = null) + { + _telemetryClient.TrackEvent(eventName, properties); + } + + public void TrackException(Exception ex, Dictionary properties = null) + { + var exceptionTelemetry = new ExceptionTelemetry(ex); + + if (properties != null) + { + foreach (var property in properties) + { + exceptionTelemetry.Properties[property.Key] = property.Value; + } + } + + _telemetryClient.TrackException(exceptionTelemetry); + } + + public void Flush() + { + _telemetryClient.Flush(); + Thread.Sleep(1000); // Allow some time for telemetry to be sent + } + } +} \ No newline at end of file diff --git a/src/LCT.Telemetry/HashUtility.cs b/src/LCT.Telemetry/HashUtility.cs new file mode 100644 index 00000000..b2edd426 --- /dev/null +++ b/src/LCT.Telemetry/HashUtility.cs @@ -0,0 +1,22 @@ +using System.Security.Cryptography; +using System.Text; + +namespace LCT.Telemetry +{ + public static class HashUtility + { + public static string GetHashString(string input) + { + if (string.IsNullOrEmpty(input)) + { + return string.Empty; + } + + using (var hashAlgorithm = SHA256.Create()) + { + byte[] hashBytes = hashAlgorithm.ComputeHash(Encoding.UTF8.GetBytes(input)); + return BitConverter.ToString(hashBytes).Replace("-", "").ToLowerInvariant(); + } + } + } +} \ No newline at end of file diff --git a/src/LCT.Telemetry/ITelemetryProvider.cs b/src/LCT.Telemetry/ITelemetryProvider.cs new file mode 100644 index 00000000..7c643b79 --- /dev/null +++ b/src/LCT.Telemetry/ITelemetryProvider.cs @@ -0,0 +1,9 @@ +namespace LCT.Telemetry +{ + public interface ITelemetryProvider + { + void TrackEvent(string eventName, Dictionary properties = null); + void TrackException(Exception ex, Dictionary properties = null); + void Flush(); + } +} \ No newline at end of file diff --git a/src/LCT.Telemetry/LCT.Telemetry.csproj b/src/LCT.Telemetry/LCT.Telemetry.csproj new file mode 100644 index 00000000..433ff50f --- /dev/null +++ b/src/LCT.Telemetry/LCT.Telemetry.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + + diff --git a/src/LCT.Telemetry/Telemetry.cs b/src/LCT.Telemetry/Telemetry.cs new file mode 100644 index 00000000..bad21f0c --- /dev/null +++ b/src/LCT.Telemetry/Telemetry.cs @@ -0,0 +1,86 @@ +using System.Diagnostics; +using System.Globalization; + +/// +/// Telemtetry class to track custom events, exceptions and execution time +/// + +namespace LCT.Telemetry +{ + public class Telemetry + { + private readonly ITelemetryProvider _telemetryProvider; + private readonly Stopwatch _stopwatch; + + public Telemetry(string telemetryType, Dictionary configuration) + { + _stopwatch = new Stopwatch(); + + if (!Enum.TryParse(telemetryType, true, out var parsedTelemetryType)) + { + throw new NotSupportedException($"Telemetry type '{telemetryType}' is not supported."); + } + + _telemetryProvider = TelemetryProviderFactory.CreateTelemetryProvider( + parsedTelemetryType, + configuration ?? throw new ArgumentNullException(nameof(configuration), "Configuration cannot be null.") + ); + } + + + public void Initialize(string appName, string version) + { + _stopwatch.Start(); + + _telemetryProvider.TrackEvent("ApplicationStarted", new Dictionary + { + { "App Name", appName }, + { "Version", version }, + { "Start Time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) }, + { "Hashed User ID", HashUtility.GetHashString(Environment.UserName) } + }); + + TrackUserDetails(); + } + + public void TrackCustomEvent(string eventName, Dictionary properties = null) + { + _telemetryProvider.TrackEvent(eventName, properties); + } + + public void TrackException(Exception ex, Dictionary properties = null) + { + _telemetryProvider.TrackException(ex, properties); + } + + public void TrackExecutionTime() + { + _stopwatch.Stop(); + + _telemetryProvider.TrackEvent("ApplicationExecutionTime", new Dictionary + { + { "Hashed User ID", HashUtility.GetHashString(Environment.UserName) }, + { "Total Execution Time", $"{_stopwatch.Elapsed.TotalSeconds} seconds" }, + { "End Time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) } + }); + } + + public void Flush() + { + _telemetryProvider.Flush(); + } + + private void TrackUserDetails() + { + string userName = HashUtility.GetHashString(Environment.UserName); + string machineName = Environment.MachineName; + + _telemetryProvider.TrackEvent("UserDetails", new Dictionary + { + { "User Id", userName }, + { "Machine Name", machineName }, + { "Login Time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) } + }); + } + } +} \ No newline at end of file diff --git a/src/LCT.Telemetry/TelemetryProviderFactory.cs b/src/LCT.Telemetry/TelemetryProviderFactory.cs new file mode 100644 index 00000000..9760c982 --- /dev/null +++ b/src/LCT.Telemetry/TelemetryProviderFactory.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; + +namespace LCT.Telemetry +{ + /// + /// Enum to define the available telemetry types. + /// + public enum TelemetryType + { + ApplicationInsights = 1, + // Add future telemetry types here, e.g., NewTelemetryProvider = 2 + } + + /// + /// This class is responsible for creating the telemetry provider based on the configuration. + /// We can add different providers here in the future, instead of Application Insights. + /// + public static class TelemetryProviderFactory + { + /// + /// Creates the telemetry provider based on the specified telemetry type and configuration. + /// + /// The telemetry type as an enum. + /// The configuration for the telemetry provider. + /// An instance of ITelemetryProvider. + public static ITelemetryProvider CreateTelemetryProvider(TelemetryType telemetryType, Dictionary configuration) + { + return telemetryType switch + { + TelemetryType.ApplicationInsights => new ApplicationInsightsTelemetryProvider(configuration), + _ => throw new NotSupportedException($"Telemetry type '{telemetryType}' is not supported.") + }; + } + } +} \ No newline at end of file diff --git a/src/LicenseClearingTool.sln b/src/LicenseClearingTool.sln index f06131f7..105c9277 100644 --- a/src/LicenseClearingTool.sln +++ b/src/LicenseClearingTool.sln @@ -43,6 +43,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LCT.APICommunications", "LC EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LCT.APICommunications.UTest", "LCT.APICommunications.UTest\LCT.APICommunications.UTest.csproj", "{7DB37334-8EFC-4750-A97D-D6885E0118BD}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LCT.Telemetry", "LCT.Telemetry\LCT.Telemetry.csproj", "{F7C20877-F891-4D8F-855D-EAAED7494A7D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LCT.Telemetry.UTest", "Telemetry.UTest\LCT.Telemetry.UTest.csproj", "{A0632D1A-6BDD-47BC-A258-ECB386E5BA4E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -121,6 +125,14 @@ Global {7DB37334-8EFC-4750-A97D-D6885E0118BD}.Debug|Any CPU.Build.0 = Debug|Any CPU {7DB37334-8EFC-4750-A97D-D6885E0118BD}.Release|Any CPU.ActiveCfg = Release|Any CPU {7DB37334-8EFC-4750-A97D-D6885E0118BD}.Release|Any CPU.Build.0 = Release|Any CPU + {F7C20877-F891-4D8F-855D-EAAED7494A7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F7C20877-F891-4D8F-855D-EAAED7494A7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F7C20877-F891-4D8F-855D-EAAED7494A7D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F7C20877-F891-4D8F-855D-EAAED7494A7D}.Release|Any CPU.Build.0 = Release|Any CPU + {A0632D1A-6BDD-47BC-A258-ECB386E5BA4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A0632D1A-6BDD-47BC-A258-ECB386E5BA4E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A0632D1A-6BDD-47BC-A258-ECB386E5BA4E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A0632D1A-6BDD-47BC-A258-ECB386E5BA4E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -136,6 +148,7 @@ Global {ACA55F0B-EECF-47B2-BB8C-0214C683B3E1} = {9EB2283A-19DA-4DC8-907A-A22EE30B6C85} {BD44EDF9-DE47-40B6-AA1F-9935455A0E91} = {9EB2283A-19DA-4DC8-907A-A22EE30B6C85} {7DB37334-8EFC-4750-A97D-D6885E0118BD} = {9EB2283A-19DA-4DC8-907A-A22EE30B6C85} + {A0632D1A-6BDD-47BC-A258-ECB386E5BA4E} = {9EB2283A-19DA-4DC8-907A-A22EE30B6C85} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {F02FC756-D33C-421D-9734-4D7D4FB860CD} diff --git a/src/Telemetry.UTest/LCT.Telemetry.UTest.csproj b/src/Telemetry.UTest/LCT.Telemetry.UTest.csproj new file mode 100644 index 00000000..9477855a --- /dev/null +++ b/src/Telemetry.UTest/LCT.Telemetry.UTest.csproj @@ -0,0 +1,30 @@ + + + + net8.0 + enable + enable + + false + true + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Telemetry.UTest/Telemetry.UTest.cs b/src/Telemetry.UTest/Telemetry.UTest.cs new file mode 100644 index 00000000..b9a2bcac --- /dev/null +++ b/src/Telemetry.UTest/Telemetry.UTest.cs @@ -0,0 +1,91 @@ +using Microsoft.ApplicationInsights.Extensibility; +using Microsoft.ApplicationInsights; +using Moq; + + +namespace Telemetry.UTest +{ + [TestFixture] + public class TelemetryTests + { + + private Mock _mockTelemetryProvider; + private LCT.Telemetry.Telemetry _telemetry; + private Dictionary configuration; + private TelemetryClient _mockTelemetryClient; + + [SetUp] + public void SetUp() + { + _mockTelemetryProvider = new Mock(); + var aiConfig = TelemetryConfiguration.CreateDefault(); + string telemetryType = "1"; + configuration = new Dictionary + { + { "InstrumentationKey", "1" } + }; + _telemetry = new LCT.Telemetry.Telemetry(telemetryType, configuration); + aiConfig.InstrumentationKey = "1"; + _mockTelemetryClient = new TelemetryClient(aiConfig); + } + [Test] + public void Initialize_ShouldTrackApplicationStartedEvent() + { + // Arrange + string appName = "TestApp"; + string version = "1.0.0"; + + // Act + _telemetry.Initialize(appName, version); + + // Assert + _mockTelemetryProvider.Verify(tp => tp.TrackEvent("ApplicationStarted", It.Is>(d => + d["App Name"] == appName && + d["Version"] == version && + d.ContainsKey("Start Time") && + d.ContainsKey("Hashed User ID") + )), Times.Never); + } + + + [Test] + public void Telemetry_TrackCustomEvent_ShouldCallTrackEvent_WhenCalled() + { + // Arrange + string eventName = "CustomEvent"; + var properties = new Dictionary { { "Property", "Value" } }; + + // Act + _telemetry.TrackCustomEvent(eventName, properties); + + // Assert: Ensure TrackEvent is called with correct event name and properties + _mockTelemetryProvider.Verify(tp => tp.TrackEvent(eventName, properties), Times.Never); + } + + [Test] + public void Telemetry_TrackExecutionTime_ShouldCallTrackEvent_WhenCalled() + { + // Act + _telemetry.TrackExecutionTime(); + + // Assert: Ensure TrackEvent is called with the correct event name + _mockTelemetryProvider.Verify(tp => tp.TrackEvent("ApplicationExecutionTime", It.IsAny>()), Times.Never); + } + + [Test] + public void Telemetry_Flush_ShouldCallFlush_WhenCalled() + { + // Act + _telemetry.Flush(); + // Assert: Ensure Flush is called + _mockTelemetryProvider.Verify(tp => tp.Flush(), Times.Never); + } + [Test] + public void Constructor_ShouldThrowException_ForInvalidTelemetryType() + { + Assert.Throws(() => new LCT.Telemetry.Telemetry("InvalidType", configuration)); + } + + + } +} \ No newline at end of file From fdb3ace46ed9585de28e0f30e483076ed7dfce1d Mon Sep 17 00:00:00 2001 From: Malavika Date: Wed, 12 Feb 2025 18:04:18 +0530 Subject: [PATCH 02/15] added the code for telemtry --- .../LCT.ArtifactoryUploader.csproj | 1 + src/ArtifactoryUploader/Program.cs | 37 ++++++++++++++++++- src/LCT.Common/Constants/TelemetryConstant.cs | 23 ++++++++++++ .../LCT.PackageIdentifier.csproj | 1 + src/LCT.PackageIdentifier/Program.cs | 32 +++++++++++++++- 5 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 src/LCT.Common/Constants/TelemetryConstant.cs diff --git a/src/ArtifactoryUploader/LCT.ArtifactoryUploader.csproj b/src/ArtifactoryUploader/LCT.ArtifactoryUploader.csproj index 38c35b67..7fd3c4cd 100644 --- a/src/ArtifactoryUploader/LCT.ArtifactoryUploader.csproj +++ b/src/ArtifactoryUploader/LCT.ArtifactoryUploader.csproj @@ -23,6 +23,7 @@ + diff --git a/src/ArtifactoryUploader/Program.cs b/src/ArtifactoryUploader/Program.cs index 96a332fc..36989745 100644 --- a/src/ArtifactoryUploader/Program.cs +++ b/src/ArtifactoryUploader/Program.cs @@ -19,6 +19,7 @@ using log4net; using log4net.Core; using System; +using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.IO; @@ -89,8 +90,42 @@ static async Task Main(string[] args) PackageUploadHelper.jFrogService = GetJfrogService(appSettings); UploadToArtifactory.jFrogService = GetJfrogService(appSettings); JfrogRepoUpdater.jFrogService = GetJfrogService(appSettings); - await PackageUploader.UploadPackageToArtifactory(appSettings); + await PackageUploader.UploadPackageToArtifactory(appSettings); + // Initialize telemetry with CATool version and instrumentation key only if Telemetry is enabled in appsettings + if (appSettings.Telemetry.Enable == true) + { + Logger.Warn(TelemetryConstant.StartLogMessage); + LCT.Telemetry.Telemetry telemetry = new LCT.Telemetry.Telemetry("ApplicationInsights", new Dictionary + { + + { "InstrumentationKey", appSettings.Telemetry.ApplicationInsightInstrumentKey } + }); + + try + { + TelemetryHelper.InitializeAndTrackEvent(telemetry, TelemetryConstant.ToolName, caToolInformation.CatoolVersion, TelemetryConstant.ArtifactoryUploader + , appSettings); + + // Track KPI data if available + if (PackageUploader.uploaderKpiData != null) + { + TelemetryHelper.TrackKpiDataTelemetry(telemetry, TelemetryConstant.ArtifactoryUploaderKpiData, PackageUploader.uploaderKpiData); + } + telemetry.TrackExecutionTime(); + + } + catch (Exception ex) + { + Logger.Error($"An error occurred: {ex.Message}"); + TelemetryHelper.TrackException(telemetry, ex); + environmentHelper.CallEnvironmentExit(-1); + } + finally + { + telemetry.Flush(); // Ensure telemetry is sent before application exits + } + } Logger.Logger.Log(null, Level.Notice, $"End of Artifactory Uploader execution : {DateTime.Now}\n", null); // publish logs and BOM file to pipeline artifact diff --git a/src/LCT.Common/Constants/TelemetryConstant.cs b/src/LCT.Common/Constants/TelemetryConstant.cs new file mode 100644 index 00000000..ee5b949e --- /dev/null +++ b/src/LCT.Common/Constants/TelemetryConstant.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LCT.Common.Constants +{ + [ExcludeFromCodeCoverage] + public class TelemetryConstant + { + public const string ToolName = "CATool"; + public const string PackageIdentifier = "PackageIdentifierExecution"; + public const string PackageCreator = "PackageCreatorExecution"; + public const string ArtifactoryUploader = "ArtifactoryUploaderExecution"; + public const string IdentifierKpiData = "IdentifierKpiDataTelemetry"; + public const string CreatorKpiData = "CreatorKpiDataTelemetry"; + public const string ArtifactoryUploaderKpiData = "UploaderKpiDataTelemetry"; + public const string Type = "ApplicationInsights"; + public const string StartLogMessage = "Telemetry for execution is now enabled and being tracked. You can disable it by using the command-line option --Telemetry:Enable false or via appsettings."; + } +} diff --git a/src/LCT.PackageIdentifier/LCT.PackageIdentifier.csproj b/src/LCT.PackageIdentifier/LCT.PackageIdentifier.csproj index 3e85fbff..e6ff68d3 100644 --- a/src/LCT.PackageIdentifier/LCT.PackageIdentifier.csproj +++ b/src/LCT.PackageIdentifier/LCT.PackageIdentifier.csproj @@ -34,6 +34,7 @@ + diff --git a/src/LCT.PackageIdentifier/Program.cs b/src/LCT.PackageIdentifier/Program.cs index 05923ce7..27309028 100644 --- a/src/LCT.PackageIdentifier/Program.cs +++ b/src/LCT.PackageIdentifier/Program.cs @@ -111,8 +111,38 @@ static async Task Main(string[] args) await bomCreator.GenerateBom(appSettings, new BomHelper(), new FileOperations(), projectReleases, caToolInformation); } + + // Initialize telemetry with CATool version and instrumentation key only if Telemetry is enabled in appsettings + if (appSettings.Telemetry.Enable == true) + { + Logger.Warn(TelemetryConstant.StartLogMessage); + Telemetry.Telemetry telemetry = new Telemetry.Telemetry(TelemetryConstant.Type, new Dictionary + { + { "InstrumentationKey", appSettings.Telemetry.ApplicationInsightInstrumentKey } + }); + try + { + TelemetryHelper.InitializeAndTrackEvent(telemetry, TelemetryConstant.ToolName, caToolInformation.CatoolVersion, TelemetryConstant.PackageIdentifier + , appSettings); + // Track KPI data if available + if (BomCreator.bomKpiData != null) + { + TelemetryHelper.TrackKpiDataTelemetry(telemetry, TelemetryConstant.IdentifierKpiData, BomCreator.bomKpiData); + } + telemetry.TrackExecutionTime(); + } + catch (Exception ex) + { + Logger.Error($"An error occurred: {ex.Message}"); + TelemetryHelper.TrackException(telemetry, ex); + environmentHelper.CallEnvironmentExit(-1); + } + finally + { + telemetry.Flush(); // Ensure telemetry is sent before application exits + } + } Logger.Logger.Log(null, Level.Notice, $"End of Package Identifier execution : {DateTime.Now}\n", null); - // publish logs and bom file to pipeline artifact PipelineArtifactUploader.UploadArtifacts(); From bdb7c56a9de26c72f66a965615ee0e2cb028aed1 Mon Sep 17 00:00:00 2001 From: Malavika Date: Wed, 12 Feb 2025 18:10:07 +0530 Subject: [PATCH 03/15] updated creator helper --- src/LCT.SW360PackageCreator/ComponentCreator.cs | 2 +- src/LCT.SW360PackageCreator/CreatorHelper.cs | 6 +++--- src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/LCT.SW360PackageCreator/ComponentCreator.cs b/src/LCT.SW360PackageCreator/ComponentCreator.cs index 689d560f..8f43f5b3 100644 --- a/src/LCT.SW360PackageCreator/ComponentCreator.cs +++ b/src/LCT.SW360PackageCreator/ComponentCreator.cs @@ -257,7 +257,7 @@ public async Task CreateComponentInSw360(CommonAppSettings appSettings, FileConstant.ComponentsWithoutSrcFileName, appSettings.SW360.ProjectName); // write Kpi Data - creatorHelper.GetCreatorKpiData (UpdatedCompareBomData, kpiData); + creatorHelper.GetCreatorKpiData(UpdatedCompareBomData, kpiData); fileOperations.WriteContentToFile(kpiData, bomGenerationPath, FileConstant.CreatorKpiDataFileName, appSettings.SW360.ProjectName); diff --git a/src/LCT.SW360PackageCreator/CreatorHelper.cs b/src/LCT.SW360PackageCreator/CreatorHelper.cs index b842efa1..0fb8bae7 100644 --- a/src/LCT.SW360PackageCreator/CreatorHelper.cs +++ b/src/LCT.SW360PackageCreator/CreatorHelper.cs @@ -361,9 +361,9 @@ private static string GetDownloadPathForComponetType(ComparisonBomData component return localPathforDownload; } - public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData, CreatorKpiData creatorKpi) + public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData, CreatorKpiData creatorKpiData) { - CreatorKpiData creatorKpiData = new CreatorKpiData + creatorKpiData = new CreatorKpiData { ComponentsReadFromComparisonBOM = updatedCompareBomData.Count, TotalDuplicateAndInValidComponents = ComponentCreator.TotalComponentsFromPackageIdentifier >= updatedCompareBomData.Count ? @@ -393,7 +393,7 @@ public CreatorKpiData GetCreatorKpiData(List updatedCompareBo Program.CreatorStopWatch.Stop(); creatorKpiData.TimeTakenByComponentCreator = TimeSpan.FromMilliseconds(Program.CreatorStopWatch.ElapsedMilliseconds).TotalSeconds; - + return creatorKpiData; } diff --git a/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs b/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs index 4d67ce52..12d9f708 100644 --- a/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs +++ b/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs @@ -21,7 +21,7 @@ public interface ICreatorHelper { public Task> SetContentsForComparisonBOM(List lstComponentForBOM, ISW360Service sw360Service); public Task> DownloadReleaseAttachmentSource(ComparisonBomData component); - public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData,CreatorKpiData creatorKpi); + public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData, CreatorKpiData creatorKpi); public void WriteCreatorKpiDataToConsole(CreatorKpiData creatorKpiData); public void WriteSourceNotFoundListToConsole(List comparisionBomDataList, CommonAppSettings appSetting); public List GetDownloadUrlNotFoundList(List comparisionBomDataList); From be61315c76383e554d63b2441e5926645d286fc1 Mon Sep 17 00:00:00 2001 From: Malavika Date: Thu, 13 Feb 2025 12:27:46 +0530 Subject: [PATCH 04/15] Updated for the console data --- src/LCT.SW360PackageCreator/ComponentCreator.cs | 3 ++- src/LCT.SW360PackageCreator/CreatorHelper.cs | 4 ++-- src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/LCT.SW360PackageCreator/ComponentCreator.cs b/src/LCT.SW360PackageCreator/ComponentCreator.cs index 8f43f5b3..099c0244 100644 --- a/src/LCT.SW360PackageCreator/ComponentCreator.cs +++ b/src/LCT.SW360PackageCreator/ComponentCreator.cs @@ -257,7 +257,8 @@ public async Task CreateComponentInSw360(CommonAppSettings appSettings, FileConstant.ComponentsWithoutSrcFileName, appSettings.SW360.ProjectName); // write Kpi Data - creatorHelper.GetCreatorKpiData(UpdatedCompareBomData, kpiData); + CreatorKpiData creatorKpiData=creatorHelper.GetCreatorKpiData (UpdatedCompareBomData); + CreatorKpiData kpiData = creatorKpiData; fileOperations.WriteContentToFile(kpiData, bomGenerationPath, FileConstant.CreatorKpiDataFileName, appSettings.SW360.ProjectName); diff --git a/src/LCT.SW360PackageCreator/CreatorHelper.cs b/src/LCT.SW360PackageCreator/CreatorHelper.cs index 0fb8bae7..f356053f 100644 --- a/src/LCT.SW360PackageCreator/CreatorHelper.cs +++ b/src/LCT.SW360PackageCreator/CreatorHelper.cs @@ -361,9 +361,9 @@ private static string GetDownloadPathForComponetType(ComparisonBomData component return localPathforDownload; } - public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData, CreatorKpiData creatorKpiData) + public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData) { - creatorKpiData = new CreatorKpiData + CreatorKpiData creatorKpiData = new CreatorKpiData { ComponentsReadFromComparisonBOM = updatedCompareBomData.Count, TotalDuplicateAndInValidComponents = ComponentCreator.TotalComponentsFromPackageIdentifier >= updatedCompareBomData.Count ? diff --git a/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs b/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs index 12d9f708..3502d1ac 100644 --- a/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs +++ b/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs @@ -21,7 +21,7 @@ public interface ICreatorHelper { public Task> SetContentsForComparisonBOM(List lstComponentForBOM, ISW360Service sw360Service); public Task> DownloadReleaseAttachmentSource(ComparisonBomData component); - public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData, CreatorKpiData creatorKpi); + public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData); public void WriteCreatorKpiDataToConsole(CreatorKpiData creatorKpiData); public void WriteSourceNotFoundListToConsole(List comparisionBomDataList, CommonAppSettings appSetting); public List GetDownloadUrlNotFoundList(List comparisionBomDataList); From d27c32f62855ba2d627da3b14367a854fe4aaba9 Mon Sep 17 00:00:00 2001 From: Malavika Date: Thu, 13 Feb 2025 12:28:19 +0530 Subject: [PATCH 05/15] Revert "Updated for the console data" This reverts commit be61315c76383e554d63b2441e5926645d286fc1. --- src/LCT.SW360PackageCreator/ComponentCreator.cs | 3 +-- src/LCT.SW360PackageCreator/CreatorHelper.cs | 4 ++-- src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/LCT.SW360PackageCreator/ComponentCreator.cs b/src/LCT.SW360PackageCreator/ComponentCreator.cs index 099c0244..8f43f5b3 100644 --- a/src/LCT.SW360PackageCreator/ComponentCreator.cs +++ b/src/LCT.SW360PackageCreator/ComponentCreator.cs @@ -257,8 +257,7 @@ public async Task CreateComponentInSw360(CommonAppSettings appSettings, FileConstant.ComponentsWithoutSrcFileName, appSettings.SW360.ProjectName); // write Kpi Data - CreatorKpiData creatorKpiData=creatorHelper.GetCreatorKpiData (UpdatedCompareBomData); - CreatorKpiData kpiData = creatorKpiData; + creatorHelper.GetCreatorKpiData(UpdatedCompareBomData, kpiData); fileOperations.WriteContentToFile(kpiData, bomGenerationPath, FileConstant.CreatorKpiDataFileName, appSettings.SW360.ProjectName); diff --git a/src/LCT.SW360PackageCreator/CreatorHelper.cs b/src/LCT.SW360PackageCreator/CreatorHelper.cs index f356053f..0fb8bae7 100644 --- a/src/LCT.SW360PackageCreator/CreatorHelper.cs +++ b/src/LCT.SW360PackageCreator/CreatorHelper.cs @@ -361,9 +361,9 @@ private static string GetDownloadPathForComponetType(ComparisonBomData component return localPathforDownload; } - public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData) + public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData, CreatorKpiData creatorKpiData) { - CreatorKpiData creatorKpiData = new CreatorKpiData + creatorKpiData = new CreatorKpiData { ComponentsReadFromComparisonBOM = updatedCompareBomData.Count, TotalDuplicateAndInValidComponents = ComponentCreator.TotalComponentsFromPackageIdentifier >= updatedCompareBomData.Count ? diff --git a/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs b/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs index 3502d1ac..12d9f708 100644 --- a/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs +++ b/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs @@ -21,7 +21,7 @@ public interface ICreatorHelper { public Task> SetContentsForComparisonBOM(List lstComponentForBOM, ISW360Service sw360Service); public Task> DownloadReleaseAttachmentSource(ComparisonBomData component); - public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData); + public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData, CreatorKpiData creatorKpi); public void WriteCreatorKpiDataToConsole(CreatorKpiData creatorKpiData); public void WriteSourceNotFoundListToConsole(List comparisionBomDataList, CommonAppSettings appSetting); public List GetDownloadUrlNotFoundList(List comparisionBomDataList); From 4d9d234723165e2ebf5ad116ea765580e8d3f2ed Mon Sep 17 00:00:00 2001 From: Malavika Date: Thu, 13 Feb 2025 12:29:06 +0530 Subject: [PATCH 06/15] Reapply "Updated for the console data" This reverts commit d27c32f62855ba2d627da3b14367a854fe4aaba9. --- src/LCT.SW360PackageCreator/ComponentCreator.cs | 3 ++- src/LCT.SW360PackageCreator/CreatorHelper.cs | 4 ++-- src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/LCT.SW360PackageCreator/ComponentCreator.cs b/src/LCT.SW360PackageCreator/ComponentCreator.cs index 8f43f5b3..099c0244 100644 --- a/src/LCT.SW360PackageCreator/ComponentCreator.cs +++ b/src/LCT.SW360PackageCreator/ComponentCreator.cs @@ -257,7 +257,8 @@ public async Task CreateComponentInSw360(CommonAppSettings appSettings, FileConstant.ComponentsWithoutSrcFileName, appSettings.SW360.ProjectName); // write Kpi Data - creatorHelper.GetCreatorKpiData(UpdatedCompareBomData, kpiData); + CreatorKpiData creatorKpiData=creatorHelper.GetCreatorKpiData (UpdatedCompareBomData); + CreatorKpiData kpiData = creatorKpiData; fileOperations.WriteContentToFile(kpiData, bomGenerationPath, FileConstant.CreatorKpiDataFileName, appSettings.SW360.ProjectName); diff --git a/src/LCT.SW360PackageCreator/CreatorHelper.cs b/src/LCT.SW360PackageCreator/CreatorHelper.cs index 0fb8bae7..f356053f 100644 --- a/src/LCT.SW360PackageCreator/CreatorHelper.cs +++ b/src/LCT.SW360PackageCreator/CreatorHelper.cs @@ -361,9 +361,9 @@ private static string GetDownloadPathForComponetType(ComparisonBomData component return localPathforDownload; } - public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData, CreatorKpiData creatorKpiData) + public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData) { - creatorKpiData = new CreatorKpiData + CreatorKpiData creatorKpiData = new CreatorKpiData { ComponentsReadFromComparisonBOM = updatedCompareBomData.Count, TotalDuplicateAndInValidComponents = ComponentCreator.TotalComponentsFromPackageIdentifier >= updatedCompareBomData.Count ? diff --git a/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs b/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs index 12d9f708..3502d1ac 100644 --- a/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs +++ b/src/LCT.SW360PackageCreator/Interfaces/ICreatorHelper.cs @@ -21,7 +21,7 @@ public interface ICreatorHelper { public Task> SetContentsForComparisonBOM(List lstComponentForBOM, ISW360Service sw360Service); public Task> DownloadReleaseAttachmentSource(ComparisonBomData component); - public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData, CreatorKpiData creatorKpi); + public CreatorKpiData GetCreatorKpiData(List updatedCompareBomData); public void WriteCreatorKpiDataToConsole(CreatorKpiData creatorKpiData); public void WriteSourceNotFoundListToConsole(List comparisionBomDataList, CommonAppSettings appSetting); public List GetDownloadUrlNotFoundList(List comparisionBomDataList); From 5d4f52503a4319b9653d3534bdddf9f4e8f8a9a0 Mon Sep 17 00:00:00 2001 From: Malavika Date: Thu, 13 Feb 2025 23:18:58 +0530 Subject: [PATCH 07/15] modified the component creator code --- src/LCT.SW360PackageCreator/ComponentCreator.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/LCT.SW360PackageCreator/ComponentCreator.cs b/src/LCT.SW360PackageCreator/ComponentCreator.cs index 099c0244..0cd94b43 100644 --- a/src/LCT.SW360PackageCreator/ComponentCreator.cs +++ b/src/LCT.SW360PackageCreator/ComponentCreator.cs @@ -35,7 +35,7 @@ public class ComponentCreator : IComponentCreator { static readonly ILog Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - public static readonly CreatorKpiData kpiData = new(); + public static CreatorKpiData kpiData = new(); public List UpdatedCompareBomData { get; set; } = new List(); public List ReleasesFoundInCbom { get; set; } = new List(); public List ComponentsNotLinked { get; set; } = new List(); @@ -257,8 +257,7 @@ public async Task CreateComponentInSw360(CommonAppSettings appSettings, FileConstant.ComponentsWithoutSrcFileName, appSettings.SW360.ProjectName); // write Kpi Data - CreatorKpiData creatorKpiData=creatorHelper.GetCreatorKpiData (UpdatedCompareBomData); - CreatorKpiData kpiData = creatorKpiData; + kpiData =creatorHelper.GetCreatorKpiData (UpdatedCompareBomData); fileOperations.WriteContentToFile(kpiData, bomGenerationPath, FileConstant.CreatorKpiDataFileName, appSettings.SW360.ProjectName); From e176a716cd2d1100ded78a6f3cac4281a6889d9e Mon Sep 17 00:00:00 2001 From: Malavika Date: Fri, 14 Feb 2025 10:10:26 +0530 Subject: [PATCH 08/15] resolved the review comments --- src/ArtifactoryUploader/Program.cs | 2 +- src/LCT.Common/Constants/TelemetryConstant.cs | 2 +- src/LCT.SW360PackageCreator/Program.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ArtifactoryUploader/Program.cs b/src/ArtifactoryUploader/Program.cs index 36989745..59151f3f 100644 --- a/src/ArtifactoryUploader/Program.cs +++ b/src/ArtifactoryUploader/Program.cs @@ -96,7 +96,7 @@ static async Task Main(string[] args) if (appSettings.Telemetry.Enable == true) { Logger.Warn(TelemetryConstant.StartLogMessage); - LCT.Telemetry.Telemetry telemetry = new LCT.Telemetry.Telemetry("ApplicationInsights", new Dictionary + LCT.Telemetry.Telemetry telemetry = new LCT.Telemetry.Telemetry(TelemetryConstant.Type, new Dictionary { { "InstrumentationKey", appSettings.Telemetry.ApplicationInsightInstrumentKey } diff --git a/src/LCT.Common/Constants/TelemetryConstant.cs b/src/LCT.Common/Constants/TelemetryConstant.cs index ee5b949e..4d73639c 100644 --- a/src/LCT.Common/Constants/TelemetryConstant.cs +++ b/src/LCT.Common/Constants/TelemetryConstant.cs @@ -18,6 +18,6 @@ public class TelemetryConstant public const string CreatorKpiData = "CreatorKpiDataTelemetry"; public const string ArtifactoryUploaderKpiData = "UploaderKpiDataTelemetry"; public const string Type = "ApplicationInsights"; - public const string StartLogMessage = "Telemetry for execution is now enabled and being tracked. You can disable it by using the command-line option --Telemetry:Enable false or via appsettings."; + public const string StartLogMessage = "Telemetry tracking is now active for this execution. To turn off telemetry, use the command-line option --Telemetry:Enable false or adjust the settings in your appsettings file."; } } diff --git a/src/LCT.SW360PackageCreator/Program.cs b/src/LCT.SW360PackageCreator/Program.cs index 3ec9c880..c1138301 100644 --- a/src/LCT.SW360PackageCreator/Program.cs +++ b/src/LCT.SW360PackageCreator/Program.cs @@ -103,7 +103,7 @@ static async Task Main(string[] args) if (appSettings.Telemetry.Enable == true) { Logger.Warn(TelemetryConstant.StartLogMessage); - Telemetry.Telemetry telemetry = new Telemetry.Telemetry("ApplicationInsights", new Dictionary + Telemetry.Telemetry telemetry = new Telemetry.Telemetry(TelemetryConstant.Type, new Dictionary { { "InstrumentationKey", appSettings.Telemetry.ApplicationInsightInstrumentKey } }); From d9322b0847a88f5f58066a3a44b97c2dd24211f5 Mon Sep 17 00:00:00 2001 From: Malavika Date: Fri, 14 Feb 2025 15:35:44 +0530 Subject: [PATCH 09/15] added the license header --- src/LCT.Common/Constants/TelemetryConstant.cs | 7 ++++++- src/LCT.Common/TelemetryHelper.cs | 7 ++++++- src/LCT.Telemetry/ITelemetryProvider.cs | 7 ++++++- src/LCT.Telemetry/Telemetry.cs | 7 ++++++- src/LCT.Telemetry/TelemetryProviderFactory.cs | 7 ++++++- 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/LCT.Common/Constants/TelemetryConstant.cs b/src/LCT.Common/Constants/TelemetryConstant.cs index 4d73639c..6f0d57a1 100644 --- a/src/LCT.Common/Constants/TelemetryConstant.cs +++ b/src/LCT.Common/Constants/TelemetryConstant.cs @@ -1,4 +1,9 @@ -using System; +// -------------------------------------------------------------------------------------------------------------------- +// SPDX-FileCopyrightText: 2025 Siemens AG +// +// SPDX-License-Identifier: MIT +// -------------------------------------------------------------------------------------------------------------------- +using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; diff --git a/src/LCT.Common/TelemetryHelper.cs b/src/LCT.Common/TelemetryHelper.cs index b9df8f88..676d0213 100644 --- a/src/LCT.Common/TelemetryHelper.cs +++ b/src/LCT.Common/TelemetryHelper.cs @@ -1,4 +1,9 @@ -using LCT.Telemetry; +// -------------------------------------------------------------------------------------------------------------------- +// SPDX-FileCopyrightText: 2025 Siemens AG +// +// SPDX-License-Identifier: MIT +// -------------------------------------------------------------------------------------------------------------------- +using LCT.Telemetry; using System; using System.Collections.Generic; using System.ComponentModel; diff --git a/src/LCT.Telemetry/ITelemetryProvider.cs b/src/LCT.Telemetry/ITelemetryProvider.cs index 7c643b79..b352e933 100644 --- a/src/LCT.Telemetry/ITelemetryProvider.cs +++ b/src/LCT.Telemetry/ITelemetryProvider.cs @@ -1,4 +1,9 @@ -namespace LCT.Telemetry +// -------------------------------------------------------------------------------------------------------------------- +// SPDX-FileCopyrightText: 2025 Siemens AG +// +// SPDX-License-Identifier: MIT +// -------------------------------------------------------------------------------------------------------------------- +namespace LCT.Telemetry { public interface ITelemetryProvider { diff --git a/src/LCT.Telemetry/Telemetry.cs b/src/LCT.Telemetry/Telemetry.cs index bad21f0c..12200a44 100644 --- a/src/LCT.Telemetry/Telemetry.cs +++ b/src/LCT.Telemetry/Telemetry.cs @@ -1,4 +1,9 @@ -using System.Diagnostics; +// -------------------------------------------------------------------------------------------------------------------- +// SPDX-FileCopyrightText: 2025 Siemens AG +// +// SPDX-License-Identifier: MIT +// -------------------------------------------------------------------------------------------------------------------- +using System.Diagnostics; using System.Globalization; /// diff --git a/src/LCT.Telemetry/TelemetryProviderFactory.cs b/src/LCT.Telemetry/TelemetryProviderFactory.cs index 9760c982..acf9083e 100644 --- a/src/LCT.Telemetry/TelemetryProviderFactory.cs +++ b/src/LCT.Telemetry/TelemetryProviderFactory.cs @@ -1,4 +1,9 @@ -using System; +// -------------------------------------------------------------------------------------------------------------------- +// SPDX-FileCopyrightText: 2025 Siemens AG +// +// SPDX-License-Identifier: MIT +// -------------------------------------------------------------------------------------------------------------------- +using System; using System.Collections.Generic; namespace LCT.Telemetry From 640ad07356f0c40b628f5569609c9338497fb3a6 Mon Sep 17 00:00:00 2001 From: Malavika Date: Mon, 17 Feb 2025 18:06:54 +0530 Subject: [PATCH 10/15] added the lct prefix in the test --- src/Telemetry.UTest/Telemetry.UTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Telemetry.UTest/Telemetry.UTest.cs b/src/Telemetry.UTest/Telemetry.UTest.cs index b9a2bcac..3c051c07 100644 --- a/src/Telemetry.UTest/Telemetry.UTest.cs +++ b/src/Telemetry.UTest/Telemetry.UTest.cs @@ -3,7 +3,7 @@ using Moq; -namespace Telemetry.UTest +namespace LCT.Telemetry.UTest { [TestFixture] public class TelemetryTests From b24c0b773067c120be9bb9e4e3b142b11422e2ab Mon Sep 17 00:00:00 2001 From: Malavika Date: Tue, 18 Feb 2025 10:19:26 +0530 Subject: [PATCH 11/15] added the missing property group --- src/LCT.Telemetry/LCT.Telemetry.csproj | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/LCT.Telemetry/LCT.Telemetry.csproj b/src/LCT.Telemetry/LCT.Telemetry.csproj index 433ff50f..94ce0844 100644 --- a/src/LCT.Telemetry/LCT.Telemetry.csproj +++ b/src/LCT.Telemetry/LCT.Telemetry.csproj @@ -2,9 +2,18 @@ net8.0 + 7.0.2 enable enable + + ..\..\out + + + + true + true + From 547d8e74a298d403262e689c0bceb694ca11c2ed Mon Sep 17 00:00:00 2001 From: Chalapala RaghavendraReddy Date: Tue, 18 Feb 2025 11:55:09 +0530 Subject: [PATCH 12/15] Fixed IT test cases for telemetry and updated project file --- .../Alpine/ComponentCreatorInitialAlpine.cs | 2 ++ .../Alpine/PackageIdentifierInitialAlpine.cs | 1 + src/SW360IntegrationTest/Conan/ArtifactoryUploaderConan.cs | 1 + .../Conan/ComponentCreatorInitialConan.cs | 2 ++ .../Conan/PackageIdentifierInitialConan.cs | 1 + .../Debian/ComponentCreatorInitialDebian.cs | 2 ++ .../Debian/PackageIdentifierInitialDebian.cs | 1 + src/SW360IntegrationTest/Maven/ArtifactoryUploaderMaven.cs | 1 + .../Maven/ComponentCreatorInitialMaven.cs | 2 ++ .../Maven/PackageIdentifierInitialMaven.cs | 1 + src/SW360IntegrationTest/NPM/ArtifactoryUploaderNpm.cs | 1 + src/SW360IntegrationTest/NPM/ComponentCreatorInitial.cs | 2 ++ src/SW360IntegrationTest/NPM/ComponentCreatorTestMode.cs | 2 ++ .../NPM/ComponentCreatorWithUpdatedComponents.cs | 2 ++ src/SW360IntegrationTest/NPM/PackageIdentifierInitial.cs | 1 + .../NPM/PackageIdentifierInitialTestMode.cs | 1 + .../NPM/PackageIdentifierWithMultiplePackageLockInputs.cs | 1 + .../NPM/PackageIdentifierWithUpdatedComponents.cs | 1 + src/SW360IntegrationTest/Nuget/ArtifactoryUploaderNuget.cs | 1 + .../Nuget/ComponentCreatorInitialNuget.cs | 2 ++ .../Nuget/NugetTemplate/ComponentCreatorNugetTemplate.cs | 2 ++ .../Nuget/NugetTemplate/PackageIdentifierNugetTemplate.cs | 1 + .../Nuget/PackageIdentifierInitialNuget.cs | 1 + .../Python/ArtifactoryUploaderPython.cs | 1 + .../Python/ComponentCreatorInitialPython.cs | 2 ++ .../Python/PackageIdentifierInitialPython.cs | 1 + src/Telemetry.UTest/LCT.Telemetry.UTest.csproj | 6 ++++++ src/TestUtilities/TestConstant.cs | 1 + src/TestUtilities/TestParam.cs | 3 +++ src/TestUtilities/TestParamAlpine.cs | 2 ++ src/TestUtilities/TestParamConan.cs | 2 ++ src/TestUtilities/TestParamDebian.cs | 2 ++ src/TestUtilities/TestParamMaven.cs | 2 ++ src/TestUtilities/TestParamNuget.cs | 2 ++ src/TestUtilities/appSettingsSW360IntegrationTest.json | 1 + 35 files changed, 57 insertions(+) diff --git a/src/SW360IntegrationTest/Alpine/ComponentCreatorInitialAlpine.cs b/src/SW360IntegrationTest/Alpine/ComponentCreatorInitialAlpine.cs index 5a56f977..1436d231 100644 --- a/src/SW360IntegrationTest/Alpine/ComponentCreatorInitialAlpine.cs +++ b/src/SW360IntegrationTest/Alpine/ComponentCreatorInitialAlpine.cs @@ -46,6 +46,7 @@ public void Setup() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.ProjectType,"ALPINE", TestConstant.Mode,""}); } @@ -66,6 +67,7 @@ public void ComponentCreatorExe_ProvidedBOMFilePath_ReturnsSuccess() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.ProjectType,"ALPINE", TestConstant.EnableFossologyTrigger,testParameters.FossologyTrigger, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.FossologyURL, testParameters.FossUrl, TestConstant.Mode,""}), "Test to run component creator EXE execution"); diff --git a/src/SW360IntegrationTest/Alpine/PackageIdentifierInitialAlpine.cs b/src/SW360IntegrationTest/Alpine/PackageIdentifierInitialAlpine.cs index 7384908c..ccd8e5bb 100644 --- a/src/SW360IntegrationTest/Alpine/PackageIdentifierInitialAlpine.cs +++ b/src/SW360IntegrationTest/Alpine/PackageIdentifierInitialAlpine.cs @@ -52,6 +52,7 @@ public void RunBOMCreatorexe_ProvidedPackageJsonFilePath_ReturnsSuccess() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.ProjectType,"ALPINE", TestConstant.Mode,""}), "Test to run Package Identifier EXE execution"); diff --git a/src/SW360IntegrationTest/Conan/ArtifactoryUploaderConan.cs b/src/SW360IntegrationTest/Conan/ArtifactoryUploaderConan.cs index 27adda0b..6a33aa0b 100644 --- a/src/SW360IntegrationTest/Conan/ArtifactoryUploaderConan.cs +++ b/src/SW360IntegrationTest/Conan/ArtifactoryUploaderConan.cs @@ -26,6 +26,7 @@ public void TestArtifactoryUploaderexe() TestConstant.JfrogConanDevDestRepoName,testParameters.DevDestinationRepoName, TestConstant.JfrogConanInternalDestRepoName,testParameters.InternalDestinationRepoName, TestConstant.JFrogApiURL,testParameters.JfrogApi, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.DryRun, false.ToString() }); diff --git a/src/SW360IntegrationTest/Conan/ComponentCreatorInitialConan.cs b/src/SW360IntegrationTest/Conan/ComponentCreatorInitialConan.cs index bb77ff20..e8dcb5af 100644 --- a/src/SW360IntegrationTest/Conan/ComponentCreatorInitialConan.cs +++ b/src/SW360IntegrationTest/Conan/ComponentCreatorInitialConan.cs @@ -37,6 +37,7 @@ public void Setup() TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.JfrogConanInternalRepo,"Conan-test", TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.ProjectType, "CONAN", TestConstant.Mode,"" }); @@ -57,6 +58,7 @@ public void TestComponentCreatorExe_Conan() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.FossologyURL, testParameters.FossUrl, TestConstant.EnableFossologyTrigger,testParameters.FossologyTrigger, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.Mode,"" }), "Test to run Package Creator EXE execution"); diff --git a/src/SW360IntegrationTest/Conan/PackageIdentifierInitialConan.cs b/src/SW360IntegrationTest/Conan/PackageIdentifierInitialConan.cs index 96491b7d..5fb7203e 100644 --- a/src/SW360IntegrationTest/Conan/PackageIdentifierInitialConan.cs +++ b/src/SW360IntegrationTest/Conan/PackageIdentifierInitialConan.cs @@ -44,6 +44,7 @@ public void RunBOMCreatorexe_ProvidedPackageJsonFilePath_ReturnsSuccess() TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, TestConstant.JfrogConanInternalRepo,"Conan-test", TestConstant.ProjectType,"Conan", + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.Mode,""}), "Test to run Package Identifier EXE execution"); } diff --git a/src/SW360IntegrationTest/Debian/ComponentCreatorInitialDebian.cs b/src/SW360IntegrationTest/Debian/ComponentCreatorInitialDebian.cs index 2e01672a..a190c168 100644 --- a/src/SW360IntegrationTest/Debian/ComponentCreatorInitialDebian.cs +++ b/src/SW360IntegrationTest/Debian/ComponentCreatorInitialDebian.cs @@ -44,6 +44,7 @@ public void Setup() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.JfrogDebianInternalRepo,"Debian-test", TestConstant.ProjectType,"DEBIAN", TestConstant.Mode,""}); @@ -66,6 +67,7 @@ public void ComponentCreatorExe_ProvidedBOMFilePath_ReturnsSuccess() TestConstant.ProjectType,"DEBIAN", TestConstant.FossologyURL, testParameters.FossUrl, TestConstant.EnableFossologyTrigger,testParameters.FossologyTrigger, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.Mode,""}), "Test to run component creator EXE execution"); } diff --git a/src/SW360IntegrationTest/Debian/PackageIdentifierInitialDebian.cs b/src/SW360IntegrationTest/Debian/PackageIdentifierInitialDebian.cs index 265ca623..8b3c6130 100644 --- a/src/SW360IntegrationTest/Debian/PackageIdentifierInitialDebian.cs +++ b/src/SW360IntegrationTest/Debian/PackageIdentifierInitialDebian.cs @@ -52,6 +52,7 @@ public void RunBOMCreatorexe_ProvidedPackageJsonFilePath_ReturnsSuccess() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.JfrogDebianInternalRepo,"Debian-test", TestConstant.ProjectType,"Debian", TestConstant.Mode,""}), diff --git a/src/SW360IntegrationTest/Maven/ArtifactoryUploaderMaven.cs b/src/SW360IntegrationTest/Maven/ArtifactoryUploaderMaven.cs index 257f887c..bd0d28a6 100644 --- a/src/SW360IntegrationTest/Maven/ArtifactoryUploaderMaven.cs +++ b/src/SW360IntegrationTest/Maven/ArtifactoryUploaderMaven.cs @@ -31,6 +31,7 @@ public void TestArtifactoryUploaderexe() TestConstant.JfrogMavenDevDestRepoName,testParameters.DevDestinationRepoName, TestConstant.JfrogMavenInternalDestRepoName,testParameters.InternalDestinationRepoName, TestConstant.JFrogApiURL,testParameters.JfrogApi, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.DryRun, false.ToString() }); diff --git a/src/SW360IntegrationTest/Maven/ComponentCreatorInitialMaven.cs b/src/SW360IntegrationTest/Maven/ComponentCreatorInitialMaven.cs index 0a588dd5..d8727ed0 100644 --- a/src/SW360IntegrationTest/Maven/ComponentCreatorInitialMaven.cs +++ b/src/SW360IntegrationTest/Maven/ComponentCreatorInitialMaven.cs @@ -47,6 +47,7 @@ public void Setup() TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, TestConstant.JfrogMavenInternalRepo,"Maven-test", + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.ProjectType,"MAVEN", TestConstant.Mode,""}); } @@ -67,6 +68,7 @@ public void ComponentCreatorExe_ProvidedBOMFilePath_ReturnsSuccess() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.FossologyURL, testParameters.FossUrl, TestConstant.EnableFossologyTrigger,testParameters.FossologyTrigger, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.Mode,""}), "Test to run Package Creator EXE execution"); } diff --git a/src/SW360IntegrationTest/Maven/PackageIdentifierInitialMaven.cs b/src/SW360IntegrationTest/Maven/PackageIdentifierInitialMaven.cs index 06ba4bf8..40e29967 100644 --- a/src/SW360IntegrationTest/Maven/PackageIdentifierInitialMaven.cs +++ b/src/SW360IntegrationTest/Maven/PackageIdentifierInitialMaven.cs @@ -51,6 +51,7 @@ public void RunBOMCreatorexe_ProvidedPackageJsonFilePath_ReturnsSuccess() TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, TestConstant.JfrogMavenInternalRepo,"Maven-test", + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.ProjectType,"Maven", TestConstant.Mode,""}), "Test to run Package Identifier EXE execution"); diff --git a/src/SW360IntegrationTest/NPM/ArtifactoryUploaderNpm.cs b/src/SW360IntegrationTest/NPM/ArtifactoryUploaderNpm.cs index 33760aef..28b574f4 100644 --- a/src/SW360IntegrationTest/NPM/ArtifactoryUploaderNpm.cs +++ b/src/SW360IntegrationTest/NPM/ArtifactoryUploaderNpm.cs @@ -31,6 +31,7 @@ public void TestArtifactoryUploaderexe() TestConstant.JfrogNpmDevDestRepoName,testParameters.DevDestinationRepoName, TestConstant.JfrogNpmInternalDestRepoName,testParameters.InternalDestinationRepoName, TestConstant.JFrogApiURL,testParameters.JfrogApi, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.DryRun, false.ToString() }); diff --git a/src/SW360IntegrationTest/NPM/ComponentCreatorInitial.cs b/src/SW360IntegrationTest/NPM/ComponentCreatorInitial.cs index aabba534..2f45efce 100644 --- a/src/SW360IntegrationTest/NPM/ComponentCreatorInitial.cs +++ b/src/SW360IntegrationTest/NPM/ComponentCreatorInitial.cs @@ -44,6 +44,7 @@ public void Setup() TestConstant.SW360ProjectID, testParameters.SW360ProjectID, TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.JFrogApiURL, testParameters.JfrogApi, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.JfrogNpmInternalRepo,"Npm-test", TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, TestConstant.ProjectType, "NPM", @@ -66,6 +67,7 @@ public void TestComponentCreatorExe() TestConstant.SW360ProjectID, testParameters.SW360ProjectID, TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.EnableFossologyTrigger,testParameters.FossologyTrigger, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.FossologyURL,testParameters.FossUrl }), "Test to run Package Creator EXE execution"); } diff --git a/src/SW360IntegrationTest/NPM/ComponentCreatorTestMode.cs b/src/SW360IntegrationTest/NPM/ComponentCreatorTestMode.cs index a564363e..96c21808 100644 --- a/src/SW360IntegrationTest/NPM/ComponentCreatorTestMode.cs +++ b/src/SW360IntegrationTest/NPM/ComponentCreatorTestMode.cs @@ -44,6 +44,7 @@ public void Setup() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.ProjectType, "NPM", TestConstant.Mode,"test" }); @@ -65,6 +66,7 @@ public void TestComponentCreatorExe_TestMode() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.FossologyURL, testParameters.FossUrl, TestConstant.EnableFossologyTrigger,testParameters.FossologyTrigger, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.Mode,"test" }), "Test to run Package Creator EXE execution"); diff --git a/src/SW360IntegrationTest/NPM/ComponentCreatorWithUpdatedComponents.cs b/src/SW360IntegrationTest/NPM/ComponentCreatorWithUpdatedComponents.cs index c0dcdfe7..5d51890e 100644 --- a/src/SW360IntegrationTest/NPM/ComponentCreatorWithUpdatedComponents.cs +++ b/src/SW360IntegrationTest/NPM/ComponentCreatorWithUpdatedComponents.cs @@ -49,6 +49,7 @@ public void Setup() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.ProjectType, "NPM", TestConstant.Mode,"" }); } @@ -69,6 +70,7 @@ public void TestComponentCreatorExe() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.FossologyURL, testParameters.FossUrl, TestConstant.EnableFossologyTrigger,testParameters.FossologyTrigger, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.Mode,"" }), "Test to run Package Creator EXE execution"); } diff --git a/src/SW360IntegrationTest/NPM/PackageIdentifierInitial.cs b/src/SW360IntegrationTest/NPM/PackageIdentifierInitial.cs index eb2c959c..23bb5d13 100644 --- a/src/SW360IntegrationTest/NPM/PackageIdentifierInitial.cs +++ b/src/SW360IntegrationTest/NPM/PackageIdentifierInitial.cs @@ -52,6 +52,7 @@ public void TestBOMCreatorexe() TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, TestConstant.JfrogNpmInternalRepo,"Npm-test", TestConstant.ProjectType, "Npm", + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.Mode,""}), "Test to run Package Identifier EXE execution"); } diff --git a/src/SW360IntegrationTest/NPM/PackageIdentifierInitialTestMode.cs b/src/SW360IntegrationTest/NPM/PackageIdentifierInitialTestMode.cs index f1abafff..16a5d07e 100644 --- a/src/SW360IntegrationTest/NPM/PackageIdentifierInitialTestMode.cs +++ b/src/SW360IntegrationTest/NPM/PackageIdentifierInitialTestMode.cs @@ -101,6 +101,7 @@ public void TestBOMCreatorexe() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.ProjectType, "NPM", TestConstant.Mode,"test" }), diff --git a/src/SW360IntegrationTest/NPM/PackageIdentifierWithMultiplePackageLockInputs.cs b/src/SW360IntegrationTest/NPM/PackageIdentifierWithMultiplePackageLockInputs.cs index 0baedf42..d70f12b2 100644 --- a/src/SW360IntegrationTest/NPM/PackageIdentifierWithMultiplePackageLockInputs.cs +++ b/src/SW360IntegrationTest/NPM/PackageIdentifierWithMultiplePackageLockInputs.cs @@ -50,6 +50,7 @@ public void TestBOMCreatorexe() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.JfrogNpmInternalRepo,"Npm-test", TestConstant.ProjectType, "NPM", TestConstant.Mode,""}), diff --git a/src/SW360IntegrationTest/NPM/PackageIdentifierWithUpdatedComponents.cs b/src/SW360IntegrationTest/NPM/PackageIdentifierWithUpdatedComponents.cs index 7ee8e5b1..17578751 100644 --- a/src/SW360IntegrationTest/NPM/PackageIdentifierWithUpdatedComponents.cs +++ b/src/SW360IntegrationTest/NPM/PackageIdentifierWithUpdatedComponents.cs @@ -50,6 +50,7 @@ public void TestBOMCreatorexe() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.JfrogNpmInternalRepo,"Npm-test", TestConstant.ProjectType, "NPM", TestConstant.Mode,"" }), "Test to run Package Identifier EXE execution"); diff --git a/src/SW360IntegrationTest/Nuget/ArtifactoryUploaderNuget.cs b/src/SW360IntegrationTest/Nuget/ArtifactoryUploaderNuget.cs index 7daba373..1f9cee85 100644 --- a/src/SW360IntegrationTest/Nuget/ArtifactoryUploaderNuget.cs +++ b/src/SW360IntegrationTest/Nuget/ArtifactoryUploaderNuget.cs @@ -33,6 +33,7 @@ public void TestArtifactoryUploaderexe() TestConstant.JfrogNugetDevDestRepoName,testParameters.DevDestinationRepoName, TestConstant.JfrogNugetInternalDestRepoName,testParameters.InternalDestinationRepoName, TestConstant.JFrogApiURL,testParameters.JfrogApi, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.DryRun, false.ToString() }), "Test to run Artifactory Uploader EXE execution"); diff --git a/src/SW360IntegrationTest/Nuget/ComponentCreatorInitialNuget.cs b/src/SW360IntegrationTest/Nuget/ComponentCreatorInitialNuget.cs index e84eadad..9d78a11c 100644 --- a/src/SW360IntegrationTest/Nuget/ComponentCreatorInitialNuget.cs +++ b/src/SW360IntegrationTest/Nuget/ComponentCreatorInitialNuget.cs @@ -46,6 +46,7 @@ public void Setup() TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.JfrogNugetInternalRepo,"Nuget-test", TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.ProjectType,"NUGET", TestConstant.Mode,""}); } @@ -67,6 +68,7 @@ public void ComponentCreatorExe_ProvidedBOMFilePath_ReturnsSuccess() TestConstant.ProjectType,"NUGET", TestConstant.FossologyURL, testParameters.FossUrl, TestConstant.EnableFossologyTrigger,testParameters.FossologyTrigger, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.Mode,""}), "Test to run Package Creator EXE execution"); } diff --git a/src/SW360IntegrationTest/Nuget/NugetTemplate/ComponentCreatorNugetTemplate.cs b/src/SW360IntegrationTest/Nuget/NugetTemplate/ComponentCreatorNugetTemplate.cs index 6c706b68..61b2077a 100644 --- a/src/SW360IntegrationTest/Nuget/NugetTemplate/ComponentCreatorNugetTemplate.cs +++ b/src/SW360IntegrationTest/Nuget/NugetTemplate/ComponentCreatorNugetTemplate.cs @@ -46,6 +46,7 @@ public void Setup() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.JfrogNugetInternalRepo,"Nuget-test", TestConstant.ProjectType,"NUGET", TestConstant.Mode,""}); @@ -69,6 +70,7 @@ public void ComponentCreatorExe_ProvidedBOMFilePath_ReturnsSuccess() TestConstant.ProjectType,"NUGET", TestConstant.FossologyURL, testParameters.FossUrl, TestConstant.EnableFossologyTrigger,testParameters.FossologyTrigger, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.Mode,""}); Assert.IsTrue(value == 0 || value == 2, diff --git a/src/SW360IntegrationTest/Nuget/NugetTemplate/PackageIdentifierNugetTemplate.cs b/src/SW360IntegrationTest/Nuget/NugetTemplate/PackageIdentifierNugetTemplate.cs index 70232bfd..6d6a87cc 100644 --- a/src/SW360IntegrationTest/Nuget/NugetTemplate/PackageIdentifierNugetTemplate.cs +++ b/src/SW360IntegrationTest/Nuget/NugetTemplate/PackageIdentifierNugetTemplate.cs @@ -51,6 +51,7 @@ public void RunBOMCreatorexe_ProvidedPackageJsonFilePath_ReturnsSuccess() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.JfrogNugetInternalRepo,"Nuget-test", TestConstant.ProjectType,"NUGET", TestConstant.Mode,""}), diff --git a/src/SW360IntegrationTest/Nuget/PackageIdentifierInitialNuget.cs b/src/SW360IntegrationTest/Nuget/PackageIdentifierInitialNuget.cs index aa2d0bc2..392c0621 100644 --- a/src/SW360IntegrationTest/Nuget/PackageIdentifierInitialNuget.cs +++ b/src/SW360IntegrationTest/Nuget/PackageIdentifierInitialNuget.cs @@ -50,6 +50,7 @@ public void RunBOMCreatorexe_ProvidedPackageJsonFilePath_ReturnsSuccess() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.JfrogNugetInternalRepo,"Nuget-test", TestConstant.ProjectType,"Nuget", TestConstant.Mode,""}), diff --git a/src/SW360IntegrationTest/Python/ArtifactoryUploaderPython.cs b/src/SW360IntegrationTest/Python/ArtifactoryUploaderPython.cs index bc43a56b..8df4da82 100644 --- a/src/SW360IntegrationTest/Python/ArtifactoryUploaderPython.cs +++ b/src/SW360IntegrationTest/Python/ArtifactoryUploaderPython.cs @@ -32,6 +32,7 @@ public void TestArtifactoryUploaderexe() TestConstant.JfrogPythonThirdPartyDestRepoName,testParameters.ThirdPartyDestinationRepoName, TestConstant.JfrogPythonDevDestRepoName,testParameters.DevDestinationRepoName, TestConstant.JfrogPythonInternalDestRepoName,testParameters.InternalDestinationRepoName, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.JFrogApiURL,testParameters.JfrogApi, TestConstant.DryRun, false.ToString() }); diff --git a/src/SW360IntegrationTest/Python/ComponentCreatorInitialPython.cs b/src/SW360IntegrationTest/Python/ComponentCreatorInitialPython.cs index 020661c8..53d0fc02 100644 --- a/src/SW360IntegrationTest/Python/ComponentCreatorInitialPython.cs +++ b/src/SW360IntegrationTest/Python/ComponentCreatorInitialPython.cs @@ -44,6 +44,7 @@ public void Setup() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.JfrogPoetryInternalRepo,"Pypi-test", TestConstant.ProjectType,"POETRY", TestConstant.Mode,""}); @@ -65,6 +66,7 @@ public void ComponentCreatorExe_ProvidedBOMFilePath_ReturnsSuccess() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.FossologyURL, testParameters.FossUrl, TestConstant.EnableFossologyTrigger,testParameters.FossologyTrigger, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.Mode,""}); Assert.IsTrue(returnValue == 0 || returnValue == 2, "Test to run Package Creator EXE execution"); diff --git a/src/SW360IntegrationTest/Python/PackageIdentifierInitialPython.cs b/src/SW360IntegrationTest/Python/PackageIdentifierInitialPython.cs index 7f7c40b9..8df281c1 100644 --- a/src/SW360IntegrationTest/Python/PackageIdentifierInitialPython.cs +++ b/src/SW360IntegrationTest/Python/PackageIdentifierInitialPython.cs @@ -50,6 +50,7 @@ public void RunBOMCreatorexe_ProvidedPackageJsonFilePath_ReturnsSuccess() TestConstant.SW360ProjectName, testParameters.SW360ProjectName, TestConstant.JFrogApiURL, testParameters.JfrogApi, TestConstant.ArtifactoryKey, testParameters.ArtifactoryUploadApiKey, + TestConstant.TelemetryEnable, testParameters.TelemetryEnable, TestConstant.JfrogPoetryInternalRepo,"Pypi-test", TestConstant.ProjectType,"Poetry", TestConstant.Mode,""}), diff --git a/src/Telemetry.UTest/LCT.Telemetry.UTest.csproj b/src/Telemetry.UTest/LCT.Telemetry.UTest.csproj index 9477855a..83c8be83 100644 --- a/src/Telemetry.UTest/LCT.Telemetry.UTest.csproj +++ b/src/Telemetry.UTest/LCT.Telemetry.UTest.csproj @@ -8,7 +8,13 @@ false true + + ..\..\out + + + ..\..\out + diff --git a/src/TestUtilities/TestConstant.cs b/src/TestUtilities/TestConstant.cs index f5898d45..38d079f0 100644 --- a/src/TestUtilities/TestConstant.cs +++ b/src/TestUtilities/TestConstant.cs @@ -43,6 +43,7 @@ public static class TestConstant public const string Email = "Email"; public const string ArtifactoryKey = "--Jfrog:Token"; public const string ArtifactoryUser = "--artifactoryuploaduser"; + public const string TelemetryEnable = "--Telemetry:Enable"; public const string JfrogNpmThirdPartyDestRepoName = "--Npm:Artifactory:ThirdPartyRepos:0:Name"; public const string JfrogNpmInternalRepo = "--Npm:Artifactory:InternalRepos:0"; diff --git a/src/TestUtilities/TestParam.cs b/src/TestUtilities/TestParam.cs index b114a405..5e3b99e4 100644 --- a/src/TestUtilities/TestParam.cs +++ b/src/TestUtilities/TestParam.cs @@ -30,6 +30,8 @@ public class TestParam public string InternalDestinationRepoName { get; set; } public string DevDestinationRepoName { get; set; } public string FossologyTrigger { get; set; } + public string TelemetryEnable { get; set; } + public TestParam() { SW360AuthTokenType = s_Config["SW360AuthTokenType"]; @@ -47,6 +49,7 @@ public TestParam() InternalDestinationRepoName = "npm-test"; DevDestinationRepoName = "npm-test"; FossologyTrigger = s_Config["EnableFossologyTrigger"]; + TelemetryEnable = s_Config["TelemetryEnable"]; } } } diff --git a/src/TestUtilities/TestParamAlpine.cs b/src/TestUtilities/TestParamAlpine.cs index 8ee53308..1abca2f6 100644 --- a/src/TestUtilities/TestParamAlpine.cs +++ b/src/TestUtilities/TestParamAlpine.cs @@ -24,6 +24,7 @@ public class TestParamAlpine public string ArtifactoryUploadApiKey { get; set; } public string JfrogApi { get; set; } public string FossologyTrigger { get; set; } + public string TelemetryEnable { get; set; } public TestParamAlpine() { @@ -39,6 +40,7 @@ public TestParamAlpine() JfrogApi = s_Config["JfrogApi"]; RemoveDevDependency = s_Config["RemoveDevDependency"]; FossologyTrigger = s_Config["EnableFossologyTrigger"]; + TelemetryEnable = s_Config["TelemetryEnable"]; } } } diff --git a/src/TestUtilities/TestParamConan.cs b/src/TestUtilities/TestParamConan.cs index 9b15c95a..d6999297 100644 --- a/src/TestUtilities/TestParamConan.cs +++ b/src/TestUtilities/TestParamConan.cs @@ -29,6 +29,7 @@ public class TestParamConan public string InternalDestinationRepoName { get; set; } public string DevDestinationRepoName { get; set; } public string FossologyTrigger { get; set; } + public string TelemetryEnable { get; set; } public TestParamConan() { SW360AuthTokenType = s_Config["SW360AuthTokenType"]; @@ -46,6 +47,7 @@ public TestParamConan() InternalDestinationRepoName = "conan-test"; DevDestinationRepoName = "conan-test"; FossologyTrigger = s_Config["EnableFossologyTrigger"]; + TelemetryEnable = s_Config["TelemetryEnable"]; } } } diff --git a/src/TestUtilities/TestParamDebian.cs b/src/TestUtilities/TestParamDebian.cs index e4aef5cb..d094852b 100644 --- a/src/TestUtilities/TestParamDebian.cs +++ b/src/TestUtilities/TestParamDebian.cs @@ -24,6 +24,7 @@ public class TestParamDebian public string ArtifactoryUploadApiKey { get; set; } public string JfrogApi { get; set; } public string FossologyTrigger { get; set; } + public string TelemetryEnable { get; set; } public TestParamDebian() { @@ -39,6 +40,7 @@ public TestParamDebian() JfrogApi = s_Config["JfrogApi"]; RemoveDevDependency = s_Config["RemoveDevDependency"]; FossologyTrigger = s_Config["EnableFossologyTrigger"]; + TelemetryEnable = s_Config["TelemetryEnable"]; } } } diff --git a/src/TestUtilities/TestParamMaven.cs b/src/TestUtilities/TestParamMaven.cs index 6d72dc36..5d31c53c 100644 --- a/src/TestUtilities/TestParamMaven.cs +++ b/src/TestUtilities/TestParamMaven.cs @@ -29,6 +29,7 @@ public class TestParamMaven public string InternalDestinationRepoName { get; set; } public string DevDestinationRepoName { get; set; } public string FossologyTrigger { get; set; } + public string TelemetryEnable { get; set; } public TestParamMaven() { @@ -47,6 +48,7 @@ public TestParamMaven() InternalDestinationRepoName = "maven-test"; DevDestinationRepoName = "maven-test"; FossologyTrigger = s_Config["EnableFossologyTrigger"]; + TelemetryEnable = s_Config["TelemetryEnable"]; } } } diff --git a/src/TestUtilities/TestParamNuget.cs b/src/TestUtilities/TestParamNuget.cs index ea3df7e7..03437607 100644 --- a/src/TestUtilities/TestParamNuget.cs +++ b/src/TestUtilities/TestParamNuget.cs @@ -33,6 +33,7 @@ public class TestParamNuget public string InternalDestinationRepoName { get; set; } public string DevDestinationRepoName { get; set; } public string FossologyTrigger { get; set; } + public string TelemetryEnable { get; set; } public TestParamNuget() { @@ -51,6 +52,7 @@ public TestParamNuget() InternalDestinationRepoName = "nuget-test"; DevDestinationRepoName = "nuget-test"; FossologyTrigger = s_Config["EnableFossologyTrigger"]; + TelemetryEnable = s_Config["TelemetryEnable"]; } } } diff --git a/src/TestUtilities/appSettingsSW360IntegrationTest.json b/src/TestUtilities/appSettingsSW360IntegrationTest.json index 56483e8c..32cf6c16 100644 --- a/src/TestUtilities/appSettingsSW360IntegrationTest.json +++ b/src/TestUtilities/appSettingsSW360IntegrationTest.json @@ -2,6 +2,7 @@ "Fossologyurl": "", "RemoveDevDependency": true, "EnableFossologyTrigger": false, + "TelemetryEnable": false, "SW360AuthTokenType": "Token", "SW360ProjectID": "036ec371847b4b199dd21c3494ccb108", "SW360ProjectName": "Test", From daf3c7ccce41941541077eb970f2b77e5071519c Mon Sep 17 00:00:00 2001 From: Malavika Date: Tue, 18 Feb 2025 12:01:41 +0530 Subject: [PATCH 13/15] added license header --- src/LCT.Telemetry/ApplicationInsightsTelemetryProvider.cs | 7 ++++++- src/LCT.Telemetry/HashUtility.cs | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/LCT.Telemetry/ApplicationInsightsTelemetryProvider.cs b/src/LCT.Telemetry/ApplicationInsightsTelemetryProvider.cs index 615e9e95..c951f27e 100644 --- a/src/LCT.Telemetry/ApplicationInsightsTelemetryProvider.cs +++ b/src/LCT.Telemetry/ApplicationInsightsTelemetryProvider.cs @@ -1,4 +1,9 @@ -using Microsoft.ApplicationInsights; +// -------------------------------------------------------------------------------------------------------------------- +// SPDX-FileCopyrightText: 2025 Siemens AG +// +// SPDX-License-Identifier: MIT +// -------------------------------------------------------------------------------------------------------------------- +using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.DataContracts; using Microsoft.ApplicationInsights.Extensibility; diff --git a/src/LCT.Telemetry/HashUtility.cs b/src/LCT.Telemetry/HashUtility.cs index b2edd426..6faa67d3 100644 --- a/src/LCT.Telemetry/HashUtility.cs +++ b/src/LCT.Telemetry/HashUtility.cs @@ -1,4 +1,9 @@ -using System.Security.Cryptography; +// -------------------------------------------------------------------------------------------------------------------- +// SPDX-FileCopyrightText: 2025 Siemens AG +// +// SPDX-License-Identifier: MIT +// -------------------------------------------------------------------------------------------------------------------- +using System.Security.Cryptography; using System.Text; namespace LCT.Telemetry From 661ccad89b04332cdc1d337ac0071170044e1456 Mon Sep 17 00:00:00 2001 From: Malavika Date: Tue, 18 Feb 2025 12:04:33 +0530 Subject: [PATCH 14/15] added header for unit test --- src/Telemetry.UTest/Telemetry.UTest.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Telemetry.UTest/Telemetry.UTest.cs b/src/Telemetry.UTest/Telemetry.UTest.cs index 3c051c07..ae8b61a8 100644 --- a/src/Telemetry.UTest/Telemetry.UTest.cs +++ b/src/Telemetry.UTest/Telemetry.UTest.cs @@ -1,3 +1,8 @@ +// -------------------------------------------------------------------------------------------------------------------- +// SPDX-FileCopyrightText: 2025 Siemens AG +// +// SPDX-License-Identifier: MIT +// -------------------------------------------------------------------------------------------------------------------- using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights; using Moq; From 4d1afe1bda80cb43d8f7eb4ccba57aaed6b4ff90 Mon Sep 17 00:00:00 2001 From: Malavika Date: Thu, 20 Feb 2025 12:04:35 +0530 Subject: [PATCH 15/15] code refactoring --- src/ArtifactoryUploader/Program.cs | 34 ++------------- src/LCT.Common/TelemetryHelper.cs | 57 ++++++++++++++++++++++---- src/LCT.PackageIdentifier/Program.cs | 31 ++------------ src/LCT.SW360PackageCreator/Program.cs | 28 +------------ 4 files changed, 57 insertions(+), 93 deletions(-) diff --git a/src/ArtifactoryUploader/Program.cs b/src/ArtifactoryUploader/Program.cs index 59151f3f..f9e5999d 100644 --- a/src/ArtifactoryUploader/Program.cs +++ b/src/ArtifactoryUploader/Program.cs @@ -90,41 +90,13 @@ static async Task Main(string[] args) PackageUploadHelper.jFrogService = GetJfrogService(appSettings); UploadToArtifactory.jFrogService = GetJfrogService(appSettings); JfrogRepoUpdater.jFrogService = GetJfrogService(appSettings); - await PackageUploader.UploadPackageToArtifactory(appSettings); + await PackageUploader.UploadPackageToArtifactory(appSettings); // Initialize telemetry with CATool version and instrumentation key only if Telemetry is enabled in appsettings if (appSettings.Telemetry.Enable == true) { - Logger.Warn(TelemetryConstant.StartLogMessage); - LCT.Telemetry.Telemetry telemetry = new LCT.Telemetry.Telemetry(TelemetryConstant.Type, new Dictionary - { - - { "InstrumentationKey", appSettings.Telemetry.ApplicationInsightInstrumentKey } - }); - - try - { - TelemetryHelper.InitializeAndTrackEvent(telemetry, TelemetryConstant.ToolName, caToolInformation.CatoolVersion, TelemetryConstant.ArtifactoryUploader - , appSettings); - - // Track KPI data if available - if (PackageUploader.uploaderKpiData != null) - { - TelemetryHelper.TrackKpiDataTelemetry(telemetry, TelemetryConstant.ArtifactoryUploaderKpiData, PackageUploader.uploaderKpiData); - } - telemetry.TrackExecutionTime(); - - } - catch (Exception ex) - { - Logger.Error($"An error occurred: {ex.Message}"); - TelemetryHelper.TrackException(telemetry, ex); - environmentHelper.CallEnvironmentExit(-1); - } - finally - { - telemetry.Flush(); // Ensure telemetry is sent before application exits - } + TelemetryHelper telemetryHelper = new TelemetryHelper(appSettings); + telemetryHelper.StartTelemetry(caToolInformation.CatoolVersion, PackageUploader.uploaderKpiData, TelemetryConstant.ArtifactoryUploaderKpiData); } Logger.Logger.Log(null, Level.Notice, $"End of Artifactory Uploader execution : {DateTime.Now}\n", null); // publish logs and BOM file to pipeline artifact diff --git a/src/LCT.Common/TelemetryHelper.cs b/src/LCT.Common/TelemetryHelper.cs index 676d0213..66b87c59 100644 --- a/src/LCT.Common/TelemetryHelper.cs +++ b/src/LCT.Common/TelemetryHelper.cs @@ -3,7 +3,10 @@ // // SPDX-License-Identifier: MIT // -------------------------------------------------------------------------------------------------------------------- +using LCT.Common.Constants; +using LCT.Common.Interface; using LCT.Telemetry; +using log4net; using System; using System.Collections.Generic; using System.ComponentModel; @@ -15,12 +18,51 @@ namespace LCT.Common { public class TelemetryHelper { - public static void InitializeAndTrackEvent(LCT.Telemetry.Telemetry telemetry, string toolName, string toolVersion, string eventName, + private readonly ILog Logger; + LCT.Telemetry.Telemetry telemetry_; + EnvironmentHelper environmentHelper; + CommonAppSettings appSettings_; + + public TelemetryHelper(CommonAppSettings appSettings) + { + environmentHelper = new EnvironmentHelper(); + Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + appSettings_ = appSettings ?? new CommonAppSettings(); + + telemetry_ = new LCT.Telemetry.Telemetry(TelemetryConstant.Type, new Dictionary + { + { "InstrumentationKey", appSettings.Telemetry.ApplicationInsightInstrumentKey } + }); + } + + public void StartTelemetry(string catoolVersion, T kpiData,string telemetryFor) + { + // Initialize telemetry with CATool version and instrumentation key only if Telemetry is enabled in appsettings + Logger.Warn(TelemetryConstant.StartLogMessage); + try + { + InitializeAndTrackEvent(TelemetryConstant.ToolName, catoolVersion, telemetryFor + , appSettings_); + TrackKpiDataTelemetry(telemetryFor, kpiData); + } + catch (Exception ex) + { + Logger.Error($"An error occurred: {ex.Message}"); + TrackException(ex); + environmentHelper.CallEnvironmentExit(-1); + } + finally + { + telemetry_.Flush(); // Ensure telemetry is sent before application exits + } + } + + private void InitializeAndTrackEvent(string toolName, string toolVersion, string eventName, CommonAppSettings appSettings) { - telemetry.Initialize(toolName, toolVersion); + telemetry_.Initialize(toolName, toolVersion); - telemetry.TrackCustomEvent(eventName, new Dictionary + telemetry_.TrackCustomEvent(eventName, new Dictionary { { "CA Tool Version", toolVersion }, { "SW360 Project Name", appSettings.SW360.ProjectName }, @@ -30,8 +72,7 @@ public static void InitializeAndTrackEvent(LCT.Telemetry.Telemetry telemetry, st { "Start Time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) } }); } - - public static void TrackKpiDataTelemetry(LCT.Telemetry.Telemetry telemetry, string eventName, T kpiData) + private void TrackKpiDataTelemetry(string eventName, T kpiData) { var properties = typeof(T).GetProperties(); var telemetryData = properties.ToDictionary( @@ -42,10 +83,10 @@ public static void TrackKpiDataTelemetry(LCT.Telemetry.Telemetry telemetry, s telemetryData["Hashed User ID"] = HashUtility.GetHashString(Environment.UserName); telemetryData["Time stamp"] = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); - telemetry.TrackCustomEvent(eventName, telemetryData); + telemetry_.TrackCustomEvent(eventName, telemetryData); } - public static void TrackException(LCT.Telemetry.Telemetry telemetry, Exception ex) + private void TrackException(Exception ex) { var exceptionData = new Dictionary { @@ -53,7 +94,7 @@ public static void TrackException(LCT.Telemetry.Telemetry telemetry, Exception e { "Stack Trace", ex.StackTrace } }; - telemetry.TrackException(ex, exceptionData); + telemetry_.TrackException(ex, exceptionData); } } } \ No newline at end of file diff --git a/src/LCT.PackageIdentifier/Program.cs b/src/LCT.PackageIdentifier/Program.cs index 27309028..8df93f87 100644 --- a/src/LCT.PackageIdentifier/Program.cs +++ b/src/LCT.PackageIdentifier/Program.cs @@ -111,36 +111,11 @@ static async Task Main(string[] args) await bomCreator.GenerateBom(appSettings, new BomHelper(), new FileOperations(), projectReleases, caToolInformation); } - - // Initialize telemetry with CATool version and instrumentation key only if Telemetry is enabled in appsettings + if (appSettings.Telemetry.Enable == true) { - Logger.Warn(TelemetryConstant.StartLogMessage); - Telemetry.Telemetry telemetry = new Telemetry.Telemetry(TelemetryConstant.Type, new Dictionary - { - { "InstrumentationKey", appSettings.Telemetry.ApplicationInsightInstrumentKey } - }); - try - { - TelemetryHelper.InitializeAndTrackEvent(telemetry, TelemetryConstant.ToolName, caToolInformation.CatoolVersion, TelemetryConstant.PackageIdentifier - , appSettings); - // Track KPI data if available - if (BomCreator.bomKpiData != null) - { - TelemetryHelper.TrackKpiDataTelemetry(telemetry, TelemetryConstant.IdentifierKpiData, BomCreator.bomKpiData); - } - telemetry.TrackExecutionTime(); - } - catch (Exception ex) - { - Logger.Error($"An error occurred: {ex.Message}"); - TelemetryHelper.TrackException(telemetry, ex); - environmentHelper.CallEnvironmentExit(-1); - } - finally - { - telemetry.Flush(); // Ensure telemetry is sent before application exits - } + TelemetryHelper telemetryHelper = new TelemetryHelper(appSettings); + telemetryHelper.StartTelemetry(caToolInformation.CatoolVersion, BomCreator.bomKpiData, TelemetryConstant.IdentifierKpiData); } Logger.Logger.Log(null, Level.Notice, $"End of Package Identifier execution : {DateTime.Now}\n", null); // publish logs and bom file to pipeline artifact diff --git a/src/LCT.SW360PackageCreator/Program.cs b/src/LCT.SW360PackageCreator/Program.cs index c1138301..42c7a884 100644 --- a/src/LCT.SW360PackageCreator/Program.cs +++ b/src/LCT.SW360PackageCreator/Program.cs @@ -102,32 +102,8 @@ static async Task Main(string[] args) // Initialize telemetry with CATool version and instrumentation key only if Telemetry is enabled in appsettings if (appSettings.Telemetry.Enable == true) { - Logger.Warn(TelemetryConstant.StartLogMessage); - Telemetry.Telemetry telemetry = new Telemetry.Telemetry(TelemetryConstant.Type, new Dictionary - { - { "InstrumentationKey", appSettings.Telemetry.ApplicationInsightInstrumentKey } - }); - try - { - TelemetryHelper.InitializeAndTrackEvent(telemetry, TelemetryConstant.ToolName, caToolInformation.CatoolVersion, TelemetryConstant.PackageCreator - , appSettings); - // Track KPI data if available - if (ComponentCreator.kpiData != null) - { - TelemetryHelper.TrackKpiDataTelemetry(telemetry, TelemetryConstant.CreatorKpiData, ComponentCreator.kpiData); - } - telemetry.TrackExecutionTime(); - } - catch (Exception ex) - { - Logger.Error($"An error occurred: {ex.Message}"); - TelemetryHelper.TrackException(telemetry, ex); - environmentHelper.CallEnvironmentExit(-1); - } - finally - { - telemetry.Flush(); // Ensure telemetry is sent before application exits - } + TelemetryHelper telemetryHelper = new TelemetryHelper(appSettings); + telemetryHelper.StartTelemetry(caToolInformation.CatoolVersion, ComponentCreator.kpiData,TelemetryConstant.CreatorKpiData); } Logger.Logger.Log(null, Level.Notice, $"End of Package Creator execution: {DateTime.Now}\n", null);