diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 51e3a711..3ee76b9e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -38,6 +38,14 @@ To send us a pull request, please: GitHub provides additional document on [forking a repository](https://help.github.com/articles/fork-a-repo/) and [creating a pull request](https://help.github.com/articles/creating-a-pull-request/). +### Adding tests + +You can find more information about adding and running tests within the respective IDE folders: + +- [jetbrains](telemetry/jetbrains/README.md) +- [vscode](telemetry/vscode/README.md) +- [csharp](telemetry/csharp/README.md) + ## Finding contributions to work on Looking at the existing issues is a great way to find something to contribute on. As our projects, by default, use the default GitHub issue labels (enhancement/bug/duplicate/help wanted/invalid/question/wontfix), looking at any 'help wanted' issues is a great place to start. diff --git a/telemetry/csharp/AwsToolkit.Telemetry.Events.Tests/Generated/GeneratedCode.cs b/telemetry/csharp/AwsToolkit.Telemetry.Events.Tests/Generated/GeneratedCode.cs index 5e171cff..d68aa304 100644 --- a/telemetry/csharp/AwsToolkit.Telemetry.Events.Tests/Generated/GeneratedCode.cs +++ b/telemetry/csharp/AwsToolkit.Telemetry.Events.Tests/Generated/GeneratedCode.cs @@ -10467,7 +10467,10 @@ public static void RecordSamSync(this ITelemetryLogger telemetryLogger, SamSync datum.AddMetadata("syncedResources", payload.SyncedResources); - datum.AddMetadata("lambdaPackageType", payload.LambdaPackageType); + if (payload.LambdaPackageType.HasValue) + { + datum.AddMetadata("lambdaPackageType", payload.LambdaPackageType.Value); + } datum.AddMetadata("version", payload.Version); @@ -10561,6 +10564,65 @@ public static void RecordSamInit(this ITelemetryLogger telemetryLogger, SamInit } } + /// Records Telemetry Event: + /// Called when checking if the SAM executable on the local machine is valid with a valid version + public static void RecordSamInfo(this ITelemetryLogger telemetryLogger, SamInfo payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "sam_info"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("result", payload.Result); + + datum.AddMetadata("version", payload.Version); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + /// Records Telemetry Event: /// Called when selecting an EventBridge schema to view public static void RecordSchemasView(this ITelemetryLogger telemetryLogger, SchemasView payload, Func transformDatum = null) @@ -14315,8 +14377,8 @@ public static void RecordDeeplinkOpen(this ITelemetryLogger telemetryLogger, Dee } /// Records Telemetry Event: - /// Percentage of user tokens against suggestions until 5 mins of time - public static void RecordCodewhispererCodePercentage(this ITelemetryLogger telemetryLogger, CodewhispererCodePercentage payload, Func transformDatum = null) + /// Number of times the user have triggered /dev and started the chat + public static void RecordAmazonqStartChat(this ITelemetryLogger telemetryLogger, AmazonqStartChat payload, Func transformDatum = null) { try { @@ -14332,8 +14394,8 @@ public static void RecordCodewhispererCodePercentage(this ITelemetryLogger telem metrics.Data = new List(); var datum = new MetricDatum(); - datum.MetricName = "codewhisperer_codePercentage"; - datum.Unit = Unit.None; + datum.MetricName = "amazonq_startChat"; + datum.Unit = Unit.Count; datum.Passive = payload.Passive; if (payload.Value.HasValue) { @@ -14357,17 +14419,7 @@ public static void RecordCodewhispererCodePercentage(this ITelemetryLogger telem } datum.AddMetadata("locale", payload.Locale); - datum.AddMetadata("codewhispererAcceptedTokens", payload.CodewhispererAcceptedTokens); - - datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); - - datum.AddMetadata("codewhispererPercentage", payload.CodewhispererPercentage); - - datum.AddMetadata("codewhispererTotalTokens", payload.CodewhispererTotalTokens); - - datum.AddMetadata("codewhispererUserGroup", payload.CodewhispererUserGroup); - - datum.AddMetadata("successCount", payload.SuccessCount); + datum.AddMetadata("amazonqConversationId", payload.AmazonqConversationId); datum = datum.InvokeTransform(transformDatum); @@ -14382,8 +14434,8 @@ public static void RecordCodewhispererCodePercentage(this ITelemetryLogger telem } /// Records Telemetry Event: - /// Client side invocation of the CodeWhisperer Security Scan - public static void RecordCodewhispererSecurityScan(this ITelemetryLogger telemetryLogger, CodewhispererSecurityScan payload, Func transformDatum = null) + /// Captures end of the conversation with amazonq /dev + public static void RecordAmazonqEndChat(this ITelemetryLogger telemetryLogger, AmazonqEndChat payload, Func transformDatum = null) { try { @@ -14399,7 +14451,7 @@ public static void RecordCodewhispererSecurityScan(this ITelemetryLogger telemet metrics.Data = new List(); var datum = new MetricDatum(); - datum.MetricName = "codewhisperer_securityScan"; + datum.MetricName = "amazonq_endChat"; datum.Unit = Unit.None; datum.Passive = payload.Passive; if (payload.Value.HasValue) @@ -14424,43 +14476,13 @@ public static void RecordCodewhispererSecurityScan(this ITelemetryLogger telemet } datum.AddMetadata("locale", payload.Locale); - datum.AddMetadata("codewhispererCodeScanLines", payload.CodewhispererCodeScanLines); - - datum.AddMetadata("codewhispererCodeScanJobId", payload.CodewhispererCodeScanJobId); - - if (payload.CodewhispererCodeScanProjectBytes.HasValue) - { - datum.AddMetadata("codewhispererCodeScanProjectBytes", payload.CodewhispererCodeScanProjectBytes.Value); - } - - datum.AddMetadata("codewhispererCodeScanSrcPayloadBytes", payload.CodewhispererCodeScanSrcPayloadBytes); - - if (payload.CodewhispererCodeScanBuildPayloadBytes.HasValue) - { - datum.AddMetadata("codewhispererCodeScanBuildPayloadBytes", payload.CodewhispererCodeScanBuildPayloadBytes.Value); - } - - datum.AddMetadata("codewhispererCodeScanSrcZipFileBytes", payload.CodewhispererCodeScanSrcZipFileBytes); + datum.AddMetadata("amazonqConversationId", payload.AmazonqConversationId); - if (payload.CodewhispererCodeScanBuildZipFileBytes.HasValue) + if (payload.AmazonqEndOfTheConversationLatency.HasValue) { - datum.AddMetadata("codewhispererCodeScanBuildZipFileBytes", payload.CodewhispererCodeScanBuildZipFileBytes.Value); + datum.AddMetadata("amazonqEndOfTheConversationLatency", payload.AmazonqEndOfTheConversationLatency.Value); } - datum.AddMetadata("codewhispererCodeScanTotalIssues", payload.CodewhispererCodeScanTotalIssues); - - datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); - - datum.AddMetadata("contextTruncationDuration", payload.ContextTruncationDuration); - - datum.AddMetadata("artifactsUploadDuration", payload.ArtifactsUploadDuration); - - datum.AddMetadata("codeScanServiceInvocationsDuration", payload.CodeScanServiceInvocationsDuration); - - datum.AddMetadata("result", payload.Result); - - datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); - datum = datum.InvokeTransform(transformDatum); metrics.Data.Add(datum); @@ -14474,8 +14496,8 @@ public static void RecordCodewhispererSecurityScan(this ITelemetryLogger telemet } /// Records Telemetry Event: - /// Client side invocation of the CodeWhisperer service for suggestion - public static void RecordCodewhispererServiceInvocation(this ITelemetryLogger telemetryLogger, CodewhispererServiceInvocation payload, Func transformDatum = null) + /// Captures Approach generation process + public static void RecordAmazonqApproachInvoke(this ITelemetryLogger telemetryLogger, AmazonqApproachInvoke payload, Func transformDatum = null) { try { @@ -14491,7 +14513,7 @@ public static void RecordCodewhispererServiceInvocation(this ITelemetryLogger te metrics.Data = new List(); var datum = new MetricDatum(); - datum.MetricName = "codewhisperer_serviceInvocation"; + datum.MetricName = "amazonq_approachInvoke"; datum.Unit = Unit.None; datum.Passive = payload.Passive; if (payload.Value.HasValue) @@ -14516,70 +14538,11 @@ public static void RecordCodewhispererServiceInvocation(this ITelemetryLogger te } datum.AddMetadata("locale", payload.Locale); - if (payload.CodewhispererAutomatedTriggerType.HasValue) - { - datum.AddMetadata("codewhispererAutomatedTriggerType", payload.CodewhispererAutomatedTriggerType.Value); - } - - if (payload.CodewhispererCompletionType.HasValue) - { - datum.AddMetadata("codewhispererCompletionType", payload.CodewhispererCompletionType.Value); - } - - datum.AddMetadata("codewhispererCursorOffset", payload.CodewhispererCursorOffset); - - datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); - - if (payload.CodewhispererLastSuggestionIndex.HasValue) - { - datum.AddMetadata("codewhispererLastSuggestionIndex", payload.CodewhispererLastSuggestionIndex.Value); - } - - datum.AddMetadata("codewhispererLineNumber", payload.CodewhispererLineNumber); - - datum.AddMetadata("codewhispererRequestId", payload.CodewhispererRequestId); - - if (payload.CodewhispererRuntime.HasValue) - { - datum.AddMetadata("codewhispererRuntime", payload.CodewhispererRuntime.Value); - } - - datum.AddMetadata("codewhispererRuntimeSource", payload.CodewhispererRuntimeSource); - - datum.AddMetadata("codewhispererSessionId", payload.CodewhispererSessionId); - - if (payload.CodewhispererSupplementalContextTimeout.HasValue) - { - datum.AddMetadata("codewhispererSupplementalContextTimeout", payload.CodewhispererSupplementalContextTimeout.Value); - } - - if (payload.CodewhispererSupplementalContextIsUtg.HasValue) - { - datum.AddMetadata("codewhispererSupplementalContextIsUtg", payload.CodewhispererSupplementalContextIsUtg.Value); - } - - if (payload.CodewhispererSupplementalContextLatency.HasValue) - { - datum.AddMetadata("codewhispererSupplementalContextLatency", payload.CodewhispererSupplementalContextLatency.Value); - } - - if (payload.CodewhispererSupplementalContextLength.HasValue) - { - datum.AddMetadata("codewhispererSupplementalContextLength", payload.CodewhispererSupplementalContextLength.Value); - } - - datum.AddMetadata("codewhispererTriggerType", payload.CodewhispererTriggerType); - - datum.AddMetadata("result", payload.Result); - - datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); + datum.AddMetadata("amazonqConversationId", payload.AmazonqConversationId); - if (payload.CodewhispererImportRecommendationEnabled.HasValue) - { - datum.AddMetadata("codewhispererImportRecommendationEnabled", payload.CodewhispererImportRecommendationEnabled.Value); - } + datum.AddMetadata("amazonqGenerateApproachIteration", payload.AmazonqGenerateApproachIteration); - datum.AddMetadata("codewhispererUserGroup", payload.CodewhispererUserGroup); + datum.AddMetadata("amazonqGenerateApproachLatency", payload.AmazonqGenerateApproachLatency); datum = datum.InvokeTransform(transformDatum); @@ -14594,8 +14557,8 @@ public static void RecordCodewhispererServiceInvocation(this ITelemetryLogger te } /// Records Telemetry Event: - /// Client side invocation blocked by another invocation in progress - public static void RecordCodewhispererBlockedInvocation(this ITelemetryLogger telemetryLogger, CodewhispererBlockedInvocation payload, Func transformDatum = null) + /// User has accepted the approach generated + public static void RecordAmazonqIsApproachAccepted(this ITelemetryLogger telemetryLogger, AmazonqIsApproachAccepted payload, Func transformDatum = null) { try { @@ -14611,7 +14574,7 @@ public static void RecordCodewhispererBlockedInvocation(this ITelemetryLogger te metrics.Data = new List(); var datum = new MetricDatum(); - datum.MetricName = "codewhisperer_blockedInvocation"; + datum.MetricName = "amazonq_isApproachAccepted"; datum.Unit = Unit.None; datum.Passive = payload.Passive; if (payload.Value.HasValue) @@ -14636,20 +14599,9 @@ public static void RecordCodewhispererBlockedInvocation(this ITelemetryLogger te } datum.AddMetadata("locale", payload.Locale); - if (payload.CodewhispererAutomatedTriggerType.HasValue) - { - datum.AddMetadata("codewhispererAutomatedTriggerType", payload.CodewhispererAutomatedTriggerType.Value); - } - - datum.AddMetadata("codewhispererCursorOffset", payload.CodewhispererCursorOffset); - - datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); - - datum.AddMetadata("codewhispererLineNumber", payload.CodewhispererLineNumber); - - datum.AddMetadata("codewhispererTriggerType", payload.CodewhispererTriggerType); + datum.AddMetadata("enabled", payload.Enabled); - datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); + datum.AddMetadata("amazonqConversationId", payload.AmazonqConversationId); datum = datum.InvokeTransform(transformDatum); @@ -14664,8 +14616,8 @@ public static void RecordCodewhispererBlockedInvocation(this ITelemetryLogger te } /// Records Telemetry Event: - /// User acceptance or rejection of each suggestion returned by the CodeWhisperer service request - public static void RecordCodewhispererUserDecision(this ITelemetryLogger telemetryLogger, CodewhispererUserDecision payload, Func transformDatum = null) + /// Captures Code Generation generation process + public static void RecordAmazonqCodeGenerationInvoke(this ITelemetryLogger telemetryLogger, AmazonqCodeGenerationInvoke payload, Func transformDatum = null) { try { @@ -14681,7 +14633,7 @@ public static void RecordCodewhispererUserDecision(this ITelemetryLogger telemet metrics.Data = new List(); var datum = new MetricDatum(); - datum.MetricName = "codewhisperer_userDecision"; + datum.MetricName = "amazonq_codeGenerationInvoke"; datum.Unit = Unit.None; datum.Passive = payload.Passive; if (payload.Value.HasValue) @@ -14706,60 +14658,26 @@ public static void RecordCodewhispererUserDecision(this ITelemetryLogger telemet } datum.AddMetadata("locale", payload.Locale); - datum.AddMetadata("codewhispererCompletionType", payload.CodewhispererCompletionType); - - datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); - - if (payload.CodewhispererPaginationProgress.HasValue) - { - datum.AddMetadata("codewhispererPaginationProgress", payload.CodewhispererPaginationProgress.Value); - } - - datum.AddMetadata("codewhispererRequestId", payload.CodewhispererRequestId); - - if (payload.CodewhispererRuntime.HasValue) - { - datum.AddMetadata("codewhispererRuntime", payload.CodewhispererRuntime.Value); - } - - datum.AddMetadata("codewhispererRuntimeSource", payload.CodewhispererRuntimeSource); - - datum.AddMetadata("codewhispererSessionId", payload.CodewhispererSessionId); - - datum.AddMetadata("codewhispererSuggestionIndex", payload.CodewhispererSuggestionIndex); - - datum.AddMetadata("codewhispererSuggestionReferenceCount", payload.CodewhispererSuggestionReferenceCount); + datum.AddMetadata("amazonqConversationId", payload.AmazonqConversationId); - datum.AddMetadata("codewhispererSuggestionReferences", payload.CodewhispererSuggestionReferences); + datum.AddMetadata("amazonqGenerateCodeIteration", payload.AmazonqGenerateCodeIteration); - if (payload.CodewhispererSuggestionImportCount.HasValue) - { - datum.AddMetadata("codewhispererSuggestionImportCount", payload.CodewhispererSuggestionImportCount.Value); - } + datum.AddMetadata("amazonqGenerateCodeResponseLatency", payload.AmazonqGenerateCodeResponseLatency); - datum.AddMetadata("codewhispererSuggestionState", payload.CodewhispererSuggestionState); + datum.AddMetadata("amazonqCodeGenerationResult", payload.AmazonqCodeGenerationResult); - if (payload.CodewhispererSupplementalContextTimeout.HasValue) + if (payload.AmazonqNumberOfFilesGenerated.HasValue) { - datum.AddMetadata("codewhispererSupplementalContextTimeout", payload.CodewhispererSupplementalContextTimeout.Value); + datum.AddMetadata("amazonqNumberOfFilesGenerated", payload.AmazonqNumberOfFilesGenerated.Value); } - if (payload.CodewhispererSupplementalContextIsUtg.HasValue) - { - datum.AddMetadata("codewhispererSupplementalContextIsUtg", payload.CodewhispererSupplementalContextIsUtg.Value); - } + datum.AddMetadata("amazonqRepositorySize", payload.AmazonqRepositorySize); - if (payload.CodewhispererSupplementalContextLength.HasValue) + if (payload.AmazonqNumberOfReferences.HasValue) { - datum.AddMetadata("codewhispererSupplementalContextLength", payload.CodewhispererSupplementalContextLength.Value); + datum.AddMetadata("amazonqNumberOfReferences", payload.AmazonqNumberOfReferences.Value); } - datum.AddMetadata("codewhispererTriggerType", payload.CodewhispererTriggerType); - - datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); - - datum.AddMetadata("codewhispererUserGroup", payload.CodewhispererUserGroup); - datum = datum.InvokeTransform(transformDatum); metrics.Data.Add(datum); @@ -14773,8 +14691,8 @@ public static void RecordCodewhispererUserDecision(this ITelemetryLogger telemet } /// Records Telemetry Event: - /// User decision aggregated at trigger level - public static void RecordCodewhispererUserTriggerDecision(this ITelemetryLogger telemetryLogger, CodewhispererUserTriggerDecision payload, Func transformDatum = null) + /// User applied code changes generated for the task. + public static void RecordAmazonqIsAcceptedCodeChanges(this ITelemetryLogger telemetryLogger, AmazonqIsAcceptedCodeChanges payload, Func transformDatum = null) { try { @@ -14790,7 +14708,7 @@ public static void RecordCodewhispererUserTriggerDecision(this ITelemetryLogger metrics.Data = new List(); var datum = new MetricDatum(); - datum.MetricName = "codewhisperer_userTriggerDecision"; + datum.MetricName = "amazonq_isAcceptedCodeChanges"; datum.Unit = Unit.None; datum.Passive = payload.Passive; if (payload.Value.HasValue) @@ -14815,110 +14733,11 @@ public static void RecordCodewhispererUserTriggerDecision(this ITelemetryLogger } datum.AddMetadata("locale", payload.Locale); - datum.AddMetadata("codewhispererSessionId", payload.CodewhispererSessionId); - - datum.AddMetadata("codewhispererFirstRequestId", payload.CodewhispererFirstRequestId); + datum.AddMetadata("enabled", payload.Enabled); - datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); + datum.AddMetadata("amazonqConversationId", payload.AmazonqConversationId); - if (payload.CodewhispererIsPartialAcceptance.HasValue) - { - datum.AddMetadata("codewhispererIsPartialAcceptance", payload.CodewhispererIsPartialAcceptance.Value); - } - - if (payload.CodewhispererPartialAcceptanceCount.HasValue) - { - datum.AddMetadata("codewhispererPartialAcceptanceCount", payload.CodewhispererPartialAcceptanceCount.Value); - } - - if (payload.CodewhispererCharactersAccepted.HasValue) - { - datum.AddMetadata("codewhispererCharactersAccepted", payload.CodewhispererCharactersAccepted.Value); - } - - if (payload.CodewhispererCharactersRecommended.HasValue) - { - datum.AddMetadata("codewhispererCharactersRecommended", payload.CodewhispererCharactersRecommended.Value); - } - - datum.AddMetadata("codewhispererCompletionType", payload.CodewhispererCompletionType); - - datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); - - datum.AddMetadata("codewhispererTriggerType", payload.CodewhispererTriggerType); - - if (payload.CodewhispererAutomatedTriggerType.HasValue) - { - datum.AddMetadata("codewhispererAutomatedTriggerType", payload.CodewhispererAutomatedTriggerType.Value); - } - - datum.AddMetadata("codewhispererLineNumber", payload.CodewhispererLineNumber); - - datum.AddMetadata("codewhispererCursorOffset", payload.CodewhispererCursorOffset); - - datum.AddMetadata("codewhispererSuggestionCount", payload.CodewhispererSuggestionCount); - - datum.AddMetadata("codewhispererSuggestionImportCount", payload.CodewhispererSuggestionImportCount); - - if (payload.CodewhispererTotalShownTime.HasValue) - { - datum.AddMetadata("codewhispererTotalShownTime", payload.CodewhispererTotalShownTime.Value); - } - - datum.AddMetadata("codewhispererTriggerCharacter", payload.CodewhispererTriggerCharacter); - - datum.AddMetadata("codewhispererTypeaheadLength", payload.CodewhispererTypeaheadLength); - - if (payload.CodewhispererTimeSinceLastDocumentChange.HasValue) - { - datum.AddMetadata("codewhispererTimeSinceLastDocumentChange", payload.CodewhispererTimeSinceLastDocumentChange.Value); - } - - if (payload.CodewhispererTimeSinceLastUserDecision.HasValue) - { - datum.AddMetadata("codewhispererTimeSinceLastUserDecision", payload.CodewhispererTimeSinceLastUserDecision.Value); - } - - if (payload.CodewhispererTimeToFirstRecommendation.HasValue) - { - datum.AddMetadata("codewhispererTimeToFirstRecommendation", payload.CodewhispererTimeToFirstRecommendation.Value); - } - - if (payload.CodewhispererPreviousSuggestionState.HasValue) - { - datum.AddMetadata("codewhispererPreviousSuggestionState", payload.CodewhispererPreviousSuggestionState.Value); - } - - datum.AddMetadata("codewhispererSuggestionState", payload.CodewhispererSuggestionState); - - if (payload.CodewhispererClassifierResult.HasValue) - { - datum.AddMetadata("codewhispererClassifierResult", payload.CodewhispererClassifierResult.Value); - } - - if (payload.CodewhispererSupplementalContextTimeout.HasValue) - { - datum.AddMetadata("codewhispererSupplementalContextTimeout", payload.CodewhispererSupplementalContextTimeout.Value); - } - - if (payload.CodewhispererSupplementalContextIsUtg.HasValue) - { - datum.AddMetadata("codewhispererSupplementalContextIsUtg", payload.CodewhispererSupplementalContextIsUtg.Value); - } - - if (payload.CodewhispererSupplementalContextLength.HasValue) - { - datum.AddMetadata("codewhispererSupplementalContextLength", payload.CodewhispererSupplementalContextLength.Value); - } - - if (payload.CodewhispererClassifierThreshold.HasValue) - { - datum.AddMetadata("codewhispererClassifierThreshold", payload.CodewhispererClassifierThreshold.Value); - } - - datum.AddMetadata("codewhispererUserGroup", payload.CodewhispererUserGroup); - - datum = datum.InvokeTransform(transformDatum); + datum = datum.InvokeTransform(transformDatum); metrics.Data.Add(datum); telemetryLogger.Record(metrics); @@ -14931,8 +14750,8 @@ public static void RecordCodewhispererUserTriggerDecision(this ITelemetryLogger } /// Records Telemetry Event: - /// Percentage of user modifications for the selected suggestion until a fixed period of time - public static void RecordCodewhispererUserModification(this ITelemetryLogger telemetryLogger, CodewhispererUserModification payload, Func transformDatum = null) + /// User asked to regenerate code generation with a comment + public static void RecordAmazonqIsProvideFeedbackForCodeGen(this ITelemetryLogger telemetryLogger, AmazonqIsProvideFeedbackForCodeGen payload, Func transformDatum = null) { try { @@ -14948,7 +14767,7 @@ public static void RecordCodewhispererUserModification(this ITelemetryLogger tel metrics.Data = new List(); var datum = new MetricDatum(); - datum.MetricName = "codewhisperer_userModification"; + datum.MetricName = "amazonq_isProvideFeedbackForCodeGen"; datum.Unit = Unit.None; datum.Passive = payload.Passive; if (payload.Value.HasValue) @@ -14973,30 +14792,9 @@ public static void RecordCodewhispererUserModification(this ITelemetryLogger tel } datum.AddMetadata("locale", payload.Locale); - datum.AddMetadata("codewhispererCompletionType", payload.CodewhispererCompletionType); - - datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); - - datum.AddMetadata("codewhispererModificationPercentage", payload.CodewhispererModificationPercentage); - - datum.AddMetadata("codewhispererRequestId", payload.CodewhispererRequestId); - - if (payload.CodewhispererRuntime.HasValue) - { - datum.AddMetadata("codewhispererRuntime", payload.CodewhispererRuntime.Value); - } - - datum.AddMetadata("codewhispererRuntimeSource", payload.CodewhispererRuntimeSource); - - datum.AddMetadata("codewhispererSessionId", payload.CodewhispererSessionId); - - datum.AddMetadata("codewhispererSuggestionIndex", payload.CodewhispererSuggestionIndex); - - datum.AddMetadata("codewhispererTriggerType", payload.CodewhispererTriggerType); - - datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); + datum.AddMetadata("enabled", payload.Enabled); - datum.AddMetadata("codewhispererUserGroup", payload.CodewhispererUserGroup); + datum.AddMetadata("amazonqConversationId", payload.AmazonqConversationId); datum = datum.InvokeTransform(transformDatum); @@ -15011,8 +14809,8 @@ public static void RecordCodewhispererUserModification(this ITelemetryLogger tel } /// Records Telemetry Event: - /// The duration from user last modification to the first recommendation shown in milliseconds - public static void RecordCodewhispererPerceivedLatency(this ITelemetryLogger telemetryLogger, CodewhispererPerceivedLatency payload, Func transformDatum = null) + /// User reviewed changes + public static void RecordAmazonqIsReviewedChanges(this ITelemetryLogger telemetryLogger, AmazonqIsReviewedChanges payload, Func transformDatum = null) { try { @@ -15028,7 +14826,7 @@ public static void RecordCodewhispererPerceivedLatency(this ITelemetryLogger tel metrics.Data = new List(); var datum = new MetricDatum(); - datum.MetricName = "codewhisperer_perceivedLatency"; + datum.MetricName = "amazonq_isReviewedChanges"; datum.Unit = Unit.None; datum.Passive = payload.Passive; if (payload.Value.HasValue) @@ -15053,19 +14851,9 @@ public static void RecordCodewhispererPerceivedLatency(this ITelemetryLogger tel } datum.AddMetadata("locale", payload.Locale); - datum.AddMetadata("codewhispererRequestId", payload.CodewhispererRequestId); - - datum.AddMetadata("codewhispererSessionId", payload.CodewhispererSessionId); - - datum.AddMetadata("codewhispererTriggerType", payload.CodewhispererTriggerType); - - datum.AddMetadata("codewhispererCompletionType", payload.CodewhispererCompletionType); - - datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); - - datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); + datum.AddMetadata("enabled", payload.Enabled); - datum.AddMetadata("codewhispererUserGroup", payload.CodewhispererUserGroup); + datum.AddMetadata("amazonqConversationId", payload.AmazonqConversationId); datum = datum.InvokeTransform(transformDatum); @@ -15080,8 +14868,8 @@ public static void RecordCodewhispererPerceivedLatency(this ITelemetryLogger tel } /// Records Telemetry Event: - /// The latency from each CodeWhisperer components in milliseconds - public static void RecordCodewhispererClientComponentLatency(this ITelemetryLogger telemetryLogger, CodewhispererClientComponentLatency payload, Func transformDatum = null) + /// User clicked on the thumbs up button to say that they are unsatisfied + public static void RecordAmazonqCodeGenerationThumbsUp(this ITelemetryLogger telemetryLogger, AmazonqCodeGenerationThumbsUp payload, Func transformDatum = null) { try { @@ -15097,8 +14885,8 @@ public static void RecordCodewhispererClientComponentLatency(this ITelemetryLogg metrics.Data = new List(); var datum = new MetricDatum(); - datum.MetricName = "codewhisperer_clientComponentLatency"; - datum.Unit = Unit.None; + datum.MetricName = "amazonq_codeGenerationThumbsUp"; + datum.Unit = Unit.Count; datum.Passive = payload.Passive; if (payload.Value.HasValue) { @@ -15122,31 +14910,7 @@ public static void RecordCodewhispererClientComponentLatency(this ITelemetryLogg } datum.AddMetadata("locale", payload.Locale); - datum.AddMetadata("codewhispererRequestId", payload.CodewhispererRequestId); - - datum.AddMetadata("codewhispererSessionId", payload.CodewhispererSessionId); - - datum.AddMetadata("codewhispererPreprocessingLatency", payload.CodewhispererPreprocessingLatency); - - datum.AddMetadata("codewhispererCredentialFetchingLatency", payload.CodewhispererCredentialFetchingLatency); - - datum.AddMetadata("codewhispererPostprocessingLatency", payload.CodewhispererPostprocessingLatency); - - datum.AddMetadata("codewhispererFirstCompletionLatency", payload.CodewhispererFirstCompletionLatency); - - datum.AddMetadata("codewhispererEndToEndLatency", payload.CodewhispererEndToEndLatency); - - datum.AddMetadata("codewhispererAllCompletionsLatency", payload.CodewhispererAllCompletionsLatency); - - datum.AddMetadata("codewhispererCompletionType", payload.CodewhispererCompletionType); - - datum.AddMetadata("codewhispererTriggerType", payload.CodewhispererTriggerType); - - datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); - - datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); - - datum.AddMetadata("codewhispererUserGroup", payload.CodewhispererUserGroup); + datum.AddMetadata("amazonqConversationId", payload.AmazonqConversationId); datum = datum.InvokeTransform(transformDatum); @@ -15161,8 +14925,8 @@ public static void RecordCodewhispererClientComponentLatency(this ITelemetryLogg } /// Records Telemetry Event: - /// Create an Amazon CodeCatalyst Dev Environment - public static void RecordCodecatalystCreateDevEnvironment(this ITelemetryLogger telemetryLogger, CodecatalystCreateDevEnvironment payload, Func transformDatum = null) + /// User clicked on the thumbs down button to say that they are unsatisfied + public static void RecordAmazonqCodeGenerationThumbsDown(this ITelemetryLogger telemetryLogger, AmazonqCodeGenerationThumbsDown payload, Func transformDatum = null) { try { @@ -15178,8 +14942,8 @@ public static void RecordCodecatalystCreateDevEnvironment(this ITelemetryLogger metrics.Data = new List(); var datum = new MetricDatum(); - datum.MetricName = "codecatalyst_createDevEnvironment"; - datum.Unit = Unit.None; + datum.MetricName = "amazonq_codeGenerationThumbsDown"; + datum.Unit = Unit.Count; datum.Passive = payload.Passive; if (payload.Value.HasValue) { @@ -15203,14 +14967,7 @@ public static void RecordCodecatalystCreateDevEnvironment(this ITelemetryLogger } datum.AddMetadata("locale", payload.Locale); - datum.AddMetadata("userId", payload.UserId); - - datum.AddMetadata("result", payload.Result); - - if (payload.CodecatalystCreateDevEnvironmentRepoType.HasValue) - { - datum.AddMetadata("codecatalyst_createDevEnvironmentRepoType", payload.CodecatalystCreateDevEnvironmentRepoType.Value); - } + datum.AddMetadata("amazonqConversationId", payload.AmazonqConversationId); datum = datum.InvokeTransform(transformDatum); @@ -15225,8 +14982,8 @@ public static void RecordCodecatalystCreateDevEnvironment(this ITelemetryLogger } /// Records Telemetry Event: - /// Update properties of a Amazon CodeCatalyst Dev Environment - public static void RecordCodecatalystUpdateDevEnvironmentSettings(this ITelemetryLogger telemetryLogger, CodecatalystUpdateDevEnvironmentSettings payload, Func transformDatum = null) + /// User clicked on the thumbs up button, to mention that they are satisfied + public static void RecordAmazonqApproachThumbsUp(this ITelemetryLogger telemetryLogger, AmazonqApproachThumbsUp payload, Func transformDatum = null) { try { @@ -15242,8 +14999,8 @@ public static void RecordCodecatalystUpdateDevEnvironmentSettings(this ITelemetr metrics.Data = new List(); var datum = new MetricDatum(); - datum.MetricName = "codecatalyst_updateDevEnvironmentSettings"; - datum.Unit = Unit.None; + datum.MetricName = "amazonq_approachThumbsUp"; + datum.Unit = Unit.Count; datum.Passive = payload.Passive; if (payload.Value.HasValue) { @@ -15267,11 +15024,7 @@ public static void RecordCodecatalystUpdateDevEnvironmentSettings(this ITelemetr } datum.AddMetadata("locale", payload.Locale); - datum.AddMetadata("userId", payload.UserId); - - datum.AddMetadata("result", payload.Result); - - datum.AddMetadata("codecatalyst_updateDevEnvironmentLocationType", payload.CodecatalystUpdateDevEnvironmentLocationType); + datum.AddMetadata("amazonqConversationId", payload.AmazonqConversationId); datum = datum.InvokeTransform(transformDatum); @@ -15286,8 +15039,8 @@ public static void RecordCodecatalystUpdateDevEnvironmentSettings(this ITelemetr } /// Records Telemetry Event: - /// Trigger a devfile update on a Amazon CodeCatalyst dev environment - public static void RecordCodecatalystUpdateDevfile(this ITelemetryLogger telemetryLogger, CodecatalystUpdateDevfile payload, Func transformDatum = null) + /// User clicked on the thumbs down button to say that they are unsatisfied + public static void RecordAmazonqApproachThumbsDown(this ITelemetryLogger telemetryLogger, AmazonqApproachThumbsDown payload, Func transformDatum = null) { try { @@ -15303,8 +15056,8 @@ public static void RecordCodecatalystUpdateDevfile(this ITelemetryLogger telemet metrics.Data = new List(); var datum = new MetricDatum(); - datum.MetricName = "codecatalyst_updateDevfile"; - datum.Unit = Unit.None; + datum.MetricName = "amazonq_approachThumbsDown"; + datum.Unit = Unit.Count; datum.Passive = payload.Passive; if (payload.Value.HasValue) { @@ -15328,9 +15081,7 @@ public static void RecordCodecatalystUpdateDevfile(this ITelemetryLogger telemet } datum.AddMetadata("locale", payload.Locale); - datum.AddMetadata("userId", payload.UserId); - - datum.AddMetadata("result", payload.Result); + datum.AddMetadata("amazonqConversationId", payload.AmazonqConversationId); datum = datum.InvokeTransform(transformDatum); @@ -15345,8 +15096,8 @@ public static void RecordCodecatalystUpdateDevfile(this ITelemetryLogger telemet } /// Records Telemetry Event: - /// Clone a Amazon CodeCatalyst code repository locally - public static void RecordCodecatalystLocalClone(this ITelemetryLogger telemetryLogger, CodecatalystLocalClone payload, Func transformDatum = null) + /// Percentage of user tokens against suggestions until 5 mins of time + public static void RecordCodewhispererCodePercentage(this ITelemetryLogger telemetryLogger, CodewhispererCodePercentage payload, Func transformDatum = null) { try { @@ -15362,7 +15113,7 @@ public static void RecordCodecatalystLocalClone(this ITelemetryLogger telemetryL metrics.Data = new List(); var datum = new MetricDatum(); - datum.MetricName = "codecatalyst_localClone"; + datum.MetricName = "codewhisperer_codePercentage"; datum.Unit = Unit.None; datum.Passive = payload.Passive; if (payload.Value.HasValue) @@ -15387,9 +15138,19 @@ public static void RecordCodecatalystLocalClone(this ITelemetryLogger telemetryL } datum.AddMetadata("locale", payload.Locale); - datum.AddMetadata("userId", payload.UserId); + datum.AddMetadata("codewhispererAcceptedTokens", payload.CodewhispererAcceptedTokens); - datum.AddMetadata("result", payload.Result); + datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); + + datum.AddMetadata("codewhispererPercentage", payload.CodewhispererPercentage); + + datum.AddMetadata("codewhispererTotalTokens", payload.CodewhispererTotalTokens); + + datum.AddMetadata("codewhispererUserGroup", payload.CodewhispererUserGroup); + + datum.AddMetadata("successCount", payload.SuccessCount); + + datum.AddMetadata("codewhispererCustomizationArn", payload.CodewhispererCustomizationArn); datum = datum.InvokeTransform(transformDatum); @@ -15404,8 +15165,8 @@ public static void RecordCodecatalystLocalClone(this ITelemetryLogger telemetryL } /// Records Telemetry Event: - /// Connect to a Amazon CodeCatalyst dev environment - public static void RecordCodecatalystConnect(this ITelemetryLogger telemetryLogger, CodecatalystConnect payload, Func transformDatum = null) + /// Client side invocation of the CodeWhisperer Security Scan + public static void RecordCodewhispererSecurityScan(this ITelemetryLogger telemetryLogger, CodewhispererSecurityScan payload, Func transformDatum = null) { try { @@ -15421,7 +15182,7 @@ public static void RecordCodecatalystConnect(this ITelemetryLogger telemetryLogg metrics.Data = new List(); var datum = new MetricDatum(); - datum.MetricName = "codecatalyst_connect"; + datum.MetricName = "codewhisperer_securityScan"; datum.Unit = Unit.None; datum.Passive = payload.Passive; if (payload.Value.HasValue) @@ -15446,41 +15207,79 @@ public static void RecordCodecatalystConnect(this ITelemetryLogger telemetryLogg } datum.AddMetadata("locale", payload.Locale); - datum.AddMetadata("userId", payload.UserId); - - datum.AddMetadata("result", payload.Result); + datum.AddMetadata("codewhispererCodeScanLines", payload.CodewhispererCodeScanLines); - datum = datum.InvokeTransform(transformDatum); + datum.AddMetadata("codewhispererCodeScanJobId", payload.CodewhispererCodeScanJobId); - metrics.Data.Add(datum); - telemetryLogger.Record(metrics); - } - catch (System.Exception e) - { - telemetryLogger.Logger.Error("Error recording telemetry event", e); - System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); - } - } - - /// Records Telemetry Event: - /// Workflow statistic for connecting to a dev environment - public static void RecordCodecatalystDevEnvironmentWorkflowStatistic(this ITelemetryLogger telemetryLogger, CodecatalystDevEnvironmentWorkflowStatistic payload, Func transformDatum = null) - { - try - { - var metrics = new Metrics(); - if (payload.CreatedOn.HasValue) + if (payload.CodewhispererCodeScanProjectBytes.HasValue) { - metrics.CreatedOn = payload.CreatedOn.Value; + datum.AddMetadata("codewhispererCodeScanProjectBytes", payload.CodewhispererCodeScanProjectBytes.Value); } - else + + datum.AddMetadata("codewhispererCodeScanSrcPayloadBytes", payload.CodewhispererCodeScanSrcPayloadBytes); + + if (payload.CodewhispererCodeScanBuildPayloadBytes.HasValue) { - metrics.CreatedOn = System.DateTime.Now; + datum.AddMetadata("codewhispererCodeScanBuildPayloadBytes", payload.CodewhispererCodeScanBuildPayloadBytes.Value); } - metrics.Data = new List(); + + datum.AddMetadata("codewhispererCodeScanSrcZipFileBytes", payload.CodewhispererCodeScanSrcZipFileBytes); + + if (payload.CodewhispererCodeScanBuildZipFileBytes.HasValue) + { + datum.AddMetadata("codewhispererCodeScanBuildZipFileBytes", payload.CodewhispererCodeScanBuildZipFileBytes.Value); + } + + datum.AddMetadata("codewhispererCodeScanTotalIssues", payload.CodewhispererCodeScanTotalIssues); + + if (payload.CodewhispererCodeScanIssuesWithFixes.HasValue) + { + datum.AddMetadata("codewhispererCodeScanIssuesWithFixes", payload.CodewhispererCodeScanIssuesWithFixes.Value); + } + + datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); + + datum.AddMetadata("contextTruncationDuration", payload.ContextTruncationDuration); + + datum.AddMetadata("artifactsUploadDuration", payload.ArtifactsUploadDuration); + + datum.AddMetadata("codeScanServiceInvocationsDuration", payload.CodeScanServiceInvocationsDuration); + + datum.AddMetadata("result", payload.Result); + + datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// Client side invocation of the CodeWhisperer service for suggestion + public static void RecordCodewhispererServiceInvocation(this ITelemetryLogger telemetryLogger, CodewhispererServiceInvocation payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); var datum = new MetricDatum(); - datum.MetricName = "codecatalyst_devEnvironmentWorkflowStatistic"; + datum.MetricName = "codewhisperer_serviceInvocation"; datum.Unit = Unit.None; datum.Passive = payload.Passive; if (payload.Value.HasValue) @@ -15505,13 +15304,2480 @@ public static void RecordCodecatalystDevEnvironmentWorkflowStatistic(this ITelem } datum.AddMetadata("locale", payload.Locale); - datum.AddMetadata("userId", payload.UserId); + if (payload.CodewhispererAutomatedTriggerType.HasValue) + { + datum.AddMetadata("codewhispererAutomatedTriggerType", payload.CodewhispererAutomatedTriggerType.Value); + } + + if (payload.CodewhispererCompletionType.HasValue) + { + datum.AddMetadata("codewhispererCompletionType", payload.CodewhispererCompletionType.Value); + } + + datum.AddMetadata("codewhispererCursorOffset", payload.CodewhispererCursorOffset); + + datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); + + if (payload.CodewhispererGettingStartedTask.HasValue) + { + datum.AddMetadata("codewhispererGettingStartedTask", payload.CodewhispererGettingStartedTask.Value); + } + + if (payload.CodewhispererLastSuggestionIndex.HasValue) + { + datum.AddMetadata("codewhispererLastSuggestionIndex", payload.CodewhispererLastSuggestionIndex.Value); + } + + datum.AddMetadata("codewhispererLineNumber", payload.CodewhispererLineNumber); + + datum.AddMetadata("codewhispererRequestId", payload.CodewhispererRequestId); + + if (payload.CodewhispererRuntime.HasValue) + { + datum.AddMetadata("codewhispererRuntime", payload.CodewhispererRuntime.Value); + } + + datum.AddMetadata("codewhispererRuntimeSource", payload.CodewhispererRuntimeSource); + + datum.AddMetadata("codewhispererSessionId", payload.CodewhispererSessionId); + + if (payload.CodewhispererSupplementalContextTimeout.HasValue) + { + datum.AddMetadata("codewhispererSupplementalContextTimeout", payload.CodewhispererSupplementalContextTimeout.Value); + } + + if (payload.CodewhispererSupplementalContextIsUtg.HasValue) + { + datum.AddMetadata("codewhispererSupplementalContextIsUtg", payload.CodewhispererSupplementalContextIsUtg.Value); + } + + if (payload.CodewhispererSupplementalContextLatency.HasValue) + { + datum.AddMetadata("codewhispererSupplementalContextLatency", payload.CodewhispererSupplementalContextLatency.Value); + } + + if (payload.CodewhispererSupplementalContextLength.HasValue) + { + datum.AddMetadata("codewhispererSupplementalContextLength", payload.CodewhispererSupplementalContextLength.Value); + } + + datum.AddMetadata("codewhispererTriggerType", payload.CodewhispererTriggerType); datum.AddMetadata("result", payload.Result); - datum.AddMetadata("codecatalyst_devEnvironmentWorkflowStep", payload.CodecatalystDevEnvironmentWorkflowStep); + datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); - datum.AddMetadata("codecatalyst_devEnvironmentWorkflowError", payload.CodecatalystDevEnvironmentWorkflowError); + if (payload.CodewhispererImportRecommendationEnabled.HasValue) + { + datum.AddMetadata("codewhispererImportRecommendationEnabled", payload.CodewhispererImportRecommendationEnabled.Value); + } + + datum.AddMetadata("codewhispererUserGroup", payload.CodewhispererUserGroup); + + datum.AddMetadata("codewhispererCustomizationArn", payload.CodewhispererCustomizationArn); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// Client side invocation blocked by another invocation in progress + public static void RecordCodewhispererBlockedInvocation(this ITelemetryLogger telemetryLogger, CodewhispererBlockedInvocation payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codewhisperer_blockedInvocation"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + if (payload.CodewhispererAutomatedTriggerType.HasValue) + { + datum.AddMetadata("codewhispererAutomatedTriggerType", payload.CodewhispererAutomatedTriggerType.Value); + } + + datum.AddMetadata("codewhispererCursorOffset", payload.CodewhispererCursorOffset); + + datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); + + datum.AddMetadata("codewhispererLineNumber", payload.CodewhispererLineNumber); + + datum.AddMetadata("codewhispererTriggerType", payload.CodewhispererTriggerType); + + datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// User acceptance or rejection of each suggestion returned by the CodeWhisperer service request + public static void RecordCodewhispererUserDecision(this ITelemetryLogger telemetryLogger, CodewhispererUserDecision payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codewhisperer_userDecision"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codewhispererCompletionType", payload.CodewhispererCompletionType); + + datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); + + if (payload.CodewhispererGettingStartedTask.HasValue) + { + datum.AddMetadata("codewhispererGettingStartedTask", payload.CodewhispererGettingStartedTask.Value); + } + + if (payload.CodewhispererPaginationProgress.HasValue) + { + datum.AddMetadata("codewhispererPaginationProgress", payload.CodewhispererPaginationProgress.Value); + } + + datum.AddMetadata("codewhispererRequestId", payload.CodewhispererRequestId); + + if (payload.CodewhispererRuntime.HasValue) + { + datum.AddMetadata("codewhispererRuntime", payload.CodewhispererRuntime.Value); + } + + datum.AddMetadata("codewhispererRuntimeSource", payload.CodewhispererRuntimeSource); + + datum.AddMetadata("codewhispererSessionId", payload.CodewhispererSessionId); + + datum.AddMetadata("codewhispererSuggestionIndex", payload.CodewhispererSuggestionIndex); + + datum.AddMetadata("codewhispererSuggestionReferenceCount", payload.CodewhispererSuggestionReferenceCount); + + datum.AddMetadata("codewhispererSuggestionReferences", payload.CodewhispererSuggestionReferences); + + if (payload.CodewhispererSuggestionImportCount.HasValue) + { + datum.AddMetadata("codewhispererSuggestionImportCount", payload.CodewhispererSuggestionImportCount.Value); + } + + datum.AddMetadata("codewhispererSuggestionState", payload.CodewhispererSuggestionState); + + if (payload.CodewhispererSupplementalContextTimeout.HasValue) + { + datum.AddMetadata("codewhispererSupplementalContextTimeout", payload.CodewhispererSupplementalContextTimeout.Value); + } + + if (payload.CodewhispererSupplementalContextIsUtg.HasValue) + { + datum.AddMetadata("codewhispererSupplementalContextIsUtg", payload.CodewhispererSupplementalContextIsUtg.Value); + } + + if (payload.CodewhispererSupplementalContextLength.HasValue) + { + datum.AddMetadata("codewhispererSupplementalContextLength", payload.CodewhispererSupplementalContextLength.Value); + } + + datum.AddMetadata("codewhispererTriggerType", payload.CodewhispererTriggerType); + + datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); + + datum.AddMetadata("codewhispererUserGroup", payload.CodewhispererUserGroup); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// User decision aggregated at trigger level + public static void RecordCodewhispererUserTriggerDecision(this ITelemetryLogger telemetryLogger, CodewhispererUserTriggerDecision payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codewhisperer_userTriggerDecision"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codewhispererSessionId", payload.CodewhispererSessionId); + + datum.AddMetadata("codewhispererFirstRequestId", payload.CodewhispererFirstRequestId); + + datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); + + if (payload.CodewhispererIsPartialAcceptance.HasValue) + { + datum.AddMetadata("codewhispererIsPartialAcceptance", payload.CodewhispererIsPartialAcceptance.Value); + } + + if (payload.CodewhispererPartialAcceptanceCount.HasValue) + { + datum.AddMetadata("codewhispererPartialAcceptanceCount", payload.CodewhispererPartialAcceptanceCount.Value); + } + + if (payload.CodewhispererCharactersAccepted.HasValue) + { + datum.AddMetadata("codewhispererCharactersAccepted", payload.CodewhispererCharactersAccepted.Value); + } + + if (payload.CodewhispererCharactersRecommended.HasValue) + { + datum.AddMetadata("codewhispererCharactersRecommended", payload.CodewhispererCharactersRecommended.Value); + } + + datum.AddMetadata("codewhispererCompletionType", payload.CodewhispererCompletionType); + + datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); + + if (payload.CodewhispererGettingStartedTask.HasValue) + { + datum.AddMetadata("codewhispererGettingStartedTask", payload.CodewhispererGettingStartedTask.Value); + } + + datum.AddMetadata("codewhispererTriggerType", payload.CodewhispererTriggerType); + + if (payload.CodewhispererAutomatedTriggerType.HasValue) + { + datum.AddMetadata("codewhispererAutomatedTriggerType", payload.CodewhispererAutomatedTriggerType.Value); + } + + datum.AddMetadata("codewhispererLineNumber", payload.CodewhispererLineNumber); + + datum.AddMetadata("codewhispererCursorOffset", payload.CodewhispererCursorOffset); + + datum.AddMetadata("codewhispererSuggestionCount", payload.CodewhispererSuggestionCount); + + datum.AddMetadata("codewhispererSuggestionImportCount", payload.CodewhispererSuggestionImportCount); + + if (payload.CodewhispererTotalShownTime.HasValue) + { + datum.AddMetadata("codewhispererTotalShownTime", payload.CodewhispererTotalShownTime.Value); + } + + datum.AddMetadata("codewhispererTriggerCharacter", payload.CodewhispererTriggerCharacter); + + datum.AddMetadata("codewhispererTypeaheadLength", payload.CodewhispererTypeaheadLength); + + if (payload.CodewhispererTimeSinceLastDocumentChange.HasValue) + { + datum.AddMetadata("codewhispererTimeSinceLastDocumentChange", payload.CodewhispererTimeSinceLastDocumentChange.Value); + } + + if (payload.CodewhispererTimeSinceLastUserDecision.HasValue) + { + datum.AddMetadata("codewhispererTimeSinceLastUserDecision", payload.CodewhispererTimeSinceLastUserDecision.Value); + } + + if (payload.CodewhispererTimeToFirstRecommendation.HasValue) + { + datum.AddMetadata("codewhispererTimeToFirstRecommendation", payload.CodewhispererTimeToFirstRecommendation.Value); + } + + if (payload.CodewhispererPreviousSuggestionState.HasValue) + { + datum.AddMetadata("codewhispererPreviousSuggestionState", payload.CodewhispererPreviousSuggestionState.Value); + } + + datum.AddMetadata("codewhispererSuggestionState", payload.CodewhispererSuggestionState); + + if (payload.CodewhispererClassifierResult.HasValue) + { + datum.AddMetadata("codewhispererClassifierResult", payload.CodewhispererClassifierResult.Value); + } + + if (payload.CodewhispererSupplementalContextTimeout.HasValue) + { + datum.AddMetadata("codewhispererSupplementalContextTimeout", payload.CodewhispererSupplementalContextTimeout.Value); + } + + if (payload.CodewhispererSupplementalContextIsUtg.HasValue) + { + datum.AddMetadata("codewhispererSupplementalContextIsUtg", payload.CodewhispererSupplementalContextIsUtg.Value); + } + + if (payload.CodewhispererSupplementalContextLength.HasValue) + { + datum.AddMetadata("codewhispererSupplementalContextLength", payload.CodewhispererSupplementalContextLength.Value); + } + + datum.AddMetadata("codewhispererSupplementalContextStrategyId", payload.CodewhispererSupplementalContextStrategyId); + + if (payload.CodewhispererClassifierThreshold.HasValue) + { + datum.AddMetadata("codewhispererClassifierThreshold", payload.CodewhispererClassifierThreshold.Value); + } + + datum.AddMetadata("codewhispererUserGroup", payload.CodewhispererUserGroup); + + datum.AddMetadata("codewhispererCustomizationArn", payload.CodewhispererCustomizationArn); + + datum.AddMetadata("codewhispererFeatureEvaluations", payload.CodewhispererFeatureEvaluations); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// This metric provides the particular language and task type selected by the user in the onboarding page by clicking on the Try Example button. + public static void RecordCodewhispererOnboardingClick(this ITelemetryLogger telemetryLogger, CodewhispererOnboardingClick payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codewhisperer_onboardingClick"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); + + datum.AddMetadata("codewhispererGettingStartedTask", payload.CodewhispererGettingStartedTask); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// Percentage of user modifications for the selected suggestion until a fixed period of time + public static void RecordCodewhispererUserModification(this ITelemetryLogger telemetryLogger, CodewhispererUserModification payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codewhisperer_userModification"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codewhispererCompletionType", payload.CodewhispererCompletionType); + + datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); + + datum.AddMetadata("codewhispererModificationPercentage", payload.CodewhispererModificationPercentage); + + datum.AddMetadata("codewhispererRequestId", payload.CodewhispererRequestId); + + if (payload.CodewhispererRuntime.HasValue) + { + datum.AddMetadata("codewhispererRuntime", payload.CodewhispererRuntime.Value); + } + + datum.AddMetadata("codewhispererRuntimeSource", payload.CodewhispererRuntimeSource); + + datum.AddMetadata("codewhispererSessionId", payload.CodewhispererSessionId); + + datum.AddMetadata("codewhispererSuggestionIndex", payload.CodewhispererSuggestionIndex); + + datum.AddMetadata("codewhispererTriggerType", payload.CodewhispererTriggerType); + + datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); + + datum.AddMetadata("codewhispererUserGroup", payload.CodewhispererUserGroup); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// The duration from user last modification to the first recommendation shown in milliseconds + public static void RecordCodewhispererPerceivedLatency(this ITelemetryLogger telemetryLogger, CodewhispererPerceivedLatency payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codewhisperer_perceivedLatency"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codewhispererRequestId", payload.CodewhispererRequestId); + + datum.AddMetadata("codewhispererSessionId", payload.CodewhispererSessionId); + + datum.AddMetadata("codewhispererTriggerType", payload.CodewhispererTriggerType); + + datum.AddMetadata("codewhispererCompletionType", payload.CodewhispererCompletionType); + + datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); + + datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); + + datum.AddMetadata("codewhispererUserGroup", payload.CodewhispererUserGroup); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// The latency from each CodeWhisperer components in milliseconds + public static void RecordCodewhispererClientComponentLatency(this ITelemetryLogger telemetryLogger, CodewhispererClientComponentLatency payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codewhisperer_clientComponentLatency"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codewhispererRequestId", payload.CodewhispererRequestId); + + datum.AddMetadata("codewhispererSessionId", payload.CodewhispererSessionId); + + datum.AddMetadata("codewhispererPreprocessingLatency", payload.CodewhispererPreprocessingLatency); + + datum.AddMetadata("codewhispererCredentialFetchingLatency", payload.CodewhispererCredentialFetchingLatency); + + datum.AddMetadata("codewhispererPostprocessingLatency", payload.CodewhispererPostprocessingLatency); + + datum.AddMetadata("codewhispererFirstCompletionLatency", payload.CodewhispererFirstCompletionLatency); + + datum.AddMetadata("codewhispererEndToEndLatency", payload.CodewhispererEndToEndLatency); + + datum.AddMetadata("codewhispererAllCompletionsLatency", payload.CodewhispererAllCompletionsLatency); + + datum.AddMetadata("codewhispererCompletionType", payload.CodewhispererCompletionType); + + datum.AddMetadata("codewhispererTriggerType", payload.CodewhispererTriggerType); + + datum.AddMetadata("codewhispererLanguage", payload.CodewhispererLanguage); + + datum.AddMetadata("credentialStartUrl", payload.CredentialStartUrl); + + datum.AddMetadata("codewhispererUserGroup", payload.CodewhispererUserGroup); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// Create an Amazon CodeCatalyst Dev Environment + public static void RecordCodecatalystCreateDevEnvironment(this ITelemetryLogger telemetryLogger, CodecatalystCreateDevEnvironment payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codecatalyst_createDevEnvironment"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("userId", payload.UserId); + + datum.AddMetadata("result", payload.Result); + + if (payload.CodecatalystCreateDevEnvironmentRepoType.HasValue) + { + datum.AddMetadata("codecatalyst_createDevEnvironmentRepoType", payload.CodecatalystCreateDevEnvironmentRepoType.Value); + } + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// Update properties of a Amazon CodeCatalyst Dev Environment + public static void RecordCodecatalystUpdateDevEnvironmentSettings(this ITelemetryLogger telemetryLogger, CodecatalystUpdateDevEnvironmentSettings payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codecatalyst_updateDevEnvironmentSettings"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("userId", payload.UserId); + + datum.AddMetadata("result", payload.Result); + + datum.AddMetadata("codecatalyst_updateDevEnvironmentLocationType", payload.CodecatalystUpdateDevEnvironmentLocationType); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// Trigger a devfile update on a Amazon CodeCatalyst dev environment + public static void RecordCodecatalystUpdateDevfile(this ITelemetryLogger telemetryLogger, CodecatalystUpdateDevfile payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codecatalyst_updateDevfile"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("userId", payload.UserId); + + datum.AddMetadata("result", payload.Result); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// Clone a Amazon CodeCatalyst code repository locally + public static void RecordCodecatalystLocalClone(this ITelemetryLogger telemetryLogger, CodecatalystLocalClone payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codecatalyst_localClone"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("userId", payload.UserId); + + datum.AddMetadata("result", payload.Result); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// Connect to a Amazon CodeCatalyst dev environment + public static void RecordCodecatalystConnect(this ITelemetryLogger telemetryLogger, CodecatalystConnect payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codecatalyst_connect"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("userId", payload.UserId); + + datum.AddMetadata("result", payload.Result); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// Workflow statistic for connecting to a dev environment + public static void RecordCodecatalystDevEnvironmentWorkflowStatistic(this ITelemetryLogger telemetryLogger, CodecatalystDevEnvironmentWorkflowStatistic payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codecatalyst_devEnvironmentWorkflowStatistic"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("userId", payload.UserId); + + datum.AddMetadata("result", payload.Result); + + datum.AddMetadata("codecatalyst_devEnvironmentWorkflowStep", payload.CodecatalystDevEnvironmentWorkflowStep); + + datum.AddMetadata("codecatalyst_devEnvironmentWorkflowError", payload.CodecatalystDevEnvironmentWorkflowError); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// We want to log the total run time in the users experience for the IDE. The total runtime should end when all API's have finished running and the users is prompted for next step actions. + public static void RecordCodeTransformTotalRunTime(this ITelemetryLogger telemetryLogger, CodeTransformTotalRunTime payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_totalRunTime"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformRunTimeLatency", payload.CodeTransformRunTimeLatency); + + datum.AddMetadata("codeTransformResultStatusMessage", payload.CodeTransformResultStatusMessage); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// The code transform button in the devtools to initiate the pre transform user modal window. + public static void RecordCodeTransformIsDoubleClickedToTriggerUserModal(this ITelemetryLogger telemetryLogger, CodeTransformIsDoubleClickedToTriggerUserModal payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_isDoubleClickedToTriggerUserModal"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformStartSrcComponents", payload.CodeTransformStartSrcComponents); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// The code transform button in the devtools to initiate the job but there is a validation error. + public static void RecordCodeTransformIsDoubleClickedToTriggerInvalidProject(this ITelemetryLogger telemetryLogger, CodeTransformIsDoubleClickedToTriggerInvalidProject payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_isDoubleClickedToTriggerInvalidProject"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformPreValidationError", payload.CodeTransformPreValidationError); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("result", payload.Result); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// The user initiates a transform job from the pre transform user modal window. + public static void RecordCodeTransformJobIsStartedFromUserPopupClick(this ITelemetryLogger telemetryLogger, CodeTransformJobIsStartedFromUserPopupClick payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_jobIsStartedFromUserPopupClick"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// The user was previously running a transformation and came back to IDE to see it still running + public static void RecordCodeTransformJobIsResumedAfterIdeClose(this ITelemetryLogger telemetryLogger, CodeTransformJobIsResumedAfterIdeClose payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_jobIsResumedAfterIdeClose"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformJobId", payload.CodeTransformJobId); + + datum.AddMetadata("codeTransformStatus", payload.CodeTransformStatus); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// The user closes their IDE and stops viewing the transformation. + public static void RecordCodeTransformJobIsClosedDuringIdeRun(this ITelemetryLogger telemetryLogger, CodeTransformJobIsClosedDuringIdeRun payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_jobIsClosedDuringIdeRun"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformJobId", payload.CodeTransformJobId); + + datum.AddMetadata("codeTransformStatus", payload.CodeTransformStatus); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// The user initiates a transform job from Amazon Q chat prompt. + public static void RecordCodeTransformJobIsStartedFromChatPrompt(this ITelemetryLogger telemetryLogger, CodeTransformJobIsStartedFromChatPrompt payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_jobIsStartedFromChatPrompt"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// The code transform button to initiate the pre transform user modal. + public static void RecordCodeTransformJobIsCanceledFromUserPopupClick(this ITelemetryLogger telemetryLogger, CodeTransformJobIsCanceledFromUserPopupClick payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_jobIsCanceledFromUserPopupClick"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// After modal validation of inputs, code execution will start and we will fire this event. + public static void RecordCodeTransformJobStartedCompleteFromPopupDialog(this ITelemetryLogger telemetryLogger, CodeTransformJobStartedCompleteFromPopupDialog payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_jobStartedCompleteFromPopupDialog"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformJavaSourceVersionsAllowed", payload.CodeTransformJavaSourceVersionsAllowed); + + datum.AddMetadata("codeTransformJavaTargetVersionsAllowed", payload.CodeTransformJavaTargetVersionsAllowed); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// During the transformation progress, log the status steps returning from the API. + public static void RecordCodeTransformJobStatusChanged(this ITelemetryLogger telemetryLogger, CodeTransformJobStatusChanged payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_jobStatusChanged"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformJobId", payload.CodeTransformJobId); + + datum.AddMetadata("codeTransformStatus", payload.CodeTransformStatus); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// Fire a change event when users select a new configuration/module file from the dropdown. + public static void RecordCodeTransformConfigurationFileSelectedChanged(this ITelemetryLogger telemetryLogger, CodeTransformConfigurationFileSelectedChanged payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_configurationFileSelectedChanged"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// After a job is running the user has the ability to cancel the job. + public static void RecordCodeTransformJobIsCancelledByUser(this ITelemetryLogger telemetryLogger, CodeTransformJobIsCancelledByUser payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_jobIsCancelledByUser"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformCancelSrcComponents", payload.CodeTransformCancelSrcComponents); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformRuntimeError", payload.CodeTransformRuntimeError); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// A timestamp for when the job is ending upload zip contents + public static void RecordCodeTransformJobCreateZipEndTime(this ITelemetryLogger telemetryLogger, CodeTransformJobCreateZipEndTime payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_jobCreateZipEndTime"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformTotalByteSize", payload.CodeTransformTotalByteSize); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformRunTimeLatency", payload.CodeTransformRunTimeLatency); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// A timestamp for when the job is ending download zip contents + public static void RecordCodeTransformJobArtifactDownloadAndDeserializeTime(this ITelemetryLogger telemetryLogger, CodeTransformJobArtifactDownloadAndDeserializeTime payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_jobArtifactDownloadAndDeserializeTime"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformJobId", payload.CodeTransformJobId); + + datum.AddMetadata("codeTransformTotalByteSize", payload.CodeTransformTotalByteSize); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformRunTimeLatency", payload.CodeTransformRunTimeLatency); + + datum.AddMetadata("codeTransformRuntimeError", payload.CodeTransformRuntimeError); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// An interactivity measured when users click to view diff results. + public static void RecordCodeTransformVcsViewerClicked(this ITelemetryLogger telemetryLogger, CodeTransformVcsViewerClicked payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_vcsViewerClicked"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformVCSViewerSrcComponents", payload.CodeTransformVCSViewerSrcComponents); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformJobId", payload.CodeTransformJobId); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// A timestamp for when the diff view is being displayed to the user. + public static void RecordCodeTransformVcsDiffViewerVisible(this ITelemetryLogger telemetryLogger, CodeTransformVcsDiffViewerVisible payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_vcsDiffViewerVisible"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformJobId", payload.CodeTransformJobId); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// An interactivity measured when users cancel a patch view. + public static void RecordCodeTransformVcsViewerCanceled(this ITelemetryLogger telemetryLogger, CodeTransformVcsViewerCanceled payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_vcsViewerCanceled"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformPatchViewerCancelSrcComponents", payload.CodeTransformPatchViewerCancelSrcComponents); + + datum.AddMetadata("codeTransformRuntimeError", payload.CodeTransformRuntimeError); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformJobId", payload.CodeTransformJobId); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// An interactivity measured when users submit their patch view results. + public static void RecordCodeTransformVcsViewerSubmitted(this ITelemetryLogger telemetryLogger, CodeTransformVcsViewerSubmitted payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_vcsViewerSubmitted"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformJobId", payload.CodeTransformJobId); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// A general logging measure for all client side API's latency. + public static void RecordCodeTransformLogApiLatency(this ITelemetryLogger telemetryLogger, CodeTransformLogApiLatency payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_logApiLatency"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformApiNames", payload.CodeTransformApiNames); + + datum.AddMetadata("codeTransformRunTimeLatency", payload.CodeTransformRunTimeLatency); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformRequestId", payload.CodeTransformRequestId); + + datum.AddMetadata("codeTransformJobId", payload.CodeTransformJobId); + + datum.AddMetadata("codeTransformUploadId", payload.CodeTransformUploadId); + + if (payload.CodeTransformTotalByteSize.HasValue) + { + datum.AddMetadata("codeTransformTotalByteSize", payload.CodeTransformTotalByteSize.Value); + } + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// A general logging measure for all client side API errors. + public static void RecordCodeTransformLogGeneralError(this ITelemetryLogger telemetryLogger, CodeTransformLogGeneralError payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_logGeneralError"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformApiErrorMessage", payload.CodeTransformApiErrorMessage); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformJobId", payload.CodeTransformJobId); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// A general logging measure for all client side API errors. + public static void RecordCodeTransformLogApiError(this ITelemetryLogger telemetryLogger, CodeTransformLogApiError payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_logApiError"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformApiErrorMessage", payload.CodeTransformApiErrorMessage); + + datum.AddMetadata("codeTransformApiNames", payload.CodeTransformApiNames); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformRequestId", payload.CodeTransformRequestId); + + datum.AddMetadata("codeTransformJobId", payload.CodeTransformJobId); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// The repo copies over at least one dependency successfully. + public static void RecordCodeTransformDependenciesCopied(this ITelemetryLogger telemetryLogger, CodeTransformDependenciesCopied payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_dependenciesCopied"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum = datum.InvokeTransform(transformDatum); + + metrics.Data.Add(datum); + telemetryLogger.Record(metrics); + } + catch (System.Exception e) + { + telemetryLogger.Logger.Error("Error recording telemetry event", e); + System.Diagnostics.Debug.Assert(false, "Error Recording Telemetry"); + } + } + + /// Records Telemetry Event: + /// The maven command build failed. + public static void RecordCodeTransformMvnBuildFailed(this ITelemetryLogger telemetryLogger, CodeTransformMvnBuildFailed payload, Func transformDatum = null) + { + try + { + var metrics = new Metrics(); + if (payload.CreatedOn.HasValue) + { + metrics.CreatedOn = payload.CreatedOn.Value; + } + else + { + metrics.CreatedOn = System.DateTime.Now; + } + metrics.Data = new List(); + + var datum = new MetricDatum(); + datum.MetricName = "codeTransform_mvnBuildFailed"; + datum.Unit = Unit.None; + datum.Passive = payload.Passive; + if (payload.Value.HasValue) + { + datum.Value = payload.Value.Value; + } + else + { + datum.Value = 1; + } + datum.AddMetadata("awsAccount", payload.AwsAccount); + datum.AddMetadata("awsRegion", payload.AwsRegion); + datum.AddMetadata("reason", payload.Reason); + datum.AddMetadata("errorCode", payload.ErrorCode); + datum.AddMetadata("causedBy", payload.CausedBy); + datum.AddMetadata("httpStatusCode", payload.HttpStatusCode); + datum.AddMetadata("requestId", payload.RequestId); + datum.AddMetadata("requestServiceType", payload.RequestServiceType); + if (payload.Duration.HasValue) + { + datum.AddMetadata("duration", payload.Duration.Value); + } + datum.AddMetadata("locale", payload.Locale); + + datum.AddMetadata("codeTransformSessionId", payload.CodeTransformSessionId); + + datum.AddMetadata("codeTransformMavenBuildCommand", payload.CodeTransformMavenBuildCommand); datum = datum.InvokeTransform(transformDatum); @@ -15746,6 +18012,15 @@ public struct Component /// infobar public static readonly Component Infobar = new Component("infobar"); + /// hover + public static readonly Component Hover = new Component("hover"); + + /// webview + public static readonly Component Webview = new Component("webview"); + + /// quickfix + public static readonly Component Quickfix = new Component("quickfix"); + public Component(string value) { this._value = value; @@ -16031,7 +18306,262 @@ public struct CredentialSourceId /// other public static readonly CredentialSourceId Other = new CredentialSourceId("other"); - public CredentialSourceId(string value) + public CredentialSourceId(string value) + { + this._value = value; + } + + public override string ToString() + { + return this._value; + } + } + + /// Metric field type + /// The type of credential that was selected + public struct CredentialType + { + + private string _value; + + /// staticProfile + public static readonly CredentialType StaticProfile = new CredentialType("staticProfile"); + + /// staticSessionProfile + public static readonly CredentialType StaticSessionProfile = new CredentialType("staticSessionProfile"); + + /// credentialProcessProfile + public static readonly CredentialType CredentialProcessProfile = new CredentialType("credentialProcessProfile"); + + /// assumeRoleProfile + public static readonly CredentialType AssumeRoleProfile = new CredentialType("assumeRoleProfile"); + + /// assumeMfaRoleProfile + public static readonly CredentialType AssumeMfaRoleProfile = new CredentialType("assumeMfaRoleProfile"); + + /// assumeSamlRoleProfile + public static readonly CredentialType AssumeSamlRoleProfile = new CredentialType("assumeSamlRoleProfile"); + + /// ssoProfile + public static readonly CredentialType SsoProfile = new CredentialType("ssoProfile"); + + /// ecsMetatdata + public static readonly CredentialType EcsMetatdata = new CredentialType("ecsMetatdata"); + + /// ec2Metadata + public static readonly CredentialType Ec2Metadata = new CredentialType("ec2Metadata"); + + /// bearerToken + public static readonly CredentialType BearerToken = new CredentialType("bearerToken"); + + /// other + public static readonly CredentialType Other = new CredentialType("other"); + + public CredentialType(string value) + { + this._value = value; + } + + public override string ToString() + { + return this._value; + } + } + + /// Metric field type + /// How the database credentials are being retrieved + public struct DatabaseCredentials + { + + private string _value; + + /// IAM + public static readonly DatabaseCredentials IAM = new DatabaseCredentials("IAM"); + + /// SecretsManager + public static readonly DatabaseCredentials SecretsManager = new DatabaseCredentials("SecretsManager"); + + public DatabaseCredentials(string value) + { + this._value = value; + } + + public override string ToString() + { + return this._value; + } + } + + /// Metric field type + /// The type of an SQS Queue + public struct SqsQueueType + { + + private string _value; + + /// standard + public static readonly SqsQueueType Standard = new SqsQueueType("standard"); + + /// fifo + public static readonly SqsQueueType Fifo = new SqsQueueType("fifo"); + + public SqsQueueType(string value) + { + this._value = value; + } + + public override string ToString() + { + return this._value; + } + } + + /// Metric field type + /// Dialog open trigger source location + public struct InsightsDialogOpenSource + { + + private string _value; + + /// explorer + public static readonly InsightsDialogOpenSource Explorer = new InsightsDialogOpenSource("explorer"); + + /// resultsWindow + public static readonly InsightsDialogOpenSource ResultsWindow = new InsightsDialogOpenSource("resultsWindow"); + + /// logGroup + public static readonly InsightsDialogOpenSource LogGroup = new InsightsDialogOpenSource("logGroup"); + + public InsightsDialogOpenSource(string value) + { + this._value = value; + } + + public override string ToString() + { + return this._value; + } + } + + /// Metric field type + /// User-selected time range type while starting an insights query + public struct InsightsQueryTimeType + { + + private string _value; + + /// relative + public static readonly InsightsQueryTimeType Relative = new InsightsQueryTimeType("relative"); + + /// absolute + public static readonly InsightsQueryTimeType Absolute = new InsightsQueryTimeType("absolute"); + + public InsightsQueryTimeType(string value) + { + this._value = value; + } + + public override string ToString() + { + return this._value; + } + } + + /// Metric field type + /// User-specified search string type while starting an insights query + public struct InsightsQueryStringType + { + + private string _value; + + /// insights + public static readonly InsightsQueryStringType Insights = new InsightsQueryStringType("insights"); + + /// searchTerm + public static readonly InsightsQueryStringType SearchTerm = new InsightsQueryStringType("searchTerm"); + + public InsightsQueryStringType(string value) + { + this._value = value; + } + + public override string ToString() + { + return this._value; + } + } + + /// Metric field type + /// Ways to connect to an EC2 Instance + public struct Ec2ConnectionType + { + + private string _value; + + /// remoteDesktop + public static readonly Ec2ConnectionType RemoteDesktop = new Ec2ConnectionType("remoteDesktop"); + + /// ssh + public static readonly Ec2ConnectionType Ssh = new Ec2ConnectionType("ssh"); + + /// scp + public static readonly Ec2ConnectionType Scp = new Ec2ConnectionType("scp"); + + public Ec2ConnectionType(string value) + { + this._value = value; + } + + public override string ToString() + { + return this._value; + } + } + + /// Metric field type + /// Actions that can affect an EC2 Instance state + public struct Ec2InstanceState + { + + private string _value; + + /// start + public static readonly Ec2InstanceState Start = new Ec2InstanceState("start"); + + /// stop + public static readonly Ec2InstanceState Stop = new Ec2InstanceState("stop"); + + /// reboot + public static readonly Ec2InstanceState Reboot = new Ec2InstanceState("reboot"); + + /// terminate + public static readonly Ec2InstanceState Terminate = new Ec2InstanceState("terminate"); + + public Ec2InstanceState(string value) + { + this._value = value; + } + + public override string ToString() + { + return this._value; + } + } + + /// Metric field type + /// Infrastructure type used by ECS tasks and services + public struct EcsLaunchType + { + + private string _value; + + /// ec2 + public static readonly EcsLaunchType Ec2 = new EcsLaunchType("ec2"); + + /// fargate + public static readonly EcsLaunchType Fargate = new EcsLaunchType("fargate"); + + public EcsLaunchType(string value) { this._value = value; } @@ -16043,46 +18573,43 @@ public override string ToString() } /// Metric field type - /// The type of credential that was selected - public struct CredentialType + /// Type of execution selected while running the execute command + public struct EcsExecuteCommandType { private string _value; - /// staticProfile - public static readonly CredentialType StaticProfile = new CredentialType("staticProfile"); - - /// staticSessionProfile - public static readonly CredentialType StaticSessionProfile = new CredentialType("staticSessionProfile"); - - /// credentialProcessProfile - public static readonly CredentialType CredentialProcessProfile = new CredentialType("credentialProcessProfile"); - - /// assumeRoleProfile - public static readonly CredentialType AssumeRoleProfile = new CredentialType("assumeRoleProfile"); - - /// assumeMfaRoleProfile - public static readonly CredentialType AssumeMfaRoleProfile = new CredentialType("assumeMfaRoleProfile"); + /// command + public static readonly EcsExecuteCommandType Command = new EcsExecuteCommandType("command"); - /// assumeSamlRoleProfile - public static readonly CredentialType AssumeSamlRoleProfile = new CredentialType("assumeSamlRoleProfile"); + /// shell + public static readonly EcsExecuteCommandType Shell = new EcsExecuteCommandType("shell"); - /// ssoProfile - public static readonly CredentialType SsoProfile = new CredentialType("ssoProfile"); + public EcsExecuteCommandType(string value) + { + this._value = value; + } - /// ecsMetatdata - public static readonly CredentialType EcsMetatdata = new CredentialType("ecsMetatdata"); + public override string ToString() + { + return this._value; + } + } + + /// Metric field type + /// The source content specified in the ECR deployment request + public struct EcrDeploySource + { - /// ec2Metadata - public static readonly CredentialType Ec2Metadata = new CredentialType("ec2Metadata"); + private string _value; - /// bearerToken - public static readonly CredentialType BearerToken = new CredentialType("bearerToken"); + /// dockerfile + public static readonly EcrDeploySource Dockerfile = new EcrDeploySource("dockerfile"); - /// other - public static readonly CredentialType Other = new CredentialType("other"); + /// tag + public static readonly EcrDeploySource Tag = new EcrDeploySource("tag"); - public CredentialType(string value) + public EcrDeploySource(string value) { this._value = value; } @@ -16094,19 +18621,19 @@ public override string ToString() } /// Metric field type - /// How the database credentials are being retrieved - public struct DatabaseCredentials + /// The type of fetch being performed + public struct DynamoDbFetchType { private string _value; - /// IAM - public static readonly DatabaseCredentials IAM = new DatabaseCredentials("IAM"); + /// scan + public static readonly DynamoDbFetchType Scan = new DynamoDbFetchType("scan"); - /// SecretsManager - public static readonly DatabaseCredentials SecretsManager = new DatabaseCredentials("SecretsManager"); + /// query + public static readonly DynamoDbFetchType Query = new DynamoDbFetchType("query"); - public DatabaseCredentials(string value) + public DynamoDbFetchType(string value) { this._value = value; } @@ -16118,19 +18645,22 @@ public override string ToString() } /// Metric field type - /// The type of an SQS Queue - public struct SqsQueueType + /// The type of index being hit for the query/scan operation + public struct DynamoDbIndexType { private string _value; - /// standard - public static readonly SqsQueueType Standard = new SqsQueueType("standard"); + /// primary + public static readonly DynamoDbIndexType Primary = new DynamoDbIndexType("primary"); - /// fifo - public static readonly SqsQueueType Fifo = new SqsQueueType("fifo"); + /// localSecondary + public static readonly DynamoDbIndexType LocalSecondary = new DynamoDbIndexType("localSecondary"); - public SqsQueueType(string value) + /// globalSecondary + public static readonly DynamoDbIndexType GlobalSecondary = new DynamoDbIndexType("globalSecondary"); + + public DynamoDbIndexType(string value) { this._value = value; } @@ -16142,22 +18672,22 @@ public override string ToString() } /// Metric field type - /// Dialog open trigger source location - public struct InsightsDialogOpenSource + /// The type of DynamoDB entity referenced by a metric or operation + public struct DynamoDbTarget { private string _value; - /// explorer - public static readonly InsightsDialogOpenSource Explorer = new InsightsDialogOpenSource("explorer"); + /// table + public static readonly DynamoDbTarget Table = new DynamoDbTarget("table"); - /// resultsWindow - public static readonly InsightsDialogOpenSource ResultsWindow = new InsightsDialogOpenSource("resultsWindow"); + /// tableProperties + public static readonly DynamoDbTarget TableProperties = new DynamoDbTarget("tableProperties"); - /// logGroup - public static readonly InsightsDialogOpenSource LogGroup = new InsightsDialogOpenSource("logGroup"); + /// tableStream + public static readonly DynamoDbTarget TableStream = new DynamoDbTarget("tableStream"); - public InsightsDialogOpenSource(string value) + public DynamoDbTarget(string value) { this._value = value; } @@ -16169,19 +18699,22 @@ public override string ToString() } /// Metric field type - /// User-selected time range type while starting an insights query - public struct InsightsQueryTimeType + /// The dynamic resource operation being executed + public struct DynamicResourceOperation { private string _value; - /// relative - public static readonly InsightsQueryTimeType Relative = new InsightsQueryTimeType("relative"); + /// Create + public static readonly DynamicResourceOperation Create = new DynamicResourceOperation("Create"); - /// absolute - public static readonly InsightsQueryTimeType Absolute = new InsightsQueryTimeType("absolute"); + /// Update + public static readonly DynamicResourceOperation Update = new DynamicResourceOperation("Update"); - public InsightsQueryTimeType(string value) + /// Delete + public static readonly DynamicResourceOperation Delete = new DynamicResourceOperation("Delete"); + + public DynamicResourceOperation(string value) { this._value = value; } @@ -16193,19 +18726,19 @@ public override string ToString() } /// Metric field type - /// User-specified search string type while starting an insights query - public struct InsightsQueryStringType + /// The experiment action taken action taken + public struct ExperimentState { private string _value; - /// insights - public static readonly InsightsQueryStringType Insights = new InsightsQueryStringType("insights"); + /// activated + public static readonly ExperimentState Activated = new ExperimentState("activated"); - /// searchTerm - public static readonly InsightsQueryStringType SearchTerm = new InsightsQueryStringType("searchTerm"); + /// deactivated + public static readonly ExperimentState Deactivated = new ExperimentState("deactivated"); - public InsightsQueryStringType(string value) + public ExperimentState(string value) { this._value = value; } @@ -16217,22 +18750,28 @@ public override string ToString() } /// Metric field type - /// Ways to connect to an EC2 Instance - public struct Ec2ConnectionType + /// The tool being installed + public struct ToolId { private string _value; - /// remoteDesktop - public static readonly Ec2ConnectionType RemoteDesktop = new Ec2ConnectionType("remoteDesktop"); + /// session-manager-plugin + public static readonly ToolId Sessionmanagerplugin = new ToolId("session-manager-plugin"); - /// ssh - public static readonly Ec2ConnectionType Ssh = new Ec2ConnectionType("ssh"); + /// dotnet-lambda-deploy + public static readonly ToolId Dotnetlambdadeploy = new ToolId("dotnet-lambda-deploy"); - /// scp - public static readonly Ec2ConnectionType Scp = new Ec2ConnectionType("scp"); + /// dotnet-deploy-cli + public static readonly ToolId Dotnetdeploycli = new ToolId("dotnet-deploy-cli"); - public Ec2ConnectionType(string value) + /// aws-cli + public static readonly ToolId Awscli = new ToolId("aws-cli"); + + /// sam-cli + public static readonly ToolId Samcli = new ToolId("sam-cli"); + + public ToolId(string value) { this._value = value; } @@ -16244,25 +18783,31 @@ public override string ToString() } /// Metric field type - /// Actions that can affect an EC2 Instance state - public struct Ec2InstanceState + /// The type of the Automated trigger to send request to CodeWhisperer service + public struct CodewhispererAutomatedTriggerType { private string _value; - /// start - public static readonly Ec2InstanceState Start = new Ec2InstanceState("start"); + /// KeyStrokeCount + public static readonly CodewhispererAutomatedTriggerType KeyStrokeCount = new CodewhispererAutomatedTriggerType("KeyStrokeCount"); - /// stop - public static readonly Ec2InstanceState Stop = new Ec2InstanceState("stop"); + /// SpecialCharacters + public static readonly CodewhispererAutomatedTriggerType SpecialCharacters = new CodewhispererAutomatedTriggerType("SpecialCharacters"); - /// reboot - public static readonly Ec2InstanceState Reboot = new Ec2InstanceState("reboot"); + /// Enter + public static readonly CodewhispererAutomatedTriggerType Enter = new CodewhispererAutomatedTriggerType("Enter"); - /// terminate - public static readonly Ec2InstanceState Terminate = new Ec2InstanceState("terminate"); + /// IntelliSenseAcceptance + public static readonly CodewhispererAutomatedTriggerType IntelliSenseAcceptance = new CodewhispererAutomatedTriggerType("IntelliSenseAcceptance"); - public Ec2InstanceState(string value) + /// IdleTime + public static readonly CodewhispererAutomatedTriggerType IdleTime = new CodewhispererAutomatedTriggerType("IdleTime"); + + /// Classifier + public static readonly CodewhispererAutomatedTriggerType Classifier = new CodewhispererAutomatedTriggerType("Classifier"); + + public CodewhispererAutomatedTriggerType(string value) { this._value = value; } @@ -16274,19 +18819,19 @@ public override string ToString() } /// Metric field type - /// Infrastructure type used by ECS tasks and services - public struct EcsLaunchType + /// Completion Type of the inference results returned from CodeWhisperer model layer + public struct CodewhispererCompletionType { private string _value; - /// ec2 - public static readonly EcsLaunchType Ec2 = new EcsLaunchType("ec2"); + /// Line + public static readonly CodewhispererCompletionType Line = new CodewhispererCompletionType("Line"); - /// fargate - public static readonly EcsLaunchType Fargate = new EcsLaunchType("fargate"); + /// Block + public static readonly CodewhispererCompletionType Block = new CodewhispererCompletionType("Block"); - public EcsLaunchType(string value) + public CodewhispererCompletionType(string value) { this._value = value; } @@ -16298,43 +18843,85 @@ public override string ToString() } /// Metric field type - /// Type of execution selected while running the execute command - public struct EcsExecuteCommandType + /// Programming language of the CodeWhisperer recommendation + public struct CodewhispererLanguage { private string _value; - /// command - public static readonly EcsExecuteCommandType Command = new EcsExecuteCommandType("command"); + /// java + public static readonly CodewhispererLanguage Java = new CodewhispererLanguage("java"); + + /// python + public static readonly CodewhispererLanguage Python = new CodewhispererLanguage("python"); + + /// javascript + public static readonly CodewhispererLanguage Javascript = new CodewhispererLanguage("javascript"); + + /// plaintext + public static readonly CodewhispererLanguage Plaintext = new CodewhispererLanguage("plaintext"); + + /// jsx + public static readonly CodewhispererLanguage Jsx = new CodewhispererLanguage("jsx"); + + /// typescript + public static readonly CodewhispererLanguage Typescript = new CodewhispererLanguage("typescript"); + + /// tsx + public static readonly CodewhispererLanguage Tsx = new CodewhispererLanguage("tsx"); + + /// csharp + public static readonly CodewhispererLanguage Csharp = new CodewhispererLanguage("csharp"); + + /// c + public static readonly CodewhispererLanguage C = new CodewhispererLanguage("c"); + + /// cpp + public static readonly CodewhispererLanguage Cpp = new CodewhispererLanguage("cpp"); + + /// go + public static readonly CodewhispererLanguage Go = new CodewhispererLanguage("go"); + + /// kotlin + public static readonly CodewhispererLanguage Kotlin = new CodewhispererLanguage("kotlin"); + + /// php + public static readonly CodewhispererLanguage Php = new CodewhispererLanguage("php"); + + /// ruby + public static readonly CodewhispererLanguage Ruby = new CodewhispererLanguage("ruby"); + + /// rust + public static readonly CodewhispererLanguage Rust = new CodewhispererLanguage("rust"); + + /// scala + public static readonly CodewhispererLanguage Scala = new CodewhispererLanguage("scala"); /// shell - public static readonly EcsExecuteCommandType Shell = new EcsExecuteCommandType("shell"); + public static readonly CodewhispererLanguage Shell = new CodewhispererLanguage("shell"); - public EcsExecuteCommandType(string value) - { - this._value = value; - } + /// sql + public static readonly CodewhispererLanguage Sql = new CodewhispererLanguage("sql"); - public override string ToString() - { - return this._value; - } - } - - /// Metric field type - /// The source content specified in the ECR deployment request - public struct EcrDeploySource - { + /// json + public static readonly CodewhispererLanguage Json = new CodewhispererLanguage("json"); - private string _value; + /// jsonc + public static readonly CodewhispererLanguage Jsonc = new CodewhispererLanguage("jsonc"); - /// dockerfile - public static readonly EcrDeploySource Dockerfile = new EcrDeploySource("dockerfile"); + /// yaml + public static readonly CodewhispererLanguage Yaml = new CodewhispererLanguage("yaml"); - /// tag - public static readonly EcrDeploySource Tag = new EcrDeploySource("tag"); + /// yml + public static readonly CodewhispererLanguage Yml = new CodewhispererLanguage("yml"); - public EcrDeploySource(string value) + /// hcl + public static readonly CodewhispererLanguage Hcl = new CodewhispererLanguage("hcl"); + + /// tf + public static readonly CodewhispererLanguage Tf = new CodewhispererLanguage("tf"); + + public CodewhispererLanguage(string value) { this._value = value; } @@ -16346,19 +18933,28 @@ public override string ToString() } /// Metric field type - /// The type of fetch being performed - public struct DynamoDbFetchType + /// The task type selected by the user in getting started page + public struct CodewhispererGettingStartedTask { private string _value; - /// scan - public static readonly DynamoDbFetchType Scan = new DynamoDbFetchType("scan"); + /// autoTrigger + public static readonly CodewhispererGettingStartedTask AutoTrigger = new CodewhispererGettingStartedTask("autoTrigger"); - /// query - public static readonly DynamoDbFetchType Query = new DynamoDbFetchType("query"); + /// manualTrigger + public static readonly CodewhispererGettingStartedTask ManualTrigger = new CodewhispererGettingStartedTask("manualTrigger"); - public DynamoDbFetchType(string value) + /// commentAsPrompt + public static readonly CodewhispererGettingStartedTask CommentAsPrompt = new CodewhispererGettingStartedTask("commentAsPrompt"); + + /// unitTest + public static readonly CodewhispererGettingStartedTask UnitTest = new CodewhispererGettingStartedTask("unitTest"); + + /// navigation + public static readonly CodewhispererGettingStartedTask Navigation = new CodewhispererGettingStartedTask("navigation"); + + public CodewhispererGettingStartedTask(string value) { this._value = value; } @@ -16370,22 +18966,34 @@ public override string ToString() } /// Metric field type - /// The type of index being hit for the query/scan operation - public struct DynamoDbIndexType + /// the pre-defined set of values for runtime version of the language of CodeWhisperer recommendation + public struct CodewhispererRuntime { private string _value; - /// primary - public static readonly DynamoDbIndexType Primary = new DynamoDbIndexType("primary"); + /// java8 + public static readonly CodewhispererRuntime Java8 = new CodewhispererRuntime("java8"); - /// localSecondary - public static readonly DynamoDbIndexType LocalSecondary = new DynamoDbIndexType("localSecondary"); + /// java11 + public static readonly CodewhispererRuntime Java11 = new CodewhispererRuntime("java11"); - /// globalSecondary - public static readonly DynamoDbIndexType GlobalSecondary = new DynamoDbIndexType("globalSecondary"); + /// java16 + public static readonly CodewhispererRuntime Java16 = new CodewhispererRuntime("java16"); - public DynamoDbIndexType(string value) + /// python2 + public static readonly CodewhispererRuntime Python2 = new CodewhispererRuntime("python2"); + + /// python3 + public static readonly CodewhispererRuntime Python3 = new CodewhispererRuntime("python3"); + + /// javascript + public static readonly CodewhispererRuntime Javascript = new CodewhispererRuntime("javascript"); + + /// unknown + public static readonly CodewhispererRuntime Unknown = new CodewhispererRuntime("unknown"); + + public CodewhispererRuntime(string value) { this._value = value; } @@ -16397,22 +19005,34 @@ public override string ToString() } /// Metric field type - /// The type of DynamoDB entity referenced by a metric or operation - public struct DynamoDbTarget + /// User decision of each of the suggestion returned from CodeWhisperer + public struct CodewhispererSuggestionState { private string _value; - /// table - public static readonly DynamoDbTarget Table = new DynamoDbTarget("table"); + /// Accept + public static readonly CodewhispererSuggestionState Accept = new CodewhispererSuggestionState("Accept"); - /// tableProperties - public static readonly DynamoDbTarget TableProperties = new DynamoDbTarget("tableProperties"); + /// Reject + public static readonly CodewhispererSuggestionState Reject = new CodewhispererSuggestionState("Reject"); - /// tableStream - public static readonly DynamoDbTarget TableStream = new DynamoDbTarget("tableStream"); + /// Discard + public static readonly CodewhispererSuggestionState Discard = new CodewhispererSuggestionState("Discard"); - public DynamoDbTarget(string value) + /// Ignore + public static readonly CodewhispererSuggestionState Ignore = new CodewhispererSuggestionState("Ignore"); + + /// Filter + public static readonly CodewhispererSuggestionState Filter = new CodewhispererSuggestionState("Filter"); + + /// Unseen + public static readonly CodewhispererSuggestionState Unseen = new CodewhispererSuggestionState("Unseen"); + + /// Empty + public static readonly CodewhispererSuggestionState Empty = new CodewhispererSuggestionState("Empty"); + + public CodewhispererSuggestionState(string value) { this._value = value; } @@ -16424,22 +19044,19 @@ public override string ToString() } /// Metric field type - /// The dynamic resource operation being executed - public struct DynamicResourceOperation + /// The type of the user trigger to send request to CodeWhisperer service + public struct CodewhispererTriggerType { private string _value; - /// Create - public static readonly DynamicResourceOperation Create = new DynamicResourceOperation("Create"); - - /// Update - public static readonly DynamicResourceOperation Update = new DynamicResourceOperation("Update"); + /// OnDemand + public static readonly CodewhispererTriggerType OnDemand = new CodewhispererTriggerType("OnDemand"); - /// Delete - public static readonly DynamicResourceOperation Delete = new DynamicResourceOperation("Delete"); + /// AutoTrigger + public static readonly CodewhispererTriggerType AutoTrigger = new CodewhispererTriggerType("AutoTrigger"); - public DynamicResourceOperation(string value) + public CodewhispererTriggerType(string value) { this._value = value; } @@ -16451,19 +19068,25 @@ public override string ToString() } /// Metric field type - /// The experiment action taken action taken - public struct ExperimentState + /// The aggregated user decision from previous trigger. + public struct CodewhispererPreviousSuggestionState { private string _value; - /// activated - public static readonly ExperimentState Activated = new ExperimentState("activated"); + /// Accept + public static readonly CodewhispererPreviousSuggestionState Accept = new CodewhispererPreviousSuggestionState("Accept"); - /// deactivated - public static readonly ExperimentState Deactivated = new ExperimentState("deactivated"); + /// Reject + public static readonly CodewhispererPreviousSuggestionState Reject = new CodewhispererPreviousSuggestionState("Reject"); - public ExperimentState(string value) + /// Discard + public static readonly CodewhispererPreviousSuggestionState Discard = new CodewhispererPreviousSuggestionState("Discard"); + + /// Empty + public static readonly CodewhispererPreviousSuggestionState Empty = new CodewhispererPreviousSuggestionState("Empty"); + + public CodewhispererPreviousSuggestionState(string value) { this._value = value; } @@ -16475,28 +19098,19 @@ public override string ToString() } /// Metric field type - /// The tool being installed - public struct ToolId + /// Describes which parts of an application (that we know of) were synced to the cloud. "Code" resources follow the SAM spec: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-sync.html + public struct SyncedResources { private string _value; - /// session-manager-plugin - public static readonly ToolId Sessionmanagerplugin = new ToolId("session-manager-plugin"); - - /// dotnet-lambda-deploy - public static readonly ToolId Dotnetlambdadeploy = new ToolId("dotnet-lambda-deploy"); - - /// dotnet-deploy-cli - public static readonly ToolId Dotnetdeploycli = new ToolId("dotnet-deploy-cli"); - - /// aws-cli - public static readonly ToolId Awscli = new ToolId("aws-cli"); + /// AllResources + public static readonly SyncedResources AllResources = new SyncedResources("AllResources"); - /// sam-cli - public static readonly ToolId Samcli = new ToolId("sam-cli"); + /// CodeOnly + public static readonly SyncedResources CodeOnly = new SyncedResources("CodeOnly"); - public ToolId(string value) + public SyncedResources(string value) { this._value = value; } @@ -16508,31 +19122,22 @@ public override string ToString() } /// Metric field type - /// The type of the Automated trigger to send request to CodeWhisperer service - public struct CodewhispererAutomatedTriggerType + /// Type of Git repository provided to the Amazon CodeCatalyst dev environment create wizard + public struct CodecatalystCreateDevEnvironmentRepoType { private string _value; - /// KeyStrokeCount - public static readonly CodewhispererAutomatedTriggerType KeyStrokeCount = new CodewhispererAutomatedTriggerType("KeyStrokeCount"); - - /// SpecialCharacters - public static readonly CodewhispererAutomatedTriggerType SpecialCharacters = new CodewhispererAutomatedTriggerType("SpecialCharacters"); - - /// Enter - public static readonly CodewhispererAutomatedTriggerType Enter = new CodewhispererAutomatedTriggerType("Enter"); - - /// IntelliSenseAcceptance - public static readonly CodewhispererAutomatedTriggerType IntelliSenseAcceptance = new CodewhispererAutomatedTriggerType("IntelliSenseAcceptance"); + /// linked + public static readonly CodecatalystCreateDevEnvironmentRepoType Linked = new CodecatalystCreateDevEnvironmentRepoType("linked"); - /// IdleTime - public static readonly CodewhispererAutomatedTriggerType IdleTime = new CodewhispererAutomatedTriggerType("IdleTime"); + /// unlinked + public static readonly CodecatalystCreateDevEnvironmentRepoType Unlinked = new CodecatalystCreateDevEnvironmentRepoType("unlinked"); - /// Classifier - public static readonly CodewhispererAutomatedTriggerType Classifier = new CodewhispererAutomatedTriggerType("Classifier"); + /// none + public static readonly CodecatalystCreateDevEnvironmentRepoType None = new CodecatalystCreateDevEnvironmentRepoType("none"); - public CodewhispererAutomatedTriggerType(string value) + public CodecatalystCreateDevEnvironmentRepoType(string value) { this._value = value; } @@ -16544,19 +19149,19 @@ public override string ToString() } /// Metric field type - /// Completion Type of the inference results returned from CodeWhisperer model layer - public struct CodewhispererCompletionType + /// Locality of the Amazon CodeCatalyst update dev environment request (i.e., from the thin client or the local IDE instance) + public struct CodecatalystUpdateDevEnvironmentLocationType { private string _value; - /// Line - public static readonly CodewhispererCompletionType Line = new CodewhispererCompletionType("Line"); + /// remote + public static readonly CodecatalystUpdateDevEnvironmentLocationType Remote = new CodecatalystUpdateDevEnvironmentLocationType("remote"); - /// Block - public static readonly CodewhispererCompletionType Block = new CodewhispererCompletionType("Block"); + /// local + public static readonly CodecatalystUpdateDevEnvironmentLocationType Local = new CodecatalystUpdateDevEnvironmentLocationType("local"); - public CodewhispererCompletionType(string value) + public CodecatalystUpdateDevEnvironmentLocationType(string value) { this._value = value; } @@ -16568,67 +19173,22 @@ public override string ToString() } /// Metric field type - /// Programming language of the CodeWhisperer recommendation - public struct CodewhispererLanguage + /// The id of the feature the user is interacting in. + public struct FeatureId { private string _value; - /// java - public static readonly CodewhispererLanguage Java = new CodewhispererLanguage("java"); - - /// python - public static readonly CodewhispererLanguage Python = new CodewhispererLanguage("python"); - - /// javascript - public static readonly CodewhispererLanguage Javascript = new CodewhispererLanguage("javascript"); - - /// plaintext - public static readonly CodewhispererLanguage Plaintext = new CodewhispererLanguage("plaintext"); - - /// jsx - public static readonly CodewhispererLanguage Jsx = new CodewhispererLanguage("jsx"); - - /// typescript - public static readonly CodewhispererLanguage Typescript = new CodewhispererLanguage("typescript"); - - /// tsx - public static readonly CodewhispererLanguage Tsx = new CodewhispererLanguage("tsx"); - - /// csharp - public static readonly CodewhispererLanguage Csharp = new CodewhispererLanguage("csharp"); - - /// c - public static readonly CodewhispererLanguage C = new CodewhispererLanguage("c"); - - /// cpp - public static readonly CodewhispererLanguage Cpp = new CodewhispererLanguage("cpp"); - - /// go - public static readonly CodewhispererLanguage Go = new CodewhispererLanguage("go"); - - /// kotlin - public static readonly CodewhispererLanguage Kotlin = new CodewhispererLanguage("kotlin"); - - /// php - public static readonly CodewhispererLanguage Php = new CodewhispererLanguage("php"); - - /// ruby - public static readonly CodewhispererLanguage Ruby = new CodewhispererLanguage("ruby"); - - /// rust - public static readonly CodewhispererLanguage Rust = new CodewhispererLanguage("rust"); - - /// scala - public static readonly CodewhispererLanguage Scala = new CodewhispererLanguage("scala"); + /// awsExplorer + public static readonly FeatureId AwsExplorer = new FeatureId("awsExplorer"); - /// shell - public static readonly CodewhispererLanguage Shell = new CodewhispererLanguage("shell"); + /// codewhisperer + public static readonly FeatureId Codewhisperer = new FeatureId("codewhisperer"); - /// sql - public static readonly CodewhispererLanguage Sql = new CodewhispererLanguage("sql"); + /// codecatalyst + public static readonly FeatureId Codecatalyst = new FeatureId("codecatalyst"); - public CodewhispererLanguage(string value) + public FeatureId(string value) { this._value = value; } @@ -16640,34 +19200,19 @@ public override string ToString() } /// Metric field type - /// the pre-defined set of values for runtime version of the language of CodeWhisperer recommendation - public struct CodewhispererRuntime + /// Allowed Java versions to transform from. + public struct CodeTransformJavaSourceVersionsAllowed { private string _value; - /// java8 - public static readonly CodewhispererRuntime Java8 = new CodewhispererRuntime("java8"); - - /// java11 - public static readonly CodewhispererRuntime Java11 = new CodewhispererRuntime("java11"); - - /// java16 - public static readonly CodewhispererRuntime Java16 = new CodewhispererRuntime("java16"); - - /// python2 - public static readonly CodewhispererRuntime Python2 = new CodewhispererRuntime("python2"); - - /// python3 - public static readonly CodewhispererRuntime Python3 = new CodewhispererRuntime("python3"); - - /// javascript - public static readonly CodewhispererRuntime Javascript = new CodewhispererRuntime("javascript"); + /// JDK_1_8 + public static readonly CodeTransformJavaSourceVersionsAllowed JDK18 = new CodeTransformJavaSourceVersionsAllowed("JDK_1_8"); - /// unknown - public static readonly CodewhispererRuntime Unknown = new CodewhispererRuntime("unknown"); + /// JDK_11 + public static readonly CodeTransformJavaSourceVersionsAllowed JDK11 = new CodeTransformJavaSourceVersionsAllowed("JDK_11"); - public CodewhispererRuntime(string value) + public CodeTransformJavaSourceVersionsAllowed(string value) { this._value = value; } @@ -16679,34 +19224,40 @@ public override string ToString() } /// Metric field type - /// User decision of each of the suggestion returned from CodeWhisperer - public struct CodewhispererSuggestionState + /// Allowed Java versions to transform to. + public struct CodeTransformJavaTargetVersionsAllowed { private string _value; - /// Accept - public static readonly CodewhispererSuggestionState Accept = new CodewhispererSuggestionState("Accept"); - - /// Reject - public static readonly CodewhispererSuggestionState Reject = new CodewhispererSuggestionState("Reject"); + /// JDK_17 + public static readonly CodeTransformJavaTargetVersionsAllowed JDK17 = new CodeTransformJavaTargetVersionsAllowed("JDK_17"); - /// Discard - public static readonly CodewhispererSuggestionState Discard = new CodewhispererSuggestionState("Discard"); + public CodeTransformJavaTargetVersionsAllowed(string value) + { + this._value = value; + } - /// Ignore - public static readonly CodewhispererSuggestionState Ignore = new CodewhispererSuggestionState("Ignore"); + public override string ToString() + { + return this._value; + } + } + + /// Metric field type + /// Names of components that can start a transform job. + public struct CodeTransformStartSrcComponents + { - /// Filter - public static readonly CodewhispererSuggestionState Filter = new CodewhispererSuggestionState("Filter"); + private string _value; - /// Unseen - public static readonly CodewhispererSuggestionState Unseen = new CodewhispererSuggestionState("Unseen"); + /// devToolsStartButton + public static readonly CodeTransformStartSrcComponents DevToolsStartButton = new CodeTransformStartSrcComponents("devToolsStartButton"); - /// Empty - public static readonly CodewhispererSuggestionState Empty = new CodewhispererSuggestionState("Empty"); + /// bottomPanelSideNavButton + public static readonly CodeTransformStartSrcComponents BottomPanelSideNavButton = new CodeTransformStartSrcComponents("bottomPanelSideNavButton"); - public CodewhispererSuggestionState(string value) + public CodeTransformStartSrcComponents(string value) { this._value = value; } @@ -16718,19 +19269,25 @@ public override string ToString() } /// Metric field type - /// The type of the user trigger to send request to CodeWhisperer service - public struct CodewhispererTriggerType + /// Names of components that can cancel a transform job. + public struct CodeTransformCancelSrcComponents { private string _value; - /// OnDemand - public static readonly CodewhispererTriggerType OnDemand = new CodewhispererTriggerType("OnDemand"); + /// apiError + public static readonly CodeTransformCancelSrcComponents ApiError = new CodeTransformCancelSrcComponents("apiError"); - /// AutoTrigger - public static readonly CodewhispererTriggerType AutoTrigger = new CodewhispererTriggerType("AutoTrigger"); + /// loadingPanelStopButton + public static readonly CodeTransformCancelSrcComponents LoadingPanelStopButton = new CodeTransformCancelSrcComponents("loadingPanelStopButton"); - public CodewhispererTriggerType(string value) + /// devToolsStopButton + public static readonly CodeTransformCancelSrcComponents DevToolsStopButton = new CodeTransformCancelSrcComponents("devToolsStopButton"); + + /// bottomPanelSideNavButton + public static readonly CodeTransformCancelSrcComponents BottomPanelSideNavButton = new CodeTransformCancelSrcComponents("bottomPanelSideNavButton"); + + public CodeTransformCancelSrcComponents(string value) { this._value = value; } @@ -16742,25 +19299,22 @@ public override string ToString() } /// Metric field type - /// The aggregated user decision from previous trigger. - public struct CodewhispererPreviousSuggestionState + /// Names of components that can initiate the patch viewer. + public struct CodeTransformVCSViewerSrcComponents { private string _value; - /// Accept - public static readonly CodewhispererPreviousSuggestionState Accept = new CodewhispererPreviousSuggestionState("Accept"); - - /// Reject - public static readonly CodewhispererPreviousSuggestionState Reject = new CodewhispererPreviousSuggestionState("Reject"); + /// toastNotification + public static readonly CodeTransformVCSViewerSrcComponents ToastNotification = new CodeTransformVCSViewerSrcComponents("toastNotification"); - /// Discard - public static readonly CodewhispererPreviousSuggestionState Discard = new CodewhispererPreviousSuggestionState("Discard"); + /// treeView + public static readonly CodeTransformVCSViewerSrcComponents TreeView = new CodeTransformVCSViewerSrcComponents("treeView"); - /// Empty - public static readonly CodewhispererPreviousSuggestionState Empty = new CodewhispererPreviousSuggestionState("Empty"); + /// treeViewHeader + public static readonly CodeTransformVCSViewerSrcComponents TreeViewHeader = new CodeTransformVCSViewerSrcComponents("treeViewHeader"); - public CodewhispererPreviousSuggestionState(string value) + public CodeTransformVCSViewerSrcComponents(string value) { this._value = value; } @@ -16772,19 +19326,19 @@ public override string ToString() } /// Metric field type - /// Describes which parts of an application (that we know of) were synced to the cloud. "Code" resources follow the SAM spec: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-sync.html - public struct SyncedResources + /// Names of components that can cancel the patch viewer. + public struct CodeTransformPatchViewerCancelSrcComponents { private string _value; - /// AllResources - public static readonly SyncedResources AllResources = new SyncedResources("AllResources"); + /// apiError + public static readonly CodeTransformPatchViewerCancelSrcComponents ApiError = new CodeTransformPatchViewerCancelSrcComponents("apiError"); - /// CodeOnly - public static readonly SyncedResources CodeOnly = new SyncedResources("CodeOnly"); + /// cancelButton + public static readonly CodeTransformPatchViewerCancelSrcComponents CancelButton = new CodeTransformPatchViewerCancelSrcComponents("cancelButton"); - public SyncedResources(string value) + public CodeTransformPatchViewerCancelSrcComponents(string value) { this._value = value; } @@ -16796,22 +19350,34 @@ public override string ToString() } /// Metric field type - /// Type of Git repository provided to the Amazon CodeCatalyst dev environment create wizard - public struct CodecatalystCreateDevEnvironmentRepoType + /// Names of allowed api calls in code transform service. + public struct CodeTransformApiNames { private string _value; - /// linked - public static readonly CodecatalystCreateDevEnvironmentRepoType Linked = new CodecatalystCreateDevEnvironmentRepoType("linked"); + /// StartTransformation + public static readonly CodeTransformApiNames StartTransformation = new CodeTransformApiNames("StartTransformation"); - /// unlinked - public static readonly CodecatalystCreateDevEnvironmentRepoType Unlinked = new CodecatalystCreateDevEnvironmentRepoType("unlinked"); + /// StopTransformation + public static readonly CodeTransformApiNames StopTransformation = new CodeTransformApiNames("StopTransformation"); - /// none - public static readonly CodecatalystCreateDevEnvironmentRepoType None = new CodecatalystCreateDevEnvironmentRepoType("none"); + /// GetTransformation + public static readonly CodeTransformApiNames GetTransformation = new CodeTransformApiNames("GetTransformation"); - public CodecatalystCreateDevEnvironmentRepoType(string value) + /// GetTransformationPlan + public static readonly CodeTransformApiNames GetTransformationPlan = new CodeTransformApiNames("GetTransformationPlan"); + + /// UploadZip + public static readonly CodeTransformApiNames UploadZip = new CodeTransformApiNames("UploadZip"); + + /// CreateUploadUrl + public static readonly CodeTransformApiNames CreateUploadUrl = new CodeTransformApiNames("CreateUploadUrl"); + + /// ExportResultArchive + public static readonly CodeTransformApiNames ExportResultArchive = new CodeTransformApiNames("ExportResultArchive"); + + public CodeTransformApiNames(string value) { this._value = value; } @@ -16823,19 +19389,37 @@ public override string ToString() } /// Metric field type - /// Locality of the Amazon CodeCatalyst update dev environment request (i.e., from the thin client or the local IDE instance) - public struct CodecatalystUpdateDevEnvironmentLocationType + /// Names of the pre-validation errors that can occur in the project + public struct CodeTransformPreValidationError { private string _value; - /// remote - public static readonly CodecatalystUpdateDevEnvironmentLocationType Remote = new CodecatalystUpdateDevEnvironmentLocationType("remote"); + /// NoPom + public static readonly CodeTransformPreValidationError NoPom = new CodeTransformPreValidationError("NoPom"); - /// local - public static readonly CodecatalystUpdateDevEnvironmentLocationType Local = new CodecatalystUpdateDevEnvironmentLocationType("local"); + /// NoJavaProject + public static readonly CodeTransformPreValidationError NoJavaProject = new CodeTransformPreValidationError("NoJavaProject"); - public CodecatalystUpdateDevEnvironmentLocationType(string value) + /// MixedLanguages + public static readonly CodeTransformPreValidationError MixedLanguages = new CodeTransformPreValidationError("MixedLanguages"); + + /// UnsupportedJavaVersion + public static readonly CodeTransformPreValidationError UnsupportedJavaVersion = new CodeTransformPreValidationError("UnsupportedJavaVersion"); + + /// NonMavenProject + public static readonly CodeTransformPreValidationError NonMavenProject = new CodeTransformPreValidationError("NonMavenProject"); + + /// EmptyProject + public static readonly CodeTransformPreValidationError EmptyProject = new CodeTransformPreValidationError("EmptyProject"); + + /// NonSsoLogin + public static readonly CodeTransformPreValidationError NonSsoLogin = new CodeTransformPreValidationError("NonSsoLogin"); + + /// RemoteRunProject + public static readonly CodeTransformPreValidationError RemoteRunProject = new CodeTransformPreValidationError("RemoteRunProject"); + + public CodeTransformPreValidationError(string value) { this._value = value; } @@ -16847,22 +19431,19 @@ public override string ToString() } /// Metric field type - /// The id of the feature the user is interacting in. - public struct FeatureId + /// Type of maven command + public struct CodeTransformMavenBuildCommand { private string _value; - /// awsExplorer - public static readonly FeatureId AwsExplorer = new FeatureId("awsExplorer"); - - /// codewhisperer - public static readonly FeatureId Codewhisperer = new FeatureId("codewhisperer"); + /// mvn + public static readonly CodeTransformMavenBuildCommand Mvn = new CodeTransformMavenBuildCommand("mvn"); - /// codecatalyst - public static readonly FeatureId Codecatalyst = new FeatureId("codecatalyst"); + /// mvnw + public static readonly CodeTransformMavenBuildCommand Mvnw = new CodeTransformMavenBuildCommand("mvnw"); - public FeatureId(string value) + public CodeTransformMavenBuildCommand(string value) { this._value = value; } @@ -19085,7 +21666,7 @@ public sealed class LambdaCreateProject : BaseTelemetryEvent /// The result of the operation public Result Result; - /// Language used for the project + /// Language used for the project. public string Language; /// Generic name of a template @@ -19230,7 +21811,7 @@ public sealed class LambdaDeploy : BaseTelemetryEvent /// Optional - Lambda architecture identifier public LambdaArchitecture? LambdaArchitecture; - /// Optional - Language used for the project + /// Optional - Language used for the project. public string Language; /// Optional - Whether or not AWS X-Ray is enabled @@ -19493,8 +22074,8 @@ public sealed class SamSync : BaseTelemetryEvent /// Describes which parts of an application (that we know of) were synced to the cloud. "Code" resources follow the SAM spec: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-sync.html public SyncedResources SyncedResources; - /// The Lambda Package type of the function - public LambdaPackageType LambdaPackageType; + /// Optional - The Lambda Package type of the function + public LambdaPackageType? LambdaPackageType; /// Optional - A generic version metadata public string Version; @@ -19536,6 +22117,22 @@ public SamInit() } } + /// Called when checking if the SAM executable on the local machine is valid with a valid version + public sealed class SamInfo : BaseTelemetryEvent + { + + /// The result of the operation + public Result Result; + + /// Optional - A generic version metadata + public string Version; + + public SamInfo() + { + this.Passive = true; + } + } + /// Called when selecting an EventBridge schema to view public sealed class SchemasView : BaseTelemetryEvent { @@ -20458,12 +23055,207 @@ public sealed class DeeplinkOpen : BaseTelemetryEvent /// The result of the operation public Result Result; - /// Optional - The name of the AWS service acted on. These values come from the AWS SDK. To find them in the JAVA SDK search for SERVICE_NAME in each service client, or look for serviceId in metadata in the service2.json - public string ServiceType; + /// Optional - The name of the AWS service acted on. These values come from the AWS SDK. To find them in the JAVA SDK search for SERVICE_NAME in each service client, or look for serviceId in metadata in the service2.json + public string ServiceType; + + public DeeplinkOpen() + { + this.Passive = true; + } + } + + /// Number of times the user have triggered /dev and started the chat + public sealed class AmazonqStartChat : BaseTelemetryEvent + { + + /// Uniquely identifies a message with which the user interacts. + public string AmazonqConversationId; + + public AmazonqStartChat() + { + this.Passive = false; + } + } + + /// Captures end of the conversation with amazonq /dev + public sealed class AmazonqEndChat : BaseTelemetryEvent + { + + /// Uniquely identifies a message with which the user interacts. + public string AmazonqConversationId; + + /// Optional - Total time from start to end + public System.Double? AmazonqEndOfTheConversationLatency; + + public AmazonqEndChat() + { + this.Passive = false; + } + } + + /// Captures Approach generation process + public sealed class AmazonqApproachInvoke : BaseTelemetryEvent + { + + /// Uniquely identifies a message with which the user interacts. + public string AmazonqConversationId; + + /// Order of approach iteration. For initial code changes it is 0 + public double AmazonqGenerateApproachIteration; + + /// The time it takes to generate approach response + public double AmazonqGenerateApproachLatency; + + public AmazonqApproachInvoke() + { + this.Passive = false; + } + } + + /// User has accepted the approach generated + public sealed class AmazonqIsApproachAccepted : BaseTelemetryEvent + { + + /// True if turned on, false if turned off + public bool Enabled; + + /// Uniquely identifies a message with which the user interacts. + public string AmazonqConversationId; + + public AmazonqIsApproachAccepted() + { + this.Passive = false; + } + } + + /// Captures Code Generation generation process + public sealed class AmazonqCodeGenerationInvoke : BaseTelemetryEvent + { + + /// Uniquely identifies a message with which the user interacts. + public string AmazonqConversationId; + + /// Order of code generation iteration. For initial code changes it is 0 + public double AmazonqGenerateCodeIteration; + + /// The time it takes to generate code generation response + public double AmazonqGenerateCodeResponseLatency; + + /// Captures if code generation result is Complete, Failed,etc + public string AmazonqCodeGenerationResult; + + /// Optional - Captures the number of files generated as a part of code generation iteration + public System.Double? AmazonqNumberOfFilesGenerated; + + /// Captures size of the source code + public double AmazonqRepositorySize; + + /// Optional - Captures the number of references + public System.Double? AmazonqNumberOfReferences; + + public AmazonqCodeGenerationInvoke() + { + this.Passive = false; + } + } + + /// User applied code changes generated for the task. + public sealed class AmazonqIsAcceptedCodeChanges : BaseTelemetryEvent + { + + /// True if turned on, false if turned off + public bool Enabled; + + /// Uniquely identifies a message with which the user interacts. + public string AmazonqConversationId; + + public AmazonqIsAcceptedCodeChanges() + { + this.Passive = false; + } + } + + /// User asked to regenerate code generation with a comment + public sealed class AmazonqIsProvideFeedbackForCodeGen : BaseTelemetryEvent + { + + /// True if turned on, false if turned off + public bool Enabled; + + /// Uniquely identifies a message with which the user interacts. + public string AmazonqConversationId; + + public AmazonqIsProvideFeedbackForCodeGen() + { + this.Passive = false; + } + } + + /// User reviewed changes + public sealed class AmazonqIsReviewedChanges : BaseTelemetryEvent + { + + /// True if turned on, false if turned off + public bool Enabled; + + /// Uniquely identifies a message with which the user interacts. + public string AmazonqConversationId; + + public AmazonqIsReviewedChanges() + { + this.Passive = true; + } + } + + /// User clicked on the thumbs up button to say that they are unsatisfied + public sealed class AmazonqCodeGenerationThumbsUp : BaseTelemetryEvent + { + + /// Uniquely identifies a message with which the user interacts. + public string AmazonqConversationId; + + public AmazonqCodeGenerationThumbsUp() + { + this.Passive = false; + } + } + + /// User clicked on the thumbs down button to say that they are unsatisfied + public sealed class AmazonqCodeGenerationThumbsDown : BaseTelemetryEvent + { + + /// Uniquely identifies a message with which the user interacts. + public string AmazonqConversationId; + + public AmazonqCodeGenerationThumbsDown() + { + this.Passive = false; + } + } + + /// User clicked on the thumbs up button, to mention that they are satisfied + public sealed class AmazonqApproachThumbsUp : BaseTelemetryEvent + { + + /// Uniquely identifies a message with which the user interacts. + public string AmazonqConversationId; + + public AmazonqApproachThumbsUp() + { + this.Passive = false; + } + } + + /// User clicked on the thumbs down button to say that they are unsatisfied + public sealed class AmazonqApproachThumbsDown : BaseTelemetryEvent + { + + /// Uniquely identifies a message with which the user interacts. + public string AmazonqConversationId; - public DeeplinkOpen() + public AmazonqApproachThumbsDown() { - this.Passive = true; + this.Passive = false; } } @@ -20489,6 +23281,9 @@ public sealed class CodewhispererCodePercentage : BaseTelemetryEvent /// The number of successful operations public int SuccessCount; + /// Optional - The currently selected customization arn(None if using the base model) + public string CodewhispererCustomizationArn; + public CodewhispererCodePercentage() { this.Passive = true; @@ -20523,6 +23318,9 @@ public sealed class CodewhispererSecurityScan : BaseTelemetryEvent /// The number of security issues been detected public int CodewhispererCodeScanTotalIssues; + /// Optional - The number of security issues detected with suggested fixes + public System.Int32? CodewhispererCodeScanIssuesWithFixes; + /// Programming language of the CodeWhisperer recommendation public CodewhispererLanguage CodewhispererLanguage; @@ -20563,6 +23361,9 @@ public sealed class CodewhispererServiceInvocation : BaseTelemetryEvent /// Programming language of the CodeWhisperer recommendation public CodewhispererLanguage CodewhispererLanguage; + /// Optional - The task type selected by the user in getting started page + public CodewhispererGettingStartedTask? CodewhispererGettingStartedTask; + /// Optional - The last index of recommendation from a particular response public System.Int32? CodewhispererLastSuggestionIndex; @@ -20608,6 +23409,9 @@ public sealed class CodewhispererServiceInvocation : BaseTelemetryEvent /// The user group identifier we assign to the customer and it should be unique identifier across different IDE platforms, i.e. Classifier, CrossFile etc. public string CodewhispererUserGroup; + /// Optional - The currently selected customization arn(None if using the base model) + public string CodewhispererCustomizationArn; + public CodewhispererServiceInvocation() { this.Passive = false; @@ -20652,6 +23456,9 @@ public sealed class CodewhispererUserDecision : BaseTelemetryEvent /// Programming language of the CodeWhisperer recommendation public CodewhispererLanguage CodewhispererLanguage; + /// Optional - The task type selected by the user in getting started page + public CodewhispererGettingStartedTask? CodewhispererGettingStartedTask; + /// Optional - The number of recommendations received so far when user makes a decision public System.Int32? CodewhispererPaginationProgress; @@ -20737,6 +23544,9 @@ public sealed class CodewhispererUserTriggerDecision : BaseTelemetryEvent /// Programming language of the CodeWhisperer recommendation public CodewhispererLanguage CodewhispererLanguage; + /// Optional - The task type selected by the user in getting started page + public CodewhispererGettingStartedTask? CodewhispererGettingStartedTask; + /// The type of the user trigger to send request to CodeWhisperer service public CodewhispererTriggerType CodewhispererTriggerType; @@ -20791,18 +23601,43 @@ public sealed class CodewhispererUserTriggerDecision : BaseTelemetryEvent /// Optional - Length of codewhisperer supplemental context extracted from files public System.Int32? CodewhispererSupplementalContextLength; + /// Optional - Name tag or identifier for supplemental context fetching strategy being used for us to easier analyze corresponding acceptance rate + public string CodewhispererSupplementalContextStrategyId; + /// Optional - The threshold of Classifier trigger. public System.Double? CodewhispererClassifierThreshold; /// The user group identifier we assign to the customer and it should be unique identifier across different IDE platforms, i.e. Classifier, CrossFile etc. public string CodewhispererUserGroup; + /// Optional - The currently selected customization arn(None if using the base model) + public string CodewhispererCustomizationArn; + + /// Optional - Feature assignments for a particular user + public string CodewhispererFeatureEvaluations; + public CodewhispererUserTriggerDecision() { this.Passive = false; } } + /// This metric provides the particular language and task type selected by the user in the onboarding page by clicking on the Try Example button. + public sealed class CodewhispererOnboardingClick : BaseTelemetryEvent + { + + /// Programming language of the CodeWhisperer recommendation + public CodewhispererLanguage CodewhispererLanguage; + + /// The task type selected by the user in getting started page + public CodewhispererGettingStartedTask CodewhispererGettingStartedTask; + + public CodewhispererOnboardingClick() + { + this.Passive = false; + } + } + /// Percentage of user modifications for the selected suggestion until a fixed period of time public sealed class CodewhispererUserModification : BaseTelemetryEvent { @@ -21033,4 +23868,426 @@ public CodecatalystDevEnvironmentWorkflowStatistic() this.Passive = true; } } + + /// We want to log the total run time in the users experience for the IDE. The total runtime should end when all API's have finished running and the users is prompted for next step actions. + public sealed class CodeTransformTotalRunTime : BaseTelemetryEvent + { + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// A millisecond value of the total runtime latency. + public int CodeTransformRunTimeLatency; + + /// Optional - A general string field to represent the result of the project + public string CodeTransformResultStatusMessage; + + public CodeTransformTotalRunTime() + { + this.Passive = true; + } + } + + /// The code transform button in the devtools to initiate the pre transform user modal window. + public sealed class CodeTransformIsDoubleClickedToTriggerUserModal : BaseTelemetryEvent + { + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// Names of components that can start a transform job. + public CodeTransformStartSrcComponents CodeTransformStartSrcComponents; + + public CodeTransformIsDoubleClickedToTriggerUserModal() + { + this.Passive = false; + } + } + + /// The code transform button in the devtools to initiate the job but there is a validation error. + public sealed class CodeTransformIsDoubleClickedToTriggerInvalidProject : BaseTelemetryEvent + { + + /// Names of the pre-validation errors that can occur in the project + public CodeTransformPreValidationError CodeTransformPreValidationError; + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// The result of the operation + public Result Result; + + public CodeTransformIsDoubleClickedToTriggerInvalidProject() + { + this.Passive = false; + } + } + + /// The user initiates a transform job from the pre transform user modal window. + public sealed class CodeTransformJobIsStartedFromUserPopupClick : BaseTelemetryEvent + { + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + public CodeTransformJobIsStartedFromUserPopupClick() + { + this.Passive = false; + } + } + + /// The user was previously running a transformation and came back to IDE to see it still running + public sealed class CodeTransformJobIsResumedAfterIdeClose : BaseTelemetryEvent + { + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// A string id for the current job running in the background. + public string CodeTransformJobId; + + /// A string to identify the API status. + public string CodeTransformStatus; + + public CodeTransformJobIsResumedAfterIdeClose() + { + this.Passive = false; + } + } + + /// The user closes their IDE and stops viewing the transformation. + public sealed class CodeTransformJobIsClosedDuringIdeRun : BaseTelemetryEvent + { + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// A string id for the current job running in the background. + public string CodeTransformJobId; + + /// A string to identify the API status. + public string CodeTransformStatus; + + public CodeTransformJobIsClosedDuringIdeRun() + { + this.Passive = false; + } + } + + /// The user initiates a transform job from Amazon Q chat prompt. + public sealed class CodeTransformJobIsStartedFromChatPrompt : BaseTelemetryEvent + { + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + public CodeTransformJobIsStartedFromChatPrompt() + { + this.Passive = false; + } + } + + /// The code transform button to initiate the pre transform user modal. + public sealed class CodeTransformJobIsCanceledFromUserPopupClick : BaseTelemetryEvent + { + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + public CodeTransformJobIsCanceledFromUserPopupClick() + { + this.Passive = false; + } + } + + /// After modal validation of inputs, code execution will start and we will fire this event. + public sealed class CodeTransformJobStartedCompleteFromPopupDialog : BaseTelemetryEvent + { + + /// Allowed Java versions to transform from. + public CodeTransformJavaSourceVersionsAllowed CodeTransformJavaSourceVersionsAllowed; + + /// Allowed Java versions to transform to. + public CodeTransformJavaTargetVersionsAllowed CodeTransformJavaTargetVersionsAllowed; + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + public CodeTransformJobStartedCompleteFromPopupDialog() + { + this.Passive = true; + } + } + + /// During the transformation progress, log the status steps returning from the API. + public sealed class CodeTransformJobStatusChanged : BaseTelemetryEvent + { + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// A string id for the current job running in the background. + public string CodeTransformJobId; + + /// A string to identify the API status. + public string CodeTransformStatus; + + public CodeTransformJobStatusChanged() + { + this.Passive = true; + } + } + + /// Fire a change event when users select a new configuration/module file from the dropdown. + public sealed class CodeTransformConfigurationFileSelectedChanged : BaseTelemetryEvent + { + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + public CodeTransformConfigurationFileSelectedChanged() + { + this.Passive = false; + } + } + + /// After a job is running the user has the ability to cancel the job. + public sealed class CodeTransformJobIsCancelledByUser : BaseTelemetryEvent + { + + /// Names of components that can cancel a transform job. + public CodeTransformCancelSrcComponents CodeTransformCancelSrcComponents; + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// Optional - A general string field to represent runtime errors in the project. + public string CodeTransformRuntimeError; + + public CodeTransformJobIsCancelledByUser() + { + this.Passive = false; + } + } + + /// A timestamp for when the job is ending upload zip contents + public sealed class CodeTransformJobCreateZipEndTime : BaseTelemetryEvent + { + + /// An integer representing the byte size of the upload or download. + public int CodeTransformTotalByteSize; + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// A millisecond value of the total runtime latency. + public int CodeTransformRunTimeLatency; + + public CodeTransformJobCreateZipEndTime() + { + this.Passive = false; + } + } + + /// A timestamp for when the job is ending download zip contents + public sealed class CodeTransformJobArtifactDownloadAndDeserializeTime : BaseTelemetryEvent + { + + /// A string id for the current job running in the background. + public string CodeTransformJobId; + + /// An integer representing the byte size of the upload or download. + public int CodeTransformTotalByteSize; + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// A millisecond value of the total runtime latency. + public int CodeTransformRunTimeLatency; + + /// Optional - A general string field to represent runtime errors in the project. + public string CodeTransformRuntimeError; + + public CodeTransformJobArtifactDownloadAndDeserializeTime() + { + this.Passive = false; + } + } + + /// An interactivity measured when users click to view diff results. + public sealed class CodeTransformVcsViewerClicked : BaseTelemetryEvent + { + + /// Names of components that can initiate the patch viewer. + public CodeTransformVCSViewerSrcComponents CodeTransformVCSViewerSrcComponents; + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// Optional - A string id for the current job running in the background. + public string CodeTransformJobId; + + public CodeTransformVcsViewerClicked() + { + this.Passive = false; + } + } + + /// A timestamp for when the diff view is being displayed to the user. + public sealed class CodeTransformVcsDiffViewerVisible : BaseTelemetryEvent + { + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// Optional - A string id for the current job running in the background. + public string CodeTransformJobId; + + public CodeTransformVcsDiffViewerVisible() + { + this.Passive = false; + } + } + + /// An interactivity measured when users cancel a patch view. + public sealed class CodeTransformVcsViewerCanceled : BaseTelemetryEvent + { + + /// Names of components that can cancel the patch viewer. + public CodeTransformPatchViewerCancelSrcComponents CodeTransformPatchViewerCancelSrcComponents; + + /// Optional - A general string field to represent runtime errors in the project. + public string CodeTransformRuntimeError; + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// Optional - A string id for the current job running in the background. + public string CodeTransformJobId; + + public CodeTransformVcsViewerCanceled() + { + this.Passive = false; + } + } + + /// An interactivity measured when users submit their patch view results. + public sealed class CodeTransformVcsViewerSubmitted : BaseTelemetryEvent + { + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// Optional - A string id for the current job running in the background. + public string CodeTransformJobId; + + public CodeTransformVcsViewerSubmitted() + { + this.Passive = false; + } + } + + /// A general logging measure for all client side API's latency. + public sealed class CodeTransformLogApiLatency : BaseTelemetryEvent + { + + /// Names of allowed api calls in code transform service. + public CodeTransformApiNames CodeTransformApiNames; + + /// A millisecond value of the total runtime latency. + public int CodeTransformRunTimeLatency; + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// Optional - A string id for the api request that was fired. + public string CodeTransformRequestId; + + /// Optional - A string id for the current job running in the background. + public string CodeTransformJobId; + + /// Optional - A unique upload id representing the uploadId to s3 bucket. + public string CodeTransformUploadId; + + /// Optional - An integer representing the byte size of the upload or download. + public System.Int32? CodeTransformTotalByteSize; + + public CodeTransformLogApiLatency() + { + this.Passive = true; + } + } + + /// A general logging measure for all client side API errors. + public sealed class CodeTransformLogGeneralError : BaseTelemetryEvent + { + + /// A general string field to represent API specific errors in the project. + public string CodeTransformApiErrorMessage; + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// Optional - A string id for the current job running in the background. + public string CodeTransformJobId; + + public CodeTransformLogGeneralError() + { + this.Passive = true; + } + } + + /// A general logging measure for all client side API errors. + public sealed class CodeTransformLogApiError : BaseTelemetryEvent + { + + /// A general string field to represent API specific errors in the project. + public string CodeTransformApiErrorMessage; + + /// Names of allowed api calls in code transform service. + public CodeTransformApiNames CodeTransformApiNames; + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// Optional - A string id for the api request that was fired. + public string CodeTransformRequestId; + + /// Optional - A string id for the current job running in the background. + public string CodeTransformJobId; + + public CodeTransformLogApiError() + { + this.Passive = true; + } + } + + /// The repo copies over at least one dependency successfully. + public sealed class CodeTransformDependenciesCopied : BaseTelemetryEvent + { + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + public CodeTransformDependenciesCopied() + { + this.Passive = false; + } + } + + /// The maven command build failed. + public sealed class CodeTransformMvnBuildFailed : BaseTelemetryEvent + { + + /// A general string field to represent the IDE session from when users start the modernization process. + public string CodeTransformSessionId; + + /// Type of maven command + public CodeTransformMavenBuildCommand CodeTransformMavenBuildCommand; + + public CodeTransformMvnBuildFailed() + { + this.Passive = false; + } + } } diff --git a/telemetry/csharp/AwsToolkit.Telemetry.Events.Tests/GeneratedCodeTests.cs b/telemetry/csharp/AwsToolkit.Telemetry.Events.Tests/GeneratedCodeTests.cs index 7c5418c5..fd48da19 100644 --- a/telemetry/csharp/AwsToolkit.Telemetry.Events.Tests/GeneratedCodeTests.cs +++ b/telemetry/csharp/AwsToolkit.Telemetry.Events.Tests/GeneratedCodeTests.cs @@ -217,6 +217,41 @@ public void RecordMetricWithNewTransform() Assert.Single(datum.Metadata); } + /// + /// RecordCodeTransformIsDoubleClickedToTriggerInvalidProject was chosen as a sample call that has a + /// CodeTransformPreValidationError for allowedValues which have spaces in the values that + /// should be converted to underscores for the "key". This way the language interprets + /// the key value as pascal case and converts it. + /// + [Fact] + public void RecordWithAllowedValues() + { + var doubleClickRecord = new CodeTransformIsDoubleClickedToTriggerInvalidProject() + { + CodeTransformPreValidationError = CodeTransformPreValidationError.NoJavaProject, + CodeTransformSessionId = "test-session-id", + Result = Result.Succeeded + }; + + _telemetryLogger.Object.RecordCodeTransformIsDoubleClickedToTriggerInvalidProject(doubleClickRecord); + + Assert.NotNull(_recordedMetrics); + _telemetryLogger.Verify( + mock => mock.Record(_recordedMetrics), + Times.Once + ); + + var datum = Assert.Single(_recordedMetrics.Data); + Assert.NotNull(datum); + Assert.Equal("codeTransform_isDoubleClickedToTriggerInvalidProject", datum.MetricName); + Assert.Equal(Unit.None, datum.Unit); + Assert.False(datum.Passive); + Assert.True(datum.Metadata.ContainsKey("codeTransformSessionId")); + Assert.Equal("test-session-id", datum.Metadata["codeTransformSessionId"]); + Assert.True(datum.Metadata.ContainsKey("codeTransformPreValidationError")); + Assert.Equal("NoJavaProject", datum.Metadata["codeTransformPreValidationError"]); + } + private MetricDatum TransformDuplicateReason(MetricDatum datum) { datum.Metadata["reason1"] = datum.Metadata["reason"]; diff --git a/telemetry/csharp/README.md b/telemetry/csharp/README.md index f7dbbf39..82c762a5 100644 --- a/telemetry/csharp/README.md +++ b/telemetry/csharp/README.md @@ -81,6 +81,15 @@ Supplemental telemetry definitions can be integrated as follows: 1. Run the generator, using the Toolkit's supplemental telemetry definition file(s) as command line arguments (`toolkitcore\AWSToolkit.Util\Telemetry\vs-telemetry-definitions.json`) 1. Take the generated file(s) (GeneratedCode.cs), and place them in the toolkit (`toolkitcore\AWSToolkit.Util\Telemetry\ToolkitTelemetryEvents.generated.cs`) +## Testing + +Tests are located under `AwsToolkit.Telmetry.Events.Tests`. These +tests are based off the build from `commonDefinitions.json`. + +### Running Tests + +To run the tests you can run them from this directory `telemetry/csharp` with the `dotnet build -c Release AwsToolkit.Telemetry.sln` command. This command will build the repo, including `commonDefinitions.json` and the tests will be run against that JSON file output for C#. + ## Roadmap - Standalone NuGet Package containing the Telemetry Event generator diff --git a/telemetry/definitions/commonDefinitions.json b/telemetry/definitions/commonDefinitions.json index 752cdcdf..12cea840 100644 --- a/telemetry/definitions/commonDefinitions.json +++ b/telemetry/definitions/commonDefinitions.json @@ -1041,14 +1041,14 @@ "type": "string", "description": "Names of the pre-validation errors that can occur in the project", "allowedValues": [ - "No pom.xml file found", - "No Java project found", - "Mixed Java project and another language found", - "Project selected is not Java 8 or Java 11", - "Only Maven projects supported", - "Empty project", - "Non SSO login", - "Project running on backend" + "NoPom", + "NoJavaProject", + "MixedLanguages", + "UnsupportedJavaVersion", + "NonMavenProject", + "EmptyProject", + "NonSsoLogin", + "RemoteRunProject" ] }, { diff --git a/telemetry/jetbrains/README.md b/telemetry/jetbrains/README.md index 49718bc2..7ff1e1a6 100644 --- a/telemetry/jetbrains/README.md +++ b/telemetry/jetbrains/README.md @@ -24,3 +24,9 @@ compileJava.dependsOn(generateTelemetry) ``` To add additional telemetry files, add `file("/path/to/file)` entries into the inputFiles array. + +## Testing + +### Running Tests + +To run the tests you can run them from this directory `telemetry/jetbrains` with the `./gradlew test` command. \ No newline at end of file diff --git a/telemetry/jetbrains/src/test/kotlin/software/aws/toolkits/telemetry/generator/GeneratorTest.kt b/telemetry/jetbrains/src/test/kotlin/software/aws/toolkits/telemetry/generator/GeneratorTest.kt index 1eb3ca7f..9a9363b1 100644 --- a/telemetry/jetbrains/src/test/kotlin/software/aws/toolkits/telemetry/generator/GeneratorTest.kt +++ b/telemetry/jetbrains/src/test/kotlin/software/aws/toolkits/telemetry/generator/GeneratorTest.kt @@ -39,6 +39,11 @@ class GeneratorTest { testGenerator(defaultDefinitionsFile = "/testResultInput.json", definitionsOverrides = listOf("/testOverrideInput.json"), expectedOutputFile = "/testOverrideOutput") } + @Test + fun generateAllowedValuesWithUnderscores() { + testGenerator(defaultDefinitionsFile = "/testGeneratorAllowedValuesInput.json", expectedOutputFile = "/testGeneratorAllowedValuesOutput") + } + @Test fun longEnum() { testGenerator(defaultDefinitionsFile = "/testLongEnumInput.json", expectedOutputFile = "/testLongEnumOutput") diff --git a/telemetry/jetbrains/src/test/resources/testGeneratorAllowedValuesInput.json b/telemetry/jetbrains/src/test/resources/testGeneratorAllowedValuesInput.json new file mode 100644 index 00000000..d89d408a --- /dev/null +++ b/telemetry/jetbrains/src/test/resources/testGeneratorAllowedValuesInput.json @@ -0,0 +1,21 @@ + +{ + "types": [ + { + "name": "testAllowedValues", + "allowedValues": [ + "test spaces are replaced", + "in allowed values output key" + ], + "description": "A test object for parsing allowedValues" + } + ], + "metrics": [ + { + "name": "test_metric", + "description": "A test for defining allowedValues", + "unit": "None", + "metadata": [{ "type": "testAllowedValues" }] + } + ] +} diff --git a/telemetry/jetbrains/src/test/resources/testGeneratorAllowedValuesOutput b/telemetry/jetbrains/src/test/resources/testGeneratorAllowedValuesOutput new file mode 100644 index 00000000..315ac262 --- /dev/null +++ b/telemetry/jetbrains/src/test/resources/testGeneratorAllowedValuesOutput @@ -0,0 +1,101 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +// THIS FILE IS GENERATED! DO NOT EDIT BY HAND! +@file:Suppress("unused", "MemberVisibilityCanBePrivate") + +package software.aws.toolkits.telemetry + +import com.intellij.openapi.project.Project +import java.time.Instant +import kotlin.Boolean +import kotlin.Double +import kotlin.String +import kotlin.Suppress +import kotlin.Unit +import software.aws.toolkits.core.ConnectionSettings +import software.aws.toolkits.jetbrains.services.telemetry.MetricEventMetadata +import software.aws.toolkits.jetbrains.services.telemetry.TelemetryService + +/** + * A test object for parsing allowedValues + */ +public enum class TestAllowedValues( + private val `value`: String, +) { + TestSpacesAreReplaced("test spaces are replaced"), + InAllowedValuesOutputKey("in allowed values output key"), + Unknown("unknown"), + ; + + public override fun toString(): String = value + + public companion object { + public fun from(type: String): TestAllowedValues = values().firstOrNull { it.value == type } + ?: Unknown + } +} + +public object TestTelemetry { + /** + * A test for defining allowedValues + */ + public fun metric( + project: Project?, + testAllowedValues: TestAllowedValues, + passive: Boolean = false, + `value`: Double = 1.0, + createTime: Instant = Instant.now(), + ): Unit { + TelemetryService.getInstance().record(project) { + datum("test_metric") { + createTime(createTime) + unit(software.amazon.awssdk.services.toolkittelemetry.model.Unit.NONE) + value(value) + passive(passive) + metadata("testAllowedValues", testAllowedValues.toString()) + } + } + } + + /** + * A test for defining allowedValues + */ + public fun metric( + connectionSettings: ConnectionSettings? = null, + testAllowedValues: TestAllowedValues, + passive: Boolean = false, + `value`: Double = 1.0, + createTime: Instant = Instant.now(), + ): Unit { + TelemetryService.getInstance().record(connectionSettings) { + datum("test_metric") { + createTime(createTime) + unit(software.amazon.awssdk.services.toolkittelemetry.model.Unit.NONE) + value(value) + passive(passive) + metadata("testAllowedValues", testAllowedValues.toString()) + } + } + } + + /** + * A test for defining allowedValues + */ + public fun metric( + metadata: MetricEventMetadata, + testAllowedValues: TestAllowedValues, + passive: Boolean = false, + `value`: Double = 1.0, + createTime: Instant = Instant.now(), + ): Unit { + TelemetryService.getInstance().record(metadata) { + datum("test_metric") { + createTime(createTime) + unit(software.amazon.awssdk.services.toolkittelemetry.model.Unit.NONE) + value(value) + passive(passive) + metadata("testAllowedValues", testAllowedValues.toString()) + } + } + } +} diff --git a/telemetry/vscode/README.md b/telemetry/vscode/README.md index 38e05e88..d9cd2fde 100644 --- a/telemetry/vscode/README.md +++ b/telemetry/vscode/README.md @@ -12,3 +12,9 @@ The script has two arguments: 1. `--extraInput` accepts lists of paths to telemetry JSON files, seperated by commas. For example, "--extraInput=abc.json,/abc/bcd.json" 2. `--output` accepts one path which represents where the final output will go. For example, "--output=abc.ts" + +## Testing + +### Running Tests + +To run the tests you can run them from this directory `telemetry/vscode` with the `npm run test` command. \ No newline at end of file diff --git a/telemetry/vscode/src/generate.ts b/telemetry/vscode/src/generate.ts index 980bf250..7e4242bd 100644 --- a/telemetry/vscode/src/generate.ts +++ b/telemetry/vscode/src/generate.ts @@ -81,10 +81,7 @@ function getArgsFromMetadata(m: MetadataType): string { name, kind: StructureKind.TypeAlias, isExported: true, - type: m.allowedValues.map(v => { - const modifiedVal = typeof v === "string" ? v.replace(/\s/g, "_") : v; - return `'${modifiedVal}'` - }).join(' | '), + type: m.allowedValues.map(v => `'${v}'`).join(' | '), }) } diff --git a/telemetry/vscode/test/generator.test.ts b/telemetry/vscode/test/generator.test.ts index 1e031426..d88225c2 100644 --- a/telemetry/vscode/test/generator.test.ts +++ b/telemetry/vscode/test/generator.test.ts @@ -12,7 +12,6 @@ describe('Generator', () => { beforeAll(() => { tempDir = tmpdir() }) - test('Generate fails when validation fails', async () => { await expect(testGenerator(['resources/invalidInput.json'], '/invalid/file/path')).rejects.toBeDefined() }) @@ -28,6 +27,13 @@ describe('Generator', () => { ) }) + test('Generate replaces allowedValues spaces with underscores', async () => { + await testGenerator( + ['resources/generatorAllowedValuesInput.json'], + 'resources/generatorAllowedValuesOutput.ts' + ) + }) + async function testGenerator(inputFiles: string[], expectedOutputFile: string) { const output = `${tempDir}/output` await generate({ inputFiles: inputFiles.map(item => `${__dirname}/${item}`), outputFile: output }) diff --git a/telemetry/vscode/test/resources/generatorAllowedValuesInput.json b/telemetry/vscode/test/resources/generatorAllowedValuesInput.json new file mode 100644 index 00000000..870987d9 --- /dev/null +++ b/telemetry/vscode/test/resources/generatorAllowedValuesInput.json @@ -0,0 +1,36 @@ + +{ + "types": [ + { + "name": "result", + "allowedValues": ["Succeeded"], + "description": "The result of the operation" + }, + { + "name": "reason", + "type": "string", + "description": "The reason for a metric or exception depending on context" + }, + { + "name": "duration", + "type": "double", + "description": "The duration of the operation in miliseconds" + }, + { + "name": "testAllowedValues", + "allowedValues": [ + "test spaces are replaced", + "in allowed values output key" + ], + "description": "A test object for parsing allowedValues" + } + ], + "metrics": [ + { + "name": "test_metric", + "description": "A test for defining allowedValues", + "unit": "None", + "metadata": [{ "type": "testAllowedValues" }] + } + ] +} diff --git a/telemetry/vscode/test/resources/generatorAllowedValuesOutput.ts b/telemetry/vscode/test/resources/generatorAllowedValuesOutput.ts new file mode 100644 index 00000000..718d1a14 --- /dev/null +++ b/telemetry/vscode/test/resources/generatorAllowedValuesOutput.ts @@ -0,0 +1,62 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ +export interface MetricBase { + /** The result of the operation */ + readonly result?: Result + /** The reason for a metric or exception depending on context */ + readonly reason?: string + /** The duration of the operation in miliseconds */ + readonly duration?: number + /** A flag indicating that the metric was not caused by the user. */ + readonly passive?: boolean + /** @deprecated Arbitrary "value" of the metric. */ + readonly value?: number +} + +export interface TestMetric extends MetricBase { + /** A test object for parsing allowedValues */ + readonly testAllowedValues: TestAllowedValues +} + +export type Result = 'Succeeded' +export type LambdaRuntime = 'dotnetcore2.1' | 'nodejs12.x' +export type TestAllowedValues = 'test spaces are replaced' | 'in allowed values output key' + +export interface MetricDefinition { + readonly unit: string + readonly passive: boolean + readonly requiredMetadata: readonly string[] +} + +export interface MetricShapes { + readonly test_metric: TestMetric +} + +export type MetricName = keyof MetricShapes + +export const definitions: Record = { + test_metric: { unit: 'None', passive: false, requiredMetadata: ['testAllowedValues'] }, +} + +export type Metadata = Partial> + +export interface Metric { + readonly name: string + /** Adds data to the metric which is preserved for the remainder of the execution context */ + record(data: Metadata): void + /** Sends the metric to the telemetry service */ + emit(data?: T): void + /** Executes a callback, automatically sending the metric after completion */ + run(fn: (span: this) => U): U +} + +export abstract class TelemetryBase { + /** A test for defining allowedValues */ + public get test_metric(): Metric { + return this.getMetric('test_metric') + } + + protected abstract getMetric(name: string): Metric +}