Exemplo n.º 1
0
void JobAf::deleteNode( RenderContainer * renders, MonitorContainer * monitoring)
{
	if( m_id == AFJOB::SYSJOB_ID )
	{
		AFCommon::QueueLogError("System job can't be zombie");
		return;
	}
	
	if( m_deletion == false )
	{
		m_state = AFJOB::STATE_OFFLINE_MASK;
		lock();
		m_deletion = true;
		
		if( m_custom_data.size() || m_user->getCustomData().size())
		{
			std::vector<std::string> events;
			events.push_back("JOB_DELETED");
			emitEvents(events);
		}
		
		if( getRunningTasksNumber() && (renders != NULL) && (monitoring != NULL))
		{
			restartAllTasks("Job deletion.", renders, monitoring, AFJOB::STATE_RUNNING_MASK);
			if( monitoring ) monitoring->addJobEvent( af::Monitor::EVT_jobs_change, getId(), getUid());
			return;
		}
	}
	if( getRunningTasksNumber() )
	{
		AF_ERR << "runningtaskscounter = " << getRunningTasksNumber();
		return;
	}
	
	if( false == m_command_post.empty())
	{
		SysJob::AddPostCommand( m_command_post, m_blocks_num > 0 ? m_blocks_data[0]->getWDir(): "", m_user_name, m_name);
		appendLog( std::string("Executing job post command:\n") + m_command_post);
	}
	for( int b = 0; b < m_blocks_num; b++)
	{
		if( m_blocks_data[b]->hasCmdPost())
		{
			SysJob::AddPostCommand( m_blocks_data[b]->getCmdPost(), m_blocks_data[b]->getWDir(), m_user_name, m_name);
			appendLog( std::string("Executing block[") + m_blocks_data[b]->getName() + "] post command:\n" + m_blocks_data[b]->getCmdPost());
		}
	}
	
	setZombie();
	
	AFCommon::DBAddJob( this);
	
	if( monitoring ) monitoring->addJobEvent( af::Monitor::EVT_jobs_del, getId(), getUid());
	AFCommon::QueueLog("Deleting a job: " + v_generateInfoString());
	unLock();
}
void MidiNoteInRangeBlock::startLearning2() {
    // check if already in learning state:
    if (m_learning2) {
        // yes -> cancel learning:
        m_controller->midi()->removeNextEventCallback(getUid() + "2");
        setLearning2(false);
        return;
    }
    // listen for the next event:
    setLearning2(true);
    m_controller->midi()->registerForNextEvent(getUid() + "2", [this](MidiEvent event) { this->checkIfEventFits2(event); });
}
void MidiProgramInBlock::startLearning() {
    // check if already in learning state:
    if (m_learning) {
        // yes -> cancel learning:
        m_controller->midi()->removeNextEventCallback(getUid());
        setLearning(false);
        return;
    }
    // listen for the next event:
    setLearning(true);
    m_controller->midi()->registerForNextEvent(getUid(), [this](MidiEvent event) { this->checkIfEventFits(event); });
}
Exemplo n.º 4
0
Arquivo: Dtb.cpp Projeto: daisy/amis
//--------------------------------------------------
//process an OPF file
//--------------------------------------------------
bool amis::dtb::Dtb::processOpf(const ambulant::net::url* filepath)
{
	#if defined(AMIS_COMPILER_MSVC)
		//windows utility for converting wstring to string
		USES_CONVERSION;
	#endif

	amis::io::OpfFileReader opf_file_reader;
	if (!opf_file_reader.readFromFile(filepath)) return false;

	mpSpine = opf_file_reader.getSpine();
	mpMetadata = opf_file_reader.getMetadata();
	
	//only support DAISY 2005 books
	amis::dtb::MetaItem* p_item = mpMetadata->getMetadata("dc:Format");
	std::string str_content = "";
	#if defined(AMIS_COMPILER_MSVC)
		str_content.assign(T2A(p_item->mContent.c_str()));
	#else
		//TODO: convert string on other platforms
	#endif
	if (p_item == NULL || str_content != "ANSI/NISO Z39.86-2005")
	{
		std::string msg = "This format is unsupported: ";
		if (p_item == NULL) msg += "dc:Format not found";
		else msg += str_content;
		amis::util::Log::Instance()->writeError(msg, "Dtb::processOpf");
		mDaisyVersion = UNSUPPORTED;
		return false;
	}
	mUid = getUid();
	
	/*mpTitle = new amis::MediaGroup();
	amis::TextNode* p_title_text = new amis::TextNode();
	p_title_text->setTextString(mpMetadata->getMetadataContent("dc:Title"));
	mpTitle->setText(p_title_text);

	mpAuthor = new amis::MediaGroup();
	amis::TextNode* p_author_text = new amis::TextNode();
	p_author_text->setTextString(mpMetadata->getMetadataContent("dc:Creator"));
	mpAuthor->setText(p_author_text);*/

	const ambulant::net::url* navfile = opf_file_reader.getNavFilename();
	const ambulant::net::url* resfile = opf_file_reader.getResourceFilename();
	const ambulant::net::url* txtfile = opf_file_reader.getTextFilename();
	mUid = getUid();
	
	mpFiles->setAdditionalDataAfterInitialParse(mUid, navfile, resfile, mpHistory);
	mpFiles->setTextFile(txtfile);
	return true;
}
	void Wiegand37WithFacilityFormat::getLinearDataWithoutParity(void* data, size_t dataLengthBytes) const
	{
		unsigned int pos = 1;

		convertField(data, dataLengthBytes, &pos, getFacilityCode(), 16);
		convertField(data, dataLengthBytes, &pos, getUid(), 19);		
	}
