Add buttons to delete or free tasks from the queue
Summary: See T709. I also ran into a case in Drydock where this is useful for testing/development. Test Plan: Freed lease of a task; deleted a task. Reviewers: btrahan, jungejason Reviewed By: btrahan CC: aran, epriestley Maniphest Tasks: T709 Differential Revision: https://secure.phabricator.com/D1469
This commit is contained in:
@@ -756,6 +756,7 @@ phutil_register_library_map(array(
|
|||||||
'PhabricatorWorkerTask' => 'infrastructure/daemon/workers/storage/task',
|
'PhabricatorWorkerTask' => 'infrastructure/daemon/workers/storage/task',
|
||||||
'PhabricatorWorkerTaskData' => 'infrastructure/daemon/workers/storage/taskdata',
|
'PhabricatorWorkerTaskData' => 'infrastructure/daemon/workers/storage/taskdata',
|
||||||
'PhabricatorWorkerTaskDetailController' => 'applications/daemon/controller/workertaskdetail',
|
'PhabricatorWorkerTaskDetailController' => 'applications/daemon/controller/workertaskdetail',
|
||||||
|
'PhabricatorWorkerTaskUpdateController' => 'applications/daemon/controller/workertaskupdate',
|
||||||
'PhabricatorXHPASTViewController' => 'applications/xhpastview/controller/base',
|
'PhabricatorXHPASTViewController' => 'applications/xhpastview/controller/base',
|
||||||
'PhabricatorXHPASTViewDAO' => 'applications/xhpastview/storage/base',
|
'PhabricatorXHPASTViewDAO' => 'applications/xhpastview/storage/base',
|
||||||
'PhabricatorXHPASTViewFrameController' => 'applications/xhpastview/controller/viewframe',
|
'PhabricatorXHPASTViewFrameController' => 'applications/xhpastview/controller/viewframe',
|
||||||
@@ -1421,6 +1422,7 @@ phutil_register_library_map(array(
|
|||||||
'PhabricatorWorkerTask' => 'PhabricatorWorkerDAO',
|
'PhabricatorWorkerTask' => 'PhabricatorWorkerDAO',
|
||||||
'PhabricatorWorkerTaskData' => 'PhabricatorWorkerDAO',
|
'PhabricatorWorkerTaskData' => 'PhabricatorWorkerDAO',
|
||||||
'PhabricatorWorkerTaskDetailController' => 'PhabricatorDaemonController',
|
'PhabricatorWorkerTaskDetailController' => 'PhabricatorDaemonController',
|
||||||
|
'PhabricatorWorkerTaskUpdateController' => 'PhabricatorDaemonController',
|
||||||
'PhabricatorXHPASTViewController' => 'PhabricatorController',
|
'PhabricatorXHPASTViewController' => 'PhabricatorController',
|
||||||
'PhabricatorXHPASTViewDAO' => 'PhabricatorLiskDAO',
|
'PhabricatorXHPASTViewDAO' => 'PhabricatorLiskDAO',
|
||||||
'PhabricatorXHPASTViewFrameController' => 'PhabricatorXHPASTViewController',
|
'PhabricatorXHPASTViewFrameController' => 'PhabricatorXHPASTViewController',
|
||||||
|
|||||||
@@ -259,6 +259,8 @@ class AphrontDefaultApplicationConfiguration
|
|||||||
|
|
||||||
'/daemon/' => array(
|
'/daemon/' => array(
|
||||||
'task/(?P<id>\d+)/$' => 'PhabricatorWorkerTaskDetailController',
|
'task/(?P<id>\d+)/$' => 'PhabricatorWorkerTaskDetailController',
|
||||||
|
'task/(?P<id>\d+)/(?P<action>[^/]+)/$'
|
||||||
|
=> 'PhabricatorWorkerTaskUpdateController',
|
||||||
'log/' => array(
|
'log/' => array(
|
||||||
'$' => 'PhabricatorDaemonLogListController',
|
'$' => 'PhabricatorDaemonLogListController',
|
||||||
'combined/$' => 'PhabricatorDaemonCombinedLogController',
|
'combined/$' => 'PhabricatorDaemonCombinedLogController',
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright 2011 Facebook, Inc.
|
* Copyright 2012 Facebook, Inc.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -118,13 +118,33 @@ class PhabricatorWorkerTaskDetailController
|
|||||||
$form
|
$form
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormSubmitControl())
|
id(new AphrontFormSubmitControl())
|
||||||
->addCancelButton('/daemon/'));
|
->addCancelButton('/daemon/', 'Back'));
|
||||||
|
|
||||||
$panel = new AphrontPanelView();
|
$panel = new AphrontPanelView();
|
||||||
$panel->setHeader('Task Detail');
|
$panel->setHeader('Task Detail');
|
||||||
$panel->setWidth(AphrontPanelView::WIDTH_WIDE);
|
$panel->setWidth(AphrontPanelView::WIDTH_WIDE);
|
||||||
$panel->appendChild($form);
|
$panel->appendChild($form);
|
||||||
|
|
||||||
|
$panel->addButton(
|
||||||
|
javelin_render_tag(
|
||||||
|
'a',
|
||||||
|
array(
|
||||||
|
'href' => '/daemon/task/'.$task->getID().'/delete/',
|
||||||
|
'class' => 'button grey',
|
||||||
|
'sigil' => 'workflow',
|
||||||
|
),
|
||||||
|
'Delete Task'));
|
||||||
|
|
||||||
|
$panel->addButton(
|
||||||
|
javelin_render_tag(
|
||||||
|
'a',
|
||||||
|
array(
|
||||||
|
'href' => '/daemon/task/'.$task->getID().'/release/',
|
||||||
|
'class' => 'button grey',
|
||||||
|
'sigil' => 'workflow',
|
||||||
|
),
|
||||||
|
'Free Lease'));
|
||||||
|
|
||||||
return $this->buildStandardPageResponse(
|
return $this->buildStandardPageResponse(
|
||||||
$panel,
|
$panel,
|
||||||
array(
|
array(
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ phutil_require_module('phabricator', 'applications/repository/storage/commit');
|
|||||||
phutil_require_module('phabricator', 'applications/repository/storage/repository');
|
phutil_require_module('phabricator', 'applications/repository/storage/repository');
|
||||||
phutil_require_module('phabricator', 'infrastructure/daemon/workers/storage/task');
|
phutil_require_module('phabricator', 'infrastructure/daemon/workers/storage/task');
|
||||||
phutil_require_module('phabricator', 'infrastructure/daemon/workers/storage/taskdata');
|
phutil_require_module('phabricator', 'infrastructure/daemon/workers/storage/taskdata');
|
||||||
|
phutil_require_module('phabricator', 'infrastructure/javelin/markup');
|
||||||
phutil_require_module('phabricator', 'view/form/base');
|
phutil_require_module('phabricator', 'view/form/base');
|
||||||
phutil_require_module('phabricator', 'view/form/control/markup');
|
phutil_require_module('phabricator', 'view/form/control/markup');
|
||||||
phutil_require_module('phabricator', 'view/form/control/static');
|
phutil_require_module('phabricator', 'view/form/control/static');
|
||||||
|
|||||||
@@ -0,0 +1,82 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2012 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class PhabricatorWorkerTaskUpdateController
|
||||||
|
extends PhabricatorDaemonController {
|
||||||
|
|
||||||
|
private $id;
|
||||||
|
private $action;
|
||||||
|
|
||||||
|
public function willProcessRequest(array $data) {
|
||||||
|
$this->id = $data['id'];
|
||||||
|
$this->action = $data['action'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function processRequest() {
|
||||||
|
$request = $this->getRequest();
|
||||||
|
$user = $request->getUser();
|
||||||
|
|
||||||
|
$task = id(new PhabricatorWorkerTask())->load($this->id);
|
||||||
|
if (!$task) {
|
||||||
|
return new Aphront404Response();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($request->isFormPost()) {
|
||||||
|
switch ($this->action) {
|
||||||
|
case 'delete':
|
||||||
|
$task->delete();
|
||||||
|
break;
|
||||||
|
case 'release':
|
||||||
|
$task->setLeaseOwner(null);
|
||||||
|
$task->setLeaseExpires(time());
|
||||||
|
$task->save();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return id(new AphrontRedirectResponse())->setURI('/daemon/');
|
||||||
|
}
|
||||||
|
|
||||||
|
$dialog = new AphrontDialogView();
|
||||||
|
$dialog->setUser($user);
|
||||||
|
|
||||||
|
switch ($this->action) {
|
||||||
|
case 'delete':
|
||||||
|
$dialog->setTitle('Really delete task?');
|
||||||
|
$dialog->appendChild(
|
||||||
|
'<p>The work this task represents will never be performed if you '.
|
||||||
|
'delete it. Are you sure you want to delete it?</p>');
|
||||||
|
$dialog->addSubmitButton('Delete Task');
|
||||||
|
break;
|
||||||
|
case 'release':
|
||||||
|
$dialog->setTitle('Really free task lease?');
|
||||||
|
$dialog->appendChild(
|
||||||
|
'<p>If the process which owns the task lease is still doing work '.
|
||||||
|
'on it, the work may be performed twice. Are you sure you '.
|
||||||
|
'want to free the lease?</p>');
|
||||||
|
$dialog->addSubmitButton('Free Lease');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return new Aphront404Response();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$dialog->addCancelButton('/daemon/');
|
||||||
|
|
||||||
|
return id(new AphrontDialogResponse())->setDialog($dialog);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is automatically generated. Lint this module to rebuild it.
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_module('phabricator', 'aphront/response/404');
|
||||||
|
phutil_require_module('phabricator', 'aphront/response/dialog');
|
||||||
|
phutil_require_module('phabricator', 'aphront/response/redirect');
|
||||||
|
phutil_require_module('phabricator', 'applications/daemon/controller/base');
|
||||||
|
phutil_require_module('phabricator', 'infrastructure/daemon/workers/storage/task');
|
||||||
|
phutil_require_module('phabricator', 'view/dialog');
|
||||||
|
|
||||||
|
phutil_require_module('phutil', 'utils');
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_source('PhabricatorWorkerTaskUpdateController.php');
|
||||||
Reference in New Issue
Block a user