Add logLevel

pull/21/head
Louis Royer 4 years ago
parent e947fc7c46
commit fd5eac9988

@ -29,6 +29,7 @@ import remoteException.VersionRemoteError;
import remoteException.EmptyFile; import remoteException.EmptyFile;
import java.util.Arrays; import java.util.Arrays;
import tools.Logger; import tools.Logger;
import tools.LogLevel;
/** Implementation of P2P-JAVA-PROJECT VERSION 1.0 protocol for TCP. /** Implementation of P2P-JAVA-PROJECT VERSION 1.0 protocol for TCP.
@ -57,10 +58,10 @@ public class ServerManagementTCP implements Runnable {
try { try {
socket = new ServerSocket(TCPPort); socket = new ServerSocket(TCPPort);
} catch (SocketException e) { } catch (SocketException e) {
System.err.println("Error: cannot listen on port " + TCPPort + " (TCP)"); logger.writeTCP("Error: cannot listen on port " + TCPPort, LogLevel.Error);
System.exit(-1); System.exit(-1);
} catch (IOException e) { } catch (IOException e) {
System.err.println("Error: cannot openning TCP socket"); logger.writeTCP("Error: cannot openning socket", LogLevel.Error);
System.exit(-2); System.exit(-2);
} }
} }
@ -68,14 +69,14 @@ public class ServerManagementTCP implements Runnable {
/** Implementation of runnable. This methods allows to run the server. /** Implementation of runnable. This methods allows to run the server.
*/ */
public void run() { public void run() {
logger.writeTCP("Server sucessfully started"); logger.writeTCP("Server sucessfully started", LogLevel.Info);
do { do {
try { try {
Socket s = socket.accept(); Socket s = socket.accept();
ClientHandler c = new ClientHandler(s); ClientHandler c = new ClientHandler(s);
(new Thread(c)).start(); (new Thread(c)).start();
} catch (IOException e) { } catch (IOException e) {
System.err.println("Error while accepting new connection"); logger.writeTCP("Error while accepting new connection", LogLevel.Warning);
} }
} while(true); } while(true);
} }
@ -98,11 +99,11 @@ public class ServerManagementTCP implements Runnable {
public void run() { public void run() {
boolean end = false; boolean end = false;
logger.writeTCP(addr + "New connection"); logger.writeTCP(addr + "New connection", LogLevel.Action);
do { do {
end = handleRequest(); end = handleRequest();
} while(!end); } while(!end);
logger.writeTCP(addr + "End of connection"); logger.writeTCP(addr + "End of connection", LogLevel.Action);
} }
/** Respond to next request incomming on socket s. /** Respond to next request incomming on socket s.
@ -115,15 +116,15 @@ public class ServerManagementTCP implements Runnable {
Payload p = pd.getPayload(); Payload p = pd.getPayload();
switch (p.getRequestResponseCode()) { switch (p.getRequestResponseCode()) {
case LOAD_REQUEST: case LOAD_REQUEST:
logger.writeTCP(addr + "LOAD_REQUEST"); logger.writeTCP(addr + "LOAD_REQUEST", LogLevel.Action);
sendLoadResponse(pd); sendLoadResponse(pd);
break; break;
case LIST_REQUEST: case LIST_REQUEST:
logger.writeTCP(addr + "LIST_REQUEST"); logger.writeTCP(addr + "LIST_REQUEST", LogLevel.Action);
sendListResponse(pd); sendListResponse(pd);
break; break;
default: default:
logger.writeTCP(addr + "Received grabbage"); logger.writeTCP(addr + "Received grabbage", LogLevel.Action);
sendInternalError(pd); sendInternalError(pd);
} }
} catch (IOException e) { } catch (IOException e) {
@ -161,10 +162,11 @@ public class ServerManagementTCP implements Runnable {
* @param pd ProtocolP2PPacketTCP to respond * @param pd ProtocolP2PPacketTCP to respond
*/ */
private void sendInternalError(ProtocolP2PPacketTCP pd) { private void sendInternalError(ProtocolP2PPacketTCP pd) {
logger.writeTCP("Internal Error", LogLevel.Warning);
try { try {
pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketTCP(new Payload(RequestResponseCode.INTERNAL_ERROR))); pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketTCP(new Payload(RequestResponseCode.INTERNAL_ERROR)));
} catch (Exception e) { } catch (Exception e) {
System.err.println(e); logger.writeTCP(e, LogLevel.Error);
} }
} }
@ -174,14 +176,14 @@ public class ServerManagementTCP implements Runnable {
private void sendListResponse(ProtocolP2PPacketTCP pd) { private void sendListResponse(ProtocolP2PPacketTCP pd) {
try { try {
if (fileList.length == 0) { if (fileList.length == 0) {
System.err.println("Sending EMPTY_DIRECTORY"); logger.writeTCP("Sending EMPTY_DIRECTORY", LogLevel.Action);
pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketTCP(new Payload(RequestResponseCode.EMPTY_DIRECTORY))); pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketTCP(new Payload(RequestResponseCode.EMPTY_DIRECTORY)));
} else { } else {
System.out.println("Sending LIST_RESPONSE"); logger.writeTCP("Sending LIST_RESPONSE", LogLevel.Action);
pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketTCP((Payload)(new FileList(fileList)))); pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketTCP((Payload)(new FileList(fileList))));
} }
} catch (Exception e2) { } catch (Exception e2) {
System.err.println(e2); logger.writeTCP(e2, LogLevel.Error);
} }
} }
@ -201,13 +203,13 @@ public class ServerManagementTCP implements Runnable {
byte[] fullLoad = Files.readAllBytes(Paths.get(baseDirectory + filename)); byte[] fullLoad = Files.readAllBytes(Paths.get(baseDirectory + filename));
long sizeToSend = 0; long sizeToSend = 0;
if (fullLoad.length - offset < maxSizePartialContent) { if (fullLoad.length - offset < maxSizePartialContent) {
System.out.println("Sending last partialContent"); logger.writeTCP("Sending last partialContent", LogLevel.Debug);
sizeToSend = fullLoad.length - offset; sizeToSend = fullLoad.length - offset;
} else { } else {
sizeToSend = maxSizePartialContent; sizeToSend = maxSizePartialContent;
} }
System.out.println("maxSizePartialContent: " + maxSizePartialContent); logger.writeTCP("maxSizePartialContent: " + maxSizePartialContent, LogLevel.Debug);
System.out.println("Sending " + filename + " from " + offset + " to " + (offset + sizeToSend)); logger.writeTCP("Sending " + filename + " from " + offset + " to " + (offset + sizeToSend), LogLevel.Debug);
byte[] load = Arrays.copyOfRange(fullLoad, (int)offset, (int)(offset + sizeToSend)); byte[] load = Arrays.copyOfRange(fullLoad, (int)offset, (int)(offset + sizeToSend));
if (Arrays.binarySearch(fileList, filename) >= 0) { if (Arrays.binarySearch(fileList, filename) >= 0) {
try { try {
@ -217,13 +219,13 @@ public class ServerManagementTCP implements Runnable {
pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketTCP((Payload)(new FilePart(filename, fullLoad.length, offset, load)))); pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketTCP((Payload)(new FilePart(filename, fullLoad.length, offset, load))));
} }
} catch (Exception e2) { } catch (Exception e2) {
System.err.println(e2); logger.writeTCP(e2, LogLevel.Error);
} }
} else { } else {
System.err.println("File requested not found: `" + filename + "` " + Arrays.binarySearch(fileList, filename)); logger.writeTCP("File requested not found: `" + filename + "` " + Arrays.binarySearch(fileList, filename), LogLevel.Debug);
System.err.println("File list:"); logger.writeTCP("File list:", LogLevel.Debug);
for (String f: fileList) { for (String f: fileList) {
System.err.println("- " + f); logger.writeTCP("- " + f, LogLevel.Debug);
} }
throw new IOException(); // to send a NOT_FOUND in the catch block throw new IOException(); // to send a NOT_FOUND in the catch block
@ -232,7 +234,7 @@ public class ServerManagementTCP implements Runnable {
try { try {
pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketTCP(new Payload(RequestResponseCode.NOT_FOUND))); pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketTCP(new Payload(RequestResponseCode.NOT_FOUND)));
} catch (Exception e2) { } catch (Exception e2) {
System.err.println(e2); logger.writeTCP(e2, LogLevel.Debug);
} }
} }
} }