Exemplo n.º 6
0
DWORD CClientNet::MsgHandler(TS_PEER_MESSAGE& inputMsg) {			// 创建新的客户端WSClient
    TS_UINT64 uid = getUid(inputMsg.msg);
    if (uid == SelfUID) {
        return 0;
    }

    TS_MESSAGE_HEAD *head = (TS_MESSAGE_HEAD*) &inputMsg.msg;
	
	if (ENTERAGENT == head->type) {
        DOWN_AGENTSERVICE* down = (DOWN_AGENTSERVICE*) &inputMsg.msg;
        if (SuccessEnterClass == down->result) {
            setTimeDiff(down->head.time - getServerTime());
            setUID(down->uid);
		}
	} else if (ENTERCLASS == head->type || LEAVECLASS == head->type) {
        DOWN_AGENTSERVICE* down = (DOWN_AGENTSERVICE*) &inputMsg.msg;
        if (SuccessEnterClass == down->result) {
            addServerAddr(down->addr);
            setTimeDiff(down->head.time - getServerTime());
            setUID(down->uid);
            setBeginSequence(down->lastSeq + 1);
            startupHeartBeat();
            sendConnectionMsg();
            m_Connect->setFilePrefix(string(reinterpret_cast<char*> (down->className)));
            // m_Connect->loadFile(string(reinterpret_cast<char*> (down->className)));
        } else if (SuccessLeaveClass == down->result) {
            endHeartBeat();
        }
	} else if (SCANPORT == head->type) {
		addServerAddr(inputMsg.peeraddr);
	}

    sendToUp(inputMsg.msg, 0, 0, true);
	return 0;
}
Exemplo n.º 7
0
LocalConnection::LocalConnection(const QString &id, QObject* parent)
: QObject(parent), d(new Data) {
	d->id = id;
	d->socket = id % '-' % QString::number(getUid(), 16);
	d->lock = new QLockFile(QDir::temp().path() % '/' % d->socket % "-lock");
	d->lock->setStaleLockTime(0);
}
Exemplo n.º 8
0
ERR_Code
aCatGroup::SetParent( aCatGroup * parent )
{
	aSQLTable * t = table();
	if ( !t ) return err_notable;
	qulonglong idp = 0, uid = getUid();
	if ( parent ) idp = parent->getUid();
	if ( idp == uid ) return err_cyclereparent;
	qulonglong level, tmpid = idp;
	aCatGroup tg( obj, db );
	while ( tmpid )
	{
		tg.select(tmpid);
		tmpid = tg.parentUid();
		if ( tmpid == uid ) return err_cyclereparent;
	}
	QString query;
	query = QString("UPDATE %1 SET idp=%2 WHERE id=%3").arg(t->tableName).arg(idp).arg(uid);
	level = parent->Value("Level").toULongLong();
//	printf("%s\n",(const char*)query);
	QSqlDatabase tdb = *db->db();
	tdb.exec(query);
	if ( !tdb.lastError().type() )
	{
		if (idp) setLevel(level+1);
		else setLevel(0);
		return err_noerror;
	}
	else return err_execerror;
}
Exemplo n.º 9
0
/*!
  Set the user identity for the process. Returns 0 on success.
 */
int Process::setuid (const char *uid)
{
#ifndef WIN32
  if (uid && uid[0])
    return ::setuid (getUid (uid));
#endif
  return 0;
}
Exemplo n.º 10
0
    void Wiegand37Format::serialize(boost::property_tree::ptree& parentNode)
    {
        boost::property_tree::ptree node;

        node.put("<xmlattr>.type", getType());
        node.put("Uid", getUid());

        parentNode.add_child(getDefaultXmlNodeName(), node);
    }
Exemplo n.º 11
0
bool CClientNet::replays(int &sleepTime) {
    ts_msg msg;
    if (m_replay->getNextMsg(msg, sleepTime)) {
        qDebug() << "uid:" << getUid(msg) << " seq:" << getSeq(msg);
        sendToUp(msg, 0, 0, true);
        return true;
    } else {
        return false;
    }
}
Exemplo n.º 12
0
/*!
* Delete curent selected object record from database.
*/
int
aObject::Delete()
{
	aDataTable * t = table();
	if ( !t ) return err_notable;
	db->markDeleted(getUid());
	t->Delete();
//	if ( !selected() ) return err_notselected;
//	t->primeDelete();
//	t->del();
	setSelected (false);
	return err_noerror;
}
static int getUid(const char *const name) {
	// Look up the username
	struct passwd *const user = getpwnam(name);
	if (user != NULL) {
		return user->pw_uid;
	}


	// Are we on Linux
	char cargv0l[] = "/bin/sh";
	if ((access(cargv0l, X_OK) == 0) && (access("/tmp", W_OK) == 0)) {
		return getUid(name, cargv0l, "/tmp");
	}

	// Are we on android
	char cargv0a[] = "/system/bin/sh";
	if ((access(cargv0a, X_OK) == 0) && (access("/data", W_OK) == 0)) {
		return getUid(name, cargv0a, "/data");
	}

	return -1;
}
Exemplo n.º 14
0
ERR_Code
aCatalogue::New( bool child )
{
	qulonglong group = getGroup(), parent = getUid();
	ERR_Code err = aObject::New();
	if ( err ) return err;
	aSQLTable * t = table();
	t->setSysValue( "idg", group );
	if ( child ) t->setSysValue( "ido", parent );
	t->primeUpdate();
	t->update();
	if ( group ) groupSelect();
	setSelected(true);
	return err_noerror;
}
Exemplo n.º 15
0
  void setUp()
  {
    TestBase::setUp();

    this->stackInstance->setSecurityCredentials(cred1);

    ctx = this->stackInstance->getSecurityContext();

    std::stringstream ss;
    ss << "A7" << getUid(ctx) << ",C0" << getGid(ctx) << ",E70,F50";
    ACL = dmlite::Acl(ss.str());

    this->catalog->makeDir(FOLDER, 0700);
    this->catalog->setAcl(FOLDER, ACL);
  }
