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 25 26 27 28 29 30 |
# File 'lib/browserctl/commands/daemon.rb', line 14 def self.run(client, args) sub = args.shift or abort USAGE case sub when "ping" begin print_result(client.ping) rescue Browserctl::DaemonUnavailableError => e puts JSON.generate({ ok: false, daemon: "offline", error: e. }) exit 1 end 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
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/browserctl/commands/daemon.rb', line 63 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 Browserctl::DaemonUnavailableError, RuntimeError nil end.compact puts({ daemons: rows }.to_json) end |
.run_start(args) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/browserctl/commands/daemon.rb', line 50 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
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/browserctl/commands/daemon.rb', line 32 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 Browserctl::DaemonUnavailableError => e puts JSON.pretty_generate(daemon: "offline", error: e.) exit 1 end |