meeseeks 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3dd446516cf1e5211bd4ae590deadda04210f795535a407fef054456cfc85ea6
4
- data.tar.gz: 83a44feecd92a141eeaa63e5415866cf3ffe6f7b036960bdf8286b0f76845987
3
+ metadata.gz: f8a0a151c08bf506a173bb9de62e082287bfd445e3fa472c418d95e5db737703
4
+ data.tar.gz: 380a26f7598ba2ad6cdb8860235957a65527dd34c13e68fe7f00b3764fdd42c7
5
5
  SHA512:
6
- metadata.gz: 8db6c9f2ba9e71eb67d31b7c413f0266ac9bc6563560b3513bfc29b9166c25549ab98b8f5a32130f9405dfb48f442ddac46ff297f7381f1ebf209fc9247c6ddf
7
- data.tar.gz: 693eaa5ca21a5ccc3398668f814bf0a64c2b12145e0b811e2510008adabde1b4e473baafd29f196051d94237b7e9d793910068e9e6fc25bcfdfd5a33e0e6204e
6
+ metadata.gz: 96f1db2392ebebc6e843ee117fdfa80ad1aedb4194eaa2834cb36be3b54b80bac16925f048ede997ff6a6ba2c7c23a56c21afd4499ed63040617fe0b061a12a7
7
+ data.tar.gz: 5a487c1c8c8167ed5af4b87aca6e2f18a22e74fb179b49781d3447f33d408d391689538027cf980ccca3e38666f23446d52fdf4ee135dbc34ac1ed1e6327e0a3
data/.gitignore CHANGED
@@ -10,3 +10,4 @@
10
10
  .rspec_status
11
11
  .bash_history
12
12
  test-env.sh
13
+ TODO.md
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- meeseeks (0.1.4)
4
+ meeseeks (0.1.5)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -7,6 +7,7 @@
7
7
 
8
8
  ⚠️ Do not use in production ⚠️
9
9
 
10
+
10
11
  ## Usage
11
12
 
12
13
  Asynchronously submit metrics to a Circonus HTTPTrap:
@@ -36,35 +37,73 @@ and use the singleton (to the same effect as the example above):
36
37
  Meeseeks.instance.record('group', 'metric', 22.02)
37
38
  ```
38
39
 
40
+
39
41
  ### Meeseeks statistics
40
42
 
41
- Meeseeks will instrument itself on Circonus. Look for these metrics:
43
+ Meeseeks will instrument itself on Circonus (these metrics will be added to each
44
+ batch submitted to Circonus, so for `max_batch_size: 100` we will really submit
45
+ 104 metrics each time). Look for these metrics:
42
46
 
43
47
  - ``meeseeks`batch_size`` (how many measurements were submitted per request to Circonus?)
44
48
  - ``meeseeks`cycle_count`` (how many intervals did this meeseeks instance do?)
45
49
  - ``meeseeks`queue_size`` (how many measurements are waiting in the queue to be submitted?)
46
- - ``meeseeks`request_count`` (how many requests to Circonus did this meeseeks instance do?)
50
+ - ``meeseeks`submit_count`` (how many requests to Circonus did this meeseeks instance do?)
51
+
52
+
53
+ ### Debugging
54
+
55
+ We tried to make Meeseeks inspectable:
56
+
57
+ ```ruby
58
+ # Basic stats
59
+ > Meeseeks.stats
60
+ => {
61
+ "queue_size": 0,
62
+ "harvester": {
63
+ "cycle_count": 7,
64
+ "running": true
65
+ },
66
+ "http_trap": {
67
+ "submit_count": 7,
68
+ "last_submit_at": "2018-10-19 10:42:35 +0000"
69
+ }
70
+ }
71
+
72
+ # You can even dive into the requests to Circonus, and the responses
73
+ # received (including bodies):
74
+ > Meeseeks.http_trap.last.request
75
+ => #<Net::HTTP::Put PUT>
76
+ > Meeseeks.http_trap.last.response
77
+ => #<Net::HTTPOK 200 OK readbody=true>
78
+
79
+ ```
80
+
47
81
 
48
82
  ## Development
49
83
 
50
84
  After checking out the repo, run `make build` - you need only docker on your machine, no ruby, rvm, or any of that.
51
85
 
86
+
52
87
  ### Launch a shell or console
53
88
 
54
89
  To try it out locally while developing, you can `make shell` to open a shell in a container where the gem's dependencies are installed, and you can use `make console` as an alias for entering `make shell` and `rake console`.
