Index: trunk/sources/.nuget/NuGet.targets
===================================================================
--- trunk/sources/.nuget/NuGet.targets	(revision 12532)
+++ trunk/sources/.nuget/NuGet.targets	(revision 12532)
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <PropertyGroup>
+        <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">$(MSBuildProjectDirectory)\..\</SolutionDir>
+
+        <!-- Enable the restore command to run before builds -->
+        <RestorePackages Condition="  '$(RestorePackages)' == '' ">true</RestorePackages>
+
+        <!-- Property that enables building a package from a project -->
+        <BuildPackage Condition=" '$(BuildPackage)' == '' ">false</BuildPackage>
+
+        <!-- Determines if package restore consent is required to restore packages -->
+        <RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent>
+
+        <!-- Download NuGet.exe if it does not already exist -->
+        <DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe>
+    </PropertyGroup>
+
+    <ItemGroup Condition=" '$(PackageSources)' == '' ">
+        <!-- Package sources used to restore packages. By default, registered sources under %APPDATA%\NuGet\NuGet.Config will be used -->
+        <!-- The official NuGet package source (https://www.nuget.org/api/v2/) will be excluded if package sources are specified and it does not appear in the list -->
+        <!--
+            <PackageSource Include="https://www.nuget.org/api/v2/" />
+            <PackageSource Include="https://my-nuget-source/nuget/" />
+        -->
+    </ItemGroup>
+
+    <PropertyGroup Condition=" '$(OS)' == 'Windows_NT'">
+        <!-- Windows specific commands -->
+        <NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath>
+    </PropertyGroup>
+
+    <PropertyGroup Condition=" '$(OS)' != 'Windows_NT'">
+        <!-- We need to launch nuget.exe with the mono command if we're not on windows -->
+        <NuGetToolsPath>$(SolutionDir).nuget</NuGetToolsPath>
+    </PropertyGroup>
+
+    <PropertyGroup>
+        <PackagesProjectConfig Condition=" '$(OS)' == 'Windows_NT'">$(MSBuildProjectDirectory)\packages.$(MSBuildProjectName.Replace(' ', '_')).config</PackagesProjectConfig>
+        <PackagesProjectConfig Condition=" '$(OS)' != 'Windows_NT'">$(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config</PackagesProjectConfig>
+    </PropertyGroup>
+
+    <PropertyGroup>
+      <PackagesConfig Condition="Exists('$(MSBuildProjectDirectory)\packages.config')">$(MSBuildProjectDirectory)\packages.config</PackagesConfig>
+      <PackagesConfig Condition="Exists('$(PackagesProjectConfig)')">$(PackagesProjectConfig)</PackagesConfig>
+    </PropertyGroup>
+    
+    <PropertyGroup>
+        <!-- NuGet command -->
+        <NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\NuGet.exe</NuGetExePath>
+        <PackageSources Condition=" $(PackageSources) == '' ">@(PackageSource)</PackageSources>
+
+        <NuGetCommand Condition=" '$(OS)' == 'Windows_NT'">"$(NuGetExePath)"</NuGetCommand>
+        <NuGetCommand Condition=" '$(OS)' != 'Windows_NT' ">mono --runtime=v4.0.30319 "$(NuGetExePath)"</NuGetCommand>
+
+        <PackageOutputDir Condition="$(PackageOutputDir) == ''">$(TargetDir.Trim('\\'))</PackageOutputDir>
+
+        <RequireConsentSwitch Condition=" $(RequireRestoreConsent) == 'true' ">-RequireConsent</RequireConsentSwitch>
+        <NonInteractiveSwitch Condition=" '$(VisualStudioVersion)' != '' AND '$(OS)' == 'Windows_NT' ">-NonInteractive</NonInteractiveSwitch>
+
+        <PaddedSolutionDir Condition=" '$(OS)' == 'Windows_NT'">"$(SolutionDir) "</PaddedSolutionDir>
+        <PaddedSolutionDir Condition=" '$(OS)' != 'Windows_NT' ">"$(SolutionDir)"</PaddedSolutionDir>
+
+        <!-- Commands -->
+        <RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)"  $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)</RestoreCommand>
+        <BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols</BuildCommand>
+
+        <!-- We need to ensure packages are restored prior to assembly resolve -->
+        <BuildDependsOn Condition="$(RestorePackages) == 'true'">
+            RestorePackages;
+            $(BuildDependsOn);
+        </BuildDependsOn>
+
+        <!-- Make the build depend on restore packages -->
+        <BuildDependsOn Condition="$(BuildPackage) == 'true'">
+            $(BuildDependsOn);
+            BuildPackage;
+        </BuildDependsOn>
+    </PropertyGroup>
+
+    <Target Name="CheckPrerequisites">
+        <!-- Raise an error if we're unable to locate nuget.exe  -->
+        <Error Condition="'$(DownloadNuGetExe)' != 'true' AND !Exists('$(NuGetExePath)')" Text="Unable to locate '$(NuGetExePath)'" />
+        <!--
+        Take advantage of MsBuild's build dependency tracking to make sure that we only ever download nuget.exe once.
+        This effectively acts as a lock that makes sure that the download operation will only happen once and all
+        parallel builds will have to wait for it to complete.
+        -->
+        <MsBuild Targets="_DownloadNuGet" Projects="$(MSBuildThisFileFullPath)" Properties="Configuration=NOT_IMPORTANT;DownloadNuGetExe=$(DownloadNuGetExe)" />
+    </Target>
+
+    <Target Name="_DownloadNuGet">
+        <DownloadNuGet OutputFilename="$(NuGetExePath)" Condition=" '$(DownloadNuGetExe)' == 'true' AND !Exists('$(NuGetExePath)')" />
+    </Target>
+
+    <Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites">        
+        <Exec Command="$(RestoreCommand)"
+              Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" />
+
+        <Exec Command="$(RestoreCommand)"
+              LogStandardErrorAsError="true"
+              Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" />
+    </Target>
+
+    <Target Name="BuildPackage" DependsOnTargets="CheckPrerequisites">
+        <Exec Command="$(BuildCommand)"
+              Condition=" '$(OS)' != 'Windows_NT' " />
+
+        <Exec Command="$(BuildCommand)"
+              LogStandardErrorAsError="true"
+              Condition=" '$(OS)' == 'Windows_NT' " />
+    </Target>
+
+    <UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
+        <ParameterGroup>
+            <OutputFilename ParameterType="System.String" Required="true" />
+        </ParameterGroup>
+        <Task>
+            <Reference Include="System.Core" />
+            <Using Namespace="System" />
+            <Using Namespace="System.IO" />
+            <Using Namespace="System.Net" />
+            <Using Namespace="Microsoft.Build.Framework" />
+            <Using Namespace="Microsoft.Build.Utilities" />
+            <Code Type="Fragment" Language="cs">
+                <![CDATA[
+                try {
+                    OutputFilename = Path.GetFullPath(OutputFilename);
+
+                    Log.LogMessage("Downloading latest version of NuGet.exe...");
+                    WebClient webClient = new WebClient();
+                    webClient.DownloadFile("https://www.nuget.org/nuget.exe", OutputFilename);
+
+                    return true;
+                }
+                catch (Exception ex) {
+                    Log.LogErrorFromException(ex);
+                    return false;
+                }
+            ]]>
+            </Code>
+        </Task>
+    </UsingTask>
+</Project>
Index: trunk/sources/HeuristicLab.Services.Hive.Web/Hive-3.3/Status.aspx
===================================================================
--- trunk/sources/HeuristicLab.Services.Hive.Web/Hive-3.3/Status.aspx	(revision 12524)
+++ 	(revision )
@@ -1,160 +1,0 @@
-﻿<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Status.aspx.cs" Inherits="Status" %>
-
-<%@ Register Assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
-  Namespace="System.Web.UI.DataVisualization.Charting" TagPrefix="asp" %>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head runat="server">
-  <title>HeuristicLab Hive Status Monitor</title> 
-  <link rel="icon" type="image/ico" href="HeuristicLab.ico" /> 
-    <style type="text/css">
-        .auto-style1 {
-            color: #F6921B;
-        }
-        .auto-style2 {
-            color: #000000;
-        }
-    </style>
-</head>
-<body>
-  <center>
-    <h1 class="auto-style1">HeuristicLab <span class="auto-style2">Hive Status Monitor</span></h1>
-  </center>
-  <form id="form1" runat="server">
-  <div>
-      <strong>Overall Available Cores:</strong>
-    <asp:Label ID="overallAvailableCoresLabel" runat="server" />
-      <br />
-      <strong>Available Cores (real):</strong>
-    <asp:Label ID="availableCoresLabel" runat="server" />
-      <br />
-      <strong>System-Wide Waiting Tasks:</strong>
-    <asp:Label ID="waitingJobsLabel" runat="server" />
-      <br />
-      <strong>Used Cores / Calculating Tasks:</strong>
-    <asp:Label ID="usedCoresLabel" runat="server" />
-    <br />
-      <strong>Overall
-    Avg. CPU Utilization:</strong>
-    <asp:Label ID="overallCpuUtilizationLabel" runat="server" />
-      <br />
-      <strong>Real Avg. CPU Utilization:</strong>
-    <asp:Label ID="cpuUtilizationLabel" runat="server" />
-      &nbsp;<br />
-      <strong>Slaves (CPU Utilization):</strong>
-    <asp:Label ID="slavesLabel" runat="server" />
-      <br />
-      <strong>Groups:</strong>
-    <asp:Label ID="groupsLabel" runat="server" />
-      <br />
-      <br />
-      <strong>Number of Calculating Tasks by User:</strong><asp:Table ID="calculatingTasksByUserTable" runat="server" GridLines="Both">
-          <asp:TableRow runat="server" BackColor="#CCCCCC">
-              <asp:TableCell runat="server" Font-Bold="False">User</asp:TableCell>
-              <asp:TableCell runat="server" Font-Bold="False">Nr. of Tasks</asp:TableCell>
-          </asp:TableRow>
-      </asp:Table>
-      <br />
-      <strong>Number of Waiting Tasks by User:</strong><asp:Table ID="waitingTasksByUserTable" runat="server" GridLines="Both">
-          <asp:TableRow runat="server" BackColor="#CCCCCC">
-              <asp:TableCell runat="server" Font-Bold="False">User</asp:TableCell>
-              <asp:TableCell runat="server" Font-Bold="False">Nr. of Tasks</asp:TableCell>
-          </asp:TableRow>
-      </asp:Table>
-      <br />
-    <br />
-      <strong>Days:</strong>
-    <asp:DropDownList ID="daysDropDownList" runat="server" AutoPostBack="True">
-      <asp:ListItem Value="1"></asp:ListItem>
-      <asp:ListItem Value="2"></asp:ListItem>
-      <asp:ListItem Value="3"></asp:ListItem>
-      <asp:ListItem Value="4"></asp:ListItem>
-      <asp:ListItem Value="5"></asp:ListItem>
-      <asp:ListItem Value="6"></asp:ListItem>
-      <asp:ListItem Value="7"></asp:ListItem>
-      <asp:ListItem Value="8"></asp:ListItem>
-      <asp:ListItem Value="9"></asp:ListItem>
-      <asp:ListItem Value="10"></asp:ListItem>
-      <asp:ListItem Value="11"></asp:ListItem>
-      <asp:ListItem Value="12"></asp:ListItem>
-      <asp:ListItem Value="13"></asp:ListItem>
-      <asp:ListItem Value="14"></asp:ListItem>
-      <asp:ListItem Value="All"></asp:ListItem>
-    </asp:DropDownList>
-    <br />
-    <br />
-      <strong>Avg. CPU Utilization History of all Slaves</strong><br />
-    <asp:Chart ID="cpuUtilizationChart" runat="server" Height="270px" Width="1280px">
-      <Series>
-        <asp:Series BorderWidth="2" ChartType="Line" Color="0, 176, 80" Name="Series1" XValueType="DateTime"
-          YValueType="Double">
-        </asp:Series>
-      </Series>
-      <ChartAreas>
-        <asp:ChartArea BackColor="Black" BackHatchStyle="DottedGrid" BackSecondaryColor="0, 96, 43"
-          BorderColor="DarkGreen" BorderDashStyle="Dot" Name="ChartArea1">
-          <AxisY>
-            <MajorGrid Enabled="False" />
-          </AxisY>
-          <AxisX IntervalAutoMode="VariableCount" IntervalOffset="1" IntervalOffsetType="Hours"
-            IntervalType="Hours" IsLabelAutoFit="False" >
-            <MajorGrid Enabled="False" />
-            <LabelStyle Format="d/M/yyyy HH:mm" IsStaggered="True" />
-          </AxisX>
-        </asp:ChartArea>
-      </ChartAreas>
-    </asp:Chart>
-    <br />
-      <strong>Cores/Used Cores History</strong><br />
-    <asp:Chart ID="coresChart" runat="server" Palette="None" Width="1280px" PaletteCustomColors="137, 165, 78; 185, 205, 150">
-      <Series>
-        <asp:Series ChartType="Area" Name="Cores" XValueType="DateTime" YValueType="Double">
-        </asp:Series>
-        <asp:Series ChartArea="ChartArea1" ChartType="Area" Name="FreeCores" XValueType="DateTime"
-          YValueType="Double">
-        </asp:Series>
-      </Series>
-      <ChartAreas>
-        <asp:ChartArea BackColor="Black" BackHatchStyle="DottedGrid" BackSecondaryColor="0, 96, 43"
-          BorderColor="DarkGreen" BorderDashStyle="Dot" Name="ChartArea1">
-          <AxisY>
-            <MajorGrid Enabled="False" />
-          </AxisY>
-          <AxisX IntervalAutoMode="VariableCount" IntervalOffset="1" IntervalOffsetType="Hours"
-            IntervalType="Hours" IsLabelAutoFit="False" >
-            <MajorGrid Enabled="False" />
-            <LabelStyle Format="d/M/yyyy HH:mm" IsStaggered="True" />
-          </AxisX>
-        </asp:ChartArea>
-      </ChartAreas>
-    </asp:Chart>
-    <br />
-      <strong>Memory/Used Memory History (GB)</strong><br />
-    <asp:Chart ID="memoryChart" runat="server" Palette="None" PaletteCustomColors="170, 70, 67; 209, 147, 146"
-      Width="1280px">
-      <Series>
-        <asp:Series ChartType="Area" Name="Cores" XValueType="DateTime" YValueType="Double">
-        </asp:Series>
-        <asp:Series ChartArea="ChartArea1" ChartType="Area" Name="FreeCores" XValueType="DateTime"
-          YValueType="Double">
-        </asp:Series>
-      </Series>
-      <ChartAreas>
-        <asp:ChartArea BackColor="Black" BackHatchStyle="DottedGrid" BackSecondaryColor="0, 96, 43"
-          BorderColor="DarkGreen" BorderDashStyle="Dot" Name="ChartArea1">
-          <AxisY>
-            <MajorGrid Enabled="False" />
-          </AxisY>
-          <AxisX IntervalAutoMode="VariableCount" IntervalOffset="1" IntervalOffsetType="Hours"
-            IntervalType="Hours" IsLabelAutoFit="False" >
-            <MajorGrid Enabled="False" />
-            <LabelStyle Format="d/M/yyyy HH:mm" IsStaggered="True" />
-          </AxisX>
-        </asp:ChartArea>
-      </ChartAreas>
-    </asp:Chart>
-      <br />
-  </div>
-  </form>
-</body>
-</html>
Index: trunk/sources/HeuristicLab.Services.Hive.Web/Hive-3.3/Status.aspx.cs
===================================================================
--- trunk/sources/HeuristicLab.Services.Hive.Web/Hive-3.3/Status.aspx.cs	(revision 12524)
+++ 	(revision )
@@ -1,142 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Web.UI.WebControls;
-using HeuristicLab.Services.Hive;
-using System.Web.UI.DataVisualization.Charting;
-using DA = HeuristicLab.Services.Hive.DataAccess;
-using DT = HeuristicLab.Services.Hive.DataTransfer;
-
-public partial class Status : System.Web.UI.Page {
-  protected void Page_Load(object sender, EventArgs e) {
-    var dao = ServiceLocator.Instance.HiveDao;
-    var optDao = ServiceLocator.Instance.OptimizedHiveDao;
-    var transactionManager = ServiceLocator.Instance.TransactionManager;
-    var resourceName = Request.QueryString["resource"];
-    List<Guid> resourceIds = new List<Guid>();
-    List<DT.Slave> onlineSlaves = new List<DT.Slave>();
-    int currentlyJobsWaiting = 0;
-    Dictionary<Guid, int> calculatingTasksByUser = new Dictionary<Guid, int>();
-    Dictionary<Guid, int> waitingTasksByUser = new Dictionary<Guid, int>();
-    List<DT.Resource> groups = new List<DT.Resource>();
-
-    transactionManager.UseTransaction(() => {
-      groups = dao.GetResources(x => x.ResourceType == "GROUP").ToList();
-    }, false, false);
-
-    if (!string.IsNullOrEmpty(resourceName)) {
-      transactionManager.UseTransaction(() => {
-        var resId = dao.GetResources(x => x.Name == resourceName).Single().Id;
-        resourceIds = dao.GetChildResources(resId).Select(x => x.Id).Union(new List<Guid> { resId }).ToList();
-        calculatingTasksByUser = dao.GetCalculatingTasksByUserForResources(resourceIds);
-        waitingTasksByUser = dao.GetWaitingTasksByUserForResources(resourceIds);
-      }, false, false);
-    } else {
-      transactionManager.UseTransaction(() => {
-        resourceIds = optDao.GetAllResourceIds().ToList();
-        calculatingTasksByUser = optDao.GetCalculatingTasksByUser();
-        waitingTasksByUser = optDao.GetWaitingTasksByUser();
-      }, false, false);
-    }
-
-    transactionManager.UseTransaction(() => {
-      if (string.IsNullOrEmpty(resourceName)) {
-        onlineSlaves = dao.GetSlaves(x => x.SlaveState == DA.SlaveState.Calculating || x.SlaveState == DA.SlaveState.Idle).ToList();
-      } else {
-        onlineSlaves = dao.GetSlaves(x => (x.SlaveState == DA.SlaveState.Calculating || x.SlaveState == DA.SlaveState.Idle) && resourceIds.Contains(x.ResourceId)).ToList();
-      }
-      currentlyJobsWaiting = optDao.GetNumberOfWaitingTasks();
-    }, false, false);
-
-    int overallCurrentlyAvailableCores = onlineSlaves.Where(s => s.Cores.HasValue).Sum(s => s.Cores.Value);
-    int currentlyAvailableCores = onlineSlaves.Where(s => s.Cores.HasValue && s.IsAllowedToCalculate).Sum(s => s.Cores.Value);
-    int currentlyUsedCores = overallCurrentlyAvailableCores - onlineSlaves.Where(s => s.FreeCores.HasValue).Sum(s => s.FreeCores.Value);
-
-    this.overallAvailableCoresLabel.Text = overallCurrentlyAvailableCores.ToString();
-    this.availableCoresLabel.Text = currentlyAvailableCores.ToString();
-    this.usedCoresLabel.Text = currentlyUsedCores.ToString();
-    this.waitingJobsLabel.Text = currentlyJobsWaiting.ToString();
-
-    slavesLabel.Text = string.Join(", ", onlineSlaves.Select(x => string.Format("<a href=\"?resource={0}\">{0}</a> ({1} %)", x.Name, Math.Round(x.CpuUtilization, 2))));
-    groupsLabel.Text = "<a href=\"Status.aspx\">All</a>, ";
-    groupsLabel.Text += string.Join(", ", groups.Select(x => string.Format("<a href=\"?resource={0}\">{0}</a>", x.Name)));
-
-    overallCpuUtilizationLabel.Text = (onlineSlaves.Any() ? Math.Round(onlineSlaves.Average(s => s.CpuUtilization), 2).ToString() : "0.0") + " %";
-    cpuUtilizationLabel.Text = (onlineSlaves.Any(x => x.IsAllowedToCalculate) ? Math.Round(onlineSlaves.Where(x => x.IsAllowedToCalculate).Average(s => s.CpuUtilization), 2).ToString() : "0.0") + " %";
-
-    DT.Statistics[] stats = new DT.Statistics[0];
-    transactionManager.UseTransaction(() => {
-      if (daysDropDownList.SelectedValue == "All") {
-        stats = dao.GetStatistics(x => true).OrderBy(x => x.TimeStamp).ToArray();
-      } else {
-        stats = dao.GetStatistics(x => x.Timestamp >= DateTime.Now.Subtract(TimeSpan.FromDays(int.Parse(daysDropDownList.SelectedValue)))).OrderBy(x => x.TimeStamp).ToArray();
-      }
-    }, false, false);
-
-    for (int i = 0; i < stats.Length; i++) {
-      var s = stats[i];
-      var slaveStats = s.SlaveStatistics.Where(x => resourceIds.Contains(x.SlaveId)).ToArray();
-
-      var averageCpuUtilization = slaveStats.Any() ? slaveStats.Average(x => x.CpuUtilization) : 0.0;
-      cpuUtilizationChart.Series[0].Points.Add(new DataPoint(s.TimeStamp.ToOADate(), averageCpuUtilization));
-
-      var cores = slaveStats.Sum(x => x.Cores);
-
-      var usedCores = cores - slaveStats.Sum(x => x.FreeCores);
-      coresChart.Series[0].Points.AddXY(s.TimeStamp.ToOADate(), cores);
-      coresChart.Series[1].Points.AddXY(s.TimeStamp.ToOADate(), usedCores);
-
-      var memory = slaveStats.Sum(x => x.Memory);
-      var usedMemory = memory - slaveStats.Sum(x => x.FreeMemory);
-      memoryChart.Series[0].Points.AddXY(s.TimeStamp.ToOADate(), memory / 1024.0);
-      memoryChart.Series[1].Points.AddXY(s.TimeStamp.ToOADate(), usedMemory / 1024.0);
-    }
-
-    GenerateTasksByUserTable(waitingTasksByUser, waitingTasksByUserTable);
-    GenerateTasksByUserTable(calculatingTasksByUser, calculatingTasksByUserTable);
-  }
-
-  private void GenerateTasksByUserTable(Dictionary<Guid, int> tasksByUser, Table table) {
-    foreach (var kvp in tasksByUser) {
-      TableRow curRow = new TableRow();
-      TableCell cellUser = new TableCell();
-      cellUser.Text = ServiceLocator.Instance.UserManager.GetUserById(kvp.Key).UserName;
-      TableCell cellCnt = new TableCell();
-      cellCnt.Text = kvp.Value.ToString();
-
-      curRow.Cells.Add(cellUser);
-      curRow.Cells.Add(cellCnt);
-      table.Rows.Add(curRow);
-    }
-    if (tasksByUser.Any()) {
-      TableRow sumRow = new TableRow();
-      TableCell sumCell = new TableCell();
-      sumCell.BorderWidth = Unit.Pixel(3);
-      sumCell.Text = tasksByUser.Sum(x => x.Value).ToString();
-      sumRow.Cells.Add(new TableCell());
-      sumRow.Cells.Add(sumCell);
-      table.Rows.Add(sumRow);
-    }
-  }
-}
