tsung_stats_server 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/LICENSE +9 -0
  2. data/README +11 -0
  3. data/Rakefile +10 -0
  4. data/bin/tsung_stats_server +28 -0
  5. data/doc/README.html +46 -0
  6. data/doc/TSSApp.html +793 -0
  7. data/doc/all-files.html +23 -0
  8. data/doc/all-methods.html +42 -0
  9. data/doc/all-namespaces.html +24 -0
  10. data/doc/api/apple-touch-icon.png +0 -0
  11. data/doc/api/classes/Object.html +117 -0
  12. data/doc/api/classes/TSSApp.html +147 -0
  13. data/doc/api/created.rid +1 -0
  14. data/doc/api/css/main.css +263 -0
  15. data/doc/api/css/panel.css +383 -0
  16. data/doc/api/css/reset.css +53 -0
  17. data/doc/api/favicon.ico +0 -0
  18. data/doc/api/files/LICENSE.html +84 -0
  19. data/doc/api/files/README.html +77 -0
  20. data/doc/api/files/Rakefile.html +72 -0
  21. data/doc/api/files/lib/tsung_stats_server_rb.html +61 -0
  22. data/doc/api/files/lib/webapp_rb.html +74 -0
  23. data/doc/api/i/arrows.png +0 -0
  24. data/doc/api/i/results_bg.png +0 -0
  25. data/doc/api/i/tree_bg.png +0 -0
  26. data/doc/api/index.html +14 -0
  27. data/doc/api/js/jquery-1.3.2.min.js +19 -0
  28. data/doc/api/js/jquery-effect.js +593 -0
  29. data/doc/api/js/main.js +22 -0
  30. data/doc/api/js/searchdoc.js +628 -0
  31. data/doc/api/panel/index.html +71 -0
  32. data/doc/api/panel/search_index.js +1 -0
  33. data/doc/api/panel/tree.js +1 -0
  34. data/doc/app.js +18 -0
  35. data/doc/custom.css +1 -0
  36. data/doc/history.erb +16 -0
  37. data/doc/index.erb +6 -0
  38. data/doc/index.html +19 -0
  39. data/doc/index.xhtml +221 -0
  40. data/doc/intro.erb +76 -0
  41. data/doc/jquery.js +11 -0
  42. data/doc/setup.erb +33 -0
  43. data/doc/style.css +81 -0
  44. data/doc/syntax_highlight.css +24 -0
  45. data/doc/theory.erb +3 -0
  46. data/doc/top-level-namespace.html +25 -0
  47. data/doc/usage.erb +23 -0
  48. data/lib/tsung_stats_server.rb +15 -0
  49. data/lib/webapp.rb +134 -0
  50. data/test/tsung_stats_server.rb +13 -0
  51. metadata +153 -0
