v3.8.0: add subfuncktion: simple log system

This commit is contained in:
Markus 2020-02-17 20:17:19 +01:00
parent 53807b53f6
commit a38491d587
6 changed files with 212 additions and 8 deletions

View File

@ -26,7 +26,8 @@ SOURCES += \
pageManager.cpp \ pageManager.cpp \
parameterManager.cpp \ parameterManager.cpp \
programManager.cpp \ programManager.cpp \
accountManager.cpp accountManager.cpp \
logger.cpp


# Default rules for deployment. # Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin qnx: target.path = /tmp/$${TARGET}/bin
@ -37,4 +38,5 @@ HEADERS += \
pageManager.h \ pageManager.h \
parameterManager.h \ parameterManager.h \
programManager.h \ programManager.h \
accountManager.h accountManager.h \
logger.h

84
src/logger.cpp Normal file
View File

@ -0,0 +1,84 @@
#include "logger.h"



Logger::Logger(std::string logFilePath)
: filePath(logFilePath)
{
if(openFile(filePath))
exit(234);
}

Logger::~Logger()
{
file.close();
}

std::string Logger::getFilePath()
{
return filePath;
}

int Logger::logCommandLine(std::string logText)
{
std::time_t now = std::time(nullptr);
struct tm *tm_now = localtime(&now);
std::string date(std::to_string(tm_now->tm_mday) + "." + std::to_string(tm_now->tm_mon +1) + "."
+ std::to_string(1900 + tm_now->tm_year) + " - " + std::to_string(tm_now->tm_hour) + ":" + std::to_string(tm_now->tm_min));
return writetoFile(date + ": \"" + logText + "\"");
}

int Logger::logSubLine(std::string line)
{
return writetoFile("\t\t" + line);
}

std::string Logger::getLogText()
{
return std::string((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
}

int Logger::clearFile()
{
//close it
file.close();

//open it empty + close it
std::ofstream ofs;
ofs.open(filePath, std::ofstream::out | std::ofstream::trunc);
if(!ofs.is_open()) {
perror("Open File for clearing failed");
return 35;
}
ofs.close();

//reopen it
return openFile(filePath);
}

int Logger::writetoFile(std::string t)
{
file << t << std::endl;
return file.good();
}

int Logger::openFile(std::string path)
{
file.open(path, std::ios::in | std::ios::out | std::ios::app);
if(!file.is_open()) {
//Exestiert nicht => Erstelle Datei
std::ofstream ofs(path);
if(!ofs.is_open()) {
perror((" => Error: Konnte LogDatei nicht erstellen: '" + path + "'").c_str());
return (5656);
} else {
ofs.close();
}
file.open(path);
if(!file.is_open()) {
perror((" => Error: Konnte LogDatei nicht öffnen: '" + path + "'").c_str());
return (5657);
}
}
return 0;
}

31
src/logger.h Normal file
View File

@ -0,0 +1,31 @@
#ifndef LOGGER_H
#define LOGGER_H

#include <iostream>
#include <fstream>
#include <string>
#include <streambuf>
#include <ctime> // std::time, localtime ...



class Logger
{
public:
Logger(std::string logFilePath);
~Logger();
std::string getFilePath();
std::fstream file;

int logCommandLine(std::string logText);
int logSubLine(std::string line);
std::string getLogText();
int clearFile();

private:
std::string filePath;
int writetoFile(std::string t);
int openFile(std::string path);
};

#endif // LOGGER_H

View File

@ -38,6 +38,7 @@ int setPaths(Settings &settings)
settings.cookieFilePath = CacheDir + "S_New4_cookies"; settings.cookieFilePath = CacheDir + "S_New4_cookies";
settings.accountNumberPath = CacheDir + "Account_Number"; settings.accountNumberPath = CacheDir + "Account_Number";
settings.lastUpdateDateFilePath = CacheDir + "LastUpdateDate"; settings.lastUpdateDateFilePath = CacheDir + "LastUpdateDate";
settings.logFilePath = CacheDir + "LogFile";


settings.accountFilePath = SettingsDir + "Accounts"; settings.accountFilePath = SettingsDir + "Accounts";
settings.serienListPath = SettingsDir + "SerienListe"; settings.serienListPath = SettingsDir + "SerienListe";
@ -69,7 +70,19 @@ int manageParameter(Settings &settings, int argc, char **argv)
return 1; return 1;
} }


