Merged all onchain items into single dashboard
This commit is contained in:
parent
5ae4353a70
commit
b86ffd0c3d
2 changed files with 68 additions and 97 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -409,4 +410,4 @@ def get_time_remaining(seconds, granularity=2):
|
|||
if value == 1:
|
||||
name = name.rstrip('s')
|
||||
result.append("{} {}".format(round(value), name))
|
||||
return ', '.join(result[:granularity])
|
||||
return ', '.join(result[:granularity])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue