def FioParametersToJob(fio_parameters): """Translate fio parameters into a job config file. Sample fio parameters: --filesize=10g --directory=/scratch0 --name=sequential_write --overwrite=0 --rw=write Output: [global] filesize=10g directory=/scratch0 [sequential_write] overwrite=0 rw=write Args: fio_parameters: string. Fio parameters in string format. Returns: A string representing a fio job config file. """ fio_parameters = fio_parameters.replace(' ', '\n') fio_parameters = regex_util.Substitute(CMD_SECTION_REGEX, JOB_SECTION_REPL_REGEX, fio_parameters) fio_parameters = '[%s]\n%s' % (GLOBAL, fio_parameters) fio_parameters = regex_util.Substitute(CMD_PARAMETER_REGEX, CMD_PARAMETER_REPL_REGEX, fio_parameters) return fio_parameters.replace(CMD_STONEWALL_PARAMETER, JOB_STONEWALL_PARAMETER)
def _ParseFioJson(fio_json): """Parse fio json output. Args: fio_json: string. Json output from fio comomand. Returns: A list of sample.Sample object. """ samples = [] for job in json.loads(fio_json)['jobs']: cmd = job['fio_command'] # Get rid of ./fio. cmd = ' '.join(cmd.split()[1:]) additional_metadata = {'cmd': cmd} # Remove ssmw suffix from job name. try: job['jobname'] = regex_util.Substitute( STEADY_STATE_MEASUREMENT_WINDOW, '', job['jobname']) additional_metadata['steady_state'] = True except regex_util.NoMatchError: additional_metadata['steady_state'] = False # Mock fio_json to reuse fio parser. mock_json = {'jobs': [job]} new_samples = fio.ParseResults( fio.FioParametersToJob(cmd).__str__(), mock_json) for s in new_samples: s.metadata.update(additional_metadata) samples += new_samples return samples
def DeleteParameterFromJobFile(job_file, parameter): """Delete all occurance of parameter from job_file. Args: job_file: The contents of the fio job file. parameter: The parameter to be deleted in job file. Returns: A string representing a fio job file after removing parameter. """ try: return regex_util.Substitute(r'%s=[\w\d_/]+\n' % parameter, '', job_file) except regex_util.NoMatchError: return job_file
def testSubstituteSuccess(self): pattern = r'<(\w+)>' repl = r'[\1]' text = 'foo <bar> <foo> bar' sub_text = regex_util.Substitute(pattern, repl, text) self.assertEqual(sub_text, 'foo [bar] [foo] bar')