@@ -0,0 +1,33 @@
1
+ <% chapter "Setup" do %>
2
+ <% section "Requirements" do %>
3
+ Your system needs the following software to run **tsung\_stats\_server**.
4
+
5
+ | Software | Description | Notes |
6
+ | -------- | ----------- | ----- |
7
+ | [Ruby](http://ruby-lang.org) | Ruby language interpreter | Version 1.8.6 is required. |
8
+ | [RubyGems](http://rubygems.org) | Ruby packaging system | Version 1.3.1 is required. |
9
+ | [Sinatra](http://www.sinatrarb.com) | The Sinatra web framework | Version 0.9.x is required. |
10
+ | [Rubyzip](http://rubyzip.sourceforge.net/ ) | Zip file library | Version 0.9.7 is required. |
11
+ | [Inochi](http://snk.tuxfamily.org/lib/inochi) | Inochi | Version 0.3.0 is required. |
12
+ | [Tsung](http://tsung.erlang-projects.org/) | Tsung | Version 1.3.0 is required. |
13
+ <% end %>
14
+
15
+ <% section "Installation" do %>
16
+ You can install **Tsung Stats Server** by running this command:
17
+
18
+ gem install -f <%= $program %>
19
+
20
+ To check whether the installation was sucessful, run this command:
21
+
22
+ <%= $program %> --version
23
+
24
+ If the installation was successful, you will see output like this:
25
+
26
+ <pre><%= verbatim `ruby bin/#{$program} --version` %></pre>
27
+
28
+ If you do not see such output, you may
29
+ <%= xref "License", "ask the author(s)" %> for help.
30
+ <% end %>
31
+
32
+
33
+ <% end %>
@@ -0,0 +1,81 @@
1
+ body { font-family: Myriad, Helvetica, Arial, Verdana, sans-serif; font-size: 10pt; }
2
+ #nav ul { list-style: none; padding: 0; margin: 0; }
3
+ #nav ul li { white-space: nowrap; }
4
+ #nav ul li.deprecated a { text-decoration: line-through; font-style: italic; }
5
+ #nav li em { font-size: 0.9em; color: #999; }
6
+ #nav h1 { font-size: 1.2em; }
7
+ h1 { font-size: 1.5em; background: #eee; color: #000; padding: 3px; text-decoration: none; }
8
+ h2 { font-size: 1.2em; background: #eef; color: #000; padding: 3px; text-decoration: none; }
9
+ h3 { font-size: 1.0em; }
10
+ .clear { clear: both; }
11
+ .section.module h1.title, .section.class h1.title, .section.readme h1 { color: #000; background: #ddd; border: 1px solid #ccc; padding: 7px; margin: 0; margin-bottom: 7px; }
12
+ .section.class h1.title { border-bottom: 0; margin-bottom: 0; }
13
+ .section.class > .section.docstring, .section.module > .section.docstring { padding: 0; }
14
+ #initialize-instance_method .methodsignature .return_types { display: none; }
15
+ .methodsignature .visibility { display: none; }
16
+ .methodsignature .name { font-weight: bold; }
17
+ .methoddetails .method_header h3 { display: none; }
18
+ .section h3 { margin-left: 20px; }
19
+ .section.method { background: #eee; margin-bottom: 0.8em; }
20
+ .overload .section.method { background: #f5f5f5; margin-left: 2em; margin-right: 2em; }
21
+ .section.tags,.section.docstring,.section.source { padding: 5px 12px; }
22
+ .section.method .details_title { font-size: 1.1em; background: #dde; padding: 7px; }
23
+ .overload .section.method .details_title { background: #e2e2ea; }
24
+ .overload .section.source { display: none; }
25
+ .section.method .details_title p.aliases { padding: 0; margin: 0; font-style: italic; font-size: 0.9em; }
26
+ .section.method .details_title p.aliases tt { font-weight: bold; font-style: normal; font-size: 1.1em; }
27
+ .section.constants dl { font-family: monospace; }
28
+ .section.constants dt { font-weight: bold; font-size: 1.1em; }
29
+ .section.constants dt:after { content: " = "; }
30
+ .section.constants dd { margin-bottom: 1em; }
31
+ .section .source_link { font-size: 0.9em; }
32
+ .section .source_code { display: none; }
33
+ /*.section.source .source_code pre { float: left; }*/
34
+ .section.attributes table { padding: 0; width: 100%; }
35
+ .section.attributes .readwrite { width: 5%; }
36
+ .section.attributes .name { font-weight: bold; width: 10%; }
37
+ .section.attributes .aliases { padding-top: 0; padding-left: 0; }
38
+ .section.attributes .aliases .text { font-size: 0.8em; }
39
+ .section.attributes .aliases .alias { font-family: monospace; font-weight: bold; }
40
+ .section.attributes .visibility { font-style: italic; color: #666; width: 5%; }
41
+ .section.attributes td, .section.attributes th { vertical-align: top; padding: 5px; }
42
+ .section.attributes th { padding-left: 0; text-align: left; }
43
+ .section.attributes .docstring p.returns { color: #555; font-style: italic; }
44
+ .section.attributes .docstring .return_types { font-style: normal; }
45
+ .section.attributes .docstring { width: 80%; }
46
+ .section.attributes .docstring * { display: inline; }
47
+ .section.attributes tr.hasaliases td, .section.attributes tr.hasaliases th { padding-bottom: 0; }
48
+ .section.deprecated { margin-left: 15px; }
49
+ .section.inheritance { background: #ddd; padding: 5px; border: 1px solid #ccc; border-top: 0; }
50
+ .section.inheritance ul { list-style: none; padding-left: 2.2em; margin: 0; }
51
+ .section.inheritance ul li { line-height: 1.2em; }
52
+ .section.inheritance ul li:before { content: "↳ "; }
53
+ .section.inheritance > ul { padding-left: 5px; }
54
+ .section.inheritance > ul > li:before { content: ""; }
55
+ .section.inheritance > ul > ul { padding-left: 1em; }
56
+ .section.methodsummary table { width: 100%; }
57
+ .section.methodsummary td, .section.methodsummary th { background: #eee; vertical-align: top; padding: 5px; }
58
+ .section.methodsummary th { background: #dde; text-align: left; white-space: nowrap; padding-right: 12px; }
59
+ .section.methodsummary .signature { font-family: monospace; font-weight: normal; }
60
+ .section.methodsummary .signature .name { font-weight: bold; }
61
+ .section.methodsummary .signature .alias, .section.methodsummary .signature .overload { display: block; }
62
+ .section.methodsummary .docstring { width: 80%; }
63
+ .section.methodsummary .docstring * { display: inline; }
64
+ .section.methodsummary .docstring p.returns { color: #555; font-style: italic; }
65
+ .section.methodsummary .docstring .return_types { font-style: normal; }
66
+ .section.tags div { clear: both; }
67
+ .section.tags h2 { display: none; }
68
+ .section.tags h3 { font-size: 1.0em; margin-top: 3px; }
69
+ .section.tags dl { margin-left: 2em; }
70
+ .section.tags .option table { width: 100%; border: 0; padding: 0; }
71
+ .section.tags .option th { text-align: left; background: #e5e5e5; padding: 3px; }
72
+ .section.tags .option td.name { font-family: monospace; }
73
+ .section.methodmissing p.note { font-style: italic; }
74
+ .section.constructor p.inherited_msg { font-style: italic; }
75
+ .included h1, .inherited h1 { font-size: 1em !important; border: 0; margin: 0; padding: 5px; border-bottom: 1px solid #ccc; }
76
+ .included div, .inherited div { color: #444; margin: 1.5em 0; width: 47%; border: 1px solid #ccc; float: left; margin-right: 12px; }
77
+ .included p .name, .inherited p .name { font-family: monospace; }
78
+ .included p, .inherited p { margin: 5px; }
79
+ #yard_info a:link, #yard_info a:visited { color: #333; }
80
+ #yard_info { margin-top: 12px; margin-bottom: 7px; text-align: center; color: #444; background: #ddd; padding: 8px; border: 1px solid #ccc; font-size: 0.8em; }
81
+ #yard_info .yard { font-weight: bold; }
@@ -0,0 +1,24 @@
1
+ /* Canvas */
2
+ .source_code pre.lines { margin-right: 20px; text-align: right; color: #888; }
3
+ .docstring pre { padding: 12px; padding-left: 0; }
4
+ .docstring pre, .source_code { background: #222; padding: 12px; margin-top: 8px; border: 1px dashed #ccc; font-size: 0.9em; overflow-x: auto; }
5
+
6
+ /* Token colours. Borrowed from pastie.org's "Blackboard" theme */
7
+ pre.code, pre.lines { font-family: Monaco, Courier, monospace; }
8
+ pre.code { color: #fff; }
9
+ pre.code .info.file { color: #888; }
10
+ pre.code .val, pre.code .int, pre.code .float { color: #61CE3C; }
11
+ pre.code .dstring, pre.code .tstring_content,
12
+ pre.code .regexp_beg, pre.code .regexp_end,
13
+ pre.code .tstring_beg, pre.code .tstring_end { color: #61DE3C; }
14
+ pre.code .embexpr_beg, pre.code .tstring, pre.code .tstring .rbrace { color: #7CFE65; }
15
+ pre.code .fid, pre.code .id.new, pre.code .id.to_s,
16
+ pre.code .id.to_sym, pre.code .id.to_f,
17
+ pre.code .dot + pre.code .id,
18
+ pre.code .id.to_i pre.code .id.each { color: #FF6400; }
19
+ pre.code .comment { color: #AEAEAE; }
20
+ pre.code .constant, pre.code .const, pre.code .symbol, pre.code .symbeg { color: #D8FA3C; }
21
+ pre.code .kw { color: #FBDE2D; }
22
+ pre.code .ivar { color: #AACEFB; }
23
+ pre.code .gvar, pre.code .backref, pre.code .id.nth_ref { color: #BADEFF; }
24
+ pre.code .regexp, .dregexp { color: #EA5EFB; }
@@ -0,0 +1,3 @@
1
+ <% chapter "Theory of operation" do %>
2
+
3
+ <% end %>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html>
4
+ <head>
5
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
6
+ <link rel="stylesheet" href="style.css" type="text/css" charset="utf-8" />
7
+ <link rel="stylesheet" href="custom.css" type="text/css" charset="utf-8" />
8
+ <link rel="stylesheet" href="syntax_highlight.css" type="text/css" charset="utf-8" />
9
+
10
+ <script src="jquery.js" type="text/javascript" charset="utf-8"></script>
11
+ <script src="app.js" type="text/javascript" charset="utf-8"></script>
12
+ <title>Top Level Namespace</title>
13
+ </head>
14
+ <body>
15
+ <div id="content">
16
+
17
+ </div>
18
+ <div id="yard_info">
19
+ Generated on Tuesday, July 21 2009 at 11:24:31 PM by
20
+ <abbr class="yard" title="Yay! A Ruby Documentation Tool"><a href="http://yard.soen.ca">YARD</a></abbr>
21
+ 0.2.3.2 (ruby-1.9.1).
22
+ </div>
23
+
24
+ </body>
25
+ </html>
@@ -0,0 +1,23 @@
1
+ <% chapter "Usage" do %>
2
+ <% section "Command-line interface" do %>
3
+
4
+ You can see the online help by running the following command:
5
+
6
+ <%= $program %> --help
7
+
8
+ The command-line arguments are:
9
+
10
+ | Argument | Description | Default |
11
+ | -------- | ----------- | ------- |
12
+ | --logdir | The directory containing the tsung logs | ~/.tsung/log |
13
+ | --tsung-stats | The command used to call tsung_stats.pl | perl -S /usr/lib/tsung/bin/tsung_stats.pl |
14
+ | --port | The port to run the server on | 1764 (42 ** 2) |
15
+
16
+ This starts the server on your machine. Point your browser to
17
+
18
+ http://localhost:1764
19
+
20
+ to see a list of available logs and options.
21
+ <% end %>
22
+
23
+ <% end %>
@@ -0,0 +1,15 @@
1
+ require 'rubygems'
2
+ #gem 'inochi', '~> 0'
3
+ require 'inochi'
4
+
5
+ Inochi.init :TsungStatsServer,
6
+ :project => 'skadesgems',
7
+ :version => '0.0.1',
8
+ :release => '2009-03-14',
9
+ :website => 'http://skadesgems.rubyforge.org',
10
+ :tagline => 'A simple webserver serving tsung stats',
11
+ :require => {
12
+ 'sinatra' => '~> 0.9',
13
+ 'rubyzip' => '~> 0.9',
14
+ 'markaby' => '~> 0.5'
15
+ }
@@ -0,0 +1,134 @@
1
+ require 'sinatra'
2
+ require 'markaby'
3
+ require 'zip/zip'
4
+ require 'wilson/web'
5
+
6
+ Markaby::Builder.set(:indent, 2)
7
+
8
+ Sinatra::Application.set(:run => false, :environment =>
9
+ :production)
10
+
11
+ #
12
+ # The TSSApp class serves log files generated by the Tsung stress
13
+ # testing tool.
14
+ #
15
+ # @representation xml
16
+ # <?xml encoding="utf-8">
17
+ # <report>
18
+ # bla
19
+ # </report>
20
+ # @representation json
21
+ # { "report": "bla" }
22
+ #
23
+ class TSSApp < Sinatra::Application
24
+ include Wilson::Web
25
+
26
+ configure do
27
+ set :public, COMMAND_LINE.logdir
28
+ set :logdir, COMMAND_LINE.logdir
29
+ set :tsung_stats, COMMAND_LINE.tsung_stats
30
+ end
31
+
32
+ ##
33
+ # Shows the list of all logs present on the machine.
34
+ #
35
+ # @output_types [text/html]
36
+ # @output_languages [en-US]
37
+ #
38
+ get '/' do
39
+ logdirs = (Dir.entries(options.logdir) - [".", ".."]).sort
40
+ logdirs.reject! {|file| file =~ /\.zip/ }
41
+ list_dirs(logdirs)
42
+ end
43
+
44
+ ##
45
+ # Shows a report. If the report is not generated already, it will be.
46
+ #
47
+ # @url_param dir The date on which the measurement was taken.
48
+ # @get force If present and set to any value,
49
+ # regeneration of the report is forced
50
+ # @output_types [text/html]
51
+ # @output_languages [en-US]
52
+ #
53
+ get '/:dir/report.html' do
54
+ run_stats(params[:dir])
55
+ end
56
+
57
+ #
58
+ # Delivers a report as zip file. If not generated, report generation takes place.
59
+ #
60
+ # @url_param [dir] The date on which the measurement was taken.
61
+ #
62
+ # @output_types [application/zip]
63
+ #
64
+ get '/:dir.zip' do
65
+ filename = params[:dir].gsub(/:/, '-')
66
+ unless File.exists?(File.join(options.logdir, "#{filename}.zip"))
67
+ zip(params[:dir], filename)
68
+ end
69
+ attachment("#{filename}.zip")
70
+ content_type("application/zip")
71
+ File.read(File.join(options.logdir, "#{filename}.zip"))
72
+ end
73
+
74
+ #
75
+ # Runs the report generation. If a report already exists,
76
+ # it wont be generated a second time, unless forced explicitly.
77
+ #
78
+ # @param dir [String] The logfile directory of the report.
79
+ # @param force [true, false] If set to true, the report gets
80
+ # created unconditionally.
81
+ #
82
+ # @return [String] The contents of #{dir}/report.html
83
+ def run_stats(dir, force = false)
84
+ Dir.chdir( File.join(options.logdir, dir) ) do
85
+ unless File.exists?('report.html') && force == false
86
+ system(options.tsung_stats)
87
+ end
88
+ File.read('report.html')
89
+ end
90
+ end
91
+
92
+ #
93
+ # Creates a zip file out of a directory.
94
+ #
95
+ # @param dir [String] The directories name.
96
+ # @param filename [String] The output filename.
97
+ #
98
+ # @return [undefined] unspecified
99
+ def zip(dir, filename)
100
+ Dir.chdir( File.join(options.logdir) ) do
101
+ unless File.exists?("#{dir}.zip")
102
+ Zip::ZipFile.open("#{filename}.zip", true) do |zf|
103
+ Dir["#{dir}/**/*"].each { |f| zf.add(f, f) }
104
+ end
105
+ end
106
+ end
107
+ end
108
+
109
+ #
110
+ # Generates a HTML document listing of all logs present on the machine.
111
+ #
112
+ # @param logdirs [Array<String>] The directories that contain logs.
113
+ #
114
+ # @return [String<text/html>] The generated document.
115
+ def list_dirs(logdirs)
116
+ doc = Markaby::Builder.new
117
+ doc.html do
118
+ head do
119
+ title "Logpickin'"
120
+ end
121
+ body do
122
+ h1 "Pick a log:"
123
+ ul.logs do
124
+ logdirs.each do |dir|
125
+ li.log do
126
+ a "Log #{dir}", :href => "/#{dir}/report.html"
127
+ a "As zip", :href => "/#{dir}.zip"
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,13 @@
1
+ #describe TsungStatsServer do
2
+ # it 'has inochi' do
3
+ # assert TsungStatsServer.const_defined? :INOCHI
4
+ #
5
+ # TsungStatsServer::INOCHI.each do |param, value|
6
+ # const = param.to_s.upcase
7
+ #
8
+ # assert TsungStatsServer.const_defined? const
9
+ # TsungStatsServer.const_get(const).must_equal value
10
+ # end
11
+ # end
12
+ #end
13
+ #
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tsung_stats_server
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Florian Gilcher
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-07-28 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: sinatra
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: "0.9"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rubyzip
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: "0.9"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: markaby
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: "0.5"
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: inochi
47
+ type: :development
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: "1"
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: inochi
57
+ type: :runtime
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ~>
62
+ - !ruby/object:Gem::Version
63
+ version: "1"
64
+ version:
65
+ description: A simple webserver serving tsung stats
66
+ email: flo@andersground.net
67
+ executables:
68
+ - tsung_stats_server
69
+ extensions: []
70
+
71
+ extra_rdoc_files: []
72
+
73
+ files:
74
+ - bin/tsung_stats_server
75
+ - doc/all-files.html
76
+ - doc/all-methods.html
77
+ - doc/all-namespaces.html
78
+ - doc/api/apple-touch-icon.png
79
+ - doc/api/classes/Object.html
80
+ - doc/api/classes/TSSApp.html
81
+ - doc/api/created.rid
82
+ - doc/api/css/main.css
83
+ - doc/api/css/panel.css
84
+ - doc/api/css/reset.css
85
+ - doc/api/favicon.ico
86
+ - doc/api/files/lib/tsung_stats_server_rb.html
87
+ - doc/api/files/lib/webapp_rb.html
88
+ - doc/api/files/LICENSE.html
89
+ - doc/api/files/Rakefile.html
90
+ - doc/api/files/README.html
91
+ - doc/api/i/arrows.png
92
+ - doc/api/i/results_bg.png
93
+ - doc/api/i/tree_bg.png
94
+ - doc/api/index.html
95
+ - doc/api/js/jquery-1.3.2.min.js
96
+ - doc/api/js/jquery-effect.js
97
+ - doc/api/js/main.js
98
+ - doc/api/js/searchdoc.js
99
+ - doc/api/panel/index.html
100
+ - doc/api/panel/search_index.js
101
+ - doc/api/panel/tree.js
102
+ - doc/app.js
103
+ - doc/custom.css
104
+ - doc/history.erb
105
+ - doc/index.erb
106
+ - doc/index.html
107
+ - doc/index.xhtml
108
+ - doc/intro.erb
109
+ - doc/jquery.js
110
+ - doc/README.html
111
+ - doc/setup.erb
112
+ - doc/style.css
113
+ - doc/syntax_highlight.css
114
+ - doc/theory.erb
115
+ - doc/top-level-namespace.html
116
+ - doc/TSSApp.html
117
+ - doc/usage.erb
118
+ - lib/tsung_stats_server.rb
119
+ - lib/webapp.rb
120
+ - LICENSE
121
+ - Rakefile
122
+ - README
123
+ - test/tsung_stats_server.rb
124
+ has_rdoc: true
125
+ homepage: http://skadesgems.rubyforge.org
126
+ licenses: []
127
+
128
+ post_install_message:
129
+ rdoc_options: []
130
+
131
+ require_paths:
132
+ - lib
133
+ required_ruby_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: "0"
138
+ version:
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: "0"
144
+ version:
145
+ requirements: []
146
+
147
+ rubyforge_project: skadesgems
148
+ rubygems_version: 1.3.4
149
+ signing_key:
150
+ specification_version: 3
151
+ summary: A simple webserver serving tsung stats
152
+ test_files: []
153
+