Skip to content

Commit

Permalink
Beginnings of a Lighttpd FastCGI backend stats system
Browse files Browse the repository at this point in the history
  • Loading branch information
ripienaar committed Aug 27, 2010
1 parent ab7990c commit 642cfe2
Show file tree
Hide file tree
Showing 3 changed files with 346 additions and 0 deletions.
52 changes: 52 additions & 0 deletions cacti-lighttpd-fastcgi-statistics/lighttpd_fastcgi_statistics.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<lighttpd>
<name>Get lighttpd FastCGI stats</name>
<script_path>/usr/local/bin/query_lighttpd_statistics.rb</script_path>
<arg_prepend>|host_hostname|</arg_prepend>
<arg_index>index</arg_index>
<arg_query>query</arg_query>
<arg_get>get</arg_get>
<output_delimeter>:</output_delimeter>

<fields>
<cgi>
<name>cgi</name>
<direction>input</direction>
<query_name>cgi</query_name>
</cgi>
<backendName>
<name>backendname</name>
<direction>input</direction>
<query_name>cgi</query_name>
</backendName>
<died>
<name>died</name>
<direction>output</direction>
<query_name>died</query_name>
</died>
<disabled>
<name>disabled</name>
<direction>output</direction>
<query_name>disabled</query_name>
</disabled>
<load>
<name>load</name>
<direction>output</direction>
<query_name>load</query_name>
</load>
<overloaded>
<name>overloaded</name>
<direction>output</direction>
<query_name>overloaded</query_name>
</overloaded>
<processes>
<name>processes</name>
<direction>output</direction>
<query_name>processes</query_name>
</processes>
<connected>
<name>connected</name>
<direction>output</direction>
<query_name>connected</query_name>
</connected>
</fields>
</lighttpd>
125 changes: 125 additions & 0 deletions cacti-lighttpd-fastcgi-statistics/query_lighttpd_statistics.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
#!/usr/bin/ruby

# Where on the lighttpd server to find the server statistics
COUNTER_PATH="/server-counters"

require 'net/http'
require 'optparse'
require 'pp'

# Gets the stat file and prints out the unique CGIs found in it
def index(host)
backends = {}

get(host) do |stat|
backends[stat[:backend]] = 1
end

puts backends.keys.sort.join("\n")
end

# Returns a specific stat for all CGI or just one if backend is given
def query(host, field, backend=nil)
if backend.nil?
parse(host).each_pair do |backend, stats|
puts "#{backend}:#{stats[field]}"
end
else
puts parse(host)[backend][field]
end
end

# Retrieves the stat and builds a hash of hashes representing it
def parse(host)
backends = {}

new_backend = {:cgi => "", :connected => 0, :died => 0, :disabled => 0,
:load => 0, :overloaded => 0, :processes => 0}

get(host) do |stat|
backend = stat[:backend]

unless backends.include?(backend)
backends[backend] = new_backend.clone
backends[backend][:cgi] = backend
end

backends[backend][stat[:stat]] = backends[backend].fetch(stat[:stat], 0) + stat[:value]
end

backends
end

# Parses a backend line returning a hash of its bits
def parse_line(line)
ret = {}

if line =~ /^fastcgi\.backend\.(.+)\.(\d+)\.(connected|died|disabled|load|overloaded): (\d+)$/
ret[:backend] = $1
ret[:instance_number] = $2.to_i
ret[:stat] = $3.to_sym
ret[:value] = $4.to_i
else
raise "Unparsable line: #{line}"
end

ret
end

# Retrieves a url from a remote host
def get(host)
url = "http://#{host}#{COUNTER_PATH}"
uri = URI.parse(url)
http = Net::HTTP.new(uri.host, uri.port)

response = http.get(uri.path)

unless response.code == "200"
puts "Failed to retrieve #{url}: #{response.code}"
exit 1
end

unless block_given?
response.body.split(/\n/)
else
response.body.split(/\n/).each do |line|
begin
yield(parse_line(line))
rescue Exception => e
end
end
end
end

host = nil
command = nil
field = nil
backend = nil

if ARGV.size > 1
host = ARGV[0]
command = ARGV[1].to_sym

field = ARGV[2].to_sym if ARGV.size > 2
backend = ARGV[3] if ARGV.size > 3
end

unless host && command
puts "Please specify a host and command"
exit 1
end

case command
when :index
index(host)

when :query
query(host, field)

when :get
query(host, field, backend)

