From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS6939 64.71.128.0/18 X-Spam-Status: No, score=-1.9 required=3.0 tests=AWL,BAYES_00, MSGID_FROM_MTA_HEADER shortcircuit=no autolearn=unavailable version=3.3.2 Path: news.gmane.org!not-for-mail From: Eric Wong Newsgroups: gmane.comp.lang.ruby.raindrops.general Subject: [PATCH] unix: show zero-value stats for idle listeners Date: Wed, 13 Jun 2012 01:39:37 +0000 Message-ID: <20120613013937.GA24491@dcvr.yhbt.net> References: <20120613013937.GA24491@dcvr.yhbt.net> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: dough.gmane.org 1339551589 6455 80.91.229.3 (13 Jun 2012 01:39:49 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 13 Jun 2012 01:39:49 +0000 (UTC) To: raindrops@librelist.org Original-X-From: raindrops@librelist.org Wed Jun 13 03:39:48 2012 Return-path: Envelope-to: gclrrg-raindrops@m.gmane.org In-Reply-To: <20120613013937.GA24491@dcvr.yhbt.net> List-Archive: List-Help: List-Id: List-Post: List-Subscribe: List-Unsubscribe: Precedence: list Original-Sender: raindrops@librelist.org Xref: news.gmane.org gmane.comp.lang.ruby.raindrops.general:87 Archived-At: Received: from zedshaw.xen.prgmr.com ([64.71.167.205]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1SecYj-0001Tw-Ta for gclrrg-raindrops@m.gmane.org; Wed, 13 Jun 2012 03:39:46 +0200 Received: from zedshaw.xen.prgmr.com (localhost [IPv6:::1]) by zedshaw.xen.prgmr.com (Postfix) with ESMTP id 4D38621DE7B for ; Wed, 13 Jun 2012 01:47:56 +0000 (UTC) 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