import asyncio
import requests
from h2o_wave import main, Q, app, ui, on, run_on, data # noqa F401
from h2o_dashboard.pages.overview_page.overview_stream_widget import Overview_StreamWidget
from h2o_dashboard.util import add_card
[docs]
async def add_tradingview_advanced_chart(q: Q, card_name: str, box: str):
await add_card(q, card_name, ui.form_card(box=box, items=[
ui.frame(content="""<!-- TradingView Widget BEGIN -->
<div class="tradingview-widget-container" style="height:100%;width:100%">
<div class="tradingview-widget-container__widget" style="height:calc(100% - 32px);width:100%"></div>
<div class="tradingview-widget-copyright"><a href="https://www.tradingview.com/" rel="noopener nofollow" target="_blank"><span class="blue-text">Track all markets on TradingView</span></a></div>
<script type="text/javascript" src="https://s3.tradingview.com/external-embedding/embed-widget-advanced-chart.js" async>
{
"autosize": true,
"symbol": "OKX:BTCUSDT.P",
"interval": "D",
"timezone": "Etc/UTC",
"theme": "light",
"style": "1",
"locale": "en",
"enable_publishing": false,
"withdateranges": true,
"hide_side_toolbar": false,
"allow_symbol_change": true,
"details": true,
"hotlist": true,
"theme": "dark",
"calendar": true,
"show_popup_button": true,
"popup_width": "1000",
"popup_height": "650",
"support_host": "https://www.tradingview.com"
}
</script>
</div>
<!-- TradingView Widget END -->""", height="500px", width="100%")
]))
# Usage
async def _ping_services(q):
header_card = q.page['Overview_Page_Header']
responses = []
try:
rest_handling_check= await q.run(requests.request, 'GET', 'http://localhost:8080/health')
responses.append(rest_handling_check.text)
except Exception as e:
responses.append(e)
print(f'{e = }')
try:
websocket_handling_check = await q.run(requests.request, 'GET', 'http://localhost:8081/health')
responses.append(websocket_handling_check.text)
except Exception as e:
responses.append(e)
print(f'{e = }')
header_card.subtitle = (f'Rest Service Ping: {responses[0]} | Websocket Service Ping: {responses[1]}')
[docs]
async def overview_page(q: Q, update_seconds: int = 2):
print("Loading Overview Page")
'''Header'''
await add_card(q, 'Overview_Page_Header',
ui.header_card(box='header', title='Overview Home', subtitle='Welcome to the AntBot Dashboard',
# Color
color='transparent',
icon='Home',
icon_color=None,
items=[
ui.message_bar(
type='info',
text=f''
),
]
))
await add_tradingview_advanced_chart(q, card_name='Overview_Page_TradingView_Advanced_Chart', box='grid_1')
# Redis Iframe Card
await add_card(q, 'Redis_Iframe_Card',
ui.form_card(box='grid_3', items=[
ui.frame(content="""<iframe src="http://localhost:8001" width="100%" height="100%"></iframe>""",
height="800px", width="100%")
]))
'''Init Widgets'''
overview_widget = Overview_StreamWidget(q=q, card_name='grid_2', box='grid_2')
'''Init RealTime Page Cards'''
await overview_widget.add_cards()
if not isinstance(q.client.overview_tv_card_symbol_name, str):
q.client.overview_tv_card_symbol_name = "OKX:BTCUSDT.P"
await q.page.save()
try:
while True:
if not q.client.overview_page_running_event.is_set():
print("Breaking Overview Page Loop")
break
await asyncio.sleep(update_seconds)
'''CARD UPDATES'''
if await overview_widget._is_initialized():
print("Updating Overview card")
await overview_widget.update_cards()
else:
print("Adding Overview card")
await overview_widget.add_cards()
# await _ping_services(q)
await q.page.save()
except asyncio.CancelledError:
print("Cancelled")
pass
finally:
print("Finally")
q.client.overview_page_running_event.clear()
await q.page.save()