tiny_work_service 1.3.0 → 2.0.0

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 (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