fnordmetric 0.3.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +6 -0
- data/Gemfile.lock +21 -0
- data/Procfile +1 -2
- data/VERSION +1 -1
- data/_spec/app_spec.rb +178 -0
- data/{spec → _spec}/cache_spec.rb +0 -0
- data/{spec → _spec}/combine_metric_spec.rb +0 -0
- data/{spec → _spec}/core_spec.rb +0 -0
- data/{spec → _spec}/count_metric_spec.rb +0 -0
- data/_spec/dashboard_spec.rb +67 -0
- data/_spec/event_spec.rb +46 -0
- data/{spec → _spec}/metric_spec.rb +0 -0
- data/{spec → _spec}/report_spec.rb +0 -0
- data/{spec → _spec}/sum_metric_spec.rb +0 -0
- data/_spec/widget_spec.rb +107 -0
- data/doc/import_dump.rb +26 -0
- data/em_runner.rb +33 -0
- data/fnordmetric.gemspec +59 -20
- data/haml/app.haml +26 -12
- data/lib/fnordmetric.rb +150 -15
- data/lib/fnordmetric/app.rb +70 -11
- data/lib/fnordmetric/cache.rb +4 -4
- data/lib/fnordmetric/context.rb +65 -0
- data/lib/fnordmetric/dashboard.rb +16 -12
- data/lib/fnordmetric/event.rb +65 -15
- data/lib/fnordmetric/gauge.rb +46 -0
- data/lib/fnordmetric/gauge_calculations.rb +43 -0
- data/lib/fnordmetric/gauge_modifiers.rb +43 -0
- data/lib/fnordmetric/inbound_stream.rb +66 -0
- data/lib/fnordmetric/logger.rb +38 -0
- data/lib/fnordmetric/namespace.rb +120 -0
- data/lib/fnordmetric/numbers_widget.rb +29 -11
- data/lib/fnordmetric/session.rb +131 -0
- data/lib/fnordmetric/standalone.rb +31 -0
- data/lib/fnordmetric/timeline_widget.rb +29 -9
- data/lib/fnordmetric/widget.rb +50 -45
- data/lib/fnordmetric/worker.rb +80 -0
- data/pub/fnordmetric/fnordmetric.css +76 -9
- data/pub/fnordmetric/fnordmetric.js +541 -42
- data/pub/raphael-min.js +8 -0
- data/pub/raphael-utils.js +221 -0
- data/readme.rdoc +172 -27
- data/server.rb +22 -0
- data/spec/app_spec.rb +359 -117
- data/spec/context_spec.rb +42 -0
- data/spec/dashboard_spec.rb +7 -47
- data/spec/event_spec.rb +114 -33
- data/spec/gauge_modifiers_spec.rb +276 -0
- data/spec/gauge_spec.rb +128 -0
- data/spec/namespace_spec.rb +104 -0
- data/spec/session_spec.rb +231 -0
- data/spec/spec_helper.rb +27 -4
- data/spec/widget_spec.rb +81 -75
- data/spec/worker_spec.rb +37 -0
- data/test_stream.sh +187 -0
- data/ulm_stats.rb +198 -0
- metadata +114 -35
- data/lib/fnordmetric/core.rb +0 -66
- data/lib/fnordmetric/engine.rb +0 -3
data/spec/spec_helper.rb
CHANGED
@@ -1,13 +1,36 @@
|
|
1
1
|
require 'rubygems'
|
2
|
+
require 'json'
|
2
3
|
require 'rspec'
|
3
|
-
require '
|
4
|
+
require 'redis'
|
4
5
|
require 'rack'
|
5
6
|
require 'rack/test'
|
6
7
|
require 'delorean'
|
7
8
|
|
8
9
|
ENV['RACK_ENV'] = "test"
|
9
|
-
|
10
|
-
Mongoid.configure{ |c| c.master = Mongo::Connection.new.db("fnordmetric_test") }
|
10
|
+
ENV['FNORDMETRIC_ENV'] = 'test'
|
11
11
|
|
12
12
|
$: << ::File.expand_path('../../lib', __FILE__)
|
13
|
-
require "fnordmetric"
|
13
|
+
require "fnordmetric"
|
14
|
+
require "eventmachine"
|
15
|
+
require 'em-hiredis'
|
16
|
+
|
17
|
+
class RedisWrap
|
18
|
+
|
19
|
+
def initialize(redis, callbackable=true)
|
20
|
+
@redis = redis
|
21
|
+
@callbackable = callbackable
|
22
|
+
end
|
23
|
+
|
24
|
+
def method_missing(m, *args)
|
25
|
+
@last_return = @redis.send(m, *args)
|
26
|
+
if ENV["VERBOSE_REDIS"]
|
27
|
+
puts ">> REDIS: #{m} #{args.join(" ")} => #{@last_return}"
|
28
|
+
end
|
29
|
+
@callbackable ? self : @last_return
|
30
|
+
end
|
31
|
+
|
32
|
+
def callback(&block)
|
33
|
+
block.call(*@last_return)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/spec/widget_spec.rb
CHANGED
@@ -3,102 +3,108 @@ require ::File.expand_path('../spec_helper.rb', __FILE__)
|
|
3
3
|
describe FnordMetric::Widget do
|
4
4
|
|
5
5
|
before(:each) do
|
6
|
-
FnordMetric::
|
6
|
+
@gauge1 = FnordMetric::Gauge.new(
|
7
|
+
:key => "foooobar",
|
8
|
+
:tick => 60*60*24,
|
9
|
+
:key_prefix => "blubb"
|
10
|
+
)
|
11
|
+
@gauge2 = FnordMetric::Gauge.new(
|
12
|
+
:key => "fooo234obar",
|
13
|
+
:tick => 60*60,
|
14
|
+
:key_prefix => "blubb"
|
15
|
+
)
|
7
16
|
end
|
8
17
|
|
9
|
-
it "should
|
10
|
-
widget = FnordMetric::Widget.new(
|
18
|
+
it "should remember it's own title" do
|
19
|
+
widget = FnordMetric::Widget.new(
|
20
|
+
:title => "My Widget",
|
21
|
+
:gauges => [@gauge1]
|
22
|
+
)
|
11
23
|
widget.title.should == "My Widget"
|
12
24
|
end
|
13
|
-
|
14
|
-
it "should
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
25
|
+
|
26
|
+
it "should remember it's gauges" do
|
27
|
+
widget = FnordMetric::Widget.new(
|
28
|
+
:title => "My Widget",
|
29
|
+
:gauges => [@gauge1]
|
30
|
+
)
|
31
|
+
widget.gauges.should == [@gauge1]
|
19
32
|
end
|
20
|
-
|
21
|
-
it "should
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
widget.report.should == report
|
33
|
+
|
34
|
+
it "should calculate the correct tick" do
|
35
|
+
widget = FnordMetric::Widget.new(
|
36
|
+
:title => "My Widget",
|
37
|
+
:gauges => [@gauge1]
|
38
|
+
)
|
39
|
+
widget.tick.should == 60*60*24
|
28
40
|
end
|
29
|
-
|
30
|
-
it "should
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
widget.metrics.last.should be_a(FnordMetric::CountMetric)
|
38
|
-
widget.metrics.last.token.should == :second_metric
|
41
|
+
|
42
|
+
it "should raise an error if two gauges with different ticks are added" do
|
43
|
+
lambda{
|
44
|
+
widget = FnordMetric::Widget.new(
|
45
|
+
:title => "My Widget",
|
46
|
+
:gauges => [@gauge1, @gauge2]
|
47
|
+
)
|
48
|
+
}.should raise_error
|
39
49
|
end
|
40
50
|
|
41
|
-
it "should
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
widget.
|
48
|
-
|
49
|
-
|
50
|
-
widget.metrics.last.should be_a(FnordMetric::CountMetric)
|
51
|
-
widget.metrics.last.token.should == :second_metric
|
51
|
+
it "should generate the correct default range for daily graphs without include current" do
|
52
|
+
widget = FnordMetric::Widget.new(
|
53
|
+
:title => "My Widget",
|
54
|
+
:include_current => false,
|
55
|
+
:gauges => [@gauge1]
|
56
|
+
)
|
57
|
+
range = widget.default_range(Time.utc(1992,01,13,18,23,23))
|
58
|
+
Time.at(range.last).utc.should == Time.utc(1992,01,13,00,00)
|
59
|
+
Time.at(range.first).utc.should == Time.utc(1991,12,14,00,00)
|
52
60
|
end
|
53
61
|
|
54
|
-
it "should
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
62
|
+
it "should generate the correct default range for daily graphs with include current" do
|
63
|
+
widget = FnordMetric::Widget.new(
|
64
|
+
:title => "My Widget",
|
65
|
+
:gauges => [@gauge1]
|
66
|
+
)
|
67
|
+
range = widget.default_range(Time.utc(1992,01,13,18,23,23))
|
68
|
+
Time.at(range.last).utc.should == Time.utc(1992,01,14,00,00)
|
69
|
+
Time.at(range.first).utc.should == Time.utc(1991,12,15,00,00)
|
60
70
|
end
|
61
71
|
|
62
|
-
it "should generate
|
63
|
-
widget = FnordMetric::Widget.new(
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
72
|
+
it "should generate the correct default range for hourly graphs with include current" do
|
73
|
+
widget = FnordMetric::Widget.new(
|
74
|
+
:title => "My Widget",
|
75
|
+
:gauges => [@gauge2]
|
76
|
+
)
|
77
|
+
range = widget.default_range(Time.utc(1992,01,13,18,23,23))
|
78
|
+
Time.at(range.last).utc.should == Time.utc(1992,01,13,19,00)
|
79
|
+
Time.at(range.first).utc.should == Time.utc(1992,01,12,19,00)
|
68
80
|
end
|
69
81
|
|
70
|
-
it "should generate
|
71
|
-
widget = FnordMetric::Widget.new(
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
82
|
+
it "should generate the correct default range for hourly graphs with include current" do
|
83
|
+
widget = FnordMetric::Widget.new(
|
84
|
+
:title => "My Widget",
|
85
|
+
:include_current => false,
|
86
|
+
:gauges => [@gauge2]
|
87
|
+
)
|
88
|
+
range = widget.default_range(Time.utc(1992,01,13,18,23,23))
|
89
|
+
Time.at(range.last).utc.should == Time.utc(1992,01,13,18,00)
|
90
|
+
Time.at(range.first).utc.should == Time.utc(1992,01,12,18,00)
|
79
91
|
end
|
80
92
|
|
81
|
-
it "should generate
|
82
|
-
widget = FnordMetric::Widget.new(
|
93
|
+
it "should generate the correct ticks" do
|
94
|
+
widget = FnordMetric::Widget.new(
|
95
|
+
:title => "My Widget",
|
96
|
+
:gauges => [@gauge2]
|
97
|
+
)
|
83
98
|
Delorean.time_travel_to(Time.utc(1992,01,13,18,23,23)) do
|
84
|
-
widget.
|
85
|
-
widget.
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
it "should generate a default range for hourly graphs" do
|
90
|
-
widget = FnordMetric::Widget.new(:tick => 1.hour)
|
91
|
-
Delorean.time_travel_to(Time.utc(1992,01,13,18,23,23)) do
|
92
|
-
widget.ticks.length.should == 24
|
93
|
-
widget.ticks.first.first.utc.should == Time.utc(1992,1,12,19,00,00)
|
94
|
-
widget.ticks.first.last.utc.should == Time.utc(1992,1,12,20,00,00)
|
95
|
-
widget.ticks.last.first.utc.should == Time.utc(1992,1,13,18,0,0)
|
96
|
-
widget.ticks.last.last.utc.should == Time.utc(1992,1,13,19,00,00)
|
99
|
+
Time.at(widget.ticks[0]).should == Time.utc(1992,01,12,19,00)
|
100
|
+
Time.at(widget.ticks[1]).should == Time.utc(1992,01,12,20,00)
|
101
|
+
Time.at(widget.ticks[-1]).should == Time.utc(1992,01,13,19,00)
|
102
|
+
Time.at(widget.ticks[-2]).should == Time.utc(1992,01,13,18,00)
|
97
103
|
end
|
98
104
|
end
|
99
105
|
|
100
106
|
private
|
101
|
-
|
107
|
+
|
102
108
|
def ranges_should_match!(a, b)
|
103
109
|
(a.first.to_i - b.first.to_i).should == 0
|
104
110
|
(a.last.to_i - b.last.to_i).should == 0
|
data/spec/worker_spec.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require ::File.expand_path('../spec_helper.rb', __FILE__)
|
2
|
+
|
3
|
+
describe FnordMetric::Worker do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@worker = FnordMetric::Worker.new(
|
7
|
+
{ :fnordpsace => proc{} },
|
8
|
+
:redis_prefix => "fnordmetric"
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should generate the correct pubsub-key" do
|
13
|
+
@worker.pubsub_key.should == "fnordmetric-announce"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should generate the correct queue-key" do
|
17
|
+
@worker.queue_key.should == "fnordmetric-queue"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should generate the correct event-key" do
|
21
|
+
@worker.event_key("myevent").should == "fnordmetric-event-myevent"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should generate the correct stats-key" do
|
25
|
+
@worker.stats_key.should == "fnordmetric-stats"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should add a namespace"
|
29
|
+
it "should add a namespace and pass options"
|
30
|
+
it "should add a namespace and the key"
|
31
|
+
it "should add a namespace and instance_eval the block"
|
32
|
+
|
33
|
+
it "should find a namespace by key"
|
34
|
+
it "should find the namespace default namespace without key"
|
35
|
+
|
36
|
+
end
|
37
|
+
|
data/test_stream.sh
ADDED
@@ -0,0 +1,187 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
if [ "$1" != "stream" ]
|
4
|
+
then
|
5
|
+
if [ "$2" != "" ]
|
6
|
+
then
|
7
|
+
sh $0 stream | nc $1 $2
|
8
|
+
else
|
9
|
+
echo "usage: $0 host port"
|
10
|
+
exit
|
11
|
+
fi
|
12
|
+
else
|
13
|
+
while true; do
|
14
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
15
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
16
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
17
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
18
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
19
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
20
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
21
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
22
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"cnhsdgas6456\"}"
|
23
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
24
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
25
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
26
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
27
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
28
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
29
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
30
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
31
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
32
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
33
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
34
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
35
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
36
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
37
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
38
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
39
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"cnhsdgas6456\"}"
|
40
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
41
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
42
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
43
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
44
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
45
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
46
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
47
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
48
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
49
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
50
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
51
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"cnhsdgas6456\"}"
|
52
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
53
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
54
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
55
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
56
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
57
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
58
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
59
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
60
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
61
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
62
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
63
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
64
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
65
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
66
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
67
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
68
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"cnhsdgas6456\"}"
|
69
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
70
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
71
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
72
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
73
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
74
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
75
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
76
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
77
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
78
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
79
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
80
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
81
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"cnhsdgas6456\"}"
|
82
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
83
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
84
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
85
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
86
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
87
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
88
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
89
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
90
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
91
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
92
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
93
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
94
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"cnhsdgas6456\"}"
|
95
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
96
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
97
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
98
|
+
sleep 0.06
|
99
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
100
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
101
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
102
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
103
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
104
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
105
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
106
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
107
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"cnhsdgas6456\"}"
|
108
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
109
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
110
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
111
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
112
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
113
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
114
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
115
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
116
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
117
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
118
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
119
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
120
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
121
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
122
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
123
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
124
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"cnhsdgas6456\"}"
|
125
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
126
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
127
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
128
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
129
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
130
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
131
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
132
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
133
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
134
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
135
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
136
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"cnhsdgas6456\"}"
|
137
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
138
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
139
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
140
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
141
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
142
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
143
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
144
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
145
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
146
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
147
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
148
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
149
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
150
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
151
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
152
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
153
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"cnhsdgas6456\"}"
|
154
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
155
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
156
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"43sdf5435syf\"}"
|
157
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
158
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
159
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
160
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
161
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
162
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
163
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
164
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
165
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
166
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"cnhsdgas6456\"}"
|
167
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
168
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
169
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
170
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
171
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
172
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
173
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
174
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"hgfhw3ydgfsd\"}"
|
175
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"wurfhjfghfgh\"}"
|
176
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
177
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
178
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
179
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"cnhsdgas6456\"}"
|
180
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
181
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
182
|
+
echo "{\"_type\": \"foobar\", \"_session\": \"fghfgh7asdfa\"}"
|
183
|
+
|
184
|
+
sleep 0.15
|
185
|
+
done
|
186
|
+
fi
|
187
|
+
|