diff --git a/Gems/AWSMetrics/Code/Include/Private/IdentityProvider.h b/Gems/AWSMetrics/Code/Include/Private/IdentityProvider.h index 1309e2749c..f70b2c7e10 100644 --- a/Gems/AWSMetrics/Code/Include/Private/IdentityProvider.h +++ b/Gems/AWSMetrics/Code/Include/Private/IdentityProvider.h @@ -14,6 +14,8 @@ namespace AWSMetrics { + constexpr const char* EngineVersionJsonKey = "O3DEVersion"; + //! Base class to be implemented by IdentityProvider to retrive an ID for identity. class IdentityProvider { diff --git a/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp b/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp index bc8ff9a42e..d0ab8a1a8c 100644 --- a/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp +++ b/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp @@ -8,10 +8,10 @@ #include -#include #include -#include -#include +#include +#include +#include namespace AWSMetrics { @@ -22,37 +22,23 @@ namespace AWSMetrics AZStd::string IdentityProvider::GetEngineVersion() { - static constexpr const char* EngineConfigFilePath = "@products@/engine.json"; - static constexpr const char* EngineVersionJsonKey = "O3DEVersion"; - - AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetDirectInstance(); - if (!fileIO) - { - AZ_Error("AWSMetrics", false, "No FileIoBase Instance"); - return ""; - } - - char resolvedPath[AZ_MAX_PATH_LEN] = { 0 }; - if (!fileIO->ResolvePath(EngineConfigFilePath, resolvedPath, AZ_MAX_PATH_LEN)) + constexpr auto engineVersionKey = AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::EngineSettingsRootKey) + "/" + EngineVersionJsonKey; + AZStd::string engineVersion; + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr && settingsRegistry->Get(engineVersion, engineVersionKey)) { - AZ_Error("AWSMetrics", false, "Failed to resolve the engine config file directory"); - return ""; + return engineVersion; } - auto readOutcome = AZ::JsonSerializationUtils::ReadJsonFile(resolvedPath); - if (!readOutcome.IsSuccess()) + auto engineSettingsPath = AZ::IO::FixedMaxPath{ AZ::Utils::GetEnginePath() } / "engine.json"; + if (AZ::IO::SystemFile::Exists(engineSettingsPath.c_str())) { - AZ_Error("AWSMetrics", false, readOutcome.GetError().c_str()); - return ""; + AZ::SettingsRegistryImpl settingsRegistry; + if (settingsRegistry.MergeSettingsFile( + engineSettingsPath.Native(), AZ::SettingsRegistryInterface::Format::JsonMergePatch, AZ::SettingsRegistryMergeUtils::EngineSettingsRootKey)) + { + settingsRegistry.Get(engineVersion, engineVersionKey); + } } - - rapidjson_ly::Document& jsonDoc = readOutcome.GetValue(); - auto memberIt = jsonDoc.FindMember(EngineVersionJsonKey); - if (memberIt != jsonDoc.MemberEnd()) - { - return memberIt->value.GetString(); - } - - return ""; + return engineVersion; } } diff --git a/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h b/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h index 4f40fd6ff1..f8fb9e174c 100644 --- a/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h +++ b/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -47,9 +48,6 @@ namespace AWSMetrics m_localFileIO->SetAlias("@engroot@", engineRoot.c_str()); m_localFileIO->SetAlias("@products@", productAssetPath.c_str()); m_localFileIO->SetAlias("@user@", userPath.c_str()); - // Copy engine.json to the cache - EXPECT_TRUE(m_localFileIO->Copy((engineRoot / "engine.json").c_str(), "engine.json")); - m_serializeContext = AZStd::make_unique(); m_registrationContext = AZStd::make_unique(); @@ -61,6 +59,8 @@ namespace AWSMetrics m_settingsRegistry->SetContext(m_serializeContext.get()); m_settingsRegistry->SetContext(m_registrationContext.get()); + m_settingsRegistry->Set(AZ::SettingsRegistryMergeUtils::FilePathKey_EngineRootFolder, engineRoot.c_str()); + AZ::SettingsRegistry::Register(m_settingsRegistry.get()); }