Changeset 12878 for trunk/sources/HeuristicLab.Services.WebApp.Status/3.3
- Timestamp:
- 08/18/15 10:08:58 (9 years ago)
- Location:
- trunk/sources
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources
- Property svn:mergeinfo changed
-
trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj
r12552 r12878 9 9 <AppDesignerFolder>Properties</AppDesignerFolder> 10 10 <RootNamespace>HeuristicLab.Services.WebApp.Status</RootNamespace> 11 <AssemblyName>HeuristicLab.Services.WebApp.Status </AssemblyName>11 <AssemblyName>HeuristicLab.Services.WebApp.Status-3.3</AssemblyName> 12 12 <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> 13 13 <FileAlignment>512</FileAlignment> … … 76 76 <SpecificVersion>False</SpecificVersion> 77 77 <HintPath>..\..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> 78 <Private>False</Private> 78 79 </Reference> 79 80 <Reference Include="System" /> -
trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/WebApi/DataController.cs
r12521 r12878 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.Data.Linq;25 24 using System.Linq; 26 25 using System.Web.Http; 27 26 using HeuristicLab.Services.Hive; 28 27 using HeuristicLab.Services.Hive.DataAccess; 29 using DAL = HeuristicLab.Services.Hive.DataAccess;30 using DT O= HeuristicLab.Services.WebApp.Status.WebApi.DataTransfer;28 using HeuristicLab.Services.Hive.DataAccess.Interfaces; 29 using DT = HeuristicLab.Services.WebApp.Status.WebApi.DataTransfer; 31 30 32 31 namespace HeuristicLab.Services.WebApp.Status.WebApi { 33 32 public class DataController : ApiController { 34 35 // start temporary quickfix 33 private const int LAST_TASKS = 20; 34 35 private IPersistenceManager PersistenceManager { 36 get { return ServiceLocator.Instance.PersistenceManager; } 37 } 38 36 39 private const string SQL_USER_TASK_STATUS = 37 40 @"WITH UserTasks AS ( … … 53 56 } 54 57 55 public IEnumerable<DTO.TaskStatus> GetTaskStatus(HiveDataContext db) { 56 var query = db.ExecuteQuery<UserTaskStatus>(SQL_USER_TASK_STATUS).ToList(); 57 return query.Select(uts => new DTO.TaskStatus { 58 User = new DTO.User { 59 Id = uts.UserId.ToString(), 60 Name = ServiceLocator.Instance.UserManager.GetUserById(uts.UserId).UserName 58 private IEnumerable<DT.TaskStatus> GetTaskStatus(IPersistenceManager pm) { 59 return pm.UseTransaction(() => { 60 var query = pm.DataContext.ExecuteQuery<UserTaskStatus>(SQL_USER_TASK_STATUS).ToList(); 61 return query.Select(uts => new DT.TaskStatus { 62 User = new DT.User { 63 Id = uts.UserId.ToString(), 64 Name = ServiceLocator.Instance.UserManager.GetUserById(uts.UserId).UserName 65 }, 66 CalculatingTasks = uts.CalculatingTasks, 67 WaitingTasks = uts.WaitingTasks 68 }).OrderBy(x => x.User.Name); 69 }); 70 } 71 72 private DT.TimeStatus GetTimeStatus(IPersistenceManager pm) { 73 return pm.UseTransaction(() => { 74 var factTaskDao = pm.FactTaskDao; 75 var factTasks = factTaskDao.GetAll(); 76 var completedTasks = factTaskDao.GetCompletedTasks() 77 .OrderByDescending(x => x.EndTime) 78 .Take(LAST_TASKS); 79 var lastCalculatingTimes = completedTasks 80 .GroupBy(x => 1) 81 .Select(x => new { 82 Min = x.Min(y => y.CalculatingTime), 83 Max = x.Max(y => y.CalculatingTime), 84 Avg = (long)x.Average(y => (long?)y.CalculatingTime) 85 }).FirstOrDefault(); 86 var calculatingTasks = factTasks.Where(x => x.TaskState == TaskState.Calculating); 87 int count = calculatingTasks.Count() / 3; 88 return new DT.TimeStatus { 89 MinCalculatingTime = lastCalculatingTimes != null ? lastCalculatingTimes.Min : 0, 90 MaxCalculatingTime = lastCalculatingTimes != null ? lastCalculatingTimes.Max : 0, 91 AvgWaitingTime = count > 0 ? (long)calculatingTasks.OrderBy(x => x.StartTime).Take(count).Average(x => x.InitialWaitingTime) : 0, 92 AvgCalculatingTime = lastCalculatingTimes != null ? lastCalculatingTimes.Avg : 0, 93 TotalCpuTime = factTasks.Sum(x => x.CalculatingTime), 94 StandardDeviationCalculatingTime = (long)StandardDeviation(completedTasks.Select(x => (double)x.CalculatingTime)), 95 BeginDate = factTasks.OrderBy(x => x.StartTime).Select(x => x.StartTime).FirstOrDefault() 96 }; 97 }); 98 } 99 100 public DT.Status GetStatus() { 101 var pm = PersistenceManager; 102 var slaveDao = pm.SlaveDao; 103 var onlineSlaves = pm.UseTransaction(() => slaveDao.GetOnlineSlaves().ToList()); 104 var activeSlaves = onlineSlaves.Where(s => s.IsAllowedToCalculate).ToList(); 105 var calculatingSlaves = activeSlaves.Where(s => s.SlaveState == SlaveState.Calculating).ToList(); 106 int totalCores = onlineSlaves.Sum(s => s.Cores ?? 0); 107 int totalMemory = onlineSlaves.Sum(s => s.Memory ?? 0); 108 return new DT.Status { 109 CoreStatus = new DT.CoreStatus { 110 TotalCores = totalCores, 111 UsedCores = totalCores - onlineSlaves.Sum(s => s.FreeCores ?? 0), 112 ActiveCores = activeSlaves.Sum(s => s.Cores ?? 0), 113 CalculatingCores = calculatingSlaves.Sum(s => s.Cores ?? 0) - calculatingSlaves.Sum(s => s.FreeCores ?? 0) 61 114 }, 62 CalculatingTasks = uts.CalculatingTasks, 63 WaitingTasks = uts.WaitingTasks 64 }).OrderBy(x => x.User.Name); 65 } 66 // end temporary quickfix 67 68 public DTO.Status GetStatus() { 69 using (var db = new HiveDataContext()) { 70 var onlineSlaves = (from slave in db.Resources.OfType<DAL.Slave>() 71 where slave.SlaveState == SlaveState.Calculating || slave.SlaveState == SlaveState.Idle 72 select slave).ToList(); 73 var activeSlaves = onlineSlaves.Where(s => s.IsAllowedToCalculate).ToList(); 74 var calculatingSlaves = activeSlaves.Where(s => s.SlaveState == SlaveState.Calculating).ToList(); 75 int calculatingMemory = calculatingSlaves.Any() ? (int)calculatingSlaves.Sum(s => s.Memory) : 0; 76 int freeCalculatingMemory = calculatingSlaves.Any() ? (int)calculatingSlaves.Sum(s => s.FreeMemory) : 0; 77 78 return new DTO.Status { 79 CoreStatus = new DTO.CoreStatus { 80 TotalCores = onlineSlaves.Sum(s => s.Cores ?? 0), 81 FreeCores = onlineSlaves.Sum(s => s.FreeCores ?? 0), // temporary for old chart data 82 ActiveCores = activeSlaves.Sum(s => s.Cores ?? 0), 83 CalculatingCores = calculatingSlaves.Sum(s => s.Cores ?? 0) - calculatingSlaves.Sum(s => s.FreeCores ?? 0) 115 CpuUtilizationStatus = new DT.CpuUtilizationStatus { 116 TotalCpuUtilization = onlineSlaves.Any() 117 ? Math.Round(onlineSlaves.Average(s => s.CpuUtilization), 2) 118 : 0.0, 119 ActiveCpuUtilization = activeSlaves.Any() 120 ? Math.Round(activeSlaves.Average(s => s.CpuUtilization), 2) 121 : 0.0, 122 CalculatingCpuUtilization = calculatingSlaves.Any() 123 ? Math.Round(calculatingSlaves.Average(s => s.CpuUtilization), 2) 124 : 0.0 125 }, 126 MemoryStatus = new DT.MemoryStatus { 127 TotalMemory = totalMemory, 128 UsedMemory = totalMemory - onlineSlaves.Sum(s => s.FreeMemory ?? 0), 129 ActiveMemory = activeSlaves.Sum(s => s.Memory ?? 0), 130 CalculatingMemory = calculatingSlaves.Sum(s => s.Memory ?? 0) - calculatingSlaves.Sum(s => s.FreeMemory ?? 0) 131 }, 132 TimeStatus = GetTimeStatus(pm), 133 TasksStatus = GetTaskStatus(pm), 134 SlavesStatus = onlineSlaves.Select(x => new DT.SlaveStatus { 135 Slave = new DT.Slave { 136 Id = x.ResourceId.ToString(), 137 Name = x.Name 84 138 }, 85 CpuUtilizationStatus = new DTO.CpuUtilizationStatus { 86 TotalCpuUtilization = onlineSlaves.Any() 87 ? Math.Round(onlineSlaves.Average(s => s.CpuUtilization), 2) 88 : 0.0, 89 ActiveCpuUtilization = activeSlaves.Any() 90 ? Math.Round(activeSlaves.Average(s => s.CpuUtilization), 2) 91 : 0.0, 92 CalculatingCpuUtilization = calculatingSlaves.Any() 93 ? Math.Round(calculatingSlaves.Average(s => s.CpuUtilization), 2) 94 : 0.0 95 }, 96 MemoryStatus = new DTO.MemoryStatus { 97 TotalMemory = onlineSlaves.Any() ? (int)onlineSlaves.Sum(s => s.Memory) : 0, 98 FreeMemory = onlineSlaves.Any() ? (int)onlineSlaves.Sum(s => s.FreeMemory) : 0, 99 ActiveMemory = activeSlaves.Any() ? (int)activeSlaves.Sum(s => s.Memory) : 0, 100 UsedMemory = calculatingMemory - freeCalculatingMemory 101 }, 102 TasksStatus = GetTaskStatus(db), 103 SlavesStatus = onlineSlaves.Select(x => new DTO.SlaveStatus { 104 Slave = new DTO.Slave { 105 Id = x.ResourceId.ToString(), 106 Name = x.Name 107 }, 108 CpuUtilization = x.CpuUtilization, 109 Cores = x.Cores ?? 0, 110 FreeCores = x.FreeCores ?? 0, 111 Memory = x.Memory ?? 0, 112 FreeMemory = x.FreeMemory ?? 0, 113 IsAllowedToCalculate = x.IsAllowedToCalculate, 114 State = x.SlaveState.ToString() 115 }).OrderBy(x => x.Slave.Name), 116 Timestamp = JavascriptUtils.ToTimestamp(DateTime.Now) 117 }; 118 } 119 } 120 121 public IEnumerable<DTO.Status> GetStatusHistory(DateTime start, DateTime end) { 139 CpuUtilization = x.CpuUtilization, 140 Cores = x.Cores ?? 0, 141 FreeCores = x.FreeCores ?? 0, 142 Memory = x.Memory ?? 0, 143 FreeMemory = x.FreeMemory ?? 0, 144 IsAllowedToCalculate = x.IsAllowedToCalculate, 145 State = x.SlaveState.ToString() 146 }).OrderBy(x => x.Slave.Name), 147 Timestamp = JavascriptUtils.ToTimestamp(DateTime.Now) 148 }; 149 } 150 151 public IEnumerable<DT.Status> GetStatusHistory(DateTime start, DateTime end) { 122 152 TimeSpan ts = end - start; 123 153 int increment = 1; … … 127 157 increment += 5; 128 158 } 129 using (var db = new HiveDataContext()) { 130 DataLoadOptions loadOptions = new DataLoadOptions(); 131 loadOptions.LoadWith<Statistics>(o => o.SlaveStatistics); 132 db.LoadOptions = loadOptions; 133 db.DeferredLoadingEnabled = false; 134 var statistics = db.Statistics.Where(s => s.Timestamp >= start && s.Timestamp <= end) 135 .OrderBy(s => s.Timestamp) 136 .ToList(); 137 var status = new DTO.Status { 138 CoreStatus = new DTO.CoreStatus(), 139 CpuUtilizationStatus = new DTO.CpuUtilizationStatus(), 140 MemoryStatus = new DTO.MemoryStatus() 159 var pm = PersistenceManager; 160 var factClientInfoDao = pm.FactClientInfoDao; 161 var clientInfos = pm.UseTransaction(() => { 162 return factClientInfoDao.GetAll() 163 .Where(s => s.Time >= start 164 && s.Time <= end 165 && s.SlaveState != SlaveState.Offline) 166 .OrderBy(s => s.Time) 167 .GroupBy(s => s.Time) 168 .Select(x => new { 169 Timestamp = x.Key, 170 TotalCores = x.Sum(y => y.NumTotalCores), 171 UsedCores = x.Sum(y => y.NumUsedCores), 172 TotalMemory = x.Sum(y => y.TotalMemory), 173 UsedMemory = x.Sum(y => y.UsedMemory), 174 CpuUtilization = x.Where(y => y.IsAllowedToCalculate).Average(y => y.CpuUtilization) 175 }) 176 .ToList(); 177 }); 178 var statusList = new List<DT.Status>(); 179 var e = clientInfos.GetEnumerator(); 180 do { 181 var status = new DT.Status { 182 CoreStatus = new DT.CoreStatus(), 183 CpuUtilizationStatus = new DT.CpuUtilizationStatus(), 184 MemoryStatus = new DT.MemoryStatus() 141 185 }; 142 int freeCores = 0; 143 int freeMemory = 0; 144 int i = 1; 145 foreach (var statistic in statistics) { 146 status.CoreStatus.TotalCores += statistic.SlaveStatistics.Sum(x => x.Cores); 147 freeCores += statistic.SlaveStatistics.Sum(x => x.FreeCores); 148 status.CpuUtilizationStatus.TotalCpuUtilization += statistic.SlaveStatistics.Any() 149 ? statistic.SlaveStatistics.Average(x => x.CpuUtilization) 150 : 0.0; 151 status.MemoryStatus.TotalMemory += statistic.SlaveStatistics.Sum(x => x.Memory); 152 freeMemory += statistic.SlaveStatistics.Sum(x => x.FreeMemory); 153 if (i >= increment) { 154 status.Timestamp = JavascriptUtils.ToTimestamp(statistic.Timestamp); 155 status.CoreStatus.TotalCores /= i; 156 freeCores /= i; 157 status.CpuUtilizationStatus.TotalCpuUtilization /= i; 158 status.MemoryStatus.TotalMemory /= i; 159 freeMemory /= i; 160 status.CoreStatus.ActiveCores = status.CoreStatus.TotalCores; 161 status.MemoryStatus.ActiveMemory = status.MemoryStatus.TotalMemory; 162 status.CpuUtilizationStatus.ActiveCpuUtilization = status.CpuUtilizationStatus.TotalCpuUtilization; 163 status.CpuUtilizationStatus.CalculatingCpuUtilization = status.CpuUtilizationStatus.CalculatingCpuUtilization; 164 status.CoreStatus.CalculatingCores = status.CoreStatus.TotalCores - freeCores; 165 status.MemoryStatus.UsedMemory = status.MemoryStatus.TotalMemory - freeMemory; 166 yield return status; 167 status = new DTO.Status { 168 CoreStatus = new DTO.CoreStatus(), 169 CpuUtilizationStatus = new DTO.CpuUtilizationStatus(), 170 MemoryStatus = new DTO.MemoryStatus() 171 }; 172 freeCores = 0; 173 freeMemory = 0; 174 i = 1; 175 } else { 176 i++; 177 } 186 int i = 0; 187 DateTime lastTimestamp = DateTime.Now; 188 while (e.MoveNext()) { 189 var clientInfo = e.Current; 190 status.CoreStatus.TotalCores += clientInfo.TotalCores; 191 status.CoreStatus.UsedCores += clientInfo.UsedCores; 192 status.MemoryStatus.TotalMemory += clientInfo.TotalMemory; 193 status.MemoryStatus.UsedMemory += clientInfo.UsedMemory; 194 status.CpuUtilizationStatus.TotalCpuUtilization += clientInfo.CpuUtilization; 195 lastTimestamp = clientInfo.Timestamp; 196 i++; 197 if (i >= increment) 198 break; 178 199 } 200 if (i <= 0) continue; 201 status.Timestamp = JavascriptUtils.ToTimestamp(lastTimestamp); 202 status.CoreStatus.TotalCores /= i; 203 status.CoreStatus.UsedCores /= i; 204 status.MemoryStatus.TotalMemory /= i; 205 status.MemoryStatus.UsedMemory /= i; 206 status.CpuUtilizationStatus.TotalCpuUtilization /= i; 207 statusList.Add(status); 208 } while (e.Current != null); 209 return statusList; 210 } 211 212 private double StandardDeviation(IEnumerable<double> source) { 213 int n = 0; 214 double mean = 0; 215 double M2 = 0; 216 foreach (double x in source) { 217 n = n + 1; 218 double delta = x - mean; 219 mean = mean + delta / n; 220 M2 += delta * (x - mean); 179 221 } 222 if (n < 2) { 223 return M2; 224 } 225 return Math.Sqrt(M2 / (n - 1)); 180 226 } 181 227 } -
trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/WebApi/DataTransfer/Status.cs
r12435 r12878 20 20 #endregion 21 21 22 using System; 22 23 using System.Collections.Generic; 23 24 … … 26 27 public class CoreStatus { 27 28 public int TotalCores { get; set; } 28 public int FreeCores { get; set; } // temporary quickfix for old chart data29 public int UsedCores { get; set; } 29 30 public int ActiveCores { get; set; } 30 31 public int CalculatingCores { get; set; } … … 39 40 public class MemoryStatus { 40 41 public int TotalMemory { get; set; } 41 public int FreeMemory { get; set; } // temporary quickfix for old chart data42 public int UsedMemory { get; set; } 42 43 public int ActiveMemory { get; set; } 43 public int UsedMemory { get; set; }44 public int CalculatingMemory { get; set; } 44 45 } 45 46 … … 61 62 } 62 63 64 public class TimeStatus { 65 public long MinCalculatingTime { get; set; } 66 public long MaxCalculatingTime { get; set; } 67 public long AvgCalculatingTime { get; set; } 68 public long StandardDeviationCalculatingTime { get; set; } 69 public long AvgWaitingTime { get; set; } 70 public long TotalCpuTime { get; set; } 71 public DateTime? BeginDate { get; set; } 72 } 73 63 74 public class Status { 64 75 public CoreStatus CoreStatus { get; set; } 65 76 public CpuUtilizationStatus CpuUtilizationStatus { get; set; } 66 77 public MemoryStatus MemoryStatus { get; set; } 78 public TimeStatus TimeStatus { get; set; } 67 79 public IEnumerable<TaskStatus> TasksStatus { get; set; } 68 80 public IEnumerable<SlaveStatus> SlavesStatus { get; set; } -
trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/WebApp/history/history.cshtml
r12666 r12878 15 15 <label for="fromDate">From: </label> 16 16 <div class="input-group"> 17 <input id="fromDate" type="text" class="form-control" datepicker-popup="dd.MM.yyyy" ng-model="fromDate" is-open="fromIsOpen" datepicker-options="dateOptions" ng-required="true" close-text="Close" 17 <input id="fromDate" type="text" class="form-control" datepicker-popup="dd.MM.yyyy" ng-model="fromDate" is-open="fromIsOpen" datepicker-options="dateOptions" ng-required="true" close-text="Close"/> 18 18 <span class="input-group-btn"> 19 19 <button type="button" class="btn btn-default" ng-click="openFromDateSelection($event)"><i class="glyphicon glyphicon-calendar"></i></button> … … 32 32 <div class="form-group" style="margin-left: 5px; margin-right: 5px;"> 33 33 <div class="btn-group" dropdown dropdown-append-to-body> 34 <button type="button" class="btn btn-default dropdown-toggle" dropdown-toggle style="width: 1 30px; text-align: left;">35 <span class="text-left" style="display: inline-block; width: 85px;">{{curQuickSelection.name}}</span>34 <button type="button" class="btn btn-default dropdown-toggle" dropdown-toggle style="width: 145px; text-align: left;"> 35 <span class="text-left" style="display: inline-block; width: 100px;">{{curQuickSelection.name}}</span> 36 36 <span class="glyphicon glyphicon-chevron-down" style="margin-top: 3px;"></span> 37 37 </button> 38 38 <ul class="dropdown-menu" role="menu"> 39 39 <li ng-repeat="quickSelection in quickSelectionList"> 40 <a ng-click="changeQuickSelection(quickSelection)">{{quickSelection.name}}</a>40 <a class="cursor-pointer" ng-click="changeQuickSelection(quickSelection)">{{quickSelection.name}}</a> 41 41 </li> 42 42 </ul> … … 50 50 </form> 51 51 </div> 52 53 52 54 53 <div class="default-view-container"> -
trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/WebApp/history/historyCtrl.js
r12583 r12878 2 2 var module = appStatusPlugin.getAngularModule(); 3 3 module.controller('app.status.historyCtrl', 4 ['$scope', '$interval', 'app.status.data.service', 5 function ($scope, $interval, dataService ) {4 ['$scope', '$interval', 'app.status.data.service', '$log', 5 function ($scope, $interval, dataService, $log) { 6 6 $scope.chartOptions = { 7 7 grid: { … … 40 40 }; 41 41 42 43 42 $scope.fromDate = new Date(); 44 43 $scope.toDate = new Date(); … … 52 51 { id: 2, name: 'Yesterday' }, 53 52 { id: 3, name: 'Last 7 Days' }, 54 { id: 4, name: 'Last 30 Days' } 53 { id: 4, name: 'Last 30 Days' }, 54 { id: 5, name: 'Last 6 Months' }, 55 { id: 6, name: 'Last Year' } 55 56 ]; 56 57 $scope.changeQuickSelection = function (quickSelection) { … … 72 73 case 4: 73 74 $scope.fromDate = new Date(today.valueOf() - (30 * oneDayInMs)); 75 $scope.toDate = new Date(today.valueOf()); 76 break; 77 case 5: 78 var month = today.getMonth() - 6; 79 if (month < 0) { 80 month += 12; 81 } 82 $scope.fromDate = new Date(today.valueOf()); 83 $scope.fromDate.setMonth(month); 84 $scope.toDate = new Date(today.valueOf()); 85 break; 86 case 6: 87 $scope.fromDate = new Date(today.valueOf()); 88 $scope.fromDate.setFullYear(today.getFullYear()-1); 74 89 $scope.toDate = new Date(today.valueOf()); 75 90 break; … … 113 128 for (var i = 0; i < noOfStatus; ++i) { 114 129 var curStatus = status[i]; 115 var cpuData = Math.round(curStatus.CpuUtilizationStatus. ActiveCpuUtilization);130 var cpuData = Math.round(curStatus.CpuUtilizationStatus.TotalCpuUtilization); 116 131 cpuSeries.push([curStatus.Timestamp, cpuData]); 117 coreSeries[0].push([curStatus.Timestamp, curStatus.CoreStatus. ActiveCores]);118 coreSeries[1].push([curStatus.Timestamp, curStatus.CoreStatus. CalculatingCores]);119 memorySeries[0].push([curStatus.Timestamp, Math.round(curStatus.MemoryStatus. ActiveMemory / 1024)]);132 coreSeries[0].push([curStatus.Timestamp, curStatus.CoreStatus.TotalCores]); 133 coreSeries[1].push([curStatus.Timestamp, curStatus.CoreStatus.UsedCores]); 134 memorySeries[0].push([curStatus.Timestamp, Math.round(curStatus.MemoryStatus.TotalMemory / 1024)]); 120 135 memorySeries[1].push([curStatus.Timestamp, Math.round(curStatus.MemoryStatus.UsedMemory / 1024)]); 121 136 } … … 129 144 { data: memorySeries[1], label: " Used Memory", color: "LightPink" } 130 145 ]; 131 132 146 }); 133 147 }; -
trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/WebApp/status/status.cshtml
r12557 r12878 88 88 <tr data-toggle="tooltip" data-placement="bottom" title="All calculating slaves that are allowed to calculate"> 89 89 <td class="text-left">Calculating:</td> 90 <td class="text-right">{{status.MemoryStatus. UsedMemory | kbToGB}} GB</td>90 <td class="text-right">{{status.MemoryStatus.CalculatingMemory | kbToGB}} GB</td> 91 91 </tr> 92 92 </table> … … 115 115 </tr> 116 116 </table> 117 </div> 118 </div> 119 </div> 120 </div> 121 122 <div class="row"> 123 <div class="col-lg-12"> 124 <div class="panel panel-default"> 125 <div class="panel-heading"> 126 <h3 class="panel-title">Status Overview</h3> 127 </div> 128 <div class="panel-body"> 129 <div class="row"> 130 <div class="col-md-6"> 131 <table class="table table-no-border table-condensed table-auto-width table-content"> 132 <tr> 133 <td class="text-left">Current Average Waiting Time:</td> 134 <td class="text-right">{{status.TimeStatus.AvgWaitingTime | toTimespan}}</td> 135 </tr> 136 <tr> 137 <td class="text-left">Total CPU Time:</td> 138 <td class="text-right">{{status.TimeStatus.TotalCpuTime | toTimespan}}</td> 139 </tr> 140 <tr> 141 <td class="text-left">Since:</td> 142 <td class="text-right">{{status.TimeStatus.BeginDate | toDate}}</td> 143 </tr> 144 </table> 145 </div> 146 <div class="col-md-6"> 147 <table class="table table-no-border table-condensed table-auto-width table-content"> 148 <tr> 149 <td class="text-left">Minimum Calculating Time:</td> 150 <td class="text-right">{{status.TimeStatus.MinCalculatingTime | toTimespan}}</td> 151 </tr> 152 <tr> 153 <td class="text-left">Maximum Calculating Time:</td> 154 <td class="text-right">{{status.TimeStatus.MaxCalculatingTime | toTimespan}}</td> 155 </tr> 156 <tr> 157 <td class="text-left">Average Calculating Time:</td> 158 <td class="text-right">{{status.TimeStatus.AvgCalculatingTime | toTimespan}}</td> 159 </tr> 160 <tr> 161 <td class="text-left">Standard Deviation Calculating Time:</td> 162 <td class="text-right">{{status.TimeStatus.StandardDeviationCalculatingTime | toTimespan}}</td> 163 </tr> 164 </table> 165 </div> 166 </div> 117 167 </div> 118 168 </div> -
trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/WebApp/status/statusCtrl.js
r12561 r12878 103 103 $scope.cpu.knobData = Math.round(status.CpuUtilizationStatus.ActiveCpuUtilization); 104 104 $scope.core.knobData = Math.round(status.CoreStatus.CalculatingCores / status.CoreStatus.ActiveCores * 100); 105 $scope.memory.knobData = Math.round(status.MemoryStatus. UsedMemory / status.MemoryStatus.ActiveMemory * 100);105 $scope.memory.knobData = Math.round(status.MemoryStatus.CalculatingMemory / status.MemoryStatus.ActiveMemory * 100); 106 106 // chart series 107 107 var cpuSeries = $scope.cpu.series[0].data.splice(0); … … 127 127 128 128 cpuSeries.push([$scope.status.Timestamp, Math.round(status.CpuUtilizationStatus.TotalCpuUtilization)]); 129 // charts are currently filled with old total/used data130 // start temporary131 var usedCores = status.CoreStatus.TotalCores - status.CoreStatus.FreeCores;132 var usedMemory = status.MemoryStatus.TotalMemory - status.MemoryStatus.FreeMemory;133 // end temporary134 129 coreSeries[0].push([$scope.status.Timestamp, status.CoreStatus.TotalCores]); 135 coreSeries[1].push([$scope.status.Timestamp, usedCores]);130 coreSeries[1].push([$scope.status.Timestamp, status.CoreStatus.UsedCores]); 136 131 memorySeries[0].push([$scope.status.Timestamp, Math.round(status.MemoryStatus.TotalMemory / 1024)]); 137 memorySeries[1].push([$scope.status.Timestamp, Math.round( usedMemory / 1024)]);132 memorySeries[1].push([$scope.status.Timestamp, Math.round(status.MemoryStatus.UsedMemory / 1024)]); 138 133 $scope.cpu.series = [{ data: cpuSeries, label: " CPU Utilization", color: "#f7921d" }]; 139 134 $scope.core.series = [ … … 160 155 for (var i = 0; i < noOfStatus; ++i) { 161 156 var curStatus = status[i]; 162 var cpuData = Math.round(curStatus.CpuUtilizationStatus. ActiveCpuUtilization);157 var cpuData = Math.round(curStatus.CpuUtilizationStatus.TotalCpuUtilization); 163 158 cpuSeries.push([curStatus.Timestamp, cpuData]); 164 coreSeries[0].push([curStatus.Timestamp, curStatus.CoreStatus. ActiveCores]);165 coreSeries[1].push([curStatus.Timestamp, curStatus.CoreStatus. CalculatingCores]);166 memorySeries[0].push([curStatus.Timestamp, Math.round(curStatus.MemoryStatus. ActiveMemory / 1024)]);159 coreSeries[0].push([curStatus.Timestamp, curStatus.CoreStatus.TotalCores]); 160 coreSeries[1].push([curStatus.Timestamp, curStatus.CoreStatus.UsedCores]); 161 memorySeries[0].push([curStatus.Timestamp, Math.round(curStatus.MemoryStatus.TotalMemory / 1024)]); 167 162 memorySeries[1].push([curStatus.Timestamp, Math.round(curStatus.MemoryStatus.UsedMemory / 1024)]); 168 163 } -
trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/status.js
r12557 r12878 23 23 name: 'History', 24 24 route: '#/status/history', 25 icon: 'glyphicon glyphicon- stats'25 icon: 'glyphicon glyphicon-calendar' 26 26 }] 27 27 });
Note: See TracChangeset
for help on using the changeset viewer.