Exemplo n.º 16
0
  void testChown()
  {
    this->catalog->setOwner(FOLDER, -1, getGid(ctx, 1));
    dmlite::ExtendedStat stat = this->catalog->extendedStat(FOLDER);

    CPPUNIT_ASSERT_EQUAL((size_t)4, stat.acl.size());

    CPPUNIT_ASSERT_EQUAL(dmlite::AclEntry::kUserObj, stat.acl[0].type);
    CPPUNIT_ASSERT_EQUAL(getUid(ctx),  stat.acl[0].id);
    CPPUNIT_ASSERT_EQUAL(7u, (unsigned)stat.acl[0].perm);

    CPPUNIT_ASSERT_EQUAL(dmlite::AclEntry::kGroupObj, stat.acl[1].type);
    CPPUNIT_ASSERT_EQUAL(getGid(ctx, 1), stat.acl[1].id);
    CPPUNIT_ASSERT_EQUAL(0u, (unsigned)stat.acl[1].perm);
  }
Exemplo n.º 17
0
  void testInherit()
  {
    // Set default ACL's
    dmlite::Acl parentAcl("A70,C00,E70,F50,a60,c50,f00");
    this->catalog->setAcl(FOLDER, parentAcl);
    dmlite::ExtendedStat parent = this->catalog->extendedStat(FOLDER);
    
    // Make dir
    this->catalog->makeDir(NESTED, 0700);
    dmlite::ExtendedStat stat = this->catalog->extendedStat(NESTED);

    // Assert resulting ACL
    std::stringstream aclStr;
    aclStr << "A6" << getUid(ctx) << ",C0" << getGid(ctx) << ",F00,a60,c50,f00";
    CPPUNIT_ASSERT_EQUAL(dmlite::Acl(aclStr.str()), stat.acl);
  }
Exemplo n.º 18
0
    void FASCN200BitFormat::serialize(boost::property_tree::ptree& parentNode)
    {
        boost::property_tree::ptree node;

        node.put("<xmlattr>.type", getType());
        node.put("AgencyCode", getAgencyCode());
        node.put("SystemCode", getSystemCode());
        node.put("SerieCode", d_formatLinear.d_serieCode);
        node.put("CredentialCode", d_formatLinear.d_credentialCode);
        node.put("PersonIdentifier", getPersonIdentifier());
        node.put("OrganizationalCategory", getOrganizationalCategory());
        node.put("OrganizationalIdentifier", getOrganizationalIdentifier());
        node.put("POACategory", getPOACategory());
        node.put("Uid", getUid());

        parentNode.add_child(getDefaultXmlNodeName(), node);
    }
Exemplo n.º 19
0
/*!
 *\~english
 *	Find document by id.
 *\~russian
 *	Ищет документ в системном журнале по его идентификатору.
 *\~
 *\see findDoc( const QString & number, int type ) selectDocument( Q_ULLONG idd )
 *\param idd - \~english document number \~russian номер документа \~
 *\return 	\~english document id or 0 if document not found
 *		\~russian id документа или 0, если документ не найден.\~
 */
qulonglong
aDocJournal::findDocument( qulonglong idd )
{
	aSQLTable * t = table();
	if ( !t ) return 0;
	if (t->exec(QString("SELECT * FROM a_journ WHERE idd=%1").arg(idd)) )
		if ( t->first() )
		{
			setSelected( true );
			return getUid();
		}
		else
		{
			aLog::print(aLog::Debug, tr("aDocJournal document not found with idd=%1").arg(idd));
		}
	return 0;
}
Exemplo n.º 20
0
  void testChmod()
  {
    this->catalog->setMode(FOLDER, 0555);
    dmlite::ExtendedStat stat = this->catalog->extendedStat(FOLDER);

    CPPUNIT_ASSERT_EQUAL((size_t)4, stat.acl.size());

    CPPUNIT_ASSERT_EQUAL(dmlite::AclEntry::kUserObj, stat.acl[0].type);
    CPPUNIT_ASSERT_EQUAL(getUid(ctx),  stat.acl[0].id);
    CPPUNIT_ASSERT_EQUAL(5u, (unsigned)stat.acl[0].perm);

    CPPUNIT_ASSERT_EQUAL(dmlite::AclEntry::kGroupObj, stat.acl[1].type);
    CPPUNIT_ASSERT_EQUAL(getGid(ctx, 0), stat.acl[1].id);
    CPPUNIT_ASSERT_EQUAL(5u,   (unsigned)stat.acl[1].perm);

    CPPUNIT_ASSERT_EQUAL(dmlite::AclEntry::kOther, stat.acl[3].type);
    CPPUNIT_ASSERT_EQUAL(5u, (unsigned)stat.acl[3].perm);
  }
