Added some error checking

This commit is contained in:
ben 2022-09-26 19:30:40 +01:00
parent 938024fea2
commit c6cc6d34e1
4 changed files with 67 additions and 29 deletions

View file

@ -10,14 +10,15 @@ async def create_gerty(wallet_id: str, data: Gerty) -> Gerty:
gerty_id = urlsafe_short_hash() gerty_id = urlsafe_short_hash()
await db.execute( await db.execute(
""" """
INSERT INTO gerty.gertys (id, name, wallet, lnbits_wallets, sats_quote, exchange, onchain_stats, ln_stats) INSERT INTO gerty.gertys (id, name, wallet, lnbits_wallets, mempool_endpoint, sats_quote, exchange, onchain_stats, ln_stats)
VALUES (?, ?, ?, ?, ?, ?, ?, ?) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
""", """,
( (
gerty_id, gerty_id,
data.name, data.name,
data.wallet, data.wallet,
data.lnbits_wallets, data.lnbits_wallets,
data.mempool_endpoint,
data.sats_quote, data.sats_quote,
data.exchange, data.exchange,
data.onchain_stats, data.onchain_stats,

View file

@ -11,7 +11,7 @@ class Gerty(BaseModel):
name: str name: str
wallet: str wallet: str
lnbits_wallets: str = Query(None) # Wallets to keep an eye on, {"wallet-id": "wallet-read-key, etc"} lnbits_wallets: str = Query(None) # Wallets to keep an eye on, {"wallet-id": "wallet-read-key, etc"}
mempool_endpoint: str = Query("https://mempool.space") # Mempool endpoint to use mempool_endpoint: str = Query(None) # Mempool endpoint to use
sats_quote: bool = Query(False) # Fetch Satoshi quotes sats_quote: bool = Query(False) # Fetch Satoshi quotes
exchange: str = Query(None) # BTC <-> Fiat exchange rate to pull ie "USD", in 0.0001 and sats exchange: str = Query(None) # BTC <-> Fiat exchange rate to pull ie "USD", in 0.0001 and sats
onchain_stats: bool = Query(False) # Onchain stats onchain_stats: bool = Query(False) # Onchain stats

View file

@ -47,11 +47,21 @@
dense dense
size="xs" size="xs"
icon="sentiment_satisfied" icon="sentiment_satisfied"
:color="($q.dark.isActive) ? 'grey-7' : 'grey-5'" color="green"
type="a" type="a"
:href="props.row.gerty" :href="props.row.gerty"
target="_blank" target="_blank"
><q-tooltip>Launch software Gerty</q-tooltip></q-btn> ><q-tooltip>Launch software Gerty</q-tooltip></q-btn>
<q-btn
unelevated
dense
size="xs"
icon="code"
color="pink"
type="a"
:href="props.row.gertyJson"
target="_blank"
><q-tooltip>Launch software Gerty</q-tooltip></q-btn>
</q-td> </q-td>
<q-td v-for="col in props.cols" :key="col.name" :props="props"> <q-td v-for="col in props.cols" :key="col.name" :props="props">
{{ (col.name == 'tip_options' && col.value ? {{ (col.name == 'tip_options' && col.value ?
@ -138,6 +148,12 @@
:options="currencyOptions" :options="currencyOptions"
label="Exchange rate" label="Exchange rate"
></q-select> ></q-select>
<q-input
filled
dense
v-model.trim="formDialog.data.mempool_endpoint"
label="Mempool link"
><q-tooltip>Used for getting onchain/ln stats</q-tooltip></q-input>
<q-toggle <q-toggle
v-model="formDialog.data.sats_quote" v-model="formDialog.data.sats_quote"
label="Satoshi Quotes" label="Satoshi Quotes"
@ -184,6 +200,7 @@
) )
obj.fsat = new Intl.NumberFormat(LOCALE).format(obj.amount) obj.fsat = new Intl.NumberFormat(LOCALE).format(obj.amount)
obj.gerty = ['/gerty/', obj.id].join('') obj.gerty = ['/gerty/', obj.id].join('')
obj.gertyJson = ['/gerty/api/v1/gerty/', obj.id].join('')
return obj return obj
} }
@ -389,6 +406,12 @@
label: 'Sats Quote', label: 'Sats Quote',
field: 'sats_quote' field: 'sats_quote'
}, },
{
name: 'mempool_endpoint',
align: 'left',
label: 'Mempool Endpoint',
field: 'mempool_endpoint'
},
{ {
name: 'onchain_stats', name: 'onchain_stats',
align: 'left', align: 'left',
@ -411,7 +434,8 @@
data: {sats_quote: false, data: {sats_quote: false,
onchain_stats: false, onchain_stats: false,
ln_stats: false, ln_stats: false,
lnbits_wallets:[]} lnbits_wallets:[],
mempool_endpoint: "https://mempool.space"}
} }
} }
}, },
@ -420,7 +444,8 @@
this.formDialog.data = {sats_quote: false, this.formDialog.data = {sats_quote: false,
onchain_stats: false, onchain_stats: false,
ln_stats: false, ln_stats: false,
lnbits_wallets:[]} lnbits_wallets:[],
mempool_endpoint: "https://mempool.space"}
}, },
getGertys: function () { getGertys: function () {
var self = this var self = this
@ -443,6 +468,7 @@
this.formDialog.data.wallet = gerty.wallet this.formDialog.data.wallet = gerty.wallet
this.formDialog.data.lnbits_wallets = JSON.parse(gerty.lnbits_wallets) this.formDialog.data.lnbits_wallets = JSON.parse(gerty.lnbits_wallets)
this.formDialog.data.exchange = gerty.exchange, this.formDialog.data.exchange = gerty.exchange,
this.formDialog.data.mempool_endpoint = gerty.mempool_endpoint,
this.formDialog.data.sats_quote = Boolean(gerty.sats_quote) this.formDialog.data.sats_quote = Boolean(gerty.sats_quote)
this.formDialog.data.onchain_stats = Boolean(gerty.onchain_stats) this.formDialog.data.onchain_stats = Boolean(gerty.onchain_stats)
this.formDialog.data.ln_stats = Boolean(gerty.ln_stats) this.formDialog.data.ln_stats = Boolean(gerty.ln_stats)
@ -469,6 +495,7 @@
lnbits_wallets: JSON.stringify(this.formDialog.data.lnbits_wallets), lnbits_wallets: JSON.stringify(this.formDialog.data.lnbits_wallets),
sats_quote: this.formDialog.data.sats_quote, sats_quote: this.formDialog.data.sats_quote,
exchange: this.formDialog.data.exchange, exchange: this.formDialog.data.exchange,
mempool_endpoint: this.formDialog.data.mempool_endpoint,
onchain_stats: this.formDialog.data.onchain_stats, onchain_stats: this.formDialog.data.onchain_stats,
ln_stats: this.formDialog.data.ln_stats ln_stats: this.formDialog.data.ln_stats
} }

