Skip to content

Commit 322add3

Browse files
authored
Merge pull request #1 from nsumbadze/feat/test-env
Feat/test env
2 parents cab27c6 + 9759d4f commit 322add3

5 files changed

Lines changed: 478 additions & 69 deletions

File tree

.github/workflows/tests.yml

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,35 @@ jobs:
110110
sudo apt update
111111
sudo apt-get install -y --fix-missing redis-server
112112
sudo service redis-server stop
113-
redis-server --daemonize yes --port 7000 --appendonly yes --cluster-enabled yes --cluster-config-file nodes-7000.conf
114-
redis-server --daemonize yes --port 7001 --appendonly yes --cluster-enabled yes --cluster-config-file nodes-7001.conf
115-
redis-server --daemonize yes --port 7002 --appendonly yes --cluster-enabled yes --cluster-config-file nodes-7002.conf
113+
114+
# Every node needs its own data directory. Sharing one means sharing a
115+
# single `appendonlydir`, and three servers creating that AOF manifest
116+
# at the same time is enough to make one of them die on startup.
117+
for port in 7000 7001 7002; do
118+
mkdir -p "$RUNNER_TEMP/redis-$port"
119+
redis-server --daemonize yes --port "$port" --appendonly yes --cluster-enabled yes \
120+
--cluster-config-file "nodes-$port.conf" \
121+
--dir "$RUNNER_TEMP/redis-$port" \
122+
--logfile "$RUNNER_TEMP/redis-$port/redis.log"
123+
done
124+
125+
# --daemonize returns as soon as the parent forks, before the node
126+
# accepts connections, so creating the cluster straight away races
127+
# the last node into a refused connection. Wait for every node to
128+
# answer PING first.
129+
for port in 7000 7001 7002; do
130+
for attempt in $(seq 30); do
131+
if [ "$(redis-cli -p "$port" ping 2>/dev/null)" = "PONG" ]; then
132+
continue 2
133+
fi
134+
sleep 1
135+
done
136+
137+
echo "Redis node on port $port never started accepting connections. Its log:"
138+
cat "$RUNNER_TEMP/redis-$port/redis.log" || true
139+
exit 1
140+
done
141+
116142
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 --cluster-replicas 0 --cluster-yes
117143
118144
- name: Check Redis Cluster is ready

composer.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@
7878
"@build",
7979
"@php vendor/bin/testbench serve"
8080
],
81+
"serve:demo": [
82+
"Composer\\Config::disableProcessTimeout",
83+
"@putenv HORIZONXBRAIN_FLOW_SOURCE=mock",
84+
"@build",
85+
"@php vendor/bin/testbench serve"
86+
],
8187
"lint": [
8288
"@php vendor/bin/phpstan analyse"
8389
],

dist/app.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

resources/js/screens/live-flow.vue

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,8 @@
172172
const midY = H / 2;
173173
174174
const queues = this.filteredQueues.map((queue, i) => {
175-
const node = this.findQueueNode(queue);
176175
return {
177-
id: node?.id ?? this.queueNodeId(queue),
176+
id: this.queueGraphId(queue),
178177
type: 'queue', label: queue.name, sub: this.queueSubLabel(queue),
179178
status: this.queueStatus(queue),
180179
x: 205, y: this.distributedY(i, this.filteredQueues.length, qYMin, qYMax),
@@ -324,7 +323,7 @@
324323
let jobClass = null;
325324
326325
if (node.type === 'job') {
327-
queue = this.queues.find(q => this.queueNodeId(q) === node.queueId) ?? null;
326+
queue = this.queues.find(q => this.queueGraphId(q) === node.queueId) ?? null;
328327
if (queue) {
329328
jobClass = this.queueJobClasses(queue).find(c => c.name === node.name) ?? null;
330329
}
@@ -674,7 +673,7 @@
674673
675674
queueJobNodes() {
676675
return this.filteredQueues.flatMap(queue => {
677-
const queueId = this.queueNodeId(queue);
676+
const queueId = this.queueGraphId(queue);
678677
679678
if (this.zoom >= 1.35) {
680679
return (queue.jobs ?? [])
@@ -806,6 +805,14 @@
806805
return `queue-${queue.driver}-${queue.connection}-${queue.name}`.replace(/[^a-z0-9-]+/gi, '-').toLowerCase();
807806
},
808807
808+
// The graph node id a queue actually renders under: the backend's id
809+
// when the payload carries one, otherwise the local fallback. Job
810+
// nodes and the inspector must resolve queues through the same id,
811+
// or their edges never connect to the queue they belong to.
812+
queueGraphId(queue) {
813+
return this.findQueueNode(queue)?.id ?? this.queueNodeId(queue);
814+
},
815+
809816
queueStatus(queue) {
810817
if (this.queueFailedInWindow(queue) > 0) return 'critical';
811818
if (queue.wait_seconds >= 30 || queue.pending >= 500) return 'critical';

0 commit comments

Comments
 (0)