Project

General

Profile

Actions

Bug #140

closed

dashboard fails when using postgresql backend

Added by Bob B. over 14 years ago. Updated over 11 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Database
Target version:
Difficulty:
Triaged:
Fixed in Releases:
Found in Releases:

Description

The dashboard returns a 500 with the following error:

Processing DashboardController#index (for x.x.x.x at 2009-12-18 15:57:52) [GET]
Parameters: {"action"=>"index", "controller"=>"dashboard"}

ActiveRecord::StatementInvalid (PGError: ERROR: argument of AND must be type boolean, not type integer
LINE 2: (puppet_status >> 12 & 63) or
^
: SELECT count(*) AS count_all FROM "hosts" WHERE (((puppet_status > 0) and
(puppet_status >> 12 & 63) or
(puppet_status >> 18 & 63) or
(puppet_status >> 24 & 63)) AND (last_report > '2009-12-18 15:22:52.485923')) ):
(DELEGATION):2:in `__send__'
(DELEGATION):2:in `with_scope'
(DELEGATION):2:in `__send__'
(DELEGATION):2:in `with_scope'
(DELEGATION):2:in `__send__'
(DELEGATION):2:in `with_scope'
app/controllers/dashboard_controller.rb:8:in `index'

Rendering /var/rails/foreman/public/500.html (500 Internal Server Error)

Additionally, this also happens if the above error is eliminated:

Processing DashboardController#index (for x.x.x.x at 2009-12-18 17:17:23) [GET]
Parameters: {"action"=>"index", "controller"=>"dashboard"}

ActiveRecord::StatementInvalid (PGError: ERROR: operator does not exist: timestamp without time zone <> integer
LINE 1: ...unt() AS count_all FROM "reports" WHERE (reported_at != 0)
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT count(
) AS count_all FROM "reports" WHERE (reported_at != 0) ):
(DELEGATION):2:in `__send__'
(DELEGATION):2:in `with_scope'
app/controllers/dashboard_controller.rb:19:in `index'

Rendering /var/rails/foreman/public/500.html (500 Internal Server Error)

I'm not entirely sure how the puppet_status manipulations happen, but I believe the error is caused by how other dbs evaluate truth as 0 and non-0. I think this can be avoided by something simliar to:

(puppet_status >> #{Report::BIT_NUM*Report::METRIC.index("failed")} & #{Report::MAX}) or

becomes:

((puppet_status >> #{Report::BIT_NUM*Report::METRIC.index("applied")} & #{Report::MAX}) !=0) or

(in models/host.rb)

For the additional date error (on reported_at), I think it's just trying to find if a report exists? (I'm not all that familiar with the code, or ruby) Maybe checking for NULL instead of 0?


Files

postgresql-fix-host.rb.patch postgresql-fix-host.rb.patch 1.79 KB Bob B., 12/21/2009 04:40 PM
Actions

Also available in: Atom PDF