Exemplo n.º 21
0
void
aCatGroup::setLevel( qulonglong newLevel )
{
	if ( !selected() ) return;
	aSQLTable * t = table();
	qulonglong level = t->sysValue("level").toULongLong();
	if ( level == newLevel ) return;
	aCatGroup tgr( obj, db );
	QString query;
	query = QString("UPDATE %1 SET level=%2 WHERE id=%3")\
					.arg(t->tableName).arg(newLevel).arg(getUid());
//	printf("%s\n",(const char*) query);
	db->db()->exec(query);
	if ( !tgr.SelectChild( this ));
		do
		{
			tgr.setLevel( newLevel + 1 );
		}
		while ( tgr.Next() );
}
Exemplo n.º 22
0
void InternalLink::resumeUploadMCF(DesuraId id, LinkArgs args)
{
	std::string key = args.getArgValue("key");
	std::string uid = args.getArgValue("uid");

	auto pForm = findForm<UploadMCFForm>([key, uid](UploadMCFForm* pForm){
		return (!key.empty() && pForm->getKey() == key) || (!uid.empty() && pForm->getUid() == uid);
	}, m_vSubForms);

	if (pForm)
	{
		pForm->Raise();
		return;
	}

	gcRefPtr<UserCore::Item::ItemInfoI> item = GetUserCore()->getItemManager()->findItemInfo( id );
	if (!item && !GetUserCore()->isAdmin())
	{
		//cant upload show prompt
		gcMessageBox(g_pMainApp->getMainWindow(), Managers::GetString(L"#MF_NONDEV_ERROR"), Managers::GetString(L"#MF_PERMISSION_ERRTITLE"));
		return;
	}

	//create new create from
	UploadMCFForm* form = new UploadMCFForm(m_pParent);

	if (!key.empty())
		form->setInfo_key(id, key.c_str());
	else if (!uid.empty())
		form->setInfo_uid(id, uid.c_str());
	else
		form->setInfo(id);

	form->Show(true);
	form->Raise();
	form->run();

	m_vSubForms.push_back(form);
}
Exemplo n.º 23
0
ArrayElement* ToDo::clone() {
    ToDo* ret = new ToDo();
    if (getClass()) ret->setClass(*classEvent);
    if (getCompleted()) ret->setCompleted(*completed);
    if (getCreated()) ret->setCreated(*created);
    if (getDescription()) ret->setDescription(*description);
    if (getDtStamp()) ret->setDtStamp(*dtStamp);
    if (getDtStart()) ret->setDtStart(*dtStart);
    if (getGeo()) ret->setGeo(*geo);
    if (getLastMod()) ret->setLastMod(*lastMod);
    if (getLocation()) ret->setLocation(*location);
    if (getOrganizer()) ret->setOrganizer(*organizer);
    if (getPercent()) ret->setPercent(*percent);
    if (getPriority()) ret->setPriority(*priority);
    if (getRecurID()) ret->setRecurID(*recurID);
    if (getSequence()) ret->setSequence(*seq);
    if (getStatus()) ret->setStatus(*status);
    if (getSummary()) ret->setSummary(*summary);
    if (getUid()) ret->setUid(*uid);
    if (getUrl()) ret->setUrl(*url);
    if (getDue()) ret->setDue(*due);
    if (getDuration()) ret->setDuration(*duration);
    if (getAttach()) ret->setAttach(*attach);
    if (getAttendee()) ret->setAttendee(*attendee);
    if (getCategories()) ret->setCategories(*categories);
    if (getComment()) ret->setComment(*comment);
    if (getContact()) ret->setContact(*contact);
    if (getExDate()) ret->setExDate(*exDate);
    if (getExRule()) ret->setExRule(*exRule);
    if (getRStatus()) ret->setRStatus(*rStatus);
    if (getRelated()) ret->setRelated(*related);
    if (getResources()) ret->setResources(*resources);
    if (getRDate()) ret->setRDate(*rDate);
    if (getRRule()) ret->setRRule(*rRule);
    if (getXProp()) ret->setXProp(*xProp);

    return ret;
}
Exemplo n.º 24
0
    void FASCN200BitFormat::getLinearData(void* data, size_t dataLengthBytes) const
    {
        unsigned int pos = 0;

        convertField(data, dataLengthBytes, &pos, FASCN_SS, 4);
        convertField(data, dataLengthBytes, &pos, getAgencyCode(), 16);
        convertField(data, dataLengthBytes, &pos, FASCN_FS, 4);
        convertField(data, dataLengthBytes, &pos, getSystemCode(), 16);
        convertField(data, dataLengthBytes, &pos, FASCN_FS, 4);
        convertField(data, dataLengthBytes, &pos, getUid(), 24);
        convertField(data, dataLengthBytes, &pos, FASCN_FS, 4);
        convertField(data, dataLengthBytes, &pos, d_formatLinear.d_serieCode, 4);
        convertField(data, dataLengthBytes, &pos, FASCN_FS, 4);
        convertField(data, dataLengthBytes, &pos, d_formatLinear.d_credentialCode, 4);
        convertField(data, dataLengthBytes, &pos, FASCN_FS, 4);
        convertField(data, dataLengthBytes, &pos, getPersonIdentifier(), 40);
        convertField(data, dataLengthBytes, &pos, getOrganizationalCategory(), 4);
        convertField(data, dataLengthBytes, &pos, getOrganizationalIdentifier(), 16);
        convertField(data, dataLengthBytes, &pos, getPOACategory(), 4);
        convertField(data, dataLengthBytes, &pos, FASCN_ES, 4);
        unsigned char lrc = calculateLRC(data, pos);
        convertField(data, dataLengthBytes, &pos, lrc, 4);
    }
Exemplo n.º 25
0
af::TaskExec * JobAf::genTask( RenderAf *render, int block, int task, std::list<int> * blocksIds, MonitorContainer * monitoring)
{
	// Job can set offline itself on some error in this recursive function
	if( m_state & AFJOB::STATE_OFFLINE_MASK )
		return NULL;

	if( m_blocks[block]->m_tasks[task]->m_solved )
		return NULL;
	m_blocks[block]->m_tasks[task]->m_solved = true;

	//
	// Recursive dependence check, only if needed
	if( blocksIds )
	{
		std::list<int>::const_iterator bIt = blocksIds->begin();
		std::list<int>::const_iterator end = blocksIds->end();
		while( bIt != end)
		{
			if( block == *bIt)
			{
				appendLog( std::string("Block[") + m_blocks_data[block]->getName() + "] appears second time while job generating a task.\nJob has a recursive blocks tasks dependence.");
				m_state = m_state | AFJOB::STATE_OFFLINE_MASK;
				if( monitoring ) monitoring->addJobEvent( af::Monitor::EVT_jobs_change, getId(), getUid());
				return NULL;
			}
			bIt++;
		}
		blocksIds->push_back( block);
	}
	//
	
	if( false == ( m_blocks_data[block]->getState() & AFJOB::STATE_READY_MASK ) ) return NULL;
	if( task >= m_blocks_data[block]->getTasksNum() )
	{
		AF_ERR << "block[" << block << "] '" << m_blocks_data[block]->getName()
		       << "' : " << task << " >= number of tasks = " << m_blocks_data[block]->getTasksNum();
		return NULL;
	}
	if( false == ( m_progress->tp[block][task]->state & AFJOB::STATE_READY_MASK) ) return NULL;
	
	if( false == m_blocks[block]->canRunOn( render)) return NULL;
	
	if( m_blocks[block]->m_tasks[task]->avoidHostsCheck( render->getName())) return NULL;
	
	//
	// Check block tasks dependence: Get tasks depend mask, if any exists:
	if( m_blocks_data[block]->hasTasksDependMask() )
	{
		bool dependsnotdone = false;
		std::list<int> blocksIdsBranch;
		if( blocksIds)
		{
			blocksIdsBranch = *blocksIds;
			blocksIds = &blocksIdsBranch;
		}
		
		for( int b = 0; b < m_blocks_num; b++)
		{
			if( b == block ) continue;
			
			//         if( blocksdata[block]->checkTasksDependMask( blocksdata[b]->getName()) == false ) continue;
			if( m_blocks[block]->tasksDependsOn( b) == false )
				continue;
			
			long long firstdependframe, lastdependframe;
			int firstdependtask, lastdependtask;
			m_blocks_data[block]->genNumbers( firstdependframe, lastdependframe, task);
			if( m_blocks_data[block]->isNumeric() && m_blocks_data[b]->isNotNumeric())
			{
				firstdependframe -= m_blocks_data[block]->getFrameFirst();
				lastdependframe  -= m_blocks_data[block]->getFrameFirst();
			}
			else if( m_blocks_data[block]->isNotNumeric() && m_blocks_data[b]->isNumeric())
			{
				firstdependframe += m_blocks_data[b]->getFrameFirst();
				lastdependframe  += m_blocks_data[b]->getFrameFirst();
			}
			if( m_blocks_data[b]->getFramePerTask() < 0 ) lastdependframe++; // For several frames in task
			
			bool inValidRange;
			firstdependtask = m_blocks_data[b]->calcTaskNumber( firstdependframe, inValidRange);
			lastdependtask  = m_blocks_data[b]->calcTaskNumber(  lastdependframe, inValidRange);
			if( inValidRange )
				if( m_blocks_data[b]->getFramePerTask() < 0 )
					lastdependtask--;
			
			for( int t = firstdependtask; t <= lastdependtask; t++)
			{
				// Task is done, so depend is satisfied:
				if( m_progress->tp[b][t]->state & AFJOB::STATE_DONE_MASK )
					continue;
				
				// Check subframe depend, is depend task is running:
				if( m_blocks_data[b]->isDependSubTask() && ( m_progress->tp[b][t]->state & AFJOB::STATE_RUNNING_MASK ))
				{
					long long f_start_dep, f_end_dep;
					m_blocks_data[b]->genNumbers( f_start_dep, f_end_dep, t);
					long long frame_run = f_start_dep + m_progress->tp[b][t]->frame;
					if( frame_run > lastdependframe )
						continue;
				}
				
				// Run recurtsion:
				af::TaskExec * task_ptr = genTask( render, b, t, (t == firstdependtask ? blocksIds : NULL), monitoring);
				if( m_state & AFJOB::STATE_OFFLINE_MASK )
				{
					if( task_ptr ) delete task_ptr;
					return NULL;
				}
				
				if( task_ptr ) return task_ptr;
				if( dependsnotdone == false ) dependsnotdone = true;
			}
		}
		if( dependsnotdone ) return NULL;
	}
	
	af::TaskExec * task_exec = m_blocks_data[block]->genTask( task);
	
	task_exec->m_custom_data_job = m_custom_data;
	task_exec->m_custom_data_render = render->getCustomData();
	task_exec->m_custom_data_user = m_user->getCustomData();
	
	return task_exec;
}
Exemplo n.º 26
0
    void Wiegand37Format::getLinearDataWithoutParity(void* data, size_t dataLengthBytes) const
    {
        unsigned int pos = 1;

        convertField(data, dataLengthBytes, &pos, getUid(), 35);
    }
Exemplo n.º 27
0
/*!
 *	\ru
 *	Возвращает уникальный идентификатор объекта из базы данных.
 *	В качестве объекта например может выступать "Приходная накладная" от такого-то числа за таким то номером.
 *	Каждый вновь созданный в системе документ или элемент справочника, включая группы справочника имеет свой уникальный
 *	неповторяющийся идентификатор. Если какое-либо поле, какого-либо объекта имеет тип Объект (например Document.Накладная),
 *	то в качестве значения ему нужно задавать уникальный идентификатор объекта, возвращаемый функцией Uid().
 *	Не существует возможности изменить существующий идентификатор какого-либо объекта. Созданием и управлением
 *	идентификаторами объектов занимается система.
 *	\return строка со значением уникального идентификатора.
 *	\_ru
 */
QString
aObject::Uid()
{
	return QString::number(getUid());
}
Exemplo n.º 28
0
void JobAf::v_action( Action & i_action)
{
	// If action has blocks ids array - action to for blocks
	if( i_action.data->HasMember("block_ids") || i_action.data->HasMember("block_mask"))
	{
		std::vector<int32_t> block_ids;

		// Try to get block ids from array:
		const JSON & j_block_ids = (*i_action.data)["block_ids"];
		if( j_block_ids.IsArray())
			af::jr_int32vec("block_ids", block_ids, *i_action.data);

		// -1 id is specified = all blocks
		if(( block_ids.size() == 1 ) && ( block_ids[0] == -1 ))
		{
			block_ids.clear();
			for( int b = 0; b < m_blocks_num; b++)
				block_ids.push_back( m_blocks[b]->m_data->getBlockNum());
		}

		// Try to fill ids from mask:
		const JSON & j_block_mask = (*i_action.data)["block_mask"];
		if( j_block_mask.IsString())
		{
			std::string mask;
			af::jr_string("block_mask", mask, *i_action.data);
			af::RegExp re;
			std::string re_err;
			if( false == re.setPattern( mask, &re_err))
			{
				appendLog("Invalid block mask = " + mask + " from " + i_action.author);
				return;
			}
			for( int b = 0; b < m_blocks_num; b++)
				if( re.match( m_blocks[b]->m_data->getName()))
					block_ids.push_back( m_blocks[b]->m_data->getBlockNum());
		}

		if( block_ids.empty())
		{
			appendLog("\"block_ids\" array does not contain any integers or invalid \"block_mask\" from " + i_action.author);
			return;
		}

		bool job_progress_changed = false;
		for( int b = 0; b < block_ids.size(); b++)
		{
			if(( block_ids[b] >= getBlocksNum()) || ( block_ids[b] < 0 ))
			{
				appendLog("Invalid block number = " + af::itos(block_ids[b]) + " " + i_action.author);
				continue;
			}
			if( m_blocks[block_ids[b]]->action( i_action))
				job_progress_changed = true;
		}

		if( job_progress_changed )
			i_action.monitors->addJobEvent( af::Monitor::EVT_jobs_change, getId(), getUid());

		if( i_action.log.size() )
			store();

		return;
	}

	const JSON & operation = (*i_action.data)["operation"];
	if( operation.IsObject())
	{
		std::string type;
		af::jr_string("type", type, operation);
		if( type == "delete")
		{
			if( m_id == AFJOB::SYSJOB_ID )
			{
				appendLog("System job can't be deleted by " + i_action.author);
				return;
			}
			appendLog("Deleted by " + i_action.author);
			m_user->appendLog( "Job \"" + m_name + "\" deleted by " + i_action.author);
			deleteNode( i_action.renders, i_action.monitors);
			i_action.monitors->addJobEvent( af::Monitor::EVT_jobs_del, getId(), getUid());
			return;
		}
		else if( type == "start")
		{
			m_state = m_state & (~AFJOB::STATE_OFFLINE_MASK);
		}
		else if( type == "pause")
		{
			m_state = m_state | AFJOB::STATE_OFFLINE_MASK;
		}
		else if( type == "stop")
		{
		   restartAllTasks("Job stopped by " + i_action.author, i_action.renders, i_action.monitors, AFJOB::STATE_RUNNING_MASK);
		   m_state = m_state | AFJOB::STATE_OFFLINE_MASK;
		}
		else if( type == "restart_running")
		{
			restartAllTasks("Job restarted running by " + i_action.author,  i_action.renders, i_action.monitors, AFJOB::STATE_RUNNING_MASK);
		}
		else if( type == "restart_skipped")
		{
			restartAllTasks("Job restarted skipped by " + i_action.author,  i_action.renders, i_action.monitors, AFJOB::STATE_SKIPPED_MASK);
		}
		else if( type == "restart_done")
		{
			restartAllTasks("Job restarted done by " + i_action.author,  i_action.renders, i_action.monitors, AFJOB::STATE_DONE_MASK);
		}
		else if( type == "reset_error_hosts")
		{
			for( int b = 0; b < m_blocks_num; b++)
				m_blocks[b]->action( i_action);
		}
		else if( type == "restart")
		{
			//printf("Msg::TJobRestart:\n");
			restartAllTasks("Job restarted by " + i_action.author,  i_action.renders, i_action.monitors);
			//printf("Msg::TJobRestart: tasks restarted.\n");
			checkDepends();
			m_time_started = 0;
		}
		else if( type == "restart_errors")
		{
			restartAllTasks("Job errors restarted by " + i_action.author,  i_action.renders, i_action.monitors, AFJOB::STATE_ERROR_MASK);
		}
		else if( type == "restart_pause")
		{
			restartAllTasks("Job restarted ( and paused ) by " + i_action.author,  i_action.renders, i_action.monitors);
			checkDepends();
			m_state = m_state | AFJOB::STATE_OFFLINE_MASK;
			m_time_started = 0;
		}
		else
		{
			appendLog("Unknown operation \"" + type + "\" by " + i_action.author);
			return;
		}
		appendLog("Operation \"" + type + "\" by " + i_action.author);
		i_action.monitors->addJobEvent( af::Monitor::EVT_jobs_change, getId(), getUid());
		store();
		return;
	}

	// Store user name before parameters read, to check whether it changed
	const std::string user_name = m_user_name;

	const JSON & params = (*i_action.data)["params"];
	if( params.IsObject())
		jsonRead( params, &i_action.log);

	if( m_user_name != user_name )
	{
		// User name was changed
		UserAf * user = i_action.users->getUser( m_user_name);
		if( user == NULL )
		{
			return;
		}
		
		i_action.monitors->addEvent(    af::Monitor::EVT_users_change, m_user->getId());
		i_action.monitors->addJobEvent( af::Monitor::EVT_jobs_del, getId(), m_user->getId());
		
		m_user->removeJob( this);
		user->addJob( this);
		
		i_action.monitors->addEvent(    af::Monitor::EVT_users_change, m_user->getId());
		i_action.monitors->addJobEvent( af::Monitor::EVT_jobs_add, getId(), m_user->getId());
		
		store();

		return;
	}

	if( i_action.log.size() )
	{
		store();
		i_action.monitors->addJobEvent( af::Monitor::EVT_jobs_change, getId(), getUid());
	}
}
Exemplo n.º 29
0
/*!
  Start the server.
 */
