/** * Test ETL bugs fixed with ELIS-7815 & ELIS-7845 */ public function test_noetlerrorswithproblemlogdata() { global $DB; $dataset = $this->createCsvDataSet(array('log' => elis::file('elisprogram/tests/fixtures/mdl_log_elis7845_1500.csv'))); $this->loadDataSet($dataset); elis::$config->eliscore_etl->last_run = 0; elis::$config->eliscore_etl->state = ''; // Create existing record (NOT first)! $DB->insert_record('eliscore_etl_modactivity', (object) array('userid' => 409, 'courseid' => 382, 'cmid' => 12127, 'hour' => 1319659200, 'duration' => 1)); // Run until complete. $prevdone = 0; $prevtogo = 1501; $prevstart = 0; $etlobj = new eliscore_etl_useractivity(0, false); do { $realtime = time(); ob_start(); $etlobj->cron(); ob_end_clean(); $lasttime = (int) $etlobj->state['starttime']; $recordsdone = $DB->count_records_select('log', "time < {$lasttime}"); $recordstogo = $DB->count_records_select('log', "time >= {$lasttime}"); /* * Uncomment to track progress. * echo "\n Done = {$recordsdone} ({$prevdone}), Togo = {$recordstogo} ({$prev_togo}), * starttime = {$lasttime} ({$prev_start})\n"; */ if (!$lasttime || !$recordstogo) { break; } $this->assertTrue($recordsdone >= $prevdone); $this->assertTrue($recordstogo <= $prevtogo); $this->assertTrue($lasttime > $prevstart); $prevdone = $recordsdone; $prevtogo = $recordstogo; $prevstart = $lasttime; } while (true); $etluacnt = $DB->count_records('eliscore_etl_useractivity'); $etlumacnt = $DB->count_records('eliscore_etl_modactivity'); $this->assertEquals(342, $etluacnt); $this->assertEquals(225, $etlumacnt); }
/** * Run the ETL user activity cron. * * @param string $taskname The task name * @param int $duration The length of time in seconds the cron is to run for * @param object $etlobj The ETL user activity object */ function user_activity_etl_cron($taskname = '', $duration = 0, &$etlobj = null) { if ($etlobj === null) { $etlobj = new eliscore_etl_useractivity($duration); } // error_log("user_activity_etl_cron('{$taskname}', {$duration}, etlobj)"); $etlobj->cron(); }