Repository: airavata-php-gateway Updated Branches: refs/heads/develop 838ca7c9c -> a895abedf
AIRAVATA-1792 Username filtering in exp stats Project: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/commit/84032b41 Tree: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/tree/84032b41 Diff: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/diff/84032b41 Branch: refs/heads/develop Commit: 84032b41ac436aea785e7fdd1beaf23f8902bbbe Parents: 8522381 Author: Marcus Christie <[email protected]> Authored: Mon Dec 12 16:09:08 2016 -0500 Committer: Marcus Christie <[email protected]> Committed: Mon Dec 12 16:09:08 2016 -0500 ---------------------------------------------------------------------- app/controllers/AdminController.php | 5 +- app/libraries/AdminUtilities.php | 11 +- app/libraries/Airavata/API/Airavata.php | 84 ++++++++- app/views/admin/experiment-statistics.blade.php | 8 +- app/views/admin/manage-experiments.blade.php | 184 +++++++++++++++---- 5 files changed, 248 insertions(+), 44 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/84032b41/app/controllers/AdminController.php ---------------------------------------------------------------------- diff --git a/app/controllers/AdminController.php b/app/controllers/AdminController.php index 6439b4b..7babeca 100644 --- a/app/controllers/AdminController.php +++ b/app/controllers/AdminController.php @@ -324,9 +324,10 @@ class AdminController extends BaseController { { if (Request::ajax()) { $inputs = Input::all(); + $username = Input::get('username'); $expStatistics = AdminUtilities::get_experiment_execution_statistics(strtotime($inputs['fromTime']) * 1000 - , strtotime($inputs['toTime']) * 1000); - return View::make("admin/experiment-statistics", array("expStatistics" => $expStatistics)); + , strtotime($inputs['toTime']) * 1000, $username); + return View::make("admin/experiment-statistics", array("expStatistics" => $expStatistics, "username" => $username)); } } http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/84032b41/app/libraries/AdminUtilities.php ---------------------------------------------------------------------- diff --git a/app/libraries/AdminUtilities.php b/app/libraries/AdminUtilities.php index b2637a0..a5ee37f 100644 --- a/app/libraries/AdminUtilities.php +++ b/app/libraries/AdminUtilities.php @@ -125,10 +125,14 @@ class AdminUtilities * @param $toTime * @return \Airavata\Model\Experiment\ExperimentStatistics */ - public static function get_experiment_execution_statistics($fromTime, $toTime) + public static function get_experiment_execution_statistics($fromTime, $toTime, $username) { + if (trim($username) == '') { + $username = null; + } + Log::debug("get_experiment_execution_statistics", array($fromTime, $toTime, $username)); return Airavata::getExperimentStatistics(Session::get('authz-token'), - Config::get('pga_config.airavata')['gateway-id'], $fromTime, $toTime); + Config::get('pga_config.airavata')['gateway-id'], $fromTime, $toTime, $username, null, null); } /** @@ -140,7 +144,8 @@ class AdminUtilities { $experimentStatistics = AdminUtilities::get_experiment_execution_statistics( strtotime($inputs["from-date"]) * 1000, - strtotime($inputs["to-date"]) * 1000 + strtotime($inputs["to-date"]) * 1000, + $inputs['username'] ); $experiments = array(); if ($inputs["status-type"] == "ALL") { http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/84032b41/app/libraries/Airavata/API/Airavata.php ---------------------------------------------------------------------- diff --git a/app/libraries/Airavata/API/Airavata.php b/app/libraries/Airavata/API/Airavata.php index f235e48..cc90cc6 100644 --- a/app/libraries/Airavata/API/Airavata.php +++ b/app/libraries/Airavata/API/Airavata.php @@ -651,19 +651,23 @@ interface AiravataIf { * @param toTime * Ending data time. * + * TODO update docs * * * @param \Airavata\Model\Security\AuthzToken $authzToken * @param string $gatewayId * @param int $fromTime * @param int $toTime + * @param string $userName + * @param string $applicationName + * @param string $resourceHostName * @return \Airavata\Model\Experiment\ExperimentStatistics * @throws \Airavata\API\Error\InvalidRequestException * @throws \Airavata\API\Error\AiravataClientException * @throws \Airavata\API\Error\AiravataSystemException * @throws \Airavata\API\Error\AuthorizationException */ - public function getExperimentStatistics(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayId, $fromTime, $toTime); + public function getExperimentStatistics(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayId, $fromTime, $toTime, $userName, $applicationName, $resourceHostName); /** * * Get All Experiments of the Project @@ -6013,19 +6017,22 @@ class AiravataClient implements \Airavata\API\AiravataIf { throw new \Exception("searchExperiments failed: unknown result"); } - public function getExperimentStatistics(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayId, $fromTime, $toTime) + public function getExperimentStatistics(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayId, $fromTime, $toTime, $userName, $applicationName, $resourceHostName) { - $this->send_getExperimentStatistics($authzToken, $gatewayId, $fromTime, $toTime); + $this->send_getExperimentStatistics($authzToken, $gatewayId, $fromTime, $toTime, $userName, $applicationName, $resourceHostName); return $this->recv_getExperimentStatistics(); } - public function send_getExperimentStatistics(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayId, $fromTime, $toTime) + public function send_getExperimentStatistics(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayId, $fromTime, $toTime, $userName, $applicationName, $resourceHostName) { $args = new \Airavata\API\Airavata_getExperimentStatistics_args(); $args->authzToken = $authzToken; $args->gatewayId = $gatewayId; $args->fromTime = $fromTime; $args->toTime = $toTime; + $args->userName = $userName; + $args->applicationName = $applicationName; + $args->resourceHostName = $resourceHostName; $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary'); if ($bin_accel) { @@ -24221,6 +24228,18 @@ class Airavata_getExperimentStatistics_args { * @var int */ public $toTime = null; + /** + * @var string + */ + public $userName = null; + /** + * @var string + */ + public $applicationName = null; + /** + * @var string + */ + public $resourceHostName = null; public function __construct($vals=null) { if (!isset(self::$_TSPEC)) { @@ -24242,6 +24261,18 @@ class Airavata_getExperimentStatistics_args { 'var' => 'toTime', 'type' => TType::I64, ), + 5 => array( + 'var' => 'userName', + 'type' => TType::STRING, + ), + 6 => array( + 'var' => 'applicationName', + 'type' => TType::STRING, + ), + 7 => array( + 'var' => 'resourceHostName', + 'type' => TType::STRING, + ), ); } if (is_array($vals)) { @@ -24257,6 +24288,15 @@ class Airavata_getExperimentStatistics_args { if (isset($vals['toTime'])) { $this->toTime = $vals['toTime']; } + if (isset($vals['userName'])) { + $this->userName = $vals['userName']; + } + if (isset($vals['applicationName'])) { + $this->applicationName = $vals['applicationName']; + } + if (isset($vals['resourceHostName'])) { + $this->resourceHostName = $vals['resourceHostName']; + } } } @@ -24308,6 +24348,27 @@ class Airavata_getExperimentStatistics_args { $xfer += $input->skip($ftype); } break; + case 5: + if ($ftype == TType::STRING) { + $xfer += $input->readString($this->userName); + } else { + $xfer += $input->skip($ftype); + } + break; + case 6: + if ($ftype == TType::STRING) { + $xfer += $input->readString($this->applicationName); + } else { + $xfer += $input->skip($ftype); + } + break; + case 7: + if ($ftype == TType::STRING) { + $xfer += $input->readString($this->resourceHostName); + } else { + $xfer += $input->skip($ftype); + } + break; default: $xfer += $input->skip($ftype); break; @@ -24344,6 +24405,21 @@ class Airavata_getExperimentStatistics_args { $xfer += $output->writeI64($this->toTime); $xfer += $output->writeFieldEnd(); } + if ($this->userName !== null) { + $xfer += $output->writeFieldBegin('userName', TType::STRING, 5); + $xfer += $output->writeString($this->userName); + $xfer += $output->writeFieldEnd(); + } + if ($this->applicationName !== null) { + $xfer += $output->writeFieldBegin('applicationName', TType::STRING, 6); + $xfer += $output->writeString($this->applicationName); + $xfer += $output->writeFieldEnd(); + } + if ($this->resourceHostName !== null) { + $xfer += $output->writeFieldBegin('resourceHostName', TType::STRING, 7); + $xfer += $output->writeString($this->resourceHostName); + $xfer += $output->writeFieldEnd(); + } $xfer += $output->writeFieldStop(); $xfer += $output->writeStructEnd(); return $xfer; http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/84032b41/app/views/admin/experiment-statistics.blade.php ---------------------------------------------------------------------- diff --git a/app/views/admin/experiment-statistics.blade.php b/app/views/admin/experiment-statistics.blade.php index 7727057..8339193 100644 --- a/app/views/admin/experiment-statistics.blade.php +++ b/app/views/admin/experiment-statistics.blade.php @@ -145,6 +145,11 @@ <div id="experiment-container" style="margin: 20px" class="experiment-container"></div> <script> + @if ($username) + var username = "{{ $username }}"; + @else + var username = null; + @endif $("#getAllExperiments").click(function () { getExperimentsOfStatus( 'ALL'); @@ -188,7 +193,8 @@ 'status-type': status, 'search-key': 'creation-time', 'from-date': $fromTime, - 'to-date': $toTime + 'to-date': $toTime, + 'username': username }, async: false, success: function (data) { http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/84032b41/app/views/admin/manage-experiments.blade.php ---------------------------------------------------------------------- diff --git a/app/views/admin/manage-experiments.blade.php b/app/views/admin/manage-experiments.blade.php index fa708d6..e3fd4e6 100644 --- a/app/views/admin/manage-experiments.blade.php +++ b/app/views/admin/manage-experiments.blade.php @@ -41,45 +41,109 @@ <div role="tabpanel" class="tab-pane active" id="overview"> <div class="well col-md-12"> <div class="col-md-10"> - <div class='col-md-5'> - <div class="form-group"> + <div class="row"> + <div class='col-md-5'> + <div class="form-group"> <input type='button' class="oneDayExp form-control btn-primary" value="Get Experiments from Last 24 hours"/> + </div> </div> - </div> - <div class='col-md-5'> - <div class="form-group"> + <div class='col-md-5'> + <div class="form-group"> <input type='button' class="oneWeekExp form-control btn-primary" value="Get Experiments from Last Week"/> + </div> </div> </div> - <div class="col-md-12"> - <h4>Select dates between which you want to review experiment statistics.</h4> + <div class="row"> + <div class="col-md-12"> + <h4>Select dates between which you want to review experiment statistics.</h4> + </div> </div> - <div class='col-md-5'> - <div class="form-group"> - <div class='input-group date' id='datetimepicker9'> - <input type='text' class="form-control" placeholder="From Date" name="from-date"/> - <span class="input-group-addon"> - <span class="glyphicon glyphicon-calendar"></span> - </span> + <div class="row"> + <div class='col-md-5'> + <div class="form-group"> + <div class='input-group date' id='datetimepicker9'> + <input type='text' class="form-control" placeholder="From Date" name="from-date"/> + <span class="input-group-addon"> + <span class="glyphicon glyphicon-calendar"></span> + </span> + </div> </div> </div> + <div class='col-md-5'> + <div class="form-group"> + <div class='input-group date' id='datetimepicker10'> + <input type='text' class="form-control" placeholder="To Date" name="to-date"/> + <span class="input-group-addon"> + <span class="glyphicon glyphicon-calendar"></span> + </span> + </div> + </div> + </div> + <div class="col-md-2"> + <button name="getStatistics" id="getStatistics" type="submit" class="btn btn-primary" + value="GetStatistics"><span + class="glyphicon glyphicon-search"></span> Get Statistics + </button> + </div> </div> - <div class='col-md-5'> - <div class="form-group"> - <div class='input-group date' id='datetimepicker10'> - <input type='text' class="form-control" placeholder="To Date" name="to-date"/> - <span class="input-group-addon"> - <span class="glyphicon glyphicon-calendar"></span> - </span> + <div class="row"> + <div class="col-md-12"> + <div class="form-group"> + <div class="btn-group"> + <button id="add-filter-dropdown" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> + Add Filter <span class="caret"></span> + </button> + <ul class="dropdown-menu" role="menu"> + <li><a id="add-username-filter" href="#">Username</a></li> + <li><a id="add-appname-filter" href="#">Application Name</a></li> + <li><a id="add-hostname-filter" href="#">Hostname</a></li> + </ul> + </div> </div> </div> </div> - <div class="col-md-2"> - <button name="getStatistics" id="getStatistics" type="submit" class="btn btn-primary" - value="GetStatistics"><span - class="glyphicon glyphicon-search"></span> Get Statistics - </button> + <div class="row"> + <div class="col-md-5 hide" id="username-filter-row"> + <div class="form-group"> + <div class='input-group'> + <input type='text' class="form-control" placeholder="Username" id="username" name="username"/> + <div class="input-group-btn"> + <button id="remove-username-filter" class="btn btn-default" type="button"> + <span class="glyphicon glyphicon-remove"></span> + </button> + </div> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-md-5 hide" id="appname-filter-row"> + <div class="form-group"> + <div class='input-group'> + <input type='text' class="form-control" placeholder="Application name" id="appname" name="appname"/> + <div class="input-group-btn"> + <button id="remove-appname-filter" class="btn btn-default" type="button"> + <span class="glyphicon glyphicon-remove"></span> + </button> + </div> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-md-5 hide" id="hostname-filter-row"> + <div class="form-group"> + <div class='input-group'> + <input type='text' class="form-control" placeholder="Hostname" id="hostname" name="hostname"/> + <div class="input-group-btn"> + <button id="remove-hostname-filter" class="btn btn-default" type="button"> + <span class="glyphicon glyphicon-remove"></span> + </button> + </div> + </div> + </div> + </div> </div> </div> </div> @@ -376,9 +440,9 @@ to be uncommented when actually in use. $("#myTabs").append('<li role="presentation"><a href="#' + expId + '" aria-controls="' + expId + '" role="tab" data-toggle="tab">' + expId + '<button type="button" style="margin-left:10px;" class="close pull-right close-tab" aria-label="Close"><span aria-hidden="true">×</span></button></a></li>'); $(".tab-content").append('<div role="tabpanel" class="tab-pane" id="' + expId + '">' + data + '</div>'); $('#myTabs a[href="#' + expId + '"]').tab('show') // Select tab by name - + //$('#myTabs a[href="#expsummary"]').tab('show') // Select tab by name - + //from time-conversion.js updateTime(); } @@ -433,7 +497,7 @@ to be uncommented when actually in use. todayDate = moment(todayDate).utc().format('MM/DD/YYYY hh:mm a'); ydayDate = moment(ydayDate).utc().format('MM/DD/YYYY hh:mm a'); var msg = "Experiments statistics from last 24 hours"; - getExperiments( ydayDate, todayDate, msg); + getExperiments( ydayDate, todayDate, null, msg); }); $(".oneWeekExp").click( function(){ @@ -444,7 +508,7 @@ to be uncommented when actually in use. todayDate = moment(todayDate).utc().format('MM/DD/YYYY hh:mm a'); ydayDate = moment(ydayDate).utc().format('MM/DD/YYYY hh:mm a'); var msg = "Experiments statistics from last week"; - getExperiments( ydayDate, todayDate, msg); + getExperiments( ydayDate, todayDate, null, msg); }) $("#getStatistics").click(function () { @@ -452,22 +516,74 @@ to be uncommented when actually in use. $fromTime = moment($fromTime).utc().format('MM/DD/YYYY hh:mm A'); $toTime = $("#datetimepicker10").find("input").val(); $toTime = moment($toTime).utc().format('MM/DD/YYYY hh:mm A'); + var username = $('#username').val().trim(); + console.log("username", username); if ($fromTime == '' || $toTime == '') { alert("Please Select Valid Date Inputs!"); } else { - getExperiments( $fromTime, $toTime); + getExperiments( $fromTime, $toTime, username); + } + }); + + $("#add-username-filter").click(function() { + $("#username-filter-row").removeClass("hide"); + $("#username-filter-row input").focus(); + $("#add-filter-dropdown").dropdown('toggle'); + $("#add-username-filter").addClass("hide"); + return false; + }); + + $("#remove-username-filter").click(function() { + $("#username-filter-row").addClass("hide"); + $("#username-filter-row input").val(''); + $("#add-username-filter").removeClass("hide"); + }); + + $("#add-appname-filter").click(function() { + $("#appname-filter-row").removeClass("hide"); + $("#appname-filter-row input").focus(); + $("#add-filter-dropdown").dropdown('toggle'); + $("#add-appname-filter").addClass("hide"); + return false; + }); + + $("#remove-appname-filter").click(function() { + $("#appname-filter-row").addClass("hide"); + $("#appname-filter-row input").val(''); + $("#add-appname-filter").removeClass("hide"); + }); + + $("#add-hostname-filter").click(function() { + $("#hostname-filter-row").removeClass("hide"); + $("#hostname-filter-row input").focus(); + $("#add-filter-dropdown").dropdown('toggle'); + $("#add-hostname-filter").addClass("hide"); + return false; + }); + + $("#remove-hostname-filter").click(function() { + $("#hostname-filter-row").addClass("hide"); + $("#hostname-filter-row input").val(''); + $("#add-hostname-filter").removeClass("hide"); + }); + + // submit request if user presses ENTER key + $("#username, #appname, #hostname").keydown(function(e) { + if (e.which === 13) { + $('#getStatistics').click(); + return false; } }); // Load experiments from the last 24 hours on page load. $(".oneDayExp").click(); - function getExperiments( startTime, endTime, msg){ + function getExperiments( startTime, endTime, username, msg){ $(".experiment-statistics").html(""); $(".loading-img-statistics").removeClass("hide"); $.ajax({ - url: 'experimentStatistics?fromTime=' + startTime + '&' + 'toTime=' + endTime, + url: 'experimentStatistics?fromTime=' + startTime + '&' + 'toTime=' + endTime + '&username=' + encodeURIComponent(username), type: 'get', success: function (data) { if( msg == null){ @@ -498,7 +614,7 @@ to be uncommented when actually in use. hours = hours - 12; } var date = cd.getDate(); - + var todayDate = month + "/" + date + "/" + cd.getFullYear() + " " + hours + ":" + cd.getUTCMinutes() + " " + timeOfDay; return todayDate; }
