Warning error on "Monitor/Statistics" webpage
Due to some limitations/bugs in linux containers sometimes the value returned by facter for memoryfree is not correct. It does not contain the unit of measure (MB, GB, etc). I have such a case and in the database where there is a value for memoryfree of "8.00 " . Because of that value the "Monitor/Statistics" can't be accessed with the below warning:
RuntimeError Unknown string: "8.00 "! lib/core_extensions.rb:139:in `rescue in to_gb' lib/core_extensions.rb:128:in `to_gb' app/models/fact_value.rb:101:in `block in to_gb' app/models/fact_value.rb:100:in `to_gb' app/models/fact_value.rb:58:in `mem_average' app/controllers/statistics_controller.rb:9:in `index' app/controllers/concerns/application_shared.rb:13:in `set_timezone' app/models/concerns/foreman/thread_session.rb:32:in `clear_thread' lib/middleware/catch_json_parse_errors.rb:9:in `call' lib/core_extensions.rb:129:in `to_gb'
Looking at the "to_gb" ruby code in "lib/core_extensions.rb" i was under the impression that such a case should work:
case unit.to_sym when nil, :B, :byte then (value.to_f / Foreman::SIZE[:giga])
But of course it doesn't.
Should a situation where memoryfree equals "8.00 " (no unit in there) give an error or should it work?
P.S. I do have a patch for "to_gb" that will work if the value is similar to "8.00 ".
Updated by Dominic Cleal over 8 years ago
- Category set to Statistics
I'm not sure which is the best course of action. Ideally the fact would be fixed in facter/ohai etc, or we could put a workaround into a fact parser to add the expected unit if it's a common, unfixed bug.
Otherwise I'd probably suggest changing to_gb in app/models/fact_value.rb instead to ignore the fact rather than changing the to_gb method to assume a unit.
The nil in the case statement doesn't help as it's failing to match the regexp earlier on, since the unit there is expected and not optional.