genki-ns 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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