Module: Specwrk

Defined in:
lib/specwrk.rb,
lib/specwrk/cli.rb,
lib/specwrk/ipc.rb,
lib/specwrk/web.rb,
lib/specwrk/hooks.rb,
lib/specwrk/client.rb,
lib/specwrk/worker.rb,
lib/specwrk/version.rb,
lib/specwrk/watcher.rb,
lib/specwrk/web/app.rb,
lib/specwrk/web/auth.rb,
lib/specwrk/seed_loop.rb,
lib/specwrk/store/base.rb,
lib/specwrk/web/logger.rb,
lib/specwrk/cli_reporter.rb,
lib/specwrk/list_examples.rb,
lib/specwrk/worker/executor.rb,
lib/specwrk/store/serializer.rb,
lib/specwrk/web/endpoints/pop.rb,
lib/specwrk/store/base_adapter.rb,
lib/specwrk/store/bucket_store.rb,
lib/specwrk/store/file_adapter.rb,
lib/specwrk/store/worker_store.rb,
lib/specwrk/web/endpoints/base.rb,
lib/specwrk/web/endpoints/seed.rb,
lib/specwrk/store/pending_store.rb,
lib/specwrk/store/memory_adapter.rb,
lib/specwrk/web/endpoints/health.rb,
lib/specwrk/web/endpoints/report.rb,
lib/specwrk/store/completed_store.rb,
lib/specwrk/web/endpoints/popable.rb,
lib/specwrk/worker/null_formatter.rb,
lib/specwrk/store/processing_store.rb,
lib/specwrk/web/endpoints/shutdown.rb,
lib/specwrk/web/endpoints/heartbeat.rb,
lib/specwrk/worker/progress_formatter.rb,
lib/specwrk/worker/completion_formatter.rb,
lib/specwrk/web/endpoints/complete_and_pop.rb

Defined Under Namespace

Modules: CLI, Hooks Classes: BucketStore, CLIReporter, Client, CompletedStore, IPC, ListExamples, PendingStore, ProcessingStore, SeedLoop, Store, Watcher, Web, Worker, WorkerStore

Constant Summary collapse

Error =
Class.new(StandardError)
ClientError =

HTTP Client Errors

Class.new(Error)
UnhandledResponseError =
Class.new(ClientError)
WaitingForSeedError =
Class.new(ClientError)
NoMoreExamplesError =
Class.new(ClientError)
CompletedAllExamplesError =
Class.new(ClientError)
VERSION =
"0.21.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.force_quitObject

Returns the value of attribute force_quit.



20
21
22
# File 'lib/specwrk.rb', line 20

def force_quit
  @force_quit
end

.net_httpObject

Returns the value of attribute net_http.



20
21
22
# File 'lib/specwrk.rb', line 20

def net_http
  @net_http
end

.starting_pidObject (readonly)

Returns the value of attribute starting_pid.



21
22
23
# File 'lib/specwrk.rb', line 21

def starting_pid
  @starting_pid
end

Class Method Details

.after_all_workers_exit(&block) ⇒ Object



59
60
61
# File 'lib/specwrk.rb', line 59

def after_all_workers_exit(&block)
  Hooks.register(:after_all_workers_exit, &block)
end

.after_seed(&block) ⇒ Object



27
28
29
# File 'lib/specwrk.rb', line 27

def after_seed(&block)
  Hooks.register(:after_seed, &block)
end

.after_server_seed(&block) ⇒ Object



35
36
37
# File 'lib/specwrk.rb', line 35

def after_server_seed(&block)
  Hooks.register(:after_server_seed, &block)
end

.after_worker_examples_execute(&block) ⇒ Object



51
52
53
# File 'lib/specwrk.rb', line 51

def after_worker_examples_execute(&block)
  Hooks.register(:after_worker_examples_execute, &block)
end

.after_worker_fork(&block) ⇒ Object



43
44
45
# File 'lib/specwrk.rb', line 43

def after_worker_fork(&block)
  Hooks.register(:after_worker_fork, &block)
end

.before_seed(&block) ⇒ Object



23
24
25
# File 'lib/specwrk.rb', line 23

def before_seed(&block)
  Hooks.register(:before_seed, &block)
end

.before_server_seed(&block) ⇒ Object



31
32
33
# File 'lib/specwrk.rb', line 31

def before_server_seed(&block)
  Hooks.register(:before_server_seed, &block)
end

.before_worker_examples_execute(&block) ⇒ Object



47
48
49
# File 'lib/specwrk.rb', line 47

def before_worker_examples_execute(&block)
  Hooks.register(:before_worker_examples_execute, &block)
end

.before_worker_exit(&block) ⇒ Object



55
56
57
# File 'lib/specwrk.rb', line 55

def before_worker_exit(&block)
  Hooks.register(:before_worker_exit, &block)
end

.before_worker_fork(&block) ⇒ Object



39
40
41
# File 'lib/specwrk.rb', line 39

def before_worker_fork(&block)
  Hooks.register(:before_worker_fork, &block)
end

.human_readable_duration(total_seconds, precision: 2) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/specwrk.rb', line 83

def human_readable_duration(total_seconds, precision: 2)
  secs = total_seconds.to_f
  hours = (secs / 3600).to_i
  mins = ((secs % 3600) / 60).to_i
  seconds = secs % 60

  parts = []
  parts << "#{hours}h" if hours.positive?
  parts << "#{mins}m" if mins.positive?
  if seconds.positive?
    sec_str = format("%0.#{precision}f", seconds).sub(/\.?0+$/, "")
    parts << "#{sec_str}s"
  end
  parts.join(" ")
end

.wait_for_pids_exit(pids) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/specwrk.rb', line 63

def wait_for_pids_exit(pids)
  exited_pids = {}

  loop do
    pids.each do |pid|
      next if exited_pids.key? pid

      _, status = Process.waitpid2(pid, Process::WNOHANG)
      exited_pids[pid] = status.exitstatus if status&.exitstatus
    rescue Errno::ECHILD
      exited_pids[pid] = 1
    end

    break if exited_pids.keys.length == pids.length
    sleep 0.1
  end

  exited_pids
end