std::vector<std::string> res = compare("help\n--help\ndefault\nurl\n--version\nsearch\ninfo\nclean\nnews\n--update\n--remove", argv[1]); //LogCommand...
Logger logger(settings.logFilePath);
std::string command;
for (int i = 0; i < argc; ++i)
if(argv[i])
command += std::string(argv[i]) + " ";
if(command.length() > 0)
command.pop_back();
logger.logCommandLine(command);

//Find out right subProgramm

std::vector<std::string> res = compare("help\n--help\ndefault\nurl\n--version\nsearch\ninfo\nclean\nnews\n--update\n--remove\nlog", argv[1]);
if(res.size() != 1) { if(res.size() != 1) {
if(res.size() == 0) if(res.size() == 0)
std::cout << " => Error: Keine Unteroption für " << argv[1] << " gefunden." << std::endl; std::cout << " => Error: Keine Unteroption für " << argv[1] << " gefunden." << std::endl;
@ -118,6 +131,12 @@ int manageParameter(Settings &settings, int argc, char **argv)
} else if (isSame(argv, "--remove")) { } else if (isSame(argv, "--remove")) {
return unterOption_RemoveSettings_or_CacheDir(&settings, argc, argv); return unterOption_RemoveSettings_or_CacheDir(&settings, argc, argv);


} else if (isSame(argv, "log")) {
if(unterOption_printLogFile(&settings, argc, argv) != -1)
return 49;
logger.logCommandLine(command);
return -1;

} else { } else {
std::cout << " => Error: Invalid option '" << argv[1] << "', but not detected in compare-Function" << std::endl; std::cout << " => Error: Invalid option '" << argv[1] << "', but not detected in compare-Function" << std::endl;
return 3; return 3;
@ -353,6 +372,7 @@ int unterOption_help(Settings &settings)
<< "\t\"info\"\t\tModus um Infos einer Serien zu bekommen." << std::endl << "\t\"info\"\t\tModus um Infos einer Serien zu bekommen." << std::endl
<< "\t\"clean\"\t\tModus um Cookie-Files zu löschen." << std::endl << "\t\"clean\"\t\tModus um Cookie-Files zu löschen." << std::endl
<< "\t\"news\"\t\tModus um neusten 75 Folgen auf s.to zu sehen." << std::endl << "\t\"news\"\t\tModus um neusten 75 Folgen auf s.to zu sehen." << std::endl
<< "\t\"log\"\t\tModus um Log Datei zu sehen / bearbeiten." << std::endl
<< std::endl; << std::endl;


std::cout << "Verzeichnisse:" << std::endl std::cout << "Verzeichnisse:" << std::endl
@ -1436,3 +1456,65 @@ bool isSame(char **argv, std::string FunktionName)
} }
return false; return false;
} }

int unterOption_printLogFile(Settings *settings, int argc, char **argv)
{
settings->modus = Modus::PRINT_LOG_FILE_MODUS;

int c = 0;
const option long_opts[] = {
{"help", no_argument, nullptr, 'h'},
{"print", no_argument, nullptr, 'p'},
{"clear", no_argument, nullptr, 'c'},
{nullptr, no_argument, nullptr, 0}

};

bool printMode = false, ClearMode = false;

while( ( c = getopt_long (argc, argv, "hpc", long_opts, nullptr) ) != -1 ) {
switch(c) {

case 'h':
unterOption_printLogFile(settings->programName);
return -1;
case 'p':
printMode = true;
break;
case 'c':
ClearMode = true;
break;
default:
std::cout << "Aufruf: " << settings->programName << " log [OPTION]..." << std::endl;
std::cout << "\"" << settings->programName << " log --help\" liefert weitere Informationen." << std::endl;
return 21;
}
}

if(!printMode && !ClearMode) {
std::cout << " => Error: Fehlende Parameter: -p / -c." << std::endl;
std::cout << "\"" << settings->programName << " log --help\" liefert weitere Informationen." << std::endl;
return 34;
}

if(printMode)
std::cout << Logger(settings->logFilePath).getLogText() << std::endl;
if(ClearMode)
if(Logger(settings->logFilePath).clearFile())
return 12;
return -1;
}

