I'm working on a ruby script to read Nagios's status.dat and output it's
data.

The data format looks like this:

service {
        host_name=www.bob.com
        service_description=bob-website
        modified_attributes=0
        check_command=check-bob-website
        event_handler=
        has_been_checked=1
        should_be_scheduled=1
        check_execution_time=0.155
        check_latency=0.250
        check_type=0
        current_state=0
        last_hard_state=0
        current_attempt=1
        max_attempts=3
        state_type=1
        last_state_change=1155243779
        last_hard_state_change=1155243779
        last_time_ok=1155507506
        last_time_warning=1154915720
        last_time_unknown=0
        last_time_critical=1155243478
        plugin_output=HTTP OK HTTP/1.1 200 OK - 0.117 second response
time
        performance_data=time=0.116677s;;;0.000000 size=3998B;;;0
        last_check=1155507506
        next_check=1155507806
        current_notification_number=0
        last_notification=0
        next_notification=0
        no_more_notifications=0
        notifications_enabled=1
        active_checks_enabled=1
        passive_checks_enabled=0
        event_handler_enabled=0
        problem_has_been_acknowledged=0
        acknowledgement_type=0
        flap_detection_enabled=0
        failure_prediction_enabled=1
        process_performance_data=1
        obsess_over_service=1
        last_update=1155507620
        is_flapping=0
        percent_state_change=0.00
        scheduled_downtime_depth=0
        }


What I've written works, but it only works for one block. I'm not quite
sure how to make it work for the whole block?

Any advice would be greatly appreciated.

Here's the code I've written:

Class server

def read_nagiosstatus(filename)
  nagios_status = {}
  for line in IO.readlines(filename):
    line.strip!                         # Remove all extraneous
whitespace
    line.sub!(/#.*$/, "")               # Remove comments
    next unless line.length > 0         # check for end of file
    var, value = line.split(/\s*=\s*/, 2)
    nagios_status[var.intern] = value
  end
  return nagios_status
end

nagiosstatus = read_nagiosstatus("status.dat")
puts "Host name is #{nagiosstatus[:host_name]}"
puts "Service description is #{nagiosstatus[:service_description]}"

-- 
Posted via http://www.ruby-forum.com/.