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")%>]<%
+ }
+%>
-
+
|
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);
}
| |