Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Example in check-http-json does not work. #115

Open
robertely opened this issue Nov 15, 2018 · 1 comment
Open

Example in check-http-json does not work. #115

robertely opened this issue Nov 15, 2018 · 1 comment

Comments

@robertely
Copy link

Trying this example:

#   Check that will verify http status, JSON validity, and that page.totalElements value is
#   greater than 10
#      ./check-http-json.rb -u http://my.site.com/metric.json --key page.totalElements --value-greater-than 10

I don't see where page.totalElements is setup. It does not exist in leaf so far as i see.

Command run:

/opt/sensu/embedded/bin/ruby /opt/sensu/embedded/bin/check-http-json.rb -u https://jsonplaceholder.typicode.com/todos/ --key page.totalElements --value-less-than 10

Returns:

CheckJson CRITICAL: key check failed: undefined method `to_f' for #<Array:0x000000013a9f70>
Did you mean?  to_s
               to_a
               to_h

Versions:

/opt/sensu/embedded/bin/ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
/opt/sensu/embedded/bin/gem list |grep 'sensu-plugins-http'
sensu-plugins-http (3.0.1)
/opt/sensu/embedded/bin/sensu-client --version
1.4.2
@robertely
Copy link
Author

I'm realizing now that I miss-understood the example. I expected it to count elements on the page when really it was checking for a key page.totalElements

So I misunderstood that but adding the behavior I expected would maybe be not so bad.

We could perhaps detect the type on the key and make some reasonable decisions:

      if leaf.is_a?(Array)
        if config[:value]
          # For if you inexplicably wanted to pass in the string version of a ruby array on the command line
          raise "unexpected value for key: '#{leaf}.to_s' != '#{config[:value]}'" unless leaf.to_s == config[:value].to_s
          message += "equals '#{config[:value]}'"
        end
        if config[:valueGt]
          raise "unexpected count for key: '#{leaf.count}' not > '#{config[:valueGt]}'" unless leaf.count > config[:valueGt].to_f
          message += "greater than '#{config[:valueGt]}'"
        end
        if config[:valueLt]
          raise "unexpected count for key: '#{leaf.count}' not < '#{config[:valueLt]}'" unless leaf.count < config[:valueLt].to_f
          message += "less than '#{config[:valueLt]}'"
        end
      else
        if config[:value]
          raise "unexpected value for key: '#{leaf}' != '#{config[:value]}'" unless leaf.to_s == config[:value].to_s
          message += "equals '#{config[:value]}'"
        end
        if config[:valueGt]
          raise "unexpected value for key: '#{leaf}' not > '#{config[:valueGt]}'" unless leaf.to_f > config[:valueGt].to_f
          message += "greater than '#{config[:valueGt]}'"
        end
        if config[:valueLt]
          raise "unexpected value for key: '#{leaf}' not < '#{config[:valueLt]}'" unless leaf.to_f < config[:valueLt].to_f
          message += "less than '#{config[:valueLt]}'"
        end
      end

Additionally we could add support for the top level element by implementing a keyword.

  def deep_value(data, desired_key, parent = '')
    if desired_key == '.'
      return data
    end
    case data
    when Array
      data.each_with_index do |value, index|
...

Then something like this would work:
check-http-json-sg.rb -u https://jsonplaceholder.typicode.com/todos/ --key . --value-greater-than 5

If your interested I could clean that up and make a pr

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant