Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions expectedOutput.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
== Запрашиваемые ресурсы

[cols=2]
|====
|Ресурс |Количество
| /system%20engine%20secured%20line.svg
| 1
| /neural-net/bi-directional.jpg
| 1
| /Advanced-Business-focused.gif
| 1
| /Exclusive.png
| 1
| /Self-enabling.js
| 1
| /systematic_multimedia-middleware-forecast/Team-oriented.png
| 1
| /attitude-oriented/Cloned-Compatible/systemic%20transitional.js
| 1
| /3rd%20generation%20human-resource_product.css
| 1
| /client-driven/grid-enabled-interactive/Right-sized-Open-architected.htm
| 1
|====
14 changes: 14 additions & 0 deletions expectedOutput.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
### Запрашиваемые ресурсы

| Ресурс | Количество |
| :----: | :----: |
| /system%20engine%20secured%20line.svg | 1 |
| /neural-net/bi-directional.jpg | 1 |
| /Advanced-Business-focused.gif | 1 |
| /Exclusive.png | 1 |
| /Self-enabling.js | 1 |
| /systematic_multimedia-middleware-forecast/Team-oriented.png | 1 |
| /attitude-oriented/Cloned-Compatible/systemic%20transitional.js | 1 |
| /3rd%20generation%20human-resource_product.css | 1 |
| /client-driven/grid-enabled-interactive/Right-sized-Open-architected.htm | 1 |

454 changes: 454 additions & 0 deletions logs.txt

Large diffs are not rendered by default.

