From f1307614c688b7fa6c99c2dfac539ab4364e5373 Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 4 May 2020 16:59:46 +0000 Subject: [PATCH] Console: Add log clear buttons (ticket #2449) --- .../i2p/router/web/helpers/LogsHelper.java | 48 ++++++++++++++++++- apps/routerconsole/jsp/logs.jsp | 26 +++++++++- .../resources/themes/console/dark/console.css | 10 +++- .../themes/console/light/console.css | 13 +++-- 4 files changed, 88 insertions(+), 9 deletions(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/LogsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/LogsHelper.java index 53e12bd93..a59090b41 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/LogsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/LogsHelper.java @@ -13,10 +13,12 @@ import java.util.jar.Attributes; import net.i2p.I2PAppContext; import net.i2p.crypto.SigType; import net.i2p.router.web.ConfigServiceHandler; +import net.i2p.router.web.CSSHelper; import net.i2p.router.web.HelperBase; import net.i2p.router.web.RouterConsoleRunner; import net.i2p.util.FileUtil; import net.i2p.util.Translate; +import net.i2p.util.UIMessages; public class LogsHelper extends HelperBase { @@ -74,13 +76,55 @@ public class LogsHelper extends HelperBase { } /** - * Side effect - calls logManager.flush() + * */ public String getCriticalLogs() { - _context.logManager().flush(); return formatMessages(_context.logManager().getBuffer().getMostRecentCriticalMessages()); } + /** + * Call before getLogs() + * + * @return -1 if none + * @since 0.9.46 + */ + public int getLastMessageNumber() { + UIMessages msgs = _context.logManager().getBuffer().getUIMessages(); + if (msgs.isEmpty()) + return -1; + return msgs.getLastMessageID(); + } + + /** + * Call before getLogs(), getCriticalLogs(), or getLastMessageNumber() + * Side effect - calls logManager.flush() + * + * @return -1 if none + * @since 0.9.46 + */ + public int getLastCriticalMessageNumber() { + _context.logManager().flush(); + UIMessages msgs = _context.logManager().getBuffer().getCriticalUIMessages(); + if (msgs.isEmpty()) + return -1; + return msgs.getLastMessageID(); + } + + /** + * @param n -1 for none + * @param crit -1 for none + * @param consoleNonce must match + * @since 0.9.46 + */ + public void clearThrough(int n, int crit, String consoleNonce) { + if (!CSSHelper.getNonce().equals(consoleNonce)) + return; + if (n >= 0) + _context.logManager().getBuffer().getUIMessages().clearThrough(n); + if (crit >= 0) + _context.logManager().getBuffer().getCriticalUIMessages().clearThrough(crit); + } + public String getServiceLogs() { File f = ConfigServiceHandler.wrapperLogFile(_context); String str; diff --git a/apps/routerconsole/jsp/logs.jsp b/apps/routerconsole/jsp/logs.jsp index 37cfb986d..bf95e9808 100644 --- a/apps/routerconsole/jsp/logs.jsp +++ b/apps/routerconsole/jsp/logs.jsp @@ -54,14 +54,36 @@ Charset:<%=java.nio.charset.Charset.defaultCharset().name()%> Built By: -

<%=intl._t("Critical Logs")%>

+

<%=intl._t("Critical Logs")%><% + String consoleNonce = net.i2p.router.web.CSSHelper.getNonce(); + String ct1 = request.getParameter("clear"); + String ct2 = request.getParameter("crit"); + String ctn = request.getParameter("consoleNonce"); + if ((ct1 != null || ct2 != null) && ctn != null) { + int ict1 = -1, ict2 = -1; + try { ict1 = Integer.parseInt(ct1); } catch (NumberFormatException nfe) {} + try { ict2 = Integer.parseInt(ct2); } catch (NumberFormatException nfe) {} + logsHelper.clearThrough(ict1, ict2, ctn); + } + int last = logsHelper.getLastCriticalMessageNumber(); + if (last >= 0) { +%> " href="logs?crit=<%=last%>&consoleNonce=<%=consoleNonce%>">[<%=intl._t("Clear logs")%>]<% + } +%>

-

<%=intl._t("Router Logs")%> " href="configlogging">[<%=intl._t("Configure")%>]

+

<%=intl._t("Router Logs")%><% + // both links float right, so first one goes last + last = logsHelper.getLastMessageNumber(); + if (last >= 0) { +%> " href="logs?clear=<%=last%>&consoleNonce=<%=consoleNonce%>">[<%=intl._t("Clear logs")%>]<% + } +%> " href="configlogging">[<%=intl._t("Configure")%>] +

diff --git a/installer/resources/themes/console/dark/console.css b/installer/resources/themes/console/dark/console.css index 977042d38..72967a1ae 100644 --- a/installer/resources/themes/console/dark/console.css +++ b/installer/resources/themes/console/dark/console.css @@ -3998,10 +3998,16 @@ h3#servicedebug a, h3#graphinfo a { font-size: 0; } -.main#tunnels h3 a[href^="/configtunnels#"]::after, #criticallogs + h3.tabletitle a::after { +.main#tunnels h3 a[href^="/configtunnels#"]::after, a.configure::after { content: url(/themes/console/images/buttons/configure.png); float: right; - padding: 0; + padding: 0 0 0 8px; +} + +a.delete::after { + content: url(/themes/console/images/buttons/delete.png); + float: right; + padding: 0 0 0 8px; } .main#tunnels h3 a[href^="/configtunnels#"]:hover, h3.tabletitle a:hover::after, diff --git a/installer/resources/themes/console/light/console.css b/installer/resources/themes/console/light/console.css index a8f58e902..d8f93be00 100644 --- a/installer/resources/themes/console/light/console.css +++ b/installer/resources/themes/console/light/console.css @@ -1804,14 +1804,21 @@ h3#exploratorytunnels { font-size: 0; } -#tunnels h3 a[href^="/configtunnels#"]::after, #criticallogs + h3.tabletitle a::after { +#tunnels h3 a[href^="/configtunnels#"]::after, a.configure::after { content: url(/themes/console/images/buttons/configure.png); float: right; - padding: 0; + padding: 0 0 0 8px; filter: drop-shadow(0 0 1px #999daf); } -#tunnels h3 a[href^="/configtunnels#"]:hover, #criticallogs + h3.tabletitle a:hover { +a.delete::after { + content: url(/themes/console/images/buttons/delete.png); + float: right; + padding: 0 0 0 8px; + filter: drop-shadow(0 0 1px #999daf); +} + +#tunnels h3 a[href^="/configtunnels#"]:hover, a.configure:hover, a.delete:hover { filter: drop-shadow(0 0 1px #f60); }