Esempio n. 1
0
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
Esempio n. 3
0
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
Esempio n. 4
0
 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')