diff --git a/src/dev/peerat/backend/Main.java b/src/dev/peerat/backend/Main.java index e04b4b3..e61b4f1 100644 --- a/src/dev/peerat/backend/Main.java +++ b/src/dev/peerat/backend/Main.java @@ -23,6 +23,7 @@ import dev.peerat.backend.routes.PuzzleResponse; import dev.peerat.backend.routes.Result; import dev.peerat.backend.routes.Swagger; import dev.peerat.backend.routes.admins.DynamicLogs; +import dev.peerat.backend.routes.admins.ExceptionLogs; import dev.peerat.backend.routes.admins.chapter.AddChapter; import dev.peerat.backend.routes.admins.chapter.DeleteChapter; import dev.peerat.backend.routes.admins.chapter.EditChapter; @@ -167,6 +168,7 @@ public class Main{ register(new ForgotPassword(router, repo, mail)). register(new DynamicLogs(router.getLogger(), repo)). + register(new ExceptionLogs(router.getExceptionLogger())). register(new AddChapter(repo)). register(new DeleteChapter(repo)). register(new EditChapter(repo)). diff --git a/src/dev/peerat/backend/routes/admins/ExceptionLogs.java b/src/dev/peerat/backend/routes/admins/ExceptionLogs.java new file mode 100644 index 0000000..900c796 --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/ExceptionLogs.java @@ -0,0 +1,48 @@ +package dev.peerat.backend.routes.admins; + +import java.util.regex.Matcher; + +import dev.peerat.framework.Context; +import dev.peerat.framework.HttpReader; +import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Locker; +import dev.peerat.framework.Locker.Key; +import dev.peerat.framework.Response; +import dev.peerat.framework.Route; +import dev.peerat.framework.utils.json.JsonArray; +import dev.peerat.framework.utils.json.JsonMap; + +public class ExceptionLogs implements Response{ + + private Locker locker; + + public ExceptionLogs(Locker locker){ + this.locker = locker; + } + + @Route(path = "^/admin/exceptions$", needLogin = true, websocket = true) + public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + Key key = new Key(); + + locker.init(key); + try { + while(!reader.isClosed()){ + locker.lock(key); + Exception exception = locker.getValue(key); + JsonMap json = new JsonMap(); + json.set("type", exception.getClass().getSimpleName()); + json.set("message", exception.getMessage()); + JsonArray trace = new JsonArray(); + for(StackTraceElement element : exception.getStackTrace()) trace.add(element.toString()); + json.set("trace", trace); + + writer.write(json.toString()); + writer.flush(); + } + }catch(Exception e){} + locker.remove(key); + } + + + +}