Introduce ignoreFailIfHostOff config setting

Some sensors only provide valid readings when the host is powered on.
This change introduces the `ignoreFailIfHostOff` configuration option to
differentiate between unavailable readings based on host state.

- Host OFF: Sensor unavailable is acceptable and will not be treated as
a failure.
- Host ON (running): Sensor unavailable is unexpected, and the failsafe
mode will be triggered.

This ensures that sensors dependent on host power state are handled
correctly without causing unnecessary failsafe triggers during host-off.

Tested on Catalina: failsafe mode is not triggered when the host is off.
- config.json example: add `ignoreFailIfHostOff` for sensors only
available when the host is on.
```
{
    "sensors": [
        ......
        {
            "name": "HDDBOARD_SSD0_TEMP_C",
            "type": "temp",
            "readPath": "/xyz/openbmc_project/sensors/temperature/HDDBOARD_SSD0_TEMP_C",
            "timeout": 0,
            "ignoreFailIfHostOff": true,
            "ignoreDbusMinMax": true
        },
        {
            "name": "HDDBOARD_SSD2_TEMP_C",
            "type": "temp",
            "readPath": "/xyz/openbmc_project/sensors/temperature/HDDBOARD_SSD2_TEMP_C",
            "timeout": 0,
            "ignoreFailIfHostOff": true,
            "ignoreDbusMinMax": true
        },
        {
            "name": "PDB_P48V_HSC1_TEMP_C",
            "type": "temp",
            "readPath": "/xyz/openbmc_project/sensors/temperature/PDB_P48V_HSC1_TEMP_C",
            "timeout": 0,
            "ignoreDbusMinMax": true
        },
        {
            "name": "PDB_VR_P12V_N1_TEMP_C",
            "type": "temp",
            "readPath": "/xyz/openbmc_project/sensors/temperature/PDB_VR_P12V_N1_TEMP_C",
            "timeout": 0,
            "ignoreFailIfHostOff": true,
            "ignoreDbusMinMax": true
        },
        {
            "name": "PDB_VR_P12V_N2_TEMP_C",
            "type": "temp",
            "readPath": "/xyz/openbmc_project/sensors/temperature/PDB_VR_P12V_N2_TEMP_C",
            "timeout": 0,
            "ignoreFailIfHostOff": true,
            "ignoreDbusMinMax": true
        },
        {
            "name": "IOB0_NIC0_OSFP_TEMP_C",
            "type": "temp",
            "readPath": "/xyz/openbmc_project/sensors/temperature/IOB0_NIC0_OSFP_TEMP_C",
            "timeout": 0,
            "ignoreFailIfHostOff": true,
            "ignoreDbusMinMax": true
        },
        {
            "name": "IOB0_NIC1_OSFP_TEMP_C",
            "type": "temp",
            "readPath": "/xyz/openbmc_project/sensors/temperature/IOB0_NIC1_OSFP_TEMP_C",
            "timeout": 0,
            "ignoreFailIfHostOff": true,
            "ignoreDbusMinMax": true
        },
        {
            "name": "IOB1_NIC0_OSFP_TEMP_C",
            "type": "temp",
            "readPath": "/xyz/openbmc_project/sensors/temperature/IOB1_NIC0_OSFP_TEMP_C",
            "timeout": 0,
            "ignoreFailIfHostOff": true,
            "ignoreDbusMinMax": true
        },
        {
            "name": "IOB1_NIC1_OSFP_TEMP_C",
            "type": "temp",
            "readPath": "/xyz/openbmc_project/sensors/temperature/IOB1_NIC1_OSFP_TEMP_C",
            "timeout": 0,
            "ignoreFailIfHostOff": true,
            "ignoreDbusMinMax": true
        },
        ......
    ],

    "zones": [
        ......
    ]
}
```

Change-Id: I5355c453ca3c6d918c197dcd2cc9119e471d615d
Signed-off-by: Potin Lai <potin.lai@quantatw.com>
diff --git a/sensors/buildjson.cpp b/sensors/buildjson.cpp
index c5ef849..ed6e35e 100644
--- a/sensors/buildjson.cpp
+++ b/sensors/buildjson.cpp
@@ -51,6 +51,7 @@
      */
     s.ignoreDbusMinMax = false;
     s.unavailableAsFailed = true;
+    s.ignoreFailIfHostOff = false;
     s.min = 0;
     s.max = 0;
 
@@ -66,6 +67,12 @@
         j.at("unavailableAsFailed").get_to(s.unavailableAsFailed);
     }
 
+    auto findIgnoreIfHostOff = j.find("ignoreFailIfHostOff");
+    if (findIgnoreIfHostOff != j.end())
+    {
+        j.at("ignoreFailIfHostOff").get_to(s.ignoreFailIfHostOff);
+    }
+
     /* The min field is optional in a configuration. */
     auto min = j.find("min");
     if (min != j.end())