Skip to content
Snippets Groups Projects
Commit b243d4de authored by Radovan Červený's avatar Radovan Červený
Browse files

working basic filtering

parent a5707528
No related branches found
No related tags found
1 merge request!15BP_cervera3 - automatic measurements, processing
...@@ -3,13 +3,82 @@ ...@@ -3,13 +3,82 @@
*/ */
   
#include "MeasurementProcessor.hpp" #include "MeasurementProcessor.hpp"
#include <iostream>
   
namespace measurements { namespace measurements {
   
MeasurementProvisionerResults MeasurementProcessor::process ( MeasurementProvisionerResults mpr, const MeasurementProcessorFilter & ) { MeasurementProvisionerResults MeasurementProcessor::process ( MeasurementProvisionerResults mpr, const MeasurementProcessorFilter & filter ) {
MeasurementProvisionerResults newmpr = std::move ( mpr ); MeasurementProvisionerResults newmpr;
for ( MPRResults & mprr : mpr.results ) {
MPRResults newmprr;
newmprr.inputs = std::move ( mprr.inputs );
for ( MPRPipelineResults & mprpr : mprr.pipelineResults ) {
MPRPipelineResults newmprpr;
newmprpr.pipelineStatus = std::move ( mprpr.pipelineStatus );
for ( MPRPipelineCommandResults & mprpcr : mprpr.commandResults ) {
// filter out commands
if ( !filter.matches ( MeasurementProcessorFilter::FilterType::COMMAND, mprpcr.command ) ) continue;
MPRPipelineCommandResults newmprpcr;
newmprpcr.command = std::move ( mprpcr.command );
newmprpcr.measurementResults = processMeasurementResults ( mprpcr.measurementResults, filter );
newmprpr.commandResults.push_back ( std::move ( newmprpcr ) );
}
if ( newmprpr.commandResults.size ( ) )
newmprr.pipelineResults.push_back ( std::move ( newmprpr ) );
}
if ( newmprr.pipelineResults.size ( ) )
newmpr.results.push_back ( std::move ( newmprr ) );
}
   
return newmpr; return newmpr;
} }
   
MeasurementResults MeasurementProcessor::processMeasurementResults ( const MeasurementResults & mr, const MeasurementProcessorFilter & filter ) {
MeasurementResults newmr;
std::function < void ( unsigned, unsigned ) > dfsLambda;
dfsLambda = [&] ( unsigned idx, unsigned newmrParentIdx ) {
if ( idx == 0 ) {
newmr.frames.push_back ( mr.frames[0] );
newmr.frames[0].sub_idxs.clear ( );
for ( unsigned subIdx : mr.frames[idx].sub_idxs )
dfsLambda ( subIdx, 0 );
} else {
const MeasurementFrame & curFrame = mr.frames[idx];
bool filteredOut = false;
filteredOut |= !filter.matches ( MeasurementProcessorFilter::FilterType::FRAME_TYPE, to_string ( curFrame.type ) );
filteredOut |= !filter.matches ( MeasurementProcessorFilter::FilterType::FRAME_NAME, to_string ( curFrame.name ) );
if ( !filteredOut ) {
unsigned newmrIdx = newmr.frames.size ( );
newmr.frames.push_back ( mr.frames[idx] );
newmr.frames[newmrIdx].sub_idxs.clear ( );
newmr.frames[newmrParentIdx].sub_idxs.push_back ( newmrIdx );
for ( unsigned subIdx : mr.frames[idx].sub_idxs )
dfsLambda ( subIdx, newmrIdx );
} else {
for ( unsigned subIdx : mr.frames[idx].sub_idxs )
dfsLambda ( subIdx, newmrParentIdx );
}
}
};
dfsLambda ( 0, 0 );
return newmr;
}
} }
...@@ -12,8 +12,11 @@ namespace measurements { ...@@ -12,8 +12,11 @@ namespace measurements {
   
class MeasurementProcessor { class MeasurementProcessor {
   
static MeasurementResults processMeasurementResults ( const MeasurementResults &, const MeasurementProcessorFilter & );
public: public:
static MeasurementProvisionerResults process(MeasurementProvisionerResults, const MeasurementProcessorFilter &); static MeasurementProvisionerResults process ( MeasurementProvisionerResults, const MeasurementProcessorFilter & );
}; };
   
} }
......
/*
* Author: Radovan Cerveny
*/
#include "MeasurementProcessorFilter.hpp"
namespace measurements {
void MeasurementProcessorFilter::add ( FilterType type, const std::string & str ) {
filters[type].insert ( str );
}
void MeasurementProcessorFilter::remove ( FilterType type, const std::string & str ) {
filters[type].erase ( str );
if ( filters[type].empty ( ) ) filters.erase ( type );
}
bool MeasurementProcessorFilter::matches ( FilterType type, const std::string & str ) const {
auto filtersIter = filters.find ( type );
if ( filtersIter == filters.end ( ) ) return true;
const auto & filterSet = filtersIter->second;
return filterSet.find ( str ) != filterSet.end ( );
}
}
...@@ -6,15 +6,25 @@ ...@@ -6,15 +6,25 @@
#define MEASUREMENT_PROCESSOR_FILTER_HPP_ #define MEASUREMENT_PROCESSOR_FILTER_HPP_
   
#include <map> #include <map>
#include <vector> #include <set>
   
namespace measurements { namespace measurements {
   
enum class MeasurementProcessorFilterType { class MeasurementProcessorFilter {
FRAME_TYPE, FRAME_NAME, COMMAND public:
enum class FilterType {
FRAME_TYPE, FRAME_NAME, COMMAND
};
private:
std::map < FilterType, std::set < std::string > > filters;
public:
void add ( FilterType, const std::string & );
void remove ( FilterType, const std::string & );
bool matches ( FilterType, const std::string & ) const;
}; };
   
using MeasurementProcessorFilter = std::map < MeasurementProcessorFilterType, std::vector < std::string > >;
} }
   
#endif /* MEASUREMENT_PROCESSOR_FILTER_HPP_ */ #endif /* MEASUREMENT_PROCESSOR_FILTER_HPP_ */
...@@ -12,7 +12,7 @@ namespace measurements { ...@@ -12,7 +12,7 @@ namespace measurements {
   
struct MPRPipelineCommandResults { struct MPRPipelineCommandResults {
std::string command; std::string command;
measurements::MeasurementResults measurementResults; MeasurementResults measurementResults;
}; };
   
struct MPRPipelineStatus { struct MPRPipelineStatus {
......
...@@ -15,6 +15,7 @@ int main ( int argc, char * * argv ) { ...@@ -15,6 +15,7 @@ int main ( int argc, char * * argv ) {
TCLAP::CmdLine cmd ( "Measurement processor binary", ' ', "0.01" ); TCLAP::CmdLine cmd ( "Measurement processor binary", ' ', "0.01" );
   
std::vector < std::string > allowedOutput; std::vector < std::string > allowedOutput;
allowedOutput.push_back ( "xml" );
allowedOutput.push_back ( "stats" ); allowedOutput.push_back ( "stats" );
allowedOutput.push_back ( "csv" ); allowedOutput.push_back ( "csv" );
allowedOutput.push_back ( "html" ); allowedOutput.push_back ( "html" );
...@@ -59,13 +60,13 @@ int main ( int argc, char * * argv ) { ...@@ -59,13 +60,13 @@ int main ( int argc, char * * argv ) {
measurements::MeasurementProcessorFilter filter; measurements::MeasurementProcessorFilter filter;
   
for ( const std::string & f : filterByFrameType.getValue ( ) ) for ( const std::string & f : filterByFrameType.getValue ( ) )
filter[measurements::MeasurementProcessorFilterType::FRAME_TYPE].push_back ( f ); filter.add ( measurements::MeasurementProcessorFilter::FilterType::FRAME_TYPE, f );
   
for ( const std::string & f : filterByFrameName.getValue ( ) ) for ( const std::string & f : filterByFrameName.getValue ( ) )
filter[measurements::MeasurementProcessorFilterType::FRAME_NAME].push_back ( f ); filter.add ( measurements::MeasurementProcessorFilter::FilterType::FRAME_NAME, f );
   
for ( const std::string & f : filterByCommand.getValue ( ) ) for ( const std::string & f : filterByCommand.getValue ( ) )
filter[measurements::MeasurementProcessorFilterType::COMMAND].push_back ( f ); filter.add ( measurements::MeasurementProcessorFilter::FilterType::COMMAND, f );
   
auto processedResults = measurements::MeasurementProcessor::process ( results, filter ); auto processedResults = measurements::MeasurementProcessor::process ( results, filter );
   
......
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