Path: blob/master/src/applications/fact/management/PhabricatorFactManagementCursorsWorkflow.php
12256 views
<?php12final class PhabricatorFactManagementCursorsWorkflow3extends PhabricatorFactManagementWorkflow {45protected function didConstruct() {6$this7->setName('cursors')8->setSynopsis(pht('Show a list of fact iterators and cursors.'))9->setExamples(10"**cursors**\n".11"**cursors** --reset __cursor__")12->setArguments(13array(14array(15'name' => 'reset',16'param' => 'cursor',17'repeat' => true,18'help' => pht('Reset cursor __cursor__.'),19),20));21}2223public function execute(PhutilArgumentParser $args) {24$console = PhutilConsole::getConsole();2526$reset = $args->getArg('reset');27if ($reset) {28foreach ($reset as $name) {29$cursor = id(new PhabricatorFactCursor())->loadOneWhere(30'name = %s',31$name);32if ($cursor) {33$console->writeOut("%s\n", pht('Resetting cursor %s...', $name));34$cursor->delete();35} else {36$console->writeErr(37"%s\n",38pht('Cursor %s does not exist or is already reset.', $name));39}40}41return 0;42}4344$iterator_map = PhabricatorFactDaemon::getAllApplicationIterators();45if (!$iterator_map) {46$console->writeErr("%s\n", pht('No cursors.'));47return 0;48}4950$cursors = id(new PhabricatorFactCursor())->loadAllWhere(51'name IN (%Ls)',52array_keys($iterator_map));53$cursors = mpull($cursors, 'getPosition', 'getName');5455foreach ($iterator_map as $iterator_name => $iterator) {56$console->writeOut(57"%s (%s)\n",58$iterator_name,59idx($cursors, $iterator_name, 'start'));60}6162return 0;63}6465}666768