Merged all onchain items into single dashboard

This commit is contained in:
Black Coffee 2022-10-20 15:09:09 +01:00
parent 5ae4353a70
commit b86ffd0c3d
2 changed files with 68 additions and 97 deletions

View file

@ -176,52 +176,25 @@
<p>Use the toggles below to control what your Gerty will display</p>
<q-toggle
v-model="formDialog.data.display_preferences.dashboard"
label="Show the dashboard"
></q-toggle>
v-model="formDialog.data.display_preferences.dashboard"
label="Show the dashboard"
></q-toggle>
<q-toggle
v-model="formDialog.data.display_preferences.fun_satoshi_quotes"
label="Satoshi Quotes"
>
<q-tooltip>Displays random quotes from Satoshi</q-tooltip>
</q-toggle>
<q-toggle
v-model="formDialog.data.display_preferences.fun_exchange_market_rate"
label="Current dirty fiat to BTC price"
></q-toggle>
<q-expansion-item
expand-separator
icon="link"
label="Onchain Information"
<q-toggle
v-model="formDialog.data.display_preferences.fun_satoshi_quotes"
label="Satoshi Quotes"
>
<q-toggle
v-model="toggleStates.onchain"
label="Toggle all"
>
<q-tooltip>Toggle all</q-tooltip>
</q-toggle>
<br>
<q-toggle
v-model="formDialog.data.display_preferences.onchain_difficulty_epoch_progress"
label="Percent of current difficulty epoch complete"
></q-toggle>
<q-tooltip>Displays random quotes from Satoshi</q-tooltip>
</q-toggle>
<q-toggle
v-model="formDialog.data.display_preferences.fun_exchange_market_rate"
label="Current dirty fiat to BTC price"
></q-toggle>
<q-toggle
v-model="formDialog.data.display_preferences.onchain_difficulty_retarget_date"
label="Estimated retarget date"
></q-toggle>
<q-toggle
v-model="formDialog.data.display_preferences.onchain_difficulty_blocks_remaining"
label="Blocks until next difficulty adjustment"
></q-toggle>
<q-toggle
v-model="formDialog.data.display_preferences.onchain_difficulty_epoch_time_remaining"
label="Estimated time until next difficulty adjustment"
></q-toggle>
</q-expansion-item>
<q-toggle
v-model="formDialog.data.display_preferences.onchain_dashboard"
label="Onchain dashboard"
></q-toggle>
<q-expansion-item
expand-separator
icon="psychology"
@ -542,10 +515,7 @@
dashboard: true,
fun_satoshi_quotes: true,
fun_exchange_market_rate: true,
onchain_difficulty_epoch_progress: true,
onchain_difficulty_retarget_date: true,
onchain_difficulty_blocks_remaining: true,
onchain_difficulty_epoch_time_remaining: true,
onchain_dashboard: true,
mempool_recommended_fees: true,
mempool_tx_count: true,
mining_current_hash_rate: true,
@ -594,10 +564,10 @@
this.formDialog.data.wallet = gerty.wallet
this.formDialog.data.lnbits_wallets = JSON.parse(gerty.lnbits_wallets)
this.formDialog.data.exchange = gerty.exchange,
this.formDialog.data.mempool_endpoint = gerty.mempool_endpoint,
this.formDialog.data.refresh_time = gerty.refresh_time,
this.formDialog.data.display_preferences = JSON.parse(gerty.display_preferences),
this.formDialog.show = true
this.formDialog.data.mempool_endpoint = gerty.mempool_endpoint,
this.formDialog.data.refresh_time = gerty.refresh_time,
this.formDialog.data.display_preferences = JSON.parse(gerty.display_preferences),
this.formDialog.show = true
},
sendFormDataGerty: function () {
if (this.formDialog.data.id) {

View file

@ -101,6 +101,7 @@ async def api_gerty_satoshi():
else:
return quote
@gerty_ext.get("/api/v1/gerty/{gerty_id}/{p}")
async def api_gerty_json(
gerty_id: str,
@ -131,7 +132,7 @@ async def api_gerty_json(
next_screen_number = 0 if ((p + 1) >= enabled_screen_count) else p + 1;
# get the sleep time
sleep_time = gerty.refresh_time if gerty.refresh_time else 300
sleep_time = gerty.refresh_time if gerty.refresh_time else 300
if gerty_should_sleep():
sleep_time_hours = 8
sleep_time = 60 * 60 * sleep_time_hours
@ -174,14 +175,8 @@ async def get_screen_data(screen_num: int, screens_list: dict, gerty):
areas.append(await get_satoshi_quotes())
elif screen_slug == "fun_exchange_market_rate":
areas.append(await get_exchange_rate(gerty))
elif screen_slug == "onchain_difficulty_epoch_progress":
areas.append(await get_onchain_stat(screen_slug, gerty))
elif screen_slug == "onchain_difficulty_retarget_date":
areas.append(await get_onchain_stat(screen_slug, gerty))
elif screen_slug == "onchain_difficulty_blocks_remaining":
areas.append(await get_onchain_stat(screen_slug, gerty))
elif screen_slug == "onchain_difficulty_epoch_time_remaining":
areas.append(await get_onchain_stat(screen_slug, gerty))
elif screen_slug == "onchain_dashboard":
areas.append(await get_onchain_dashboard(gerty))
elif screen_slug == "mempool_recommended_fees":
areas.append(await get_mempool_stat(screen_slug, gerty))
elif screen_slug == "mempool_tx_count":
@ -200,6 +195,7 @@ async def get_screen_data(screen_num: int, screens_list: dict, gerty):
return data
# Get the dashboard screen
async def get_dashboard(gerty):
areas = []
@ -283,39 +279,37 @@ async def get_exchange_rate(gerty):
return text
async def get_onchain_stat(stat_slug: str, gerty):
text = []
async def get_onchain_dashboard(gerty):
areas = []
if isinstance(gerty.mempool_endpoint, str):
async with httpx.AsyncClient() as client:
if (
stat_slug == "onchain_difficulty_epoch_progress" or
stat_slug == "onchain_difficulty_retarget_date" or
stat_slug == "onchain_difficulty_blocks_remaining" or
stat_slug == "onchain_difficulty_epoch_time_remaining"
):
r = await client.get(gerty.mempool_endpoint + "/api/v1/difficulty-adjustment")
if stat_slug == "onchain_difficulty_epoch_progress":
stat = round(r.json()['progressPercent'])
text.append(get_text_item_dict("Progress through current difficulty epoch", 15))
text.append(get_text_item_dict("{0}%".format(stat), 80))
elif stat_slug == "onchain_difficulty_retarget_date":
stat = r.json()['estimatedRetargetDate']
dt = datetime.fromtimestamp(stat / 1000).strftime("%e %b %Y at %H:%M")
text.append(get_text_item_dict("Estimated date of next difficulty adjustment", 15))
text.append(get_text_item_dict(dt, 40))
elif stat_slug == "onchain_difficulty_blocks_remaining":
stat = r.json()['remainingBlocks']
text.append(get_text_item_dict("Blocks remaining until next difficulty adjustment", 15))
text.append(get_text_item_dict("{0}".format(format_number(stat)), 80))
elif stat_slug == "onchain_difficulty_epoch_time_remaining":
stat = r.json()['remainingTime']
text.append(get_text_item_dict("Blocks remaining until next difficulty adjustment", 15))
text.append(get_text_item_dict(get_time_remaining(stat / 1000, 4), 20))
return text
r = await client.get(gerty.mempool_endpoint + "/api/v1/difficulty-adjustment")
text = []
stat = round(r.json()['progressPercent'])
text.append(get_text_item_dict("Progress through current difficulty epoch", 12))
text.append(get_text_item_dict("{0}%".format(stat), 20))
areas.append(text)
text = []
stat = r.json()['estimatedRetargetDate']
dt = datetime.fromtimestamp(stat / 1000).strftime("%e %b %Y at %H:%M")
text.append(get_text_item_dict("Estimated date of next difficulty adjustment", 12))
text.append(get_text_item_dict(dt, 20))
areas.append(text)
text = []
stat = r.json()['remainingBlocks']
text.append(get_text_item_dict("Blocks remaining until next difficulty adjustment", 12))
text.append(get_text_item_dict("{0}".format(format_number(stat)), 20))
areas.append(text)
text = []
stat = r.json()['remainingTime']
text.append(get_text_item_dict("Blocks remaining until next difficulty adjustment", 12))
text.append(get_text_item_dict(get_time_remaining(stat / 1000, 4), 20))
areas.append(text)
return areas
async def get_time_remaining_next_difficulty_adjustment(gerty):
if isinstance(gerty.mempool_endpoint, str):
@ -325,6 +319,7 @@ async def get_time_remaining_next_difficulty_adjustment(gerty):
time = get_time_remaining(stat / 1000, 3)
return time
async def get_block_height(gerty):
if isinstance(gerty.mempool_endpoint, str):
async with httpx.AsyncClient() as client:
@ -332,6 +327,7 @@ async def get_block_height(gerty):
return r.json()
async def get_mempool_stat(stat_slug: str, gerty):
text = []
if isinstance(gerty.mempool_endpoint, str):
@ -345,7 +341,7 @@ async def get_mempool_stat(stat_slug: str, gerty):
text.append(get_text_item_dict("Transactions in the mempool", 15))
text.append(get_text_item_dict("{0}".format(format_number(stat)), 80))
elif (
stat_slug == "mempool_recommended_fees"
stat_slug == "mempool_recommended_fees"
):
y_offset = 60
fees = await get_mempool_recommended_fees(gerty)
@ -365,33 +361,38 @@ async def get_mempool_stat(stat_slug: str, gerty):
fee_append = "/vB"
fee_rate = fees["economyFee"]
text.append(get_text_item_dict(
"{0} {1}{2}".format(format_number(fee_rate), ("sat" if fee_rate == 1 else "sats"), fee_append), font_size,
"{0} {1}{2}".format(format_number(fee_rate), ("sat" if fee_rate == 1 else "sats"), fee_append),
font_size,
30, pos_y))
fee_rate = fees["hourFee"]
text.append(get_text_item_dict(
"{0} {1}{2}".format(format_number(fee_rate), ("sat" if fee_rate == 1 else "sats"), fee_append), font_size,
"{0} {1}{2}".format(format_number(fee_rate), ("sat" if fee_rate == 1 else "sats"), fee_append),
font_size,
235, pos_y))
fee_rate = fees["halfHourFee"]
text.append(get_text_item_dict(
"{0} {1}{2}".format(format_number(fee_rate), ("sat" if fee_rate == 1 else "sats"), fee_append), font_size,
"{0} {1}{2}".format(format_number(fee_rate), ("sat" if fee_rate == 1 else "sats"), fee_append),
font_size,
460, pos_y))
fee_rate = fees["fastestFee"]
text.append(get_text_item_dict(
"{0} {1}{2}".format(format_number(fee_rate), ("sat" if fee_rate == 1 else "sats"), fee_append), font_size,
"{0} {1}{2}".format(format_number(fee_rate), ("sat" if fee_rate == 1 else "sats"), fee_append),
font_size,
750, pos_y))
return text
def get_date_suffix(dayNumber):
if 4 <= dayNumber <= 20 or 24 <= dayNumber <= 30:
return "th"
else:
return ["st", "nd", "rd"][dayNumber % 10 - 1]
def get_time_remaining(seconds, granularity=2):
def get_time_remaining(seconds, granularity=2):
intervals = (
# ('weeks', 604800), # 60 * 60 * 24 * 7
('days', 86400), # 60 * 60 * 24