我目前正在使用Plotly Dash开发基于JVM(Kotlin)服务的仪表板。本质上,JVM服务将消息(通过ZMQ)推送到我的Python Dash脚本,该脚本又更新了一系列实时图表。
除了图表之外,我还想在Dash仪表板中显示服务的日志消息(它们当前显示在控制台中并写入文件中)。我可以轻松地修改JVM应用程序/ Python脚本以通过ZMQ发送/接收消息,但是我找不到能够实时显示这些消息的Dash组件。
由于消息的吞吐量非常高(每秒几十条),我希望能够按级别(信息,警告等)和其他条件(正则表达式为理想)。我阅读了Dash文档,但找不到适合我需求的组件。有什么方法可以在Dash中实现?
感谢您的帮助!
答案 0 :(得分:1)
我不熟悉您如何在脚本中接收消息,但是您要使用的内容涉及:
普通html.Div(id='log-div',style=dict(height='300px',overflow='auto'))
只是可滚动的空div
一个类似于
@app.callback(
Output('log-div','children'),
[Input('log-div','children')
)
def log_content(old_logs):
# wait for whatever time interval you want between updating the messages
time.sleep(2)
# take in the messages through some function
messages = receive_messages_function()
# filter the messages here
messages = filter_messages_function()
# old_logs is a list of the old messages, with each line being a
# separate div (to separate the messages, this can be done in many different ways).
# So what you do is add the new filtered messages to the old filtered messages
# Note - this assumes the messages are in a list of some sort; it doesn't matter
# as the concept is the same - just add the new messages after the old ones
messages = old_logs + messages
return messages
这可以工作,但是您必须确保sleep()
不会妨碍应用程序其余部分的工作(即,将threaded=True
传递给app.run_server ()或配置要线程化的服务器对象。
希望这会有所帮助!提出任何问题/反馈意见,我很乐意答复。