Debugging Container Networking#
The following tests may help pinpoint loading failures.
Prerequisites#
Check the main tests (graphistry/graphistry-cli)
All containers are running
Healthchecks passes
Mongo container#
A. Host is running Mongo#
Note: Database, collection initializated by launch (e.g., during init) and does not persist between runs.
docker exec monolith-network-mongo /bin/bash -c "echo 'db.stats().ok' | mongo localhost/cluster -quiet"
=>
1
B. Mongo has registered workers#
Note: Populated by monolith-network-viz on node process start
docker exec monolith-network-mongo /bin/bash -c "echo 'db.node_monitor.find()' | mongo localhost/cluster -quiet"
=> 10+ workers
{ "_id" : ObjectId("5b4d7049f160a28b5001a6bf"), "ip" : "localhost", "pid" : 9867, "port" : 10011, "active" : true, "updated" : ISODate("2018-07-30T16:18:31.835Z") }
{ "_id" : ObjectId("5b4d727ff160a28b5001a6c3"), "ip" : "localhost", "pid" : 13325, "port" : 10002, "active" : true, "updated" : ISODate("2018-07-30T16:18:30.697Z") }
{ "_id" : ObjectId("5b4d729af160a28b5001a6c4"), "ip" : "localhost", "pid" : 13392, "port" : 10010, "active" : true, "updated" : ISODate("2018-07-30T16:18:32.108Z") }
{ "_id" : ObjectId("5b4d72e0f160a28b5001a6ca"), "ip" : "localhost", "pid" : 13966, "port" : 10001, "active" : true, "updated" : ISODate("2018-07-30T16:18:31.205Z") }
{ "_id" : ObjectId("5b4d7306f160a28b5001a6cc"), "ip" : "localhost", "pid" : 14156, "port" : 10009, "active" : true, "updated" : ISODate("2018-07-30T16:18:31.717Z") }
{ "_id" : ObjectId("5b4d75fff160a28b5001a6d0"), "ip" : "localhost", "pid" : 17872, "port" : 10000, "active" : true, "updated" : ISODate("2018-07-30T16:18:30.618Z") }
...
Browser#
A. Can access site:#
Browse to
curl http://MY_GRAPHISTRY_SERVER.com/central/healthcheck
=>
{"success":true,"lookup_id":"<NUMBER>","uptime_ms":<NUMBER>,"interval_ms":<NUMBER>}
B. Browser has web sockets enabled#
Passes test at https://www.websocket.org/echo.html
C. Can follow central redirect:#
Open browser developer network analysis panel and visit
http://MY_GRAPHISTRY_SERVER.com/graph/graph.html?dataset=Twitter
=>
302 on `/graph/graph.html?dataset=Twitter
200 on `/graph.graph.html?dataset=Twitter&workbook=<HASH>`
Page UI loads (`vendor.<HASH>.css`, ...)
Socket connects (`/worker/<NUMBER>/socket.io/?dataset=Twitter&...`)
Dataset positions stream in (`/worker/<NUMBER>/vbo?id=<HASH>&buffer=curPoints`)
This call sequence stress a lot of the pipeline.
NGINX#
Note Assumes underlying containers are fulfilling these requests (see other tests)
A. Can server central routes#
curl -s -I localhost/central/healthcheck | grep HTTP
=>
HTTP/1.1 200 OK
B. Can receive central redirect:#
curl -s -I localhost/graph/graph.html?dataset=Twitter | grep "HTTP\|Location"
=>
HTTP/1.1 302 Found
Location: /graph/graph.html?dataset=Twitter&workbook=<HASH>
and
curl -s -I localhost/graph/graph.html?dataset=Twitter | grep "HTTP\|Location"
=>
HTTP/1.1 302 Found
Location: /graph/graph.html?dataset=Twitter&workbook=<HASH>
C. Can serve worker routes#
curl -s -I localhost/worker/10000/healthcheck | grep HTTP
=>
HTTP/1.1 200 OK
Viz container#
A. Container has a running central server#
docker exec monolith-network-viz curl -s -I localhost:3000/central/healthcheck | grep HTTP
=>
HTTP/1.1 200 OK
and
docker exec monolith-network-viz curl -s -I localhost:3000/graph/graph.html?dataset=Twitter | grep "HTTP\|Location"
=>
HTTP/1.1 302 Found
Location: /graph/graph.html?dataset=Twitter&workbook=<HASH>
C. Can communicate with Mongo#
First find mongo configuration for MONGO_USERNAME and MONGO_PASSWORD:
docker exec monolith-network-viz cat central-cloud-options.json or docker exec monolith-network-viz ps -eafww | grep central
Plug those into <MONGO_USERNAME> and <MONGO_PASSWORD> below:
docker exec -w /var/graphistry/packages/central monolith-network-viz node -e "x = require('mongodb').MongoClient.connect('mongodb://<MONGO_USERNAME><MONGO_PASSWORD>@mongo/cluster').then(function (db) { return db.collection('node_monitor').find() }).then(function (cursor) { return cursor.toArray() }).then(console.log.bind(null, 'ok'), console.error.bind(null, 'error'))"
=>
ok [ { _id: <HASH>,
ip: 'localhost',
pid: <NUMBER>,
port: <NUMBER>,
active: true,
updated: <TIME> },
{ _id: <HASH>,
ip: 'localhost',
pid: <NUMBER>,
port: <NUMBER>,
active: true,
updated: <TIME> },
...
D. Has running workers#
docker exec monolith-network-viz curl -s -I localhost:10000/healthcheck | grep HTTP
=>
HTTP/1.1 200 OK