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">&times;</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;
     }

Reply via email to