55
90
 
91
+
56
92
  ### Run the tests
57
93
 
58
94
  During development, you can just keep `make guard` running and it will test files as you edit them. You can also run `make test` to run all of the tests.
59
95
 
96
+
60
97
  ### Automatically fix rubocop offenses
61
98
 
62
99
  Run `make rubocop`.
63
100
 
101
+
64
102
  ## Contributing
65
103
 
66
104
  Bug reports and pull requests are welcome on GitHub at https://github.com/coup-mobility/meeseeks. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
67
105
 
106
+
68
107
  ## Code of Conduct
69
108
 
70
109
  Everyone interacting in the Meeseeks project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/coup-mobility/meeseeks/blob/master/CODE_OF_CONDUCT.md).
@@ -17,6 +17,13 @@ module Meeseeks
17
17
  @lock = Mutex.new
18
18
  end
19
19
 
20
+ def stats
21
+ {
22
+ cycle_count: @cycle_count,
23
+ running: running?
24
+ }
25
+ end
26
+
20
27
  def start
21
28
  @continue = true
22
29
  return if @thread&.alive?
@@ -61,15 +68,15 @@ module Meeseeks
61
68
  rescue StandardError
62
69
  # TODO: think about whether or not this is a good idea. It's nice to
63
70
  # recover from the occasional HTTP hickup, but when we can't submit
64
- # to Circonus for whatever reason, we'll fill up the RAM. Do we want
65
- # to implement limited retries here, or do we want to impose a max
66
- # length on the queue, or what do we want to do?
71
+ # to Circonus at all for whatever reason, we'll fill up the RAM. Do we
72
+ # want to implement limited retries here, or do we want to impose a
73
+ # max length on the queue, or what do we want to do?
67
74
  batch.map { |d| @queue.push(d) }
68
75
  end
69
76
 
70
77
  # Even if the batch is empty, we want to submit our own statistics
71
78
  # for this cycle, and that's why we don't break before the submit
72
- break if batch.empty?
79
+ break if @queue.empty?
73
80
  end
74
81
  end
75
82
 
@@ -90,7 +97,7 @@ module Meeseeks
90
97
  { meeseeks: {} }.tap do |stats|
91
98
  stats[:meeseeks].merge!(Payload.for('batch_size', batch_size))
92
99
  stats[:meeseeks].merge!(Payload.for('queue_size', @queue.size))
93
- stats[:meeseeks].merge!(Payload.for('request_count', submit_count))
100
+ stats[:meeseeks].merge!(Payload.for('submit_count', submit_count))
94
101
  stats[:meeseeks].merge!(Payload.for('cycle_count', @cycle_count))
95
102
  end
96
103
  end
@@ -3,6 +3,7 @@
3
3
  require 'net/http'
4
4
  require 'json'
5
5
 
6
+ # See https://login.circonus.com/resources/docs/user/Data/CheckTypes/HTTPTrap.html
6
7
  module Meeseeks
7
8
  class HTTPTrap
8
9
  attr_reader :last, :submit_count
@@ -22,6 +23,13 @@ module Meeseeks
22
23
  JSON.parse res.body
23
24
  end
24
25
 
26
+ def stats
27
+ {
28
+ submit_count: @submit_count,
29
+ last_submit_at: @last&.time
30
+ }
31
+ end
32
+
25
33
  private
26
34
 
27
35
  def request(measurements)
@@ -44,6 +44,14 @@ module Meeseeks
44
44
  false
45
45
  end
46
46
 
47
+ def stats
48
+ {
49
+ queue_size: @queue.size,
50
+ harvester: @harvester.stats,
51
+ http_trap: @http_trap.stats
52
+ }
53
+ end
54
+
47
55
  private
48
56
 
49
57
  def create_http_trap
@@ -14,9 +14,9 @@ module Meeseeks
14
14
  def self.for(metric, value, time = DateTime.now)
15
15
  {
16
16
  metric.to_s => {
17
- '_ts' => time.to_datetime.strftime('%Q'),
17
+ '_ts' => time.to_datetime.strftime('%Q').to_i,
18
18
  '_value' => value,
19
- '_type' => 'i'
19
+ '_type' => 'n'
20
20
  }
21
21
  }
22
22
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Meeseeks
4
- VERSION = '0.1.4'
4
+ VERSION = '0.1.5'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meeseeks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jannis Hermanns
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-19 00:00:00.000000000 Z
11
+ date: 2018-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler