Embedded Document Timing Out

Bokeh 2.3.1, Python 3.8

I am embedding a server page inside a flask page. Server and flask will (eventually) run in Azure environment.

I can get a basic bokeh plot up (see example) but more complex page is not loading with JS errors (see below):

Simple plot (works)

from bokeh.layouts import column
from bokeh.plotting import curdoc, figure
from bokeh.themes import Theme

fruits = ["Apples", "Pears", "Nectarines", "Plums", "Grapes", "Strawberries"]
counts = [5, 3, 4, 2, 4, 6]

p = figure(
    x_range=fruits,
    plot_height=250,
    title="Fruit Counts",
    toolbar_location=None,
    tools="",
)
p.vbar(x=fruits, top=counts, width=0.9)
p.xgrid.grid_line_color = None
p.y_range.start = 0

curdoc().add_root(column(p))

Complex plot is too big to include but I currently have it publicly exposed at: https://apps.amalfiblue.com/ceoperformance which works (albeit slowish load)

The calling flask reference looks a bit like this:

@home_bp.route('/ceoperf_app', methods=['GET'])
def ceoperf_app():
    """CEO Performance Embed"""
    with pull_session(url="https://apps.amalfiblue.com/ceoperformance") as session:
        script = server_session(session_id=session.id, url="https://apps.amalfiblue.com/ceoperformance")
        return render_template("embed.jinja2", 
#             user=session["amalfiblueUser"],
            script=script, 
            title='CEO Performance'
        )

This works when I direct it to the simple page (top) but when directed at the more complex page which looks like this…

class CEOPerformance():
.... lots of code to define class with tabs and such as shown...

dataDir = 'ceoperformance/CEOData/'
#dataDir = 'CEOData/'

print('Here')

ceoperf = CEOPerformance(dataDir)

curdoc().title = "CEO Performance"
curdoc().add_root(ceoperf.make_doc())

When I try sending the flask link to this URL I get this in the console…

WebSocket connection to 'ws://apps.amalfiblue.com/ceoperformance/ws' failed: 
connect @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:585
n.pull_session @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:585
(anonymous) @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:584
t.add_document_from_session @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:584
w @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:163
t.embed_items @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:163
bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:585 [bokeh] Failed to connect to Bokeh server: Could not open websocket
_on_error @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:585
socket.onerror @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:585
error (async)
(anonymous) @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:585
connect @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:585
n.pull_session @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:585
(anonymous) @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:584
t.add_document_from_session @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:584
w @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:163
t.embed_items @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:163
async function (async)
t.embed_items @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:163
embed_document @ b8f05053-5ed7-4487-8737-e4851ee61480:118
(anonymous) @ b8f05053-5ed7-4487-8737-e4851ee61480:122
(anonymous) @ b8f05053-5ed7-4487-8737-e4851ee61480:138
o.safely @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:593
fn @ b8f05053-5ed7-4487-8737-e4851ee61480:112
(anonymous) @ b8f05053-5ed7-4487-8737-e4851ee61480:141
inline_js @ b8f05053-5ed7-4487-8737-e4851ee61480:143
run_inline_js @ b8f05053-5ed7-4487-8737-e4851ee61480:154
(anonymous) @ b8f05053-5ed7-4487-8737-e4851ee61480:165
(anonymous) @ b8f05053-5ed7-4487-8737-e4851ee61480:27
run_callbacks @ b8f05053-5ed7-4487-8737-e4851ee61480:25
on_load @ b8f05053-5ed7-4487-8737-e4851ee61480:55
load (async)
load_libs @ b8f05053-5ed7-4487-8737-e4851ee61480:80
(anonymous) @ b8f05053-5ed7-4487-8737-e4851ee61480:163
(anonymous) @ b8f05053-5ed7-4487-8737-e4851ee61480:168
bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:584 [bokeh] Failed to load Bokeh session uURfJvdway36FgAd1Ny6nbApnx7tBSM4IFEBfIDndxXN: Error: Could not open websocket
t.add_document_from_session @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:584
async function (async)
t.add_document_from_session @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:584
w @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:163
t.embed_items @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:163
async function (async)
t.embed_items @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:163
embed_document @ b8f05053-5ed7-4487-8737-e4851ee61480:118
(anonymous) @ b8f05053-5ed7-4487-8737-e4851ee61480:122
(anonymous) @ b8f05053-5ed7-4487-8737-e4851ee61480:138
o.safely @ bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:593
fn @ b8f05053-5ed7-4487-8737-e4851ee61480:112
(anonymous) @ b8f05053-5ed7-4487-8737-e4851ee61480:141
inline_js @ b8f05053-5ed7-4487-8737-e4851ee61480:143
run_inline_js @ b8f05053-5ed7-4487-8737-e4851ee61480:154
(anonymous) @ b8f05053-5ed7-4487-8737-e4851ee61480:165
(anonymous) @ b8f05053-5ed7-4487-8737-e4851ee61480:27
run_callbacks @ b8f05053-5ed7-4487-8737-e4851ee61480:25
on_load @ b8f05053-5ed7-4487-8737-e4851ee61480:55
load (async)
load_libs @ b8f05053-5ed7-4487-8737-e4851ee61480:80
(anonymous) @ b8f05053-5ed7-4487-8737-e4851ee61480:163
(anonymous) @ b8f05053-5ed7-4487-8737-e4851ee61480:168
bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:163 Error rendering Bokeh items: Error: Could not open websocket
    at d._on_error (bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:585)
    at WebSocket.socket.onerror (bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:585)
bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:585 [bokeh] Lost websocket 0 connection, 1006 ()
bokeh.min.js?v=c398083b96ab5947b8595645968506f346bad6c68d652313ba142d90c4976b14379090fb372b9c8fbdf69341a936f95e6ae7fbdc8cb2be7911ad5e2fbd8433e2:585 [bokeh] Websocket connection 0 disconnected, will not attempt to reconnect

Is this potentially a timeout or load issue that can be resolved? I checked the JS Console network pane and it doesn’t look like more than (or anywhere near) 20MB of page load.

tx
Andrew

You have some network configuration issue:

This could be one your end (e.g. need to set --allow-webocket-origins on the Bokeh server), o r it could be on your network ops end (e.g. a proxy or firewall blocks web socket connections). It’s not possible to speculate without more information.

Just to close this out and in case anyone wonders - I managed to get this up in Azure with secure bokeh server embedded in a separate flask web app. Pretty much per specs as given.

My problems related to the app server config so I deleted it entirely and recreated from scratch. That seemed to sort it all.

Thanks Bryan++