From 214069cb257d3911014ef8646fb85e0ab9fe84d2 Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Fri, 17 Sep 2021 12:16:58 -0400 Subject: [PATCH] feat: display mailserver interactions --- .../tasks/marathon/mailserver/model.nim | 26 ++++++++------ ui/app/AppLayouts/Node/NodeLayout.qml | 36 +++++++++++++++++-- vendor/status-lib | 2 +- 3 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/app_service/tasks/marathon/mailserver/model.nim b/src/app_service/tasks/marathon/mailserver/model.nim index 92540d930e..f4df35309e 100644 --- a/src/app_service/tasks/marathon/mailserver/model.nim +++ b/src/app_service/tasks/marathon/mailserver/model.nim @@ -81,7 +81,7 @@ proc isActiveMailserverAvailable*(self: MailserverModel): bool = result = self.nodes[self.activeMailserver] == MailserverStatus.Connected proc connect(self: MailserverModel, enode: string) = - debug "Connecting to mailserver", enode=enode.substr[enode.len-40..enode.len-1] + info "Connecting to mailserver", enode=enode.substr[enode.len-40..enode.len-1] var connected = false # TODO: this should come from settings var knownMailservers = initHashSet[string]() @@ -92,6 +92,7 @@ proc connect(self: MailserverModel, enode: string) = return self.activeMailserver = enode + info "Mailserver changed", enode self.events.emit("mailserver:changed", MailserverArgs(peer: enode)) # Adding a peer and marking it as connected can't be executed sync, because @@ -109,6 +110,7 @@ proc connect(self: MailserverModel, enode: string) = self.lastConnectionAttempt = cpuTime() if connected: + info "Mailserver available" self.events.emit("mailserverAvailable", MailserverArgs()) proc peerSummaryChange*(self: MailserverModel, peers: seq[string]) = @@ -121,7 +123,7 @@ proc peerSummaryChange*(self: MailserverModel, peers: seq[string]) = var mailserverAvailable = false for knownPeer in self.nodes.keys: if not peers.contains(knownPeer) and self.nodes[knownPeer] != MailserverStatus.Disconnected: - debug "Peer disconnected", peer=knownPeer + info "Peer disconnected", peer=knownPeer self.nodes[knownPeer] = MailserverStatus.Disconnected self.events.emit("peerDisconnected", MailserverArgs(peer: knownPeer)) if self.activeMailserver == knownPeer: @@ -130,7 +132,7 @@ proc peerSummaryChange*(self: MailserverModel, peers: seq[string]) = for peer in peers: if self.nodes.hasKey(peer) and (self.nodes[peer] == MailserverStatus.Connected): continue - debug "Peer connected", peer + info "Peer connected", peer self.nodes[peer] = MailserverStatus.Connected self.events.emit("peerConnected", MailserverArgs(peer: peer)) @@ -140,24 +142,24 @@ proc peerSummaryChange*(self: MailserverModel, peers: seq[string]) = mailserverAvailable = true if mailserverAvailable: - debug "Mailserver available" + info "Mailserver available" self.events.emit("mailserverAvailable", MailserverArgs()) proc requestMessages*(self: MailserverModel) = - debug "Requesting messages from", mailserver=self.activeMailserver + info "Requesting messages from", mailserver=self.activeMailserver discard status_mailservers.requestAllHistoricMessages() proc requestStoreMessages*(self: MailserverModel, topics: seq[string], fromValue: int64 = 0, toValue: int64 = 0, force: bool = false) = - debug "Requesting messages from", mailserver=self.activeMailserver + info "Requesting messages from", mailserver=self.activeMailserver let generatedSymKey = status_chat.generateSymKeyFromPassword() status_mailservers.requestStoreMessages(topics, generatedSymKey, self.activeMailserver, 1000, fromValue, toValue, force) proc requestMoreMessages*(self: MailserverModel, chatId: string) = - debug "Requesting more messages from", mailserver=self.activeMailserver, chatId=chatId + info "Requesting more messages from", mailserver=self.activeMailserver, chatId=chatId discard status_mailservers.syncChatFromSyncedFrom(chatId) proc fillGaps*(self: MailserverModel, chatId: string, messageIds: seq[string]) = - debug "Requesting fill gaps from", mailserver=self.activeMailserver, chatId=chatId + info "Requesting fill gaps from", mailserver=self.activeMailserver, chatId=chatId discard status_mailservers.fillGaps(chatId, messageIds) proc findNewMailserver(self: MailserverModel) = @@ -172,7 +174,9 @@ proc findNewMailserver(self: MailserverModel) = availableMailservers.sort(cmpMailserverReply) # No mailservers where returned... do nothing. - if availableMailservers.len == 0: return + if availableMailservers.len == 0: + warn "No mailservers available" + return # Picks a random mailserver amongs the ones with the lowest latency # The pool size is 1/4 of the mailservers were pinged successfully @@ -185,7 +189,7 @@ proc findNewMailserver(self: MailserverModel) = proc cycleMailservers(self: MailserverModel) = warn "Automatically switching mailserver" if self.activeMailserver != "": - warn "Disconnecting active mailserver", peer=self.activeMailserver + info "Disconnecting active mailserver", peer=self.activeMailserver self.nodes[self.activeMailserver] = MailserverStatus.Disconnected removePeer(self.activeMailserver) self.activeMailserver = "" @@ -193,7 +197,7 @@ proc cycleMailservers(self: MailserverModel) = proc checkConnection*(self: MailserverModel) {.async.} = while true: - debug "Verifying mailserver connection state..." + info "Verifying mailserver connection state..." let pinnedMailserver = status_settings.getPinnedMailserver() if pinnedMailserver != "" and self.activeMailserver != pinnedMailserver: # connect to current mailserver from the settings diff --git a/ui/app/AppLayouts/Node/NodeLayout.qml b/ui/app/AppLayouts/Node/NodeLayout.qml index 185ad69d99..1bee0ae489 100644 --- a/ui/app/AppLayouts/Node/NodeLayout.qml +++ b/ui/app/AppLayouts/Node/NodeLayout.qml @@ -100,6 +100,26 @@ Item { } } + ColumnLayout { + id: mailserverLogsContainer + height: 300 + StyledText { + color: Style.current.lightBlueText + text: "Mailserver Interactions:" + Layout.rightMargin: Style.current.padding + Layout.leftMargin: Style.current.padding + Layout.fillWidth: true + font.weight: Font.Medium + font.pixelSize: 20 + } + StyledTextArea { + id: mailserverLogTxt + text: "" + customHeight: 200 + textField.readOnly: true + } + } + ColumnLayout { id: logContainer height: 300 @@ -119,10 +139,20 @@ Item { customHeight: 200 textField.readOnly: true } + } - Connections { - target: nodeModel - function onLog(logContent) { + Connections { + target: nodeModel + function onLog(logContent) { + // TODO: this is ugly, but there's not even a design for this section + if(logContent.indexOf("mailserver") > 0){ + let lines = mailserverLogTxt.text.split("\n"); + if (lines.length > 10){ + lines.shift(); + } + lines.push(logContent.trim()) + mailserverLogTxt.text = lines.join("\n") + } else { let lines = logsTxt.text.split("\n"); if (lines.length > 5){ lines.shift(); diff --git a/vendor/status-lib b/vendor/status-lib index f42c249395..3655396b57 160000 --- a/vendor/status-lib +++ b/vendor/status-lib @@ -1 +1 @@ -Subproject commit f42c249395fb969fbdc75be8f4da5902c4a343ad +Subproject commit 3655396b572e389a7e4b7e1d2311afa90514ad98