Page MenuHomestyx hydra

No OneTemporary

diff --git a/src/applications/herald/management/HeraldWebhookCallManagementWorkflow.php b/src/applications/herald/management/HeraldWebhookCallManagementWorkflow.php
index 10249cca68..1b5b21482f 100644
--- a/src/applications/herald/management/HeraldWebhookCallManagementWorkflow.php
+++ b/src/applications/herald/management/HeraldWebhookCallManagementWorkflow.php
@@ -1,106 +1,154 @@
<?php
final class HeraldWebhookCallManagementWorkflow
extends HeraldWebhookManagementWorkflow {
protected function didConstruct() {
$this
->setName('call')
->setExamples('**call** --id __id__ [--object __object__]')
->setSynopsis(pht('Call a webhook.'))
->setArguments(
array(
array(
'name' => 'id',
'param' => 'id',
'help' => pht('Webhook ID to call'),
),
array(
'name' => 'object',
'param' => 'object',
'help' => pht('Submit transactions for a particular object.'),
),
array(
'name' => 'silent',
'help' => pht('Set the "silent" flag on the request.'),
),
array(
'name' => 'secure',
'help' => pht('Set the "secure" flag on the request.'),
),
+ array(
+ 'name' => 'count',
+ 'param' => 'N',
+ 'help' => pht('Make a total of __N__ copies of the call.'),
+ ),
+ array(
+ 'name' => 'background',
+ 'help' => pht(
+ 'Instead of making calls in the foreground, add the tasks '.
+ 'to the daemon queue.'),
+ ),
));
}
public function execute(PhutilArgumentParser $args) {
$viewer = $this->getViewer();
$id = $args->getArg('id');
if (!$id) {
throw new PhutilArgumentUsageException(
pht(
'Specify a webhook to call with "--id".'));
}
+ $count = $args->getArg('count');
+ if ($count === null) {
+ $count = 1;
+ }
+
+ if ($count <= 0) {
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'Specified "--count" must be larger than 0.'));
+ }
+
$hook = id(new HeraldWebhookQuery())
->setViewer($viewer)
->withIDs(array($id))
->executeOne();
if (!$hook) {
throw new PhutilArgumentUsageException(
pht(
'Unable to load specified webhook ("%s").',
$id));
}
$object_name = $args->getArg('object');
if ($object_name === null) {
$object = $hook;
} else {
$objects = id(new PhabricatorObjectQuery())
->setViewer($viewer)
->withNames(array($object_name))
->execute();
if (!$objects) {
throw new PhutilArgumentUsageException(
pht(
'Unable to load specified object ("%s").',
$object_name));
}
$object = head($objects);
}
+ $is_background = $args->getArg('background');
+
$xaction_query =
PhabricatorApplicationTransactionQuery::newQueryForObject($object);
$xactions = $xaction_query
->withObjectPHIDs(array($object->getPHID()))
->setViewer($viewer)
->setLimit(10)
->execute();
$application_phid = id(new PhabricatorHeraldApplication())->getPHID();
- $request = HeraldWebhookRequest::initializeNewWebhookRequest($hook)
- ->setObjectPHID($object->getPHID())
- ->setIsTestAction(true)
- ->setIsSilentAction((bool)$args->getArg('silent'))
- ->setIsSecureAction((bool)$args->getArg('secure'))
- ->setTriggerPHIDs(array($application_phid))
- ->setTransactionPHIDs(mpull($xactions, 'getPHID'))
- ->save();
-
- PhabricatorWorker::setRunAllTasksInProcess(true);
- $request->queueCall();
-
- $request->reload();
-
- echo tsprintf(
- "%s\n",
- pht(
- 'Success, got HTTP %s from webhook.',
- $request->getErrorCode()));
+ if ($is_background) {
+ echo tsprintf(
+ "%s\n",
+ pht(
+ 'Queueing webhook calls...'));
+ $progress_bar = id(new PhutilConsoleProgressBar())
+ ->setTotal($count);
+ } else {
+ echo tsprintf(
+ "%s\n",
+ pht(
+ 'Calling webhook...'));
+ PhabricatorWorker::setRunAllTasksInProcess(true);
+ }
+
+ for ($ii = 0; $ii < $count; $ii++) {
+ $request = HeraldWebhookRequest::initializeNewWebhookRequest($hook)
+ ->setObjectPHID($object->getPHID())
+ ->setIsTestAction(true)
+ ->setIsSilentAction((bool)$args->getArg('silent'))
+ ->setIsSecureAction((bool)$args->getArg('secure'))
+ ->setTriggerPHIDs(array($application_phid))
+ ->setTransactionPHIDs(mpull($xactions, 'getPHID'))
+ ->save();
+
+ $request->queueCall();
+
+ if ($is_background) {
+ $progress_bar->update(1);
+ } else {
+ $request->reload();
+
+ echo tsprintf(
+ "%s\n",
+ pht(
+ 'Success, got HTTP %s from webhook.',
+ $request->getErrorCode()));
+ }
+ }
+
+ if ($is_background) {
+ $progress_bar->done();
+ }
return 0;
}
}

File Metadata

Mime Type
text/x-diff
Expires
Tue, Nov 26, 3:32 PM (1 d, 14 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1208
Default Alt Text
(5 KB)

Event Timeline