✨ Add page to activate debug mode
[Sone.git] / src / main / java / net / pterodactylus / sone / web / WebInterface.java
index 3d131c8..4a572a2 100644 (file)
@@ -113,53 +113,7 @@ import net.pterodactylus.sone.web.ajax.UnlockSoneAjaxPage;
 import net.pterodactylus.sone.web.ajax.UntrustAjaxPage;
 import net.pterodactylus.sone.web.page.FreenetRequest;
 import net.pterodactylus.sone.web.page.TemplateRenderer;
-import net.pterodactylus.sone.web.pages.AboutPage;
-import net.pterodactylus.sone.web.pages.BookmarkPage;
-import net.pterodactylus.sone.web.pages.BookmarksPage;
-import net.pterodactylus.sone.web.pages.CreateAlbumPage;
-import net.pterodactylus.sone.web.pages.CreatePostPage;
-import net.pterodactylus.sone.web.pages.CreateReplyPage;
-import net.pterodactylus.sone.web.pages.CreateSonePage;
-import net.pterodactylus.sone.web.pages.DeleteAlbumPage;
-import net.pterodactylus.sone.web.pages.DeleteImagePage;
-import net.pterodactylus.sone.web.pages.DeletePostPage;
-import net.pterodactylus.sone.web.pages.DeleteProfileFieldPage;
-import net.pterodactylus.sone.web.pages.DeleteReplyPage;
-import net.pterodactylus.sone.web.pages.DeleteSonePage;
-import net.pterodactylus.sone.web.pages.DismissNotificationPage;
-import net.pterodactylus.sone.web.pages.DistrustPage;
-import net.pterodactylus.sone.web.pages.EditAlbumPage;
-import net.pterodactylus.sone.web.pages.EditImagePage;
-import net.pterodactylus.sone.web.pages.EditProfileFieldPage;
-import net.pterodactylus.sone.web.pages.EditProfilePage;
-import net.pterodactylus.sone.web.pages.EmptyAlbumTitlePage;
-import net.pterodactylus.sone.web.pages.EmptyImageTitlePage;
-import net.pterodactylus.sone.web.pages.FollowSonePage;
-import net.pterodactylus.sone.web.pages.GetImagePage;
-import net.pterodactylus.sone.web.pages.ImageBrowserPage;
-import net.pterodactylus.sone.web.pages.IndexPage;
-import net.pterodactylus.sone.web.pages.InvalidPage;
-import net.pterodactylus.sone.web.pages.KnownSonesPage;
-import net.pterodactylus.sone.web.pages.LikePage;
-import net.pterodactylus.sone.web.pages.LockSonePage;
-import net.pterodactylus.sone.web.pages.LoginPage;
-import net.pterodactylus.sone.web.pages.LogoutPage;
-import net.pterodactylus.sone.web.pages.MarkAsKnownPage;
-import net.pterodactylus.sone.web.pages.NewPage;
-import net.pterodactylus.sone.web.pages.NoPermissionPage;
-import net.pterodactylus.sone.web.pages.OptionsPage;
-import net.pterodactylus.sone.web.pages.RescuePage;
-import net.pterodactylus.sone.web.pages.SearchPage;
-import net.pterodactylus.sone.web.pages.SoneTemplatePage;
-import net.pterodactylus.sone.web.pages.TrustPage;
-import net.pterodactylus.sone.web.pages.UnbookmarkPage;
-import net.pterodactylus.sone.web.pages.UnfollowSonePage;
-import net.pterodactylus.sone.web.pages.UnlikePage;
-import net.pterodactylus.sone.web.pages.UnlockSonePage;
-import net.pterodactylus.sone.web.pages.UntrustPage;
-import net.pterodactylus.sone.web.pages.UploadImagePage;
-import net.pterodactylus.sone.web.pages.ViewPostPage;
-import net.pterodactylus.sone.web.pages.ViewSonePage;
+import net.pterodactylus.sone.web.pages.*;
 import net.pterodactylus.util.notify.Notification;
 import net.pterodactylus.util.notify.NotificationManager;
 import net.pterodactylus.util.notify.TemplateNotification;