@ -28,6 +28,7 @@ import remoteException.VersionRemoteError;
import remoteException.EmptyFile; import remoteException.EmptyFile;
import java.util.Arrays; import java.util.Arrays;
import tools.Logger; import tools.Logger;
import tools.LogLevel;
/** Implementation of P2P-JAVA-PROJECT VERSION 1.0 protocol for UDP. /** Implementation of P2P-JAVA-PROJECT VERSION 1.0 protocol for UDP.
@ -56,7 +57,7 @@ public class ServerManagementUDP implements Runnable {
try { try {
socket = new DatagramSocket(UDPPort); socket = new DatagramSocket(UDPPort);
} catch (SocketException e) { } catch (SocketException e) {
System.err.println("Error: cannot listen on port " + UDPPort + " (UDP)"); logger.writeUDP("Error: cannot listen on port " + UDPPort, LogLevel.Error);
System.exit(-1); System.exit(-1);
} }
} }
@ -64,14 +65,14 @@ public class ServerManagementUDP implements Runnable {
/** Implementation of runnable. This methods allows to run the server. /** Implementation of runnable. This methods allows to run the server.
*/ */
public void run() { public void run() {
logger.writeUDP("Server sucessfully started"); logger.writeUDP("Server sucessfully started", LogLevel.Info);
while(true) { while(true) {
try { try {
ProtocolP2PPacketUDP pd = new ProtocolP2PPacketUDP((Object)socket); ProtocolP2PPacketUDP pd = new ProtocolP2PPacketUDP((Object)socket);
Payload p = pd.getPayload(); Payload p = pd.getPayload();
switch (p.getRequestResponseCode()) { switch (p.getRequestResponseCode()) {
case LOAD_REQUEST: case LOAD_REQUEST:
System.out.println("Received LOAD_REQUEST"); logger.writeUDP("Received LOAD_REQUEST", LogLevel.Action);
assert p instanceof LoadRequest : "payload must be an instance of LoadRequest"; assert p instanceof LoadRequest : "payload must be an instance of LoadRequest";
if (!(p instanceof LoadRequest)) { if (!(p instanceof LoadRequest)) {
sendInternalError(pd); sendInternalError(pd);
@ -83,13 +84,13 @@ public class ServerManagementUDP implements Runnable {
byte[] fullLoad = Files.readAllBytes(Paths.get(baseDirectory + filename)); byte[] fullLoad = Files.readAllBytes(Paths.get(baseDirectory + filename));
long sizeToSend = 0; long sizeToSend = 0;
if (fullLoad.length - offset < maxSizePartialContent) { if (fullLoad.length - offset < maxSizePartialContent) {
System.out.println("Sending last partialContent"); logger.writeUDP("Sending last partialContent", LogLevel.Debug);
sizeToSend = fullLoad.length - offset; sizeToSend = fullLoad.length - offset;
} else { } else {
sizeToSend = maxSizePartialContent; sizeToSend = maxSizePartialContent;
} }
System.out.println("maxSizePartialContent: " + maxSizePartialContent); logger.writeUDP("maxSizePartialContent: " + maxSizePartialContent, LogLevel.Debug);
System.out.println("Sending " + filename + " from " + offset + " to " + (offset + sizeToSend)); logger.writeUDP("Sending " + filename + " from " + offset + " to " + (offset + sizeToSend), LogLevel.Debug);
byte[] load = Arrays.copyOfRange(fullLoad, (int)offset, (int)(offset + sizeToSend)); byte[] load = Arrays.copyOfRange(fullLoad, (int)offset, (int)(offset + sizeToSend));
if (Arrays.binarySearch(fileList, filename) >= 0) { if (Arrays.binarySearch(fileList, filename) >= 0) {
try { try {
@ -99,13 +100,13 @@ public class ServerManagementUDP implements Runnable {
pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketUDP((Payload)(new FilePart(filename, fullLoad.length, offset, load)))); pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketUDP((Payload)(new FilePart(filename, fullLoad.length, offset, load))));
} }
} catch (Exception e2) { } catch (Exception e2) {
System.err.println(e2); logger.writeUDP(e2, LogLevel.Error);
} }
} else { } else {
System.err.println("File requested not found: `" + filename + "` " + Arrays.binarySearch(fileList, filename)); logger.writeUDP("File requested not found: `" + filename + "` " + Arrays.binarySearch(fileList, filename), LogLevel.Debug);
System.err.println("File list:"); logger.writeUDP("File list:", LogLevel.Debug);
for (String f: fileList) { for (String f: fileList) {
System.err.println("- " + f); logger.writeUDP("- " + f, LogLevel.Debug);
} }
throw new IOException(); // to send a NOT_FOUND in the catch block throw new IOException(); // to send a NOT_FOUND in the catch block
@ -114,23 +115,23 @@ public class ServerManagementUDP implements Runnable {
try { try {
pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketUDP(new Payload(RequestResponseCode.NOT_FOUND))); pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketUDP(new Payload(RequestResponseCode.NOT_FOUND)));
} catch (Exception e2) { } catch (Exception e2) {
System.err.println(e2); logger.writeUDP(e2, LogLevel.Error);
} }
} }
} }
break; break;
case LIST_REQUEST: case LIST_REQUEST:
System.out.println("Received LIST_REQUEST"); logger.writeUDP("Received LIST_REQUEST", LogLevel.Action);
try { try {
if (fileList.length == 0) { if (fileList.length == 0) {
System.err.println("Sending EMPTY_DIRECTORY"); logger.writeUDP("Sending EMPTY_DIRECTORY", LogLevel.Action);
pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketUDP(new Payload(RequestResponseCode.EMPTY_DIRECTORY))); pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketUDP(new Payload(RequestResponseCode.EMPTY_DIRECTORY)));
} else { } else {
System.out.println("Sending LIST_RESPONSE"); logger.writeUDP("Sending LIST_RESPONSE", LogLevel.Action);
pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketUDP((Payload)(new FileList(fileList)))); pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketUDP((Payload)(new FileList(fileList))));
} }
} catch (Exception e2) { } catch (Exception e2) {
System.err.println(e2); logger.writeUDP(e2, LogLevel.Error);
} }
break; break;
default: default:
@ -170,10 +171,11 @@ public class ServerManagementUDP implements Runnable {
* @param pd ProtocolP2PPacketUDP to respond * @param pd ProtocolP2PPacketUDP to respond
*/ */
private void sendInternalError(ProtocolP2PPacketUDP pd) { private void sendInternalError(ProtocolP2PPacketUDP pd) {
logger.writeUDP("Internal Error", LogLevel.Warning);
try { try {
pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketUDP(new Payload(RequestResponseCode.INTERNAL_ERROR))); pd.sendResponse((ProtocolP2PPacket)new ProtocolP2PPacketUDP(new Payload(RequestResponseCode.INTERNAL_ERROR)));
} catch (Exception e) { } catch (Exception e) {
System.err.println(e); logger.writeUDP(e, LogLevel.Error);
} }
} }

@ -0,0 +1,8 @@
package tools;
public enum LogLevel {
Error,
Info,
Warning,
Action,
Debug
}

@ -1,4 +1,5 @@
package tools; package tools;
import tools.LogLevel;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.nio.file.Path; import java.nio.file.Path;
@ -29,29 +30,92 @@ public class Logger {
/** Appends log to filelog and print to stderr. /** Appends log to filelog and print to stderr.
* @param text Text to log * @param text Text to log
*/ */
private void write(String text) { private void write(String text, LogLevel logLevel) {
System.err.println(text); String msg = "[" + new Timestamp(System.currentTimeMillis()) + "] " + text + "\n";
try { String level = null;
Files.write(logFile, ("[" + new Timestamp(System.currentTimeMillis()) + "] " + text + "\n").getBytes(), StandardOpenOption.APPEND); switch (logLevel) {
} catch (IOException e) { case Error:
System.err.println("Error: cannot write in logfile"); level = "[Error]";
break;
case Info:
level = "[Info]";
break;
case Warning:
level = "[Warning]";
break;
case Action:
level = "[Action]";
break;
case Debug:
level = "[Debug]";
break;
default:
System.err.println("Error: incorrect logLevel");
}
if (level != null) {
msg = level + " " + msg;
}
switch (logLevel) {
case Error:
case Info:
case Warning:
case Debug:
default:
System.err.println(text);
break;
case Action:
break;
} }
switch (logLevel) {
case Debug:
break;
case Error:
case Info:
case Warning:
default:
try {
Files.write(logFile, msg.getBytes(), StandardOpenOption.APPEND);
} catch (IOException e) {
System.err.println("Error: cannot write in logfile");
}
break;
}
}
/** Appends log to filelog and print to stderr.
* Adds [TCP] in log line.
* @param text Text to log
* @param logLevel Type of log
*/
public void writeTCP(String text, LogLevel logLevel) {
write("[TCP] " + text, logLevel);
} }
/** Appends log to filelog and print to stderr. /** Appends log to filelog and print to stderr.
* Adds [TCP] in log line. * Adds [TCP] in log line.
* @param text Text to log * @param text Text to log
* @param logLevel Type of log
*/ */
public void writeTCP(String text) { public void writeTCP(Exception e, LogLevel logLevel) {
write("[TCP] " + text); writeTCP(e.toString(), logLevel);
} }
/** Appends log to filelog and print to stderr. /** Appends log to filelog and print to stderr.
* Adds [UDP] in log line. * Adds [UDP] in log line.
* @param text Text to log * @param text Text to log
* @param logLevel Type of log
*/
public void writeUDP(String text, LogLevel logLevel) {
write("[UDP] " + text, logLevel);
}
/** Appends log to filelog and print to stderr.
* Adds [UDP] in log line.
* @param text Text to log
* @param logLevel Type of log
*/ */
public void writeUDP(String text) { public void writeUDP(Exception e, LogLevel logLevel) {
write("[UDP] " + text); writeUDP(e.toString(), logLevel);
} }
} }

Loading…
Cancel
Save