lumbersexual 0.1.1 → 0.2.0
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.
- checksums.yaml +8 -8
- data/.travis.yml +1 -0
- data/README.md +15 -1
- data/exe/lumbersexual +32 -17
- data/lib/lumbersexual/version.rb +1 -1
- data/lumbersexual.gemspec +1 -1
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OWRkYjM5NGMwOTFjMjVkNjhmNWI4YWU0MzI2ODE4MzE1ZDRmMWY1ZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MTQxY2JhMDZkNDlkNjk1ZWI5NmUzMzMyZDQ2MjY2ZjY2NzhmN2QxZg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YTkxNTNlZWE3ZWE0NTJjZWU3MjJiMzBmZTJiOGUyZWFmYzdkZDhhYjRkMDM3
|
10
|
+
Njk4ZWIwY2IwMTZlYWUxYzM1ODI3YTRjYzYwZTc0Y2ZmZmVjM2ViODljOTQ2
|
11
|
+
M2M4NTk1NzFmMDFhYjdjZWU3MmI4NDAzZGM0MTk3Zjc2YmJiMzg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NTkzNGQxZTE3ZTMxMDFmMzVkYWJlZmM0NTAxN2M3ZDk3MzZkNWJlYjdhMjYx
|
14
|
+
MWI0NjE1MWE4MzFiYjUwMjUwMjAzYjJhZTI3MWNmY2ZkMWU3NGEyNjdhNGIx
|
15
|
+
OWI2YWU4ZGFkYmMwNDVkMmI2ZTQxNDRiYjUzODQzY2ZmZGVkMzI=
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Lumbersexual [](https://travis-ci.org/sampointer/lumbersexual)
|
1
|
+
# Lumbersexual [](https://travis-ci.org/sampointer/lumbersexual) [](https://badge.fury.io/rb/lumbersexual)
|
2
2
|
|
3
3
|
<img align="right" width="158" height="144" src="etc/assets/lumber-156795_960_720.png" alt="Lumbersexual" />
|
4
4
|
This gem generates random-enough syslog entries for the purposes of testing syslog throughput, aggregated logging infrastructures and log index performance.
|
@@ -15,6 +15,20 @@ A dictionary file is needed from which to generate the randomized messages. Unde
|
|
15
15
|
$ lumbersexual --help
|
16
16
|
```
|
17
17
|
|
18
|
+
## Telemetry
|
19
|
+
By supplying the switch `--statsdhost` with a hostname you can turn on statsd metric generation. Lumbersexual will assume it can write to a statsd-like daemon on UDP 8125 and will supply 2 types of telemetry.
|
20
|
+
|
21
|
+
* During a run each thread will increment a counter at the path `lumbersexual.thread.<UUID>` (where UUID is a randomized string for each thread) each time a message is successfully sent.
|
22
|
+
* At the end of a run the following metric paths will be produced:
|
23
|
+
|
24
|
+
```
|
25
|
+
lumbersexual.run.messages_total # gauge
|
26
|
+
lumbersexual.run.elapsed # timer
|
27
|
+
lumbersexual.run.rate # gauge
|
28
|
+
```
|
29
|
+
|
30
|
+
It is up to you to use the aggregation functions of telemetry system to combine these into a form you find acceptable.
|
31
|
+
|
18
32
|
## Development
|
19
33
|
|
20
34
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. Run `bundle exec lumbersexual` to use the gem in this directory, ignoring other installed copies of this gem.
|
data/exe/lumbersexual
CHANGED
@@ -6,6 +6,8 @@ require "syslog"
|
|
6
6
|
require "thread"
|
7
7
|
require "timeout"
|
8
8
|
require "etc"
|
9
|
+
require "statsd-ruby"
|
10
|
+
require "securerandom"
|
9
11
|
|
10
12
|
options = Slop.parse do |o|
|
11
13
|
o.string '-D', '--dictionaryfile', 'path to dictionary file (default: /etc/dictionaries-common/words)', default: '/etc/dictionaries-common/words'
|
@@ -15,6 +17,7 @@ options = Slop.parse do |o|
|
|
15
17
|
o.integer '-m', '--minwords', 'minimum number of words per message (default: 3)', default: 3
|
16
18
|
o.array '-p', '--priorities', 'additional comma-seperated priorities', default: []
|
17
19
|
o.integer '-r', '--rate', 'messages per second per thread (default: 0, unlimited)', default: 0
|
20
|
+
o.string '-s', '--statsdhost', 'send statsd telemetry to the named host (default: off)', default: nil
|
18
21
|
o.integer '-T', '--threads', 'number of threads (defaults to number of cores * 2)', default: Etc.nprocessors * 2
|
19
22
|
o.integer '-t', '--timeout', 'length of execution. 0 for forever (default: 0)', default: 0
|
20
23
|
end
|
@@ -55,36 +58,43 @@ puts "Rate per thread: #{options[:rate]}/s"
|
|
55
58
|
puts "Total rate: #{options[:rate] * options[:threads]}/s"
|
56
59
|
puts "Minimum words per message: #{options[:minwords]}"
|
57
60
|
puts "Maximum words per message: #{options[:maxwords]}"
|
61
|
+
puts "Statsd host: #{options[:statsdhost]}" if options[:statsdhost]
|
58
62
|
puts "Running ..."
|
59
63
|
|
60
64
|
# Run until we're done
|
61
65
|
global_count = 0
|
62
66
|
threads = []
|
63
67
|
mutex = Mutex.new
|
68
|
+
statsd_global = Statsd.new if options[:statsdhost]
|
64
69
|
start_time = Time.now
|
65
70
|
|
66
71
|
begin
|
67
72
|
options[:threads].times do
|
68
73
|
threads << Thread.new {
|
74
|
+
# Configure telemetry
|
75
|
+
statsd = Statsd.new(options[:statsdhost]).tap { |s| s.namespace = "lumbersexual.thread.#{SecureRandom.uuid}" } if options[:statsdhost]
|
76
|
+
|
69
77
|
while true do
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
78
|
+
# Connect to syslog with some sane options and log a message
|
79
|
+
message = String.new
|
80
|
+
number_of_words = rand(options[:minwords]..options[:maxwords])
|
81
|
+
words.sample(number_of_words).each { |w| message << "#{w} " }
|
82
|
+
ident = "lumbersexual-#{words.sample}"
|
83
|
+
facility = facilities.sample
|
84
|
+
priority = priorities.sample
|
85
|
+
|
86
|
+
sleep pause
|
87
|
+
mutex.synchronize {
|
88
|
+
syslog = Syslog.open(ident, Syslog::LOG_CONS | Syslog::LOG_NDELAY | Syslog::LOG_PID, priority)
|
89
|
+
syslog.log(facility, message)
|
90
|
+
global_count += 1
|
91
|
+
statsd.increment [ facility, priority, 'messages_sent' ].join('.') if options[:statsdhost]
|
92
|
+
syslog.close
|
93
|
+
}
|
85
94
|
|
86
95
|
end
|
87
96
|
}
|
97
|
+
|
88
98
|
end
|
89
99
|
|
90
100
|
Timeout::timeout(options[:timeout]) {
|
@@ -94,9 +104,14 @@ begin
|
|
94
104
|
rescue Timeout::Error, Interrupt
|
95
105
|
end_time = Time.now
|
96
106
|
elapsed = end_time - start_time
|
97
|
-
|
107
|
+
rate = global_count / elapsed
|
108
|
+
statsd_global = Statsd.new(options[:statsdhost]).tap { |s| s.namespace = "lumbersexual.run" } if options[:statsdhost]
|
109
|
+
puts "Sent: #{global_count}"
|
110
|
+
statsd_global.gauge 'messages_total', global_count if options[:statsdhost]
|
98
111
|
puts "Elapsed time: #{elapsed}"
|
99
|
-
|
112
|
+
statsd_global.timing 'elapsed', elapsed if options[:statsdhost]
|
113
|
+
puts "Messages per second: #{rate}"
|
114
|
+
statsd_global.gauge 'rate', rate if options[:statsdhost]
|
100
115
|
puts "Complete"
|
101
116
|
exit 0
|
102
117
|
end
|
data/lib/lumbersexual/version.rb
CHANGED
data/lumbersexual.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lumbersexual
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Pointer
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 4.3.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: statsd-ruby
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.3.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.3.0
|
69
83
|
description: This gem generates random-enough syslog entries for the purposes of testing
|
70
84
|
syslog throughput, aggregated logging infrastructures and log index performance.
|
71
85
|
email:
|