Empty file added logs/logs1.txt
Empty file.
10 changes: 10 additions & 0 deletions logs/logs2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
142.98.141.74 - - [18/Nov/2023:12:58:48 +0000] "DELETE /archive-stable/synergy-context-sensitive-archive.svg HTTP/1.1" 200 2373 "-" "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_6_3 rv:4.0) Gecko/1937-17-04 Firefox/36.0"
171.120.60.53 - - [18/Nov/2023:12:58:48 +0000] "GET /3rd%20generation%20human-resource_product.css HTTP/1.1" 200 2386 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/5330 (KHTML, like Gecko) Chrome/38.0.822.0 Mobile Safari/5330"
167.119.16.178 - - [18/Nov/2023:12:58:48 +0000] "GET /systematic_multimedia-middleware-forecast/Team-oriented.png HTTP/1.1" 200 1917 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_0) AppleWebKit/5341 (KHTML, like Gecko) Chrome/39.0.809.0 Mobile Safari/5341"
30.112.112.171 - - [18/Nov/2023:12:58:48 +0000] "GET /Self-enabling.js HTTP/1.1" 301 94 "-" "Mozilla/5.0 (Windows NT 5.01) AppleWebKit/5342 (KHTML, like Gecko) Chrome/40.0.878.0 Mobile Safari/5342"
220.42.176.115 - - [18/Nov/2023:12:58:48 +0000] "GET /client-driven/grid-enabled-interactive/Right-sized-Open-architected.htm HTTP/1.1" 200 1732 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_9_5) AppleWebKit/5341 (KHTML, like Gecko) Chrome/37.0.839.0 Mobile Safari/5341"
115.183.63.83 - - [18/Nov/2023:12:58:48 +0000] "GET /Advanced-Business-focused.gif HTTP/1.1" 404 67 "-" "Mozilla/5.0 (Windows NT 5.0) AppleWebKit/5330 (KHTML, like Gecko) Chrome/38.0.821.0 Mobile Safari/5330"
20.205.187.103 - - [18/Nov/2023:12:58:48 +0000] "GET /system%20engine%20secured%20line.svg HTTP/1.1" 302 99 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:5.0) Gecko/1914-25-10 Firefox/35.0"
126.12.35.44 - - [18/Nov/2023:12:58:48 +0000] "GET /attitude-oriented/Cloned-Compatible/systemic%20transitional.js HTTP/1.1" 200 2590 "-" "Mozilla/5.0 (Windows NT 5.2; en-US; rv:1.9.3.20) Gecko/2004-07-01 Firefox/36.0"
207.150.46.123 - - [18/Nov/2023:12:58:48 +0000] "GET /neural-net/bi-directional.jpg HTTP/1.1" 200 1796 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/5331 (KHTML, like Gecko) Chrome/37.0.860.0 Mobile Safari/5331"
131.46.126.4 - - [18/Nov/2023:12:58:48 +0000] "GET /Exclusive.png HTTP/1.1" 200 1094 "-" "Mozilla/5.0 (Windows NT 4.0) AppleWebKit/5320 (KHTML, like Gecko) Chrome/36.0.870.0 Mobile Safari/5320"
14 changes: 14 additions & 0 deletions logs/logs3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
138.156.130.15 - - [18/Nov/2023:12:58:48 +0000] "DELETE /Re-contextualized/Re-engineered/Robust.gif HTTP/1.1" 500 36 "-" "Mozilla/5.0 (Macintosh; PPC Mac OS X 10_9_1 rv:4.0; en-US) AppleWebKit/534.32.7 (KHTML, like Gecko) Version/4.1 Safari/534.32.7"
105.39.126.113 - - [18/Nov/2023:12:58:48 +0000] "POST /impactful-framework%20core/intermediate.svg HTTP/1.1" 200 2012 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_5) AppleWebKit/5352 (KHTML, like Gecko) Chrome/37.0.856.0 Mobile Safari/5352"
170.221.137.227 - - [18/Nov/2023:12:58:48 +0000] "GET /Customizable.png HTTP/1.1" 400 117 "-" "Opera/8.25 (Windows NT 5.1; en-US) Presto/2.11.303 Version/11.00"
191.235.148.218 - - [18/Nov/2023:12:58:48 +0000] "GET /Universal-adapter.jpg HTTP/1.1" 400 80 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/5340 (KHTML, like Gecko) Chrome/38.0.841.0 Mobile Safari/5340"
248.61.84.9 - - [18/Nov/2023:12:58:48 +0000] "GET /benchmark-leverage.js HTTP/1.1" 200 1500 "-" "Opera/9.91 (Windows NT 6.1; en-US) Presto/2.9.277 Version/13.00"
155.29.33.29 - - [18/Nov/2023:12:58:48 +0000] "GET /Seamless/asymmetric_customer%20loyalty/upward-trending%20demand-driven.gif HTTP/1.1" 200 3093 "-" "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_8_7) AppleWebKit/5332 (KHTML, like Gecko) Chrome/40.0.854.0 Mobile Safari/5332"
96.146.177.24 - - [18/Nov/2023:12:58:48 +0000] "GET /Multi-tiered%20utilisation.hmtl HTTP/1.1" 200 1169 "-" "Mozilla/5.0 (Macintosh; PPC Mac OS X 10_5_5) AppleWebKit/5320 (KHTML, like Gecko) Chrome/38.0.816.0 Mobile Safari/5320"
57.101.111.12 - - [18/Nov/2023:12:58:48 +0000] "GET /Ameliorated-Mandatory.htm HTTP/1.1" 200 1823 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1) AppleWebKit/532.25.5 (KHTML, like Gecko) Version/4.1 Safari/532.25.5"
103.74.208.64 - - [18/Nov/2023:12:58:48 +0000] "GET /exuding/Virtual-Quality-focused.js HTTP/1.1" 200 1858 "-" "Mozilla/5.0 (Windows 98) AppleWebKit/5331 (KHTML, like Gecko) Chrome/37.0.817.0 Mobile Safari/5331"
217.96.72.62 - - [18/Nov/2023:12:58:48 +0000] "GET /leverage/user-facing%20Customer-focused.hmtl HTTP/1.1" 200 1932 "-" "Opera/9.90 (Macintosh; U; Intel Mac OS X 10_6_7; en-US) Presto/2.13.326 Version/10.00"
218.89.209.101 - - [18/Nov/2023:12:58:48 +0000] "GET /local/Cloned-migration/Automated.htm HTTP/1.1" 200 1333 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_0 rv:2.0) Gecko/1926-27-05 Firefox/37.0"
97.8.150.102 - - [18/Nov/2023:12:58:48 +0000] "GET /even-keeled/Fully-configurable_Ameliorated_disintermediate.png HTTP/1.1" 200 2352 "-" "Mozilla/5.0 (Macintosh; PPC Mac OS X 10_8_5) AppleWebKit/5330 (KHTML, like Gecko) Chrome/38.0.835.0 Mobile Safari/5330"
57.34.243.21 - - [18/Nov/2023:12:58:48 +0000] "GET /Persistent/Multi-lateral.hmtl HTTP/1.1" 200 2837 "-" "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_7_0 rv:5.0; en-US) AppleWebKit/536.34.6 (KHTML, like Gecko) Version/4.2 Safari/536.34.6"
78.252.100.241 - - [18/Nov/2023:12:58:48 +0000] "GET /infrastructure/zero%20defect/instruction%20set-project.htm HTTP/1.1" 200 2878 "-" "Mozilla/5.0 (Windows NT 5.01) AppleWebKit/5341 (KHTML, like Gecko) Chrome/38.0.862.0 Mobile Safari/5341"
54 changes: 0 additions & 54 deletions src/main/java/edu/hw1/EvenArrayUtils.java

