Bug #10957

Warning error on "Monitor/Statistics" webpage

Added by Claudiu Nagy over 5 years ago. Updated over 2 years ago.

Target version:
Bugzilla link:
Fixed in Releases:
Found in Releases:


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:

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 ".

Associated revisions

Revision fc2fc7ac (diff)
Added by Tomer Brisker almost 4 years ago

Fixes #10957 - Correctly handle to_gb when no unit given

Revision 04ee151c (diff)
Added by Tomer Brisker almost 4 years ago

Fixes #10957 - Correctly handle to_gb when no unit given

(cherry picked from commit fc2fc7ac5ccaca9578630d2d724d3cb698358b1f)


#1 Updated by Dominic Cleal over 5 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.

#2 Updated by Claudiu Nagy over 5 years ago

I agree that the value should be ignored. At least in my case the value is not correct and is just invalidating my statistics for that fact. Another option is to discard the value when it is inserted in the database.

#3 Updated by Inixi Noisse over 5 years ago

in the file lib/core_extensions.rb you should change line 129 to:
value, _, unit=self.match(/(\d+(\.\d+)?) ?(([KMGT]|GiB|GB|B?|B))$/i)[0..3]

and also add appropriate case switch

#4 Updated by The Foreman Bot almost 4 years ago

  • Status changed from New to Ready For Testing
  • Assignee set to Tomer Brisker
  • Pull request added

#5 Updated by Anonymous almost 4 years ago

  • Status changed from Ready For Testing to Closed
  • % Done changed from 0 to 100

#6 Updated by Dominic Cleal almost 4 years ago

  • Legacy Backlogs Release (now unused) set to 210

Also available in: Atom PDF