tsung_stats_server 0.0.1

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 (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
+