View file

@ -107,53 +107,63 @@ async def api_gerty_json(
if gerty.lnbits_wallets != "": if gerty.lnbits_wallets != "":
for lnbits_wallet in json.loads(gerty.lnbits_wallets): for lnbits_wallet in json.loads(gerty.lnbits_wallets):
wallet = await get_wallet_for_key(key=lnbits_wallet) wallet = await get_wallet_for_key(key=lnbits_wallet)
wallets.append({ if wallet:
"name": wallet.name, wallets.append({
"balance": wallet.balance_msat, "name": wallet.name,
}) "balance": wallet.balance_msat,
gertyReturn.append(wallets) "inkey": wallet.inkey,
})
gertyReturn.append(wallets)
#Get Satoshi quotes #Get Satoshi quotes
satoshi = ['sats_quote'] satoshi = ['sats_quote']
if gerty.sats_quote: if gerty.sats_quote:
satoshi.append(await api_gerty_satoshi()) quote = await api_gerty_satoshi()
gertyReturn.append(satoshi) if quote:
satoshi.append(await api_gerty_satoshi())
gertyReturn.append(satoshi)
#Get Exchange Value #Get Exchange Value
exchange = ['exchange'] exchange = ['exchange']
if gerty.exchange != "": if gerty.exchange != "":
try: try:
exchange.append({ amount = await satoshis_amount_as_fiat(100000000, gerty.exchange)
"fiat": gerty.exchange, if amount:
"amount": await satoshis_amount_as_fiat(100000000, gerty.exchange), exchange.append({
}) "fiat": gerty.exchange,
"amount": amount,
})
except: except:
pass pass
gertyReturn.append(exchange) gertyReturn.append(exchange)
onchain = ['onchain'] onchain = ['onchain']
if gerty.onchain_stats: if gerty.onchain_stats and isinstance(gerty.mempool_endpoint, str):
async with httpx.AsyncClient() as client: async with httpx.AsyncClient() as client:
difficulty = ['difficulty'] difficulty = ['difficulty']
r = await client.get(gerty.mempool_endpoint + "/api/v1/difficulty-adjustment") r = await client.get(gerty.mempool_endpoint + "/api/v1/difficulty-adjustment")
difficulty.append(r.json()) if r:
onchain.append(difficulty) difficulty.append(r.json())
onchain.append(difficulty)
mempool = ['mempool'] mempool = ['mempool']
r = await client.get(gerty.mempool_endpoint + "/api/v1/fees/mempool-blocks") r = await client.get(gerty.mempool_endpoint + "/api/v1/fees/mempool-blocks")
mempool.append(r.json()) if r:
onchain.append(mempool) mempool.append(r.json())
onchain.append(mempool)
threed = ['threed'] threed = ['threed']
r = await client.get(gerty.mempool_endpoint + "/api/v1/mining/hashrate/3d") r = await client.get(gerty.mempool_endpoint + "/api/v1/mining/hashrate/3d")
threed.append(r.json()) if r:
onchain.append(threed) threed.append(r.json())
gertyReturn.append(onchain) onchain.append(threed)
gertyReturn.append(onchain)
ln = ['ln'] ln = ['ln']
if gerty.ln_stats: if gerty.ln_stats and isinstance(gerty.mempool_endpoint, str):
async with httpx.AsyncClient() as client: async with httpx.AsyncClient() as client:
r = await client.get(gerty.mempool_endpoint + "/api/v1/lightning/statistics/latest") r = await client.get(gerty.mempool_endpoint + "/api/v1/lightning/statistics/latest")
ln.append(r.json()) if r:
gertyReturn.append(ln) ln.append(r.json())
gertyReturn.append(ln)
return gertyReturn return gertyReturn