else
puts "Unknown command: #{command}"
exit 1
end
169 changes: 169 additions & 0 deletions cacti-lighttpd-fastcgi-statistics/sample.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
fastcgi.active-requests: 0
fastcgi.backend.fastcgi1.0.connected: 0
fastcgi.backend.fastcgi1.0.died: 0
fastcgi.backend.fastcgi1.0.disabled: 0
fastcgi.backend.fastcgi1.0.load: 0
fastcgi.backend.fastcgi1.0.overloaded: 0
fastcgi.backend.fastcgi1.1.connected: 0
fastcgi.backend.fastcgi1.1.died: 0
fastcgi.backend.fastcgi1.1.disabled: 0
fastcgi.backend.fastcgi1.1.load: 0
fastcgi.backend.fastcgi1.1.overloaded: 0
fastcgi.backend.fastcgi1.2.connected: 0
fastcgi.backend.fastcgi1.2.died: 0
fastcgi.backend.fastcgi1.2.disabled: 0
fastcgi.backend.fastcgi1.2.load: 0
fastcgi.backend.fastcgi1.2.overloaded: 0
fastcgi.backend.fastcgi1.3.connected: 0
fastcgi.backend.fastcgi1.3.died: 0
fastcgi.backend.fastcgi1.3.disabled: 0
fastcgi.backend.fastcgi1.3.load: 0
fastcgi.backend.fastcgi1.3.overloaded: 0
fastcgi.backend.fastcgi1.4.connected: 0
fastcgi.backend.fastcgi1.4.died: 0
fastcgi.backend.fastcgi1.4.disabled: 0
fastcgi.backend.fastcgi1.4.load: 0
fastcgi.backend.fastcgi1.4.overloaded: 0
fastcgi.backend.fastcgi1.5.connected: 0
fastcgi.backend.fastcgi1.5.died: 0
fastcgi.backend.fastcgi1.5.disabled: 0
fastcgi.backend.fastcgi1.5.load: 0
fastcgi.backend.fastcgi1.5.overloaded: 0
fastcgi.backend.fastcgi1.load: 0
fastcgi.backend.fastcgi2.0.connected: 0
fastcgi.backend.fastcgi2.0.died: 0
fastcgi.backend.fastcgi2.0.disabled: 0
fastcgi.backend.fastcgi2.0.load: 0
fastcgi.backend.fastcgi2.0.overloaded: 0
fastcgi.backend.fastcgi2.1.connected: 0
fastcgi.backend.fastcgi2.1.died: 0
fastcgi.backend.fastcgi2.1.disabled: 0
fastcgi.backend.fastcgi2.1.load: 0
fastcgi.backend.fastcgi2.1.overloaded: 0
fastcgi.backend.fastcgi2.2.connected: 0
fastcgi.backend.fastcgi2.2.died: 0
fastcgi.backend.fastcgi2.2.disabled: 0
fastcgi.backend.fastcgi2.2.load: 0
fastcgi.backend.fastcgi2.2.overloaded: 0
fastcgi.backend.fastcgi2.3.connected: 0
fastcgi.backend.fastcgi2.3.died: 0
fastcgi.backend.fastcgi2.3.disabled: 0
fastcgi.backend.fastcgi2.3.load: 0
fastcgi.backend.fastcgi2.3.overloaded: 0
fastcgi.backend.fastcgi2.load: 0
fastcgi.backend.fastcgi3.0.connected: 0
fastcgi.backend.fastcgi3.0.died: 0
fastcgi.backend.fastcgi3.0.disabled: 0
fastcgi.backend.fastcgi3.0.load: 0
fastcgi.backend.fastcgi3.0.overloaded: 0
fastcgi.backend.fastcgi3.load: 0
fastcgi.backend.fastcgi4.0.connected: 18
fastcgi.backend.fastcgi4.0.died: 0
fastcgi.backend.fastcgi4.0.disabled: 0
fastcgi.backend.fastcgi4.0.load: 0
fastcgi.backend.fastcgi4.0.overloaded: 0
fastcgi.backend.fastcgi4.1.connected: 17
fastcgi.backend.fastcgi4.1.died: 0
fastcgi.backend.fastcgi4.1.disabled: 0
fastcgi.backend.fastcgi4.1.load: 0
fastcgi.backend.fastcgi4.1.overloaded: 0
fastcgi.backend.fastcgi4.10.connected: 18
fastcgi.backend.fastcgi4.10.died: 0
fastcgi.backend.fastcgi4.10.disabled: 0
fastcgi.backend.fastcgi4.10.load: 0
fastcgi.backend.fastcgi4.10.overloaded: 0
fastcgi.backend.fastcgi4.11.connected: 18
fastcgi.backend.fastcgi4.11.died: 0
fastcgi.backend.fastcgi4.11.disabled: 0
fastcgi.backend.fastcgi4.11.load: 0
fastcgi.backend.fastcgi4.11.overloaded: 0
fastcgi.backend.fastcgi4.12.connected: 18
fastcgi.backend.fastcgi4.12.died: 0
fastcgi.backend.fastcgi4.12.disabled: 0
fastcgi.backend.fastcgi4.12.load: 0
fastcgi.backend.fastcgi4.12.overloaded: 0
fastcgi.backend.fastcgi4.13.connected: 18
fastcgi.backend.fastcgi4.13.died: 0
fastcgi.backend.fastcgi4.13.disabled: 0
fastcgi.backend.fastcgi4.13.load: 0
fastcgi.backend.fastcgi4.13.overloaded: 0
fastcgi.backend.fastcgi4.14.connected: 19
fastcgi.backend.fastcgi4.14.died: 0
fastcgi.backend.fastcgi4.14.disabled: 0
fastcgi.backend.fastcgi4.14.load: 0
fastcgi.backend.fastcgi4.14.overloaded: 0
fastcgi.backend.fastcgi4.2.connected: 17
fastcgi.backend.fastcgi4.2.died: 0
fastcgi.backend.fastcgi4.2.disabled: 0
fastcgi.backend.fastcgi4.2.load: 0
fastcgi.backend.fastcgi4.2.overloaded: 0
fastcgi.backend.fastcgi4.3.connected: 17
fastcgi.backend.fastcgi4.3.died: 0
fastcgi.backend.fastcgi4.3.disabled: 0
fastcgi.backend.fastcgi4.3.load: 0
fastcgi.backend.fastcgi4.3.overloaded: 0
fastcgi.backend.fastcgi4.4.connected: 17
fastcgi.backend.fastcgi4.4.died: 0
fastcgi.backend.fastcgi4.4.disabled: 0
fastcgi.backend.fastcgi4.4.load: 0
fastcgi.backend.fastcgi4.4.overloaded: 0
fastcgi.backend.fastcgi4.5.connected: 17
fastcgi.backend.fastcgi4.5.died: 0
fastcgi.backend.fastcgi4.5.disabled: 0
fastcgi.backend.fastcgi4.5.load: 0
fastcgi.backend.fastcgi4.5.overloaded: 0
fastcgi.backend.fastcgi4.6.connected: 18
fastcgi.backend.fastcgi4.6.died: 0
fastcgi.backend.fastcgi4.6.disabled: 0
fastcgi.backend.fastcgi4.6.load: 0
fastcgi.backend.fastcgi4.6.overloaded: 0
fastcgi.backend.fastcgi4.7.connected: 18
fastcgi.backend.fastcgi4.7.died: 0
fastcgi.backend.fastcgi4.7.disabled: 0
fastcgi.backend.fastcgi4.7.load: 0
fastcgi.backend.fastcgi4.7.overloaded: 0
fastcgi.backend.fastcgi4.8.connected: 18
fastcgi.backend.fastcgi4.8.died: 0
fastcgi.backend.fastcgi4.8.disabled: 0
fastcgi.backend.fastcgi4.8.load: 0
fastcgi.backend.fastcgi4.8.overloaded: 0
fastcgi.backend.fastcgi4.9.connected: 18
fastcgi.backend.fastcgi4.9.died: 0
fastcgi.backend.fastcgi4.9.disabled: 0
fastcgi.backend.fastcgi4.9.load: 0
fastcgi.backend.fastcgi4.9.overloaded: 0
fastcgi.backend.fastcgi4.load: 1
fastcgi.backend.fastcgi5.0.connected: 0
fastcgi.backend.fastcgi5.0.died: 0
fastcgi.backend.fastcgi5.0.disabled: 0
fastcgi.backend.fastcgi5.0.load: 0
fastcgi.backend.fastcgi5.0.overloaded: 0
fastcgi.backend.fastcgi5.load: 0
fastcgi.backend.fastcgi6.0.connected: 0
fastcgi.backend.fastcgi6.0.died: 0
fastcgi.backend.fastcgi6.0.disabled: 0
fastcgi.backend.fastcgi6.0.load: 0
fastcgi.backend.fastcgi6.0.overloaded: 0
fastcgi.backend.fastcgi6.1.connected: 0
fastcgi.backend.fastcgi6.1.died: 0
fastcgi.backend.fastcgi6.1.disabled: 0
fastcgi.backend.fastcgi6.1.load: 0
fastcgi.backend.fastcgi6.1.overloaded: 0
fastcgi.backend.fastcgi6.2.connected: 0
fastcgi.backend.fastcgi6.2.died: 0
fastcgi.backend.fastcgi6.2.disabled: 0
fastcgi.backend.fastcgi6.2.load: 0
fastcgi.backend.fastcgi6.2.overloaded: 0
fastcgi.backend.fastcgi6.3.connected: 0
fastcgi.backend.fastcgi6.3.died: 0
fastcgi.backend.fastcgi6.3.disabled: 0
fastcgi.backend.fastcgi6.3.load: 0
fastcgi.backend.fastcgi6.3.overloaded: 0
fastcgi.backend.fastcgi6.load: 0
fastcgi.backend.fastcgi7.0.connected: 0
fastcgi.backend.fastcgi7.0.died: 0
fastcgi.backend.fastcgi7.0.disabled: 0
fastcgi.backend.fastcgi7.0.load: 0
fastcgi.backend.fastcgi7.0.overloaded: 0
fastcgi.backend.fastcgi7.load: 0
fastcgi.requests: 266

0 comments on commit 642cfe2

Please sign in to comment.