nchan_tools 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/exe/nchan-benchmark +71 -41
- data/lib/nchan_tools/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1dd4ceddaf522f6a4e493ac215a17b9989cec0a8412dd7df99798cf0261206b
|
4
|
+
data.tar.gz: 81988f661eaf53d32f06e1199f9508370c7fc65e481db90a23e81239fae10ffd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 412ea567add374cc898383500193ca1b4fee644389777db3fe571561dc368f21256859e6266d54aba0fd332994036313ba3d62d44d79057c889bcac3b407912a
|
7
|
+
data.tar.gz: 4503fe9cacadf0c6baafd2a44f15fd3891540c3378cb2893c2844f3260a9766c4d216b93d6ff1f0be335936dc9b805725af290e70a3fa36ba4db2c1c48414ae2
|
data/exe/nchan-benchmark
CHANGED
@@ -9,11 +9,16 @@ require "pry"
|
|
9
9
|
require "HDRHistogram"
|
10
10
|
|
11
11
|
verbose = false
|
12
|
+
save_csv = false
|
12
13
|
|
13
14
|
opt_parser=OptionParser.new do |opts|
|
14
15
|
opts.on("-v", "--verbose", "somewhat rather extraneously wordful output") do
|
15
16
|
verbose = true
|
16
17
|
end
|
18
|
+
opts.on("--csv FILENAME", "Append results to file in CSV format") do |f|
|
19
|
+
save_csv = f
|
20
|
+
end
|
21
|
+
|
17
22
|
end
|
18
23
|
opt_parser.banner="Usage: benchan.rb [options] url1 url2 url3..."
|
19
24
|
opt_parser.parse!
|
@@ -74,6 +79,7 @@ class Benchan
|
|
74
79
|
msg = msg[8..-1]
|
75
80
|
parsed = JSON.parse msg
|
76
81
|
@results[sub.url] = parsed
|
82
|
+
@results[sub.url]["raw"] = msg if @results[sub.url]
|
77
83
|
1+1
|
78
84
|
else
|
79
85
|
binding.pry
|
@@ -128,59 +134,59 @@ class Benchan
|
|
128
134
|
end
|
129
135
|
|
130
136
|
def results
|
131
|
-
channels = 0
|
132
|
-
runtime = []
|
133
|
-
subscribers = 0
|
134
|
-
message_length = []
|
135
|
-
messages_sent = 0
|
136
|
-
messages_send_confirmed = 0
|
137
|
-
messages_send_unconfirmed = 0
|
138
|
-
messages_send_failed = 0
|
139
|
-
messages_received = 0
|
140
|
-
messages_unreceived = 0
|
141
|
-
hdrh_publish = nil
|
142
|
-
hdrh_receive = nil
|
137
|
+
@channels = 0
|
138
|
+
@runtime = []
|
139
|
+
@subscribers = 0
|
140
|
+
@message_length = []
|
141
|
+
@messages_sent = 0
|
142
|
+
@messages_send_confirmed = 0
|
143
|
+
@messages_send_unconfirmed = 0
|
144
|
+
@messages_send_failed = 0
|
145
|
+
@messages_received = 0
|
146
|
+
@messages_unreceived = 0
|
147
|
+
@hdrh_publish = nil
|
148
|
+
@hdrh_receive = nil
|
143
149
|
@results.each do |url, data|
|
144
|
-
channels += data["channels"]
|
145
|
-
runtime << data["run_time_sec"]
|
146
|
-
subscribers += data["subscribers"]
|
147
|
-
message_length << data["message_length"]
|
148
|
-
messages_sent += data["messages"]["sent"]
|
149
|
-
messages_send_confirmed += data["messages"]["send_confirmed"]
|
150
|
-
messages_send_unconfirmed += data["messages"]["send_unconfirmed"]
|
151
|
-
messages_send_failed += data["messages"]["send_failed"]
|
152
|
-
messages_received += data["messages"]["received"]
|
153
|
-
messages_unreceived += data["messages"]["unreceived"]
|
150
|
+
@channels += data["channels"]
|
151
|
+
@runtime << data["run_time_sec"]
|
152
|
+
@subscribers += data["subscribers"]
|
153
|
+
@message_length << data["message_length"]
|
154
|
+
@messages_sent += data["messages"]["sent"]
|
155
|
+
@messages_send_confirmed += data["messages"]["send_confirmed"]
|
156
|
+
@messages_send_unconfirmed += data["messages"]["send_unconfirmed"]
|
157
|
+
@messages_send_failed += data["messages"]["send_failed"]
|
158
|
+
@messages_received += data["messages"]["received"]
|
159
|
+
@messages_unreceived += data["messages"]["unreceived"]
|
154
160
|
|
155
161
|
if data["message_publishing_histogram"]
|
156
162
|
hdrh = HDRHistogram.unserialize(data["message_publishing_histogram"], unit: :ms, multiplier: 0.001)
|
157
|
-
if hdrh_publish
|
158
|
-
hdrh_publish.merge! hdrh
|
163
|
+
if @hdrh_publish
|
164
|
+
@hdrh_publish.merge! hdrh
|
159
165
|
else
|
160
|
-
hdrh_publish = hdrh
|
166
|
+
@hdrh_publish = hdrh
|
161
167
|
end
|
162
168
|
end
|
163
169
|
if data["message_delivery_histogram"]
|
164
170
|
hdrh = HDRHistogram.unserialize(data["message_delivery_histogram"], unit: :ms, multiplier: 0.001)
|
165
|
-
if hdrh_receive
|
166
|
-
hdrh_receive.merge! hdrh
|
171
|
+
if @hdrh_receive
|
172
|
+
@hdrh_receive.merge! hdrh
|
167
173
|
else
|
168
|
-
hdrh_receive = hdrh
|
174
|
+
@hdrh_receive = hdrh
|
169
175
|
end
|
170
176
|
end
|
171
177
|
end
|
172
178
|
|
173
|
-
message_length.
|
174
|
-
runtime.
|
179
|
+
@message_length = @message_length.sum.to_f / @message_length.size
|
180
|
+
@runtime = @runtime.sum.to_f / @runtime.size
|
175
181
|
|
176
182
|
fmt = <<-END.gsub(/^ {6}/, '')
|
177
183
|
Nchan servers: %d
|
178
|
-
runtime: %
|
184
|
+
runtime: %d
|
179
185
|
channels: %d
|
180
186
|
subscribers: %d
|
181
187
|
subscribers per channel: %.1f
|
182
188
|
messages:
|
183
|
-
length: %
|
189
|
+
length: %d
|
184
190
|
sent: %d
|
185
191
|
send_confirmed: %d
|
186
192
|
send_unconfirmed: %d
|
@@ -193,22 +199,46 @@ class Benchan
|
|
193
199
|
receive rate per subscriber: %.3f/min
|
194
200
|
END
|
195
201
|
out = fmt % [
|
196
|
-
@n, runtime
|
197
|
-
message_length
|
198
|
-
messages_received, messages_unreceived,
|
199
|
-
messages_sent.to_f
|
200
|
-
messages_received.to_f
|
201
|
-
(messages_sent.to_f* 60)/(runtime
|
202
|
-
(messages_received.to_f * 60)/(runtime
|
202
|
+
@n, @runtime, @channels, @subscribers, @subscribers.to_f/@channels,
|
203
|
+
@message_length, @messages_sent, @messages_send_confirmed, @messages_send_unconfirmed, @messages_send_failed,
|
204
|
+
@messages_received, @messages_unreceived,
|
205
|
+
@messages_sent.to_f/@runtime,
|
206
|
+
@messages_received.to_f/@runtime,
|
207
|
+
(@messages_sent.to_f* 60)/(@runtime * @channels),
|
208
|
+
(@messages_received.to_f * 60)/(@runtime * @subscribers)
|
203
209
|
]
|
204
210
|
|
205
|
-
out << hdrhistogram_stats("message publishing latency", hdrh_publish) if hdrh_publish
|
206
|
-
out << hdrhistogram_stats("message delivery latency", hdrh_receive) if hdrh_receive
|
211
|
+
out << hdrhistogram_stats("message publishing latency", @hdrh_publish) if @hdrh_publish
|
212
|
+
out << hdrhistogram_stats("message delivery latency", @hdrh_receive) if @hdrh_receive
|
207
213
|
|
208
214
|
puts out
|
209
215
|
end
|
216
|
+
|
217
|
+
def append_csv_file(file)
|
218
|
+
require "csv"
|
219
|
+
write_headers = File.zero?(file)
|
220
|
+
headers = %i[servers runtime channels subscribers
|
221
|
+
message_length messages_sent messages_send_confirmed messages_send_unconfirmed messages_send_failed
|
222
|
+
messages_send_received messages_send_unreceived
|
223
|
+
messages_send_rate messages_receive_rate messages_send_rate_per_channel messages_receive_rate_per_subscriber
|
224
|
+
message_publishing_response_avg message_publishing_response_99percentile message_publishing_response_stddev message_publishing_response_count
|
225
|
+
message_delivery_avg message_delivery_99percentile message_delivery_stddev message_delivery_count]
|
226
|
+
csv = CSV.open(file, "a", {headers: headers, write_headers: write_headers})
|
227
|
+
csv << [@n, @runtime, @channels, @subscribers,
|
228
|
+
@message_length, @messages_sent, @messages_send_confirmed, @messages_send_unconfirmed, @messages_send_failed,
|
229
|
+
@messages_received, @messages_unreceived,
|
230
|
+
@messages_sent.to_f/@runtime, @messages_received.to_f/@runtime,
|
231
|
+
(@messages_sent.to_f* 60)/(@runtime * @channels), (@messages_received.to_f * 60)/(@runtime * @subscribers),
|
232
|
+
@hdrh_publish.mean, @hdrh_publish.percentile(99.0), @hdrh_publish.max, @hdrh_publish.stddev, @hdrh_publish.count,
|
233
|
+
@hdrh_receive.mean, @hdrh_receive.percentile(99.0), @hdrh_receive.max, @hdrh_receive.stddev, @hdrh_receive.count
|
234
|
+
]
|
235
|
+
csv.flush
|
236
|
+
csv.close
|
237
|
+
end
|
210
238
|
end
|
211
239
|
|
212
240
|
benchan = Benchan.new urls
|
213
241
|
benchan.run
|
214
242
|
benchan.results
|
243
|
+
benchan.append_csv_file(save_csv) if save_csv
|
244
|
+
|
data/lib/nchan_tools/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nchan_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leo Ponomarev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: typhoeus
|