open-in-editor-bridge 0.1.0 → 0.1.1
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 +4 -4
- data/lib/open_in_editor_bridge/version.rb +1 -1
- data/lib/open_in_editor_bridge.rb +8 -6
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0ec2cde5e04f7296d806dcfeff4926492de642d4b09983478295b3bc45a68f08
|
|
4
|
+
data.tar.gz: 60e87f9f41f6207bd75bb58fce1c0daa4118af0b3bbbd4cb64030eedd83a3f56
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8e767cca6409335c11dee8e522f1ba6b04e973ec638bad090a089ac2e998544ac347287805f4475a9739cd61448d6dbe3cd13577a95dde1733b4def30b040959
|
|
7
|
+
data.tar.gz: 5b48df59f4d402e62c3cff453ba6523b4c775c4744c00c48324f0cbb145f258a8d97bae825542fd2b44967614c9dfa880955793a5356545107a5a646c4c7e6b8
|
|
@@ -98,7 +98,7 @@ class OpenInEditorBridge
|
|
|
98
98
|
end
|
|
99
99
|
|
|
100
100
|
def shutdown
|
|
101
|
-
pid = running_pid
|
|
101
|
+
pid = running_pid(validate_health: true)
|
|
102
102
|
return unless pid
|
|
103
103
|
|
|
104
104
|
Process.kill("TERM", -pid)
|
|
@@ -253,7 +253,7 @@ class OpenInEditorBridge
|
|
|
253
253
|
def respond_to_get_request(socket, path, params)
|
|
254
254
|
case path
|
|
255
255
|
when HEALTH_PATH
|
|
256
|
-
write_json_response(socket, payload: { ok: true })
|
|
256
|
+
write_json_response(socket, payload: { ok: true, pid: Process.pid })
|
|
257
257
|
when OPEN_IN_EDITOR_PATH
|
|
258
258
|
open_in_editor(socket, params)
|
|
259
259
|
else
|
|
@@ -281,7 +281,7 @@ class OpenInEditorBridge
|
|
|
281
281
|
return nil unless File.exist?(config[:pid_file])
|
|
282
282
|
|
|
283
283
|
pid = Integer(File.read(config[:pid_file]).strip)
|
|
284
|
-
return pid if process_running?(pid) && (!validate_health || bridge_healthy?)
|
|
284
|
+
return pid if process_running?(pid) && (!validate_health || bridge_healthy?(expected_pid: pid))
|
|
285
285
|
|
|
286
286
|
delete_pid_file
|
|
287
287
|
nil
|
|
@@ -301,7 +301,7 @@ class OpenInEditorBridge
|
|
|
301
301
|
deadline = Process.clock_gettime(Process::CLOCK_MONOTONIC) + config[:startup_timeout]
|
|
302
302
|
loop do
|
|
303
303
|
raise StartupError, "Editor bridge failed to start. See #{config[:log_file]}." unless process_running?(pid)
|
|
304
|
-
return if bridge_healthy?
|
|
304
|
+
return if bridge_healthy?(expected_pid: pid)
|
|
305
305
|
|
|
306
306
|
raise StartupError, "Editor bridge did not become ready." if Process.clock_gettime(Process::CLOCK_MONOTONIC) >= deadline
|
|
307
307
|
sleep 0.05
|
|
@@ -317,16 +317,18 @@ class OpenInEditorBridge
|
|
|
317
317
|
end
|
|
318
318
|
end
|
|
319
319
|
|
|
320
|
-
def bridge_healthy?
|
|
320
|
+
def bridge_healthy?(expected_pid: nil)
|
|
321
321
|
socket = TCPSocket.new("127.0.0.1", config[:port])
|
|
322
322
|
response = Timeout.timeout(0.25) do
|
|
323
323
|
socket.write("GET /health HTTP/1.1\r\nHost: 127.0.0.1\r\nConnection: close\r\n\r\n")
|
|
324
324
|
socket.read
|
|
325
325
|
end
|
|
326
326
|
headers, body = response.split("\r\n\r\n", 2)
|
|
327
|
+
payload = JSON.parse(body.to_s)
|
|
327
328
|
headers&.start_with?("HTTP/1.1 200 ") &&
|
|
328
329
|
headers.lines.any? { |line| line.casecmp("X-Open-In-Editor-Bridge: 1\r\n").zero? } &&
|
|
329
|
-
|
|
330
|
+
payload.fetch("ok") == true &&
|
|
331
|
+
(expected_pid.nil? || payload.fetch("pid") == expected_pid)
|
|
330
332
|
rescue Errno::ECONNREFUSED, JSON::ParserError, KeyError, Timeout::Error
|
|
331
333
|
false
|
|
332
334
|
ensure
|