Disabled processor and memory summary status

Redfish deprecated the Processor/Memory Summary Status (state, health,
healthrollup) attributes. Please refer to redfish spec for more details:
https://redfish.dmtf.org/schemas/v1/ComputerSystem.v1_20_0.json

Initially I tried to fix the summary status issues,
(https://gerrit.openbmc.org/c/openbmc/bmcweb/+/60663)
But later it was decided that we should also remove these attributes
from the bmcweb code. Here is a link to discussion on discord:
https://discord.com/channels/775381525260664832/855566794994221117/1093939076710793296

This drop hides these attributes under defined
BMCWEB_ENABLE_PROC_MEM_STATUS. This option is disabled by default.

These attributes will be permanently removed from code in 1Q 2024
(in 8-9 months).

Testing:
  - Redfish validator passed excepted couple of failures but those are
    failing without my changes too.
  - Make sure that summary status for memory and processor is not seen
    in the output.

    Without fix:
    ------------
    '''
    $ curl -s -k https://${bmc}/redfish/v1/Systems/system
    .....
    "MemorySummary": {
      "Status": {
        "Health": "OK",
        "HealthRollup": "OK",
        "State": "Enabled"
      },
      "TotalSystemMemoryGiB": 256
    },
    .....
    "ProcessorSummary": {
      "CoreCount": 20,
      "Count": 4,
      "Status": {
        "Health": "OK",
        "HealthRollup": "OK",
        "State": "Enabled"
      }
    },
    .....
    ''''

    With fix:
    ---------
    '''
    "MemorySummary": {
      "TotalSystemMemoryGiB": 256
    },
    .....
    "ProcessorSummary": {
      "CoreCount": 20,
      "Count": 4
    },
    .....
    ''''
  - Turned on BMCWEB_ALLOW_DEPRECATED_PROC_MEM_STATUS flag and made sure
    that properties are shown again.

Change-Id: I1e0ee386bd4f365599afcf46e5d587285af635ad
Signed-off-by: Ninad Palsule <ninadpalsule@us.ibm.com>
Signed-off-by: Ed Tanous <edtanous@google.com>
diff --git a/config/bmcweb_config.h.in b/config/bmcweb_config.h.in
index 1290bd6..df16bc1 100644
--- a/config/bmcweb_config.h.in
+++ b/config/bmcweb_config.h.in
@@ -19,4 +19,5 @@
 
 constexpr const bool bmcwebEnableHealthPopulate = @BMCWEB_ENABLE_HEALTH_POPULATE@ == 1;
 
+constexpr const bool bmcwebEnableProcMemStatus = @BMCWEB_ENABLE_PROC_MEM_STATUS@ == 1;
 // clang-format on
diff --git a/config/meson.build b/config/meson.build
index bd8aada..6464024 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -15,6 +15,8 @@
 conf_data.set('HTTPS_PORT', get_option('https_port'))
 enable_health_populate = get_option('health-populate')
 conf_data.set10('BMCWEB_ENABLE_HEALTH_POPULATE', enable_health_populate.enabled())
+enable_proc_mem_status = get_option('redfish-enable-proccessor-memory-status')
+conf_data.set10('BMCWEB_ENABLE_PROC_MEM_STATUS', enable_proc_mem_status.enabled())
 
 # Logging level
 loglvlopt = get_option('bmcweb-logging')
diff --git a/meson_options.txt b/meson_options.txt
index 3f37f9e..26fdecf 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -119,6 +119,16 @@
 )
 
 option(
+    'redfish-enable-proccessor-memory-status',
+    type: 'feature',
+    value: 'disabled',
+    description: '''Enable/disable the deprecated processor and memory summary
+                    status. The default condition is disabling the processor
+                    and memory summary status. This option will be removed in
+                    1Q 2024.'''
+)
+
+option(
     'redfish-provisioning-feature',
     type: 'feature',
     value: 'disabled',
@@ -333,3 +343,4 @@
     description: '''Enables HealthPopulate and generate the Status property for
                     the resource'''
 )
+
diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp
index 8d978f1..573bf88 100644
--- a/redfish-core/lib/systems.hpp
+++ b/redfish-core/lib/systems.hpp
@@ -203,21 +203,25 @@
         "xyz.openbmc_project.Inventory.Item", "Present",
         std::move(getCpuPresenceState));
 
