qless 0.10.2 → 0.10.3

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 (4) hide show
  1. checksums.yaml +4 -4
  2. data/exe/qless-stats +108 -0
  3. data/lib/qless/version.rb +1 -1
  4. metadata +20 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7fc1815799161f2cfc80e99c9a91f357d7fa2292
4
- data.tar.gz: 407a493d07be06d5fb00e9751c86603db1eda4e0
3
+ metadata.gz: e2aefe62cf34864662a68ef488a8b654b90b5654
4
+ data.tar.gz: 8838c1771b595da7d1b7044b374763ecf6690d26
5
5
  SHA512:
6
- metadata.gz: d7495a06deeac6270f9587be1104e07e0a98771c0c71c41e05472ec35657089a75188a4efac16c48a26d01f3bb61c80ee20e4c9966a727299a8c7aabd0921252
7
- data.tar.gz: 6d2cd3740de9c5ebdaa34b01061e8617e900e1c9bac7a904d39fac242f38c4f3d7dc5529af9e3f7843fba4c4bd7c15074d11bded2d0e59caa880eb8c0a9710cc
6
+ metadata.gz: 2bf3a2f150016910f64f42481cb02dd1b2330e721ce9e6646693da078e0d22853b7b0d71af7c0bc08e64e96cda28eaaaeeef5b331ceffe847c576744dd9a3a32
7
+ data.tar.gz: b6eb4d8bb30b09d1836cc66ddd4c88d00c49cace8397f8426cec9f295681868c6bad2aea38c53ef4294c624800077d01367b72e405f4f8bc06e41eb68939b747
@@ -0,0 +1,108 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'qless'
4
+ require 'statsd'
5
+ require 'thor'
6
+
7
+ class Stats < Thor
8
+
9
+ class_option :redis, :default => 'redis://localhost:6379/0'
10
+ class_option :interval, :type => :numeric, :default => 60,
11
+ :desc => 'Interval (in seconds) between stats collections'
12
+ class_option :count, :type => :numeric, :default => 0,
13
+ :desc => 'Number of collections to perform; <= 0 cycles forever'
14
+
15
+ no_commands do
16
+ def qless
17
+ if @qless.nil?
18
+ @qless = Qless::Client.new(url: options[:redis])
19
+ end
20
+ @qless
21
+ end
22
+
23
+ def counter(count=0)
24
+ if count > 0 then
25
+ return count.times
26
+ else
27
+ return Enumerator.new do |enum|
28
+ index = 0
29
+ while true do
30
+ enum << index
31
+ index += 1
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ def periodically(count, interval)
38
+ start = Time.now.to_f
39
+ counter(count).each do |index|
40
+ target = start + interval * index
41
+ delay = [target - Time.now.to_f, 0].max
42
+ sleep(delay)
43
+
44
+ yield index
45
+ end
46
+ end
47
+ end
48
+
49
+ desc 'statsd', 'Emit metrics to statsd'
50
+ option :host, :type => :string, :default => 'localhost',
51
+ :desc => 'Statsd host.'
52
+ option :port, :type => :numeric, :default => 8125,
53
+ :desc => 'Statsd port.'
54
+ option :namespace, :type => :string, :default => nil,
55
+ :desc => 'Namespace for all metrics.'
56
+ option :postfix, :type => :string, :default => nil,
57
+ :desc => 'Postfix for all metrics.'
58
+ def statsd
59
+ client = Statsd.new(options[:host], options[:port]).tap do |c|
60
+ if not options[:namespace].nil?
61
+ c.namespace = options[:namespace]
62
+ end
63
+
64
+ if not options[:postfix].nil?
65
+ c.postfix = options[:postfix]
66
+ end
67
+ end
68
+
69
+ periodically(options[:count].to_i, options[:interval]) do
70
+ # Track per-queue information
71
+ qless.queues.counts.each do |counts|
72
+ queue = counts.delete('name')
73
+
74
+ # Counts of jobs in each state in this queue
75
+ counts['paused'] = counts['paused'] ? 1 : 0
76
+ counts.each do |key, value|
77
+ client.gauge "queues.#{queue}.#{key}", value
78
+ end
79
+
80
+ # Counts of completed / popped jobs and timing information
81
+ stats = qless.queues[queue].stats
82
+ client.gauge "queues.#{queue}.completed", stats['run']['count']
83
+ client.gauge "queues.#{queue}.popped", stats['wait']['count']
84
+ client.gauge "queues.#{queue}.failed", stats['failed']
85
+ client.gauge "queues.#{queue}.failures", stats['failures']
86
+ client.gauge "queues.#{queue}.retries", stats['retries']
87
+
88
+ ['run', 'wait'].each do |type|
89
+ client.gauge "queues.#{queue}.#{type}.avg", stats[type]['mean']
90
+ client.gauge "queues.#{queue}.#{type}.std-dev", stats[type]['std']
91
+ end
92
+ end
93
+
94
+ # Track failures
95
+ total = qless.jobs.failed.map do |failure, count|
96
+ client.gauge "failures.#{failure}", count
97
+ count
98
+ end.reduce(0, :+)
99
+ client.gauge 'failures', total
100
+
101
+ # Track workers
102
+ client.gauge 'workers', qless.workers.counts.length
103
+ end
104
+ end
105
+
106
+ end
107
+
108
+ Stats.start(ARGV)
@@ -1,5 +1,5 @@
1
1
  # Encoding: utf-8
2
2
 
3
3
  module Qless
4
- VERSION = '0.10.2'
4
+ VERSION = '0.10.3'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qless
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.2
4
+ version: 0.10.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Lecocq
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-03-31 00:00:00.000000000 Z
12
+ date: 2016-04-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: metriks
@@ -73,14 +73,28 @@ dependencies:
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: 1.3.2
76
+ version: '1.3'
77
77
  type: :runtime
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: 1.3.2
83
+ version: '1.3'
84
+ - !ruby/object:Gem::Dependency
85
+ name: statsd-ruby
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '1.3'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '1.3'
84
98
  - !ruby/object:Gem::Dependency
85
99
  name: thin
86
100
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +150,7 @@ email:
136
150
  executables:
137
151
  - qless-web
138
152
  - qless-config
153
+ - qless-stats
139
154
  extensions: []
140
155
  extra_rdoc_files: []
141
156
  files:
@@ -145,6 +160,7 @@ files:
145
160
  - Rakefile
146
161
  - exe/install_phantomjs
147
162
  - exe/qless-config
163
+ - exe/qless-stats
148
164
  - exe/qless-web
149
165
  - lib/qless.rb
150
166
  - lib/qless/config.rb