void UserAf::updateJobsOrder( af::Job * newJob) { AfListIt jobsListIt( &m_jobslist); int userlistorder = 0; for( AfNodeSrv *job = jobsListIt.node(); job != NULL; jobsListIt.next(), job = jobsListIt.node()) ((JobAf*)(job))->setUserListOrder( userlistorder++, ((void*)(job)) != ((void*)(newJob))); }
void UserAf::v_refresh( time_t currentTime, AfContainer * pointer, MonitorContainer * monitoring) { /* if( isLocked() ) { return; }*/ //printf("UserAf::refresh: \"%s\"\n", getName().toUtf8().data()); int _numjobs = m_jobslist.getCount(); if(( _numjobs == 0) && ( false == isPermanent())) { if( m_zombietime ) { if( (currentTime-m_zombietime) > af::Environment::getUserZombieTime() ) { appendLog( std::string("ZOMBIETIME: " + af::itos( af::Environment::getUserZombieTime()) + " seconds with no job.")); v_setZombie( monitoring); return; } } else { m_zombietime = currentTime; } return; } else m_zombietime = 0; int _numrunningjobs = 0; int _runningtasksnumber = 0; { AfListIt jobsListIt( &m_jobslist); for( AfNodeSrv *job = jobsListIt.node(); job != NULL; jobsListIt.next(), job = jobsListIt.node()) { if( ((JobAf*)job)->isRunning()) { _numrunningjobs++; _runningtasksnumber += ((JobAf*)job)->getRunningTasksNumber(); } } } if((( _numrunningjobs != m_running_jobs_num ) || ( _numjobs != m_jobs_num ) || ( _runningtasksnumber != m_running_tasks_num )) && monitoring ) monitoring->addEvent( af::Msg::TMonitorUsersChanged, m_id); m_jobs_num = _numjobs; m_running_jobs_num = _numrunningjobs; m_running_tasks_num = _runningtasksnumber; // Update solving parameters: v_calcNeed(); }
bool UserAf::getJobs( std::ostringstream & o_str) { AfListIt jobsListIt( &m_jobslist); bool first = true; bool has_jobs = false; for( AfNodeSrv *job = jobsListIt.node(); job != NULL; jobsListIt.next(), job = jobsListIt.node()) { if( false == first ) o_str << ",\n"; first = false; ((JobAf*)(job))->v_jsonWrite( o_str, af::Msg::TJobsList); has_jobs = true; } return has_jobs; }
void JobAf::checkDepends() { m_state = m_state & (~AFJOB::STATE_WAITDEP_MASK); bool depend_local = false; bool depend_global = false; // check global depends: if( hasDependMaskGlobal()) { JobContainerIt jobsIt( ms_jobs); for( Job *job = jobsIt.job(); job != NULL; jobsIt.next(), job = jobsIt.job()) { if( job == this ) continue; if(( job->isDone() == false ) && ( checkDependMaskGlobal( job->getName()) )) { depend_global = true; break; } } } // check local depends: if( hasDependMask()) { AfListIt jobsListIt( m_user->getJobsList()); for( AfNodeSrv *job = jobsListIt.node(); job != NULL; jobsListIt.next(), job = jobsListIt.node()) { if( job == this ) continue; if(( ((JobAf*)job)->isDone() == false ) && ( checkDependMask( ((JobAf*)job)->getName()) )) { depend_local = true; break; } } } if( depend_local || depend_global ) m_state = m_state | AFJOB::STATE_WAITDEP_MASK; }
void UserAf::jobsinfo( af::MCAfNodes &mcjobs) { AfListIt jobsListIt( &m_jobslist); for( AfNodeSrv *job = jobsListIt.node(); job != NULL; jobsListIt.next(), job = jobsListIt.node()) mcjobs.addNode( job->node()); }