-    auto getCpuFunctionalState = [aResp](const boost::system::error_code& ec3,
-                                         const bool cpuFunctionalCheck) {
-        if (ec3)
-        {
-            BMCWEB_LOG_ERROR << "DBUS response error " << ec3;
-            return;
-        }
-        modifyCpuFunctionalState(aResp, cpuFunctionalCheck);
-    };
+    if constexpr (bmcwebEnableProcMemStatus)
+    {
+        auto getCpuFunctionalState =
+            [aResp](const boost::system::error_code& ec3,
+                    const bool cpuFunctionalCheck) {
+            if (ec3)
+            {
+                BMCWEB_LOG_ERROR << "DBUS response error " << ec3;
+                return;
+            }
+            modifyCpuFunctionalState(aResp, cpuFunctionalCheck);
+        };
 
-    // Get the Functional State
-    sdbusplus::asio::getProperty<bool>(
-        *crow::connections::systemBus, service, path,
-        "xyz.openbmc_project.State.Decorator.OperationalStatus", "Functional",
-        std::move(getCpuFunctionalState));
+        // Get the Functional State
+        sdbusplus::asio::getProperty<bool>(
+            *crow::connections::systemBus, service, path,
+            "xyz.openbmc_project.State.Decorator.OperationalStatus",
+            "Functional", std::move(getCpuFunctionalState));
+    }
 
     sdbusplus::asio::getAllProperties(
         *crow::connections::systemBus, service, path,
@@ -247,26 +251,30 @@
  */
 inline void
     processMemoryProperties(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
-                            const std::string& service, const std::string& path,
+                            [[maybe_unused]] const std::string& service,
+                            [[maybe_unused]] const std::string& path,
                             const dbus::utility::DBusPropertiesMap& properties)
 {
     BMCWEB_LOG_DEBUG << "Got " << properties.size() << " Dimm properties.";
 
     if (properties.empty())
     {
-        sdbusplus::asio::getProperty<bool>(
-            *crow::connections::systemBus, service, path,
-            "xyz.openbmc_project.State."
-            "Decorator.OperationalStatus",
-            "Functional",
-            [aResp](const boost::system::error_code& ec3, bool dimmState) {
-            if (ec3)
-            {
-                BMCWEB_LOG_ERROR << "DBUS response error " << ec3;
-                return;
-            }
-            updateDimmProperties(aResp, dimmState);
-            });
+        if constexpr (bmcwebEnableProcMemStatus)
+        {
+            sdbusplus::asio::getProperty<bool>(
+                *crow::connections::systemBus, service, path,
+                "xyz.openbmc_project.State."
+                "Decorator.OperationalStatus",
+                "Functional",
+                [aResp](const boost::system::error_code& ec3, bool dimmState) {
+                if (ec3)
+                {
+                    BMCWEB_LOG_ERROR << "DBUS response error " << ec3;
+                    return;
+                }
+                updateDimmProperties(aResp, dimmState);
+                });
+        }
         return;
     }
 
@@ -297,7 +305,11 @@
             aResp->res.jsonValue["MemorySummary"]["TotalSystemMemoryGiB"] =
                 *memorySizeInKB / static_cast<size_t>(1024 * 1024) + *preValue;
         }
-        aResp->res.jsonValue["MemorySummary"]["Status"]["State"] = "Enabled";
+        if constexpr (bmcwebEnableProcMemStatus)
+        {
+            aResp->res.jsonValue["MemorySummary"]["Status"]["State"] =
+                "Enabled";
+        }
     }
 }
 
@@ -376,16 +388,22 @@
                 continue;
             }
 
-            auto memoryHealth = std::make_shared<HealthPopulate>(
-                aResp, "/MemorySummary/Status"_json_pointer);
+            std::shared_ptr<HealthPopulate> memoryHealth = nullptr;
+            std::shared_ptr<HealthPopulate> cpuHealth = nullptr;
 
-            auto cpuHealth = std::make_shared<HealthPopulate>(
-                aResp, "/ProcessorSummary/Status"_json_pointer);
-
-            if constexpr (bmcwebEnableHealthPopulate)
+            if constexpr (bmcwebEnableProcMemStatus)
             {
+                memoryHealth = std::make_shared<HealthPopulate>(
+                    aResp, "/MemorySummary/Status"_json_pointer);
                 systemHealth->children.emplace_back(memoryHealth);
-                systemHealth->children.emplace_back(cpuHealth);
+
+                if constexpr (bmcwebEnableHealthPopulate)
+                {
+                    cpuHealth = std::make_shared<HealthPopulate>(
+                        aResp, "/ProcessorSummary/Status"_json_pointer);
+
+                    systemHealth->children.emplace_back(cpuHealth);
+                }
             }
 
             // This is not system, so check if it's cpu, dimm, UUID or
@@ -402,7 +420,10 @@
 
                         getMemorySummary(aResp, connection.first, path);
 
-                        memoryHealth->inventory.emplace_back(path);
+                        if constexpr (bmcwebEnableProcMemStatus)
+                        {
+                            memoryHealth->inventory.emplace_back(path);
+                        }
                     }
                     else if (interfaceName ==
                              "xyz.openbmc_project.Inventory.Item.Cpu")
@@ -412,7 +433,10 @@
 
                         getProcessorSummary(aResp, connection.first, path);
 
-                        cpuHealth->inventory.emplace_back(path);
+                        if constexpr (bmcwebEnableProcMemStatus)
+                        {
+                            cpuHealth->inventory.emplace_back(path);
+                        }
                     }
                     else if (interfaceName == "xyz.openbmc_project.Common.UUID")
                     {
@@ -3054,10 +3078,13 @@
         asyncResp->res.jsonValue["SystemType"] = "Physical";
         asyncResp->res.jsonValue["Description"] = "Computer System";
         asyncResp->res.jsonValue["ProcessorSummary"]["Count"] = 0;
-        asyncResp->res.jsonValue["ProcessorSummary"]["Status"]["State"] =
-            "Disabled";
-        asyncResp->res.jsonValue["MemorySummary"]["Status"]["State"] =
-            "Disabled";
+        if constexpr (bmcwebEnableProcMemStatus)
+        {
+            asyncResp->res.jsonValue["ProcessorSummary"]["Status"]["State"] =
+                "Disabled";
+            asyncResp->res.jsonValue["MemorySummary"]["Status"]["State"] =
+                "Disabled";
+        }
         asyncResp->res.jsonValue["MemorySummary"]["TotalSystemMemoryGiB"] =
             uint64_t(0);
         asyncResp->res.jsonValue["@odata.id"] = "/redfish/v1/Systems/system";