genki-ns 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (8) hide show
  1. data/ChangeLog +4 -0
  2. data/README +36 -0
  3. data/Rakefile +143 -0
  4. data/bin/ns +5 -0
  5. data/lib/ns.rb +55 -0
  6. data/test/ns_test.rb +8 -0
  7. data/test/test_helper.rb +5 -0
  8. metadata +79 -0
data/ChangeLog ADDED
@@ -0,0 +1,4 @@
1
+ == 0.0.1 / 2008-07-11
2
+
3
+ * initial release
4
+
data/README ADDED
@@ -0,0 +1,36 @@
1
+
2
+ = ns
3
+
4
+ Show list of listeners.
5
+
6
+ == Description
7
+
8
+
9
+ == Installation
10
+
11
+ === Archive Installation
12
+
13
+ rake install
14
+
15
+ === Gem Installation
16
+
17
+ gem install ns
18
+
19
+
20
+ == Features/Problems
21
+
22
+
23
+ == Synopsis
24
+
25
+ ns <options> [<port1> [<port2> ...]]
26
+
27
+ <options>
28
+
29
+ -a show all listeners
30
+ -k kill programs using specified port
31
+
32
+ == Copyright
33
+
34
+ Author:: Genki Takiuchi <genki@s21g.com>
35
+ Copyright:: Copyright (c) 2008 Genki Takiuchi
36
+ License:: MIT License
data/Rakefile ADDED
@@ -0,0 +1,143 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+ require 'rake/testtask'
5
+ require 'rake/packagetask'
6
+ require 'rake/gempackagetask'
7
+ require 'rake/rdoctask'
8
+ require 'rake/contrib/rubyforgepublisher'
9
+ require 'rake/contrib/sshpublisher'
10
+ require 'fileutils'
11
+ require 'lib/ns'
12
+ include FileUtils
13
+
14
+ NAME = "ns"
15
+ AUTHOR = "Genki Takiuchi"
16
+ EMAIL = "genki@s21g.com"
17
+ DESCRIPTION = "Net"
18
+ RUBYFORGE_PROJECT = "ns"
19
+ HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
20
+ BIN_FILES = %w(ns)
21
+ VERS = Ns::VERSION
22
+
23
+ REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
24
+ CLEAN.include ['**/.*.sw?', '*.gem', '.config']
25
+ RDOC_OPTS = [
26
+ '--title', "#{NAME} documentation",
27
+ "--charset", "utf-8",
28
+ "--opname", "index.html",
29
+ "--line-numbers",
30
+ "--main", "README",
31
+ "--inline-source",
32
+ ]
33
+
34
+ task :default => [:test]
35
+ task :package => [:clean]
36
+
37
+ Rake::TestTask.new("test") do |t|
38
+ t.libs << "test"
39
+ t.pattern = "test/**/*_test.rb"
40
+ t.verbose = true
41
+ end
42
+
43
+ spec = Gem::Specification.new do |s|
44
+ s.name = NAME
45
+ s.version = VERS
46
+ s.platform = Gem::Platform::RUBY
47
+ s.has_rdoc = true
48
+ s.extra_rdoc_files = ["README", "ChangeLog"]
49
+ s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
50
+ s.summary = DESCRIPTION
51
+ s.description = DESCRIPTION
52
+ s.author = AUTHOR
53
+ s.email = EMAIL
54
+ s.homepage = HOMEPATH
55
+ s.executables = BIN_FILES
56
+ s.rubyforge_project = RUBYFORGE_PROJECT
57
+ s.bindir = "bin"
58
+ s.require_path = "lib"
59
+ #s.autorequire = ""
60
+ s.test_files = Dir["test/*_test.rb"]
61
+
62
+ s.add_dependency('redgreen', '>=1.2.1')
63
+ #s.required_ruby_version = '>= 1.8.2'
64
+
65
+ s.files = %w(README ChangeLog Rakefile) +
66
+ Dir.glob("{bin,doc,test,lib,templates,generator,extras,website,script}/**/*") +
67
+ Dir.glob("ext/**/*.{h,c,rb}") +
68
+ Dir.glob("examples/**/*.rb") +
69
+ Dir.glob("tools/*.rb")
70
+
71
+ s.extensions = FileList["ext/**/extconf.rb"].to_a
72
+ end
73
+
74
+ Rake::GemPackageTask.new(spec) do |p|
75
+ p.need_tar = true
76
+ p.gem_spec = spec
77
+ end
78
+
79
+ task :install do
80
+ name = "#{NAME}-#{VERS}.gem"
81
+ sh %{rake package}
82
+ sh %{sudo gem install pkg/#{name}}
83
+ end
84
+
85
+ task :uninstall => [:clean] do
86
+ sh %{sudo gem uninstall #{NAME}}
87
+ end
88
+
89
+
90
+ Rake::RDocTask.new do |rdoc|
91
+ rdoc.rdoc_dir = 'html'
92
+ rdoc.options += RDOC_OPTS
93
+ rdoc.template = "resh"
94
+ #rdoc.template = "#{ENV['template']}.rb" if ENV['template']
95
+ if ENV['DOC_FILES']
96
+ rdoc.rdoc_files.include(ENV['DOC_FILES'].split(/,\s*/))
97
+ else
98
+ rdoc.rdoc_files.include('README', 'ChangeLog')
99
+ rdoc.rdoc_files.include('lib/**/*.rb')
100
+ rdoc.rdoc_files.include('ext/**/*.c')
101
+ end
102
+ end
103
+
104
+ desc "Publish to RubyForge"
105
+ task :rubyforge => [:rdoc, :package] do
106
+ require 'rubyforge'
107
+ Rake::RubyForgePublisher.new(RUBYFORGE_PROJECT, 'takiuchi').upload
108
+ end
109
+
110
+ desc 'Package and upload the release to rubyforge.'
111
+ task :release => [:clean, :package] do |t|
112
+ v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"
113
+ abort "Versions don't match #{v} vs #{VERS}" unless v == VERS
114
+ pkg = "pkg/#{NAME}-#{VERS}"
115
+
116
+ require 'rubyforge'
117
+ rf = RubyForge.new
118
+ puts "Logging in"
119
+ rf.login
120
+
121
+ c = rf.userconfig
122
+ # c["release_notes"] = description if description
123
+ # c["release_changes"] = changes if changes
124
+ c["preformatted"] = true
125
+
126
+ files = [
127
+ "#{pkg}.tgz",
128
+ "#{pkg}.gem"
129
+ ].compact
130
+
131
+ puts "Releasing #{NAME} v. #{VERS}"
132
+ rf.add_release RUBYFORGE_PROJECT, NAME, VERS, *files
133
+ end
134
+
135
+ desc 'Show information about the gem.'
136
+ task :debug_gem do
137
+ puts spec.to_ruby
138
+ end
139
+
140
+ desc 'Update gem spec'
141
+ task :gemspec do
142
+ open("#{NAME}.gemspec", 'w').write spec.to_ruby
143
+ end
data/bin/ns ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift File.join(File.dirname(__FILE__), '../lib')
3
+ require 'ns'
4
+
5
+ Ns::run
data/lib/ns.rb ADDED
@@ -0,0 +1,55 @@
1
+ require 'optparse'
2
+ require 'singleton'
3
+ require 'socket'
4
+
5
+ class Ns
6
+ VERSION = "0.0.2"
7
+ Listener = Struct.new(:proto, :recvq, :sendq, :laddr, :raddr, :state, :prog)
8
+
9
+ include Singleton
10
+
11
+ class << self
12
+ def run
13
+ action = :list
14
+ opt = OptionParser.new
15
+ opt.on('-k', 'kill'){action = :kill}
16
+ opt.on('-a', 'all'){@@all = true}
17
+ opt.order!(ARGV)
18
+ instance.send action, ARGV
19
+ end
20
+ end
21
+
22
+ def list(ports)
23
+ @listeners.each do |l|
24
+ unless ports.empty?
25
+ next unless l.laddr.match(/[^\:]\:(?:#{ports.join('|')})\b/)
26
+ end
27
+ next if !@@all && (l.prog.nil? || l.prog == '-')
28
+ next if l.laddr.split(':').size > 2
29
+ puts "%18s %18s %s" % [l.laddr, l.raddr, l.prog]
30
+ end
31
+ end
32
+
33
+ def kill(ports)
34
+ puts "ports required" or exit if ports.empty?
35
+ @listeners.each do |l|
36
+ unless ports.empty?
37
+ next unless l.laddr.match(/[^\:]\:(?:#{ports.join('|')})\b/)
38
+ end
39
+ next if l.laddr.split(':').size > 2
40
+ next if l.prog.nil?
41
+ pid, progname = l.prog.split('/', 2)
42
+ Process.kill(-9, pid.to_i)
43
+ puts "%s(%s) killed" % [progname, pid]
44
+ end
45
+ end
46
+
47
+ private
48
+ def initialize
49
+ @listeners = []
50
+ lines = `netstat -n -l -p 2>/dev/null`.split("\n")[1..-1]
51
+ lines.grep(/^(tcp|udp)/).each do |line|
52
+ @listeners << Listener.new(*line.split(/\s+/))
53
+ end
54
+ end
55
+ end
data/test/ns_test.rb ADDED
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ require "test/unit"
4
+ class NsTest < Test::Unit::TestCase
5
+ def test_assert
6
+ assert true
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/ns'
3
+ require 'rubygems'
4
+ require 'redgreen'
5
+
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: genki-ns
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Genki Takiuchi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-07-11 00:00:00 -07:00
13
+ default_executable: ns
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: redgreen
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.2.1
23
+ version:
24
+ description: Net
25
+ email: genki@s21g.com
26
+ executables:
27
+ - ns
28
+ extensions: []
29
+
30
+ extra_rdoc_files:
31
+ - README
32
+ - ChangeLog
33
+ files:
34
+ - README
35
+ - ChangeLog
36
+ - Rakefile
37
+ - bin/ns
38
+ - test/test_helper.rb
39
+ - test/ns_test.rb
40
+ - lib/ns.rb
41
+ has_rdoc: true
42
+ homepage: http://ns.rubyforge.org
43
+ post_install_message:
44
+ rdoc_options:
45
+ - --title
46
+ - ns documentation
47
+ - --charset
48
+ - utf-8
49
+ - --opname
50
+ - index.html
51
+ - --line-numbers
52
+ - --main
53
+ - README
54
+ - --inline-source
55
+ - --exclude
56
+ - ^(examples|extras)/
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: "0"
70
+ version:
71
+ requirements: []
72
+
73
+ rubyforge_project: ns
74
+ rubygems_version: 1.2.0
75
+ signing_key:
76
+ specification_version: 2
77
+ summary: Net
78
+ test_files:
79
+ - test/ns_test.rb