public static function boot() { parent::boot(); static::creating(function ($workerunit) { // dd($workerunit); // Inherit documentType, domain and format if (empty($workerunit->documentType)) { $j = Job::where('_id', $workerunit->job_id)->first(); $workerunit->documentType = $j->documentType; } // transform answer into annotation vector to prepare for the CrowdTruth metrics $workerunit->annotationVector = $workerunit->createAnnotationVector(); // Activity if not exists if (empty($workerunit->activity_id)) { try { $activity = new Activity(); $activity->label = "Workerunit is saved."; $activity->softwareAgent_id = $workerunit->softwareAgent_id; $activity->save(); $workerunit->activity_id = $activity->_id; Log::debug("Saving workerunit {$workerunit->_id} with activity {$workerunit->activity_id}."); } catch (Exception $e) { if ($activity) { $activity->forceDelete(); } //if($workerunit) $workerunit->forceDelete(); throw new Exception('Error saving activity for workerunit.'); } } }); }
public function fire($job, $data) { // Metrics set_time_limit(600); $workerunit = unserialize($data['workerunit']); $spammer = Job::where('_id', $workerunit->job_id)->whereIn('metrics.spammers.list', [$workerunit->crowdAgent_id])->exists(); $workerunit->spam = $spammer; $workerunit->save(); \Log::debug("Updated Workerunit {$workerunit->_id}."); $job->delete(); }
/** * @param $data = array(unitids) */ public function fire($job, $data) { foreach ($data as $id) { set_time_limit(600); $unit = Entity::id($id)->first(); $batches = count(Batch::whereIn('parents', [$unit->_id])->get()->toArray()); $workerunit = array('count' => 0, 'spam' => 0, 'nonSpam' => 0); $workerlist = $workersspam = $workersnonspam = $joblist = array(); foreach (Workerunit::where('unit_id', $unit->_id)->get() as $a) { $joblist[] = $a->job_id; $workerlist[] = $a->crowdAgent_id; if ($a->spam) { $workerunit['spam']++; $workersspam[] = $a->crowdAgent_id; } else { $workerunit['nonSpam']++; $workersnonspam[] = $a->crowdAgent_id; } } $workerunit['count'] = $workerunit['spam'] + $workerunit['nonSpam']; $workers['count'] = count(array_unique($workerlist)); $workers['spam'] = count(array_unique($workersspam)); $workers['nonSpam'] = count(array_unique($workersnonspam)); $workers['potentialSpam'] = count(array_intersect($workersspam, $workersnonspam)); $platformField = array(); $platformField['cf'] = count(Entity::where('unit_id', $unit->_id)->where('softwareAgent_id', 'cf')->get()->toArray()); $platformField['amt'] = count(Entity::where('unit_id', $unit->_id)->where('softwareAgent_id', 'amt')->get()->toArray()); //filtered $filteredField = array(); $filteredField['job_ids'] = array_flatten(Job::where('metrics.filteredUnits.list', 'all', array($unit['_id']))->get(['_id'])->toArray()); $filteredField['count'] = count($filteredField['job_ids']); $derivatives = Entity::whereIn('parents', array($unit->_id))->lists('_id'); $children["count"] = count($derivatives); $children["list"] = $derivatives; $unit->cache = ["jobs" => 1, "workers" => $workers, "softwareAgent" => $platformField, "workerunits" => $workerunit, "filtered" => $filteredField, "batches" => $batches, "children" => $children]; $avg_clarity = Entity::where('metrics.units.withoutSpam.' . $unit->_id, 'exists', 'true')->avg('metrics.units.withoutSpam.' . $unit->id . '.avg.max_relation_Cos'); if (!isset($avg_clarity)) { $avg_clarity = 0; } $unit->avg_clarity = $avg_clarity; $unit->update(); \Log::debug("Updated unit {$unit->_id}."); } $job->delete(); // the Queue job... }
public function updateStats2() { // take all the jobs for that worker // TODO: change to Job:: if ($crowdAgentJobs = Job::where('metrics.workers.withFilter.' . $this->_id, 'exists', true)->get(['_id'])) { //if there is at least one job with that worker if (count($crowdAgentJobs->toArray()) > 0) { $spam = $nonspam = $totalNoOfWorkerunits = 0; foreach ($this->workerunits as $a) { $totalNoOfWorkerunits++; if ($a->spam) { $spam++; } else { $nonspam++; } $types[] = $a->type; $jobids[] = $a->job_id; $unitids[] = $a->unit_id; } // $this->WorkerunitStats = array('count'=>$total['count'], 'spam'=>$spam, 'nonspam'=>$nonspam); $distinctWorkerunitTypes = array_unique($types); // These actually are the Workerunit types $workerParticipatedIn = count(array_unique($unitids)); dd($workerParticipatedIn); $cache["workerunits"] = ["count" => $totalNoOfWorkerunits, "spam" => $spam, "nonspam" => $nonspam]; // take all distinct batches $distinctBatchIds = Entity::whereIn('_id', array_flatten($crowdAgentJobs->toArray()))->distinct('batch_id')->get(['_id']); /* foreach($distinctBatchIds as $distinctBatchId) { $batchParents = array_flatten(Entity::where('_id', '=', $distinctBatchId[0])->lists('parents')); //print_r($batchParents[0]); $batchParentsType = Entity::where('_id', '=', $batchParents[0])->distinct('documentType')->get(['documentType']); //print_r(array_flatten($batchParentsType->toArray())[0]); if(isset($cache["mediaTypes"]["types"][array_flatten($batchParentsType->toArray())[0]])) { $cache["mediaTypes"]["types"][array_flatten($batchParentsType->toArray())[0]] = $cache["mediaTypes"][array_flatten($batchParentsType->toArray())[0]] + 1; } else { $cache["mediaTypes"]["types"] = []; $cache["mediaTypes"]["types"][array_flatten($batchParentsType->toArray())[0]] = 1; } } $cache["mediaTypes"]["distinct"] = sizeof(array_keys($cache["mediaTypes"]["types"])); */ if (count($distinctWorkerunitTypes) > 0) { $cache["jobTypes"] = ["distinct" => count($distinctWorkerunitTypes), "count" => count(array_unique($jobids)), "types" => []]; foreach ($distinctWorkerunitTypes as $distinctJobType) { $distinctJobTypeCount = Job::whereIn('_id', array_flatten($crowdAgentJobs->toArray()))->type($distinctJobType)->count(); $distinctJobTemplateTypes = Job::whereIn('_id', array_flatten($crowdAgentJobs->toArray()))->type($distinctJobType)->distinct('template')->get()->toArray(); $countJobTemplateTypes = Job::whereIn('_id', array_flatten($crowdAgentJobs->toArray()))->type($distinctJobType)->count(); //$cache["jobTypes"]["types"][$distinctJobType[0]] = []; $cache["jobTypes"]["types"][$distinctJobType]['distinct'] = count($distinctJobTemplateTypes); $cache["jobTypes"]["types"][$distinctJobType]['count'] = count($countJobTemplateTypes); $cache["jobTypes"]["types"][$distinctJobType]["templates"] = []; foreach ($distinctJobTemplateTypes as $distinctJobTemplateType) { $distinctJobTemplateAndCount = Job::whereIn('_id', array_flatten($crowdAgentJobs->toArray()))->where('template', $distinctJobTemplateType)->count(); $cache["jobTypes"]["types"][$distinctJobType]["templates"][$distinctJobTemplateType[0]] = $distinctJobTemplateAndCount; } } } $jobsAsSpammer = Job::whereIn('_id', array_flatten($crowdAgentJobs->toArray()))->whereIn('metrics.spammers.list', [$this->_id])->lists('platformJobId'); $cache["spammer"]["count"] = count($jobsAsSpammer); $cache["spammer"]["jobs"] = array_flatten($jobsAsSpammer); $this->cache = $cache; $this->save(); } else { $this->save(); } } }