void unterOption_printLogFile(std::string programName)
{
std::cout << "Aufruf: " << programName << " log [OPTION]..." << std::endl << std::endl;

std::cout << "Beschreibung:" << std::endl
<< " Mit dieser Unterfunktion kann man die Log Datei sehen/bearbeiten." << std::endl << std::endl;

std::cout << "OPTIONEN:" << std::endl
<< " -p, --print" << std::endl
<< " Mit dieser Option wird das LogFile ausgegeben." << std::endl
<< " -c, --clear" << std::endl
<< " Mit dieser Option wird das LogFile geleert." << std::endl;
}

View File

@ -19,6 +19,7 @@
#include <unistd.h> // readlink() #include <unistd.h> // readlink()
#include <dirent.h> #include <dirent.h>


#include "logger.h"


#ifdef _WIN32 #ifdef _WIN32
#include <windows.h> #include <windows.h>
@ -32,7 +33,8 @@ enum Modus {
INFO_MODUS = 3, INFO_MODUS = 3,
NEWS_MODUS = 4, NEWS_MODUS = 4,
UPDATE_MODUS = 5, UPDATE_MODUS = 5,
REMOVE_SETTINGS_AND_CACHE_MODUS = 6 REMOVE_SETTINGS_AND_CACHE_MODUS = 6,
PRINT_LOG_FILE_MODUS


}; };


@ -76,12 +78,13 @@ struct Settings {
lastUpdateDateFilePath = "", lastUpdateDateFilePath = "",
configDir="", configDir="",
cacheDir="", cacheDir="",
logFilePath="",


defaultsFilePath = "", defaultsFilePath = "",
proxy_ip = "127.0.0.1", proxy_ip = "127.0.0.1",
languages = "GerDub,GerSub,Eng,", languages = "GerDub,GerSub,Eng,",
genaueHoster = "", genaueHoster = "",
version = "3.7.8", version = "3.8.0",
defaultFileVersion="1.7", defaultFileVersion="1.7",
outputFilePath = "", outputFilePath = "",
default_checkPath = "", default_checkPath = "",
@ -149,6 +152,9 @@ void unterOption_update_help(std::string programName);
int unterOption_RemoveSettings_or_CacheDir(Settings * settings, int argc, char **argv); int unterOption_RemoveSettings_or_CacheDir(Settings * settings, int argc, char **argv);
void unterOption_RemoveSettings_or_CacheDire_help(std::string programName); void unterOption_RemoveSettings_or_CacheDire_help(std::string programName);


int unterOption_printLogFile(Settings * settings, int argc, char **argv);
void unterOption_printLogFile(std::string programName);

int setS5ProxytoSettings(Settings &settings, std::string optarg); int setS5ProxytoSettings(Settings &settings, std::string optarg);





View File

@ -423,9 +423,8 @@ int ProgramManager::defaultModus(Settings *settings)
//Finde die anzahl der staffel heraus: //Finde die anzahl der staffel heraus:
//download html von der startpage einer serie //download html von der startpage einer serie
Reply tmp_reply = pageManager.getServerRequest(pageManager.UrlPraefix + nameInUrl); Reply tmp_reply = pageManager.getServerRequest(pageManager.UrlPraefix + nameInUrl);
if(tmp_reply.html == "-1") { if(tmp_reply.html == "-1" || tmp_reply.html == "") {
if(settings->debugMode) std::cerr << " => Error: Konnte Seitenquelltext nicht herunterladen." << std::endl;
std::cerr << ">>> Debug In " << __FUNCTION__ << ": getServerRequest failed, when download startpage." << std::endl;
return 32; return 32;
} }