Class: SolidObjects::CLI

Inherits:
Thor
  • Object
show all
Defined in:
lib/solid_objects/cli.rb,
sig/generated/lib/solid_objects/cli.rbs

Instance Method Summary collapse

Instance Method Details

#authorize_administration!(action, resource:) ⇒ void

This method returns an undefined value.

RBS:

  • (Symbol, resource: String) -> void

Parameters:

  • (Symbol)
  • resource: (String)


147
148
149
150
151
152
153
154
155
156
157
# File 'lib/solid_objects/cli.rb', line 147

def authorize_administration!(action, resource:)
  authorized = SolidObjects.configuration.authorize_administration.call(
    action:,
    resource:,
    resource_id: nil,
    authorization_context: { source: "cli" }
  )
  return if authorized

  raise Unauthorized, "actor administration is not authorized"
end

#boot_applicationvoid

This method returns an undefined value.

RBS:

  • () -> void



129
130
131
132
133
134
135
136
137
138
# File 'lib/solid_objects/cli.rb', line 129

def boot_application
  path = options[:environment] ||
    File.expand_path("config/environment.rb", Dir.pwd)
  unless File.file?(path)
    raise Error, "Rails environment not found at #{path}"
  end

  require path
  ApplicationActorLoader.new.install
end

#cleanupvoid

This method returns an undefined value.

RBS:

  • () -> void



56
57
58
59
60
# File 'lib/solid_objects/cli.rb', line 56

def cleanup
  boot_application
  authorize_administration!(:cleanup, resource: "processes")
  puts JSON.generate(cleaned_processes: ProcessRegistry.cleanup_dead)
end

#dead_lettersvoid

This method returns an undefined value.

RBS:

  • () -> void



105
106
107
108
109
110
111
# File 'lib/solid_objects/cli.rb', line 105

def dead_letters
  boot_application
  rows = SolidObjects.dead_letters
    .all(authorization_context: { source: "cli" })
    .map(&:attributes)
  puts JSON.pretty_generate(rows)
end

#numeric_option(name, default) ⇒ Integer

RBS:

  • (Symbol, Integer) -> Integer

Parameters:

  • (Symbol)
  • (Integer)

Returns:

  • (Integer)


141
142
143
144
# File 'lib/solid_objects/cli.rb', line 141

def numeric_option(name, default)
  value = options[name]
  value ? Integer(value) : default
end

#prune_instancesvoid

This method returns an undefined value.

RBS:

  • () -> void



80
81
82
83
84
85
86
# File 'lib/solid_objects/cli.rb', line 80

def prune_instances
  boot_application
  authorize_administration!(:prune, resource: "instances")
  pruner = InstancePruner.new
  count = options[:execute] ? pruner.prune : pruner.preview
  puts JSON.generate(mode: options[:execute] ? "execute" : "preview", instances: count)
end

#prune_messagesvoid

This method returns an undefined value.

RBS:

  • () -> void



67
68
69
70
71
72
73
# File 'lib/solid_objects/cli.rb', line 67

def prune_messages
  boot_application
  authorize_administration!(:prune, resource: "messages")
  pruner = MessagePruner.new
  count = options[:execute] ? pruner.prune : pruner.preview
  puts JSON.generate(mode: options[:execute] ? "execute" : "preview", messages: count)
end

#prune_processesvoid

This method returns an undefined value.

RBS:

  • () -> void



93
94
95
96
97
98
99
# File 'lib/solid_objects/cli.rb', line 93

def prune_processes
  boot_application
  authorize_administration!(:prune, resource: "processes")
  pruner = ProcessPruner.new
  count = options[:execute] ? pruner.prune : pruner.preview
  puts JSON.generate(mode: options[:execute] ? "execute" : "preview", processes: count)
end

#retry_dead_letter(id) ⇒ void

This method returns an undefined value.

RBS:

  • (String) -> void

Parameters:

  • (String)


117
118
119
120
121
122
123
124
# File 'lib/solid_objects/cli.rb', line 117

def retry_dead_letter(id)
  boot_application
  message_reference = SolidObjects.dead_letters.retry(
    Integer(id),
    authorization_context: { source: "cli" }
  )
  puts JSON.generate(message_id: message_reference.id)
end

#startvoid

This method returns an undefined value.

RBS:

  • () -> void



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/solid_objects/cli.rb', line 18

def start
  boot_application
  supervisor = Supervisor.new(
    worker_count: numeric_option(:workers, SolidObjects.configuration.worker_count),
    effect_worker_count: numeric_option(:effect_workers, SolidObjects.configuration.effect_worker_count),
    broadcast_worker_count: numeric_option(:broadcast_workers, SolidObjects.configuration.broadcast_worker_count),
    reminder_scheduler_count: numeric_option(:reminder_schedulers, SolidObjects.configuration.reminder_scheduler_count)
  )
  %w[INT TERM].each do |signal|
    Signal.trap(signal) { Thread.new { supervisor.stop } }
  end
  supervisor.run
end

#statusvoid

This method returns an undefined value.

RBS:

  • () -> void



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/solid_objects/cli.rb', line 36

def status
  boot_application
  authorize_administration!(:status, resource: "processes")
  rows = SolidObjects::Process.order(:kind, :started_at).map do |process_record|
    {
      id: process_record.id,
      kind: process_record.kind,
      hostname: process_record.hostname,
      pid: process_record.pid,
      state: process_record.shutdown_state,
      last_heartbeat_at: process_record.last_heartbeat_at
    }
  end
  puts JSON.pretty_generate(rows)
end