From e60023eb8b9203492312707c4dbeb9d4cb4ee72e Mon Sep 17 00:00:00 2001 From: Toparvion Date: Wed, 7 Dec 2016 23:57:57 +0700 Subject: [PATCH] Added "read back" feature - re-fetching last log lines if no new lines loaded --- .../testing/analog/model/ReadingMetaData.java | 16 +++++-- .../testing/analog/service/AnaLogUtils.java | 8 ++-- .../analog/service/MainController.java | 44 ++++++++++++------- src/main/resources/static/index.html | 2 +- .../resources/static/js/main-controller.js | 14 +++--- .../resources/static/js/provider-service.js | 5 ++- 6 files changed, 57 insertions(+), 32 deletions(-) diff --git a/src/main/java/ru/ftc/upc/testing/analog/model/ReadingMetaData.java b/src/main/java/ru/ftc/upc/testing/analog/model/ReadingMetaData.java index fd5fe42..a9d6b11 100644 --- a/src/main/java/ru/ftc/upc/testing/analog/model/ReadingMetaData.java +++ b/src/main/java/ru/ftc/upc/testing/analog/model/ReadingMetaData.java @@ -8,9 +8,13 @@ * Time: 12:48 */ public class ReadingMetaData implements Serializable { - private long prependingCounter = -1L; - private long appendingCounter = 0L; - private long fileSavedSize = 0L; + private long prependingCounter; + private long appendingCounter; + private long fileSavedSize; + + public ReadingMetaData() { + reset(); + } public long getPrependingCounter() { return prependingCounter; @@ -39,4 +43,10 @@ public void setFileSavedSize(long fileSavedSize) { public boolean isPrependingCounterSet() { return (prependingCounter != -1L); } + + public void reset() { + prependingCounter = -1L; + appendingCounter = 0L; + fileSavedSize = 0L; + } } diff --git a/src/main/java/ru/ftc/upc/testing/analog/service/AnaLogUtils.java b/src/main/java/ru/ftc/upc/testing/analog/service/AnaLogUtils.java index 9a9ee80..18a9859 100644 --- a/src/main/java/ru/ftc/upc/testing/analog/service/AnaLogUtils.java +++ b/src/main/java/ru/ftc/upc/testing/analog/service/AnaLogUtils.java @@ -169,10 +169,10 @@ public static String detectMessageType(String curLine) { return "UNKNOWN"; } - public static List getRawLines(String inputFileName, - String encoding, - ReadingMetaData readingMetaData, - Long prependingSnippetSizePercent) throws Exception { + static List getRawLines(String inputFileName, + String encoding, + ReadingMetaData readingMetaData, + Long prependingSnippetSizePercent) throws Exception { // проверяем наличие указанного файла File inputFile = new File(inputFileName); if (!inputFile.exists() || !inputFile.isFile()) { diff --git a/src/main/java/ru/ftc/upc/testing/analog/service/MainController.java b/src/main/java/ru/ftc/upc/testing/analog/service/MainController.java index a2252c6..b785edd 100644 --- a/src/main/java/ru/ftc/upc/testing/analog/service/MainController.java +++ b/src/main/java/ru/ftc/upc/testing/analog/service/MainController.java @@ -43,27 +43,19 @@ public MainController(ChoicesProperties choicesProperties, EncodingDetector enco @RequestMapping("/provide") public Part provide(@RequestParam("log") String inputFileName, - @RequestParam(name = "prependingSize", required = false) Long prependingSize, + @RequestParam(required = false, name = "prependingSize") Long prependingSize, @RequestParam(required = false, defaultValue = "UTF-8") String encoding, + @RequestParam(required = false, defaultValue = "false") boolean readBackAllowed, HttpSession session) { // получаем данные о предыдущем чтении ReadingMetaData readingMetaData = AnaLogUtils.retrieveMetaData(session, inputFileName); // получаем сырой набор строк из файла - List rawLines; - try { - rawLines = AnaLogUtils.getRawLines(inputFileName, encoding, readingMetaData, prependingSize); - - } catch (FileNotFoundException e) { - log.warn("Ошибка при чтении заданного файла: " + e.getMessage()); - throw new RuntimeException(e); - - } catch (Exception e) { - log.error("Internal application error: ", e); - throw new RuntimeException(e); - } - if (!rawLines.isEmpty()) { - log.trace("Raw lines read: {}", rawLines.size()); + List rawLines = fetchRawLines(inputFileName, prependingSize, encoding, readingMetaData); + if (rawLines.isEmpty() && readBackAllowed) { + log.debug("No new lines fetched. Attempting to read back..."); + readingMetaData.reset(); + rawLines = fetchRawLines(inputFileName, prependingSize, encoding, readingMetaData); } List parsedLines = new ArrayList<>(); @@ -83,6 +75,28 @@ public Part provide(@RequestParam("log") String inputFileName, return new Part(parsedLines); } + private List fetchRawLines(String inputFileName, + Long prependingSize, + String encoding, + ReadingMetaData readingMetaData) { + List rawLines; + try { + rawLines = AnaLogUtils.getRawLines(inputFileName, encoding, readingMetaData, prependingSize); + + } catch (FileNotFoundException e) { + log.warn("Ошибка при чтении заданного файла: " + e.getMessage()); + throw new RuntimeException(e); + + } catch (Exception e) { + log.error("Internal application error: ", e); + throw new RuntimeException(e); + } + if (!rawLines.isEmpty()) { + log.trace("Raw lines read: {}", rawLines.size()); + } + return rawLines; + } + @RequestMapping("/choices") public List choices() { return choices.stream() diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index 681a120..3e801dd 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -23,7 +23,7 @@ - +