forked from wownero/wownero
Update of the PR with network limits works very well for all speeds (but remember that low download speed can stop upload because we then slow down downloading of blockchain requests too) more debug options fixed pedantic warnings in our code should work again on Mac OS X and FreeBSD fixed warning about size_t tested on Debian, Ubuntu, Windows(testing now) TCP options and ToS (QoS) flag FIXED peer number limit FIXED some spikes in ingress/download FIXED problems when other up and down limitrelease-v0.4.0.1
parent
eabb519605
commit
5ce4256e3d
@ -0,0 +1,81 @@
|
||||
#include "data_logger.hpp"
|
||||
|
||||
#include <boost/chrono.hpp>
|
||||
#include <chrono>
|
||||
|
||||
namespace epee
|
||||
{
|
||||
namespace net_utils
|
||||
{
|
||||
data_logger &data_logger::get_instance()
|
||||
{
|
||||
static data_logger instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
data_logger::data_logger()
|
||||
{
|
||||
//create timer
|
||||
std::shared_ptr<std::thread> logger_thread(new std::thread([&]()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
saveToFile();
|
||||
}
|
||||
}));
|
||||
logger_thread->detach();
|
||||
|
||||
mFilesMap["peers"] = data_logger::fileData("log/dr-monero/peers.data");
|
||||
mFilesMap["download"] = data_logger::fileData("log/dr-monero/net/in-all.data");
|
||||
mFilesMap["upload"] = data_logger::fileData("log/dr-monero/net/out-all.data");
|
||||
mFilesMap["request"] = data_logger::fileData("log/dr-monero/net/req-all.data");
|
||||
mFilesMap["sleep_down"] = data_logger::fileData("log/dr-monero/down_sleep_log.data");
|
||||
mFilesMap["sleep_up"] = data_logger::fileData("log/dr-monero/up_sleep_log.data");
|
||||
|
||||
}
|
||||
|
||||
void data_logger::add_data(std::string filename, unsigned int data)
|
||||
{
|
||||
if (mFilesMap.find(filename) == mFilesMap.end())
|
||||
return; // TODO: exception
|
||||
|
||||
mFilesMap[filename].mDataToSave += data;
|
||||
}
|
||||
|
||||
double data_logger::fileData::get_current_time()
|
||||
{
|
||||
using namespace boost::chrono;
|
||||
auto point = steady_clock::now();
|
||||
auto time_from_epoh = point.time_since_epoch();
|
||||
auto ms = duration_cast< milliseconds >( time_from_epoh ).count();
|
||||
double ms_f = ms;
|
||||
return ms_f / 1000.;
|
||||
}
|
||||
|
||||
data_logger::fileData::fileData(std::string pFile)
|
||||
{
|
||||
mFile = std::make_shared<std::ofstream> (pFile);
|
||||
}
|
||||
|
||||
void data_logger::fileData::save()
|
||||
{
|
||||
if (!data_logger::m_save_graph)
|
||||
return;
|
||||
*mFile << static_cast<int>(get_current_time()) << " " << mDataToSave << std::endl;
|
||||
}
|
||||
|
||||
void data_logger::saveToFile()
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mSaveMutex);
|
||||
for (auto &element : mFilesMap)
|
||||
{
|
||||
element.second.save();
|
||||
element.second.mDataToSave = 0;
|
||||
}
|
||||
}
|
||||
|
||||
std::atomic<bool> data_logger::m_save_graph(false);
|
||||
|
||||
} // namespace
|
||||
} // namespace
|
@ -0,0 +1,46 @@
|
||||
#ifndef INCLUDED_p2p_data_logger_hpp
|
||||
#define INCLUDED_p2p_data_logger_hpp
|
||||
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include <fstream>
|
||||
#include <memory>
|
||||
#include <thread>
|
||||
#include <mutex>
|
||||
#include <atomic>
|
||||
|
||||
namespace epee
|
||||
{
|
||||
namespace net_utils
|
||||
{
|
||||
|
||||
class data_logger {
|
||||
public:
|
||||
static data_logger &get_instance();
|
||||
data_logger(const data_logger &ob) = delete;
|
||||
data_logger(data_logger &&ob) = delete;
|
||||
void add_data(std::string filename, unsigned int data);
|
||||
static std::atomic<bool> m_save_graph;
|
||||
private:
|
||||
data_logger();
|
||||
class fileData
|
||||
{
|
||||
public:
|
||||
fileData(){}
|
||||
fileData(std::string pFile);
|
||||
|
||||
std::shared_ptr<std::ofstream> mFile;
|
||||
long int mDataToSave = 0;
|
||||
static double get_current_time();
|
||||
void save();
|
||||
};
|
||||
|
||||
std::map <std::string, fileData> mFilesMap;
|
||||
std::mutex mSaveMutex;
|
||||
void saveToFile();
|
||||
};
|
||||
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
#endif
|
Loading…
Reference in new issue