Skip to content
Snippets Groups Projects
Commit f08bcddc authored by Sergey Yakubov's avatar Sergey Yakubov
Browse files

refactor example

parent 80c054fa
No related branches found
No related tags found
No related merge requests found
......@@ -15,6 +15,7 @@ ENDIF(WIN32)
################################
# Library
################################
#add_library(${TARGET_NAME} SHARED STATIC ${SOURCE_FILES})
add_library(${TARGET_NAME} SHARED ${SOURCE_FILES})
target_include_directories(${TARGET_NAME} PUBLIC include)
set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
......@@ -5,6 +5,11 @@ set(SOURCE_FILES process_folder.cpp)
################################
# Executable and link
################################
if (CMAKE_BUILD_TYPE STREQUAL "Release")
set(CMAKE_FIND_STATIC FIRST)
endif()
add_executable(${TARGET_NAME} ${SOURCE_FILES})
target_link_libraries(${TARGET_NAME} common worker-api pthread)
set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
#set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS "-static-libstdc++")
......@@ -6,23 +6,27 @@
#include <chrono>
#include <iomanip>
#include "worker/data_broker.h"
using hidra2::WorkerErrorCode;
using std::chrono::high_resolution_clock;
int main(int argc, char* argv[]) {
struct Statistics {
std::chrono::milliseconds duration_scan;
std::chrono::milliseconds duration_read;
int nfiles;
double size_gb;
double bandwidth;
};
std::string ProcessCommandArguments(int argc, char* argv[]){
if (argc != 2) {
std::cout << "Usage: " + std::string{argv[0]} +" <path to folder>" << std::endl;
abort();
}
return argv[1];
}
std::string folder{argv[1]};
std::unique_ptr<hidra2::DataBroker> CreateBroker(const std::string& folder){
hidra2::WorkerErrorCode err;
auto broker = hidra2::DataBrokerFactory::Create(folder, &err);
if (err != WorkerErrorCode::OK) {
......@@ -30,35 +34,63 @@ int main(int argc, char* argv[]) {
abort();
}
return broker;
}
void ConnectToBrocker(std::unique_ptr<hidra2::DataBroker>* broker,Statistics* statistics){
hidra2::WorkerErrorCode err;
high_resolution_clock::time_point t1 = high_resolution_clock::now();
err = broker->Connect();
err = (*broker)->Connect();
if (err != WorkerErrorCode::OK) {
std::cout << "Cannot connect to broker" << std::endl;
abort();
}
high_resolution_clock::time_point t2 = high_resolution_clock::now();
auto duration_scan = std::chrono::duration_cast<std::chrono::milliseconds>( t2 - t1 ).count();
statistics->duration_scan = std::chrono::duration_cast<std::chrono::milliseconds>( t2 - t1 );
}
void ReadAllData(std::unique_ptr<hidra2::DataBroker>* broker,Statistics* statistics){
hidra2::WorkerErrorCode err;
hidra2::FileInfo file_info;
hidra2::FileData file_data;
high_resolution_clock::time_point t1 = high_resolution_clock::now();
int nfiles = 0;
uint64_t size = 0;
while ((err = broker->GetNext(&file_info, &file_data)) == WorkerErrorCode::OK) {
while ((err = (*broker)->GetNext(&file_info, &file_data)) == WorkerErrorCode::OK) {
nfiles++;
size += file_info.size;
}
high_resolution_clock::time_point t3 = high_resolution_clock::now();
auto duration_read = std::chrono::duration_cast<std::chrono::milliseconds>( t3 - t2 ).count();
if (err!=WorkerErrorCode::NO_DATA){
std::cout << "Read error" << std::endl;
abort();
}
high_resolution_clock::time_point t2 = high_resolution_clock::now();
statistics->nfiles = nfiles;
statistics->size_gb = double(size) / 1024 / 1024 / 1024;
statistics->duration_read=std::chrono::duration_cast<std::chrono::milliseconds>( t2 - t1 );
statistics->bandwidth = statistics->size_gb/statistics->duration_read.count()*1000;
}
void PrintStatistics(const Statistics& statistics){
std::cout << "Processed " << statistics.nfiles << " files" << std::endl;
std::cout << "Total size: " << std::setprecision(2) << statistics.size_gb << "GB" << std::endl;
std::cout << "Elapsed scan : " << statistics.duration_scan.count() << "ms" << std::endl;
std::cout << "Elapsed read : " << statistics.duration_read.count() << "ms" << std::endl;
std::cout << "Bandwidth: " << std::setprecision(2) << statistics.bandwidth << "GB/sec" << std::endl;
}
int main(int argc, char* argv[]) {
std::string folder = ProcessCommandArguments(argc,argv);
auto broker = CreateBroker(folder);
double size_gb = double(size) / 1024 / 1024 / 1024;
double bandwidth = size_gb/duration_read*1000;
std::cout << "Processed " << nfiles << " files" << std::endl;
std::cout << "Total size: " << std::setprecision(2) << size_gb << "GB" << std::endl;
std::cout << "Elapsed scan : " << duration_scan << "ms" << std::endl;
std::cout << "Elapsed read : " << duration_read << "ms" << std::endl;
std::cout << "Bandwidth: " << std::setprecision(2) << bandwidth << "GB/sec" << std::endl;
Statistics statistics;
ConnectToBrocker(&broker,&statistics);
ReadAllData(&broker,&statistics);
PrintStatistics(statistics);
return 0;
}
......@@ -7,6 +7,8 @@ set(SOURCE_FILES include/worker/data_broker.h src/data_broker.cpp src/folder_dat
# Library
################################
add_library(${TARGET_NAME} SHARED ${SOURCE_FILES})
#add_library(${TARGET_NAME} SHARED STATIC ${SOURCE_FILES})
target_include_directories(${TARGET_NAME} PUBLIC include)
target_link_libraries(${TARGET_NAME} common)
set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment