diff --git a/alib2measurepp/src/provisioner/MeasurementProvisioner.cpp b/alib2measurepp/src/provisioner/MeasurementProvisioner.cpp index 746c0ef761182c614533c5922ab8a9f30b8b5ef5..378464c2c3736aced3f4136a30025ee4749dbf10 100644 --- a/alib2measurepp/src/provisioner/MeasurementProvisioner.cpp +++ b/alib2measurepp/src/provisioner/MeasurementProvisioner.cpp @@ -62,13 +62,16 @@ MeasurementProvisionerResults MeasurementProvisioner::runConfiguration ( const M } void MeasurementProvisioner::prepareEnvironment ( const MeasurementProvisionerConfiguration & cfg ) { - list < string > binariesDirectoryExpansion = MPUtils::shellExpand ( cfg.binariesDirectory ); - if ( binariesDirectoryExpansion.size ( ) != 1 ) - throw::exception::CommonException ( "MeasurementProvisioner: binaries directory: \"" + cfg.binariesDirectory + "\" expansion failed" ); + const string & workingDirectory = cfg.environment.workingDirectory; - if ( chdir ( binariesDirectoryExpansion.begin ( )->c_str ( ) ) != 0 ) - throw::exception::CommonException ( "MeasurementProvisioner: chdir to binaries directory: \"" + cfg.binariesDirectory + "\" failed" ); + list < string > workingDirectoryExpansion = MPUtils::shellExpand ( workingDirectory ); + + if ( workingDirectoryExpansion.size ( ) != 1 ) + throw::exception::CommonException ( "MeasurementProvisioner: binaries directory: \"" + workingDirectory + "\" expansion failed" ); + + if ( chdir ( workingDirectoryExpansion.begin ( )->c_str ( ) ) != 0 ) + throw::exception::CommonException ( "MeasurementProvisioner: chdir to binaries directory: \"" + workingDirectory + "\" failed" ); } MPRPipelineResults MeasurementProvisioner::runPipeline ( const MPPipeline & pipeline, const MPSubstitutionMap & substitutionMap ) { diff --git a/alib2measurepp/src/provisioner/MeasurementProvisionerConfiguration.hpp b/alib2measurepp/src/provisioner/MeasurementProvisionerConfiguration.hpp index 5d1dafece0c6f915a9b323dd1b1b7bd3abe2f941..e0c0cb6373f684dff758e072b90d0dc114b5f86a 100644 --- a/alib2measurepp/src/provisioner/MeasurementProvisionerConfiguration.hpp +++ b/alib2measurepp/src/provisioner/MeasurementProvisionerConfiguration.hpp @@ -34,9 +34,12 @@ struct MPCPipelineCommand { using MPCPipeline = std::vector < MPCPipelineCommand >; -struct MeasurementProvisionerConfiguration { - std::string binariesDirectory; +struct MPCEnvironment { + std::string workingDirectory; +}; +struct MeasurementProvisionerConfiguration { + MPCEnvironment environment; std::vector < MPCInputBatch > inputBatches; std::vector < MPCPipeline > pipelines; }; diff --git a/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.cpp b/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.cpp index f20577c8d58d9649dd96fef8c20938ab80ab6af8..da761555d423b74bf52f3ad306fe1d7ac0e8b615 100644 --- a/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.cpp +++ b/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.cpp @@ -33,39 +33,37 @@ void MeasurementProvisionerConfigurationXml::parseMeasurementProvisioner ( Measu string data = FromXMLParserHelper::getTokenData ( iter, Token::TokenType::START_ELEMENT ); - if ( data == BINARIES_DIRECTORY_TAG ) { - FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, BINARIES_DIRECTORY_TAG ); - mpc.binariesDirectory = FromXMLParserHelper::popTokenData ( iter, Token::TokenType::CHARACTER ); - FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, BINARIES_DIRECTORY_TAG ); - } else if ( data == MEASUREMENT_PROVISION_TAG ) { - parseMeasurementProvision ( mpc, iter ); - } else { + if ( data == ENVIRONMENT_TAG ) + parseEnvironment ( mpc, iter ); + else if ( data == INPUT_DATA_TAG ) + parseInputData ( mpc, iter ); + else if ( data == PIPELINES_TAG ) + parsePipelines ( mpc, iter ); + else break; - } } FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, MEASUREMENT_PROVISIONER_TAG ); } -void MeasurementProvisionerConfigurationXml::parseMeasurementProvision ( MeasurementProvisionerConfiguration & mpc, std::deque < sax::Token >::iterator & iter ) { - FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, MEASUREMENT_PROVISION_TAG ); +void MeasurementProvisionerConfigurationXml::parseEnvironment ( MeasurementProvisionerConfiguration & mpc, std::deque < sax::Token >::iterator & iter ) { + FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, ENVIRONMENT_TAG ); for ( ; ; ) { if ( !FromXMLParserHelper::isTokenType ( iter, Token::TokenType::START_ELEMENT ) ) break; string data = FromXMLParserHelper::getTokenData ( iter, Token::TokenType::START_ELEMENT ); - if ( data == INPUT_DATA_TAG ) - parseInputData ( mpc, iter ); - else if ( data == PIPELINES_TAG ) - parsePipelines ( mpc, iter ); - else if ( data == MEASUREMENT_CONFIGURATION_TAG ) - parseMeasurementConfiguration ( mpc, iter ); - else + if ( data == WORKING_DIRECTORY_TAG ) { + FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, WORKING_DIRECTORY_TAG ); + mpc.environment.workingDirectory = FromXMLParserHelper::popTokenData ( iter, Token::TokenType::CHARACTER ); + FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, WORKING_DIRECTORY_TAG ); + } else { break; + } } - FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, MEASUREMENT_PROVISION_TAG ); + FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, ENVIRONMENT_TAG ); } void MeasurementProvisionerConfigurationXml::parseInputData ( MeasurementProvisionerConfiguration & mpc, std::deque < sax::Token >::iterator & iter ) { @@ -246,9 +244,8 @@ void MeasurementProvisionerConfigurationXml::parseMeasurementConfiguration ( Mea string MeasurementProvisionerConfigurationXml::MEASUREMENT_PROVISIONER_TAG = "MeasurementProvisioner"; -string MeasurementProvisionerConfigurationXml::BINARIES_DIRECTORY_TAG = "BinariesDirectory"; - -string MeasurementProvisionerConfigurationXml::MEASUREMENT_PROVISION_TAG = "MeasurementProvision"; +string MeasurementProvisionerConfigurationXml::ENVIRONMENT_TAG = "Environment"; +string MeasurementProvisionerConfigurationXml::WORKING_DIRECTORY_TAG = "WorkingDirectory"; string MeasurementProvisionerConfigurationXml::INPUT_DATA_TAG = "InputData"; string MeasurementProvisionerConfigurationXml::INPUT_DATA_BATCH_TAG = "InputBatch"; diff --git a/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.hpp b/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.hpp index eb594b8ac025e3d9d4ad2c56128669e5776d3219..82ebdfe2beb857275f3c64e846e11485c85d5025 100644 --- a/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.hpp +++ b/alib2measurepp/src/provisioner/MeasurementProvisionerConfigurationXml.hpp @@ -14,9 +14,8 @@ namespace provisioner { class MeasurementProvisionerConfigurationXml { static std::string MEASUREMENT_PROVISIONER_TAG; - static std::string BINARIES_DIRECTORY_TAG; - - static std::string MEASUREMENT_PROVISION_TAG; + static std::string ENVIRONMENT_TAG; + static std::string WORKING_DIRECTORY_TAG; static std::string INPUT_DATA_TAG; static std::string INPUT_DATA_BATCH_TAG; @@ -38,7 +37,7 @@ class MeasurementProvisionerConfigurationXml { static void parseMeasurementProvisioner ( MeasurementProvisionerConfiguration &, std::deque < sax::Token >::iterator & ); - static void parseMeasurementProvision ( MeasurementProvisionerConfiguration &, std::deque < sax::Token >::iterator & ); + static void parseEnvironment ( MeasurementProvisionerConfiguration &, std::deque < sax::Token >::iterator & ); static void parseInputData ( MeasurementProvisionerConfiguration &, std::deque < sax::Token >::iterator & ); static void parseInputBatch ( MeasurementProvisionerConfiguration &, std::deque < sax::Token >::iterator & ); diff --git a/examples2/measurements/ameasure.xml b/examples2/measurements/ameasure.xml index 3134ea85212d759d98cc067793ca22d92662f824..0c8d5c9f2b16df7a9cc649fa73a98b1bb1855884 100644 --- a/examples2/measurements/ameasure.xml +++ b/examples2/measurements/ameasure.xml @@ -1,38 +1,31 @@ <?xml version="1.0"?> <MeasurementProvisioner> - <BinariesDirectory>~/repositories/automata-library/bin-debug</BinariesDirectory> - <MeasurementProvision> - <InputData> - <InputBatch> - <Generator id="1">./arand2 -t ST --length 16384 --terminals 2</Generator> - <Generator id="1">./arand2 -t ST --length 16384 --terminals 4</Generator> - <Generator id="1">./arand2 -t ST --length 16384 --terminals 26</Generator> - <Generator id="2">./arand2 -t SST --length 64 -i $1</Generator> - <Generator id="2">./arand2 -t SST --length 128 -i $1</Generator> - <Generator id="2">./arand2 -t SST --length 256 -i $1</Generator> - <Generator id="2">./arand2 -t SST --length 512 -i $1</Generator> - </InputBatch> - </InputData> - <Pipelines> - <Pipeline> - <Command >./astringology2 -a exactFactorMatch -s $1 -p $2</Command> - </Pipeline> - <Pipeline> - <Command >./astringology2 -a boyerMooreHorspool -s $1 -p $2</Command> - </Pipeline> - <Pipeline> - <Command >./astringology2 -a reversedBoyerMooreHorspool -s $1 -p $2</Command> - </Pipeline> - <Pipeline> - <Command >./astringology2 -a deadZoneUsingBadCharacterShift -s $1 -p $2</Command> - </Pipeline> - </Pipelines> - <MeasurementConfiguration> - <Engines> - <Engine>TIME</Engine> - <Engine>MEMORY</Engine> - <Engine>COUNTER</Engine> - </Engines> - </MeasurementConfiguration> - </MeasurementProvision> + <Environment> + <WorkingDirectory>~/repositories/automata-library/bin-debug</WorkingDirectory> + </Environment> + <InputData> + <InputBatch> + <Generator id="1">./arand2 -t ST --length 16384 --terminals 2</Generator> + <Generator id="1">./arand2 -t ST --length 16384 --terminals 4</Generator> + <Generator id="1">./arand2 -t ST --length 16384 --terminals 26</Generator> + <Generator id="2">./arand2 -t SST --length 64 -i $1</Generator> + <Generator id="2">./arand2 -t SST --length 128 -i $1</Generator> + <Generator id="2">./arand2 -t SST --length 256 -i $1</Generator> + <Generator id="2">./arand2 -t SST --length 512 -i $1</Generator> + </InputBatch> + </InputData> + <Pipelines> + <Pipeline> + <Command >./astringology2 -a exactFactorMatch -s $1 -p $2</Command> + </Pipeline> + <Pipeline> + <Command >./astringology2 -a boyerMooreHorspool -s $1 -p $2</Command> + </Pipeline> + <Pipeline> + <Command >./astringology2 -a reversedBoyerMooreHorspool -s $1 -p $2</Command> + </Pipeline> + <Pipeline> + <Command >./astringology2 -a deadZoneUsingBadCharacterShift -s $1 -p $2</Command> + </Pipeline> + </Pipelines> </MeasurementProvisioner> \ No newline at end of file