/**
  * returns a BenchmarkArchiver object based on command line arguments
  * @return BenchmarkArchiver
  */
 public static function &getArchiver()
 {
     $archiver = NULL;
     $options = parse_args(array('store:', 'store_container:', 'store_endpoint:', 'store_insecure', 'store_key:', 'store_prefix:', 'store_public', 'store_region:', 'store_secret:', 'v' => 'verbose'), NULL, 'save_');
     merge_options_with_config($options, BenchmarkDb::BENCHMARK_DB_CONFIG_FILE);
     $impl = 'BenchmarkArchiver';
     switch ($options['store']) {
         case 'azure':
             $impl .= 'Azure';
             break;
         case 'google':
             $impl .= 'Google';
             break;
         case 's3':
             $impl .= 'S3';
             break;
         default:
             $err = '--store ' . $options['store'] . ' is not valid';
             break;
     }
     // invalid --store argument
     if (isset($err)) {
         print_msg($err, isset($options['verbose']), __FILE__, __LINE__, TRUE);
         return $archiver;
     }
     require_once sprintf('%s/%s.php', dirname(__FILE__), $impl);
     $archiver = new $impl($options);
     $archiver->options = $options;
     if (!$archiver->validate()) {
         $archiver = NULL;
     }
     return $archiver;
 }
 /**
  * returns a BenchmarkDb object based on command line arguments. returns NULL
  * if there are any problems with the command line arguments
  * @return BenchmarkDb
  */
 public static function &getDb()
 {
     $db = NULL;
     $options = parse_args(array('db:', 'db_and_csv:', 'db_callback_header:', 'db_host:', 'db_librato_aggregate', 'db_librato_color:', 'db_librato_count:', 'db_librato_description:', 'db_librato_display_max:', 'db_librato_display_min:', 'db_librato_display_name:', 'db_librato_display_units_long:', 'db_librato_display_units_short:', 'db_librato_display_stacked', 'db_librato_display_transform:', 'db_librato_max:', 'db_librato_min:', 'db_librato_measure_time:', 'db_librato_name:', 'db_librato_period:', 'db_librato_source:', 'db_librato_sum:', 'db_librato_summarize_function:', 'db_librato_sum_squares:', 'db_librato_type:', 'db_librato_value:', 'db_mysql_engine:', 'db_name:', 'db_port:', 'db_pswd:', 'db_prefix:', 'db_suffix:', 'db_user:'******'output:', 'params_file:', 'remove:', 'skip_validations', 'store:', 'v' => 'verbose'), $aparams = array('db_librato_aggregate', 'db_librato_color', 'db_librato_count', 'db_librato_description', 'db_librato_display_max', 'db_librato_display_min', 'db_librato_display_name', 'db_librato_display_units_long', 'db_librato_display_units_short', 'db_librato_display_stacked', 'db_librato_display_transform', 'db_librato_max', 'db_librato_min', 'db_librato_measure_time', 'db_librato_name', 'db_librato_period', 'db_librato_source', 'db_librato_sum', 'db_librato_summarize_function', 'db_librato_sum_squares', 'db_librato_type', 'db_librato_value', 'remove'), 'save_');
     // merge settings with config file
     $cfile = BenchmarkDb::BENCHMARK_DB_CONFIG_FILE;
     if (isset($options['params_file']) && !file_exists($options['params_file']) && !file_exists($options['params_file'] = trim(shell_exec('pwd')) . '/' . $options['params_file'])) {
         print_msg(sprintf('--params_file %s is not a valid file', $options['params_file']), TRUE, __FILE__, __LINE__, TRUE);
     } else {
         if (isset($options['params_file'])) {
             $cfile = $options['params_file'];
         }
     }
     merge_options_with_config($options, $cfile);
     // convert array parameters found in config file
     foreach ($aparams as $aparam) {
         if (isset($options[$aparam]) && !is_array($options[$aparam])) {
             $p = array();
             foreach (explode(',', $options[$aparam]) as $v) {
                 if (preg_match('/^"(.*)"$/', $v) || preg_match("/^'(.*)'\$/", $v)) {
                     $p[] = strip_quotes($v);
                 } else {
                     foreach (explode(' ', trim($v)) as $v) {
                         $p[] = trim($v);
                     }
                 }
             }
             $options[$aparam] = $p;
         }
     }
     if (!isset($options['remove'])) {
         $options['remove'] = array();
     }
     // output directory
     if (!isset($options['output'])) {
         $options['output'] = trim(shell_exec('pwd'));
     }
     // default table suffix
     if (!isset($options['db_suffix']) && ($ini = get_benchmark_ini()) && isset($ini['meta-version'])) {
         $options['db_suffix'] = '_' . str_replace('.', '_', $ini['meta-version']);
     }
     $impl = 'BenchmarkDb';
     if (isset($options['db'])) {
         switch ($options['db']) {
             case 'bigquery':
                 $impl .= 'BigQuery';
                 break;
             case 'callback':
                 $impl .= 'Callback';
                 break;
             case 'librato':
                 $impl .= 'Librato';
                 break;
             case 'mysql':
                 $impl .= 'MySql';
                 break;
             case 'postgresql':
                 $impl .= 'PostgreSql';
                 break;
             default:
                 $err = '--db ' . $options['db'] . ' is not valid';
                 break;
         }
         // invalid --db argument
         if (isset($err)) {
             print_msg($err, isset($options['verbose']), __FILE__, __LINE__, TRUE);
             return $db;
         }
     }
     if ($impl != 'BenchmarkDb') {
         require_once sprintf('%s/%s.php', dirname(__FILE__), $impl);
     }
     $db = new $impl($options);
     $db->options = $options;
     $db->dir = $options['output'];
     if (!$db->validateDependencies()) {
         $db = NULL;
     } else {
         if (!isset($options['skip_validations']) && !$db->validate()) {
             $db = NULL;
         }
     }
     if ($db && isset($options['store'])) {
         require_once 'BenchmarkArchiver.php';
         $db->archiver =& BenchmarkArchiver::getArchiver();
         if (!$db->archiver) {
             $db = NULL;
         }
     }
     return $db;
 }