public function saveCreate() { $input = Input::all(); $clientsite = new ClientSite(); $clientsite->siteName = $input['siteName']; $clientsite->description = $input['description']; $clientsite->launchDate = $input['launchDate']; $clientsite->save(); return Redirect::action('PagesController@home'); }
function client_submit() { include 'config/config.php'; if (!$CDASH_MANAGE_CLIENTS) { return 0; } include_once 'models/clientsite.php'; include_once 'models/clientos.php'; include_once 'models/clientjob.php'; include_once 'models/clientjobschedule.php'; include_once 'models/clientcmake.php'; include_once 'models/clientcompiler.php'; include_once 'models/clientlibrary.php'; include 'config/config.php'; require_once 'include/common.php'; // Client asks for the site id if (isset($_GET['getsiteid'])) { if (!isset($_GET['sitename']) || !isset($_GET['systemname'])) { echo 'ERROR: sitename or systemname not set'; return 0; } $sitename = htmlspecialchars(pdo_real_escape_string($_GET['sitename'])); $systemname = htmlspecialchars(pdo_real_escape_string($_GET['systemname'])); // Should get the site id $ClientSite = new ClientSite(); $siteid = $ClientSite->GetId($sitename, $systemname); echo $siteid; return 1; } elseif (isset($_GET['getjob'])) { if (!isset($_GET['siteid'])) { echo '0'; return 1; } if (!$_GET['siteid']) { echo '0'; return 1; } $ClientJobSchedule = new ClientJobSchedule(); $ClientJobSchedule->SiteId = pdo_real_escape_numeric($_GET['siteid']); $jobid = $ClientJobSchedule->HasJob(); if ($jobid > 0) { // if we have something to do echo $ClientJobSchedule->GetCTestScript(); } else { echo '0'; // send zero to let the client know that nothing is there } return 1; } elseif (isset($_GET['submitinfo'])) { if (!isset($_GET['sitename']) || !isset($_GET['systemname'])) { echo '0'; return 1; } $filehandle = 'php://input'; $contents = file_get_contents($filehandle); $xml = new SimpleXMLElement($contents); // Add/Update the OS $ClientOS = new ClientOS(); $ClientOS->Name = $ClientOS->GetPlatformFromName($xml->system->platform); $ClientOS->Version = $ClientOS->GetVersionFromName($xml->system->version); $ClientOS->Bits = $xml->system->bits; $ClientOS->Save(); // Add/Update the site $ClientSite = new ClientSite(); $ClientSite->Name = htmlspecialchars(pdo_real_escape_string($_GET['sitename'])); $ClientSite->SystemName = htmlspecialchars(pdo_real_escape_string($_GET['systemname'])); $ClientSite->Host = 'none'; $ClientSite->OsId = $ClientOS->Id; $ClientSite->BaseDirectory = $xml->system->basedirectory; $ClientSite->Save(); $siteid = $ClientSite->Id; // Add/Update the compiler(s) $compilers = array(); foreach ($xml->compiler as $compiler) { $ClientCompiler = new ClientCompiler(); $ClientCompiler->Name = $compiler->name; $ClientCompiler->Version = $compiler->version; $ClientCompiler->Command = $compiler->command; $ClientCompiler->Generator = $compiler->generator; $ClientCompiler->SiteId = $siteid; $ClientCompiler->Save(); $comp = array(); $comp['name'] = $compiler->name; $comp['version'] = $compiler->version; $comp['command'] = $compiler->command; $comp['generator'] = $compiler->generator; $compilers[] = $comp; } $ClientCompiler = new ClientCompiler(); $ClientCompiler->SiteId = $siteid; $ClientCompiler->DeleteUnused($compilers); // Add/Update CMake(s) $cmakes = array(); foreach ($xml->cmake as $cmake) { $ClientCMake = new ClientCMake(); $ClientCMake->Version = $cmake->version; $ClientCMake->Path = $cmake->path; $ClientCMake->SiteId = $siteid; $ClientCMake->Save(); $cm = array(); $cm['path'] = $cmake->path; $cm['version'] = $cmake->version; $cmakes[] = $cm; } $ClientCMake = new ClientCMake(); $ClientCMake->SiteId = $siteid; $ClientCMake->DeleteUnused($cmakes); // Add/Update Libraries $libraries = array(); foreach ($xml->library as $library) { $ClientLibrary = new ClientLibrary(); $ClientLibrary->Name = $library->name; $ClientLibrary->Path = $library->path; $ClientLibrary->Include = $library->include; $ClientLibrary->Version = $library->version; $ClientLibrary->SiteId = $siteid; $ClientLibrary->Save(); $lib = array(); $lib['name'] = $library->name; $lib['path'] = $library->path; $lib['version'] = $library->version; $lib['include'] = $library->include; $libraries[] = $lib; } $ClientLibrary = new ClientLibrary(); $ClientLibrary->SiteId = $siteid; $ClientLibrary->DeleteUnused($libraries); // Add/Update Programs $programs = array(); foreach ($xml->program as $program) { $prog = array(); $prog['name'] = $program->name; $prog['path'] = $program->path; $prog['version'] = $program->version; $programs[] = $prog; } $ClientSite->UpdatePrograms($programs); // Add/Update the list of allowed projects $allowedProjects = array(); foreach ($xml->allowedproject as $allowedProject) { $allowedProjects[] = $allowedProject; } $ClientSite->UpdateAllowedProjects($allowedProjects); return 1; } elseif (isset($_GET['jobdone'])) { // Mark the job has finished if (!isset($_GET['siteid'])) { echo '0'; return 1; } if (!$_GET['siteid']) { echo '0'; return 1; } $ClientJob = new ClientJob(); $ClientJob->SiteId = pdo_real_escape_numeric($_GET['siteid']); $ClientJob->SetFinished(); return 1; } elseif (isset($_GET['jobfailed'])) { // Mark the job has failed if (!isset($_GET['siteid'])) { echo '0'; return 1; } if (!$_GET['siteid']) { echo '0'; return 1; } $ClientJob = new ClientJob(); $ClientJob->SiteId = pdo_real_escape_numeric($_GET['siteid']); $ClientJob->SetFailed(); return 1; } return 0; }
$status = "Running"; $ClientSite = new ClientSite(); $ClientSite->Id = $ClientJob->GetSite(); $status .= " (" . $ClientSite->GetName() . ")"; $lastrun = $ClientJob->GetStartDate(); break; case CDASH_JOB_FINISHED: $status = "Finished"; $ClientSite = new ClientSite(); $ClientSite->Id = $ClientJob->GetSite(); $status .= " (" . $ClientSite->GetName() . ")"; $lastrun = $ClientJob->GetEndDate(); break; case CDASH_JOB_FAILED: $status = "Failed"; $ClientSite = new ClientSite(); $ClientSite->Id = $ClientJob->GetSite(); $status .= " (" . $ClientSite->GetName() . ")"; $lastrun = $ClientJob->GetEndDate(); break; case CDASH_JOB_ABORTED: $status = "Aborted"; $lastrun = $ClientJob->GetEndDate(); break; } } $xml .= "<jobschedule>"; $xml .= add_XML_value("id", $scheduleid); $xml .= add_XML_value("projectid", $Project->Id); $xml .= add_XML_value("projectname", $Project->GetName()); $xml .= add_XML_value("status", $status);
public function GetCTestScript() { if (!$this->Id || !$this->SiteId) { add_log('ClientJobSchedule:GetCTestScript', 'Id not set'); return; } include 'config/config.php'; // Update the current run pdo_query("UPDATE client_jobschedule SET lastrun='" . date(FMT_DATETIMESTD) . "' WHERE id=" . qnum($this->Id)); $ClientSite = new ClientSite(); $ClientSite->Id = $this->SiteId; // Create a job $job = new ClientJob(); $job->ScheduleId = $this->Id; $job->StartDate = date('Y-m-d H:i:s'); $job->EndDate = date('1980-01-01 00:00:00'); $job->Status = CDASH_JOB_RUNNING; $job->SiteId = $this->SiteId; $job->OsId = $ClientSite->GetOS(); // Determine the appropriate CMake id (get the newest version) $cmake = pdo_query('SELECT sc.cmakeid FROM client_cmake,client_site2cmake AS sc LEFT JOIN client_jobschedule2cmake AS jc ON (jc.cmakeid=sc.cmakeid) WHERE client_cmake.id=sc.cmakeid AND sc.siteid=' . $this->SiteId . ' ORDER BY client_cmake.version DESC LIMIT 1'); $cmake_array = pdo_fetch_array($cmake); $job->CMakeId = $cmake_array[0]; // Determine the appropriate compiler $compiler = pdo_query('SELECT sc.compilerid FROM client_compiler,client_site2compiler AS sc LEFT JOIN client_jobschedule2compiler AS jc ON (jc.compilerid=sc.compilerid) WHERE client_compiler.id=sc.compilerid AND sc.siteid=' . $this->SiteId . ' ORDER BY client_compiler.version DESC LIMIT 1'); $compiler_array = pdo_fetch_array($compiler); $job->CompilerId = $compiler_array[0]; $job->Save(); $Project = new Project(); $Project->Id = $this->GetProjectId(); $Project->Fill(); $compiler = new ClientCompiler(); $compiler->Id = $job->CompilerId; $os = new ClientOS(); $os->Id = $job->OsId; // Initialize the variables $buildtype = 'Experimental'; //default switch ($this->GetType()) { case CDASH_JOB_EXPERIMENTAL: $buildtype = 'Experimental'; break; case CDASH_JOB_NIGHTLY: $buildtype = 'Nightly'; break; case CDASH_JOB_CONTINUOUS: $buildtype = 'Continuous'; break; } $ctest_script = '#' . $this->Id . "\n"; $ctest_script .= '#' . $Project->Name . "\n"; $ctest_script .= 'SET(JOB_BUILDTYPE ' . $buildtype . ')' . "\n"; $ctest_script .= 'SET(PROJECT_NAME "' . $Project->Name . '")' . "\n"; if (strlen($this->GetModule()) > 0) { $ctest_script .= 'SET(JOB_MODULE "' . $this->GetModule() . '")' . "\n"; } if (strlen($this->GetTag()) > 0) { $ctest_script .= 'SET(JOB_TAG "' . $this->GetTag() . '")' . "\n"; } if (strlen($this->GetBuildNameSuffix()) > 0) { $ctest_script .= 'SET(JOB_BUILDNAME_SUFFIX "' . $this->GetBuildNameSuffix() . '")' . "\n"; } $ctest_script .= 'SET(JOB_CMAKE_GENERATOR "' . $ClientSite->GetCompilerGenerator($job->CompilerId) . '")' . "\n"; $ctest_script .= 'SET(JOB_BUILD_CONFIGURATION "' . $this->BuildConfigurations[$this->GetBuildConfiguration()] . '")' . "\n"; $ctest_script .= 'SET(CLIENT_BASE_DIRECTORY "' . $ClientSite->GetBaseDirectory() . '")' . "\n"; $ctest_script .= 'SET(CLIENT_CMAKE_PATH "' . $ClientSite->GetCMakePath($job->CMakeId) . '")' . "\n"; $ctest_script .= 'SET(CLIENT_SITE "' . $ClientSite->GetName() . '")' . "\n"; $ctest_script .= 'SET(JOB_OS_NAME "' . $os->GetName() . '")' . "\n"; $ctest_script .= 'SET(JOB_OS_VERSION "' . $os->GetVersion() . '")' . "\n"; $ctest_script .= 'SET(JOB_OS_BITS "' . $os->GetBits() . '")' . "\n"; $ctest_script .= 'SET(JOB_COMPILER_NAME "' . $compiler->GetName() . '")' . "\n"; $ctest_script .= 'SET(JOB_COMPILER_VERSION "' . $compiler->GetVersion() . '")' . "\n"; $ctest_script .= 'SET(JOB_REPOSITORY "' . $this->GetRepository() . '")' . "\n"; // Set the program variables $programs = $ClientSite->GetPrograms(); $currentname = ''; foreach ($programs as $program) { $program_name = strtoupper($program['name']); $program_version = str_replace('.', '_', strtoupper($program['version'])); if ($program['name'] != $currentname) { $ctest_script .= 'SET(CLIENT_EXECUTABLE_' . $program_name . ' "' . $program['path'] . '")' . "\n"; $currentname = $program['name']; } $ctest_script .= 'SET(CLIENT_EXECUTABLE_' . $program_name . '_' . $program_version . ' "' . $program['path'] . '")' . "\n"; } if ($CDASH_USE_HTTPS === true) { $ctest_script .= 'set(CTEST_DROP_METHOD "https")' . "\n"; } else { $ctest_script .= 'set(CTEST_DROP_METHOD "http")' . "\n"; } $serverName = $CDASH_SERVER_NAME; if (strlen($serverName) == 0) { $serverName = $_SERVER['SERVER_NAME']; } $ctest_script .= 'set(CTEST_DROP_SITE "' . $serverName . '")' . "\n"; $dropLocation = dirname($_SERVER['PHP_SELF']) . '/submit.php?project=' . urlencode($Project->Name); $dropLocation .= '&clientscheduleid=' . $this->Id; $ctest_script .= 'set(CTEST_DROP_LOCATION "' . $dropLocation . '")' . "\n"; $ctest_script .= 'set(JOB_DROP_LOCATION "' . $dropLocation . '")' . "\n"; $ctest_script .= 'set(JOB_DROP_SITE "' . $serverName . '")' . "\n"; $ctest_script .= 'set(CTEST_DROP_SITE_CDASH TRUE)' . "\n"; $ctest_script .= 'set(CTEST_NOTES_FILES ${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME})' . "\n"; // Make the cache available $ctest_script .= 'set(JOB_INITIAL_CACHE "' . $this->GetCMakeCache() . '\\n")' . "\n"; // Set the macro to warn CDash that the script failed $ctest_script .= "\n" . 'MACRO(JOB_FAILED)' . "\n"; $uri = $_SERVER['REQUEST_URI']; $pos = strpos($uri, 'submit.php'); if ($pos !== false) { $uri = substr($uri, 0, $pos + 10); } $ctest_script .= ' file(DOWNLOAD "${CTEST_DROP_METHOD}://${CTEST_DROP_SITE}' . $uri . '?siteid=' . $this->SiteId . '&jobfailed=1" "${CLIENT_BASE_DIRECTORY}/scriptfailed.txt")' . "\n"; $ctest_script .= ' return()' . "\n"; $ctest_script .= 'ENDMACRO(JOB_FAILED)' . "\n\n"; if (strlen(trim($this->GetClientScript())) > 0) { $ctest_script .= $this->GetClientScript(); } elseif (strlen($Project->CTestTemplateScript) > 0) { $ctest_script .= $Project->CTestTemplateScript; } else { $ctest_script .= $Project->getDefaultJobTemplateScript(); } return $ctest_script; }
$status = 'Running'; $ClientSite = new ClientSite(); $ClientSite->Id = $ClientJob->GetSite(); $status .= ' (' . $ClientSite->GetName() . ')'; $lastrun = $ClientJob->GetStartDate(); break; case CDASH_JOB_FINISHED: $status = 'Finished'; $ClientSite = new ClientSite(); $ClientSite->Id = $ClientJob->GetSite(); $status .= ' (' . $ClientSite->GetName() . ')'; $lastrun = $ClientJob->GetEndDate(); break; case CDASH_JOB_FAILED: $status = 'Failed'; $ClientSite = new ClientSite(); $ClientSite->Id = $ClientJob->GetSite(); $status .= ' (' . $ClientSite->GetName() . ')'; $lastrun = $ClientJob->GetEndDate(); break; case CDASH_JOB_ABORTED: $status = 'Aborted'; $lastrun = $ClientJob->GetEndDate(); break; } } $xml .= '<jobschedule>'; $xml .= add_XML_value('id', $scheduleid); $xml .= add_XML_value('projectid', $Project->Id); $xml .= add_XML_value('projectname', $Project->GetName()); $xml .= add_XML_value('status', $status);
} // CMake versions $CMake = new ClientCMake(); $cmakeids = $CMake->getAll(); foreach ($cmakeids as $cmakeid) { $xml .= '<cmake>'; $CMake->Id = $cmakeid; $xml .= add_XML_value('version', $CMake->GetVersion()); $xml .= add_XML_value('id', $cmakeid); if (isset($cmakes) && array_search($cmakeid, $cmakes) !== false) { $xml .= add_XML_value('selected', '1'); } $xml .= '</cmake>'; } // Sites $Site = new ClientSite(); $siteids = $Site->GetAllForProject($projectid); foreach ($siteids as $siteid) { $xml .= '<site>'; $Site->Id = $siteid; $lastping = $Site->GetLastPing(); $time = time() - 5 * 60; if (strtotime($lastping) < $time) { $lastseen = 0; } else { $lastseen = 1; } // Check when the site was last seen $lastpingtime = ''; $diff = time() - strtotime($lastping); $days = $diff / (3600 * 24);
} // CMake versions $CMake = new ClientCMake(); $cmakeids = $CMake->getAll(); foreach ($cmakeids as $cmakeid) { $xml .= '<cmake>'; $CMake->Id = $cmakeid; $xml .= add_XML_value("version", $CMake->GetVersion()); $xml .= add_XML_value("id", $cmakeid); if (isset($cmakes) && array_search($cmakeid, $cmakes) !== false) { $xml .= add_XML_value("selected", "1"); } $xml .= '</cmake>'; } // Sites $Site = new ClientSite(); $siteids = $Site->GetAllForProject($projectid); foreach ($siteids as $siteid) { $xml .= '<site>'; $Site->Id = $siteid; $lastping = $Site->GetLastPing(); $time = time() - 5 * 60; if (strtotime($lastping) < $time) { $lastseen = 0; } else { $lastseen = 1; } // Check when the site was last seen $lastpingtime = ''; $diff = time() - strtotime($lastping); $days = $diff / (3600 * 24);