From a420cb7b1eb362e7a96b3306db838cefbfbc1986 Mon Sep 17 00:00:00 2001 From: David Montag Date: Fri, 18 Nov 2011 11:13:31 -0800 Subject: [PATCH] Some nice formatting --- status.rb | 51 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/status.rb b/status.rb index 4503647..1e920f8 100755 --- a/status.rb +++ b/status.rb @@ -6,9 +6,10 @@ STDOUT.sync = true class Server - attr_reader :id, :host, :port + attr_reader :id, :host, :port, :timeout def initialize params + @timeout = 5 @id = params[:id] || nil @host = params[:host] @port = params[:port] || 7474 @@ -18,12 +19,12 @@ def server "#{host}:#{port}" end - def mode + def ha_mode master? ? "master" : "slave" end def master? - `curl -s -f http://#{server}/healthcheck/master` + `curl -m #{timeout} -s -f http://#{server}/healthcheck/master` $? == 0 end @@ -31,32 +32,48 @@ def online? `nc -z #{host} #{port}` $? == 0 end + + def zk_mode + if `echo stat | nc #{host} 2181 | grep Mode:` =~ /^Mode:\s*(.*)$/ + $1 + else + "unknown" + end + end def latest_tx_id return nil if id.nil? - result = `curl -f -H "Content-Type:application/json" -d '["org.neo4j:name=High Availability,instance=*"]' http://#{server}/db/manage/server/jmx/query 2>/dev/null`.gsub(":","=>") - return nil if $? != 0 + result = `curl -m #{timeout} -f -H "Content-Type:application/json" -d '["org.neo4j:name=High Availability,instance=*"]' http://#{server}/db/manage/server/jmx/query 2>/dev/null`.gsub(":","=>") + return nil if $? != 0 evaled_result = eval(result) - ha_info = evaled_result[0] - return nil if ha_info.nil? - instances = ha_info["attributes"].find{|i|i["name"] == "InstancesInCluster"} - return nil if instances.nil? - instance = instances["value"].find{|instance_info|instance_info["value"].find{|item| item["name"] == "machineId" && item["value"].to_i == id}} - return nil if instance.nil? - latest_tx_id_item = instance["value"].find{|item| item["description"] == "lastCommittedTransactionId"} - return nil if latest_tx_id_item.nil? - latest_tx_id_item["value"].to_i + begin + ha_info = evaled_result[0] + instances = ha_info["attributes"].find{|i|i["name"] == "InstancesInCluster"} + instance = instances["value"].find{|instance_info|instance_info["value"].find{|item| item["name"] == "machineId" && item["value"].to_i == id}} + latest_tx_id_item = instance["value"].find{|item| item["description"] == "lastCommittedTransactionId"} + latest_tx_id_item["value"].to_i + rescue NoMethodError + nil + end end end require "servers.rb" +longest = 0 +servers.each do |server| + len = server.host.size() + longest = len if (len > longest) +end + +puts "#{Time.now} -- ID @ %#{longest}s\tStatus\tHA mode\tTx ID\tZK mode" % ["Hostname"] servers.each do |server| - print "#{Time.now} -- #{server.id} @ #{server.host}\t" + print "#{Time.now} -- %3d @ %#{longest}s\t" % [server.id, server.host] if server.online? print "online" - print "\t#{server.mode}" - print "\t#{server.latest_tx_id}" + print "\t#{server.ha_mode}" + print "\t#{server.latest_tx_id}" + print "\t#{server.zk_mode}" else print "offline" end