public function translate($text, $sourceLanguage, $targetLanguage) { $originals = new RecordCollection(new Original(), ['id']); $original = $originals->loadOneWhere("%C = %s", "lookup", $text); if ($original === null || !$original->exists()) { $original = new Original(); $original->lookup = $text; $original->saveChanges(); } $translation = Translation::loadWhere("%C = %d AND %C = %s", "original_id", $original->id(), "language", $targetLanguage); if ($translation !== null && $translation instanceof Translation) { if ($translation->exists()) { $translated = $translation->translated; return $translated; } } if ($this->_fallback === null) { $this->_fallback = $this->_getTranslator(); } $translated = $this->_fallback->translate($text, $sourceLanguage, $targetLanguage); if ($translated !== $text) { $translation = new Translation(); $translation->originalId = $original->id(); $translation->language = $targetLanguage; $translation->translated = $translated; $translation->saveChanges(); } return $translated; }
public function execute() { $this->_logger->setInstanceName($this->instanceName); $this->_pidFile = new PidFile("", $this->instanceName); while (true) { $startedAt = time(); $startedAt -= $startedAt % 60; $collection = new RecordCollection(new Campaign()); if (!$collection->hasMappers()) { Log::warning('No mappers found'); } foreach ($collection as $campaign) { /** @var Campaign $campaign */ if ($campaign->isDue($startedAt)) { try { Defero::pushCampaign($campaign->id(), $startedAt); if (CronParser::isValid($campaign->sendAt)) { // check average sends on scheduled $avgEndDate = (new \DateTime())->setTimestamp($startedAt); $avgStartDate = CronParser::prevRun($campaign->sendAt, $avgEndDate); $avgEndDate->sub($avgStartDate->diff($avgEndDate)); $avgStartDate->setTime($avgStartDate->format('H') - 1, 0, 0); $latestStats = MailStatistic::getCampaignStats($campaign->id(), $avgStartDate, $avgEndDate); $diff = $avgStartDate->diff($avgEndDate); $diffLatest = max(1, intval($diff->format('%i')) + intval($diff->format('%h') * 60) + intval($diff->format('%d') * 3600)); $latestHourly = $latestStats->sent / $diffLatest * 60; if ($campaign->warnMin && $latestHourly < $campaign->warnMin || $campaign->warnMax && $latestHourly > $campaign->warnMax) { Log::warning('Sending outside threshold', ['campaign' => $campaign->id(), 'average' => $latestHourly, 'warnMin' => $campaign->warnMin, 'warnMax' => $campaign->warnMax]); } } } catch (\Exception $e) { Log::error('Campaign ' . $campaign->id() . ': ' . $e->getMessage() . ' (Line: ' . $e->getLine() . ')'); } } else { Log::debug('Campaign ' . $campaign->id() . ' not due'); } } $endTime = time(); $endTime -= $endTime % 60; if ($endTime == $startedAt) { sleep(30); } } }
/** * @return BucketRange */ protected function _claimNextFreeRange() { $range = false; $db = BucketRange::conn(); EventManager::trigger(Events::CLAIM_RANGE_START); // Check for an already-flagged range $coll = new RecordCollection(new BucketRange()); $coll->loadWhere(['processing' => 1, 'hostname' => $this->_hostname, 'instanceName' => $this->_instanceName])->limit(1); if ($coll->count() > 0) { $range = $coll->first(); } else { $res = $db->query(ParseQuery::parse($db, "UPDATE %T SET processing=1, hostname=%s, instanceName=%s " . "WHERE processing=0 AND processed=0 ORDER BY randomKey LIMIT 1", BucketRange::tableName(), $this->_hostname, $this->_instanceName)); if ($res) { $range = BucketRange::loadWhere(['processing' => 1, 'hostname' => $this->_hostname, 'instanceName' => $this->_instanceName]); } } EventManager::trigger(Events::CLAIM_RANGE_END); return $range; }
public function showRangeData() { $col = new RecordCollection(new TokenRange()); $col->whereNeq('rangeData', ''); foreach ($col as $range) { /** @var TokenRange $range */ echo $range->id() . ' : ' . $range->rangeData . "\n"; } }
/** * @return TokenRange */ public function claimNextFreeRange() { EventManager::trigger(Events::CLAIM_RANGE_START); $range = false; $db = TokenRange::conn(); // Check for an already-flagged range $coll = new RecordCollection(new TokenRange()); $coll->loadWhere(['processing' => 1, 'hostname' => $this->_hostname])->limit(1); if ($coll->count() > 0) { $range = $coll->first(); } else { $startKey = $this->_lastStartKey; $res = false; while (true) { $endKey = $startKey + 100; $res = $db->query(ParseQuery::parse($db, "UPDATE %T SET processing=1, hostname=%s " . "WHERE processing=0 AND processed=0 AND " . "randomKey BETWEEN %d AND %d " . "ORDER BY randomKey LIMIT 1", (new TokenRange())->getTableName(), $this->_hostname, $startKey, $endKey)); if ($res && $db->affectedRows() > 0 || $startKey > 10000) { $this->_lastStartKey = $startKey; break; } $startKey += 100; } if ($res) { $range = TokenRange::loadWhere(['processing' => 1, 'hostname' => $this->_hostname]); } } EventManager::trigger(Events::CLAIM_RANGE_END); return $range; }