sensu / sensu-extensions-deregistration

Experimental Sensu handler extension which deletes corresponding clients via the API
MIT License
1 stars 4 forks source link

Type conversion error #4

Open jaxxstorm opened 6 years ago

jaxxstorm commented 6 years ago

Trying to use this and getting the following error:

{"timestamp":"2018-08-14T00:29:19.775245+0000","level":"debug","message":"handling event","event_data":"{\"client\":{\"name\":\"sensu-client-c6nxx\",\"address\":\"10.36.8.15\",\"deregister\":true,\"deregistration\":{\"handler\":\"deregistration\"},\"subscriptions\":[\"client:sensu-client-c6nxx\"],\"version\":\"1.2.0\",\"timestamp\":1534206543},\"check\":{\"handler\":\"deregistration\",\"status\":1,\"name\":\"deregistration\",\"output\":\"client initiated deregistration\",\"issued\":1534206559,\"executed\":1534206559,\"type\":\"standard\",\"history\":[\"1\"],\"total_state_change\":0},\"occurrences\":1,\"occurrences_watermark\":1,\"action\":\"create\",\"timestamp\":1534206559,\"id\":\"40aa024a-7843-4d66-b08b-b4ee380b3aeb\",\"last_ok\":1534206559,\"last_state_change\":1534206559,\"silenced\":false,\"silenced_by\":[]}","event":{"id":"40aa024a-7843-4d66-b08b-b4ee380b3aeb"},"handler":{"type":"extension","name":"deregistration"}}
{"timestamp":"2018-08-14T00:29:19.775537+0000","level":"info","message":"handler extension output","extension":{"type":"extension","name":"deregistration"},"event":{"id":"40aa024a-7843-4d66-b08b-b4ee380b3aeb"},"output":"TypeError: no implicit conversion of Symbol into Integer\n  /etc/sensu/extensions/deregistration.rb:54:in `[]'\n  /etc/sensu/extensions/deregistration.rb:55:in `block in run'\n  /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/eventmachine-1.2.5/lib/eventmachine.rb:1076:in `block in spawn_threadpool'","status":2}

Any clues?

jaxxstorm commented 6 years ago

Okay, I figured this out.

The issue seems to be here: https://github.com/sensu-plugins/sensu-extensions-deregistration/blob/master/lib/sensu/extensions/deregistration.rb#L54

This isn't actually a hash containing parsed JSON, it's a string containing literal JSON. I added:

event_data = MultiJson.load(event, symbolize_keys: true

And then referenced event_data everywhere instead, and it worked. I can send a PR request if needed.

It's worth noting I'm loading this extensions as a legacy extension.