From 5c62376bc9a1b0d7c8e664784a1fb97747a7c392 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 12 Jun 2012 18:29:00 -0700 Subject: [PATCH] unix: show zero-value stats for idle listeners When unix_listener_stats is called without arguments, it should still match the behavior of tcp_listener_stats and return ListenerStats object with zero values. This allows callers to iterate through the results to find the pathnames of all the Unix domain sockets in in listen mode. --- lib/raindrops/linux.rb | 14 ++++++++++---- test/test_linux.rb | 11 +++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/raindrops/linux.rb b/lib/raindrops/linux.rb index 1752b8a..7cfb653 100644 --- a/lib/raindrops/linux.rb +++ b/lib/raindrops/linux.rb @@ -54,14 +54,20 @@ module Raindrops::Linux Regexp.escape(path) end end - paths = /^\w+: \d+ \d+ 00000000 \d+ (\d+)\s+\d+ (#{paths.join('|')})$/n + paths = /^\w+: \d+ \d+ (\d+) \d+ (\d+)\s+\d+ (#{paths.join('|')})$/n # no point in pread since we can't stat for size on this file File.read(*PROC_NET_UNIX_ARGS).scan(paths) do |s| path = s[-1] - case s[0].to_i - when 2 then rv[path].queued += 1 - when 3 then rv[path].active += 1 + case s[0] + when "00000000" # client sockets + case s[1].to_i + when 2 then rv[path].queued += 1 + when 3 then rv[path].active += 1 + end + else + # listeners, vivify empty stats + rv[path] end end diff --git a/test/test_linux.rb b/test/test_linux.rb index a84eecf..0e79a86 100644 --- a/test/test_linux.rb +++ b/test/test_linux.rb @@ -67,6 +67,17 @@ class TestLinux < Test::Unit::TestCase assert_equal 1, stats[tmp.path].queued end + def test_unix_all_unused + tmp = Tempfile.new("\xde\xad\xbe\xef") # valid path, really :) + File.unlink(tmp.path) + us = UNIXServer.new(tmp.path) + stats = unix_listener_stats + assert stats.keys.include?(tmp.path), stats.inspect + + assert_equal 0, stats[tmp.path].active + assert_equal 0, stats[tmp.path].queued + end + def test_unix_resolves_symlinks tmp = Tempfile.new("\xde\xad\xbe\xef") # valid path, really :) File.unlink(tmp.path) -- 2.11.4.GIT