ppool 1.4.0 → 1.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3d2548c9a28db03e3abdc552d6fc3432d58dc71a
4
- data.tar.gz: 5813e7a4b5c948309d05ccd4981083f282cf633e
3
+ metadata.gz: f09e2d6b93728af6217c3215ba81e6b9c1b38417
4
+ data.tar.gz: 8422bbc116f119e168191fc5dede318f8d339488
5
5
  SHA512:
6
- metadata.gz: b4b18fb2de4b750e3457fff0db63a0d6bb08b4d27ccc562a0e8ed366582711bb30a14863b3b7712f01f4310471222b3e94054a00a717e1a5c743129b7fbb70a3
7
- data.tar.gz: 32706e46ae2dfdb5aee17d72dd05fa5eb9edba49e506327cda65ffd14c961ebf4f483881d6a33d4fa0771edba5bbfd088a4972ff3c4a69d5bab66c69b7a68c2d
6
+ metadata.gz: cdb05df7fd35d02fe440ce91863bce35f7ebfc07331851bf2856302a0b96dbbe6eb1020c0cb31638c52bb2fa909e6077b5f44a5949d1ec7dcfeaafecd4ee70fe
7
+ data.tar.gz: cf690c45a03b79b6aaf97b75b139c8ee8d7311a56c9616fd849f5bb81e8b6a6f81a171d2a9bf9475e487bd11e95c884c025deaa2d6223d2fe437898e82c0bf94
data/bin/ppool CHANGED
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # MIT License
4
4
  #
5
- # Copyright (c) 2016 Paul Taylor
5
+ # Copyright (c) 2016, 2017 Paul Taylor
6
6
  #
7
7
  # Permission is hereby granted, free of charge, to any person obtaining a copy
8
8
  # of this software and associated documentation files (the "Software"), to deal
@@ -33,7 +33,8 @@ options = {
33
33
  :basic => false,
34
34
  :logdir => "./ppool-logs",
35
35
  :rmlogs => false,
36
- :timespec => nil
36
+ :timespec => nil,
37
+ :average_size => nil
37
38
  }
38
39
 
39
40
  $USAGE = "Usage: ppool [options] COMMAND ARGS..."
@@ -47,6 +48,7 @@ OptionParser.new do |opts|
47
48
  opts.on('-t', '--time TIME', 'Time limit') { |v| options[:timespec] = v }
48
49
  opts.on('-b', '--basic', 'Basic (non curses) verion') { |v| options[:basic] = true}
49
50
  opts.on('-r', '--rmlogs', 'Remove logs for processes that exited successfully') { |v| options[:rmlogs] = true}
51
+ opts.on('-a', '--average NUM', 'Number of processes used to calculate average elapsed time') { |v| options[:average_size] = v }
50
52
  opts.on('-l', '--logdir DIR', 'Log directory') { |v| options[:logdir] = v }
51
53
 
52
54
  opts.on("-h", "--help", "Show this message") {
@@ -69,6 +71,7 @@ end
69
71
 
70
72
  size = options[:size].to_i
71
73
  delay = options[:delay].to_i
74
+ average_size = options[:average_size].to_i
72
75
 
73
76
  begin
74
77
  time = options[:timespec] == nil ? nil : PPool.convert_time_to_secs(options[:timespec])
@@ -84,5 +87,5 @@ else
84
87
  controller = PPool::CursesProcessController.new(size, delay, command, time, logdir, options[:rmlogs])
85
88
  end
86
89
 
87
- PPool::ProcessPool.new(controller).run
90
+ PPool::ProcessPool.new(controller, average_size).run
88
91
 
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # MIT License
3
3
  #
4
- # Copyright (c) 2016 Paul Taylor
4
+ # Copyright (c) 2016, 2017 Paul Taylor
5
5
  #
6
6
  # Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  # of this software and associated documentation files (the "Software"), to deal
@@ -30,4 +30,5 @@ require "shell_process_controller.rb"
30
30
  require "timed_process_controller.rb"
31
31
  require "terminal_process_controller.rb"
32
32
  require "curses_process_controller.rb"
33
+ require "time_stats.rb"
33
34
 
@@ -26,15 +26,13 @@ module PPool
26
26
 
27
27
  class ProcessPool
28
28
 
29
- def initialize(controller)
29
+ def initialize(controller, average_size)
30
30
  @controller = controller
31
+ @time_stats = TimeStats.new(average_size)
31
32
  @active_processes = 0
32
33
  @started_count = 0
33
34
  @ended_count = 0
34
35
  @errors = 0
35
- @process_start_time = {}
36
- @avg_elapsed_time = 0
37
- @total_elapsed_time = 0
38
36
  end
39
37
 
40
38
 
@@ -55,7 +53,7 @@ module PPool
55
53
  @controller.run_process
56
54
  end
57
55
 
58
- @process_start_time[pid] = Time.now
56
+ @time_stats.process_started(pid)
59
57
 
60
58
  @active_processes = @active_processes + 1
61
59
  @controller.process_started(pid, @active_processes)
@@ -70,14 +68,14 @@ module PPool
70
68
  pidStatus = Process.wait2(-1, Process::WNOHANG)
71
69
  if pidStatus != nil
72
70
  endedPid = pidStatus[0]
73
- @total_elapsed_time = @total_elapsed_time + (Time.now - @process_start_time.delete(endedPid)) * 1000
71
+ @time_stats.process_ended(endedPid)
72
+
74
73
  @controller.process_ended(endedPid, pidStatus[1].exitstatus)
75
74
  @active_processes = @active_processes - 1
76
75
  @ended_count = @ended_count + 1
77
76
  if pidStatus[1].exitstatus != 0
78
77
  @errors = @errors + 1
79
78
  end
80
- @avg_elapsed_time = (@total_elapsed_time / @ended_count).round()
81
79
  else
82
80
  doneWaiting = true
83
81
  end
@@ -102,7 +100,7 @@ module PPool
102
100
  :processes_started => @started_count,
103
101
  :processes_ended => @ended_count,
104
102
  :errors => @errors,
105
- :avg_elapsed_time => @avg_elapsed_time
103
+ :avg_elapsed_time => @time_stats.average_elapsed_time
106
104
  })
107
105
  end
108
106
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ppool
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Taylor
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-01 00:00:00.000000000 Z
11
+ date: 2017-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curses
@@ -103,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
103
  version: '0'
104
104
  requirements: []
105
105
  rubyforge_project:
106
- rubygems_version: 2.6.8
106
+ rubygems_version: 2.5.2
107
107
  signing_key:
108
108
  specification_version: 4
109
109
  summary: Pool of processes running a single command