(time() + 180*3600) || $pred_model['timestamp'] < time() ) { return false; break; } return $pred_model; } function makesha1hash($pred_model) { $sha1str; foreach ( $pred_model as $idx => $value ){ $sha1str .= $idx . "=" . $value . ","; } $uuid = sha1($sha1str); return $uuid; } function verifyModel($pred_model, $software_available) { if(!isset($pred_model)) return false; foreach($pred_model as $idx => $value) { if ($idx == "software") { if (!in_array($value, $software_available)) return false; } else if ($idx == "delta_lat" || $idx == "delta_lon") { if ( $value < 1 || $value > 10 ) return false; } else if (!is_numeric($value)) { return false; } } return true; } function runPred($pred_model) { // make in INI file makePredDir($pred_model); makeINI($pred_model); // if we're using --hd, then append it to the exec string if ( $pred_model['software'] == "gfs_hd" ) $use_hd ="--hd "; $predictor_lat = number_format($pred_model['lat'], 0); $predictor_lon = number_format($pred_model['lon'], 0); // use `at` to automatically background the task $ph = popen("at now", "w"); fwrite($ph, "cd /var/www/hab/predict/ && ./predict.py -v --latdelta=" .$pred_model['delta_lat']." --londelta=".$pred_model['delta_lon'] ." -p1 -f5 -t ".$pred_model['timestamp'] ." --lat=".$predictor_lat." --lon=".$predictor_lon." " . $use_hd . $pred_model['uuid']); fclose($ph); } function makePredDir($pred_model) { shell_exec("mkdir preds/" . $pred_model['uuid']); //make sure we use the uuid from model } function makeINI($pred_model) { // makes an ini file $fh = fopen("preds/" . $pred_model['uuid'] . "/scenario.ini", "a"); //append $w_string = "[launch-site]\nlatitude = " . $pred_model['lat'] . "\naltitude = " . $pred_model['alt'] . "\n"; $w_string .= "longitude = " . $pred_model['lon'] . "\n[atmosphere]\nwind-error = "; $w_string .= $pred_model['wind_error'] . "\n[altitude-model]\nascent-rate = " . $pred_model['asc'] . "\n"; $w_string .= "descent-rate = " . $pred_model['des'] . "\nburst-altitude = "; $w_string .= $pred_model['burst'] . "\n[launch-time]\nhour = " . $pred_model['hour'] . "\n"; $w_string .= "month = " . $pred_model['month'] . "\nsecond = " . $pred_model['sec'] . "\n"; $w_string .= "year = " . $pred_model['year'] . "\nday = " . $pred_model['day'] . "\nminute = "; $w_string .= $pred_model['min'] . "\n"; // add our predictor stuff $w_string .= "[predictor]\nlat-delta = " . $pred_model['delta_lat'] . "\n"; $w_string .= "lon-delta = " . $pred_model['delta_lon'] . "\nsoftware = "; $w_string .= $pred_model['software'] . "\n"; fwrite($fh, $w_string); fclose($fh); } function getModelByUUID($uuid) { if ( file_exists("preds/".$uuid."/scenario.ini") ) { $pred_model = parse_ini_file("preds/".$uuid."/scenario.ini"); return $pred_model; } else { return false; } } ?>