tiny_work_service 1.3.0 → 2.0.0

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/tiny_work_service.rb +64 -3
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 327188d9aeb076b114aa5915bda2a4a50516b070152df17f8242f9fe09548d67
4
- data.tar.gz: fe76da5717bea63e4ab09ff69663ba8209984024fbf50af412b20d96d99f61bf
3
+ metadata.gz: 3c407366b783cb5229c15a319b4b39d38c1b505b200dde5ea2fa581b2e5d93bc
4
+ data.tar.gz: 4d30dbe1bbdcf2ce1b91d989f57e99220dbefbcf5665d41da7594901c584e85f
5
5
  SHA512:
6
- metadata.gz: 7ca1d978cb9aa4a88f61970e3ea675cd58da4a55c20e0fb3121b73d40e15eef84badd27d3ba13b33f06d81e09ab5780e78448c83a58dcfcbfdfe65db9e618774
7
- data.tar.gz: ca2f7f1300eb9093ace4657fefa6beba346f4fb9f9284398f4f84ccb7f26324f25b8e6ccd032097d018887511d598b73eaae8dab2015c5441c6c1ec48a5ba6d2
6
+ metadata.gz: 9d9443292f19c5eda19c346e440a1629ef9d37c9adb71ba6fdf5a1043672b16e728a71e79a1692a2168b00b5da2f1b3762fc1c057433fbe3d5e12146ddcae31b
7
+ data.tar.gz: 4b981c8db0d0ffad7fe20a744c361b776e66fa5029cc72c8feb95757a2643121012f84d2c5a8a72237140b1014261f58bbbcfe64940e8135b17d3e98e874a2a1
@@ -1,22 +1,77 @@
1
+ require 'time'
1
2
  require 'tiny_tcp_service'
2
3
 
3
4
  # usage:
4
- # s = TinyWorkService.new(1234)
5
+ # s = TinyWorkService.new(1234, 'TinyWorkService')
5
6
  # s.stop!
6
7
  class TinyWorkService
7
- def initialize(port, label='TinyWorkService')
8
+ attr_reader :jobs_enqueued,
9
+ :jobs_dequeued,
10
+ :jobs_per_minute,
11
+ :jobs_per_hour
12
+
13
+ def initialize(port, label)
8
14
  @service = TinyTCPService.new(port)
9
15
  @service.msg_handler = self
10
16
  @jobs = Queue.new
11
17
  @label = label
12
18
 
19
+ @jobs_enqueued = 0
20
+ @jobs_dequeued = 0
21
+ @jobs_to_track = Queue.new
22
+ @jobs_dequeued_tracker = []
23
+
24
+ @jobs_per_minute = 0
25
+ @jobs_per_hour = 0
26
+
27
+ # status printing thread
13
28
  Thread.new do
29
+ print "\e[?25l" # hide cursor
14
30
  loop do
15
31
  break unless @service.running?
16
32
 
17
- print "\r#{@label}:#{port} #{@jobs.length.to_s.rjust(6)} jobs #{@service.num_clients.to_s.rjust(4)} workers\e[K"
33
+ print "\e[1;1H"
34
+ puts "#{DateTime.now.iso8601}\e[K"
35
+ puts "#{@label} on port #{port}\e[K"
36
+ puts "workers :#{@service.num_clients.to_s.rjust(10)}\e[K"
37
+ puts "queue :#{@jobs.length.to_s.rjust(10)}\e[K"
38
+ puts "jobs/m :#{@jobs_per_minute.to_s.rjust(10)}\e[K"
39
+ print "jobs/h :#{@jobs_per_hour.to_s.rjust(10)}\e[K"
18
40
  sleep 0.5
19
41
  end
42
+ print "\e[?25h" # show cursor
43
+ end
44
+
45
+ # update stats thread
46
+ Thread.new do
47
+ loop do
48
+ one_minute_ago = Time.now.to_i - 60
49
+ one_hour_ago = Time.now.to_i - 3600
50
+
51
+ # move jobs_to_track into jobs_dequeued_tracker, threadsafe
52
+ loop do
53
+ break if @jobs_to_track.length == 0
54
+ @jobs_dequeued_tracker << @jobs_to_track.shift
55
+ end
56
+
57
+ # remove job tracking times from older than one_hour_ago
58
+ loop do
59
+ break if @jobs_dequeued_tracker.empty? || @jobs_dequeued_tracker.first >= one_hour_ago
60
+ @jobs_dequeued_tracker.shift
61
+ end
62
+
63
+ counter = 0
64
+ i = -1
65
+ loop do
66
+ break if i.abs > @jobs_dequeued_tracker.length || @jobs_dequeued_tracker[i] < one_minute_ago
67
+ i -= 1
68
+ counter += 1
69
+ end
70
+ @jobs_per_minute = counter
71
+ @jobs_per_hour = @jobs_dequeued_tracker.count
72
+
73
+ sleep 2
74
+ end
20
75
  end
21
76
  end
22
77
 
@@ -42,13 +97,19 @@ class TinyWorkService
42
97
 
43
98
  # enqueue a job
44
99
  def <<(j)
100
+ @jobs_enqueued += 1
45
101
  @jobs << j
102
+
103
+ nil
46
104
  end
47
105
 
48
106
  # return the first job in the work queue, if there is one present
49
107
  # otherwise, return nil
50
108
  def shift
51
109
  return nil if @jobs.empty?
110
+ @jobs_dequeued += 1
111
+ @jobs_to_track << Time.now.to_i
112
+
52
113
  @jobs.shift
53
114
  end
54
115
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tiny_work_service
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Lunt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-05 00:00:00.000000000 Z
11
+ date: 2023-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tiny_tcp_service