This file was deleted.

27 changes: 0 additions & 27 deletions src/main/java/edu/hw1/Main.java

This file was deleted.

27 changes: 0 additions & 27 deletions src/main/java/edu/project1/Main.java

This file was deleted.

8 changes: 8 additions & 0 deletions src/main/java/edu/project3/LogRecord.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package edu.project3;

import java.time.OffsetDateTime;

public record LogRecord(String remoteAddress, String remoteUser, OffsetDateTime timeLocal, String request, int status,
int bodyBytesSent, String httpReferer, String httpUserAgent) {

}
32 changes: 32 additions & 0 deletions src/main/java/edu/project3/LogReport.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package edu.project3;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class LogReport {

String title;
String keyTitle;
String valueTitle;
ArrayList<Map.Entry<String, String>> data;

public LogReport(String title, String keyTitle, String valueTitle) {
this.title = title;
this.keyTitle = keyTitle;
this.valueTitle = valueTitle;
this.data = new ArrayList<>();

}

public LogReport(String title, String keyTitle, String valueTitle, List<Map.Entry<String, String>> data) {
this.title = title;
this.keyTitle = keyTitle;
this.valueTitle = valueTitle;
this.data = new ArrayList<>(data);
}

public void addInfo(String key, String value) {
data.add(Map.entry(key, value));
}
}
130 changes: 130 additions & 0 deletions src/main/java/edu/project3/LogsParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
package edu.project3;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class LogsParser {

private static Logger logger = LogManager.getLogger(LogsParser.class);

private LogsParser() {
}

@SuppressWarnings("MagicNumber")
static LogRecord parseLog(String logString) {
Pattern logPattern =
Pattern.compile("^([^\s]+) - ([^\s]+) \\[(.+)\\] \"([^\"]+)\" "
+ "(\\d+) (\\d+) \"([^\"]+)\" \"([^\"]+)\"$");

Matcher logMatcher = logPattern.matcher(logString);
if (logMatcher.find()) {
String remoteAddr = logMatcher.group(1);
String remoteUser = logMatcher.group(2);
OffsetDateTime timeLocal =
OffsetDateTime.parse(logMatcher.group(3), DateTimeFormatter.ofPattern("dd/MMM/yyyy:HH:mm:ss Z"));
String request = logMatcher.group(4);
int status = Integer.parseInt(logMatcher.group(5));
int bodyBytesSent = Integer.parseInt(logMatcher.group(6));
String httpReferer = logMatcher.group(7);
String httpUserAgent = logMatcher.group(8);

return new LogRecord(
remoteAddr,
remoteUser,
timeLocal,
request,
status,
bodyBytesSent,
httpReferer,
httpUserAgent
);
}
return null;

}

static Stream<LogRecord> parseOneLocalFile(File file) {
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
return parseFromBufferedReader(reader);
} catch (IOException ex) {
logger.error(ex.getMessage());

}
return null;
}

static Stream<LogRecord> parseFromBufferedReader(BufferedReader reader) {

try {
ArrayList<String> stringsOfLogs = new ArrayList<>();
String inputLine;
while ((inputLine = reader.readLine()) != null) {
stringsOfLogs.add(inputLine);
}
reader.close();
return stringsOfLogs.stream().map(LogsParser::parseLog);
} catch (IOException e) {
logger.error(e.getMessage());
}

return null;
}

static Stream<LogRecord> parseOneURL(String url) {
try {
URL urlPath = new URL(url);
BufferedReader reader = new BufferedReader(new InputStreamReader(urlPath.openStream()));
return parseFromBufferedReader(reader);

} catch (IOException e) {
logger.error(e.getMessage());
}
return null;
}

static public List<LogRecord> parseDirectoryWithLogs(File[] directoryListing) {
Stream<LogRecord> result = Stream.empty();

for (File file : directoryListing) {
Stream<LogRecord> parsedFile = parseOneLocalFile(file);
if (parsedFile != null) {
result = Stream.concat(result, parsedFile);
}
}
return result.toList();
}

static public List<LogRecord> parseFilesWithLogs(String path) {

if (path.startsWith("http")) {
return parseOneURL(path).toList();
}

File directoryOrPath = new File(path);
if (directoryOrPath.exists()) {
if (directoryOrPath.isFile()) {
return parseOneLocalFile(directoryOrPath).toList();
} else if (directoryOrPath.isDirectory()) {
File[] directoryListing = directoryOrPath.listFiles();
if (directoryListing != null) {
return parseDirectoryWithLogs(directoryListing);
}
}
}
return null;
}
}
Loading