inst-jobs-statsd 2.1.0 → 3.0.2
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 +4 -4
- data/lib/inst-jobs-statsd.rb +22 -18
- data/lib/inst_jobs_statsd/default_tracking.rb +3 -1
- data/lib/inst_jobs_statsd/ext/job.rb +13 -0
- data/lib/inst_jobs_statsd/jobs_tracker.rb +5 -1
- data/lib/inst_jobs_statsd/naming.rb +20 -25
- data/lib/inst_jobs_statsd/stats/counters/complete.rb +23 -0
- data/lib/inst_jobs_statsd/stats/counters/create.rb +23 -0
- data/lib/inst_jobs_statsd/stats/counters/run.rb +2 -0
- data/lib/inst_jobs_statsd/stats/counters.rb +2 -0
- data/lib/inst_jobs_statsd/stats/periodic/failed.rb +2 -0
- data/lib/inst_jobs_statsd/stats/periodic/queue.rb +3 -1
- data/lib/inst_jobs_statsd/stats/periodic/run.rb +3 -1
- data/lib/inst_jobs_statsd/stats/periodic.rb +6 -2
- data/lib/inst_jobs_statsd/stats/timing/failed.rb +2 -0
- data/lib/inst_jobs_statsd/stats/timing/perform.rb +2 -0
- data/lib/inst_jobs_statsd/stats/timing/pop.rb +2 -0
- data/lib/inst_jobs_statsd/stats/timing.rb +7 -3
- data/lib/inst_jobs_statsd/version.rb +3 -1
- metadata +89 -92
- data/lib/inst_jobs_statsd/stats/counters/failed.rb +0 -28
- data/spec/factories/jobs.rb +0 -9
- data/spec/factories/workers.rb +0 -9
- data/spec/gemfiles/42.gemfile +0 -8
- data/spec/gemfiles/51.gemfile +0 -8
- data/spec/gemfiles/60.gemfile +0 -7
- data/spec/inst_jobs_statsd/jobs_tracker_spec.rb +0 -29
- data/spec/inst_jobs_statsd/naming_spec.rb +0 -56
- data/spec/inst_jobs_statsd/stats/counters/failed_spec.rb +0 -20
- data/spec/inst_jobs_statsd/stats/counters/run_spec.rb +0 -27
- data/spec/inst_jobs_statsd/stats/periodic/failed_spec.rb +0 -31
- data/spec/inst_jobs_statsd/stats/periodic/queue_spec.rb +0 -95
- data/spec/inst_jobs_statsd/stats/periodic/run_spec.rb +0 -53
- data/spec/inst_jobs_statsd/stats/periodic_spec.rb +0 -63
- data/spec/inst_jobs_statsd/stats/timing/failed_spec.rb +0 -25
- data/spec/inst_jobs_statsd/stats/timing/perform_spec.rb +0 -35
- data/spec/inst_jobs_statsd/stats/timing/pop_spec.rb +0 -34
- data/spec/inst_jobs_statsd/stats/timing_spec.rb +0 -35
- data/spec/inst_statsd/default_tracking_spec.rb +0 -16
- data/spec/matchers.rb +0 -3
- data/spec/setup_test_db.rb +0 -49
- data/spec/spec_helper.rb +0 -61
@@ -1,53 +0,0 @@
|
|
1
|
-
RSpec.describe InstJobsStatsd::Stats::Periodic::Run do
|
2
|
-
before do
|
3
|
-
InstJobsStatsd::Stats::Periodic.instance_variable_set(:@instance, nil)
|
4
|
-
end
|
5
|
-
|
6
|
-
describe '.enable' do
|
7
|
-
it 'enables all the things' do
|
8
|
-
expect(InstJobsStatsd::Stats::Periodic::Run).to receive(:enable_run_depth)
|
9
|
-
expect(InstJobsStatsd::Stats::Periodic::Run).to receive(:enable_run_age)
|
10
|
-
InstJobsStatsd::Stats::Periodic::Run.enable
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
describe '.report_run_depth' do
|
15
|
-
let(:x) { Struct.new(:perform).new(true) }
|
16
|
-
let(:now) { Delayed::Job.db_time_now }
|
17
|
-
|
18
|
-
before do
|
19
|
-
InstJobsStatsd::Stats::Periodic::Run.enable_run_depth
|
20
|
-
|
21
|
-
x.delay.perform
|
22
|
-
x.delay.perform
|
23
|
-
Delayed::Job.first.update(locked_at: Delayed::Job.db_time_now, locked_by: 'test')
|
24
|
-
end
|
25
|
-
|
26
|
-
it do
|
27
|
-
expect(InstStatsd::Statsd).to receive(:gauge)
|
28
|
-
.with(array_including(/\.run_depth$/), 1, 1, { short_stat: anything, tags: {} })
|
29
|
-
InstJobsStatsd::Stats::Periodic::Run.report_run_depth
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe '.report_run_age' do
|
34
|
-
let(:x) { Struct.new(:perform).new(true) }
|
35
|
-
let(:now) { Delayed::Job.db_time_now }
|
36
|
-
|
37
|
-
before do
|
38
|
-
InstJobsStatsd::Stats::Periodic::Run.enable_run_age
|
39
|
-
|
40
|
-
x.delay.perform
|
41
|
-
x.delay.perform
|
42
|
-
Delayed::Job.first.update(locked_at: now, locked_by: 'test')
|
43
|
-
end
|
44
|
-
|
45
|
-
it do
|
46
|
-
expect(InstStatsd::Statsd).to receive(:gauge)
|
47
|
-
.ordered.with(array_including(/\.run_age_total$/), number_near(0), 1, { short_stat: anything, tags: {} })
|
48
|
-
expect(InstStatsd::Statsd).to receive(:gauge)
|
49
|
-
.ordered.with(array_including(/\.run_age_max$/), number_near(0), 1, { short_stat: anything, tags: {} })
|
50
|
-
InstJobsStatsd::Stats::Periodic::Run.report_run_age
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
RSpec.describe InstJobsStatsd::Stats::Periodic do
|
2
|
-
before(:each) do
|
3
|
-
Delayed::Worker.lifecycle.reset!
|
4
|
-
InstJobsStatsd::Stats::Periodic.instance_variable_set(:@instance, nil)
|
5
|
-
end
|
6
|
-
|
7
|
-
describe '.enable_callbacks' do
|
8
|
-
it 'only happens once' do
|
9
|
-
expect(InstJobsStatsd::Stats::Periodic::Callbacks).to receive(:new).once.and_call_original
|
10
|
-
2.times { InstJobsStatsd::Stats::Periodic.enable_callbacks }
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
describe '.add' do
|
15
|
-
it 'does nothing if not enabled' do
|
16
|
-
expect_any_instance_of(InstJobsStatsd::Stats::Periodic::Callbacks).not_to receive(:add)
|
17
|
-
InstJobsStatsd::Stats::Periodic.add(-> {})
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'does something if enabled' do
|
21
|
-
expect_any_instance_of(InstJobsStatsd::Stats::Periodic::Callbacks)
|
22
|
-
.to receive(:add).and_call_original
|
23
|
-
InstJobsStatsd::Stats::Periodic.enable_callbacks
|
24
|
-
InstJobsStatsd::Stats::Periodic.add(-> {})
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe 'Callbacks' do
|
29
|
-
before(:each) do
|
30
|
-
InstJobsStatsd::Stats::Periodic.instance_variable_set(:@instance, nil)
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'calls the procs at the interval' do
|
34
|
-
InstJobsStatsd::Stats::Periodic.enable_callbacks
|
35
|
-
|
36
|
-
@count = 0
|
37
|
-
InstJobsStatsd::Stats::Periodic.add(-> { @count += 1 })
|
38
|
-
InstJobsStatsd::Stats::Periodic.add(-> { @count += 2 })
|
39
|
-
|
40
|
-
Timecop.freeze(Delayed::Job.db_time_now + 60.seconds) do
|
41
|
-
Delayed::Worker.lifecycle.run_callbacks(:work_queue_pop, nil, nil) {}
|
42
|
-
end
|
43
|
-
|
44
|
-
expect(@count).to eq 3
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe 'Timer' do
|
49
|
-
before(:each) { @did_block = false }
|
50
|
-
|
51
|
-
it 'does not call the block too soon' do
|
52
|
-
t = InstJobsStatsd::Stats::Periodic::Timer.new(60)
|
53
|
-
expect { t.tick { @did_block = true } }.not_to(change { @did_block })
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'calls the block after the interval elapses' do
|
57
|
-
t = InstJobsStatsd::Stats::Periodic::Timer.new(60)
|
58
|
-
Timecop.freeze(Delayed::Job.db_time_now + 60.seconds) do
|
59
|
-
expect { t.tick { @did_block = true } }.to(change { @did_block })
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
RSpec.describe InstJobsStatsd::Stats::Timing::Failed do
|
2
|
-
let(:worker) { build :worker }
|
3
|
-
let(:job) { build :job, run_at: 1.minute.ago }
|
4
|
-
|
5
|
-
before(:each) { Delayed::Worker.lifecycle.reset! }
|
6
|
-
|
7
|
-
describe '.enable' do
|
8
|
-
it 'enables all the things' do
|
9
|
-
expect(InstJobsStatsd::Stats::Timing::Failed).to receive(:enable_failure_timing)
|
10
|
-
InstJobsStatsd::Stats::Timing::Failed.enable
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
describe '.enable_failure_timing' do
|
15
|
-
it 'reports failure time' do
|
16
|
-
expect(InstStatsd::Statsd).to receive(:timing)
|
17
|
-
.once.with(array_including(/\.failed_after$/), any_args)
|
18
|
-
InstJobsStatsd::Stats::Timing::Failed.enable_failure_timing
|
19
|
-
Delayed::Worker.lifecycle.run_callbacks(
|
20
|
-
:error, worker, job, Exception.new('test')
|
21
|
-
) { @in_block = true }
|
22
|
-
expect(@in_block).to be_truthy
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
RSpec.describe InstJobsStatsd::Stats::Timing::Perform do
|
2
|
-
let(:worker) { build :worker }
|
3
|
-
let(:job) { build :job, run_at: 1.minute.ago }
|
4
|
-
|
5
|
-
before(:each) { Delayed::Worker.lifecycle.reset! }
|
6
|
-
|
7
|
-
describe '.enable' do
|
8
|
-
it 'enables all the things' do
|
9
|
-
expect(InstJobsStatsd::Stats::Timing::Perform).to receive(:enable_batching)
|
10
|
-
expect(InstJobsStatsd::Stats::Timing::Perform).to receive(:enable_perform_timing)
|
11
|
-
InstJobsStatsd::Stats::Timing::Perform.enable
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '.enable_batching' do
|
16
|
-
it 'does batching' do
|
17
|
-
expect(InstStatsd::Statsd).to receive(:batch).and_call_original
|
18
|
-
InstJobsStatsd::Stats::Timing::Perform.enable_batching
|
19
|
-
Delayed::Worker.lifecycle.run_callbacks(:perform, worker, job) { @in_block = true }
|
20
|
-
expect(@in_block).to be_truthy
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe '.enable_perform_timing' do
|
25
|
-
it 'reports queu and perform time' do
|
26
|
-
expect(InstStatsd::Statsd).to receive(:timing)
|
27
|
-
.once.ordered.with(array_including(/\.queue$/), any_args)
|
28
|
-
expect(InstStatsd::Statsd).to receive(:timing)
|
29
|
-
.once.ordered.with(array_including(/\.perform$/), any_args)
|
30
|
-
InstJobsStatsd::Stats::Timing::Perform.enable_perform_timing
|
31
|
-
Delayed::Worker.lifecycle.run_callbacks(:perform, worker, job) { @in_block = true }
|
32
|
-
expect(@in_block).to be_truthy
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
RSpec.describe InstJobsStatsd::Stats::Timing::Pop do
|
2
|
-
let(:worker) { build :worker }
|
3
|
-
let(:job) { build :job, run_at: 1.minute.ago }
|
4
|
-
|
5
|
-
before(:each) { Delayed::Worker.lifecycle.reset! }
|
6
|
-
|
7
|
-
describe '.enable' do
|
8
|
-
it 'enables all the things' do
|
9
|
-
expect(InstJobsStatsd::Stats::Timing::Pop).to receive(:enable_pop_timing)
|
10
|
-
expect(InstJobsStatsd::Stats::Timing::Pop).to receive(:enable_workqueue_pop_timing)
|
11
|
-
InstJobsStatsd::Stats::Timing::Pop.enable
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '.enable_pop_timing' do
|
16
|
-
it 'reports pop time' do
|
17
|
-
expect(InstStatsd::Statsd).to receive(:timing)
|
18
|
-
.once.ordered.with(array_including(/\.pop$/), any_args)
|
19
|
-
InstJobsStatsd::Stats::Timing::Pop.enable_pop_timing
|
20
|
-
Delayed::Worker.lifecycle.run_callbacks(:pop, worker) { @in_block = true }
|
21
|
-
expect(@in_block).to be_truthy
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe '.enable_workqueue_pop_timing' do
|
26
|
-
it 'reports pop time' do
|
27
|
-
expect(InstStatsd::Statsd).to receive(:timing)
|
28
|
-
.once.ordered.with(array_including(/\.workqueuepop$/), any_args)
|
29
|
-
InstJobsStatsd::Stats::Timing::Pop.enable_workqueue_pop_timing
|
30
|
-
Delayed::Worker.lifecycle.run_callbacks(:work_queue_pop, worker, {}) { @in_block = true }
|
31
|
-
expect(@in_block).to be_truthy
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
RSpec.describe InstJobsStatsd::Stats::Timing do
|
2
|
-
let(:job) { build :job, run_at: 1.minute.ago }
|
3
|
-
|
4
|
-
describe 'report_tinming' do
|
5
|
-
context 'with a block' do
|
6
|
-
it 'reports the elapsed time' do
|
7
|
-
expect(InstStatsd::Statsd).to receive(:time)
|
8
|
-
InstJobsStatsd::Stats::Timing.report_timing('test', job: job) { sleep 0.001 }
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
context 'without a block' do
|
13
|
-
it 'reports the given time' do
|
14
|
-
expect(InstStatsd::Statsd).to receive(:timing)
|
15
|
-
InstJobsStatsd::Stats::Timing.report_timing('test', job: job, timing: 123)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe 'report_job_timing_queued' do
|
21
|
-
it 'reports the stat' do
|
22
|
-
expect(InstStatsd::Statsd).to receive(:timing)
|
23
|
-
.with(array_including(/\.queue$/), any_args)
|
24
|
-
InstJobsStatsd::Stats::Timing.report_job_timing_queued(job)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe 'report_job_timing_failed' do
|
29
|
-
it 'reports the stat' do
|
30
|
-
expect(InstStatsd::Statsd).to receive(:timing)
|
31
|
-
.with(array_including(/\.failed_after$/), any_args)
|
32
|
-
InstJobsStatsd::Stats::Timing.report_job_timing_failed(job)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
RSpec.describe InstStatsd::DefaultTracking do
|
2
|
-
it 'includes methods defined in the base gem' do
|
3
|
-
expect(InstStatsd::DefaultTracking.respond_to?(:track_sql)).to be_truthy
|
4
|
-
end
|
5
|
-
|
6
|
-
describe 'track_job_stats' do
|
7
|
-
it 'defines :track_jobs' do
|
8
|
-
expect(InstStatsd::DefaultTracking.respond_to?(:track_jobs)).to be_truthy
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'only does it once' do
|
12
|
-
expect(InstJobsStatsd::JobsTracker).to receive(:new).once.and_call_original
|
13
|
-
2.times { InstStatsd::DefaultTracking.track_jobs }
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
data/spec/matchers.rb
DELETED
data/spec/setup_test_db.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
# All the below is essentially copied from inst-jobs spec_helper.rb,
|
2
|
-
# to create the test db, run migrations, etc
|
3
|
-
ENV['TEST_ENV_NUMBER'] ||= '1'
|
4
|
-
ENV['TEST_DB_HOST'] ||= 'localhost'
|
5
|
-
ENV['TEST_DB_DATABASE'] ||= "inst-jobs-test-#{ENV['TEST_ENV_NUMBER']}"
|
6
|
-
ENV['TEST_REDIS_CONNECTION'] ||= 'redis://localhost:6379/'
|
7
|
-
|
8
|
-
Delayed::Backend::Redis::Job.redis = Redis.new(url: ENV['TEST_REDIS_CONNECTION'])
|
9
|
-
Delayed::Backend::Redis::Job.redis.select ENV['TEST_ENV_NUMBER']
|
10
|
-
|
11
|
-
connection_config = {
|
12
|
-
adapter: :postgresql,
|
13
|
-
host: ENV['TEST_DB_HOST'].presence,
|
14
|
-
encoding: 'utf8',
|
15
|
-
username: ENV['TEST_DB_USERNAME'],
|
16
|
-
database: ENV['TEST_DB_DATABASE']
|
17
|
-
}
|
18
|
-
|
19
|
-
if ::Rails.version < '5'
|
20
|
-
class ActiveRecord::Migration
|
21
|
-
class << self
|
22
|
-
def [](_version); self; end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# create the test db if it does not exist, to help out wwtd
|
28
|
-
ActiveRecord::Base.establish_connection(connection_config.merge(database: 'postgres'))
|
29
|
-
begin
|
30
|
-
ActiveRecord::Base.connection.create_database(connection_config[:database])
|
31
|
-
rescue ActiveRecord::StatementInvalid
|
32
|
-
end
|
33
|
-
ActiveRecord::Base.establish_connection(connection_config)
|
34
|
-
# TODO reset db and migrate again, to test migrations
|
35
|
-
|
36
|
-
# Apply the migrations from the inst-jobs gem
|
37
|
-
inst_jobs_spec = Gem::Specification.find_by_name('inst-jobs')
|
38
|
-
if ::Rails.version >= '6'
|
39
|
-
sm = ActiveRecord::Base.connection.schema_migration
|
40
|
-
migrations = ActiveRecord::MigrationContext.new(inst_jobs_spec.gem_dir + '/db/migrate', sm).migrations
|
41
|
-
ActiveRecord::Migrator.new(:up, migrations, sm).migrate
|
42
|
-
migrations = ActiveRecord::MigrationContext.new(inst_jobs_spec.gem_dir + '/spec/migrate', sm).migrations
|
43
|
-
ActiveRecord::Migrator.new(:up, migrations, sm).migrate
|
44
|
-
else
|
45
|
-
ActiveRecord::Migrator.migrate(inst_jobs_spec.gem_dir + '/db/migrate')
|
46
|
-
ActiveRecord::Migrator.migrate(inst_jobs_spec.gem_dir + '/spec/migrate')
|
47
|
-
end
|
48
|
-
Delayed::Backend::ActiveRecord::Job.reset_column_information
|
49
|
-
Delayed::Backend::ActiveRecord::Job::Failed.reset_column_information
|
data/spec/spec_helper.rb
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
if /^2\.7/ =~ RUBY_VERSION && /51\./ =~ ENV['BUNDLE_GEMFILE'] # Limit coverage to one build
|
2
|
-
require 'simplecov'
|
3
|
-
|
4
|
-
SimpleCov.start do
|
5
|
-
add_filter 'lib/inst_jobs_statsd/version.rb'
|
6
|
-
add_filter 'spec'
|
7
|
-
track_files 'lib/**/*.rb'
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
require 'inst-jobs-statsd'
|
12
|
-
require 'delayed/testing'
|
13
|
-
|
14
|
-
require 'byebug'
|
15
|
-
require 'database_cleaner'
|
16
|
-
require 'factory_girl'
|
17
|
-
require 'pry'
|
18
|
-
require 'timecop'
|
19
|
-
|
20
|
-
# No reason to add default sleep time to specs:
|
21
|
-
Delayed::Settings.sleep_delay = 0
|
22
|
-
Delayed::Settings.sleep_delay_stagger = 0
|
23
|
-
|
24
|
-
RSpec.configure do |config|
|
25
|
-
config.expect_with(:rspec) do |c|
|
26
|
-
c.syntax = %i[should expect]
|
27
|
-
end
|
28
|
-
|
29
|
-
config.include FactoryGirl::Syntax::Methods
|
30
|
-
config.before(:suite) do
|
31
|
-
FactoryGirl.find_definitions
|
32
|
-
end
|
33
|
-
|
34
|
-
config.before(:suite) do
|
35
|
-
DatabaseCleaner.strategy = :transaction
|
36
|
-
DatabaseCleaner.clean_with(:truncation)
|
37
|
-
end
|
38
|
-
|
39
|
-
config.before(:each) do |example|
|
40
|
-
DatabaseCleaner.strategy = (example.metadata[:sinatra] ? :truncation : :transaction)
|
41
|
-
DatabaseCleaner.start
|
42
|
-
end
|
43
|
-
|
44
|
-
config.after(:each) do
|
45
|
-
DatabaseCleaner.clean
|
46
|
-
end
|
47
|
-
|
48
|
-
# Seed global randomization in this process using the `--seed` CLI option.
|
49
|
-
# Setting this allows you to use `--seed` to deterministically reproduce
|
50
|
-
# test failures related to randomization by passing the same `--seed` value
|
51
|
-
# as the one that triggered the failure.
|
52
|
-
config.order = :random
|
53
|
-
Kernel.srand config.seed
|
54
|
-
end
|
55
|
-
|
56
|
-
require_relative 'setup_test_db'
|
57
|
-
|
58
|
-
Time.zone = 'UTC'
|
59
|
-
Rails.logger = Logger.new(nil)
|
60
|
-
|
61
|
-
require_relative 'matchers'
|