public function addSegmentOnCache(array $segmentData) { $segmentName = $segmentData['name']; $segmentCache = new SegmentCache(); if ($segmentCache->getChangeNumber($segmentName) != $segmentData['till']) { $segmentCache->addToSegment($segmentName, $segmentData['added']); $segmentCache->removeFromSegment($segmentName, $segmentData['removed']); $segmentCache->setChangeNumber($segmentName, $segmentData['till']); } return true; }
/** * @depends testSplitCacheInterface */ public function testSegmentCacheInterface() { $segmentChanges = file_get_contents(__DIR__ . "/../../files/segmentEmployeesChanges.json"); $this->assertJson($segmentChanges); $segmentData = json_decode($segmentChanges, true); $segmentName = $segmentData['name']; $segmentCache = new SegmentCache(); $this->assertArrayHasKey('fake_user_id_4', $segmentCache->addToSegment($segmentName, $segmentData['added'])); $removedResult = $segmentCache->removeFromSegment($segmentName, $segmentData['removed']); $this->assertArrayHasKey('fake_user_id_6', $removedResult); $this->assertTrue($segmentCache->setChangeNumber($segmentName, $segmentData['till'])); $this->assertEquals($segmentData['till'], $segmentCache->getChangeNumber($segmentName)); }
private function addSegmentsInCache() { $segmentCache = new SegmentCache(); //Addinng Employees Segment. $segmentEmployeesChanges = file_get_contents(__DIR__ . "/files/segmentEmployeesChanges.json"); $this->assertJson($segmentEmployeesChanges); $segmentData = json_decode($segmentEmployeesChanges, true); $this->assertArrayHasKey('employee_1', $segmentCache->addToSegment($segmentData['name'], $segmentData['added'])); //Adding Human Beigns Segment. $segmentHumanBeignsChanges = file_get_contents(__DIR__ . "/files/segmentHumanBeignsChanges.json"); $this->assertJson($segmentHumanBeignsChanges); $segmentData = json_decode($segmentHumanBeignsChanges, true); $this->assertArrayHasKey('user1', $segmentCache->addToSegment($segmentData['name'], $segmentData['added'])); }
/** * @param $key * @return bool */ protected function evalKey($key) { $segmentName = $this->userDefinedSegmentMatcherData; $segmentEvaluation = $this->isInCachedSegment($segmentName, $key); if ($segmentEvaluation !== null && is_bool($segmentEvaluation)) { return $segmentEvaluation; } else { $segmentCache = new SegmentCache(); if ($segmentCache->isInSegment($segmentName, $key)) { $this->cacheSegmentEvaluation($segmentName, $key, true); return true; } $this->cacheSegmentEvaluation($segmentName, $key, false); return false; } }
public function execute() { $registeredSegments = $this->cache()->getItemsOnList(SegmentCache::getCacheKeyForRegisterSegments()); $log = $this->logger(); if (is_array($registeredSegments) && !empty($registeredSegments)) { foreach ($registeredSegments as $segmentName) { $log->info(">>> Fetching data from segment: {$segmentName}"); $timeStart = Latency::startMeasuringLatency(); while (true) { $timeStartPart = Latency::startMeasuringLatency(); if (!$this->getSplitClient()->updateSegmentChanges($segmentName)) { $timeItTook = Latency::calculateLatency($timeStartPart); $log->debug("Fetching segment last part ({$segmentName}) took {$timeItTook} microseconds"); $greedyTime = Latency::calculateLatency($timeStart); $log->info("Finished fetching whole segment {$segmentName}, took {$greedyTime} microseconds"); break; } $timeItTook = Latency::calculateLatency($timeStartPart); $log->debug("Fetching segment part ({$segmentName}) took {$timeItTook} microseconds"); //Sleep 1/2 second usleep(500000); } } // Setting Segments ready mark $dateTimeUTC = new \DateTime("now", new \DateTimeZone("UTC")); $bur = new BlockUntilReadyCache(); $bur->setReadySegments($dateTimeUTC->getTimestamp()); } }
public function execute() { //Fetching the Splits changes $splitChanges = $this->getSplitClient()->getSplitChanges(); $splits = isset($splitChanges['splits']) ? $splitChanges['splits'] : array(); $splitCache = new SplitCache(); if (!empty($splits)) { foreach ($splits as $split) { if (!is_array($split) || !isset($split['name']) || !isset($split['conditions']) || !isset($split['status'])) { continue; //continue with next Split } $this->logger()->debug(print_r($split, true)); $splitName = $split['name']; $splitStatus = $split['status']; $splitConditions = $split['conditions']; foreach ($splitConditions as $condition) { foreach ($condition['matcherGroup']['matchers'] as $matcher) { if ($matcher['matcherType'] == "IN_SEGMENT") { //Register segment to retrieve Segment Data. SegmentCache::registerSegment($matcher['userDefinedSegmentMatcherData']['segmentName']); } } } if ($splitStatus == 'ACTIVE') { //Update Cache $splitCache->addSplit($splitName, json_encode($split)); } else { //Delete item from cache $splitCache->removeSplit($splitName); } } } if (isset($splitChanges['till'])) { $till = $splitChanges['till']; $this->logger()->debug("Splits Till value: {$till}"); //Updating next since (till) value. if ($till != $splitCache->getChangeNumber()) { $splitCache->setChangeNumber($till); } } }