feat: show relay NOTICE

This commit is contained in:
Vlad Stan 2023-06-30 11:46:47 +03:00
parent f244f60c56
commit 1601f71b03
6 changed files with 44 additions and 10 deletions

View file

@ -13,6 +13,7 @@ class RelayStatus(BaseModel):
num_received_events: Optional[int] = 0 num_received_events: Optional[int] = 0
error_counter: Optional[int] = 0 error_counter: Optional[int] = 0
error_list: Optional[List] = [] error_list: Optional[List] = []
notice_list: Optional[List] = []
class Relay(BaseModel): class Relay(BaseModel):
id: Optional[str] = None id: Optional[str] = None

View file

@ -128,11 +128,13 @@ class Relay:
], ],
} }
def add_notice(self, notice: str):
self.notice_list = ([notice] + self.notice_list)[:20]
def _on_open(self, _): def _on_open(self, _):
logger.info(f"Connected to relay: '{self.url}'.") logger.info(f"Connected to relay: '{self.url}'.")
self.connected = True self.connected = True
def _on_close(self, _, status_code, message): def _on_close(self, _, status_code, message):
logger.warning(f"Connection to relay {self.url} closed. Status: '{status_code}'. Message: '{message}'.") logger.warning(f"Connection to relay {self.url} closed. Status: '{status_code}'. Message: '{message}'.")
self.close() self.close()

View file

@ -6,7 +6,7 @@ import time
from loguru import logger from loguru import logger
from .filter import Filters from .filter import Filters
from .message_pool import MessagePool from .message_pool import MessagePool, NoticeMessage
from .relay import Relay, RelayPolicy from .relay import Relay, RelayPolicy
from .subscription import Subscription from .subscription import Subscription
@ -80,6 +80,11 @@ class RelayManager:
if relay.policy.should_write: if relay.policy.should_write:
relay.publish(message) relay.publish(message)
def handle_notice(self, notice: NoticeMessage):
relay = next((r for r in self.relays.values() if r.url == notice.url))
if relay:
relay.add_notice(notice.content)
def _open_connection(self, relay: Relay, ssl_options: dict = None, proxy: dict = None): def _open_connection(self, relay: Relay, ssl_options: dict = None, proxy: dict = None):
self.threads[relay.url] = threading.Thread( self.threads[relay.url] = threading.Thread(
target=relay.connect, target=relay.connect,

View file

@ -121,6 +121,7 @@ class NostrRouter:
my_event = NostrRouter.received_subscription_notices.pop(0) my_event = NostrRouter.received_subscription_notices.pop(0)
# note: we don't send it to the user because we don't know who should receive it # note: we don't send it to the user because we don't know who should receive it
logger.info(f"Relay ('{my_event.url}') notice: '{my_event.content}']") logger.info(f"Relay ('{my_event.url}') notice: '{my_event.content}']")
nostr.client.relay_manager.handle_notice(my_event)

View file

@ -58,12 +58,15 @@
<div> <div>
⬆️ <span v-text="col.value.sentEvents"></span> ⬆️ <span v-text="col.value.sentEvents"></span>
⬇️ <span v-text="col.value.receveidEvents"></span> ⬇️ <span v-text="col.value.receveidEvents"></span>
⚠️ <span v-text="col.value.errorCount"> <span @click="showLogDataDialog(col.value.errorList)" class="cursor-pointer">
⚠️ <span v-text="col.value.errorCount">
</span>
</span> </span>
<q-tooltip> <span @click="showLogDataDialog(col.value.noticeList)" class="cursor-pointer float-right">
<span v-for="e in col.value.errorList" v-text="e"></span><br>
</q-tooltip> </span>
</span>
</div> </div>
</div> </div>
<div v-else-if="col.name == 'delete'"> <div v-else-if="col.name == 'delete'">
@ -198,6 +201,17 @@
</q-card-section> </q-card-section>
</q-card> </q-card>
</div> </div>
<q-dialog v-model="logData.show" position="top">
<q-card class="q-pa-lg q-pt-xl">
<q-input filled dense v-model.trim="logData.data" type="textarea" rows="25" cols="200" label="Log Data"></q-input>
<div class="row q-mt-lg">
<q-btn v-close-popup flat color="grey" class="q-ml-auto">Close</q-btn>
</div>
</q-card>
</q-dialog>
</div> </div>
{% endraw %} {% endblock %} {% block scripts %} {{ window_vars(user) }} {% endraw %} {% endblock %} {% block scripts %} {{ window_vars(user) }}
@ -212,8 +226,8 @@
sentEvents: obj.status.num_sent_events, sentEvents: obj.status.num_sent_events,
receveidEvents: obj.status.num_received_events, receveidEvents: obj.status.num_received_events,
errorCount: obj.status.error_counter, errorCount: obj.status.error_counter,
errorList: obj.status.error_list errorList: obj.status.error_list,
noticeList: obj.status.notice_list
} }
obj.ping = obj.ping + ' ms' obj.ping = obj.ping + ' ms'
@ -226,6 +240,7 @@
'HH:mm:ss' 'HH:mm:ss'
) )
} }
console.log('### obj', obj)
return obj return obj
} }
@ -239,6 +254,10 @@
relayToAdd: '', relayToAdd: '',
nostrrelayLinks: [], nostrrelayLinks: [],
filter: '', filter: '',
logData: {
show: false,
data: null
},
testData: { testData: {
show: false, show: false,
wsConnection: null, wsConnection: null,
@ -492,6 +511,11 @@
console.warn(error) console.warn(error)
} }
}, },
showLogDataDialog: function (data = []) {
console.log('### showLogDataDialog', data)
this.logData.data = data.join('\n')
this.logData.show = true
},
exportlnurldeviceCSV: function () { exportlnurldeviceCSV: function () {
var self = this var self = this
LNbits.utils.exportCSV(self.relayTable.columns, this.nostrLinks) LNbits.utils.exportCSV(self.relayTable.columns, this.nostrLinks)

View file

@ -34,7 +34,8 @@ async def api_get_relays() -> RelayList:
"num_sent_events": r.num_sent_events, "num_sent_events": r.num_sent_events,
"num_received_events": r.num_received_events, "num_received_events": r.num_received_events,
"error_counter": r.error_counter, "error_counter": r.error_counter,
"error_list": r.error_list "error_list": r.error_list,
"notice_list": r.notice_list,
}, },
ping=r.ping, ping=r.ping,
active=True, active=True,