Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/30/15 13:12:07 (9 years ago)
Author:
dglaser
Message:

#2388:

HeuristicLab.Services.Hive.DataAccess-3.3:

  • updated database schema
  • updated sql scripts
  • updated HiveStatisticsGenerator

HeuristicLab.Services.WebApp-3.3:

  • merged from trunk

HeuristicLab.Services.WebApp.Status-3.3:

  • updated data api controller

HeuristicLab.Services.WebApp.Statistics-3.3:

  • added exception page
  • improved jobs, clients, users and groups page
Location:
branches/HiveStatistics/sources
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/HiveStatistics/sources

  • branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/clients/clients.cshtml

    r12525 r12551  
    33<header class="view-header">
    44    <ul class="nav nav-list nav-list-topbar pull-left">
    5     <li>
    6         <a ng-href="#/statistics/jobs">Jobs</a>
    7     </li>
    8     @if (Request.IsAuthenticated && User.IsInRole(HiveRoles.Administrator))
    9     {
    105        <li>
    11             <a ng-href="#/statistics/users">Users</a>
     6            <a ng-href="#/statistics/jobs">Jobs</a>
    127        </li>
    13     }
    14     <li class="active">
    15         <a ng-href="#/statistics/clients">Clients</a>
    16     </li>
    17     <li>
    18         <a ng-href="#/statistics/groups">Groups</a>
    19     </li>
     8        @if (Request.IsAuthenticated && User.IsInRole(HiveRoles.Administrator))
     9        {
     10            <li>
     11                <a ng-href="#/statistics/users">Users</a>
     12            </li>
     13        }
     14        <li class="active">
     15            <a ng-href="#/statistics/clients">Clients</a>
     16        </li>
     17        <li>
     18            <a ng-href="#/statistics/groups">Groups</a>
     19        </li>
     20        @if (Request.IsAuthenticated && User.IsInRole(HiveRoles.Administrator)) {
     21            <li>
     22                <a ng-href="#/statistics/exceptions">Exceptions</a>
     23            </li>
     24        }
    2025    </ul>
    2126</header>
     
    3742                            <th>Cores</th>
    3843                            <th>Cpu Utilization</th>
     44                            <th>Memory</th>
    3945                            <th>State</th>
    4046                            <th></th>
     
    5056                            <td>{{client.UsedCores}} / {{client.TotalCores}}</td>
    5157                            <td>{{client.CpuUtilization | number: 2}} %</td>
     58                            <td>{{client.UsedMemory | kbToGB}} / {{client.TotalMemory | kbToGB}} GB</td>
    5259                            <td>{{client.State}}</td>
    5360                            <td>
     
    5663                        </tr>
    5764                        <tr ng-hide="clientPage.Clients.length">
    58                             <td colspan="6" class="text-center">No clients found!</td>
     65                            <td colspan="7" class="text-center">No clients found!</td>
    5966                        </tr>
    6067                    </table>
     
    8289                                <th>Cores</th>
    8390                                <th>Cpu Utilization</th>
     91                                <th>Memory</th>
    8492                                <th>State</th>
    8593                                <th></th>
     
    9199                            <td>{{client.UsedCores}} / {{client.TotalCores}}</td>
    92100                            <td>{{client.CpuUtilization | number: 2}} %</td>
     101                            <td>{{client.UsedMemory | kbToGB}} / {{client.TotalMemory | kbToGB}} GB</td>
    93102                            <td>{{client.State}}</td>
    94103                            <td>
     
    97106                        </tr>
    98107                        <tr ng-hide="expiredClientPage.Clients.length">
    99                             <td colspan="6" class="text-center">No expired clients found!</td>
     108                            <td colspan="7" class="text-center">No expired clients found!</td>
    100109                        </tr>
    101110                    </table>
  • branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/clients/details/clientDetails.cshtml

    r12525 r12551  
    1717            <a ng-href="#/statistics/groups">Groups</a>
    1818        </li>
     19        @if (Request.IsAuthenticated && User.IsInRole(HiveRoles.Administrator)) {
     20            <li>
     21                <a ng-href="#/statistics/exceptions">Exceptions</a>
     22            </li>
     23        }
    1924    </ul>
    2025</header>
     
    4651                                <tr>
    4752                                    <td class="text-left">Up Time:</td>
    48                                     <td>{{client.UpTime}}</td>
     53                                    <td>{{client.UpTime | toTimespan}}</td>
    4954                                </tr>
    5055                                <tr>
    5156                                    <td class="text-left">Last Update:</td>
    52                                     <td>{{client.LastUpdate}}</td>
     57                                    <td>{{client.LastUpdate | toDate}}</td>
    5358                                </tr>
    5459                            </table>
     
    5863                                <tr>
    5964                                    <td class="text-left">Total Unavailable Time:</td>
    60                                     <td class="text-right">{{client.TotalUnavailableTime}}</td>
     65                                    <td class="text-right">{{client.TotalUnavailableTime | toTimespan}}</td>
    6166                                </tr>
    6267                                <tr>
    6368                                    <td class="text-left">Total Calculating Time:</td>
    64                                     <td class="text-right">{{client.TotalCalculatingTime}}</td>
     69                                    <td class="text-right">{{client.TotalCalculatingTime | toTimespan}}</td>
    6570                                </tr>
    6671                                <tr>
    6772                                    <td class="text-left">Total Idle Time:</td>
    68                                     <td class="text-right">{{client.TotalIdleTime}}</td>
     73                                    <td class="text-right">{{client.TotalIdleTime | toTimespan}}</td>
    6974                                </tr>
    7075                                <tr>
    7176                                    <td class="text-left">Total Transferring Time:</td>
    72                                     <td class="text-right">{{client.TotalTransferringTime}}</td>
     77                                    <td class="text-right">{{client.TotalTransferringTime | toTimespan}}</td>
    7378                                </tr>
    7479                                <tr>
    7580                                    <td class="text-left">Total Offline Time:</td>
    76                                     <td class="text-right">{{client.TotalOfflineTime}}</td>
     81                                    <td class="text-right">{{client.TotalOfflineTime | toTimespan}}</td>
    7782                                </tr>
    7883                            </table>
     
    137142                        <knob knob-data="knobData.cpu" knob-options="knobOptions"></knob>
    138143                    </div>
     144                    <table class="table table-no-border table-condensed table-auto-width table-content">
     145                        <tr>
     146                            <td class="text-left">&nbsp;</td>
     147                            <td class="text-right">&nbsp;</td>
     148                        </tr>
     149                        <tr>
     150                            <td class="text-left">&nbsp;</td>
     151                            <td class="text-right">&nbsp;</td>
     152                        </tr>
     153                    </table>
    139154                </div>
    140155            </div>
     
    153168                        <tr>
    154169                            <td class="text-left">Total:</td>
    155                             <td class="text-right">{{client.TotalMemory | number}} GB</td>
     170                            <td class="text-right">{{client.TotalMemory | kbToGB}} GB</td>
    156171                        </tr>
    157172                        <tr>
    158173                            <td class="text-left">Used:</td>
    159                             <td class="text-right">{{client.UsedMemory | number}} GB</td>
     174                            <td class="text-right">{{client.UsedMemory | kbToGB}} GB</td>
    160175                        </tr>
    161176                    </table>
     
    163178            </div>
    164179        </div>
    165 
    166180    </div>
    167181</div>
     
    169183<div id="tasks-filter" class="default-filter-header text-center">
    170184    <form class="form-inline">
    171         <div class="form-group">
     185        <div class="form-group" style="margin-left: 5px; margin-right: 5px;">
    172186            <div class="btn-group" data-toggle="buttons">
    173187                <label class="btn btn-default" ng-class="{active: state.Selected}" ng-repeat="state in states"
     
    175189                    <input type="checkbox" autocomplete="off" checked> {{state.State}}
    176190                </label>
     191            </div>
     192        </div>
     193        <div class="form-group" style="margin-left: 5px; margin-right: 5px;">
     194            <div class="btn-group" dropdown dropdown-append-to-body>
     195                <button type="button" class="btn btn-default dropdown-toggle" dropdown-toggle>
     196                    {{curUserName}} <span class="caret"></span>
     197                </button>
     198                <ul class="dropdown-menu" role="menu">
     199                    <li>
     200                        <a ng-href="#/statistics/clients/{{client.Id}}"
     201                           ng-click="userChanged('00000000-0000-0000-0000-000000000000', 'All Users')">All Users</a>
     202                    </li>
     203                    <li class="divider"></li>
     204                    <li ng-repeat="user in client.Users">
     205                        <a ng-href="#/statistics/clients/{{client.Id}}"
     206                           ng-click="userChanged(user.Id, user.Name)">{{user.Name}}</a>
     207                    </li>
     208                </ul>
    177209            </div>
    178210        </div>
     
    210242                             </tr>
    211243                         }
    212                          <tr>
    213                              <td>Start Time:</td>
    214                              <td class="text-right">{{task.StartTime}}</td>
    215                          </tr>
    216                          <tr>
    217                              <td>End Time:</td>
    218                              <td class="text-right">{{task.EndTime}}</td>
    219                          </tr>
     244                        <tr>
     245                            <td>Start Time:</td>
     246                            <td ng-show="task.StartTime" class="text-right">{{task.StartTime | toDate}}</td>
     247                            <td ng-hide="task.StartTime" class="text-right">Not started</td>
     248                        </tr>
     249                        <tr>
     250                            <td>End Time:</td>
     251                            <td ng-show="task.EndTime" class="text-right">{{task.EndTime | toDate}}</td>
     252                            <td ng-hide="task.EndTime" class="text-right">Not finished</td>
     253                        </tr>
    220254                         <tr>
    221255                             <td>Calculating Time:</td>
    222                              <td class="text-right">{{task.CalculatingTime}}</td>
     256                             <td class="text-right">{{task.CalculatingTime | toTimespan}}</td>
    223257                         </tr>
    224258                         @if (Request.IsAuthenticated && User.IsInRole(HiveRoles.Administrator))
  • branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/clients/details/clientDetailsCtrl.js

    r12516 r12551  
    44        ['$scope', '$stateParams', '$interval', 'app.statistics.clientService', 'app.statistics.taskService', '$modal',
    55        function ($scope, $stateParams, $interval, clientService, taskService, $modal) {
     6            $scope.curUserId = '00000000-0000-0000-0000-000000000000';
     7            $scope.curUserName = 'All Users';
    68            $scope.interval = defaultPageUpdateInterval;
    79            $scope.curTaskPage = 1;
     
    3335                clientService.getClientDetails({ id: $stateParams.id }, function (client) {
    3436                    $scope.client = client;
    35                     $scope.client.TotalMemory = Math.round($scope.client.TotalMemory / 1024);
    36                     $scope.client.UsedMemory = Math.round($scope.client.UsedMemory / 1024);
    3737                    $scope.knobData.cores = (client.UsedCores / client.TotalCores) * 100;
    3838                    $scope.knobData.cpu = client.CpuUtilization;
    3939                    $scope.knobData.memory = (client.UsedMemory / client.TotalMemory) * 100;
    40                     $scope.client.LastUpdate = CSharpDateToString($scope.client.LastUpdate);
    41                     $scope.client.UpTime = $scope.client.UpTime.toHHMMSS();
    42                     $scope.client.TotalUnavailableTime = $scope.client.TotalUnavailableTime.toHHMMSS();
    43                     $scope.client.TotalCalculatingTime = $scope.client.TotalCalculatingTime.toHHMMSS();
    44                     $scope.client.TotalIdleTime = $scope.client.TotalIdleTime.toHHMMSS();
    45                     $scope.client.TotalOfflineTime = $scope.client.TotalOfflineTime.toHHMMSS();
    46                     $scope.client.TotalTransferringTime = $scope.client.TotalTransferringTime.toHHMMSS();
    4740
    4841                    var length = client.TasksStates.length;
     
    8477                }
    8578
    86                 taskService.getTasksByClientId({ id: $stateParams.id, page: $scope.curTaskPage, size: $scope.taskPageSize }, states,
     79                taskService.getTasksByClientId({ id: $stateParams.id, page: $scope.curTaskPage, size: $scope.taskPageSize, userId: $scope.curUserId }, states,
    8780                    function (taskPage) {
    8881                        $scope.taskPage = taskPage;
    89                         var length = $scope.taskPage.Tasks.length;
    90                         for (var i = 0; i < length; ++i) {
    91                             $scope.taskPage.Tasks[i].TotalTime = $scope.taskPage.Tasks[i].TotalTime.toHHMMSS();
    92                             $scope.taskPage.Tasks[i].InitialWaitingTime = $scope.taskPage.Tasks[i].InitialWaitingTime.toHHMMSS();
    93                             $scope.taskPage.Tasks[i].WaitingTime = $scope.taskPage.Tasks[i].WaitingTime.toHHMMSS();
    94                             $scope.taskPage.Tasks[i].CalculatingTime = $scope.taskPage.Tasks[i].CalculatingTime.toHHMMSS();
    95                             $scope.taskPage.Tasks[i].TransferTime = $scope.taskPage.Tasks[i].TransferTime.toHHMMSS();
    96                             var startTime = $scope.taskPage.Tasks[i].StartTime;
    97                             if (isDefined(startTime)) {
    98                                 $scope.taskPage.Tasks[i].StartTime = CSharpDateToString(startTime);
    99                             } else {
    100                                 $scope.taskPage.Tasks[i].StartTime = 'Not started';
    101                             }
    102                             var endTime = $scope.taskPage.Tasks[i].EndTime;
    103                             if (isDefined(endTime)) {
    104                                 $scope.taskPage.Tasks[i].EndTime = CSharpDateToString(endTime);
    105                             } else {
    106                                 $scope.taskPage.Tasks[i].EndTime = 'Not finished';
    107                             }
    108                         }
    10982                    }
    11083                );
     
    12194                state.Selected = !state.Selected;
    12295                $scope.curTaskPage = 1;
     96                getClientDetails();
     97            };
     98
     99            $scope.userChanged = function(id, name) {
     100                $scope.curUserId = id;
     101                $scope.curUserName = name;
    123102                getClientDetails();
    124103            };
  • branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/clients/details/clientTaskDetailsDialog.cshtml

    r12516 r12551  
    1414                            <tr>
    1515                                <td>Start Time:</td>
    16                                 <td class="text-right">{{task.StartTime}}</td>
     16                                <td ng-show="task.StartTime" class="text-left">{{task.StartTime | toDate}}</td>
     17                                <td ng-hide="task.StartTime" class="text-left">Not started</td>
    1718                            </tr>
    1819                            <tr>
    1920                                <td>End Time:</td>
    20                                 <td class="text-right">{{task.EndTime}}</td>
     21                                <td ng-show="task.EndTime" class="text-left">{{task.EndTime | toDate}}</td>
     22                                <td ng-hide="task.EndTime" class="text-left">Not finished</td>
    2123                            </tr>
    2224                            <tr>
     
    5860                            <tr>
    5961                                <td>Total Time:</td>
    60                                 <td>{{task.TotalTime}}</td>
     62                                <td>{{task.TotalTime | toTimespan}}</td>
    6163                            </tr>
    6264                            <tr>
    6365                                <td>Initial Waiting Time:</td>
    64                                 <td>{{task.InitialWaitingTime}}</td>
     66                                <td>{{task.InitialWaitingTime | toTimespan}}</td>
    6567                            </tr>
    6668                            <tr>
    6769                                <td>Waiting Time:</td>
    68                                 <td>{{task.WaitingTime}}</td>
     70                                <td>{{task.WaitingTime | toTimespan}}</td>
    6971                            </tr>
    7072                            <tr>
    7173                                <td>Calculating Time:</td>
    72                                 <td>{{task.CalculatingTime}}</td>
     74                                <td>{{task.CalculatingTime | toTimespan}}</td>
    7375                            </tr>
    7476                            <tr>
    7577                                <td>Transfer Time:</td>
    76                                 <td>{{task.TransferTime}}</td>
     78                                <td>{{task.TransferTime | toTimespan}}</td>
    7779                            </tr>
    7880                        </table>
     
    8284                            <tr>
    8385                                <td>Calculation Runs:</td>
    84                                 <td>{{task.NumCalculationRuns}}</td>
     86                                <td class="text-right">{{task.NumCalculationRuns}}</td>
    8587                            </tr>
    8688                            <tr>
    8789                                <td>Retries Runs:</td>
    88                                 <td>{{task.NumRetries}}</td>
     90                                <td class="text-right">{{task.NumRetries}}</td>
    8991                            </tr>
    9092                            <tr>
    9193                                <td>Cores Required:</td>
    92                                 <td>{{task.CoresRequired}}</td>
     94                                <td class="text-right">{{task.CoresRequired}}</td>
    9395                            </tr>
    9496                            <tr>
    9597                                <td>Memory Required:</td>
    96                                 <td>{{task.MemoryRequired}}</td>
     98                                <td class="text-right">{{task.MemoryRequired}} MB</td>
    9799                            </tr>
    98100                            <tr>
    99101                                <td>Priority:</td>
    100                                 <td>{{task.Priority}}</td>
     102                                <td class="text-right">{{task.Priority}}</td>
    101103                            </tr>
    102104                        </table>
Note: See TracChangeset for help on using the changeset viewer.