From 4492ca334aed260a01dbb6fc3057ed9899c96be5 Mon Sep 17 00:00:00 2001 From: afederici <ajf5@illinois.edu> Date: Sat, 21 Nov 2020 14:51:42 -0600 Subject: [PATCH] logging --- Wc | Bin 0 -> 189760 bytes inc/FileObject.h | 5 +++++ inc/MessageTypes.h | 33 ++++++++++++++++++++++++++++++++- src/FileObject.cpp | 15 +++++++++++++++ src/TcpSocket.cpp | 10 +++++----- 5 files changed, 57 insertions(+), 6 deletions(-) create mode 100755 Wc diff --git a/Wc b/Wc new file mode 100755 index 0000000000000000000000000000000000000000..bda1e13403eea5bfe910110cbbbde42feeb7c194 GIT binary patch literal 189760 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 ScL5!YyUzYH9sOm3KK~zEif2>+ literal 0 HcmV?d00001 diff --git a/inc/FileObject.h b/inc/FileObject.h index 9267f77..b3b8a8a 100644 --- a/inc/FileObject.h +++ b/inc/FileObject.h @@ -6,11 +6,16 @@ #include <stdio.h> #include <stdlib.h> #include <fstream> +#include <unistd.h> +#include <dirent.h> +#include <sys/types.h> #include "HashRing.h" using namespace std; +string getMostRecentFile(string readfile); + class FileObject { public: string fileName; diff --git a/inc/MessageTypes.h b/inc/MessageTypes.h index 675bdf1..f7a1977 100644 --- a/inc/MessageTypes.h +++ b/inc/MessageTypes.h @@ -1,6 +1,36 @@ #ifndef MESSAGESTYPES_H #define MESSAGESTYPES_H +const static char *messageTypes[] = +{ + "ACK", + "JOIN", + "LEADERHEARTBEAT", + "LEADERPENDING", + "HEARTBEAT", + "SWREQ", + "SWRESP", + "JOINRESPONSE", + "JOINREJECT", + "ELECTION", + "ELECTIONACK", + "PUT", + "PUTACK", + "LEADERACK", + "DNS", + "DNSANS", + "DNSGET", + "DELETE", + "GETNULL", + "REREPLICATE", + "REREPLICATEGET", + "MAPLESTART", + "JUICESTART", + "MAPLEACK", + "CHUNK", + "CHUNKACK", +}; + enum MessageType { ACK, JOIN, //used in joinSystem to join @@ -47,6 +77,7 @@ enum LogType { GOSSIPTO, GOSSIPFROM, BANDWIDTH, - MEMBERS}; + MEMBERS +}; #endif //MESSAGESTYPES_H diff --git a/src/FileObject.cpp b/src/FileObject.cpp index 1f29665..00ef92a 100644 --- a/src/FileObject.cpp +++ b/src/FileObject.cpp @@ -22,3 +22,18 @@ int FileObject::getPositionOnHashring(){ positionOnHashring = hash<string>{}(toBeHashed) % HASHMODULO; return 0; } + +string getMostRecentFile(string readfile){ + struct dirent *entry = nullptr; + DIR *dp = nullptr; + int matchLen = readfile.size(); + vector<string> fileVersions; + if ((dp = opendir(".")) == nullptr) { cout << "tmp directory error " << endl; return ""; } + while ((entry = readdir(dp))){ + if (strncmp(entry->d_name, readfile.c_str(), matchLen) == 0){ + fileVersions.push_back(entry->d_name); + } + } + sort(fileVersions.begin(), fileVersions.end()); + return fileVersions[fileVersions.size()-1]; +} diff --git a/src/TcpSocket.cpp b/src/TcpSocket.cpp index 58c7d49..d69112b 100644 --- a/src/TcpSocket.cpp +++ b/src/TcpSocket.cpp @@ -139,13 +139,13 @@ void TcpSocket::sendLines(string ip, string port, string execfile, string readfi vector<string> unDirectory = splitString(readfile, "-"); string toSend = execfile + "," + readfile + "," + to_string(start) + "," + prefix+"-tmp"+to_string(start)+"-"+unDirectory[1]; Messages msg(PUT, toSend); - cout << "[CHUNK] " << msg.toString() << endl; + cout << "[CHUNK] " << messageTypes[msg.type] << " | " << msg.toString() << endl; string payload = msg.toString(); if (send(sockfd, payload.c_str(), strlen(payload.c_str()), 0) == -1) { perror("send"); } sleep(1); - ifstream file(readfile.c_str()); + ifstream file(getMostRecentFile(readfile)); string str; while (getline(file, str)) { @@ -227,7 +227,7 @@ int TcpSocket::messageHandler(int sockfd, string payloadMessage, string returnIP overwriteFilename = fields[4]; overwrite = fields[5]; if ((stoi(overwrite)) == 0) mode = "ab"; - cout << "file is " << sdfsfilename << " with size " << filesize << " and checksum " << incomingChecksum << endl; + cout << "[PUT] file is " << sdfsfilename << " with size " << filesize << " and checksum " << incomingChecksum << endl; time_t fileTimestamp; time(&fileTimestamp); localfilename = sdfsfilename+"_"+to_string(fileTimestamp); @@ -242,7 +242,7 @@ int TcpSocket::messageHandler(int sockfd, string payloadMessage, string returnIP sdfsfilename = fields[0]; //exec file name start = stoi(fields[2]); //start line (used just for signalling what work finished to master) remoteLocalname = fields[1]; //actual file (used for signalling) - cout << "exec: " << sdfsfilename << ", actual: " << remoteLocalname << ", start: " << fields[2] << ", temp: " << fields[3] << endl; + cout << "[PUT] exec: " << sdfsfilename << ", actual: " << remoteLocalname << ", start: " << fields[2] << ", temp: " << fields[3] << endl; } fp = fopen(localfilename.c_str(), mode.c_str()); if (fp == NULL) { @@ -293,7 +293,7 @@ int TcpSocket::messageHandler(int sockfd, string payloadMessage, string returnIP case CHUNK: case CHUNKACK: case DNS:{ - cout << "Type: " << msg.type << " payloadMessage: " << payloadMessage << endl; + cout << "Type: " << messageTypes[msg.type] << " payloadMessage: " << payloadMessage << endl; regMessages.push(payloadMessage); //handle from queue break; } -- GitLab