Module: Browserctl::Commands::Daemon
- Extended by:
- CliOutput
- Defined in:
- lib/browserctl/commands/daemon.rb
Constant Summary collapse
- USAGE =
"Usage: browserctl daemon <ping|status|start|stop|list> [args]"
Class Method Summary collapse
- .run(client, args) ⇒ Object
- .run_list ⇒ Object
- .run_start(args) ⇒ Object
- .run_status(client) ⇒ Object
Methods included from CliOutput
Class Method Details
.run(client, args) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/browserctl/commands/daemon.rb', line 14 def self.run(client, args) sub = args.shift or abort USAGE case sub when "ping" then print_result(client.ping) when "status" then run_status(client) when "start" then run_start(args) when "stop" then print_result(client.shutdown) when "list" then run_list else abort "unknown daemon subcommand '#{sub}'\n#{USAGE}" end end |
.run_list ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/browserctl/commands/daemon.rb', line 59 def self.run_list sockets = Dir[File.join(Browserctl::BROWSERCTL_DIR, "*.sock")] rows = sockets.map do |sock_path| daemon_name = File.basename(sock_path, ".sock") display_name = daemon_name == "browserd" ? "default" : daemon_name socket_name = daemon_name == "browserd" ? nil : daemon_name client = Browserctl::Client.new(Browserctl.socket_path(socket_name)) status = client.ping next unless status&.dig(:ok) { name: display_name, pid: status[:pid], pages: (client.page_list[:pages] || []).length } rescue RuntimeError nil end.compact puts({ daemons: rows }.to_json) end |
.run_start(args) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/browserctl/commands/daemon.rb', line 46 def self.run_start(args) opts = Optimist.(args) do opt :headed, "Run with visible browser", default: false opt :name, "Daemon name", type: :string end flags = [] flags << "--headed" if opts[:headed] flags += ["--name", opts[:name]] if opts[:name] pid = Process.spawn("browserd", *flags, out: File::NULL, err: File::NULL) Process.detach(pid) puts "browserd started (pid #{pid})" end |
.run_status(client) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/browserctl/commands/daemon.rb', line 26 def self.run_status(client) ping = client.ping pages = client.page_list[:pages] || [] page_info = pages.map do |name| url_res = client.url(name) { name: name, url: url_res[:url] || url_res[:error] } end puts JSON.pretty_generate( daemon: "online", pid: ping[:pid], protocol_version: ping[:protocol_version], pages: page_info ) rescue RuntimeError => e raise unless e..include?("browserd is not running") puts JSON.pretty_generate(daemon: "offline", error: e.) exit 1 end |