@@ -173,6 +127,7 @@ import freenet.clients.http.SessionManager.Session;
 import freenet.clients.http.ToadletContext;
 import freenet.l10n.BaseL10n;
 
+import com.codahale.metrics.*;
 import com.google.common.base.Optional;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.ImmutableSet;
@@ -222,6 +177,7 @@ public class WebInterface implements SessionProvider {
        private final L10nFilter l10nFilter;
 
        private final PageToadletRegistry pageToadletRegistry;
+       private final MetricRegistry metricRegistry;
 
        /** The “new Sone” notification. */
        private final ListNotification<Sone> newSoneNotification;
@@ -273,7 +229,7 @@ public class WebInterface implements SessionProvider {
                        ParserFilter parserFilter, ShortenFilter shortenFilter,
                        RenderFilter renderFilter,
                        LinkedElementRenderFilter linkedElementRenderFilter,
-                       PageToadletRegistry pageToadletRegistry) {
+                       PageToadletRegistry pageToadletRegistry, MetricRegistry metricRegistry) {
                this.sonePlugin = sonePlugin;
                this.loaders = loaders;
                this.listNotificationFilter = listNotificationFilter;
@@ -286,6 +242,7 @@ public class WebInterface implements SessionProvider {
                this.renderFilter = renderFilter;
                this.linkedElementRenderFilter = linkedElementRenderFilter;
                this.pageToadletRegistry = pageToadletRegistry;
+               this.metricRegistry = metricRegistry;
                formPassword = sonePlugin.pluginRespirator().getToadletContainer().getFormPassword();
                soneTextParser = new SoneTextParser(getCore(), getCore());
                l10nFilter = new L10nFilter(getL10n());
@@ -659,6 +616,8 @@ public class WebInterface implements SessionProvider {
                pageToadletRegistry.addPage(new EmptyImageTitlePage(this, loaders, templateRenderer));
                pageToadletRegistry.addPage(new EmptyAlbumTitlePage(this, loaders, templateRenderer));
                pageToadletRegistry.addPage(new DismissNotificationPage(this, loaders, templateRenderer));
+               pageToadletRegistry.addPage(new DebugPage(this, loaders, templateRenderer));
+               pageToadletRegistry.addDebugPage(new MetricsPage(this, loaders, templateRenderer, metricRegistry));
                pageToadletRegistry.addPage(loaders.<FreenetRequest>loadStaticPage("css/", "/static/css/", "text/css"));
                pageToadletRegistry.addPage(loaders.<FreenetRequest>loadStaticPage("javascript/", "/static/javascript/", "text/javascript"));
                pageToadletRegistry.addPage(loaders.<FreenetRequest>loadStaticPage("images/", "/static/images/", "image/png"));
@@ -768,7 +727,7 @@ public class WebInterface implements SessionProvider {
         */
        @Subscribe
        public void newSoneFound(NewSoneFoundEvent newSoneFoundEvent) {
-               newSoneNotification.add(newSoneFoundEvent.sone());
+               newSoneNotification.add(newSoneFoundEvent.getSone());
                if (!hasFirstStartNotification()) {
                        notificationManager.addNotification(newSoneNotification);
                }
@@ -782,7 +741,7 @@ public class WebInterface implements SessionProvider {
         */
        @Subscribe
        public void newPostFound(NewPostFoundEvent newPostFoundEvent) {
-               Post post = newPostFoundEvent.post();
+               Post post = newPostFoundEvent.getPost();
                boolean isLocal = post.getSone().isLocal();
                if (isLocal) {
                        localPostNotification.add(post);
@@ -808,7 +767,7 @@ public class WebInterface implements SessionProvider {
         */
        @Subscribe
        public void newReplyFound(NewPostReplyFoundEvent newPostReplyFoundEvent) {
-               PostReply reply = newPostReplyFoundEvent.postReply();
+               PostReply reply = newPostReplyFoundEvent.getPostReply();
                boolean isLocal = reply.getSone().isLocal();
                if (isLocal) {
                        localReplyNotification.add(reply);
@@ -834,27 +793,27 @@ public class WebInterface implements SessionProvider {
         */
        @Subscribe
        public void markSoneKnown(MarkSoneKnownEvent markSoneKnownEvent) {
-               newSoneNotification.remove(markSoneKnownEvent.sone());
+               newSoneNotification.remove(markSoneKnownEvent.getSone());
        }
 
        @Subscribe
        public void markPostKnown(MarkPostKnownEvent markPostKnownEvent) {
-               removePost(markPostKnownEvent.post());
+               removePost(markPostKnownEvent.getPost());
        }
 
        @Subscribe
        public void markReplyKnown(MarkPostReplyKnownEvent markPostReplyKnownEvent) {
-               removeReply(markPostReplyKnownEvent.postReply());
+               removeReply(markPostReplyKnownEvent.getPostReply());
        }
 
        @Subscribe
        public void soneRemoved(SoneRemovedEvent soneRemovedEvent) {
-               newSoneNotification.remove(soneRemovedEvent.sone());
+               newSoneNotification.remove(soneRemovedEvent.getSone());
        }
 
        @Subscribe
        public void postRemoved(PostRemovedEvent postRemovedEvent) {
-               removePost(postRemovedEvent.post());
+               removePost(postRemovedEvent.getPost());
        }
 
        private void removePost(Post post) {
@@ -867,7 +826,7 @@ public class WebInterface implements SessionProvider {
 
        @Subscribe
        public void replyRemoved(PostReplyRemovedEvent postReplyRemovedEvent) {
-               removeReply(postReplyRemovedEvent.postReply());
+               removeReply(postReplyRemovedEvent.getPostReply());
        }
 
        private void removeReply(PostReply reply) {
@@ -886,7 +845,7 @@ public class WebInterface implements SessionProvider {
         */
        @Subscribe
        public void soneLocked(SoneLockedEvent soneLockedEvent) {
-               final Sone sone = soneLockedEvent.sone();
+               final Sone sone = soneLockedEvent.getSone();
                ScheduledFuture<?> tickerObject = ticker.schedule(new Runnable() {
 
                        @Override
@@ -907,8 +866,8 @@ public class WebInterface implements SessionProvider {
         */
        @Subscribe
        public void soneUnlocked(SoneUnlockedEvent soneUnlockedEvent) {
-               lockedSonesNotification.remove(soneUnlockedEvent.sone());
-               lockedSonesTickerObjects.remove(soneUnlockedEvent.sone()).cancel(false);
+               lockedSonesNotification.remove(soneUnlockedEvent.getSone());
+               lockedSonesTickerObjects.remove(soneUnlockedEvent.getSone()).cancel(false);
        }
 
        /**
@@ -919,9 +878,9 @@ public class WebInterface implements SessionProvider {
         */
        @Subscribe
        public void soneInserting(SoneInsertingEvent soneInsertingEvent) {
-               TemplateNotification soneInsertNotification = getSoneInsertNotification(soneInsertingEvent.sone());
+               TemplateNotification soneInsertNotification = getSoneInsertNotification(soneInsertingEvent.getSone());
                soneInsertNotification.set("soneStatus", "inserting");
-               if (soneInsertingEvent.sone().getOptions().isSoneInsertNotificationEnabled()) {
+               if (soneInsertingEvent.getSone().getOptions().isSoneInsertNotificationEnabled()) {
                        notificationManager.addNotification(soneInsertNotification);
                }
        }
@@ -934,10 +893,10 @@ public class WebInterface implements SessionProvider {
         */
        @Subscribe
        public void soneInserted(SoneInsertedEvent soneInsertedEvent) {
-               TemplateNotification soneInsertNotification = getSoneInsertNotification(soneInsertedEvent.sone());
+               TemplateNotification soneInsertNotification = getSoneInsertNotification(soneInsertedEvent.getSone());
                soneInsertNotification.set("soneStatus", "inserted");
-               soneInsertNotification.set("insertDuration", soneInsertedEvent.insertDuration() / 1000);
-               if (soneInsertedEvent.sone().getOptions().isSoneInsertNotificationEnabled()) {
+               soneInsertNotification.set("insertDuration", soneInsertedEvent.getInsertDuration() / 1000);
+               if (soneInsertedEvent.getSone().getOptions().isSoneInsertNotificationEnabled()) {
                        notificationManager.addNotification(soneInsertNotification);
                }
        }
@@ -950,10 +909,10 @@ public class WebInterface implements SessionProvider {
         */
        @Subscribe
        public void soneInsertAborted(SoneInsertAbortedEvent soneInsertAbortedEvent) {
-               TemplateNotification soneInsertNotification = getSoneInsertNotification(soneInsertAbortedEvent.sone());
+               TemplateNotification soneInsertNotification = getSoneInsertNotification(soneInsertAbortedEvent.getSone());
                soneInsertNotification.set("soneStatus", "insert-aborted");
-               soneInsertNotification.set("insert-error", soneInsertAbortedEvent.cause());
-               if (soneInsertAbortedEvent.sone().getOptions().isSoneInsertNotificationEnabled()) {
+               soneInsertNotification.set("insert-error", soneInsertAbortedEvent.getCause());
+               if (soneInsertAbortedEvent.getSone().getOptions().isSoneInsertNotificationEnabled()) {
                        notificationManager.addNotification(soneInsertNotification);
                }
        }
@@ -966,10 +925,10 @@ public class WebInterface implements SessionProvider {
         */
        @Subscribe
        public void updateFound(UpdateFoundEvent updateFoundEvent) {
-               newVersionNotification.set("latestVersion", updateFoundEvent.version());
-               newVersionNotification.set("latestEdition", updateFoundEvent.latestEdition());
-               newVersionNotification.set("releaseTime", updateFoundEvent.releaseTime());
-               newVersionNotification.set("disruptive", updateFoundEvent.disruptive());
+               newVersionNotification.set("latestVersion", updateFoundEvent.getVersion());
+               newVersionNotification.set("latestEdition", updateFoundEvent.getLatestEdition());
+               newVersionNotification.set("releaseTime", updateFoundEvent.getReleaseTime());
+               newVersionNotification.set("disruptive", updateFoundEvent.isDisruptive());
                notificationManager.addNotification(newVersionNotification);
        }
 
@@ -981,7 +940,7 @@ public class WebInterface implements SessionProvider {
         */
        @Subscribe
        public void imageInsertStarted(ImageInsertStartedEvent imageInsertStartedEvent) {
-               insertingImagesNotification.add(imageInsertStartedEvent.image());
+               insertingImagesNotification.add(imageInsertStartedEvent.getImage());
                notificationManager.addNotification(insertingImagesNotification);
        }
 
@@ -993,7 +952,7 @@ public class WebInterface implements SessionProvider {
         */
        @Subscribe
        public void imageInsertAborted(ImageInsertAbortedEvent imageInsertAbortedEvent) {
-               insertingImagesNotification.remove(imageInsertAbortedEvent.image());
+               insertingImagesNotification.remove(imageInsertAbortedEvent.getImage());
        }
 
        /**
@@ -1004,8 +963,8 @@ public class WebInterface implements SessionProvider {
         */
        @Subscribe
        public void imageInsertFinished(ImageInsertFinishedEvent imageInsertFinishedEvent) {
-               insertingImagesNotification.remove(imageInsertFinishedEvent.image());
-               insertedImagesNotification.add(imageInsertFinishedEvent.image());
+               insertingImagesNotification.remove(imageInsertFinishedEvent.getImage());
+               insertedImagesNotification.add(imageInsertFinishedEvent.getImage());
                notificationManager.addNotification(insertedImagesNotification);
        }
 
@@ -1017,8 +976,8 @@ public class WebInterface implements SessionProvider {
         */
        @Subscribe
        public void imageInsertFailed(ImageInsertFailedEvent imageInsertFailedEvent) {
-               insertingImagesNotification.remove(imageInsertFailedEvent.image());
-               imageInsertFailedNotification.add(imageInsertFailedEvent.image());
+               insertingImagesNotification.remove(imageInsertFailedEvent.getImage());
+               imageInsertFailedNotification.add(imageInsertFailedEvent.getImage());
                notificationManager.addNotification(imageInsertFailedNotification);
        }