AWSMetricsEditorSystemComponent.cpp 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <AWSCoreBus.h>
  9. #include <AWSMetricsEditorSystemComponent.h>
  10. #include <MetricsManager.h>
  11. #include <AzCore/IO/FileIO.h>
  12. #include <AzCore/IO/Path/Path.h>
  13. #include <AzCore/Serialization/EditContext.h>
  14. #include <AzCore/Utils/Utils.h>
  15. #include <AzToolsFramework/ActionManager/Action/ActionManager.h>
  16. #include <AzToolsFramework/ActionManager/Action/ActionManagerInterface.h>
  17. #include <AzToolsFramework/ActionManager/Menu/MenuManagerInterface.h>
  18. #include <QDesktopServices>
  19. #include <QUrl>
  20. namespace AWSMetrics
  21. {
  22. void AWSMetricsEditorSystemComponent::Reflect(AZ::ReflectContext* context)
  23. {
  24. if (AZ::SerializeContext* serialize = azrtti_cast<AZ::SerializeContext*>(context))
  25. {
  26. serialize->Class<AWSMetricsEditorSystemComponent, AZ::Component>()
  27. ->Version(0)
  28. ;
  29. if (AZ::EditContext* ec = serialize->GetEditContext())
  30. {
  31. ec->Class<AWSMetricsEditorSystemComponent>("AWSMetricsEditor", "Generate and submit metrics to the metrics analytics pipeline")
  32. ->ClassElement(AZ::Edit::ClassElements::EditorData, "")
  33. ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
  34. ;
  35. }
  36. }
  37. }
  38. void AWSMetricsEditorSystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
  39. {
  40. provided.push_back(AZ_CRC_CE("AWSMetricsServiceEditor"));
  41. }
  42. void AWSMetricsEditorSystemComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
  43. {
  44. incompatible.push_back(AZ_CRC_CE("AWSMetricsServiceEditor"));
  45. }
  46. void AWSMetricsEditorSystemComponent::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required)
  47. {
  48. required.push_back(AZ_CRC_CE("AWSCoreService"));
  49. }
  50. void AWSMetricsEditorSystemComponent::GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType&)
  51. {
  52. }
  53. void AWSMetricsEditorSystemComponent::Activate()
  54. {
  55. AzToolsFramework::ActionManagerRegistrationNotificationBus::Handler::BusConnect();
  56. }
  57. void AWSMetricsEditorSystemComponent::OnMenuBindingHook()
  58. {
  59. constexpr const char* AWSMetrics[] =
  60. {
  61. "Metrics Gem" ,
  62. "aws_metrics_gem" ,
  63. ":/Notifications/download.svg",
  64. ""
  65. };
  66. AWSCore::AWSCoreEditorRequestBus::Broadcast(&AWSCore::AWSCoreEditorRequests::CreateSubMenu, AWSCore::AWSMenuIdentifier, AWSMetrics, 200);
  67. const auto& submenuIdentifier = AWSMetrics[1];
  68. static constexpr const char* AWSMetricsGemOverview[] =
  69. {
  70. "Metrics Gem overview" ,
  71. "aws_metrics_gem_overview" ,
  72. ":/Notifications/link.svg",
  73. "https://o3de.org/docs/user-guide/gems/reference/aws/aws-metrics/"
  74. };
  75. AWSCore::AWSCoreEditorRequestBus::Broadcast(&AWSCore::AWSCoreEditorRequests::AddExternalLinkAction, submenuIdentifier, AWSMetricsGemOverview, 0);
  76. static constexpr const char* AWSMetricsSetupGem[] =
  77. {
  78. "Setup Metrics Gem" ,
  79. "aws_setup_metrics_gem" ,
  80. ":/Notifications/link.svg",
  81. "https://o3de.org/docs/user-guide/gems/reference/aws/aws-metrics/setup/"
  82. };
  83. AWSCore::AWSCoreEditorRequestBus::Broadcast(&AWSCore::AWSCoreEditorRequests::AddExternalLinkAction, submenuIdentifier, AWSMetricsSetupGem, 0);
  84. static constexpr const char* AWSMetricsScripting[] =
  85. {
  86. "Scripting Reference" ,
  87. "aws_metrics_scripting_reference" ,
  88. ":/Notifications/link.svg",
  89. "https://o3de.org/docs/user-guide/gems/reference/aws/aws-metrics/scripting/"
  90. };
  91. AWSCore::AWSCoreEditorRequestBus::Broadcast(&AWSCore::AWSCoreEditorRequests::AddExternalLinkAction, submenuIdentifier, AWSMetricsScripting, 0);
  92. static constexpr const char* AWSMetricsAPIReference[] =
  93. {
  94. "API Reference" ,
  95. "aws_metrics_api_reference" ,
  96. ":/Notifications/link.svg",
  97. "https://o3de.org/docs/user-guide/gems/reference/aws/aws-metrics/cpp-api/"
  98. };
  99. AWSCore::AWSCoreEditorRequestBus::Broadcast(&AWSCore::AWSCoreEditorRequests::AddExternalLinkAction, submenuIdentifier, AWSMetricsAPIReference, 0);
  100. static constexpr const char* AWSMetricsAdvancedTopics[] =
  101. {
  102. "Advanced Topics" ,
  103. "aws_metrics_advanced_topics" ,
  104. ":/Notifications/link.svg",
  105. "https://o3de.org/docs/user-guide/gems/reference/aws/aws-metrics/advanced-topics/"
  106. };
  107. AWSCore::AWSCoreEditorRequestBus::Broadcast(&AWSCore::AWSCoreEditorRequests::AddExternalLinkAction, submenuIdentifier, AWSMetricsAdvancedTopics, 0);
  108. constexpr const char metricsSettingsIdentifier[] = "aws_metrics_settings";
  109. auto configFilePath = AZ::IO::FixedMaxPath(AZ::Utils::GetGemPath("AWSMetrics")) / AZ::SettingsRegistryInterface::RegistryFolder;
  110. auto actionManagerInterface = AZ::Interface<AzToolsFramework::ActionManagerInterface>::Get();
  111. AZ_Assert(actionManagerInterface, "AWSMetricsEditorSystemComponent - could not get ActionManagerInterface");
  112. AzToolsFramework::ActionProperties actionProperties;
  113. actionProperties.m_name = "Metrics Settings";
  114. auto outcome = actionManagerInterface->RegisterAction(AWSCore::ActionContext, metricsSettingsIdentifier, actionProperties,
  115. [configFilePath = AZ::IO::Path(configFilePath.String())]()
  116. {
  117. QDesktopServices::openUrl(QUrl::fromLocalFile(configFilePath.c_str()));
  118. });
  119. AZ_Assert(outcome.IsSuccess(), "Failed to register action %s", metricsSettingsIdentifier);
  120. auto menuManagerInterface = AZ::Interface<AzToolsFramework::MenuManagerInterface>::Get();
  121. AZ_Assert(menuManagerInterface, "AWSCoreEditorSystemComponent - could not get MenuManagerInterface");
  122. menuManagerInterface->AddActionToMenu(submenuIdentifier, metricsSettingsIdentifier, 0);
  123. }
  124. void AWSMetricsEditorSystemComponent::Deactivate()
  125. {
  126. AzToolsFramework::ActionManagerRegistrationNotificationBus::Handler::BusDisconnect();
  127. }
  128. } // namespace AWSMetrics