#!/usr/bin/env php 'char', Type::GUILD => 'guild', Type::ARENA_TEAM => 'arena team' }; $msg = match ($fetchResult) { Profiler::FETCH_RESULT_ERR_NAME_EMPTY => 'Subject has an empty name and was skipped.', Profiler::FETCH_RESULT_ERR_NOT_FOUND => 'Subject was not found. Truncating local placeholder.', Profiler::FETCH_RESULT_ERR_NO_MEMBERS => 'Subject has no members. Truncating local placeholder.', Profiler::FETCH_RESULT_ERR_INTERNAL => 'Internal Error - Data stub is missing.' }; trigger_error('prQueue - [realm: '.$realmId.' '.$what.' guid: '.$realmGUID.'] '.$msg, E_USER_WARNING); DB::Aowow()->query('UPDATE ?_profiler_sync SET `status` = ?d, `errorCode` = ?d WHERE `realm` = ?d AND `realmGUID` = ?d AND `type` = ?d', PR_QUEUE_STATUS_ERROR, PR_QUEUE_ERROR_CHAR, $realmId, $realmGUID, $type); }; while (Cfg::get('PROFILER_ENABLE', true)) { $delay = Cfg::get('PROFILER_QUEUE_DELAY') / 1000; if (($tDiff = (microtime(true) - $tCycle)) < $delay) { $wait = $delay - $tDiff; CLI::write('sleeping '.Lang::nf($wait, 2).'s..'); usleep($wait * 1000 * 1000); } $row = DB::Aowow()->selectRow('SELECT * FROM ?_profiler_sync WHERE `status` = ?d ORDER BY `requestTime` ASC', PR_QUEUE_STATUS_WAITING); if (!$row) { // nothing more to do CLI::write('profiler queue empty - process halted!', CLI::LOG_INFO); Profiler::queueFree(); exit(); } // scheduled for future date if ($row['requestTime'] > time()) continue; if (empty(Profiler::getRealms()[$row['realm']])) { DB::Aowow()->query('UPDATE ?_profiler_sync SET `status` = ?d, `errorCode` = ?d WHERE `realm` = ?d AND `type` = ?d AND `typeId` = ?d', PR_QUEUE_STATUS_ERROR, PR_QUEUE_ERROR_ARMORY, $row['realm'], $row['type'], $row['typeId']); CLI::write('realm #'.$row['realm'].' for subject guid '.$row['realmGUID'].' is missing/inaccessible.', CLI::LOG_WARN); continue; } else DB::Aowow()->query('UPDATE ?_profiler_sync SET `status` = ?d WHERE `realm` = ?d AND `type` = ?d AND `typeId` = ?d', PR_QUEUE_STATUS_WORKING, $row['realm'], $row['type'], $row['typeId']); switch ($row['type']) { case Type::PROFILE: switch ($result = Profiler::getCharFromRealm($row['realm'], $row['realmGUID'])) { case Profiler::FETCH_RESULT_OK_UNCHANGED: CLI::write('char #'.$row['realmGUID'].' on realm #'.$row['realm'].' did not log in since last update. skipping...'); case Profiler::FETCH_RESULT_OK: break 2; case Profiler::FETCH_RESULT_ERR_NAME_EMPTY: case Profiler::FETCH_RESULT_ERR_NOT_FOUND: DB::Aowow()->query('DELETE FROM ?_profiler_profiles WHERE `realm` = ?d AND `realmGUID` = ?d', $row['realm'], $row['realmGUID']); default: $error(Type::PROFILE, $row['realmGUID'], $row['realm'], $result); continue 3; } case Type::GUILD: switch ($result = Profiler::getGuildFromRealm($row['realm'], $row['realmGUID'])) { case Profiler::FETCH_RESULT_OK: break 2; case Profiler::FETCH_RESULT_ERR_NAME_EMPTY: case Profiler::FETCH_RESULT_ERR_NOT_FOUND: case Profiler::FETCH_RESULT_ERR_NO_MEMBERS: DB::Aowow()->query('DELETE FROM ?_profiler_guild WHERE `realm` = ?d AND `realmGUID` = ?d', $row['realm'], $row['realmGUID']); default: $error(Type::GUILD, $row['realmGUID'], $row['realm'], $result); continue 3; } case Type::ARENA_TEAM: switch ($result = Profiler::getArenaTeamFromRealm($row['realm'], $row['realmGUID'])) { case Profiler::FETCH_RESULT_OK: break 2; case Profiler::FETCH_RESULT_ERR_NAME_EMPTY: case Profiler::FETCH_RESULT_ERR_NOT_FOUND: case Profiler::FETCH_RESULT_ERR_NO_MEMBERS: DB::Aowow()->query('DELETE FROM ?_profiler_arena_team WHERE `realm` = ?d AND `realmGUID` = ?d', $row['realm'], $row['realmGUID']); default: $error(Type::ARENA_TEAM, $row['realmGUID'], $row['realm'], $result); continue 3; } default: DB::Aowow()->query('DELETE FROM ?_profiler_sync WHERE realm = ?d AND type = ?d AND typeId = ?d', $row['realm'], $row['type'], $row['typeId']); trigger_error('prQueue - unknown type #'.$row['type'].' to sync into profiler. Removing from queue...', E_USER_ERROR); } $tCycle = microtime(true); // mark as ready DB::Aowow()->query('UPDATE ?_profiler_sync SET `status` = ?d, `errorCode` = 0 WHERE `realm` = ?d AND `type` = ?d AND `typeId` = ?d', PR_QUEUE_STATUS_READY, $row['realm'], $row['type'], $row['typeId']); } Profiler::queueFree(); CLI::write('profiler queue halted!', CLI::LOG_INFO); ?>