Add getPollRate helper function

This open-coded pattern had been duplicated in a few places; deduplicate
and increase readability by adding a dedicated function.  While we're at
it, also ensure the configured value isn't inf or NaN.

Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
Change-Id: I5f8fe788eb342ca3bf8b52bd6a2e7cc3364f45e1
diff --git a/src/ADCSensorMain.cpp b/src/ADCSensorMain.cpp
index 05d586f..d174f64 100644
--- a/src/ADCSensorMain.cpp
+++ b/src/ADCSensorMain.cpp
@@ -238,18 +238,8 @@
                 }
             }
 
-            auto findPollRate = baseConfiguration->second.find("PollRate");
-            float pollRate = pollRateDefault;
-            if (findPollRate != baseConfiguration->second.end())
-            {
-                pollRate =
-                    std::visit(VariantToFloatVisitor(), findPollRate->second);
-                if (pollRate <= 0.0F)
-                {
-                    pollRate = pollRateDefault; // polling time too short
-                }
-            }
-
+            float pollRate =
+                getPollRate(baseConfiguration->second, pollRateDefault);
             PowerState readState = getPowerState(baseConfiguration->second);
 
             auto& sensor = sensors[sensorName];
diff --git a/src/HwmonTempMain.cpp b/src/HwmonTempMain.cpp
index 9ebdfcd..f203127 100644
--- a/src/HwmonTempMain.cpp
+++ b/src/HwmonTempMain.cpp
@@ -385,18 +385,7 @@
                           << " index " << index << "\n";
             }
 
-            auto findPollRate = baseConfigMap.find("PollRate");
-            float pollRate = pollRateDefault;
-            if (findPollRate != baseConfigMap.end())
-            {
-                pollRate =
-                    std::visit(VariantToFloatVisitor(), findPollRate->second);
-                if (pollRate <= 0.0F)
-                {
-                    pollRate = pollRateDefault; // polling time too short
-                }
-            }
-
+            float pollRate = getPollRate(baseConfigMap, pollRateDefault);
             PowerState readState = getPowerState(baseConfigMap);
 
             auto permitSet = getPermitSet(baseConfigMap);
diff --git a/src/IpmbSensor.cpp b/src/IpmbSensor.cpp
index 96ca768..f594ed5 100644
--- a/src/IpmbSensor.cpp
+++ b/src/IpmbSensor.cpp
@@ -523,17 +523,7 @@
                                                 findSmType->second);
                 }
 
-                float pollRate = pollRateDefault;
-                auto findPollRate = cfg.find("PollRate");
-                if (findPollRate != cfg.end())
-                {
-                    pollRate = std::visit(VariantToFloatVisitor(),
-                                          findPollRate->second);
-                    if (pollRate <= 0.0F)
-                    {
-                        pollRate = pollRateDefault;
-                    }
-                }
+                float pollRate = getPollRate(cfg, pollRateDefault);
 
                 /* Default sensor type is "temperature" */
                 std::string sensorTypeName = "temperature";
diff --git a/src/PSUSensorMain.cpp b/src/PSUSensorMain.cpp
index 918b9c6..ab4f6f3 100644
--- a/src/PSUSensorMain.cpp
+++ b/src/PSUSensorMain.cpp
@@ -489,19 +489,7 @@
             }
         }
 
-        /* The poll rate for the sensors */
-        double pollRate = 0.0;
-        auto pollRateObj = baseConfig->find("PollRate");
-
-        if (pollRateObj != baseConfig->end())
-        {
-            pollRate =
-                std::visit(VariantToDoubleVisitor(), pollRateObj->second);
-            if (pollRate <= 0.0)
-            {
-                pollRate = PSUSensor::defaultSensorPoll;
-            }
-        }
+        float pollRate = getPollRate(*baseConfig, PSUSensor::defaultSensorPoll);
 
         /* Find array of labels to be exposed if it is defined in config */
         std::vector<std::string> findLabels;