diff --git a/server/src/main/java/org/web1/Application.java b/server/src/main/java/org/web1/Application.java index a721f58..ca751a7 100644 --- a/server/src/main/java/org/web1/Application.java +++ b/server/src/main/java/org/web1/Application.java @@ -4,6 +4,9 @@ import java.util.function.Consumer; import org.web1.http.RequestContext; +import org.web1.http.handler.journal.DeleteJournal; +import org.web1.http.handler.journal.GetJournal; +import org.web1.http.handler.journal.utils.Journal; import org.web1.http.routing.EndpointKey; import org.web1.http.routing.RestController; import org.web1.http.handler.tester.Tester; @@ -13,9 +16,19 @@ public class Application { public static void main(String[] args) { final HashMap> endpoints = new HashMap<>(); + final Journal journal = new Journal(); + + endpoints.put( + new EndpointKey("GET", "/fcgi/test"), + new Tester(journal) + ); + endpoints.put( + new EndpointKey("DELETE", "/fcgi/journal"), + new DeleteJournal(journal) + ); endpoints.put( - new EndpointKey("GET", "/fcgi/"), - new Tester() + new EndpointKey("GET", "/fcgi/journal"), + new GetJournal(journal) ); new RestController( diff --git a/server/src/main/java/org/web1/http/handler/journal/DeleteJournal.java b/server/src/main/java/org/web1/http/handler/journal/DeleteJournal.java new file mode 100644 index 0000000..2c95a88 --- /dev/null +++ b/server/src/main/java/org/web1/http/handler/journal/DeleteJournal.java @@ -0,0 +1,27 @@ +package org.web1.http.handler.journal; + +import org.web1.http.RequestContext; +import org.web1.http.handler.journal.utils.Journal; +import org.web1.http.response.ResponseStatus; +import org.web1.utils.json.JsonBuilder; + +import java.util.function.Consumer; + +public class DeleteJournal implements Consumer { + private final Journal journal; + + public DeleteJournal(Journal journal) { + this.journal = journal; + } + + @Override + public void accept( + final RequestContext endpointData + ) { + this.journal.clear(); + endpointData.responseController().send( + new JsonBuilder().add("status", "\"Completed!\""), + ResponseStatus.OK + ); + } +} \ No newline at end of file diff --git a/server/src/main/java/org/web1/http/handler/journal/GetJournal.java b/server/src/main/java/org/web1/http/handler/journal/GetJournal.java new file mode 100644 index 0000000..e755648 --- /dev/null +++ b/server/src/main/java/org/web1/http/handler/journal/GetJournal.java @@ -0,0 +1,34 @@ +package org.web1.http.handler.journal; + +import org.web1.http.RequestContext; +import org.web1.http.handler.journal.utils.Journal; +import org.web1.http.handler.journal.utils.JournalItem; +import org.web1.http.response.ResponseStatus; +import org.web1.utils.json.JsonBuilder; + +import java.util.Arrays; +import java.util.function.Consumer; +import java.util.stream.Collectors; + +public class GetJournal implements Consumer { + private final Journal journal; + + public GetJournal(Journal journal) { + this.journal = journal; + } + + @Override + public void accept( + final RequestContext endpointData + ) { + endpointData.responseController().send( + new JsonBuilder().add( + "result", + "[" + journal.get().stream() + .map(JournalItem::toString) + .collect(Collectors.joining(",")) + "]" + ), + ResponseStatus.OK + ); + } +} \ No newline at end of file diff --git a/server/src/main/java/org/web1/http/handler/journal/utils/Journal.java b/server/src/main/java/org/web1/http/handler/journal/utils/Journal.java new file mode 100644 index 0000000..7789266 --- /dev/null +++ b/server/src/main/java/org/web1/http/handler/journal/utils/Journal.java @@ -0,0 +1,19 @@ +package org.web1.http.handler.journal.utils; + +import java.util.ArrayList; + +public class Journal { + private final ArrayList journal = new ArrayList<>(); + + public ArrayList get() { + return journal; + } + + public void append(JournalItem journalItem) { + journal.add(journalItem); + } + + public void clear() { + journal.clear(); + } +} \ No newline at end of file diff --git a/server/src/main/java/org/web1/http/handler/journal/utils/JournalItem.java b/server/src/main/java/org/web1/http/handler/journal/utils/JournalItem.java new file mode 100644 index 0000000..821d44e --- /dev/null +++ b/server/src/main/java/org/web1/http/handler/journal/utils/JournalItem.java @@ -0,0 +1,24 @@ +package org.web1.http.handler.journal.utils; + +public record JournalItem( + long timestamp, + long elapsedTimeNs, + int x, + float y, + float r, + boolean isInsideArea +) { + @Override + public String toString() { + return String.format(""" + { + "timestamp": %s, + "elapsedTimeNs": %s, + "x": %s, + "y": %s, + "r": %s, + "isInsideArea": %s + } + """, timestamp, elapsedTimeNs, x, y, r, isInsideArea); + } +} diff --git a/server/src/main/java/org/web1/http/handler/tester/Tester.java b/server/src/main/java/org/web1/http/handler/tester/Tester.java index 75aa148..e9ef8c8 100644 --- a/server/src/main/java/org/web1/http/handler/tester/Tester.java +++ b/server/src/main/java/org/web1/http/handler/tester/Tester.java @@ -3,6 +3,8 @@ import org.validator.ValidatedRecordFactory; import org.validator.validation.exceptions.ValidationException; import org.web1.http.RequestContext; +import org.web1.http.handler.journal.utils.Journal; +import org.web1.http.handler.journal.utils.JournalItem; import org.web1.http.handler.tester.checkers.Checker; import org.web1.http.handler.tester.checkers.CheckerFunction; import org.web1.utils.json.JsonBuilder; @@ -15,6 +17,12 @@ public class Tester implements Consumer { private static final Stopwatch timer = new Stopwatch(); private static final CheckerFunction checker = new Checker(); + private final Journal journal; + + public Tester(Journal journal) { + this.journal = journal; + } + @Override public void accept( final RequestContext endpointData @@ -35,6 +43,19 @@ public void accept( Float.parseFloat(requestData.R()) ); + final long elapsedTime = timer.stop(); + + this.journal.append( + new JournalItem( + System.currentTimeMillis(), + elapsedTime, + Integer.parseInt(requestData.X()), + Float.parseFloat(requestData.Y()), + Float.parseFloat(requestData.R()), + checkResult + ) + ); + endpointData.responseController().send( new JsonBuilder() .add("result", checkResult)