EventsLogCleaner: Don't use lambda to create tasks

When a task is created with a lambda expression, only the run() method
of the Runnable interface is overridden. There is no way to override
the toString method. This results in entries in the show-queue output
like:

  com.ericsson.gerrit.plugins.eventslog.sql.EventsLogCleaner$$Lambda$313/774278169@576ed135

which is not readable. There are two types of task being created in
this class, and from such an output format we can't tell which one is
in the queue.

Instead of using lambda expressions, define separate explicit classes
for each task, overriding the toString method.

Change-Id: I237a7711931ae23de6968e55214e9619437148c6
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleaner.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleaner.java
index b092829..efff521 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleaner.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleaner.java
@@ -15,6 +15,7 @@
 package com.ericsson.gerrit.plugins.eventslog.sql;
 
 import com.ericsson.gerrit.plugins.eventslog.EventCleanerPool;
+import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.ProjectDeletedListener;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -31,12 +32,17 @@
   private static final long INTERVAL = TimeUnit.DAYS.toSeconds(1);
 
   private final SQLClient eventsDb;
+  private final String pluginName;
 
   private ScheduledExecutorService pool;
 
   @Inject
-  EventsLogCleaner(@EventsDb SQLClient eventsDb, @EventCleanerPool ScheduledExecutorService pool) {
+  EventsLogCleaner(
+      @EventsDb SQLClient eventsDb,
+      @EventCleanerPool ScheduledExecutorService pool,
+      @PluginName String pluginName) {
     this.eventsDb = eventsDb;
+    this.pluginName = pluginName;
     this.pool = pool;
   }
 
@@ -46,12 +52,12 @@
   }
 
   public void removeProjectEventsAsync(String projectName) {
-    pool.submit(() -> eventsDb.removeProjectEvents(projectName));
+    pool.submit(new RemoveProjectEventsTask(pluginName, projectName));
   }
 
   public void scheduleCleaningWith(int maxAge) {
     pool.scheduleAtFixedRate(
-        () -> eventsDb.removeOldEvents(maxAge), getInitialDelay(), INTERVAL, TimeUnit.SECONDS);
+        new RemoveOldEventsTask(pluginName, maxAge), getInitialDelay(), INTERVAL, TimeUnit.SECONDS);
   }
 
   private long getInitialDelay() {
@@ -62,4 +68,44 @@
     }
     return Duration.between(now, next).getSeconds();
   }
+
+  private class RemoveProjectEventsTask implements Runnable {
+    private final String projectName;
+    private final String taskName;
+
+    RemoveProjectEventsTask(String prefix, String projectName) {
+      this.projectName = projectName;
+      this.taskName = String.format("[%s] Remove events for project %s", prefix, projectName);
+    }
+
+    @Override
+    public void run() {
+      eventsDb.removeProjectEvents(projectName);
+    }
+
+    @Override
+    public String toString() {
+      return taskName;
+    }
+  }
+
+  private class RemoveOldEventsTask implements Runnable {
+    private final int maxAge;
+    private final String taskName;
+
+    RemoveOldEventsTask(String prefix, int maxAge) {
+      this.maxAge = maxAge;
+      this.taskName = String.format("[%s] Remove old events", prefix);
+    }
+
+    @Override
+    public void run() {
+      eventsDb.removeOldEvents(maxAge);
+    }
+
+    @Override
+    public String toString() {
+      return taskName;
+    }
+  }
 }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleanerTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleanerTest.java
index 09c21dc..11fa891 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleanerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleanerTest.java
@@ -32,6 +32,7 @@
 @RunWith(MockitoJUnitRunner.class)
 public class EventsLogCleanerTest {
   private static final String PROJECT = "testProject";
+  private static final String PLUGIN_NAME = "events-log";
 
   @Mock private EventsLogConfig cfgMock;
   @Mock private EventsLogCleaner logCleanerMock;
@@ -44,7 +45,7 @@
   @Before
   public void setUp() throws Exception {
     when(event.getProjectName()).thenReturn(PROJECT);
-    eventsLogCleaner = new EventsLogCleaner(eventsDb, executor);
+    eventsLogCleaner = new EventsLogCleaner(eventsDb, executor, PLUGIN_NAME);
   }
 
   @Test