} } } if ($db->addRow($test, $results)) { print_msg(sprintf('Successfully saved %s test results', $test), isset($args['verbose']), __FILE__, __LINE__); } else { print_msg(sprintf('Failed to save %s test results', $test), isset($args['verbose']), __FILE__, __LINE__, TRUE); } // save fio results if (!isset($args['nosave_fio'])) { $files = $test == 'throughput' ? array(sprintf('%s/fio-%s-1024k.json', $dir, $test), sprintf('%s/fio-%s-128k.json', $dir, $test)) : array(sprintf('%s/fio-%s.json', $dir, $test)); foreach ($files as $file) { if (file_exists($file) && ($results = json_decode(file_get_contents($file), TRUE)) && isset($results['jobs'])) { $njobs = count($results['jobs']); foreach ($results['jobs'] as $i => $job) { if ($row = BlockStorageTest::getFioJobRow($job)) { $row['test'] = $test; $row['iteration'] = $iteration; $row = array_merge(BlockStorageTest::getMetaCols($dir), $row); if ($db->addRow('fio', $row)) { print_msg(sprintf('Successfully saved job %s to fio table', $row['jobname']), isset($args['verbose']), __FILE__, __LINE__); } else { print_msg(sprintf('Failed to save job %s to fio table', $row['jobname']), isset($args['verbose']), __FILE__, __LINE__, TRUE); } } else { print_msg(sprintf('Unable to get fio row data for job %s', $row['jobname']), isset($args['verbose']), __FILE__, __LINE__, TRUE); } } } else { print_msg(sprintf('Failed to save fio results from file %s', basename($file)), isset($args['verbose']), __FILE__, __LINE__, TRUE); }
/** * returns a hash of key/value pairs for the fio $job specified * @param array $job the job (or job sub-element in recursive calls) * @param string $prefix optional prefix * @return array */ public static function getFioJobRow(&$job, $prefix = NULL) { $row = array(); if (is_array($job)) { foreach ($job as $key => $val) { // skip some fio metrics if (in_array($key, array('ctx', 'groupid', 'latency_depth', 'latency_target', 'latency_percentile', 'latency_window')) || preg_match('/trim/', $key) || preg_match('/error/', $key)) { continue; } $key = str_replace('.', '_', str_replace('0000', '', str_replace('00000', '', str_replace('.000000', '', str_replace('<', 'lt', str_replace('<=', 'lte', str_replace('>', 'gt', str_replace('>=', 'gte', $key)))))))); if (preg_match('/0_00/', $key)) { continue; } if (is_array($val)) { $row = array_merge($row, BlockStorageTest::getFioJobRow($val, str_replace('__', '_', sprintf('%s%s_', $prefix ? $prefix . '_' : '', $key)))); } else { $row[sprintf('%s%s', $prefix ? $prefix : '', $key)] = $val; } } } return $row; }