raindrops RubyGem user+dev discussion/patches/pulls/bugs/help
 help / Atom feed
* [PATCH] unix: show zero-value stats for idle listeners
@ 2012-06-13  1:39 Eric Wong
  0 siblings, 0 replies; 1+ messages in thread
From: Eric Wong @ 2012-06-13  1:39 UTC (permalink / raw)
  To: raindrops

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.
---
  Pushed to "master" git://bogomips.org/raindrops

  I'm thinking about releasing raindrops v0.10.0 soon.

  I probably won't have time to use unix_diag functionality in the
  Linux 3.3 kernel.  I'm also lacking motivation since it'll be a
  while before Linux 3.3 is widely-available on servers, and I'm
  still supporting raindrops on 2.6.18 kernels :<

  Brian Corrigan (1):
        resolve symlinks to Unix domain sockets

  Eric Wong (3):
        unix_listener_stats follows and remembers symlinks
        middleware/proxy: favor __send__ for method dispatch
        unix: show zero-value stats for idle listeners

 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)
-- 
Eric Wong


^ permalink raw reply	[flat|threaded] 1+ messages in thread

only message in thread, back to index

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-06-13  1:39 [PATCH] unix: show zero-value stats for idle listeners Eric Wong

raindrops RubyGem user+dev discussion/patches/pulls/bugs/help

Archives are clonable:
	git clone --mirror https://bogomips.org/raindrops-public
	git clone --mirror http://ou63pmih66umazou.onion/raindrops-public

Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.lang.ruby.raindrops
	nntp://ou63pmih66umazou.onion/inbox.comp.lang.ruby.raindrops

 note: .onion URLs require Tor: https://www.torproject.org/
       or Tor2web: https://www.tor2web.org/

AGPL code for this site: git clone https://public-inbox.org/ public-inbox