Populating page even if block is not found

This commit is contained in:
godmodegalactus 2023-12-15 12:01:06 +01:00
parent 1510a4f88c
commit 8b644a9b67
No known key found for this signature in database
GPG Key ID: 22DA4A30887FDA3C
3 changed files with 46 additions and 41 deletions

8
app.py
View File

@ -80,15 +80,11 @@ def recent_blocks():
def get_block(slot):
this_config = config.get_config()
start = time.time()
maprows = list(block_details_database.find_block_by_slotnumber(slot))
block = block_details_database.find_block_by_slotnumber(slot)
elapsed = time.time() - start
if elapsed > .5:
print("block_details_database.find_block_by_slotnumber() took", elapsed, "seconds")
if len(maprows):
return render_template('block_details.html', config=this_config, block=maprows[0])
else:
return "Block not found", 404
return render_template('block_details.html', config=this_config, block=block)
def is_slot_number(raw_string):
return re.fullmatch("[0-9,]+", raw_string) is not None

View File

@ -28,19 +28,46 @@ def find_block_by_slotnumber(slot_number: int):
""", args=[slot_number])
assert len(maprows) <= 1, "Slot is primary key - find zero or one"
next_slot = (
postgres_connection.query(
"""
SELECT
min(slot) as next_slot
FROM banking_stage_results_2.blocks
WHERE slot > %s
""", args=[slot_number])
)
prev_slot = (
postgres_connection.query(
"""
SELECT
max(slot) as prev_slot
FROM banking_stage_results_2.blocks
WHERE slot < %s
""", args=[slot_number])
)
next_block = list(next_slot)[0]['next_slot']
prev_block = list(prev_slot)[0]['prev_slot']
for row in maprows:
slot = row["slot"]
if len(maprows) == 0:
block = {}
block["next_block"] = next_block
block["prev_block"] = prev_block
block["supp_infos"] = {}
return block
else:
block = list(maprows)[0]
slot = block["slot"]
row['supp_infos'] = json.loads(row['supp_infos'])
block['supp_infos'] = json.loads(block['supp_infos'])
# note: sort order is undefined
accountinfos = (
postgres_connection.query(
"""
SELECT
amb.*,
acc.account_key
amb.*,
acc.account_key
FROM banking_stage_results_2.accounts_map_blocks amb
INNER JOIN banking_stage_results_2.accounts acc ON acc.acc_id=amb.acc_id
WHERE slot = %s
@ -62,36 +89,11 @@ def find_block_by_slotnumber(slot_number: int):
account_info_expanded.append(info)
account_info_expanded.sort(key=lambda acc: int(acc['cu_consumed']), reverse=True)
row["heavily_writelocked_accounts_parsed"] = [acc for acc in account_info_expanded if acc['is_write_locked'] is True]
row["heavily_readlocked_accounts_parsed"] = [acc for acc in account_info_expanded if acc['is_write_locked'] is False]
next_slot = (
postgres_connection.query(
"""
SELECT
slot
FROM banking_stage_results_2.blocks
WHERE slot > %s ORDER BY slot LIMIT 1
""", args=[slot])
)
prev_slot = (
postgres_connection.query(
"""
SELECT
slot
FROM banking_stage_results_2.blocks
WHERE slot < %s ORDER BY slot desc LIMIT 1
""", args=[slot])
)
next_block = None
for block in next_slot:
next_block = block['slot']
prev_block = None
for block in prev_slot:
prev_block = block['slot']
row["next_block"] = next_block
row["prev_block"] = prev_block
return maprows
block["heavily_writelocked_accounts_parsed"] = [acc for acc in account_info_expanded if acc['is_write_locked'] is True]
block["heavily_readlocked_accounts_parsed"] = [acc for acc in account_info_expanded if acc['is_write_locked'] is False]
block["next_block"] = next_block
block["prev_block"] = prev_block
return block
def is_matching_blockhash(block_hash):

View File

@ -27,8 +27,13 @@
<table class="table table-sm table-nowrap card-table">
<tbody class="list">
<tr>
{% if block.slot %}
<td class="w-100">Slot</td>
<td class="text-lg-end font-monospace"><span class="font-monospace"><a href="https://explorer.solana.com//block/{{block.slot}}?cluster={{config.cluster}}">{{ block.slot | slotnumber }}</a></span></td>
{% else %}
<td class="w-100">Status</td>
<td class="text-lg-end font-monospace"><span>Block Not Found</span></td>
{% endif %}
</tr>
<tr>
<td class="w-100">Blockhash</td>
@ -47,6 +52,7 @@
<td class="w-100">Previous Block</td>
<td class="text-lg-end font-monospace"><span class="font-monospace"><a href="/block/{{block.prev_block}}">{{ block.prev_block | slotnumber }}</a></span></td>
</tr>
{% if block.slot %}
<tr>
<td class="w-100">Processed Transactions</td>
<td class="text-lg-end font-monospace"><span>{{ block.processed_transactions | count }}</span></td>
@ -79,6 +85,7 @@
<td class="w-100">Prioritization Fees p90</td>
<td class="text-lg-end font-monospace"><span>{{ block.supp_infos.p_90 | lamports }} micro-lamports/CU</span></td>
</tr>
{% endif %}
</tbody>
</table>
</div>