balsamique 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/balsamique/reporter.rb +60 -0
  3. metadata +7 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 45af5fc2d6fbb889868c96fcdff31009ed424b6d
4
- data.tar.gz: 48e78d7d69933e1a2bb84d9f29aace83ed33b7f2
3
+ metadata.gz: c85d85045fa91821df619ae6dd597839eccb24b9
4
+ data.tar.gz: 3b16663b3d61648d0eb3ce8038f7ff4bd1be991f
5
5
  SHA512:
6
- metadata.gz: 6972cea9c4cd397c0e96a656fb03755e56d7de928405fbba9ae0183a48d0752943411e7fe4d9f1b87893a3f7a3630a2d492c3325bb1bc46fd03c53da31f28b96
7
- data.tar.gz: f88f0686b1d67def3222af2918511d681ef69ae755bf812f7ddff6730552272108ce633231db3f4530c8fd6dadfb0a1118173ade2fd68ba5a89a8dc2eed0d4eb
6
+ metadata.gz: c28530a1ca4bb80eee0c5a9c379ebcd02de0eb77e96426d750c64dfd36ac6618bd9e08e87a1c41c272e62fdf939e8cedb394f58c7df71edc7c40e0f81c904262
7
+ data.tar.gz: 92ec8c8d1a77b1f8f4ac457be04b8f3de854e2d34bbe0340c5d493da2571e332b95150669405d7be0531cbbd2ae7ada41823bab17697726e83d7798a55484eb1
@@ -0,0 +1,60 @@
1
+ require_relative '../balsamique'
2
+ require 'logger'
3
+
4
+ class Balsamique
5
+ class Reporter
6
+ def initialize(balsamique, options = {})
7
+ @bq = balsamique
8
+ @poll = options.fetch(:poll, 10.0)
9
+ @max_retries = options.fetch(:max_retries, 20)
10
+ @logger = options.fetch(:logger, Logger.new($stdout))
11
+ end
12
+
13
+ attr_accessor :bq, :stopped, :max_retries, :poll, :logger
14
+
15
+ def stop
16
+ @stopped = true
17
+ end
18
+
19
+ def perform(id, job_status, timestamp, retries)
20
+ logger.info("#{id} #{timestamp} #{retries} #{job_status.to_json}")
21
+ end
22
+
23
+ def job_status(id)
24
+ status = bq.job_status(id)
25
+ if status[id]
26
+ bq.fill_job_failures(status)
27
+ bq.fill_args_tasks(status)
28
+ end
29
+ status[id]
30
+ end
31
+
32
+ def run
33
+ @stopped = false
34
+ until stopped do
35
+ report = bq.pop_report(Time.now.to_f)
36
+ if report
37
+ id, timestamp, retries = report
38
+ begin
39
+ if (status = job_status(id))
40
+ perform(id, status, timestamp, retries)
41
+ bq.remove_job(id) unless status[:task]
42
+ else
43
+ logger.info("#{id} #{timestamp} #{retries} null")
44
+ end
45
+ bq.complete_report(id)
46
+ rescue => error
47
+ logger.warn(
48
+ "#{id} #{timestamp} #{retries} " +
49
+ "#{error.class.name} #{error.message}")
50
+ logger.debug(error)
51
+ bq.complete_report(id) if retries > max_retries
52
+ end
53
+ else
54
+ t_poll = Time.now.to_f + poll * (1.0 - 0.5 * rand())
55
+ sleep 0.1 until Time.now.to_f > t_poll || stopped
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: balsamique
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
  - DWNLD
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-19 00:00:00.000000000 Z
11
+ date: 2016-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '3'
27
27
  description: |
28
28
  Balsamique (pronounced "Balsami-QUEUE") is a Redis-backed Ruby library
29
29
  which implements a job queue system. Balsamique jobs consist of
@@ -40,6 +40,7 @@ extensions: []
40
40
  extra_rdoc_files: []
41
41
  files:
42
42
  - lib/balsamique.rb
43
+ - lib/balsamique/reporter.rb
43
44
  homepage: https://github.com/dwnld/balsamique
44
45
  licenses:
45
46
  - MIT