88 lines
2.4 KiB
GDScript
88 lines
2.4 KiB
GDScript
@tool
|
|
extends EditorPlugin
|
|
|
|
const GedisQueueDebuggerPanel = preload("res://addons/GedisQueue/debugger/gedis_queue_debugger_panel.tscn")
|
|
|
|
var queue_debugger_plugin
|
|
var queue_panel
|
|
var dashboard
|
|
|
|
func _enter_tree():
|
|
queue_debugger_plugin = GedisQueueDebuggerPlugin.new()
|
|
add_debugger_plugin(queue_debugger_plugin)
|
|
|
|
var timer = Timer.new()
|
|
timer.wait_time = 1
|
|
timer.timeout.connect(_on_timer_timeout)
|
|
add_child(timer)
|
|
timer.start()
|
|
|
|
func _on_timer_timeout():
|
|
var editor_node = EditorInterface.get_base_control()
|
|
dashboard = editor_node.find_child("Gedis", true, false)
|
|
|
|
if dashboard:
|
|
var debugger = dashboard.plugin
|
|
if debugger:
|
|
var tab_container = dashboard.find_child("TabContainer", true, false)
|
|
if tab_container:
|
|
queue_panel = dashboard.find_child("Queue", true, false)
|
|
if !queue_panel:
|
|
queue_panel = GedisQueueDebuggerPanel.instantiate()
|
|
queue_panel.name = "Queue"
|
|
tab_container.add_child(queue_panel)
|
|
queue_panel.set_plugin(debugger)
|
|
|
|
var session_id = debugger.get_current_session_id()
|
|
if session_id != -1:
|
|
queue_debugger_plugin.set_queue_panel(session_id, queue_panel)
|
|
|
|
|
|
func _exit_tree():
|
|
if queue_debugger_plugin:
|
|
remove_debugger_plugin(queue_debugger_plugin)
|
|
queue_debugger_plugin = null
|
|
if queue_panel:
|
|
queue_panel.queue_free()
|
|
|
|
class GedisQueueDebuggerPlugin extends EditorDebuggerPlugin:
|
|
var queue_panels = {}
|
|
|
|
func set_queue_panel(session_id, panel):
|
|
queue_panels[session_id] = panel
|
|
|
|
func _has_capture(capture):
|
|
return capture == "gedis"
|
|
|
|
func _capture(message, data, session_id):
|
|
var parts = message.split(":")
|
|
var kind = parts[1] if parts.size() > 1 else ""
|
|
|
|
if session_id in queue_panels:
|
|
var queue_panel = queue_panels[session_id]
|
|
match kind:
|
|
"snapshot_data":
|
|
if queue_panel:
|
|
var snapshot = data[0]
|
|
var queues = {}
|
|
var jobs = []
|
|
|
|
for key in snapshot:
|
|
var value = snapshot[key]
|
|
if "job" in key:
|
|
var job_data = value["value"]
|
|
var key_parts = key.split(":")
|
|
if key_parts.size() > 2:
|
|
job_data["queue_name"] = key_parts[1]
|
|
jobs.append(job_data)
|
|
else:
|
|
var queue_name = key.replace("gedis_queue:", "").replace(":waiting", "").replace(":active", "")
|
|
if not queue_name in queues:
|
|
queues[queue_name] = []
|
|
queues[queue_name].append_array(value["value"])
|
|
|
|
queue_panel.update_queues(queues)
|
|
queue_panel.update_jobs(jobs)
|
|
return true
|
|
return false
|