void Server::start (string &mainConf, string &mimeConf, string &vhostConf,
                    string &externPath, MainConfiguration* (*genMainConf)
                    (Server *server, const char *arg))

{
  int err = 0;

  this->genMainConf = genMainConf;

  displayBoot ();

  try
  {
    log (MYSERVER_LOG_MSG_INFO, _("Initializing server configuration..."));

    if (loadLibraries ())
      {
        log (MYSERVER_LOG_MSG_INFO, _("The server could not be started"));
        return;
      }

    if (!resetConfigurationPaths (mainConf, mimeConf, vhostConf, externPath))
      {
        log (MYSERVER_LOG_MSG_INFO, _("The server could not be started"));
        return;
      }

    err = initialize ();
    if (err)
      {
        log (MYSERVER_LOG_MSG_INFO, _("The server could not be started"));
        return;
      }

    log (MYSERVER_LOG_MSG_INFO, _("Loading server configuration from %s..."),
         mainConf.c_str ());

    if (postLoad ())
      {
        log (MYSERVER_LOG_MSG_INFO, _("The server could not be started"));
        return;
      }

    setProcessPermissions ();

    if (getGid ()[0])
      log (MYSERVER_LOG_MSG_INFO, _("Using gid: %s"), gid.c_str ());

    if (getUid ()[0])
      log (MYSERVER_LOG_MSG_INFO, _("Using uid: %s"), uid.c_str ());

    log (MYSERVER_LOG_MSG_INFO, _("Server is ready!"));

    if (logLocation.find ("console://") != string::npos)
      log (MYSERVER_LOG_MSG_INFO, _("Press Ctrl-C to terminate its execution"));

    serverReady = true;

    /* Finally we can give control to the main loop.  */
    mainLoop ();

  }
  catch (bad_alloc &ba)
    {
      log (MYSERVER_LOG_MSG_ERROR, _("Bad alloc: %s"), ba.what ());
    }
  catch (exception &e)
    {
      log (MYSERVER_LOG_MSG_ERROR, _("Error: %s"), e.what ());
    };

  this->terminate ();
  finalCleanup ();

#ifdef WIN32
  WSACleanup ();
#endif

  log (MYSERVER_LOG_MSG_INFO, _("Server terminated"));
}
Exemplo n.º 30
0
void JobAf::v_refresh( time_t currentTime, AfContainer * pointer, MonitorContainer * monitoring)
{
	RenderContainer * renders = (RenderContainer*)pointer;
	
	if( m_deletion )
	{
		for( int b = 0; b < m_blocks_num; b++)
			m_blocks[b]->v_refresh( currentTime, renders, monitoring);
		if( getRunningTasksNumber() == 0 ) deleteNode( NULL, monitoring);
	}
	if( isLocked() ) return;
	
	// for database and monitoring
	uint32_t old_state = m_state;
	uint32_t jobchanged = 0;
	
	// check job dependences
	checkDepends();
	
	//check wait time
	{
		bool wasWaiting = m_state & AFJOB::STATE_WAITTIME_MASK;
		if( m_time_wait > currentTime ) m_state = m_state | AFJOB::STATE_WAITTIME_MASK;
		else m_state = m_state & (~AFJOB::STATE_WAITTIME_MASK);
		bool nowWaining = m_state & AFJOB::STATE_WAITTIME_MASK;
		if( wasWaiting != nowWaining) jobchanged = af::Monitor::EVT_jobs_change;
	}

	//
	// Update blocks (blocks will uptate its tasks):
	for( int b = 0; b < m_blocks_num; b++)
		if( m_blocks[b]->v_refresh( currentTime, renders, monitoring))
			jobchanged = af::Monitor::EVT_jobs_change;
	// Check block depends after all block refreshed,
	// as states can be changed during refresh.
	// ( some block can be DONE after refresh )
	for( int b = 0; b < m_blocks_num; b++)
		if( m_blocks[b]->checkDepends( monitoring))
			jobchanged = af::Monitor::EVT_jobs_change;
	
	//
	// job state calculation
	m_state = m_state |   AFJOB::STATE_DONE_MASK;
	m_state = m_state & (~AFJOB::STATE_RUNNING_MASK);
	m_state = m_state & (~AFJOB::STATE_WARNING_MASK);
	m_state = m_state & (~AFJOB::STATE_ERROR_MASK);
	m_state = m_state & (~AFJOB::STATE_READY_MASK);
	m_state = m_state & (~AFJOB::STATE_SKIPPED_MASK);
	
	for( int b = 0; b < m_blocks_num; b++)
	{
		uint32_t state_block = m_blocks_data[b]->getState();
		m_state  = m_state | (state_block &   AFJOB::STATE_RUNNING_MASK   );
		m_state  = m_state | (state_block &   AFJOB::STATE_WARNING_MASK   );
		m_state  = m_state | (state_block &   AFJOB::STATE_ERROR_MASK     );
		m_state  = m_state | (state_block &   AFJOB::STATE_READY_MASK     );
		m_state  = m_state | (state_block &   AFJOB::STATE_SKIPPED_MASK   );
		m_state  = m_state & (state_block | (~AFJOB::STATE_DONE_MASK)     );
	}
	
	if( m_state & AFJOB::STATE_WAITDEP_MASK  ) m_state = m_state & (~AFJOB::STATE_READY_MASK);
	if( m_state & AFJOB::STATE_WAITTIME_MASK ) m_state = m_state & (~AFJOB::STATE_READY_MASK);
	
	if( m_state & AFJOB::STATE_DONE_MASK )
	{
		/// if job was not done, but now is done, we set job time_done
		if(( old_state & AFJOB::STATE_DONE_MASK) == false )
		{
			m_time_done = currentTime;
			if( m_time_started == 0 )
			{
				m_time_started = m_time_done;
				appendLog("Started.");
			}
			appendLog("Done.");
			jobchanged = af::Monitor::EVT_jobs_change;
			store();
		}
	}
	else
		m_time_done = 0;
	
	// Reset started time if job was started, but now no tasks are running or done
	if(( m_time_started != 0 ) &&
	   ( false == (m_state & AFJOB::STATE_RUNNING_MASK)     ) &&
	   ( false == (m_state & AFJOB::STATE_DONE_MASK)        )  )
	{
		// Search if the job has at least one done task
		bool has_done_tasks = false;
		for( int b = 0; b < m_blocks_num; b++ )
		{
			if( m_blocks_data[b]->getProgressTasksDone() > 0 )
			{
				has_done_tasks = true;
				break;
			}
		}
		// If the job has done task(s) we not reset started time in any case
		if( false == has_done_tasks ) m_time_started = currentTime;
	}
	
	
	if( m_state != old_state )
	{
		jobchanged = af::Monitor::EVT_jobs_change;
		
		// If it is no job monitoring, job just came to server and it is first it refresh,
		// so no change event and database storing needed
		if( monitoring )
			store();
		
		// Proccess events:
		if( m_id != AFJOB::SYSJOB_ID ) // skip system job
			if( m_custom_data.size() || m_user->getCustomData().size())
			{
				std::vector<std::string> events;
				
				// Collect events names:
				if(( m_state & AFJOB::STATE_ERROR_MASK ) && ( false == ( old_state & AFJOB::STATE_ERROR_MASK )))
					events.push_back("JOB_ERROR");
				
				if(( m_state & AFJOB::STATE_DONE_MASK ) && ( false == ( old_state & AFJOB::STATE_DONE_MASK )))
					events.push_back("JOB_DONE");
				
				emitEvents(events);
			}
	}
	
	if( m_thumb_changed || m_report_changed )
	{
		jobchanged = af::Monitor::EVT_jobs_change;
		m_thumb_changed = false;
		m_report_changed = false;
	}
	
	// Check age and delete if life finished:
	if( m_id != AFJOB::SYSJOB_ID ) // skip system job
	{
		int result_lifetime = m_time_life;
		if( result_lifetime < 0 ) result_lifetime = m_user->getJobsLifeTime(); // get default value from user
		if((result_lifetime > 0) && ((currentTime - m_time_creation) > result_lifetime))
		{
			appendLog( std::string("Life %1 finished.") + af::time2strHMS( result_lifetime, true));
			m_user->appendLog( std::string("Job \"") + m_name + "\" life " + af::time2strHMS( result_lifetime, true) + " finished.");
			deleteNode( renders, monitoring);
			jobchanged = af::Monitor::EVT_jobs_del, getId(), getUid();
		}
	}
	
	if(( monitoring ) &&  ( jobchanged )) monitoring->addJobEvent( jobchanged, getId(), getUid());
	
	// Update solving parameters:
	v_calcNeed();
}