├── DeveloperSamples
├── MonitoringAndTelemetryExtensionSample
│ ├── obj
│ │ └── Debug
│ │ │ ├── TelemetryExtensionExample.rnrproj.FileListAbsolute.txt
│ │ │ ├── TelemetryExtensionExample.rnrproj.AssemblyReference.cache
│ │ │ └── MonitoringAndTelemetryExampleUsage.rnrproj.AssemblyReference.cache
│ ├── UpgradeLog.htm
│ ├── ScreenShots
│ │ ├── BuildModel.png
│ │ ├── RefreshAOT.png
│ │ ├── MyTelemetryBase.png
│ │ ├── LoggingTelemetry.png
│ │ ├── ProjectStructure.png
│ │ ├── ApplicationInsights.png
│ │ ├── BuildRelevantModel.png
│ │ ├── SynchronizeDatabase.png
│ │ ├── TelemetryLogSettings.png
│ │ ├── ConcreteTelemetryClass.png
│ │ ├── HowToDisableParticularTelemetry.png
│ │ └── FineGrainedControlwithinTheTelemetryClass.png
│ ├── .vs
│ │ ├── MonitoringAndTelemetryExampleUsage
│ │ │ ├── v16
│ │ │ │ └── .suo
│ │ │ ├── v17
│ │ │ │ ├── .suo
│ │ │ │ └── DocumentLayout.json
│ │ │ └── FileContentIndex
│ │ │ │ ├── 118bd515-df8f-4dab-b780-fafbc7beed17.vsidx
│ │ │ │ ├── b21a2757-388f-414e-93d6-1b4cebc6a290.vsidx
│ │ │ │ ├── cd5ba14b-e4ef-43b2-84d3-eec1f6a38196.vsidx
│ │ │ │ ├── e76af3b5-4af1-4c3e-bf6f-3842aff5fb07.vsidx
│ │ │ │ └── fff87483-d25e-417e-9289-4d88e7bc2eec.vsidx
│ │ └── TelemetryExtensionExample
│ │ │ └── FileContentIndex
│ │ │ └── 2a02b599-fb93-4df8-8af9-72a672677170.vsidx
│ ├── bin
│ │ ├── AxEdt
│ │ │ └── MyTelemetryClass.xml
│ │ ├── AxClass
│ │ │ ├── MyApplicationInsightsEventIds.xml
│ │ │ ├── MyApplicationInsightsEventNames.xml
│ │ │ ├── MyApplicationInsightsProperty.xml
│ │ │ ├── TelemetryPurchaseOrderConfirm.xml
│ │ │ ├── TelemetryShipConfirm.xml
│ │ │ ├── TelemetrySalesOrderConfirm.xml
│ │ │ ├── DMFDefinitionGroupExecutionHistory_Extension.xml
│ │ │ ├── WhsShipConfirm_Extension.xml
│ │ │ ├── MyApplicationInsightsEventProperties.xml
│ │ │ ├── MySysIntParametersFormEventHandler.xml
│ │ │ ├── TelemetryDataManagementImport.xml
│ │ │ └── MyTelemetryBase.xml
│ │ ├── AxEnum
│ │ │ └── MyTelemetrySeverityLevel.xml
│ │ ├── AxTable
│ │ │ └── MyTelemetryParameters.xml
│ │ └── AxFormExtension
│ │ │ └── SysIntParameters.MyExtension.xml
│ ├── MonitoringAndTelemetryExampleUsage.sln
│ ├── readme.md
│ └── MonitoringAndTelemetryExampleUsage.rnrproj
├── README.md
└── LICENSE
├── Dashboards
└── AzureDataExplorer
│ ├── img
│ ├── 2EditName.png
│ ├── 3Datasource.png
│ ├── 1ImportSample.png
│ ├── 5DatasourceSet.png
│ └── 4DatasourceEdit.png
│ ├── Errors
│ ├── img
│ │ ├── 2EditName.png
│ │ ├── 3Datasource.png
│ │ ├── 1ImportSample.png
│ │ ├── 5DatasourceSet.png
│ │ ├── 4DatasourceEdit.png
│ │ └── ErrorsDashboard.png
│ ├── readme.md
│ └── dashboard-D365FO-Monitoring-Errors.json
│ ├── Forms
│ ├── img
│ │ ├── 1ImportSample.png
│ │ ├── 3Datasource.png
│ │ ├── 2EditNameForms.png
│ │ ├── 4DatasourceEdit.png
│ │ ├── 5DatasourceSet.png
│ │ └── FormsUsageDashboard.png
│ ├── readme.md
│ └── ADE-Dashboard-D365FO-Monitoring-Forms.json
│ ├── DMF Errors
│ ├── img
│ │ ├── Dashboard.png
│ │ ├── Datasources.png
│ │ ├── EditDatasources.png
│ │ ├── ImportDashboard.png
│ │ ├── SubscriptionId.png
│ │ └── SubscriptionIdAndDatasource.png
│ ├── readme.md
│ └── dashboard-DMF Errors.json
│ ├── SlowQueries
│ ├── img
│ │ ├── 2EditName.png
│ │ ├── 3Datasource.png
│ │ ├── 1ImportSample.png
│ │ ├── 5DatasourceSet.png
│ │ ├── 4DatasourceEdit.png
│ │ └── SlowQueriesDashboard1.png
│ ├── readme.md
│ └── ADE-Dashboard-D365FO-Monitoring-SlowQueries.json
│ ├── readme.md
│ └── Batch
│ └── ADE-Dashboard-D365FO-Monitoring-Batch.json
├── SampleXppExtensions
├── readme.md
├── Metadata
│ └── FTApplicationInsightsTelemetry
│ │ ├── FTApplicationInsightsTelemetry
│ │ └── AxClass
│ │ │ ├── TestClass.xml
│ │ │ └── SecondTestClass.xml
│ │ └── Descriptor
│ │ └── FTApplicationInsightsTelemetry.xml
└── Projects
│ └── FastTrackFscmTelemetrySamples
│ ├── FastTrackFscmTelemetrySamples.sln
│ └── Order2Cash
│ └── Order2Cash.rnrproj
├── .gitignore
├── CODE_OF_CONDUCT.md
├── LICENSE
├── SUPPORT.md
├── SECURITY.md
├── README.md
├── FAQ.md
└── KustoQueries
└── SlowQueries.kql
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/obj/Debug/TelemetryExtensionExample.rnrproj.FileListAbsolute.txt:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/DeveloperSamples/README.md:
--------------------------------------------------------------------------------
1 | # D365-FO-MonitoringAndTelemetry-Samples
2 | This repository provides samples for utilizing D365 F&O Monitoring and Telemetry feature
3 |
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/img/2EditName.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/img/2EditName.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/img/3Datasource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/img/3Datasource.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/img/1ImportSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/img/1ImportSample.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/img/5DatasourceSet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/img/5DatasourceSet.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Errors/img/2EditName.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/Errors/img/2EditName.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/img/4DatasourceEdit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/img/4DatasourceEdit.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Errors/img/3Datasource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/Errors/img/3Datasource.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Forms/img/1ImportSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/Forms/img/1ImportSample.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Forms/img/3Datasource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/Forms/img/3Datasource.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/DMF Errors/img/Dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/DMF Errors/img/Dashboard.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Errors/img/1ImportSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/Errors/img/1ImportSample.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Errors/img/5DatasourceSet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/Errors/img/5DatasourceSet.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Forms/img/2EditNameForms.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/Forms/img/2EditNameForms.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Forms/img/4DatasourceEdit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/Forms/img/4DatasourceEdit.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Forms/img/5DatasourceSet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/Forms/img/5DatasourceSet.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/SlowQueries/img/2EditName.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/SlowQueries/img/2EditName.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/DMF Errors/img/Datasources.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/DMF Errors/img/Datasources.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Errors/img/4DatasourceEdit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/Errors/img/4DatasourceEdit.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Errors/img/ErrorsDashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/Errors/img/ErrorsDashboard.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/SlowQueries/img/3Datasource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/SlowQueries/img/3Datasource.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/DMF Errors/img/EditDatasources.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/DMF Errors/img/EditDatasources.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/DMF Errors/img/ImportDashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/DMF Errors/img/ImportDashboard.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/DMF Errors/img/SubscriptionId.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/DMF Errors/img/SubscriptionId.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Forms/img/FormsUsageDashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/Forms/img/FormsUsageDashboard.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/SlowQueries/img/1ImportSample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/SlowQueries/img/1ImportSample.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/SlowQueries/img/5DatasourceSet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/SlowQueries/img/5DatasourceSet.png
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/SlowQueries/img/4DatasourceEdit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/SlowQueries/img/4DatasourceEdit.png
--------------------------------------------------------------------------------
/SampleXppExtensions/readme.md:
--------------------------------------------------------------------------------
1 | # FastTrack Dynamics 365 Finance and Supply Chain Management Monitoring and Telemetry extensions
2 | FastTrack Dynamics 365 Finance and Supply Chain Management Monitoring and Telemetry extensions
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/SlowQueries/img/SlowQueriesDashboard1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/SlowQueries/img/SlowQueriesDashboard1.png
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/UpgradeLog.htm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/UpgradeLog.htm
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/DMF Errors/img/SubscriptionIdAndDatasource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/Dashboards/AzureDataExplorer/DMF Errors/img/SubscriptionIdAndDatasource.png
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/BuildModel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/BuildModel.png
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/RefreshAOT.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/RefreshAOT.png
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/MyTelemetryBase.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/MyTelemetryBase.png
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/LoggingTelemetry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/LoggingTelemetry.png
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/ProjectStructure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/ProjectStructure.png
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/ApplicationInsights.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/ApplicationInsights.png
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/BuildRelevantModel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/BuildRelevantModel.png
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/SynchronizeDatabase.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/SynchronizeDatabase.png
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/TelemetryLogSettings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/TelemetryLogSettings.png
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/ConcreteTelemetryClass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/ConcreteTelemetryClass.png
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/MonitoringAndTelemetryExampleUsage/v16/.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/MonitoringAndTelemetryExampleUsage/v16/.suo
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/MonitoringAndTelemetryExampleUsage/v17/.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/MonitoringAndTelemetryExampleUsage/v17/.suo
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/HowToDisableParticularTelemetry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/HowToDisableParticularTelemetry.png
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/FineGrainedControlwithinTheTelemetryClass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/ScreenShots/FineGrainedControlwithinTheTelemetryClass.png
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/obj/Debug/TelemetryExtensionExample.rnrproj.AssemblyReference.cache:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/obj/Debug/TelemetryExtensionExample.rnrproj.AssemblyReference.cache
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/obj/Debug/MonitoringAndTelemetryExampleUsage.rnrproj.AssemblyReference.cache:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/obj/Debug/MonitoringAndTelemetryExampleUsage.rnrproj.AssemblyReference.cache
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/TelemetryExtensionExample/FileContentIndex/2a02b599-fb93-4df8-8af9-72a672677170.vsidx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/TelemetryExtensionExample/FileContentIndex/2a02b599-fb93-4df8-8af9-72a672677170.vsidx
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/MonitoringAndTelemetryExampleUsage/FileContentIndex/118bd515-df8f-4dab-b780-fafbc7beed17.vsidx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/MonitoringAndTelemetryExampleUsage/FileContentIndex/118bd515-df8f-4dab-b780-fafbc7beed17.vsidx
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/MonitoringAndTelemetryExampleUsage/FileContentIndex/b21a2757-388f-414e-93d6-1b4cebc6a290.vsidx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/MonitoringAndTelemetryExampleUsage/FileContentIndex/b21a2757-388f-414e-93d6-1b4cebc6a290.vsidx
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/MonitoringAndTelemetryExampleUsage/FileContentIndex/cd5ba14b-e4ef-43b2-84d3-eec1f6a38196.vsidx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/MonitoringAndTelemetryExampleUsage/FileContentIndex/cd5ba14b-e4ef-43b2-84d3-eec1f6a38196.vsidx
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/MonitoringAndTelemetryExampleUsage/FileContentIndex/e76af3b5-4af1-4c3e-bf6f-3842aff5fb07.vsidx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/MonitoringAndTelemetryExampleUsage/FileContentIndex/e76af3b5-4af1-4c3e-bf6f-3842aff5fb07.vsidx
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/MonitoringAndTelemetryExampleUsage/FileContentIndex/fff87483-d25e-417e-9289-4d88e7bc2eec.vsidx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples/HEAD/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/MonitoringAndTelemetryExampleUsage/FileContentIndex/fff87483-d25e-417e-9289-4d88e7bc2eec.vsidx
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxEdt/MyTelemetryClass.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | MyTelemetryClass
5 |
6 | MyTelemetryClass
7 |
8 |
9 |
10 |
11 | 100
12 |
--------------------------------------------------------------------------------
/SampleXppExtensions/Metadata/FTApplicationInsightsTelemetry/FTApplicationInsightsTelemetry/AxClass/TestClass.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | TestClass
4 |
5 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/SampleXppExtensions/Metadata/FTApplicationInsightsTelemetry/FTApplicationInsightsTelemetry/AxClass/SecondTestClass.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | SecondTestClass
4 |
5 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ################################################################################
2 | # This .gitignore file was automatically created by Microsoft(R) Visual Studio.
3 | ################################################################################
4 |
5 | /SampleXppExtensions/Projects/FastTrackFscmTelemetrySamples/.vs
6 | /SampleXppExtensions/Projects/FastTrackFscmTelemetrySamples/Order2Cash/obj/Debug
7 | /SampleXppExtensions/Metadata/FTApplicationInsightsTelemetry/XppMetadata
8 | /.vs
9 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Microsoft Open Source Code of Conduct
2 |
3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
4 |
5 | Resources:
6 |
7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns
10 |
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxClass/MyApplicationInsightsEventIds.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | MyApplicationInsightsEventIds
4 |
5 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxClass/MyApplicationInsightsEventNames.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | MyApplicationInsightsEventNames
4 |
5 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/SampleXppExtensions/Projects/FastTrackFscmTelemetrySamples/FastTrackFscmTelemetrySamples.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.8.34322.80
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FC65038C-1B2F-41E1-A629-BED71D161FFF}") = "Order2Cash (USR) [FTApplicationInsightsTelemetry]", "Order2Cash\Order2Cash.rnrproj", "{A24B055C-A29A-4198-AA06-F62C9471F635}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | EndGlobalSection
12 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
13 | {A24B055C-A29A-4198-AA06-F62C9471F635}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
14 | {A24B055C-A29A-4198-AA06-F62C9471F635}.Debug|Any CPU.Build.0 = Debug|Any CPU
15 | EndGlobalSection
16 | GlobalSection(SolutionProperties) = preSolution
17 | HideSolutionNode = FALSE
18 | EndGlobalSection
19 | GlobalSection(ExtensibilityGlobals) = postSolution
20 | SolutionGuid = {A9A4A4C2-DD6A-4001-9B15-90EA91FCF4A4}
21 | EndGlobalSection
22 | EndGlobal
23 |
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/MonitoringAndTelemetryExampleUsage.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.10.35004.147
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FC65038C-1B2F-41E1-A629-BED71D161FFF}") = "MonitoringAndTelemetryExampleUsage (SYS) [Application Suite]", "MonitoringAndTelemetryExampleUsage.rnrproj", "{7A2363FB-28BD-4203-BDDC-661CC58FBC68}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | EndGlobalSection
12 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
13 | {7A2363FB-28BD-4203-BDDC-661CC58FBC68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
14 | {7A2363FB-28BD-4203-BDDC-661CC58FBC68}.Debug|Any CPU.Build.0 = Debug|Any CPU
15 | EndGlobalSection
16 | GlobalSection(SolutionProperties) = preSolution
17 | HideSolutionNode = FALSE
18 | EndGlobalSection
19 | GlobalSection(ExtensibilityGlobals) = postSolution
20 | SolutionGuid = {86B94DEA-DDB4-40C8-89F3-6F762E52161C}
21 | EndGlobalSection
22 | EndGlobal
23 |
--------------------------------------------------------------------------------
/DeveloperSamples/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 HemanthKumar-H
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxEnum/MyTelemetrySeverityLevel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | MyTelemetrySeverityLevel
4 |
5 | MyTelemetrySeverityLevelHelp
6 |
7 |
8 | MyTelemetrySeverityLevel
9 |
10 |
11 |
12 | Verbose
13 |
14 | MyTelemetrySeverityVerbose
15 |
16 | 1
17 |
18 |
19 | Information
20 |
21 | MyTelemetrySeverityInformation
22 |
23 | 2
24 |
25 |
26 | Warning
27 |
28 | MyTelemetrySeverityWarning
29 |
30 | 3
31 |
32 |
33 | Error
34 |
35 | MyTelemetrySeverityError
36 |
37 | 4
38 |
39 |
40 | Critical
41 |
42 | MyelemetrySeverityCritical
43 |
44 | 5
45 |
46 |
47 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) Microsoft Corporation.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE
22 |
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxClass/MyApplicationInsightsProperty.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | MyApplicationInsightsProperty
4 |
5 |
7 | /// Concrete class for Application Insights message payload properties.
8 | ///
9 | public final class MyApplicationInsightsProperty extends SysApplicationInsightsProperty
10 | {
11 | private str key;
12 | private SysApplicationInsightsComplianceDataType dataType;
13 |
14 | }
15 | ]]>
16 |
17 |
18 | new
19 |
29 |
30 |
31 | initialize
32 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/SlowQueries/readme.md:
--------------------------------------------------------------------------------
1 | # AOS Slow Query Telemetry dasboard
2 | This dashboard shows information about slow queries that are reported by the AOS. Using this dashboard, it is possible to:
3 | - Measure the number of slow queries over time.
4 | - List slow by their duration.
5 | - Investigate slow queries based on location.
6 |
7 | ## Dashboard overview
8 |
9 |
10 |
11 | ## Steps to import the sample dashboard:
12 | 1. Import the file "ADE-Dashboard-D365FO-Monitoring-SlowQueries.json".
13 |
14 |
15 |
16 | 2. Name the dashboard appropriately.
17 |
18 |
19 |
20 | 3. Click to select datasources.
21 |
22 |
23 |
24 | 4. There is a templated datasource with dummy placeholders. You need to replace with your Azure subscription, resource group and Application Insights instance.
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/readme.md:
--------------------------------------------------------------------------------
1 | # Azure Data Explorer sample dashboards
2 |
3 |
4 | | Dashboard | Description | Take me there (use CTRL+click to open in a new tab) |
5 | | ------ | ------ | ------ |
6 | | Slow queries | Slow queries reported by the AOS. | [Slow Queries](SlowQueries) |
7 | | Form usage | Form usage telemetry. | [Form Usage](Forms) |
8 | | Errors | Errors reported by the envioronments. | [Errors](Errors) |
9 |
10 | ## Steps to import the sample dashboard:
11 | 1. Import the file (e.g "ADE-Dashboard-D365FO-Monitoring-SlowQueries.json").
12 |
13 |
14 |
15 | 2. Name the dashboard appropriately.
16 |
17 |
18 |
19 | 3. Click to select datasources.
20 |
21 |
22 |
23 | 4. There is a templated datasource with dummy placeholders. You need to replace with your Azure subscription, resource group and Application Insights instance.
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/SUPPORT.md:
--------------------------------------------------------------------------------
1 | # TODO: The maintainer of this repo has not yet edited this file
2 |
3 | **REPO OWNER**: Do you want Customer Service & Support (CSS) support for this product/project?
4 |
5 | - **No CSS support:** Fill out this template with information about how to file issues and get help.
6 | - **Yes CSS support:** Fill out an intake form at [aka.ms/onboardsupport](https://aka.ms/onboardsupport). CSS will work with/help you to determine next steps.
7 | - **Not sure?** Fill out an intake as though the answer were "Yes". CSS will help you decide.
8 |
9 | *Then remove this first heading from this SUPPORT.MD file before publishing your repo.*
10 |
11 | # Support
12 |
13 | ## How to file issues and get help
14 |
15 | This project uses GitHub Issues to track bugs and feature requests. Please search the existing
16 | issues before filing new issues to avoid duplicates. For new issues, file your bug or
17 | feature request as a new Issue.
18 |
19 | For help and questions about using this project, please **REPO MAINTAINER: INSERT INSTRUCTIONS HERE
20 | FOR HOW TO ENGAGE REPO OWNERS OR COMMUNITY FOR HELP. COULD BE A STACK OVERFLOW TAG OR OTHER
21 | CHANNEL. WHERE WILL YOU HELP PEOPLE?**.
22 |
23 | ## Microsoft Support Policy
24 |
25 | Support for this **PROJECT or PRODUCT** is limited to the resources listed above.
26 |
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Errors/readme.md:
--------------------------------------------------------------------------------
1 | # Errors Telemetry dasboard
2 | This dashboard shows information about errors that are reported by the environments. Using this dashboard, it is possible to:
3 | - Investigate the nature and distributiion of the errors over time.
4 | - Review the errors in the envirionemnts
5 | - Revire the source of errors, gruppong them by legal entity, reer type and users
6 |
7 | ## Dashboard overview
8 |
9 |
10 |
11 | ## Steps to import the sample dashboard:
12 | 1. Import the file "dashboard-D365FO-Monitoring-Errors.json".
13 |
14 |
15 |
16 | 2. Name the dashboard appropriately.
17 |
18 |
19 |
20 | 3. Click to select datasources.
21 |
22 |
23 |
24 | 4. There is a templated datasource with dummy placeholders. You need to replace with your Azure subscription, resource group and Application Insights instance.
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/SampleXppExtensions/Metadata/FTApplicationInsightsTelemetry/Descriptor/FTApplicationInsightsTelemetry.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Allow
5 |
6 | FTApplicationInsightsTelemetry
7 | 896000533
8 |
9 | 14
10 | false
11 | FTApplicationInsightsTelemetry
12 |
14 |
15 | ApplicationCommon
16 | ApplicationFoundation
17 | ApplicationPlatform
18 | ApplicationSuite
19 |
20 | FTApplicationInsightsTelemetry
21 | Microsoft Dynamics 365 FastTrack
22 | 00000000-0000-0000-0000-000000000000
23 | 0
24 | 1
25 | 0
26 | 0
27 |
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/DMF Errors/readme.md:
--------------------------------------------------------------------------------
1 | # Form Load and Plugin Dashboard
2 | This dashboard shows information about DMF errors and distribution of DMF errors in your solution. Using this dashboard, it is possible to identify:
3 | - Distribution of different eror types in your solution. error code description here : https://review.learn.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/data-entities/dm-error-descriptions
4 | - ExecutionId, ActivityId and other details for the errors in DMF
5 | - Error message
6 |
7 | ## Dashboard overview
8 |
9 |
10 |
11 | ## Steps to import the sample dashboard:
12 | 1. Import the file "dashboard-DMF Errors.json".
13 |
14 |
15 |
16 | 2. Name the dashboard appropriately and then click to select datasources
17 |
18 |
19 |
20 | 3. In the Datasource selection pane you have to put your Azure Application Insights subscriptionID in the placeholder .
21 |
22 |
23 |
24 |
25 | 4. After updating the correct subscriptionID. click on connect.
26 |
27 | 5. You will get a list of databases. Select your ApplicationInsights name from that list and save changes.
28 |
29 | 6. your dashboard should have data now. Feel free to edit the queries to suit your needs.
30 |
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Forms/readme.md:
--------------------------------------------------------------------------------
1 | # Forms usage dashboard
2 | This dashboard shows information about form usage in Dynacmis 365 Finance and SCM. Using this dashboard, it is possible to:
3 | - Investigate the most used forms in the environment with the ability to filter on a specific user, form name or activity id.
4 | - Review the opening times of the forms and find out what forms are slowest.
5 | - Review trends of the curent form loading times over the last 14 / 30 days.
6 | - Review individual opening times based on specific activities.
7 |
8 | ## Dashboard overview
9 | Note: the "Interaction difference" column can be used to identify forms that never complete the initialization.
10 |
11 |
12 | ## Steps to import the sample dashboard:
13 | 1. Import the file "ADE-Dashboard-D365FO-Monitoring-Forms.json".
14 |
15 |
16 |
17 | 2. Name the dashboard appropriately.
18 |
19 |
20 |
21 | 3. Click to select datasources.
22 |
23 |
24 |
25 | 4. There is a templated datasource with dummy placeholders. You need to replace with your Azure subscription, resource group and Application Insights instance.
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxClass/TelemetryPurchaseOrderConfirm.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | TelemetryPurchaseOrderConfirm
4 |
5 |
7 | /// TelemetryPurchaseOrderConfirm class extending methods of MyTelemetryBase class
8 | ///
9 | final class TelemetryPurchaseOrderConfirm extends MyTelemetryBase
10 | {
11 | private PurchTable purchTable;
12 |
13 | }
14 | ]]>
15 |
16 |
17 | new
18 |
26 |
27 |
28 | shouldLogEvent
29 |
36 |
37 |
38 | populateProperties
39 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxClass/TelemetryShipConfirm.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | TelemetryShipConfirm
4 |
5 |
7 | /// TelemetryShipConfirm class extending methods of MyTelemetryBase class
8 | ///
9 | final class TelemetryShipConfirm extends MyTelemetryBase
10 | {
11 | private WHSLoadTable load;
12 |
13 | }
14 | ]]>
15 |
16 |
17 | new
18 |
27 |
28 |
29 | shouldLogEvent
30 |
37 |
38 |
39 | populateProperties
40 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxClass/TelemetrySalesOrderConfirm.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | TelemetrySalesOrderConfirm
4 |
5 |
7 | /// TelemetrySalesOrderConfirm class extending methods of MyTelemetryBase class
8 | ///
9 | final class TelemetrySalesOrderConfirm extends MyTelemetryBase
10 | {
11 | private SalesTable salesTable;
12 | private str error;
13 | }
14 | ]]>
15 |
16 |
17 | new
18 |
32 |
33 |
34 | shouldLogEvent
35 | MyTelemetrySeverityLevel::Information)
39 | {
40 | return false;
41 | }
42 |
43 | return true;
44 | }
45 |
46 | ]]>
47 |
48 |
49 | populateProperties
50 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxClass/DMFDefinitionGroupExecutionHistory_Extension.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | DMFDefinitionGroupExecutionHistory_Extension
4 |
5 |
7 | /// DMFDefinitionGroupExecutionHistory_Extension Table extension
8 | ///
9 | [ExtensionOf(tableStr(DMFDefinitionGroupExecutionHistory))]
10 | final class DMFDefinitionGroupExecutionHistory_Extension
11 | {
12 | }
13 | ]]>
14 |
15 |
16 | insertExecutionHistory
17 |
19 | /// Insert execution history
20 | ///
21 | /// DMFDefinitionGroupExecution record
22 | public void insertExecutionHistory(DMFDefinitionGroupExecution _definitionGroupExecution)
23 | {
24 | next insertExecutionHistory(_definitionGroupExecution);
25 |
26 | DMFDefinitionGroupExecution dmfDefinitionGroupExecution = DMFDefinitionGroupExecution::find(_definitionGroupExecution.DefinitionGroup,_definitionGroupExecution.Entity,_definitionGroupExecution.ExecutionId);
27 | DMFDefinitionGroupExecutionHistory dmfDefinitionGroupExecutionHistory = DMFDefinitionGroupExecutionHistory::find(dmfDefinitionGroupExecution.DefinitionGroup, dmfDefinitionGroupExecution.Entity,
28 | dmfDefinitionGroupExecution.ExecutionId, dmfDefinitionGroupExecution.WriteStartDateTime, true);
29 |
30 | // Add any other conditions to log only for the entities you want here.
31 | if (dmfDefinitionGroupExecutionHistory.RecId)
32 | {
33 | new TelemetryDataManagementImport(dmfDefinitionGroupExecutionHistory.WriteStartDateTime, dmfDefinitionGroupExecutionHistory.WriteEndDateTime, dmfDefinitionGroupExecutionHistory).processEvent(MyApplicationInsightsEventNames::DMFDefinitionGroupExecutionHistory);
34 | }
35 | }
36 |
37 | ]]>
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxClass/WhsShipConfirm_Extension.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | WhsShipConfirm_Extension
4 |
5 |
7 | /// Extension for the class WhsShipConfirm .
8 | ///
9 | [ExtensionOf(classStr(WhsShipConfirm))]
10 | final class WhsShipConfirm_Extension
11 | {
12 | }
13 | ]]>
14 |
15 |
16 | shipConfirm
17 |
19 | /// Wrapper to WhsShipConfirm.shipConfirm(WHSLoadId loadId). Insert your logic around shipConfirm here.
20 | ///
21 | /// loadId value
22 | public void shipConfirm(WHSLoadId loadId)
23 | {
24 | // Generate telemetry after the shipConfirm operation
25 | WHSLoadTable loadTable = WHSLoadTable::find(loadId);
26 | var telemetry = new TelemetryShipConfirm(loadTable);
27 |
28 | try
29 | {
30 | // Call the original shipConfirm method
31 | next shipConfirm(loadId);
32 | }
33 | catch (Exception::Deadlock)
34 | {
35 | retry;
36 | }
37 | catch (Exception::UpdateConflict)
38 | {
39 | if (appl.ttsLevel() == 0)
40 | {
41 | // Define the retry count globally.
42 | var retryCount = 3;
43 | if (xSession::currentRetryCount() >= retryCount)
44 | {
45 | throw Exception::UpdateConflictNotRecovered;
46 | }
47 | else
48 | {
49 | retry;
50 | }
51 | }
52 | else
53 | {
54 | throw Exception::UpdateConflict;
55 | }
56 | }
57 | catch (Exception::Error)
58 | {
59 | throw Exception::Error;
60 | }
61 |
62 | telemetry.processEvent(MyApplicationInsightsEventNames::WHSShipConfirm);
63 | }
64 |
65 | ]]>
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxClass/MyApplicationInsightsEventProperties.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | MyApplicationInsightsEventProperties
4 |
5 |
7 | /// The MyApplicationInsightsEventProperties class contains all available event properties that can be used in the Application Insights telemetry.
8 | ///
9 | ///
10 | /// The names must be unique.
11 | /// Please keep the list sorted alphabetically in ascending order.
12 | ///
13 | internal static final class MyApplicationInsightsEventProperties
14 | {
15 | internal static const str InventLocationId = 'inventLocationId';
16 | internal static const str LoadId = 'loadId';
17 | internal static const str LoadStatus = 'loadStatus';
18 | internal static const str NumOfLines = 'numOfLines';
19 | internal static const str SalesId = 'salesId';
20 | internal static const str CustAccount = 'custAccount';
21 | internal static const str SalesStatus = 'salesStatus';
22 | internal static const str DeliveryDate = 'deliveryDate';
23 | internal static const str PurchId = 'PurchId';
24 | internal static const str VendorName = 'vendorName';
25 | internal static const str PurchStatus = 'PurchStatus';
26 | internal static const str ElapsedMilliseconds = 'ElapsedMilliseconds';
27 | internal static const str DefinitionGroup = 'DefinitionGroup';
28 | internal static const str Entity = 'Entity';
29 | internal static const str ExecutionId = 'ExecutionId';
30 | internal static const str NoOfRecords = 'NoOfRecords';
31 | internal static const str NumOfTargetNew = 'NumOfTargetNew';
32 | internal static const str NumOfTargetUpdated = 'NumOfTargetUpdated';
33 |
34 | }
35 | ]]>
36 |
37 |
38 |
--------------------------------------------------------------------------------
/SampleXppExtensions/Projects/FastTrackFscmTelemetrySamples/Order2Cash/Order2Cash.rnrproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | $(MSBuildProgramFiles32)\MSBuild\Microsoft\Dynamics\AX
7 | FTApplicationInsightsTelemetry
8 | v4.6
9 | bin
10 | 2.0
11 | True
12 | False
13 | False
14 | False
15 | {a24b055c-a29a-4198-aa06-f62c9471f635}
16 | Order2Cash
17 | Order2Cash
18 |
19 |
20 | Debug
21 | False
22 | False
23 |
24 |
25 | initial
26 | AnyCPU
27 | False
28 | False
29 |
30 |
31 | true
32 | false
33 |
34 |
35 |
36 |
37 |
38 |
39 | Content
40 | SecondTestClass
41 | Classes\SecondTestClass
42 |
43 |
44 | Content
45 | TestClass
46 | Classes\TestClass
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## Security
4 |
5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet) and [Xamarin](https://github.com/xamarin).
6 |
7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/security.md/definition), please report it to us as described below.
8 |
9 | ## Reporting Security Issues
10 |
11 | **Please do not report security vulnerabilities through public GitHub issues.**
12 |
13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/security.md/msrc/create-report).
14 |
15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/security.md/msrc/pgp).
16 |
17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc).
18 |
19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
20 |
21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
22 | * Full paths of source file(s) related to the manifestation of the issue
23 | * The location of the affected source code (tag/branch/commit or direct URL)
24 | * Any special configuration required to reproduce the issue
25 | * Step-by-step instructions to reproduce the issue
26 | * Proof-of-concept or exploit code (if possible)
27 | * Impact of the issue, including how an attacker might exploit the issue
28 |
29 | This information will help us triage your report more quickly.
30 |
31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/security.md/msrc/bounty) page for more details about our active programs.
32 |
33 | ## Preferred Languages
34 |
35 | We prefer all communications to be in English.
36 |
37 | ## Policy
38 |
39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/security.md/cvd).
40 |
41 |
42 |
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxClass/MySysIntParametersFormEventHandler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | MySysIntParametersFormEventHandler
4 |
5 |
10 |
11 |
12 | SysIntParameters_OnInitializing
13 |
15 | ///
16 | ///
17 | ///
18 | ///
19 | [FormEventHandler(formStr(SysIntParameters), FormEventType::Initializing)]
20 | public static void SysIntParameters_OnInitializing(xFormRun sender, FormEventArgs e)
21 | {
22 |
23 | #define.ClassPath(@"\Classes\%1")
24 |
25 | SysDictClass dictClass;
26 | List extendedClassList;
27 | ListEnumerator listEnumerator;
28 | ClassName className;
29 | // MethodName methodName;
30 | ClassId childClass;
31 | TreeNode childClassNode;
32 | TreeNode methodNode;
33 | int numberofMethods;
34 | MyTelemetryParameters param;
35 |
36 | //set parent class and method you want to investigate
37 | className = classStr(MyTelemetryBase);
38 | //methodName = "DefaultDimension";
39 |
40 | dictClass = new SysDictClass(className2Id(classname));
41 | extendedClassList = dictClass.extendedBy();
42 |
43 | //loop through all child classes
44 | if (extendedClassList.elements())
45 | {
46 | listEnumerator = extendedClassList.getEnumerator();
47 |
48 | setprefix(strfmt("Class %1 extended by %2 classes.", className, int2str(extendedClassList.elements())));
49 |
50 | while (listEnumerator.moveNext())
51 | {
52 | childClass = listEnumerator.current();
53 | childClassNode = TreeNode::findNode(strFmt(#ClassPath, classId2Name(childClass)));
54 |
55 | param = MyTelemetryParameters::find(childClassNode.AOTname());
56 |
57 | if(!param)
58 | {
59 | ttsbegin;
60 | param.clear();
61 | param.TelemetryClass = childClassNode.AOTname();
62 | param.IsEnabled = NoYes::Yes;
63 | param.SeverityLevel = MyTelemetrySeverityLevel::Information;
64 | param.insert();
65 | ttscommit;
66 | }
67 |
68 | }
69 |
70 | }
71 |
72 | }
73 |
74 | ]]>
75 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxClass/TelemetryDataManagementImport.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | TelemetryDataManagementImport
4 |
5 |
7 | /// TelemetryDataManagementImport class log monitoring and telemetry custom events/metrics
8 | ///
9 | internal final class TelemetryDataManagementImport extends MyTelemetryBase
10 | {
11 | private DMFDefinitionGroupExecutionHistory dmfDefinitionGroupExecutionHistory;
12 | private TransDateTime executionStartTime;
13 | private TransDateTime executionEndTime;
14 | }
15 | ]]>
16 |
17 |
18 | new
19 |
29 |
30 |
31 | shouldLogEvent
32 |
39 |
40 |
41 | populateProperties
42 |
44 | /// populate telemetry entries to a map
45 | ///
46 | protected void populateProperties()
47 | {
48 | // We don't have to call the SetElapsedMilliSeconds() because we are getting the execution time from the table entry
49 | // this.setElapsedMilliseconds();
50 | this.addBaseProperty(MyApplicationInsightsEventProperties::ElapsedMilliseconds, int642Str(DateTimeUtil::getDifference(executionEndTime, executionStartTime)));
51 | this.addBaseProperty(MyApplicationInsightsEventProperties::DefinitionGroup, dmfDefinitionGroupExecutionHistory.DefinitionGroup);
52 | this.addBaseProperty(MyApplicationInsightsEventProperties::Entity, dmfDefinitionGroupExecutionHistory.Entity);
53 | this.addBaseProperty(MyApplicationInsightsEventProperties::ExecutionId,dmfDefinitionGroupExecutionHistory.ExecutionId);
54 | this.addBaseProperty(MyApplicationInsightsEventProperties::NoOfRecords, int2Str(dmfDefinitionGroupExecutionHistory.NoOfRecords));
55 | this.addBaseProperty(MyApplicationInsightsEventProperties::NumOfTargetNew,int2Str(dmfDefinitionGroupExecutionHistory.NumOfTargetNew));
56 | this.addBaseProperty(MyApplicationInsightsEventProperties::NumOfTargetUpdated, int2Str(dmfDefinitionGroupExecutionHistory.NumOfTargetUpdated));
57 | }
58 |
59 | ]]>
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/DMF Errors/dashboard-DMF Errors.json:
--------------------------------------------------------------------------------
1 | {"$schema":"https://dataexplorer.azure.com/static/d/schema/52/dashboard.json","id":"89761c3b-a802-4534-aa7d-e7cb2db490d5","eTag":"3bf0e6bb-a64d-4b2b-b57a-3a05db82696f","schema_version":"52","title":"DMF Errors","tiles":[{"id":"2f74841a-4b62-4aef-8aac-2df41a21efb5","title":"Error Details","visualType":"table","pageId":"07635b92-9701-4700-9ae6-03bc525ab964","layout":{"x":0,"y":0,"width":24,"height":6},"queryRef":{"kind":"query","queryId":"c8611372-c4f8-4a36-ad38-3bfc551d0d5a"},"visualOptions":{"table__enableRenderLinks":true,"colorRulesDisabled":true,"colorStyle":"light","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[],"table__renderLinks":[],"colorRules":[]}},{"id":"69a806cc-6c58-46aa-906b-f93085c93be1","title":"ErrorCode distribution","visualType":"pie","pageId":"07635b92-9701-4700-9ae6-03bc525ab964","layout":{"x":0,"y":6,"width":24,"height":6},"queryRef":{"kind":"query","queryId":"7be0a00e-e0cf-4929-9547-17d6cf130eb4"},"visualOptions":{"hideLegend":false,"legendLocation":"bottom","xColumn":null,"yColumns":null,"seriesColumns":null,"crossFilterDisabled":false,"drillthroughDisabled":false,"labelDisabled":false,"pie__label":["name","percentage"],"tooltipDisabled":false,"pie__tooltip":["name","percentage","value"],"pie__orderBy":"size","pie__kind":"pie","pie__topNSlices":null,"crossFilter":[],"drillthrough":[]}}],"baseQueries":[],"parameters":[{"kind":"duration","id":"143d3262-e5e4-4679-982f-0d6d6cf7e017","displayName":"Time range","description":"","beginVariableName":"_startTime","endVariableName":"_endTime","defaultValue":{"kind":"dynamic","count":1,"unit":"hours"},"showOnPages":{"kind":"all"}}],"dataSources":[{"id":"06857df7-cec1-4268-8039-f1c5d0168189","kind":"manual-kusto","scopeId":"kusto","name":"DMF-Errors","clusterUri":"https://ade.applicationinsights.io/subscriptions/","database":""}],"pages":[{"name":"Page 1","id":"07635b92-9701-4700-9ae6-03bc525ab964"}],"queries":[{"dataSource":{"kind":"inline","dataSourceId":"06857df7-cec1-4268-8039-f1c5d0168189"},"text":"customEvents\n| where customDimensions.JsonAttributes contains \"DMF\" and customDimensions.Message startswith \"Message:\"\n| extend cd = parse_json(tostring(customDimensions))\n| extend jsonAttrs = parse_json(tostring(cd.JsonAttributes))\n| project\n timestamp,\n name,\n DataProjectId = cd.DataProjectId,\n EntityName = cd.EntityName,\n ExecutionId = cd.ExecutionId,\n Message = cd.Message,\n ActivityId = cd.activityId,\n dixfActivityId = cd.dixfActivityId,\n ErrorCode = jsonAttrs.ErrorCode\n","id":"c8611372-c4f8-4a36-ad38-3bfc551d0d5a","usedVariables":[]},{"dataSource":{"kind":"inline","dataSourceId":"06857df7-cec1-4268-8039-f1c5d0168189"},"text":"customEvents\n| where customDimensions.JsonAttributes contains \"DMF\" and customDimensions.Message startswith \"Message:\"\n| extend cd = parse_json(tostring(customDimensions))\n| extend jsonAttrs = parse_json(tostring(cd.JsonAttributes))\n| summarize Count = count() by ErrorCode = tostring(jsonAttrs.ErrorCode)\n| order by Count desc\n| render piechart\n\n\n","id":"7be0a00e-e0cf-4929-9547-17d6cf130eb4","usedVariables":[]}]}
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxTable/MyTelemetryParameters.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | MyTelemetryParameters
4 |
5 |
6 |
11 |
12 |
13 |
14 | find
15 |
16 |
36 |
37 |
38 |
39 |
40 |
41 | MyTelemetryParameters
42 |
43 |
44 | Allow
45 |
46 | TelemetryClass
47 | Yes
48 | FoundAndEmpty
49 |
50 |
51 |
52 | AutoReport
53 |
54 |
55 |
56 | AutoLookup
57 |
58 |
59 |
60 | AutoIdentification
61 | Yes
62 |
63 |
64 |
65 | AutoSummary
66 |
67 |
68 |
69 | AutoBrowse
70 |
71 |
72 |
73 | TelemetryFields
74 |
75 |
76 | TelemetryClass
77 |
78 |
79 | IsEnabled
80 |
81 |
82 | SeverityLevel
83 |
84 |
85 |
86 |
87 |
88 |
90 | TelemetryClass
91 | MyTelemetryClass
92 | Yes
93 |
94 |
96 | IsEnabled
97 | NoYes
98 |
99 |
101 | SeverityLevel
102 | MyTelemetrySeverityLevel
103 |
104 |
105 |
106 |
107 |
108 | TelemetryClass
109 |
110 |
111 | TelemetryClass
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Dynamics-365-FastTrack-FSCM-Telemetry-Samples
2 | Sample extensions for Dynamics 365 Finance and Supply Chain Management to bootstrap teams wanting to start emitting telemetry for SCM related processes.
3 |
4 | # Finance and Supply Chain Management Monitoring and Telemetry using Application Insights
5 | The monitoring and telemetry feature in finance and operations apps is a direct, point-to-point integration between an instance of a
6 | finance and operations app and the target Application Insights destination. This feature lets developers and admins triage and resolve
7 | application issues in near-real time. The telemetry that's generated isn't collected by Microsoft for support or other operational reporting.
8 | Instead, the data is customer owned and customer driven.
9 |
10 | Get started by following the documentation on MSLearn: [Monitoring and telemetry using Application Insights](https://learn.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/sysadmin/monitoring-and-telemetry-appinsights)
11 |
12 | For specific guidelines on Warehouse Management telemetry, documentation can be found on MSLearn:
13 | - [Enable warehousing telemetry with Application Insights](https://learn.microsoft.com/en-us/dynamics365/supply-chain/warehousing/application-insights-warehousing)
14 | - [Monitor Warehouse Management usage and performance](https://learn.microsoft.com/en-us/dynamics365/supply-chain/warehousing/application-insights-monitor-usage-performance)
15 |
16 | # What resources can I find in this repository?
17 | This repository contains instructions on how to gather telemetry from Dynamics 365 Supply Chain Management product.
18 |
19 | | Area | Description | Take me there (use CTRL+click to open in a new tab) |
20 | | ------ | ------ | ------ |
21 | | SampleXppExtensions | Root folder for the Dynamics 365 X++ artifacts providing sample source code emitting telemetry | [Sample Xpp Extensions ](SampleXppExtensions) |
22 | | Kusto queries | A repository of queries to consult Application Insights telemetry | [Kusto queries](KustoQueries) |
23 | | Dashboards\Azure Data Explorer | Making interactive dashboards in Azure Data Explorer with data from Azure Application Insights | [Azure Data Explorer dashboards](Dashboards/AzureDataExplorer/) |
24 |
25 | ## Contributing
26 |
27 | This project welcomes contributions and suggestions. Most contributions require you to agree to a
28 | Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
29 | the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.
30 |
31 | When you submit a pull request, a CLA bot will automatically determine whether you need to provide
32 | a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions
33 | provided by the bot. You will only need to do this once across all repos using our CLA.
34 |
35 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
36 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
37 | contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
38 |
39 | ## Trademarks
40 |
41 | This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft
42 | trademarks or logos is subject to and must follow
43 | [Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).
44 | Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.
45 | Any use of third-party trademarks or logos are subject to those third-party's policies.
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/readme.md:
--------------------------------------------------------------------------------
1 | # Dynamics 365 FastTrack FSCM Telemetry Samples - TelemetryExtensionExample
2 |
3 | This folder contains sample code and guidelines for implementing telemetry in Dynamics 365 Finance and Supply Chain Management (FSCM). The samples are intended to help customers utilize telemetry to monitor and optimize their D365 applications. The code is provided As-is to customer usage. No gaurentees are provided
4 |
5 | ## Table of Contents
6 |
7 | - [Introduction](#introduction)
8 | - [Prerequisites](#prerequisites)
9 | - [Installation](#installation)
10 | - [Usage](#usage)
11 | - [Contributing](#contributing)
12 | - [License](#license)
13 |
14 | ## Introduction
15 |
16 | This project provides sample implementations of telemetry in D365 FSCM. It includes creation of a telemetry Base class to demonstrate how to utilize SysApplicationInsightsTelemetryLogger to log Events/metrics/traces with properties to ApplicationInsights. It also includes an extension to the MonitoringAndTelemetry module to control the granularity of logging to Application Insights.
17 |
18 | ## Prerequisites
19 |
20 | - Dynamics 365 Finance and Supply Chain Management environment
21 | - Visual Studio 2019 or later
22 | - .NET Framework 4.7.2 or later
23 | - Access to Azure Application Insights
24 |
25 | ## Installation
26 |
27 | 1. Clone the repository:
28 |
29 | ```bash
30 | git clone https://github.com/microsoft/Dynamics-365-FastTrack-FSCM-Telemetry-Samples.git
31 | cd Dynamics-365-FastTrack-FSCM-Telemetry-Samples\SampleXppExtensions\Projects\FastTrackFscmTelemetrySamples
32 | ```
33 |
34 | 2. Open the solution in Visual Studio in adminstrator mode and open FastTrackFscmTelemetrySamples.sln:
35 |
36 | Create the classes, enums, tables for the code under "\TelemetryExtensionExample\bin"
37 | The project structure will look like
38 | 
39 |
40 | 3. Once you create all the dependencies of the project, build the project. Once the Project is successfully build, Synchronize the database as we are adding new tables and then refresh AOT
41 | 
42 | 
43 |
44 | if all the classes are built fine, you should see the Cost control configuration ('My Telemetry Log Settings' feel free to rename it as appropriate in your project)in Monitoring and Telemetry settings in your D365 F&O
45 | 
46 |
47 | 4. If you see build errors indicating you need to rebuild other components in the model. proceed to build the model from 'Extensions-> D365 -> Build model'
48 | 
49 | 
50 |
51 | ## Usage
52 |
53 | 1. `MyTelemetryBase` class is the base class which provides structured access to SysApplicationInsightsTelemetryLogger. In this class you can aggregare Properties as your product code is executing and call the ProcessEvent, ProcessTrace, ProcessException etc methods at appropriate points to send those events to ApplicationInsights
54 |
55 | 
56 |
57 | 2. For each different event/metric/Trace you want to log to AppInsights create a concrete class extending from MyTelemetryBase. Here's an example
58 | 
59 |
60 | 3. Use the telemetry class to log telemetry.
61 | 
62 |
63 | 4. Monitor the telemetry data in Azure Application Insights. Depending on whether you have logged an event, trace or exception etc, your data will be available in that respective table
64 |
65 | 
66 |
67 | 5. As you implement telemetry classes and log data into AppInsights, you can control the which events and which severity levels are logged in AppInsights by 2 different ways.
68 | a> You can disable particular kind of event sall together in the Extension UI
69 | 
70 |
71 | b> within the event class itself you can set a particular condition for the event to be logged. For example, in this class I have set only severity level above Information to be logged
72 | 
73 |
74 | ## Contributing
75 |
76 | We welcome contributions to this project. To contribute:
77 |
78 | 1. Fork the repository.
79 | 2. Create a new branch for your feature or bugfix.
80 | 3. Make your changes and commit them.
81 | 4. Push your changes to your fork.
82 | 5. Open a pull request to the main repository.
83 |
84 | ## License
85 |
86 | This project is licensed under the MIT License. See the [LICENSE](../LICENSE) file for more details.
87 |
88 |
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxFormExtension/SysIntParameters.MyExtension.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | SysIntParameters.MyExtension
4 |
5 |
6 |
7 | FormExtensionControl
8 |
10 | MySettings
11 | TabPage
12 |
14 |
15 |
17 | MyTelemetryTitleGroup
18 | Yes
19 | Group
20 | SizeToAvailable
21 |
23 |
24 |
26 | MyTelemetryLogSettingsText
27 | Yes
28 | StaticText
29 | SizeToAvailable
30 |
32 |
33 |
34 | MyTelemetryLogSettings
35 |
36 |
37 |
38 | No
39 | None
40 |
41 |
42 |
44 | MyTelemetryGrid
45 | SizeToAvailable
46 | ToolbarList
47 | 1.2
48 | Group
49 | SizeToAvailable
50 |
52 |
53 |
55 | MyTelemetryLogParam
56 | Grid
57 |
59 |
60 |
62 | MyTelemetryLogParam_TelemetryClass
63 | No
64 | String
65 |
67 | TelemetryClass
68 | MyTelemetryParameters
69 |
70 |
72 | MyTelemetryLogParam_IsEnabled
73 | CheckBox
74 |
76 | IsEnabled
77 | MyTelemetryParameters
78 |
79 |
81 | MyTelemetryLogParam_SeverityLevel
82 | ComboBox
83 |
85 | SeverityLevel
86 | MyTelemetryParameters
87 |
88 |
89 |
90 | TelemetryFields
91 | MyTelemetryParameters
92 |
93 |
94 | None
95 |
96 |
97 |
98 | MyTelemetryLogSettings
99 |
100 |
101 | TableOfContents
102 |
103 |
104 |
105 |
106 |
107 |
108 | MyTelemetryParameters
109 |
110 |
111 |
112 | DataAreaId
113 |
114 |
115 | IsEnabled
116 |
117 |
118 | Partition
119 |
120 |
121 | RecId
122 |
123 |
124 | SeverityLevel
125 |
126 |
127 | TableId
128 |
129 |
130 | TelemetryClass
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
--------------------------------------------------------------------------------
/FAQ.md:
--------------------------------------------------------------------------------
1 | # Telemetry Frequently Asked Questions
2 |
3 | # What is telemetry?
4 | Microsoft Power Platform and Dynamics 365 products continuously emit telemetry about events that happen in the customer environment.
5 | This telemetry can be useful for troubleshooting an issue or to gain insights into what is happening in the application.
6 |
7 | ## What does it cost?
8 | Application Insights is billed based on the volume of telemetry data that your application sends. Currently, the first 5 GB of data per month is free. Regarding data retention, every GB of data ingested can be retained at no charge for up to first 90 days.
9 |
10 | Please check the documentation for up-to-date information on pricing.
11 |
12 | Azure monitor alerts are billed separately.
13 |
14 | ## How can I reduce cost?
15 | To reduce ingestion cost, you can
16 | * set limits on daily data ingestion
17 | * reduce data ingestion by sampling to only ingest a percentage of the inbound data (see https://docs.microsoft.com/en-us/azure/azure-monitor/app/sampling#ingestion-sampling)
18 | * set a daily limit of how much data that can be ingested
19 | * purge data from your Application Insights resource (see _How do I delete data from Application Insights?_ below)
20 | * set alerts on cost thresholds being exceeded to get notified if this happens
21 | * use Data Collection Rules on Azure Log Analytics (the backend of Azure Application Insights)
22 |
23 | ## Where can I learn more about Kusto Query Language (KQL) and Azure Data Studio?
24 | Please visit the [KQL README page](KQL/README.md) for learning resources on KQL and the [Trouble Shooting Guides README page](TroubleShootingGuides/README.md) for learning resources on Azure Data Studio.
25 |
26 | ## What is the data retention policy in Application Insights?
27 | The default retention for Application Insights resources is 90 days. Different retention periods can be selected for each Application Insights resource. The full set of available retention periods is 30, 60, 90, 120, 180, 270, 365, 550 or 730 days.
28 |
29 | See
30 |
31 | ## How do I delete data from Application Insights?
32 | Purge data in an Application Insights component by a set of user-defined filters.
33 |
34 | See
35 |
36 | You can use Powershell to setup a purge process, see an example here: [How do I use Powershell to delete telemetry data?](Powershell/README.md)
37 |
38 | ## Can I grant read-only access to Application Insights?
39 | To grant a person read-only access to Application Insights, go to the Access control (IAM) page in the Application Insights portal, and then add the role assignment "Reader" to the person.
40 |
41 | You might also need to add the role assignment "Reader" to the person on the Resource Group for the Application Insights subscription.
42 |
43 | ## What about Privacy regulations such as GDPR?
44 | The Microsoft products do not emit any End User Identifiable Information (EUII) to Application Insights. So the telemetry is born GDPR compliant. The service only emits data that is classified as either System Metadata or Organization Identifiable Information (OII). The meaning of these classifications are described here: [DataClassification Option Type](https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/methods-auto/dataclassification/dataclassification-option)
45 |
46 |
47 | # Disclaimer
48 | Microsoft Corporation (“Microsoft”) grants you a nonexclusive, perpetual, royalty-free right to use and modify the software code provided by us for the purposes of illustration ("Sample Code") and to reproduce and distribute the object code form of the Sample Code, provided that you agree: (i) to not use our name, logo, or trademarks to market your software product in which the Sample Code is embedded; (ii) to include a valid copyright notice on your software product in which the Sample Code is embedded; and (iii) to indemnify, hold harmless, and defend us and our suppliers from and against any claims or lawsuits, whether in an action of contract, tort or otherwise, including attorneys’ fees, that arise or result from the use or distribution of the Sample Code or the use or other dealings in the Sample Code. Unless applicable law gives you more rights, Microsoft reserves all other rights not expressly granted herein, whether by implication, estoppel or otherwise.
49 |
50 | THE SAMPLE CODE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL MICROSOFT OR ITS LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE SAMPLE CODE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
51 |
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/MonitoringAndTelemetryExampleUsage.rnrproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | $(MSBuildProgramFiles32)\MSBuild\Microsoft\Dynamics\AX
7 | Foundation
8 | v4.6
9 | bin
10 | 2.0
11 | True
12 | False
13 | False
14 | False
15 | {7a2363fb-28bd-4203-bddc-661cc58fbc68}
16 | MonitoringAndTelemetryExampleUsage
17 | TelemetryExtensionExample
18 | Class
19 |
20 |
21 | Debug
22 | False
23 | False
24 |
25 |
26 | initial
27 | AnyCPU
28 | False
29 | False
30 |
31 |
32 | true
33 | false
34 |
35 |
36 |
37 | Content
38 | DMFDefinitionGroupExecutionHistory_Extension
39 | DMFDefinitionGroupExecutionHistory_Extension
40 |
41 |
42 | Content
43 | MyApplicationInsightsEventIds
44 | MyApplicationInsightsEventIds
45 |
46 |
47 | Content
48 | MyApplicationInsightsEventNames
49 | MyApplicationInsightsEventNames
50 |
51 |
52 | Content
53 | MyApplicationInsightsEventProperties
54 | MyApplicationInsightsEventProperties
55 |
56 |
57 | Content
58 | MyApplicationInsightsProperty
59 | MyApplicationInsightsProperty
60 |
61 |
62 | Content
63 | MySysIntParametersFormEventHandler
64 | MySysIntParametersFormEventHandler
65 |
66 |
67 | Content
68 | MyTelemetryBase
69 | MyTelemetryBase
70 |
71 |
72 | Content
73 | TelemetryDataManagementImport
74 | TelemetryDataManagementImport
75 |
76 |
77 | Content
78 | TelemetryPurchaseOrderConfirm
79 | TelemetryPurchaseOrderConfirm
80 |
81 |
82 | Content
83 | TelemetrySalesOrderConfirm
84 | TelemetrySalesOrderConfirm
85 |
86 |
87 | Content
88 | TelemetryShipConfirm
89 | TelemetryShipConfirm
90 |
91 |
92 | Content
93 | WhsShipConfirm_Extension
94 | WhsShipConfirm_Extension
95 |
96 |
97 | Content
98 | MyTelemetryClass
99 | MyTelemetryClass
100 |
101 |
102 | Content
103 | MyTelemetrySeverityLevel
104 | MyTelemetrySeverityLevel
105 |
106 |
107 | Content
108 | SysIntParameters.MyExtension
109 | SysIntParameters.MyExtension
110 |
111 |
112 | Content
113 | MyTelemetryParameters
114 | MyTelemetryParameters
115 |
116 |
117 |
118 |
119 |
--------------------------------------------------------------------------------
/KustoQueries/SlowQueries.kql:
--------------------------------------------------------------------------------
1 | // SLow queries over time (bucketsize = 1 hour)
2 | let _city = dynamic(null);
3 | let _startTime = ago(7d);
4 | let _endTime = now();
5 | let _queryType = dynamic(null);
6 | customEvents
7 | | where timestamp between (_startTime .. _endTime)
8 | | where name == "LongRunningQuery"
9 | | where isempty(['_city']) or client_City in (['_city'])
10 | | extend LegalEntity = customDimensions.LegalEntity
11 | , ExecutionMode = customDimensions.ExecutionMode
12 | , ExecutionTimeSeconds = customDimensions.ExecutionTimeSeconds
13 | , CallStack = customDimensions.CallStack
14 | , QueryType = customDimensions.QueryType
15 | , Success = customDimensions.Success
16 | , JoinCount = customDimensions.JoinCount
17 | , ReturnedRowCount = customDimensions.ReturnedRowCount
18 | | where isempty(['_queryType']) or QueryType in (['_queryType'])
19 | | project ["Timestamp"] = timestamp
20 | , ["Name"] = name
21 | , ["Session ID"] = session_Id
22 | , ["User ID"] = user_Id
23 | , ["Legal Entity"] = LegalEntity
24 | , ["Execution Mode"] = ExecutionMode
25 | , ["Query Type"] = QueryType
26 | , ["Execution Time (s)"] = ExecutionTimeSeconds
27 | , ["Join Count"] = JoinCount
28 | , ["Returned Row Count"] = ReturnedRowCount
29 | , Success, CallStack
30 | , ["Client City"] = client_City
31 | , ["Client Country"] = client_CountryOrRegion
32 | | summarize ["Slow Queries"] = count() by bin(Timestamp, 1h)
33 |
34 | // Slow queries by query type
35 | let _startTime = ago(7d);
36 | let _endTime = now();
37 | customEvents
38 | | where timestamp between (_startTime .. _endTime)
39 | | where name == "LongRunningQuery"
40 | | extend LegalEntity = customDimensions.LegalEntity
41 | , ExecutionMode = customDimensions.ExecutionMode
42 | , ExecutionTimeSeconds = customDimensions.ExecutionTimeSeconds
43 | , CallStack = customDimensions.CallStack
44 | , QueryType = customDimensions.QueryType
45 | , Success = customDimensions.Success
46 | , JoinCount = customDimensions.JoinCount
47 | , ReturnedRowCount = customDimensions.ReturnedRowCount
48 | | project ["Timestamp"] = timestamp
49 | , ["Name"] = name
50 | , ["Session ID"] = session_Id
51 | , ["User ID"] = user_Id
52 | , ["Legal Entity"] = LegalEntity
53 | , ["Execution Mode"] = ExecutionMode
54 | , ["Query Type"] = tostring(QueryType)
55 | , ["Execution Time (s)"] = ExecutionTimeSeconds
56 | , ["Join Count"] = JoinCount
57 | , ["Returned Row Count"] = ReturnedRowCount
58 | , Success, CallStack
59 | , ["Client City"] = client_City
60 | , ["Client Country"] = client_CountryOrRegion
61 | | summarize ["Slow Queries"] = count() by ['Query Type']
62 |
63 | // Slow queries by client country and city
64 | let _startTime = ago(7d);
65 | let _endTime = now();
66 | customEvents
67 | | where timestamp between (_startTime .. _endTime)
68 | | where name == "LongRunningQuery"
69 | | extend LegalEntity = customDimensions.LegalEntity
70 | , ExecutionMode = customDimensions.ExecutionMode
71 | , ExecutionTimeSeconds = customDimensions.ExecutionTimeSeconds
72 | , CallStack = customDimensions.CallStack
73 | , QueryType = customDimensions.QueryType
74 | , Success = customDimensions.Success
75 | , JoinCount = customDimensions.JoinCount
76 | , ReturnedRowCount = customDimensions.ReturnedRowCount
77 | | project ["Timestamp"] = timestamp
78 | , ["Name"] = name
79 | , ["Session ID"] = session_Id
80 | , ["User ID"] = user_Id
81 | , ["Legal Entity"] = LegalEntity
82 | , ["Execution Mode"] = ExecutionMode
83 | , ["Query Type"] = tostring(QueryType)
84 | , ["Execution Time (s)"] = ExecutionTimeSeconds
85 | , ["Join Count"] = JoinCount
86 | , ["Returned Row Count"] = ReturnedRowCount
87 | , Success, CallStack
88 | , ["Client City"] = client_City
89 | , ["Client Country"] = client_CountryOrRegion
90 | | summarize ["Slow Queries"] = count() by ['Client Country'], ['Client City']
91 |
92 | // Top 50 slow queries by duration
93 | let _startTime = ago(7d);
94 | let _endTime = now();
95 | customEvents
96 | | where timestamp between (_startTime .. _endTime)
97 | | where name == "LongRunningQuery"
98 | | extend LegalEntity = tostring(customDimensions.LegalEntity)
99 | , ExecutionMode = tostring(customDimensions.ExecutionMode)
100 | , ExecutionTimeSeconds = tostring(customDimensions.ExecutionTimeSeconds)
101 | , CallStack = tostring(customDimensions.CallStack)
102 | , QueryType = tostring(customDimensions.QueryType)
103 | , Success = tostring(customDimensions.Success)
104 | , JoinCount = tostring(customDimensions.JoinCount)
105 | , ReturnedRowCount = tostring(customDimensions.ReturnedRowCount)
106 | | order by ExecutionTimeSeconds desc
107 | | limit 50
108 | | project ["Timestamp"] = timestamp
109 | , ["Session ID"] = session_Id
110 | , ["User ID"] = user_Id
111 | , ["Legal Entity"] = LegalEntity
112 | , ["Execution Mode"] = ExecutionMode
113 | , ["Query Type"] = QueryType
114 | , ["Execution Time (s)"] = ExecutionTimeSeconds
115 | , ["Join Count"] = JoinCount
116 | , ["Returned Row Count"] = ReturnedRowCount
117 | , Success, CallStack
118 | , ["Client City"] = client_City
119 | , ["Client Country"] = client_CountryOrRegion
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/.vs/MonitoringAndTelemetryExampleUsage/v17/DocumentLayout.json:
--------------------------------------------------------------------------------
1 | {
2 | "Version": 1,
3 | "WorkspaceRootPath": "C:\\OpenSource\\Dynamics-365-FastTrack-FSCM-Telemetry-Samples\\DeveloperSamples\\MonitoringAndTelemetryExtensionSample\\",
4 | "Documents": [
5 | {
6 | "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_DMFDefinitionGroupExecutionHistory_Extension.xpp||{8B382828-6202-11D1-8870-0000F87579D2}"
7 | },
8 | {
9 | "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_TelemetryShipConfirm.xpp||{8B382828-6202-11D1-8870-0000F87579D2}"
10 | },
11 | {
12 | "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_MyTelemetryBase.xpp||{8B382828-6202-11D1-8870-0000F87579D2}"
13 | },
14 | {
15 | "AbsoluteMoniker": "D:0:0:{7A2363FB-28BD-4203-BDDC-661CC58FBC68}|MonitoringAndTelemetryExampleUsage.rnrproj|C:\\AOSService\\PackagesLocalDirectory\\ApplicationSuite\\Foundation\\AxEdt\\MyTelemetryClass.xml||{7DCB09FF-3066-475F-9286-662C3C505513}|"
16 | },
17 | {
18 | "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_TelemetryDataManagementImport.xpp||{8B382828-6202-11D1-8870-0000F87579D2}"
19 | },
20 | {
21 | "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_WhsShipConfirm_Extension.xpp||{8B382828-6202-11D1-8870-0000F87579D2}"
22 | },
23 | {
24 | "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_MyApplicationInsightsEventNames.xpp||{8B382828-6202-11D1-8870-0000F87579D2}"
25 | },
26 | {
27 | "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_MyApplicationInsightsEventIds.xpp||{8B382828-6202-11D1-8870-0000F87579D2}"
28 | }
29 | ],
30 | "DocumentGroupContainers": [
31 | {
32 | "Orientation": 0,
33 | "VerticalTabListWidth": 256,
34 | "DocumentGroups": [
35 | {
36 | "DockedWidth": 200,
37 | "SelectedChildIndex": 7,
38 | "Children": [
39 | {
40 | "$type": "Bookmark",
41 | "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
42 | },
43 | {
44 | "$type": "Bookmark",
45 | "Name": "ST:129:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
46 | },
47 | {
48 | "$type": "Bookmark",
49 | "Name": "ST:130:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
50 | },
51 | {
52 | "$type": "Bookmark",
53 | "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
54 | },
55 | {
56 | "$type": "Document",
57 | "DocumentIndex": 1,
58 | "Title": "TelemetryShipConfirm.xpp",
59 | "DocumentMoniker": "C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_TelemetryShipConfirm.xpp",
60 | "RelativeDocumentMoniker": "..\\..\\..\\..\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_TelemetryShipConfirm.xpp",
61 | "ToolTip": "C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_TelemetryShipConfirm.xpp",
62 | "RelativeToolTip": "..\\..\\..\\..\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_TelemetryShipConfirm.xpp",
63 | "ViewState": "AQIAAAUAAAAAAAAAAABgvQ4AAAAmAAAA",
64 | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
65 | "WhenOpened": "2024-09-11T00:06:09.522Z"
66 | },
67 | {
68 | "$type": "Document",
69 | "DocumentIndex": 2,
70 | "Title": "MyTelemetryBase.xpp",
71 | "DocumentMoniker": "C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_MyTelemetryBase.xpp",
72 | "RelativeDocumentMoniker": "..\\..\\..\\..\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_MyTelemetryBase.xpp",
73 | "ToolTip": "C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_MyTelemetryBase.xpp",
74 | "RelativeToolTip": "..\\..\\..\\..\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_MyTelemetryBase.xpp",
75 | "ViewState": "AQIAAEwAAAAAwMzMzMwqwDIAAAAJAAAA",
76 | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
77 | "WhenOpened": "2024-06-25T14:29:29.636Z"
78 | },
79 | {
80 | "$type": "Document",
81 | "DocumentIndex": 5,
82 | "Title": "WhsShipConfirm_Extension.xpp",
83 | "DocumentMoniker": "C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_WhsShipConfirm_Extension.xpp",
84 | "RelativeDocumentMoniker": "..\\..\\..\\..\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_WhsShipConfirm_Extension.xpp",
85 | "ToolTip": "C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_WhsShipConfirm_Extension.xpp",
86 | "RelativeToolTip": "..\\..\\..\\..\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_WhsShipConfirm_Extension.xpp",
87 | "ViewState": "AQIAAA4AAAAAAAAAAAAAwCsAAAANAAAA",
88 | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
89 | "WhenOpened": "2024-06-25T23:26:20.431Z"
90 | },
91 | {
92 | "$type": "Document",
93 | "DocumentIndex": 0,
94 | "Title": "DMFDefinitionGroupExecutionHistory_Extension.xpp",
95 | "DocumentMoniker": "C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_DMFDefinitionGroupExecutionHistory_Extension.xpp",
96 | "RelativeDocumentMoniker": "..\\..\\..\\..\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_DMFDefinitionGroupExecutionHistory_Extension.xpp",
97 | "ToolTip": "C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_DMFDefinitionGroupExecutionHistory_Extension.xpp",
98 | "RelativeToolTip": "..\\..\\..\\..\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_DMFDefinitionGroupExecutionHistory_Extension.xpp",
99 | "ViewState": "AQIAAAAAAAAAAAAAAAAAABgAAAAAAAAA",
100 | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
101 | "WhenOpened": "2024-06-25T17:14:30.055Z",
102 | "EditorCaption": ""
103 | },
104 | {
105 | "$type": "Document",
106 | "DocumentIndex": 4,
107 | "Title": "TelemetryDataManagementImport.xpp",
108 | "DocumentMoniker": "C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_TelemetryDataManagementImport.xpp",
109 | "RelativeDocumentMoniker": "..\\..\\..\\..\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_TelemetryDataManagementImport.xpp",
110 | "ToolTip": "C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_TelemetryDataManagementImport.xpp",
111 | "RelativeToolTip": "..\\..\\..\\..\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_TelemetryDataManagementImport.xpp",
112 | "ViewState": "AQIAAAAAAAAAAAAAAAAAABwAAAAEAAAA",
113 | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
114 | "WhenOpened": "2024-06-25T23:31:31.664Z"
115 | },
116 | {
117 | "$type": "Document",
118 | "DocumentIndex": 3,
119 | "Title": "MyTelemetryClass",
120 | "DocumentMoniker": "C:\\AOSService\\PackagesLocalDirectory\\ApplicationSuite\\Foundation\\AxEdt\\MyTelemetryClass.xml",
121 | "RelativeDocumentMoniker": "..\\..\\..\\..\\AOSService\\PackagesLocalDirectory\\ApplicationSuite\\Foundation\\AxEdt\\MyTelemetryClass.xml",
122 | "ToolTip": "C:\\AOSService\\PackagesLocalDirectory\\ApplicationSuite\\Foundation\\AxEdt\\MyTelemetryClass.xml\r\nType: EdtString\r\nModel: Foundation",
123 | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003576|",
124 | "OverriddenToolTip": "C:\\AOSService\\PackagesLocalDirectory\\ApplicationSuite\\Foundation\\AxEdt\\MyTelemetryClass.xml\r\nType: EdtString\r\nModel: Foundation",
125 | "WhenOpened": "2024-06-26T18:56:59.776Z"
126 | },
127 | {
128 | "$type": "Document",
129 | "DocumentIndex": 6,
130 | "Title": "MyApplicationInsightsEventNames.xpp",
131 | "DocumentMoniker": "C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_MyApplicationInsightsEventNames.xpp",
132 | "RelativeDocumentMoniker": "..\\..\\..\\..\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_MyApplicationInsightsEventNames.xpp",
133 | "ToolTip": "C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_MyApplicationInsightsEventNames.xpp",
134 | "RelativeToolTip": "..\\..\\..\\..\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_MyApplicationInsightsEventNames.xpp",
135 | "ViewState": "AQIAAAAAAAAAAAAAAAAAAAQAAAABAAAA",
136 | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
137 | "WhenOpened": "2024-06-25T14:22:53.492Z"
138 | },
139 | {
140 | "$type": "Document",
141 | "DocumentIndex": 7,
142 | "Title": "MyApplicationInsightsEventIds.xpp",
143 | "DocumentMoniker": "C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_MyApplicationInsightsEventIds.xpp",
144 | "RelativeDocumentMoniker": "..\\..\\..\\..\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_MyApplicationInsightsEventIds.xpp",
145 | "ToolTip": "C:\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_MyApplicationInsightsEventIds.xpp",
146 | "RelativeToolTip": "..\\..\\..\\..\\AOSService\\PackagesLocalDirectory\\bin\\XppSource\\Foundation\\AxClass_MyApplicationInsightsEventIds.xpp",
147 | "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
148 | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
149 | "WhenOpened": "2024-06-25T14:22:42.734Z"
150 | }
151 | ]
152 | }
153 | ]
154 | }
155 | ]
156 | }
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Errors/dashboard-D365FO-Monitoring-Errors.json:
--------------------------------------------------------------------------------
1 | {"$schema":"https://dataexplorer.azure.com/static/d/schema/50/dashboard.json","id":"7f76b28d-40d3-4784-92e0-8846879191eb","eTag":"670a9830-3038-4a08-a873-f751c8732e03","schema_version":"50","title":"D365FO-Monitoring-Errors","baseQueries":[],"tiles":[{"id":"8b318973-c302-49c3-a92f-06dd35652d4c","title":"Sum of errors per Execution Mode","visualType":"column","pageId":"54d4ff07-74a9-48e7-b5f3-25db46df8620","layout":{"x":0,"y":0,"width":12,"height":7},"query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"2c9a039f-f73b-4f79-a329-981fa438ff43"},"usedVariables":["_endTime","_startTime"],"text":"exceptions\n| where timestamp between (_startTime .. _endTime)\n| extend LegalEntity = customDimensions.LegalEntity\n , ExecutionMode = customDimensions.ExecutionMode\n , BatchJobId = customDimensions.BatchJobId\n , CallStack = customDimensions.CallStack\n| project [\"Timestamp\"] = timestamp\n , [\"outerMessage\"] = outerMessage\n , [\"Session ID\"] = session_Id\n , [\"User ID\"] = user_Id\n , [\"Legal Entity\"] = LegalEntity\n , [\"Execution Mode\"] = tostring(ExecutionMode)\n , CallStack \n , [\"Client Type\"] = client_Type\n , [\"Client City\"] = client_City\n , [\"Client Country\"] = client_CountryOrRegion\n| summarize [\"Errors\"] = count() by [\"Execution Mode\"]//, bin([\"Timestamp\"],1h) \n\n\n"},"visualOptions":{"multipleYAxes":{"base":{"id":"-1","label":"","columns":[],"yAxisMaximumValue":null,"yAxisMinimumValue":null,"yAxisScale":"linear","horizontalLines":[]},"additional":[],"showMultiplePanels":false},"hideLegend":false,"xColumnTitle":"","xColumn":null,"yColumns":null,"seriesColumns":null,"xAxisScale":"linear","verticalLine":"","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[]}},{"id":"dad00a71-980a-46cd-9777-941acd2b77b6","title":"Sum of errors by Time Span","visualType":"column","pageId":"54d4ff07-74a9-48e7-b5f3-25db46df8620","layout":{"x":12,"y":0,"width":12,"height":7},"query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"2c9a039f-f73b-4f79-a329-981fa438ff43"},"usedVariables":["_endTime","_startTime","_time_span"],"text":"\nexceptions\n| where timestamp between (_startTime .. _endTime)\n| extend LegalEntity = customDimensions.LegalEntity\n , ExecutionMode = customDimensions.ExecutionMode\n , BatchJobId = customDimensions.BatchJobId\n , CallStack = customDimensions.CallStack\n| project [\"Timestamp\"] = timestamp\n , [\"outerMessage\"] = outerMessage\n , [\"Session ID\"] = session_Id\n , [\"User ID\"] = user_Id\n , [\"Legal Entity\"] = LegalEntity\n , [\"Execution Mode\"] = tostring(ExecutionMode)\n , CallStack \n , [\"Client Type\"] = client_Type\n , [\"Client City\"] = client_City\n , [\"Client Country\"] = client_CountryOrRegion\n| summarize [\"Errors\"] = count() by bin([\"Timestamp\"], totimespan(_time_span)) \n\n\n"},"visualOptions":{"multipleYAxes":{"base":{"id":"-1","label":"","columns":[],"yAxisMaximumValue":null,"yAxisMinimumValue":null,"yAxisScale":"linear","horizontalLines":[]},"additional":[],"showMultiplePanels":false},"hideLegend":false,"xColumnTitle":"","xColumn":null,"yColumns":null,"seriesColumns":null,"xAxisScale":"linear","verticalLine":"","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[]}},{"id":"67a1c6ad-2279-4d09-b741-e7970301ec1a","title":"Errors by outer message","visualType":"column","pageId":"54d4ff07-74a9-48e7-b5f3-25db46df8620","layout":{"x":0,"y":7,"width":12,"height":7},"query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"2c9a039f-f73b-4f79-a329-981fa438ff43"},"usedVariables":["_endTime","_startTime"],"text":"\nexceptions\n| where timestamp between (_startTime .. _endTime)\n| extend LegalEntity = customDimensions.LegalEntity\n , ExecutionMode = customDimensions.ExecutionMode\n , BatchJobId = customDimensions.BatchJobId\n , CallStack = customDimensions.CallStack\n| project [\"Timestamp\"] = timestamp\n , [\"Outer Message\"] = outerMessage\n , [\"Outer Message (short)\"] = tostring( split(tostring( split(outerMessage, \"\\\\\")[0]), \".\")[0]) //substring( outerMessage,0,50)\n , [\"Session ID\"] = session_Id\n , [\"User ID\"] = user_Id\n , [\"Legal Entity\"] = LegalEntity\n , [\"Execution Mode\"] = tostring(ExecutionMode)\n , CallStack \n , [\"Client Type\"] = client_Type\n , [\"Client City\"] = client_City\n , [\"Client Country\"] = client_CountryOrRegion\n| summarize [\"Errors\"] = count() by [\"Outer Message (short)\"] // bin([\"Timestamp\"], totimespan(_time_span)) \n\n\n"},"visualOptions":{"multipleYAxes":{"base":{"id":"-1","label":"","columns":[],"yAxisMaximumValue":null,"yAxisMinimumValue":null,"yAxisScale":"linear","horizontalLines":[]},"additional":[],"showMultiplePanels":false},"hideLegend":false,"xColumnTitle":"","xColumn":null,"yColumns":null,"seriesColumns":null,"xAxisScale":"linear","verticalLine":"","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[]}},{"id":"ce797f9c-2eda-4d29-a066-9ae1de1717d7","title":"Errors by Legal Entity","visualType":"bar","pageId":"54d4ff07-74a9-48e7-b5f3-25db46df8620","layout":{"x":12,"y":7,"width":12,"height":7},"query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"2c9a039f-f73b-4f79-a329-981fa438ff43"},"usedVariables":["_endTime","_startTime"],"text":"\nexceptions\n| where timestamp between (_startTime .. _endTime)\n| extend LegalEntity = customDimensions.LegalEntity\n , ExecutionMode = customDimensions.ExecutionMode\n , BatchJobId = customDimensions.BatchJobId\n , CallStack = customDimensions.CallStack\n| project [\"Timestamp\"] = timestamp\n , [\"Outer Message\"] = outerMessage\n , [\"Outer Message (short)\"] = tostring( split(tostring( split(outerMessage, \"\\\\\")[0]), \".\")[0]) //substring( outerMessage,0,50)\n , [\"Session ID\"] = session_Id\n , [\"User ID\"] = user_Id\n , [\"Legal Entity\"] =toupper( tostring( LegalEntity))\n , [\"Execution Mode\"] = tostring(ExecutionMode)\n , CallStack \n , [\"Client Type\"] = client_Type\n , [\"Client City\"] = client_City\n , [\"Client Country\"] = client_CountryOrRegion\n| summarize [\"Errors\"] = count() by ['Legal Entity'] , ['Execution Mode'] // bin([\"Timestamp\"], totimespan(_time_span)) \n\n\n"},"visualOptions":{"multipleYAxes":{"base":{"id":"-1","label":"","columns":[],"yAxisMaximumValue":null,"yAxisMinimumValue":null,"yAxisScale":"linear","horizontalLines":[]},"additional":[],"showMultiplePanels":false},"hideLegend":false,"xColumnTitle":"","xColumn":null,"yColumns":null,"seriesColumns":null,"xAxisScale":"linear","verticalLine":"","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[]}},{"id":"d8c67cd1-5354-4666-9902-891c60151c58","title":"Errors per user","visualType":"column","pageId":"54d4ff07-74a9-48e7-b5f3-25db46df8620","layout":{"x":0,"y":14,"width":24,"height":7},"query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"2c9a039f-f73b-4f79-a329-981fa438ff43"},"usedVariables":["_endTime","_startTime"],"text":"\nexceptions\n| where timestamp between (_startTime .. _endTime)\n| extend LegalEntity = customDimensions.LegalEntity\n , ExecutionMode = customDimensions.ExecutionMode\n , BatchJobId = customDimensions.BatchJobId\n , CallStack = customDimensions.CallStack\n| project [\"Timestamp\"] = timestamp\n , [\"Outer Message\"] = outerMessage\n , [\"Outer Message (short)\"] = tostring( split(tostring( split(outerMessage, \"\\\\\")[0]), \".\")[0]) //substring( outerMessage,0,50)\n , [\"Session ID\"] = session_Id\n , [\"User ID\"] = user_Id\n , [\"Legal Entity\"] =toupper( tostring( LegalEntity))\n , [\"Execution Mode\"] = tostring(ExecutionMode)\n , CallStack \n , [\"Client Type\"] = client_Type\n , [\"Client City\"] = client_City\n , [\"Client Country\"] = client_CountryOrRegion\n| summarize [\"Errors\"] = count() by [\"User ID\"] , ['Execution Mode'] // bin([\"Timestamp\"], totimespan(_time_span)) \n\n\n"},"visualOptions":{"multipleYAxes":{"base":{"id":"-1","label":"","columns":[],"yAxisMaximumValue":null,"yAxisMinimumValue":null,"yAxisScale":"linear","horizontalLines":[]},"additional":[],"showMultiplePanels":false},"hideLegend":false,"xColumnTitle":"","xColumn":null,"yColumns":null,"seriesColumns":null,"xAxisScale":"linear","verticalLine":"","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[]}},{"id":"f405ecc6-0553-492c-b865-e4e29717ae6c","title":"All errors","visualType":"table","pageId":"54d4ff07-74a9-48e7-b5f3-25db46df8620","layout":{"x":0,"y":21,"width":24,"height":7},"query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"2c9a039f-f73b-4f79-a329-981fa438ff43"},"usedVariables":["_endTime","_startTime"],"text":"\nexceptions\n| where timestamp between (_startTime .. _endTime)\n| extend LegalEntity = customDimensions.LegalEntity\n , ExecutionMode = customDimensions.ExecutionMode\n , BatchJobId = customDimensions.BatchJobId\n , CallStack = customDimensions.CallStack\n| project [\"Timestamp\"] = timestamp\n , [\"Outer Message (short)\"] = tostring( split(tostring( split(outerMessage, \"\\\\\")[0]), \".\")[0]) //substring( outerMessage,0,50)\n , [\"Session ID\"] = session_Id\n , [\"User ID\"] = user_Id\n , [\"Legal Entity\"] =toupper( tostring( LegalEntity))\n , [\"Execution Mode\"] = tostring(ExecutionMode)\n , [\"Client Type\"] = client_Type\n , [\"Client City\"] = client_City\n , [\"Client Country\"] = client_CountryOrRegion\n , [\"Outer Message\"] = outerMessage\n , CallStack \n| order by Timestamp desc \n\n\n"},"visualOptions":{"table__enableRenderLinks":true,"colorRules":[],"colorRulesDisabled":true,"colorStyle":"light","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[],"table__renderLinks":[]}}],"parameters":[{"kind":"duration","id":"2f9ab838-dea5-47f2-a936-c6bb30dc81ed","displayName":"Time range","description":"","beginVariableName":"_startTime","endVariableName":"_endTime","defaultValue":{"kind":"dynamic","count":1,"unit":"hours"},"showOnPages":{"kind":"all"}},{"kind":"string","id":"6830b1ec-568b-4fb6-a453-1bae2e9744b6","displayName":"Time span","description":"","variableName":"_time_span","selectionType":"scalar","includeAllOption":false,"defaultValue":{"kind":"value","value":"10m"},"dataSource":{"kind":"static","values":[{"displayText":"1 minute","value":"1m"},{"displayText":"10 minutes","value":"10m"},{"displayText":"1 hour","value":"1h"},{"displayText":"3 hours","value":"3h"},{"displayText":"6 hours","value":"6h"},{"displayText":"12 hours","value":"12h"},{"displayText":"1 day","value":"1d"},{"displayText":"1 week","value":"7d"},{"displayText":"2 weeks","value":"14d"}]},"showOnPages":{"kind":"all"}}],"dataSources":[{"id":"2c9a039f-f73b-4f79-a329-981fa438ff43","name":"perfsf_AppInsights","clusterUri":"https://ade.applicationinsights.io/subscriptions/79def5f1-f626-479f-8db5-b1272680adc1/resourcegroups/perfsf_AppInsights_RG/providers/microsoft.insights/components/perfsf_AppInsights","database":"perfsf_AppInsights","kind":"manual-kusto","scopeId":"kusto"}],"pages":[{"name":"Page 1","id":"54d4ff07-74a9-48e7-b5f3-25db46df8620"}]}
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Forms/ADE-Dashboard-D365FO-Monitoring-Forms.json:
--------------------------------------------------------------------------------
1 | {"$schema":"https://dataexplorer.azure.com/static/d/schema/50/dashboard.json","id":"936a42b0-3e29-4700-9bc3-e799208f686e","eTag":"05ece293-75e6-442a-a346-23e9d072b1e7","schema_version":"50","title":"D365FO-Monitoring-Forms","baseQueries":[],"tiles":[{"id":"5809a22f-397a-4bd8-9ca2-70c06894ba39","title":"Top 20 most opened forms","visualType":"bar","pageId":"57b9f821-760e-45d0-82ee-71fb8dc71d79","layout":{"x":0,"y":0,"width":9,"height":9},"query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"99f48c40-4d08-4070-af47-32e2e6e0fda7"},"usedVariables":["_activityId","_endTime","_startTime","_userId"],"text":"pageViews\n| where timestamp between (_startTime .. _endTime)\n| where name !in (\"SysOperationSandboxForm\", \"SysBoxForm\", \"Dialog\")\n| extend ['Activity Id'] = customDimensions.activityId \n| where isempty(['_userId']) or user_Id == ['_userId']\n| where isempty(['_activityId']) or ['Activity Id'] in (['_activityId'])\n| summarize [\"Form Opens\"] = count() by name \n| top 20 by [\"Form Opens\"] desc"},"visualOptions":{"multipleYAxes":{"base":{"id":"-1","label":"","columns":[],"yAxisMaximumValue":null,"yAxisMinimumValue":null,"yAxisScale":"linear","horizontalLines":[]},"additional":[],"showMultiplePanels":false},"hideLegend":false,"xColumnTitle":"","xColumn":null,"yColumns":null,"seriesColumns":null,"xAxisScale":"linear","verticalLine":"","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[{"interaction":"dragX","disabled":false}],"drillthrough":[]}},{"id":"82e3f98d-f79f-4611-8b7e-c559d88927f0","title":"Form usage by longest average duration","description":"Shows executions time statistics grouped by form name. Execution times include the averages, min and max durations and accumulated total time.","visualType":"table","pageId":"57b9f821-760e-45d0-82ee-71fb8dc71d79","layout":{"x":0,"y":9,"width":12,"height":8},"query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"99f48c40-4d08-4070-af47-32e2e6e0fda7"},"usedVariables":["_activityId","_endTime","_formName","_startTime","_userId"],"text":"pageViews\n| where timestamp between (_startTime .. _endTime)\n| where duration > 0\n| extend ['Activity Id'] = customDimensions.activityId \n| where isempty(['_userId']) or user_Id == ['_userId']\n| where isempty(['_activityId']) or ['Activity Id'] in (['_activityId'])\n| where isempty(['_formName']) or name == ['_formName']\n| project ['Form name'] = name, duration\n| summarize ['Number of executions'] = count()\n , ['Avg duration (s)'] = round(avg(duration)/1000,2)\n , ['Min duration (s)'] = round(min(duration)/1000,2)\n , ['Max duration (s)'] = round(max(duration)/1000,2)\n , ['Percentile 95 (s)'] = round(percentile(duration,95)/1000,2)\n , ['Accumulated total duration (s)'] = round(sum(duration)/1000,2) by ['Form name'] \n| order by ['Avg duration (s)'] desc"},"visualOptions":{"table__enableRenderLinks":true,"colorRules":[{"id":"5e243c32-c33a-40b6-8156-a0b757c9b332","ruleType":"colorByCondition","applyToColumn":null,"hideText":false,"applyTo":"rows","conditions":[{"operator":">","column":"Avg duration (s)","values":["5"]}],"chainingOperator":"and","visualType":"table","colorStyle":"bold","color":"yellow","tag":"","icon":null,"ruleName":""},{"id":"47995495-a9cf-459e-82ef-97df2165f3f3","ruleType":"colorByCondition","applyToColumn":null,"hideText":false,"applyTo":"rows","conditions":[{"operator":">","column":"Avg duration (s)","values":["10"]}],"chainingOperator":"and","visualType":"table","colorStyle":"bold","color":"red","tag":"","icon":null,"ruleName":""}],"colorRulesDisabled":false,"colorStyle":"light","crossFilterDisabled":false,"drillthroughDisabled":true,"crossFilter":[{"interaction":"column","property":"Query Type","parameterId":"f9cae1c1-10c8-4ab1-ada6-e1a7b0cb675d","disabled":false}],"drillthrough":[],"table__renderLinks":[]}},{"id":"2a656524-2915-42e7-a42f-7e5ba60da28e","title":"Form execution spread","visualType":"line","pageId":"57b9f821-760e-45d0-82ee-71fb8dc71d79","layout":{"x":9,"y":0,"width":9,"height":9},"description":"Shows the form usage taking into account the time range, user, activity and form name.","query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"99f48c40-4d08-4070-af47-32e2e6e0fda7"},"usedVariables":["_activityId","_endTime","_formName","_startTime","_userId"],"text":"pageViews\n| extend ['Activity Id'] = customDimensions.activityId\n| where timestamp between (_startTime .. _endTime)\n| where isempty(['_userId']) or user_Id == ['_userId']\n| where isempty(['_activityId']) or ['Activity Id'] in (['_activityId'])\n| where isempty(['_formName']) or name == ['_formName']\n| summarize Count = count() by bin(timestamp,1h)"},"visualOptions":{"multipleYAxes":{"base":{"id":"-1","label":"","columns":[],"yAxisMaximumValue":null,"yAxisMinimumValue":null,"yAxisScale":"linear","horizontalLines":[]},"additional":[],"showMultiplePanels":false},"hideLegend":true,"xColumnTitle":"","xColumn":null,"yColumns":null,"seriesColumns":null,"xAxisScale":"linear","verticalLine":"","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[]}},{"id":"f65d127d-8ee6-4a56-b286-0f773382ecf8","title":"Form execution by Legal Entity","visualType":"pie","pageId":"57b9f821-760e-45d0-82ee-71fb8dc71d79","layout":{"x":18,"y":0,"width":6,"height":9},"query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"99f48c40-4d08-4070-af47-32e2e6e0fda7"},"usedVariables":["_endTime","_startTime"],"text":"pageViews\n| where timestamp between (_startTime .. _endTime)\n| extend ['Legal entity'] = toupper((customDimensions.LegalEntity))\n| summarize count() by ['Legal entity']\n"},"visualOptions":{"hideLegend":true,"xColumn":null,"yColumns":null,"seriesColumns":null,"crossFilterDisabled":false,"drillthroughDisabled":false,"labelDisabled":false,"pie__label":["name","percentage","value"],"tooltipDisabled":false,"pie__tooltip":["name","percentage","value"],"pie__orderBy":"size","pie__kind":"donut","pie__topNSlices":null,"crossFilter":[],"drillthrough":[]}},{"id":"6f0db31d-4dbe-4e25-8ff3-cc48049dcd55","title":"Form instance execution times","description":"Shows the individual instances of this form and the respective opening times.","visualType":"table","pageId":"57b9f821-760e-45d0-82ee-71fb8dc71d79","layout":{"x":0,"y":17,"width":12,"height":7},"query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"99f48c40-4d08-4070-af47-32e2e6e0fda7"},"usedVariables":["_activityId","_endTime","_formName","_startTime","_userId"],"text":"pageViews\n| where timestamp between (_startTime .. _endTime)\n| where duration > 0\n| extend ['Activity Id'] = customDimensions.activityId \n| where isempty(['_userId']) or user_Id == ['_userId']\n| where isempty(['_activityId']) or ['Activity Id'] in (['_activityId'])\n| where isempty(['_formName']) or name == ['_formName']\n| project ['Time stamp'] = timestamp, ['Activity Id'], ['Form Name'] = name, ['Duration (s)'] = round(duration/1000,2)"},"visualOptions":{"table__enableRenderLinks":true,"colorRules":[],"colorRulesDisabled":true,"colorStyle":"light","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[],"table__renderLinks":[]}},{"id":"7db39b31-fb44-4655-bebb-13711268eef7","title":"Form duration trend","description":"Shows executions time statistics grouped by form name. Execution times include the averages, min and max durations and accumulated total time.","visualType":"table","pageId":"57b9f821-760e-45d0-82ee-71fb8dc71d79","layout":{"x":12,"y":9,"width":12,"height":8},"query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"99f48c40-4d08-4070-af47-32e2e6e0fda7"},"usedVariables":["_formName"],"text":"let _startTime30Days = ago(30d);\nlet _startTime14Days = ago(14d);\nlet _startTime7Days = ago(7d);\nlet _pageViews30Days = pageViews\n | where timestamp between (_startTime30Days .. now())\n | where duration > 0\n | where isempty(['_formName']) or name == ['_formName']\n | project ['Form name'] = name, duration,timestamp;\nlet _pageViews30DaysAgg = _pageViews30Days\n | summarize ['30 days average (s)'] = round(avg(duration)/1000,2) by ['Form name']\n | order by ['30 days average (s)'] desc;\nlet _pageViews14DaysAgg = _pageViews30Days\n | where timestamp between (_startTime14Days .. now())\n | summarize ['14 days average (s)'] = round(avg(duration)/1000,2) by ['Form name']\n | order by ['14 days average (s)'] desc;\nlet _pageViews7DaysAgg = _pageViews30Days\n | where timestamp between (_startTime7Days .. now())\n | summarize ['7 days executions'] = count()\n , ['7 days average (s)'] = round(avg(duration)/1000,2) by ['Form name']\n | order by ['7 days average (s)'] desc; \n_pageViews7DaysAgg\n| lookup kind=leftouter _pageViews14DaysAgg on ['Form name']\n| lookup kind=leftouter _pageViews30DaysAgg on ['Form name']\n| extend ['14 Day trend'] = round(100 - ((['7 days average (s)'] / ['14 days average (s)'])*100),2)\n| extend ['30 Day trend'] = round(100 - ((['7 days average (s)'] / ['30 days average (s)'])*100),2)\n| project ['Form name'], ['7 days executions'], ['7 days average (s)'], ['14 Day trend'], ['30 Day trend']"},"visualOptions":{"table__enableRenderLinks":true,"colorRules":[{"id":"5e243c32-c33a-40b6-8156-a0b757c9b332","ruleType":"colorByCondition","applyToColumn":null,"hideText":false,"applyTo":"rows","conditions":[{"operator":">","column":"Avg duration (s)","values":["5"]}],"chainingOperator":"and","visualType":"table","colorStyle":"bold","color":"yellow","tag":"","icon":null,"ruleName":""},{"id":"47995495-a9cf-459e-82ef-97df2165f3f3","ruleType":"colorByCondition","applyToColumn":null,"hideText":false,"applyTo":"rows","conditions":[{"operator":">","column":"Avg duration (s)","values":["10"]}],"chainingOperator":"and","visualType":"table","colorStyle":"bold","color":"red","tag":"","icon":null,"ruleName":""},{"id":"43bcecb4-6ad8-4c04-a997-f02a19e8e60b","ruleType":"colorByCondition","applyToColumn":null,"hideText":false,"applyTo":"cells","conditions":[{"operator":">=","column":"14 Day trend","values":["0"]}],"chainingOperator":"and","visualType":"table","colorStyle":"light","color":"green","tag":"%","icon":"arrowUp","ruleName":""},{"id":"f26d87b6-fdd8-4832-9f32-d612860689a9","ruleType":"colorByCondition","applyToColumn":null,"hideText":false,"applyTo":"cells","conditions":[{"values":["0"],"operator":"<","column":"14 Day trend"}],"chainingOperator":"and","visualType":"table","colorStyle":"light","color":"red","tag":"%","icon":"arrowDown","ruleName":""},{"id":"aafe8163-7368-45ba-a436-8695df9ff75d","ruleType":"colorByCondition","applyToColumn":null,"hideText":false,"applyTo":"cells","conditions":[{"operator":">=","column":"30 Day trend","values":["0"]}],"chainingOperator":"and","visualType":"table","colorStyle":"light","color":"green","tag":"%","icon":"arrowUp","ruleName":""},{"id":"ba0248c4-c29e-43ef-aa5c-d8c6ffb52b30","ruleType":"colorByCondition","applyToColumn":null,"hideText":false,"applyTo":"cells","conditions":[{"operator":"<","column":"30 Day trend","values":["0"]}],"chainingOperator":"and","visualType":"table","colorStyle":"light","color":"red","tag":"%","icon":"arrowDown","ruleName":""}],"colorRulesDisabled":false,"colorStyle":"light","crossFilterDisabled":false,"drillthroughDisabled":true,"crossFilter":[{"interaction":"column","property":"Query Type","parameterId":"f9cae1c1-10c8-4ab1-ada6-e1a7b0cb675d","disabled":false}],"drillthrough":[],"table__renderLinks":[]}},{"id":"4d1611f0-5a0d-4608-9adb-1d4e46c230b3","title":"Form instance execution times","description":"Shows the individual instances of this form and the respective opening times.","visualType":"column","pageId":"57b9f821-760e-45d0-82ee-71fb8dc71d79","layout":{"x":12,"y":17,"width":12,"height":7},"query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"99f48c40-4d08-4070-af47-32e2e6e0fda7"},"usedVariables":["_activityId","_endTime","_formName","_startTime","_userId"],"text":"pageViews\n| where timestamp between (_startTime .. _endTime)\n| where duration > 0\n| extend ['Activity Id'] = customDimensions.activityId \n| where isempty(['_userId']) or user_Id == ['_userId']\n| where isempty(['_activityId']) or ['Activity Id'] in (['_activityId'])\n| where isempty(['_formName']) or name == ['_formName']\n| project ['Time stamp'] = timestamp, ['Form Name'] = name, ['Duration (s)'] = round(duration/1000,2)"},"visualOptions":{"multipleYAxes":{"base":{"id":"-1","label":"","columns":[],"yAxisMaximumValue":null,"yAxisMinimumValue":null,"yAxisScale":"linear","horizontalLines":[]},"additional":[],"showMultiplePanels":false},"hideLegend":false,"xColumnTitle":"","xColumn":null,"yColumns":null,"seriesColumns":null,"xAxisScale":"linear","verticalLine":"","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[]}}],"parameters":[{"kind":"duration","id":"42794f52-6782-487c-b413-b6b565549995","displayName":"Time range","description":"","beginVariableName":"_startTime","endVariableName":"_endTime","defaultValue":{"kind":"dynamic","count":24,"unit":"hours"},"showOnPages":{"kind":"all"}},{"kind":"string","id":"379e468b-9382-4f21-8f56-8dc14c874c04","displayName":"User Id","description":"User identification","variableName":"_userId","selectionType":"scalar","includeAllOption":true,"defaultValue":{"kind":"all"},"dataSource":{"kind":"query","columns":{"value":"user_Id"},"query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"99f48c40-4d08-4070-af47-32e2e6e0fda7"},"usedVariables":["_endTime","_startTime"],"text":"pageViews\n| where timestamp between (_startTime .. _endTime)\n| project user_Id\n| distinct user_Id"}},"showOnPages":{"kind":"selection","pageIds":["57b9f821-760e-45d0-82ee-71fb8dc71d79"]}},{"kind":"string","id":"cd512fb6-641a-4c45-8fa5-5cca92f53f95","displayName":"Activity Id","description":"Identification of the activity interacting with forms","variableName":"_activityId","selectionType":"array","includeAllOption":true,"defaultValue":{"kind":"all"},"dataSource":{"kind":"query","columns":{"value":"ActivityId"},"query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"99f48c40-4d08-4070-af47-32e2e6e0fda7"},"usedVariables":[],"text":"pageViews\n| extend ActivityId = tostring(customDimensions.activityId)\n| distinct ActivityId"}},"showOnPages":{"kind":"selection","pageIds":["57b9f821-760e-45d0-82ee-71fb8dc71d79"]}},{"kind":"string","id":"ec9cee90-e7bf-4674-92db-e3f122b53c23","displayName":"Form name","description":"","variableName":"_formName","selectionType":"scalar","includeAllOption":true,"defaultValue":{"kind":"all"},"dataSource":{"kind":"query","columns":{"value":"name"},"query":{"kind":"inline","dataSource":{"kind":"inline","dataSourceId":"99f48c40-4d08-4070-af47-32e2e6e0fda7"},"usedVariables":["_endTime","_startTime"],"text":"pageViews\n| where timestamp between (_startTime .. _endTime)\n| distinct name\n"}},"showOnPages":{"kind":"all"}}],"dataSources":[{"id":"99f48c40-4d08-4070-af47-32e2e6e0fda7","name":"KSAppInsightsDemo","clusterUri":"https://ade.applicationinsights.io/subscriptions/79def5f1-f626-479f-8db5-b1272680adc1/resourcegroups/KSAppInsights/providers/microsoft.insights/components/KSAppInsightsDemo","database":"KSAppInsightsDemo","kind":"manual-kusto","scopeId":"kusto"}],"pages":[{"name":"Form Telemetry","id":"57b9f821-760e-45d0-82ee-71fb8dc71d79"}]}
--------------------------------------------------------------------------------
/DeveloperSamples/MonitoringAndTelemetryExtensionSample/bin/AxClass/MyTelemetryBase.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | MyTelemetryBase
4 |
5 |
7 | /// MyTelemetryBase class
8 | ///
9 | ///
10 |
11 | using DataContracts = Microsoft.ApplicationInsights.DataContracts;
12 |
13 | abstract class MyTelemetryBase
14 | {
15 | protected Map basePropertyMap = new Map(Types::String, Types::string);
16 | protected Map runtimePropertyMap = new Map(Types::String, Types::string);
17 |
18 | System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
19 |
20 | protected MyTelemetryParameters telemetryLoggingParams;
21 | //you can fill this field or not, if you dont fill it, it will be set to 0
22 | protected str eventId = "0";
23 | }
24 | ]]>
25 |
26 |
27 | new
28 |
39 |
40 |
41 | telemetryName
42 |
44 | /// Class telemetryName
45 | ///
46 | /// Telemetry
47 | protected ClassName telemetryName()
48 | {
49 | return classId2Name(classIdGet(this));
50 | }
51 |
52 | ]]>
53 |
54 |
55 | setElapsedMilliseconds
56 |
66 |
67 |
68 | addBaseProperty
69 |
84 |
85 |
86 | addRuntimeProperty
87 |
114 |
115 |
116 | clearRuntimeProperties
117 |
131 |
132 |
133 | shouldSkipLogging
134 |
149 |
150 |
151 | shouldSkipOnSeverityLevel
152 | severity)
156 | return true;
157 |
158 | return false;
159 | }
160 |
161 | ]]>
162 |
163 |
164 | processMetric
165 |
167 | /// Method ProcessMetric
168 | ///
169 | public final void processMetric(real _value)
170 | {
171 | try
172 | {
173 | this.logMetric(_value);
174 | }
175 | catch
176 | {
177 | warning(strFmt("Telemetry Metric Processing Error - className : %1",classId2Name(classIdGet(this))));
178 | }
179 | }
180 |
181 | ]]>
182 |
183 |
184 | processEvent
185 |
187 | /// Method processEvent
188 | ///
189 | public final void processEvent(str _name)
190 | {
191 | try
192 | {
193 |
194 | if(this.shouldSkipLogging())
195 | return;
196 |
197 | if(!_name)
198 | _name = this.telemetryName();
199 |
200 | this.populateProperties();
201 | this.logEvent(this.eventId, _name);
202 | }
203 | catch
204 | {
205 | warning(strFmt("Telemetry Event Processing Error: className : %1 - EventName: %2", classId2Name(classIdGet(this)), _name));
206 | }
207 | }
208 |
209 | ]]>
210 |
211 |
212 | processTrace
213 |
215 | /// Method processTrace
216 | ///
217 | public final void processTrace(str traceMessage, MyTelemetrySeverityLevel severity = MyTelemetrySeverityLevel::Information)
218 | {
219 | try
220 | {
221 | if(this.shouldSkipLogging())
222 | return;
223 |
224 | if(this.shouldSkipOnSeverityLevel(severity))
225 | return;
226 |
227 | this.populateProperties();
228 | this.logTrace(traceMessage, severity);
229 | }
230 | catch
231 | {
232 | warning(strFmt("Telemetry Trace Processing Error: className : %1 - TraceMessage: %2", classId2Name(classIdGet(this)), traceMessage));
233 | }
234 | }
235 |
236 | ]]>
237 |
238 |
239 | populateProperties
240 |
242 | /// Method Populate properties. This housld be implemented by the concrete class that extends this base.
243 | ///
244 | protected abstract void populateProperties()
245 | {
246 | }
247 |
248 | ]]>
249 |
250 |
251 | metricName
252 |
254 | /// Class metricName
255 | ///
256 | /// Telemetry
257 | protected ClassName metricName()
258 | {
259 | return classId2Name(classIdGet(this));
260 | }
261 |
262 | ]]>
263 |
264 |
265 | logMetric
266 |
268 | ///
269 | protected void logMetric(real _value)
270 | {
271 | SysApplicationInsightsTelemetryLogger::instance().trackMetric(this.metricName(), _value);
272 | }
273 |
274 | ]]>
275 |
276 |
277 | logMetricWithDimensions
278 |
280 | ///
281 | protected void logMetricWithDimensions(real _value, str _dimension1Name, str _dimension1Value, str _dimension2Name = "", str _dimension2Value = '', str _dimension3Name = '', str _dimension3Value = '')
282 | {
283 | SysApplicationInsightsTelemetryLogger::instance().trackMetricWithDimensions(this.metricName(), _value, _dimension1Name, _dimension1Value, _dimension2Name, _dimension2Value, _dimension3Name, _dimension3Value);
284 | }
285 |
286 | ]]>
287 |
288 |
289 | logEvent
290 |
292 | /// Method Log
293 | ///
294 | protected void logEvent(str _eventId, str _name)
295 | {
296 | SysApplicationInsightsEventTelemetry eventTelemetry = SysApplicationInsightsEventTelemetry::newFromEventIdName(_eventId, _name);
297 |
298 | MapIterator iterator;
299 | str key, value;
300 |
301 | // Get an iterator for the map
302 | iterator = new MapIterator(basePropertyMap);
303 |
304 | // Loop through the map & add base properties
305 | while (iterator.more())
306 | {
307 | key = iterator.key();
308 | value = iterator.value();
309 |
310 | var property = new MyApplicationInsightsProperty(key, value, SysApplicationInsightsComplianceDataType::CustomerContent);
311 | eventTelemetry.addProperty(property);
312 | iterator.next();
313 | }
314 |
315 | //add runtime properties:
316 | iterator = new MapIterator(runtimePropertyMap);
317 |
318 | // Loop through the map & add base properties
319 | while (iterator.more())
320 | {
321 | key = iterator.key();
322 | value = iterator.value();
323 |
324 | var property = new MyApplicationInsightsProperty(key, value, SysApplicationInsightsComplianceDataType::CustomerContent);
325 | eventTelemetry.addProperty(property);
326 | iterator.next();
327 | }
328 |
329 | SysApplicationInsightsTelemetryLogger::instance().trackEvent(eventTelemetry);
330 | }
331 |
332 | ]]>
333 |
334 |
335 | shouldLogEvent
336 |
344 |
345 |
346 | logTrace
347 |
349 | /// Method Log
350 | ///
351 | protected void logTrace(str traceMessage, MyTelemetrySeverityLevel severity = MyTelemetrySeverityLevel::Information)
352 | {
353 | DataContracts.SeverityLevel dotNetSeverity;
354 | switch(severity)
355 | {
356 | case MyTelemetrySeverityLevel::Critical:
357 | dotNetSeverity = DataContracts.SeverityLevel::Critical;
358 | break;
359 | case MyTelemetrySeverityLevel::Error:
360 | dotNetSeverity = DataContracts.SeverityLevel::Error;
361 | break;
362 | case MyTelemetrySeverityLevel::Warning:
363 | dotNetSeverity = DataContracts.SeverityLevel::Warning;
364 | break;
365 | case MyTelemetrySeverityLevel::Information:
366 | dotNetSeverity = DataContracts.SeverityLevel::Information;
367 | break;
368 | case MyTelemetrySeverityLevel::Verbose:
369 | dotNetSeverity = DataContracts.SeverityLevel::Verbose;
370 | break;
371 | default:
372 | dotNetSeverity = DataContracts.SeverityLevel::Information;
373 | break;
374 | }
375 | SysApplicationInsightsTraceTelemetry traceTelemetry = SysApplicationInsightsTraceTelemetry::newFromEventIdName(traceMessage, dotNetSeverity);
376 |
377 | MapIterator iterator;
378 | str key, value;
379 |
380 | // Get an iterator for the map
381 | iterator = new MapIterator(basePropertyMap);
382 |
383 | // Loop through the map & add base properties
384 | while (iterator.more())
385 | {
386 | key = iterator.key();
387 | value = iterator.value();
388 |
389 | var property = new MyApplicationInsightsProperty(key, value, SysApplicationInsightsComplianceDataType::CustomerContent);
390 | traceTelemetry.addProperty(property);
391 | iterator.next();
392 | }
393 |
394 | //add runtime properties:
395 | iterator = new MapIterator(runtimePropertyMap);
396 |
397 | // Loop through the map & add base properties
398 | while (iterator.more())
399 | {
400 | key = iterator.key();
401 | value = iterator.value();
402 |
403 | var property = new MyApplicationInsightsProperty(key, value, SysApplicationInsightsComplianceDataType::CustomerContent);
404 | traceTelemetry.addProperty(property);
405 | iterator.next();
406 | }
407 |
408 | SysApplicationInsightsTelemetryLogger::instance().trackTrace(traceTelemetry);
409 | }
410 |
411 | ]]>
412 |
413 |
414 | logException
415 |
417 | /// Method Log
418 | ///
419 | protected void logException(str message)
420 | {
421 | SysApplicationInsightsExceptionTelemetry exceptionTelemetry = SysApplicationInsightsExceptionTelemetry::newFromExceptionMessage(message);
422 |
423 | MapIterator iterator;
424 | str key, value;
425 |
426 | // Get an iterator for the map
427 | iterator = new MapIterator(basePropertyMap);
428 |
429 | // Loop through the map & add base properties
430 | while (iterator.more())
431 | {
432 | key = iterator.key();
433 | value = iterator.value();
434 |
435 | var property = new MyApplicationInsightsProperty(key, value, SysApplicationInsightsComplianceDataType::CustomerContent);
436 | exceptionTelemetry.addProperty(property);
437 | iterator.next();
438 | }
439 |
440 | //add runtime properties:
441 | iterator = new MapIterator(runtimePropertyMap);
442 |
443 | // Loop through the map & add base properties
444 | while (iterator.more())
445 | {
446 | key = iterator.key();
447 | value = iterator.value();
448 |
449 | var property = new MyApplicationInsightsProperty(key, value, SysApplicationInsightsComplianceDataType::CustomerContent);
450 | exceptionTelemetry.addProperty(property);
451 | iterator.next();
452 | }
453 |
454 | SysApplicationInsightsTelemetryLogger::instance().trackException(exceptionTelemetry);
455 | }
456 |
457 | ]]>
458 |
459 |
460 |
461 |
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/SlowQueries/ADE-Dashboard-D365FO-Monitoring-SlowQueries.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://dataexplorer.azure.com/static/d/schema/46/dashboard.json",
3 | "id": "2178d083-6209-4c51-9d90-2559930a4305",
4 | "eTag": "7ac01f31-bb32-447a-b391-b8a8def2d58b",
5 | "schema_version": "46",
6 | "title": "D365FO-Monitoring-SlowQueries",
7 | "autoRefresh": {
8 | "enabled": false
9 | },
10 | "baseQueries": [],
11 | "tiles": [
12 | {
13 | "id": "e2c8ac0b-7ccb-4a47-9930-a1214ff41d44",
14 | "title": "Slow queries reported by AOS (Top 100)",
15 | "description": "",
16 | "visualType": "table",
17 | "pageId": "57b9f821-760e-45d0-82ee-71fb8dc71d79",
18 | "layout": {
19 | "x": 0,
20 | "y": 9,
21 | "width": 24,
22 | "height": 8
23 | },
24 | "query": {
25 | "kind": "inline",
26 | "dataSource": {
27 | "kind": "inline",
28 | "dataSourceId": "99f48c40-4d08-4070-af47-32e2e6e0fda7"
29 | },
30 | "usedVariables": [
31 | "_city",
32 | "_endTime",
33 | "_queryType",
34 | "_startTime"
35 | ],
36 | "text": "customEvents\n| where timestamp between (_startTime .. _endTime)\n| where name == \"LongRunningQuery\"\n| where isempty(['_city']) or client_City in (['_city'])\n| extend LegalEntity = customDimensions.LegalEntity\n , ExecutionMode = customDimensions.ExecutionMode\n , ExecutionTimeSeconds = customDimensions.ExecutionTimeSeconds\n , CallStack = customDimensions.CallStack\n , QueryType = customDimensions.QueryType\n , Success = customDimensions.Success\n , JoinCount = customDimensions.JoinCount\n , ReturnedRowCount = customDimensions.ReturnedRowCount\n| where isempty(['_queryType']) or QueryType in (['_queryType'])\n| limit 100\n| project [\"Timestamp\"] = timestamp\n , [\"Session ID\"] = session_Id\n , [\"User ID\"] = user_Id\n , [\"Legal Entity\"] = LegalEntity\n , [\"Execution Mode\"] = ExecutionMode\n , [\"Query Type\"] = QueryType\n , [\"Execution Time (s)\"] = ExecutionTimeSeconds\n , [\"Join Count\"] = JoinCount\n , [\"Returned Row Count\"] = ReturnedRowCount\n , Success, CallStack \n , [\"Client City\"] = client_City\n , [\"Client Country\"] = client_CountryOrRegion"
37 | },
38 | "visualOptions": {
39 | "table__enableRenderLinks": true,
40 | "colorRules": [],
41 | "colorRulesDisabled": true,
42 | "colorStyle": "light",
43 | "crossFilterDisabled": false,
44 | "drillthroughDisabled": false,
45 | "crossFilter": [],
46 | "drillthrough": [],
47 | "table__renderLinks": []
48 | }
49 | },
50 | {
51 | "id": "5809a22f-397a-4bd8-9ca2-70c06894ba39",
52 | "title": "Slow queries over time",
53 | "description": "",
54 | "visualType": "timechart",
55 | "pageId": "57b9f821-760e-45d0-82ee-71fb8dc71d79",
56 | "layout": {
57 | "x": 0,
58 | "y": 0,
59 | "width": 8,
60 | "height": 9
61 | },
62 | "query": {
63 | "kind": "inline",
64 | "dataSource": {
65 | "kind": "inline",
66 | "dataSourceId": "99f48c40-4d08-4070-af47-32e2e6e0fda7"
67 | },
68 | "usedVariables": [
69 | "_city",
70 | "_endTime",
71 | "_queryType",
72 | "_startTime"
73 | ],
74 | "text": "customEvents\n| where timestamp between (_startTime .. _endTime)\n| where name == \"LongRunningQuery\"\n| where isempty(['_city']) or client_City in (['_city'])\n| extend LegalEntity = customDimensions.LegalEntity\n , ExecutionMode = customDimensions.ExecutionMode\n , ExecutionTimeSeconds = customDimensions.ExecutionTimeSeconds\n , CallStack = customDimensions.CallStack\n , QueryType = customDimensions.QueryType\n , Success = customDimensions.Success\n , JoinCount = customDimensions.JoinCount\n , ReturnedRowCount = customDimensions.ReturnedRowCount\n| where isempty(['_queryType']) or QueryType in (['_queryType'])\n| project [\"Timestamp\"] = timestamp\n , [\"Name\"] = name\n , [\"Session ID\"] = session_Id\n , [\"User ID\"] = user_Id\n , [\"Legal Entity\"] = LegalEntity\n , [\"Execution Mode\"] = ExecutionMode\n , [\"Query Type\"] = QueryType\n , [\"Execution Time (s)\"] = ExecutionTimeSeconds\n , [\"Join Count\"] = JoinCount\n , [\"Returned Row Count\"] = ReturnedRowCount\n , Success, CallStack \n , [\"Client City\"] = client_City\n , [\"Client Country\"] = client_CountryOrRegion\n| summarize [\"Slow Queries\"] = count() by bin(Timestamp, 1h)"
75 | },
76 | "visualOptions": {
77 | "multipleYAxes": {
78 | "base": {
79 | "id": "-1",
80 | "label": "",
81 | "columns": [],
82 | "yAxisMaximumValue": null,
83 | "yAxisMinimumValue": null,
84 | "yAxisScale": "linear",
85 | "horizontalLines": []
86 | },
87 | "additional": [],
88 | "showMultiplePanels": false
89 | },
90 | "hideLegend": false,
91 | "xColumnTitle": "",
92 | "xColumn": null,
93 | "yColumns": null,
94 | "seriesColumns": null,
95 | "xAxisScale": "linear",
96 | "verticalLine": "",
97 | "crossFilterDisabled": false,
98 | "drillthroughDisabled": false,
99 | "crossFilter": [],
100 | "drillthrough": []
101 | }
102 | },
103 | {
104 | "id": "82e3f98d-f79f-4611-8b7e-c559d88927f0",
105 | "title": "Slow queries by query type",
106 | "description": "",
107 | "visualType": "column",
108 | "pageId": "57b9f821-760e-45d0-82ee-71fb8dc71d79",
109 | "layout": {
110 | "x": 8,
111 | "y": 0,
112 | "width": 8,
113 | "height": 9
114 | },
115 | "query": {
116 | "kind": "inline",
117 | "dataSource": {
118 | "kind": "inline",
119 | "dataSourceId": "99f48c40-4d08-4070-af47-32e2e6e0fda7"
120 | },
121 | "usedVariables": [
122 | "_city",
123 | "_endTime",
124 | "_startTime"
125 | ],
126 | "text": "customEvents\n| where timestamp between (_startTime .. _endTime)\n| where name == \"LongRunningQuery\"\n| where isempty(['_city']) or client_City in (['_city'])\n| extend LegalEntity = customDimensions.LegalEntity\n , ExecutionMode = customDimensions.ExecutionMode\n , ExecutionTimeSeconds = customDimensions.ExecutionTimeSeconds\n , CallStack = customDimensions.CallStack\n , QueryType = customDimensions.QueryType\n , Success = customDimensions.Success\n , JoinCount = customDimensions.JoinCount\n , ReturnedRowCount = customDimensions.ReturnedRowCount\n| project [\"Timestamp\"] = timestamp\n , [\"Name\"] = name\n , [\"Session ID\"] = session_Id\n , [\"User ID\"] = user_Id\n , [\"Legal Entity\"] = LegalEntity\n , [\"Execution Mode\"] = ExecutionMode\n , [\"Query Type\"] = tostring(QueryType)\n , [\"Execution Time (s)\"] = ExecutionTimeSeconds\n , [\"Join Count\"] = JoinCount\n , [\"Returned Row Count\"] = ReturnedRowCount\n , Success, CallStack \n , [\"Client City\"] = client_City\n , [\"Client Country\"] = client_CountryOrRegion\n| summarize [\"Slow Queries\"] = count() by ['Query Type']\n"
127 | },
128 | "visualOptions": {
129 | "multipleYAxes": {
130 | "base": {
131 | "id": "-1",
132 | "label": "Number of queries",
133 | "columns": [],
134 | "yAxisMaximumValue": null,
135 | "yAxisMinimumValue": null,
136 | "yAxisScale": "linear",
137 | "horizontalLines": []
138 | },
139 | "additional": [],
140 | "showMultiplePanels": false
141 | },
142 | "hideLegend": false,
143 | "xColumnTitle": "Query Type",
144 | "xColumn": null,
145 | "yColumns": null,
146 | "seriesColumns": null,
147 | "xAxisScale": "linear",
148 | "verticalLine": "",
149 | "crossFilterDisabled": false,
150 | "drillthroughDisabled": true,
151 | "crossFilter": [
152 | {
153 | "interaction": "column",
154 | "property": "Query Type",
155 | "parameterId": "f9cae1c1-10c8-4ab1-ada6-e1a7b0cb675d",
156 | "disabled": false
157 | }
158 | ],
159 | "drillthrough": []
160 | }
161 | },
162 | {
163 | "id": "06cc23e1-c57c-401e-977b-c6b22b9d7963",
164 | "title": "Slow queries by client country / city",
165 | "description": "",
166 | "visualType": "column",
167 | "pageId": "57b9f821-760e-45d0-82ee-71fb8dc71d79",
168 | "layout": {
169 | "x": 16,
170 | "y": 0,
171 | "width": 8,
172 | "height": 9
173 | },
174 | "query": {
175 | "kind": "inline",
176 | "dataSource": {
177 | "kind": "inline",
178 | "dataSourceId": "99f48c40-4d08-4070-af47-32e2e6e0fda7"
179 | },
180 | "usedVariables": [
181 | "_endTime",
182 | "_queryType",
183 | "_startTime"
184 | ],
185 | "text": "customEvents\n| where timestamp between (_startTime .. _endTime)\n| where name == \"LongRunningQuery\"\n| extend LegalEntity = customDimensions.LegalEntity\n , ExecutionMode = customDimensions.ExecutionMode\n , ExecutionTimeSeconds = customDimensions.ExecutionTimeSeconds\n , CallStack = customDimensions.CallStack\n , QueryType = customDimensions.QueryType\n , Success = customDimensions.Success\n , JoinCount = customDimensions.JoinCount\n , ReturnedRowCount = customDimensions.ReturnedRowCount\n| where isempty(['_queryType']) or QueryType in (['_queryType'])\n| project [\"Timestamp\"] = timestamp\n , [\"Name\"] = name\n , [\"Session ID\"] = session_Id\n , [\"User ID\"] = user_Id\n , [\"Legal Entity\"] = LegalEntity\n , [\"Execution Mode\"] = ExecutionMode\n , [\"Query Type\"] = tostring(QueryType)\n , [\"Execution Time (s)\"] = ExecutionTimeSeconds\n , [\"Join Count\"] = JoinCount\n , [\"Returned Row Count\"] = ReturnedRowCount\n , Success, CallStack \n , [\"Client City\"] = client_City\n , [\"Client Country\"] = client_CountryOrRegion\n| summarize [\"Slow Queries\"] = count() by ['Client Country'], ['Client City']\n"
186 | },
187 | "visualOptions": {
188 | "multipleYAxes": {
189 | "base": {
190 | "id": "-1",
191 | "label": "Number of queries",
192 | "columns": [],
193 | "yAxisMaximumValue": null,
194 | "yAxisMinimumValue": null,
195 | "yAxisScale": "linear",
196 | "horizontalLines": []
197 | },
198 | "additional": [],
199 | "showMultiplePanels": false
200 | },
201 | "hideLegend": false,
202 | "xColumnTitle": "Query Type",
203 | "xColumn": null,
204 | "yColumns": null,
205 | "seriesColumns": null,
206 | "xAxisScale": "linear",
207 | "verticalLine": "",
208 | "crossFilterDisabled": false,
209 | "drillthroughDisabled": false,
210 | "crossFilter": [
211 | {
212 | "interaction": "column",
213 | "property": "Client City",
214 | "parameterId": "b1c9bd85-d46b-4eb4-981f-e3489fb7c4a1",
215 | "disabled": false
216 | },
217 | {
218 | "disabled": false
219 | }
220 | ],
221 | "drillthrough": []
222 | }
223 | },
224 | {
225 | "id": "b053ab8c-0996-410b-92a0-84c625fe1135",
226 | "title": "Top 25 slow queries by duration",
227 | "description": "",
228 | "visualType": "table",
229 | "pageId": "57b9f821-760e-45d0-82ee-71fb8dc71d79",
230 | "layout": {
231 | "x": 0,
232 | "y": 17,
233 | "width": 24,
234 | "height": 8
235 | },
236 | "query": {
237 | "kind": "inline",
238 | "dataSource": {
239 | "kind": "inline",
240 | "dataSourceId": "99f48c40-4d08-4070-af47-32e2e6e0fda7"
241 | },
242 | "usedVariables": [
243 | "_city",
244 | "_endTime",
245 | "_queryType",
246 | "_startTime"
247 | ],
248 | "text": "customEvents\n| where timestamp between (_startTime .. _endTime)\n| where name == \"LongRunningQuery\"\n| where isempty(['_city']) or client_City in (['_city'])\n| extend LegalEntity = tostring(customDimensions.LegalEntity)\n , ExecutionMode = tostring(customDimensions.ExecutionMode)\n , ExecutionTimeSeconds = tostring(customDimensions.ExecutionTimeSeconds)\n , CallStack = tostring(customDimensions.CallStack)\n , QueryType = tostring(customDimensions.QueryType)\n , Success = tostring(customDimensions.Success)\n , JoinCount = tostring(customDimensions.JoinCount)\n , ReturnedRowCount = tostring(customDimensions.ReturnedRowCount)\n| where isempty(['_queryType']) or QueryType in (['_queryType'])\n| order by ExecutionTimeSeconds desc\n| limit 25\n| project [\"Timestamp\"] = timestamp\n , [\"Session ID\"] = session_Id\n , [\"User ID\"] = user_Id\n , [\"Legal Entity\"] = LegalEntity\n , [\"Execution Mode\"] = ExecutionMode\n , [\"Query Type\"] = QueryType\n , [\"Execution Time (s)\"] = ExecutionTimeSeconds\n , [\"Join Count\"] = JoinCount\n , [\"Returned Row Count\"] = ReturnedRowCount\n , Success, CallStack \n , [\"Client City\"] = client_City\n , [\"Client Country\"] = client_CountryOrRegion"
249 | },
250 | "visualOptions": {
251 | "table__enableRenderLinks": true,
252 | "colorRules": [],
253 | "colorRulesDisabled": true,
254 | "colorStyle": "light",
255 | "crossFilterDisabled": false,
256 | "drillthroughDisabled": false,
257 | "crossFilter": [],
258 | "drillthrough": [],
259 | "table__renderLinks": []
260 | }
261 | }
262 | ],
263 | "parameters": [
264 | {
265 | "kind": "duration",
266 | "id": "42794f52-6782-487c-b413-b6b565549995",
267 | "displayName": "Time range",
268 | "description": "",
269 | "beginVariableName": "_startTime",
270 | "endVariableName": "_endTime",
271 | "defaultValue": {
272 | "kind": "dynamic",
273 | "count": 1,
274 | "unit": "hours"
275 | },
276 | "showOnPages": {
277 | "kind": "all"
278 | }
279 | },
280 | {
281 | "kind": "string",
282 | "id": "f9cae1c1-10c8-4ab1-ada6-e1a7b0cb675d",
283 | "displayName": "Query Type",
284 | "description": "",
285 | "variableName": "_queryType",
286 | "selectionType": "array",
287 | "includeAllOption": true,
288 | "defaultValue": {
289 | "kind": "all"
290 | },
291 | "dataSource": {
292 | "kind": "query",
293 | "columns": {
294 | "value": "QueryType"
295 | },
296 | "query": {
297 | "kind": "inline",
298 | "dataSource": {
299 | "kind": "inline",
300 | "dataSourceId": "99f48c40-4d08-4070-af47-32e2e6e0fda7"
301 | },
302 | "usedVariables": [
303 | "_endTime",
304 | "_startTime"
305 | ],
306 | "text": "customEvents\n| where timestamp between (_startTime .. _endTime)\n| where name == \"LongRunningQuery\"\n| project QueryType = tostring(customDimensions.QueryType)\n| distinct QueryType"
307 | }
308 | },
309 | "showOnPages": {
310 | "kind": "selection",
311 | "pageIds": [
312 | "57b9f821-760e-45d0-82ee-71fb8dc71d79"
313 | ]
314 | }
315 | },
316 | {
317 | "kind": "string",
318 | "id": "b1c9bd85-d46b-4eb4-981f-e3489fb7c4a1",
319 | "displayName": "City",
320 | "description": "",
321 | "variableName": "_city",
322 | "selectionType": "array",
323 | "includeAllOption": true,
324 | "defaultValue": {
325 | "kind": "all"
326 | },
327 | "dataSource": {
328 | "kind": "query",
329 | "columns": {
330 | "value": "client_City"
331 | },
332 | "query": {
333 | "kind": "inline",
334 | "dataSource": {
335 | "kind": "inline",
336 | "dataSourceId": "99f48c40-4d08-4070-af47-32e2e6e0fda7"
337 | },
338 | "usedVariables": [
339 | "_endTime",
340 | "_startTime"
341 | ],
342 | "text": "customEvents\n| where timestamp between (_startTime .. _endTime)\n| where name == 'LongRunningQuery'\n| distinct client_City\n"
343 | }
344 | },
345 | "showOnPages": {
346 | "kind": "selection",
347 | "pageIds": [
348 | "57b9f821-760e-45d0-82ee-71fb8dc71d79"
349 | ]
350 | }
351 | }
352 | ],
353 | "dataSources": [
354 | {
355 | "id": "99f48c40-4d08-4070-af47-32e2e6e0fda7",
356 | "name": "KSAppInsights1037",
357 | "clusterUri": "https://ade.applicationinsights.io/subscriptions/47620b96-6792-4a5d-9c55-d719e70721c1/resourcegroups/KSAppInsights1037/providers/microsoft.insights/components/KSAppInsights1037",
358 | "database": "KSAppInsights1037",
359 | "kind": "manual-kusto",
360 | "scopeId": "kusto"
361 | }
362 | ],
363 | "pages": [
364 | {
365 | "name": "Slow Queries",
366 | "id": "57b9f821-760e-45d0-82ee-71fb8dc71d79"
367 | }
368 | ]
369 | }
--------------------------------------------------------------------------------
/Dashboards/AzureDataExplorer/Batch/ADE-Dashboard-D365FO-Monitoring-Batch.json:
--------------------------------------------------------------------------------
1 | {"$schema":"https://dataexplorer.azure.com/static/d/schema/63/dashboard.json","id":"1df107d0-bb4d-4625-b635-e09ac34673f6","eTag":"9e06855e-754b-41df-8c20-d2f17e73fa8d","title":"D365FO-Monitoring-Batch","schema_version":63,"tiles":[{"id":"5809a22f-397a-4bd8-9ca2-70c06894ba39","title":"Batch server configuration","visualType":"table","pageId":"57b9f821-760e-45d0-82ee-71fb8dc71d79","layout":{"x":18,"y":9,"width":5,"height":7},"queryRef":{"kind":"query","queryId":"915bc00f-4243-49a8-ab11-c28bc17bbeaf"},"description":"Shows the batch server configuration settings","visualOptions":{"table__enableRenderLinks":false,"colorRulesDisabled":false,"crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[{"interaction":"dragX","disabled":false}],"drillthrough":[],"table__renderLinks":[],"colorRules":[{"id":"06bbb9fb-ebf8-4b7d-8b47-8180d6336e21","ruleType":"colorByCondition","ruleName":"","applyTo":"cells","conditions":[{"operator":">=","column":"Max Threads","values":["8"]}],"chainingOperator":"and","colorStyle":"light","applyToColumn":null,"hideText":false,"color":"blue","tag":"","icon":"completed","visualType":"table"},{"id":"3a82f827-c785-4834-9b69-7df10333958d","ruleType":"colorByCondition","applyToColumn":null,"hideText":false,"applyTo":"cells","conditions":[{"operator":"<=","column":"Max Threads","values":["4"]}],"chainingOperator":"and","colorStyle":"light","color":"green","tag":"","icon":"completed","ruleName":"","visualType":"table"}]}},{"id":"8b523026-32a5-45ed-8102-0561ad7a5beb","title":"Batch server #tasks execution spread","visualType":"pie","pageId":"57b9f821-760e-45d0-82ee-71fb8dc71d79","layout":{"x":5,"y":0,"width":5,"height":9},"queryRef":{"kind":"query","queryId":"86f56460-5c5a-4105-a10e-16d5a34bc912"},"description":"Shows the number of tasks that are picked up by the different batch AOS instances.","visualOptions":{"hideLegend":false,"legendLocation":"bottom","xColumn":null,"yColumns":null,"seriesColumns":null,"crossFilterDisabled":false,"drillthroughDisabled":false,"labelDisabled":false,"pie__label":["name","percentage"],"tooltipDisabled":false,"pie__tooltip":["name","percentage","value"],"pie__orderBy":"size","pie__kind":"pie","pie__topNSlices":null,"crossFilter":[{"interaction":"dragX","disabled":false}],"drillthrough":[]}},{"id":"5ee5d98e-db2b-4979-a2d6-a07f57518aef","title":"Throttled batch tasks","description":"Shows the running tasks in a 10 minute timeslice, along with the throttled tasks.","visualType":"area","pageId":"57b9f821-760e-45d0-82ee-71fb8dc71d79","layout":{"x":10,"y":0,"width":13,"height":9},"queryRef":{"kind":"query","queryId":"a9656546-bff9-4bde-8c49-caf800235f67"},"visualOptions":{"multipleYAxes":{"base":{"id":"-1","label":"","columns":[],"yAxisMaximumValue":null,"yAxisMinimumValue":null,"yAxisScale":"linear","horizontalLines":[]},"additional":[],"showMultiplePanels":false},"hideLegend":false,"legendLocation":"bottom","xColumnTitle":"","xColumn":null,"yColumns":null,"seriesColumns":null,"xAxisScale":"linear","verticalLine":"","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[],"selectedDataOnLoad":{"all":true,"limit":10},"dataPointsTooltip":{"all":false,"limit":1}}},{"id":"b2e65dce-2f9d-4004-a78b-f45e352bab1c","title":"Priority distribution","description":"Shows the number of tasks by priority.","visualType":"pie","pageId":"57b9f821-760e-45d0-82ee-71fb8dc71d79","layout":{"x":0,"y":0,"width":5,"height":9},"queryRef":{"kind":"query","queryId":"4845ae22-5309-4710-a873-920df4d85319"},"visualOptions":{"hideLegend":false,"legendLocation":"bottom","xColumn":null,"yColumns":null,"seriesColumns":null,"crossFilterDisabled":false,"drillthroughDisabled":false,"labelDisabled":false,"pie__label":["name","percentage"],"tooltipDisabled":false,"pie__tooltip":["name","percentage","value"],"pie__orderBy":"size","pie__kind":"donut","pie__topNSlices":null,"crossFilter":[],"drillthrough":[]}},{"id":"e7f096de-893d-4576-aeab-5dfbc9a3f8e4","title":"Available batch threads","description":"Shows the number of threads available per AOS over time.","visualType":"timechart","pageId":"57b9f821-760e-45d0-82ee-71fb8dc71d79","layout":{"x":0,"y":9,"width":10,"height":7},"queryRef":{"kind":"query","queryId":"acfe99c3-8266-4de0-bd9d-c4426ed4e563"},"visualOptions":{"multipleYAxes":{"base":{"id":"-1","label":"","columns":[],"yAxisMaximumValue":null,"yAxisMinimumValue":null,"yAxisScale":"linear","horizontalLines":[]},"additional":[],"showMultiplePanels":false},"hideLegend":false,"legendLocation":"bottom","xColumnTitle":"","xColumn":null,"yColumns":null,"seriesColumns":null,"xAxisScale":"linear","verticalLine":"","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[],"selectedDataOnLoad":{"all":true,"limit":10},"dataPointsTooltip":{"all":false,"limit":1}}},{"id":"efcb2bdf-58e4-4f72-86ea-cbe1f3688c16","title":"Batch execution history","description":"Shows batch jobs execution information. Information available includes starting time, completion time, class information and activity ids","visualType":"table","pageId":"57b9f821-760e-45d0-82ee-71fb8dc71d79","layout":{"x":0,"y":16,"width":23,"height":7},"queryRef":{"kind":"query","queryId":"5296991b-e95d-4fed-9bba-7cbfb8c1c59c"},"visualOptions":{"table__enableRenderLinks":true,"colorRulesDisabled":false,"crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[],"table__renderLinks":[],"colorRules":[]}},{"id":"c833576d-243f-4d5b-9c88-e70ffb64e07d","title":"Throttled batch tasks","description":"Shows the running tasks in a 10 minute timeslice, along with the throttled tasks.","visualType":"area","pageId":"d87df241-867d-4f16-88c2-4f6eb842ca85","layout":{"x":0,"y":0,"width":24,"height":9},"queryRef":{"kind":"query","queryId":"512083ba-d96a-48b1-8830-eab3d687556e"},"visualOptions":{"multipleYAxes":{"base":{"id":"-1","label":"","columns":[],"yAxisMaximumValue":null,"yAxisMinimumValue":null,"yAxisScale":"linear","horizontalLines":[]},"additional":[],"showMultiplePanels":false},"hideLegend":false,"legendLocation":"bottom","xColumnTitle":"","xColumn":null,"yColumns":null,"seriesColumns":null,"xAxisScale":"linear","verticalLine":"","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[],"selectedDataOnLoad":{"all":true,"limit":10},"dataPointsTooltip":{"all":false,"limit":1}}},{"id":"854e98b4-a14d-423e-af65-a472cf35c144","title":"Throttled batch tasks","description":"Shows the running tasks in a 10 minute timeslice, along with the throttled tasks.","visualType":"table","pageId":"d87df241-867d-4f16-88c2-4f6eb842ca85","layout":{"x":0,"y":9,"width":24,"height":9},"queryRef":{"kind":"query","queryId":"8749e43e-4770-4aac-ab51-a6bfa0298c16"},"visualOptions":{"table__enableRenderLinks":true,"colorRulesDisabled":true,"crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[],"table__renderLinks":[],"colorRules":[]}},{"id":"ff2668e7-ae04-430b-8152-311a0b8b56df","title":"Batch exceptions","description":"This shows the exceptions encountered during batch scheduling or execution. This contains also platform level exceptions that don't reach the Infolog error messages.","visualType":"table","pageId":"e8a9e639-50cb-4687-af2d-d0b581ab247e","layout":{"x":0,"y":18,"width":24,"height":9},"queryRef":{"kind":"query","queryId":"3d117aab-4634-4d52-9edf-68ee424a15d0"},"visualOptions":{"table__enableRenderLinks":true,"colorRulesDisabled":true,"crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[],"table__renderLinks":[],"colorRules":[]}},{"id":"18c18664-4bdc-4f17-8fd3-b702f676f4bc","title":"Batch Infolog Errors","description":"This shows Infolog error messages coming from batch workloads.","visualType":"table","pageId":"e8a9e639-50cb-4687-af2d-d0b581ab247e","layout":{"x":0,"y":9,"width":24,"height":9},"queryRef":{"kind":"query","queryId":"e3d91e62-cfd6-4506-906f-6a1c72e8b5a1"},"visualOptions":{"table__enableRenderLinks":true,"colorRulesDisabled":true,"crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[],"table__renderLinks":[],"colorRules":[]}},{"id":"2f68faa8-f41d-489a-be59-62b7571936bd","title":"Batch exceptions over time","description":"This shows the exceptions encountered during batch scheduling or execution. This contains also platform level exceptions that don't reach the Infolog error messages.","visualType":"area","pageId":"e8a9e639-50cb-4687-af2d-d0b581ab247e","layout":{"x":12,"y":0,"width":12,"height":9},"queryRef":{"kind":"query","queryId":"64db031b-4a5e-4394-b5d1-d439e70aeabf"},"visualOptions":{"multipleYAxes":{"base":{"id":"-1","label":"","columns":[],"yAxisMaximumValue":null,"yAxisMinimumValue":null,"yAxisScale":"linear","horizontalLines":[]},"additional":[],"showMultiplePanels":false},"hideLegend":false,"legendLocation":"bottom","xColumnTitle":"","xColumn":null,"yColumns":null,"seriesColumns":null,"xAxisScale":"linear","verticalLine":"","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[]}},{"id":"8742946a-c80c-4a0b-ad8c-3a9af76473a8","title":"Batch Infolog Errors","description":"This shows Infolog error messages coming from batch workloads.","visualType":"area","pageId":"e8a9e639-50cb-4687-af2d-d0b581ab247e","layout":{"x":0,"y":0,"width":12,"height":9},"queryRef":{"kind":"query","queryId":"6cc07939-e1a6-44ce-b8f0-6c4b718ea046"},"visualOptions":{"multipleYAxes":{"base":{"id":"-1","label":"","columns":[],"yAxisMaximumValue":null,"yAxisMinimumValue":null,"yAxisScale":"linear","horizontalLines":[]},"additional":[],"showMultiplePanels":false},"hideLegend":false,"legendLocation":"bottom","xColumnTitle":"","xColumn":null,"yColumns":null,"seriesColumns":null,"xAxisScale":"linear","verticalLine":"","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[],"drillthrough":[]}},{"id":"d6c6ad89-c7bd-416c-8ce3-90837ae1297d","title":"PBS Queue sizes","visualType":"line","pageId":"57b9f821-760e-45d0-82ee-71fb8dc71d79","layout":{"x":10,"y":9,"width":8,"height":7},"queryRef":{"kind":"query","queryId":"8e682fff-dd0b-41dc-bed4-7dcc383176b2"},"description":"Shows the PBS queues and how many tasks are waiting in those specific queues at any given point in time.","visualOptions":{"multipleYAxes":{"base":{"id":"-1","label":"","columns":[],"yAxisMaximumValue":null,"yAxisMinimumValue":null,"yAxisScale":"linear","horizontalLines":[]},"additional":[],"showMultiplePanels":false},"hideLegend":false,"legendLocation":"bottom","xColumnTitle":"","xColumn":null,"yColumns":null,"seriesColumns":null,"xAxisScale":"linear","verticalLine":"","crossFilterDisabled":false,"drillthroughDisabled":false,"crossFilter":[{"interaction":"dragX","disabled":false}],"drillthrough":[]}}],"baseQueries":[],"parameters":[{"kind":"duration","id":"42794f52-6782-487c-b413-b6b565549995","displayName":"Time range","description":"","beginVariableName":"_startTime","endVariableName":"_endTime","defaultValue":{"kind":"dynamic","count":24,"unit":"hours"},"showOnPages":{"kind":"all"}},{"kind":"string","id":"cd512fb6-641a-4c45-8fa5-5cca92f53f95","displayName":"Activity Id","description":"Identification of the activity interacting with forms","variableName":"_activityId","selectionType":"array","includeAllOption":true,"defaultValue":{"kind":"all"},"dataSource":{"kind":"query","columns":{"value":"ActivityId"},"queryRef":{"kind":"query","queryId":"ad733dd1-eb39-4e3c-86e6-3ea16b4a77fe"}},"showOnPages":{"kind":"selection","pageIds":["57b9f821-760e-45d0-82ee-71fb8dc71d79"]}},{"kind":"string","id":"9125b7b6-ab87-42d1-aa8a-f7279be866b5","displayName":"Batch Job Id","description":"","variableName":"_batchJobId","selectionType":"scalar","includeAllOption":true,"defaultValue":{"kind":"all"},"dataSource":{"kind":"query","columns":{"value":"BatchJobId"},"queryRef":{"kind":"query","queryId":"d0c728f6-b6de-495d-981c-55c56e53f139"}},"showOnPages":{"kind":"all"}}],"dataSources":[{"id":"6f2edf23-11b6-48a1-ad15-81660c55ff77","kind":"manual-kusto","scopeId":"kusto","name":"D365FSCM-Dev","clusterUri":"https://ade.applicationinsights.io/subscriptions/79def5f1-f626-479f-8db5-b1272680adc1/resourcegroups/ksappinsightsahiad/","database":"D365FSCM-AppInsights-AHAID","queryResultsCacheMaxAge":10000}],"pages":[{"name":"Batch Overview","id":"57b9f821-760e-45d0-82ee-71fb8dc71d79"},{"name":"Batch Throttling","id":"d87df241-867d-4f16-88c2-4f6eb842ca85"},{"name":"Batch Errors","id":"e8a9e639-50cb-4687-af2d-d0b581ab247e"}],"queries":[{"dataSource":{"kind":"inline","dataSourceId":"6f2edf23-11b6-48a1-ad15-81660c55ff77"},"text":"customEvents\n| where timestamp between (_startTime .. _endTime)\n| where name == \"BatchThreadInfo\"\n| extend customDimensionsParsed = parse_json(customDimensions)\n| extend infoMessageParsed = parse_json(tostring(customDimensionsParsed.InfoMessage))\n| extend CurrentBatchTasks = infoMessageParsed.CurrentBatchTasks\n| extend TaskQueueCount = infoMessageParsed.TaskQueueCount\n| extend MaxThreadCount = infoMessageParsed.MaxThreadCount\n| extend ReservedNumberOfThreads = infoMessageParsed.ReservedNumberOfThreads\n| summarize arg_max(timestamp, MaxThreadCount)\n , arg_max(timestamp, ReservedNumberOfThreads) by cloud_RoleInstance\n| project [\"Batch AOS\"] = cloud_RoleInstance\n , [\"Max Threads\"] = MaxThreadCount\n , [\"Reserved Threads\"] = ReservedNumberOfThreads\n| order by [\"Batch AOS\"] asc","id":"915bc00f-4243-49a8-ab11-c28bc17bbeaf","usedVariables":["_endTime","_startTime"]},{"dataSource":{"kind":"inline","dataSourceId":"6f2edf23-11b6-48a1-ad15-81660c55ff77"},"text":"customEvents\n| where timestamp between (_startTime .. _endTime)\n| where name == \"BatchTaskStart\"\n| extend customDimensionsParsed = parse_json(customDimensions)\n| extend batchJobId = customDimensionsParsed.batchJobId\n| where isempty(_batchJobId) or tostring(batchJobId) in (_batchJobId)\n| extend batchAOSArray = split(cloud_RoleInstance, \"-\")\n| extend batchAOS = strcat(batchAOSArray[0])\n| project batchAOS\n| summarize count() by batchAOS\n| order by batchAOS asc\n","id":"86f56460-5c5a-4105-a10e-16d5a34bc912","usedVariables":["_batchJobId","_endTime","_startTime"]},{"dataSource":{"kind":"inline","dataSourceId":"6f2edf23-11b6-48a1-ad15-81660c55ff77"},"text":"let _scale = '10m';\ncustomEvents\n| where timestamp between (_startTime .. _endTime)\n| where name in (\"BatchThrottled\", \"BatchTaskStart\")\n| extend customDimensionsParsed = parse_json(customDimensions)\n| extend batchJobId = customDimensionsParsed.BatchJobId\n| where isempty(_batchJobId) or tostring(batchJobId) in (_batchJobId)\n| summarize ThrottledTasks = countif(name == \"BatchThrottled\"), RunningTasks = countif(name == \"BatchTaskStart\") by TimeSum=bin(timestamp, totimespan(_scale))\n| project TimeSum, RunningTasks, ThrottledTasks\n| order by TimeSum asc","id":"a9656546-bff9-4bde-8c49-caf800235f67","usedVariables":["_batchJobId","_endTime","_startTime"]},{"dataSource":{"kind":"inline","dataSourceId":"6f2edf23-11b6-48a1-ad15-81660c55ff77"},"text":"customEvents\n| where timestamp between (_startTime .. _endTime)\n| where name == \"BatchTaskStart\"\n| extend CustomDimensionsParsed = parse_json(customDimensions)\n| extend InfoMessageParsed = parse_json(tostring(CustomDimensionsParsed.InfoMessage))\n| extend Priority = iif(isnotempty(tostring(CustomDimensionsParsed.Priority)), tostring(CustomDimensionsParsed.Priority), 'Normal') // Ensuring that when enabling the telemetry to test, we account for potential missing initial values)\n| extend BatchTaskId = tostring(CustomDimensionsParsed.BatchTaskId)\n| distinct BatchTaskId, Priority\n| summarize count() by Priority","id":"4845ae22-5309-4710-a873-920df4d85319","usedVariables":["_endTime","_startTime"]},{"dataSource":{"kind":"inline","dataSourceId":"6f2edf23-11b6-48a1-ad15-81660c55ff77"},"text":"customEvents\n| where timestamp between (_startTime .. _endTime)\n| where name == \"BatchThreadInfo\"\n| extend customDimensionsParsed = parse_json(customDimensions)\n| extend infoMessageParsed = parse_json(tostring(customDimensionsParsed.InfoMessage))\n| extend CurrentBatchTasks = infoMessageParsed.CurrentBatchTasks\n| extend TaskQueueCount = infoMessageParsed.TaskQueueCount\n| extend MaxThreadCount = infoMessageParsed.MaxThreadCount\n| extend ReservedNumberOfThreads = infoMessageParsed.ReservedNumberOfThreads\n| project timestamp, Batch = tostring(split(cloud_RoleInstance, \"-\")[0]), AvailableThreads = todecimal(MaxThreadCount) - todecimal(CurrentBatchTasks) - todecimal(ReservedNumberOfThreads)","id":"acfe99c3-8266-4de0-bd9d-c4426ed4e563","usedVariables":["_endTime","_startTime"]},{"dataSource":{"kind":"inline","dataSourceId":"6f2edf23-11b6-48a1-ad15-81660c55ff77"},"text":"customEvents\n| where timestamp between (_startTime .. _endTime)\n| where name in (\"BatchTaskStart\",\"BatchTaskFinished\",\"BatchTaskFailure\")\n| extend CustomDimensionsParsed = parse_json(customDimensions)\n| extend InfoMessageParsed = parse_json(tostring(CustomDimensionsParsed.InfoMessage))\n| extend ActivityId = tostring(CustomDimensionsParsed.activityId)\n| extend ClassName = tostring(CustomDimensionsParsed.ClassName)\n| extend BatchJobId = tostring(CustomDimensionsParsed.BatchJobId)\n| extend BatchJobTaskId1 = tostring(CustomDimensionsParsed.BatchJobTaskId)\n| extend BatchJobTaskId2 = tostring(CustomDimensionsParsed.BatchTaskId)\n| extend BatchJobTaskId = iif(isnotempty(BatchJobTaskId1), BatchJobTaskId1, BatchJobTaskId2) // Temporary trick until the batch team synchronizes the field names across events\n//| where isempty(_batchAOS) or cloud_RoleInstance in(_batchAOS)\n| extend StartTime = iff(name == \"BatchTaskStart\" , timestamp, datetime(null))\n| extend EndTime = iff(name == \"BatchTaskFinished\" , timestamp, datetime(null))\n| extend ErrorTime = iff(name == \"BatchTaskFailure\" , timestamp, datetime(null))\n| extend RetryCount = iff(name == \"BatchTaskStart\" , InfoMessageParsed.RetryCount, \"\")\n| project StartTime, EndTime,ErrorTime,RetryCount, ActivityId, ClassName, BatchJobId, RoleInstance = cloud_RoleInstance, BatchJobTaskId\n| where isempty(_batchJobId) or tostring(BatchJobId) in (_batchJobId)\n| summarize StartTime = min(StartTime),\n CompletionTime = max(EndTime),\n ErrorTime = max(ErrorTime),\n RetryCount = take_any(RetryCount),\n ClassName = any(ClassName), \n BatchJobId = any(BatchJobId),\n BatchJobTaskId = any(BatchJobTaskId),\n RoleInstance = any(RoleInstance)\nby ActivityId\n| where isnotempty(StartTime)\n| extend BatchAOS = strcat(split(RoleInstance, \"-\")[0])\n| extend ElapsedTime = iif(isnotempty(CompletionTime), CompletionTime, now()) - StartTime\n| project ActivityId, BatchAOS, BatchJobId, BatchJobTaskId, ClassName, StartTime, CompletionTime, ElapsedTime, RetryCount","id":"5296991b-e95d-4fed-9bba-7cbfb8c1c59c","usedVariables":["_batchJobId","_endTime","_startTime"]},{"dataSource":{"kind":"inline","dataSourceId":"6f2edf23-11b6-48a1-ad15-81660c55ff77"},"text":"let _scale = '10m';\ncustomEvents\n| where timestamp between (_startTime .. _endTime)\n| where name in (\"BatchThrottled\", \"BatchTaskStart\")\n| extend customDimensionsParsed = parse_json(customDimensions)\n| extend batchJobId = customDimensionsParsed.BatchJobId\n| where isempty(_batchJobId) or tostring(batchJobId) in (_batchJobId)\n| summarize ThrottledTasks = countif(name == \"BatchThrottled\"), RunningTasks = countif(name == \"BatchTaskStart\") by TimeSum=bin(timestamp, totimespan(_scale))\n| project TimeSum, RunningTasks, ThrottledTasks\n| order by TimeSum asc","id":"512083ba-d96a-48b1-8830-eab3d687556e","usedVariables":["_batchJobId","_endTime","_startTime"]},{"dataSource":{"kind":"inline","dataSourceId":"6f2edf23-11b6-48a1-ad15-81660c55ff77"},"text":"let _scale = '10m';\ncustomEvents\n| where timestamp between (_startTime .. _endTime)\n| where name == \"BatchThrottled\"\n| extend customDimensionsParsed = parse_json(customDimensions)\n| extend BatchJobId = customDimensionsParsed.BatchJobId // this is actually always 0\n| extend EventId = customDimensionsParsed.eventId\n| extend EnvironmentId = customDimensionsParsed.environmentId\n| extend LegalEntity = customDimensionsParsed.LegalEntity\n| extend ActivityId = customDimensionsParsed.activityId\n| extend EventMessage = customDimensionsParsed.EventMessage\n| extend InfoMessage = customDimensionsParsed.InfoMessage\n| extend InfoMessageParsed = parse_json(tostring(InfoMessage))\n| extend CurrentMachineCPU = round(toreal(InfoMessageParsed.CurrentMachineCpu), 0)\n| extend CurrentMachineMemory = InfoMessageParsed.CurrentMachineMemory\n| extend CurrentSqlDtu = InfoMessageParsed.CurrentSqlDtu\n| project timestamp, EventId, name, user_Id, session_Id, cloud_RoleInstance, EnvironmentId, LegalEntity, ActivityId, EventMessage, CurrentMachineCPU, CurrentMachineMemory, CurrentSqlDtu","id":"8749e43e-4770-4aac-ab51-a6bfa0298c16","usedVariables":["_endTime","_startTime"]},{"dataSource":{"kind":"inline","dataSourceId":"6f2edf23-11b6-48a1-ad15-81660c55ff77"},"text":"// BatchTaskFailure is providing Exceptions in the batch execution. \n// These events are providing exception information that is often not covered by infolog errors, but exceptions that are thrown during batch processing and batch scheduling.\ncustomEvents\n| where timestamp between (_startTime .. _endTime)\n| where name in (\"BatchTaskFailure\")\n| extend CustomDimensionsParsed = parse_json(customDimensions)\n| extend BatchJobCaption = tostring(CustomDimensionsParsed.BatchJobCaption)\n| extend ActivityId = tostring(CustomDimensionsParsed.activityId)\n| extend ClassName = iif((tostring(CustomDimensionsParsed.ClassName) == \"\"), \"\", tostring(CustomDimensionsParsed.ClassName))\n| extend BatchJobId = tostring(CustomDimensionsParsed.BatchJobId)\n| extend BatchTaskId = tostring(CustomDimensionsParsed.BatchTaskId)\n| extend EventMessage = tostring(CustomDimensionsParsed.EventMessage)\n| extend ExceptionType = tostring(CustomDimensionsParsed.ExceptionType)\n| extend ExceptionMessage = tostring(CustomDimensionsParsed.ExceptionMessage)\n| extend CallStack = tostring(CustomDimensionsParsed.CallStack)\n| where isempty(_batchJobId) or tostring(BatchJobId) in (_batchJobId)\n| project TimeStamp = timestamp, RoleInstance = cloud_RoleInstance, ActivityId, BatchJobCaption, ClassName, BatchJobId, BatchTaskId, EventMessage, ExceptionType, ExceptionMessage, CallStack\n\n","id":"3d117aab-4634-4d52-9edf-68ee424a15d0","usedVariables":["_batchJobId","_endTime","_startTime"]},{"dataSource":{"kind":"inline","dataSourceId":"6f2edf23-11b6-48a1-ad15-81660c55ff77"},"text":"exceptions\n| where timestamp between (_startTime .. _endTime)\n| extend CustomDimensionsParsed = parse_json(customDimensions)\n| extend ExecutionMode = tostring(CustomDimensionsParsed.ExecutionMode)\n| extend BatchJobId = tostring(CustomDimensionsParsed.BatchJobId)\n| extend BatchJobCaption = tostring(CustomDimensionsParsed.BatchJobCaption)\n| extend ActivityId = tostring(CustomDimensionsParsed.activityId)\n| extend MethodName = tostring(CustomDimensionsParsed.MethodName)\n| extend ClassName = tostring(CustomDimensionsParsed.ClassName)\n| extend CallStack = tostring(CustomDimensionsParsed.CallStack)\n| where ExecutionMode == \"Batch\"\n| where isempty(_batchJobId) or tostring(BatchJobId) in (_batchJobId)\n| project TimeStamp = timestamp, ActivityId, BatchJobId, BatchJobCaption, OuterMessage = outerMessage, CallStack","id":"e3d91e62-cfd6-4506-906f-6a1c72e8b5a1","usedVariables":["_batchJobId","_endTime","_startTime"]},{"dataSource":{"kind":"inline","dataSourceId":"6f2edf23-11b6-48a1-ad15-81660c55ff77"},"text":"// BatchTaskFailure is providing Exceptions in the batch execution. \n// These events are providing exception information that is often not covered by infolog errors, but exceptions that are thrown during batch processing and batch scheduling.\ncustomEvents\n| where timestamp between (_startTime .. _endTime)\n| where name in (\"BatchTaskFailure\")\n| extend CustomDimensionsParsed = parse_json(customDimensions)\n| extend BatchJobId = tostring(CustomDimensionsParsed.BatchJobId)\n| where isempty(_batchJobId) or tostring(BatchJobId) in (_batchJobId)\n| summarize TotalFailures = count() by bin(timestamp, 10m)\n\n","id":"64db031b-4a5e-4394-b5d1-d439e70aeabf","usedVariables":["_batchJobId","_endTime","_startTime"]},{"dataSource":{"kind":"inline","dataSourceId":"6f2edf23-11b6-48a1-ad15-81660c55ff77"},"text":"exceptions\n| where timestamp between (_startTime .. _endTime)\n| extend CustomDimensionsParsed = parse_json(customDimensions)\n| extend ExecutionMode = tostring(CustomDimensionsParsed.ExecutionMode)\n| extend BatchJobId = tostring(CustomDimensionsParsed.BatchJobId)\n| where ExecutionMode == \"Batch\"\n| where isempty(_batchJobId) or tostring(BatchJobId) in (_batchJobId)\n| summarize TotalErrors = count() by bin(timestamp, 10m)","id":"6cc07939-e1a6-44ce-b8f0-6c4b718ea046","usedVariables":["_batchJobId","_endTime","_startTime"]},{"dataSource":{"kind":"inline","dataSourceId":"6f2edf23-11b6-48a1-ad15-81660c55ff77"},"text":"customEvents\n| where timestamp between (_startTime .. _endTime)\n| where name == \"BatchQueuesDetails\"\n| extend CustomDimensionsParsed = parse_json(customDimensions)\n| extend InfoMessageParsed = parse_json(tostring(CustomDimensionsParsed.InfoMessage))\n| extend BatchLowSchedulingQueue = toint(InfoMessageParsed.BatchLowSchedulingQueue)\n| extend BatchNormalSchedulingQueue = toint(InfoMessageParsed.BatchNormalSchedulingQueue)\n| extend BatchHighSchedulingQueue = toint(InfoMessageParsed.BatchHighSchedulingQueue)\n| extend BatchCriticalSchedulingQueue = toint(InfoMessageParsed.BatchCriticalSchedulingQueue)\n| extend BatchReservedCapacitySchedulingQueue = toint(InfoMessageParsed.BatchReservedCapacitySchedulingQueue)\n| extend ReadyTasksBuffer = toint(InfoMessageParsed.ReadyTasksBuffer)\n| extend ReadyTasksBufferWithPriorities = toint(InfoMessageParsed.ReadyTasksBufferWithPriorities)\n| project timestamp, BatchLowSchedulingQueue, BatchNormalSchedulingQueue, BatchHighSchedulingQueue, BatchReservedCapacitySchedulingQueue, ReadyTasksBuffer, ReadyTasksBufferWithPriorities","id":"8e682fff-dd0b-41dc-bed4-7dcc383176b2","usedVariables":["_endTime","_startTime"]},{"dataSource":{"kind":"inline","dataSourceId":"6f2edf23-11b6-48a1-ad15-81660c55ff77"},"text":"pageViews\n| extend ActivityId = tostring(customDimensions.activityId)\n| distinct ActivityId","id":"ad733dd1-eb39-4e3c-86e6-3ea16b4a77fe","usedVariables":[]},{"dataSource":{"kind":"inline","dataSourceId":"6f2edf23-11b6-48a1-ad15-81660c55ff77"},"text":"customEvents\n| where timestamp between (_startTime .. _endTime)\n| extend customDimensionsParsed = parse_json(customDimensions)\n| extend BatchJobId = tostring(customDimensionsParsed.BatchJobId)\n| distinct BatchJobId\n| order by BatchJobId asc\n","id":"d0c728f6-b6de-495d-981c-55c56e53f139","usedVariables":["_endTime","_startTime"]}]}
--------------------------------------------------------------------------------