Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Status.aspx
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Status.aspx	(revision 6457)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Status.aspx	(revision 6458)
@@ -1,4 +1,6 @@
 ﻿<%@ 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">
@@ -18,11 +20,148 @@
     <asp:Label ID="waitingJobsLabel" runat="server" />
     <br />
-    Slaves:
+    Slaves (CPU Utilization):
     <asp:Label ID="slavesLabel" runat="server" />
     <br />
+    Avg. CPU Utilization:
+    <asp:Label ID="cpuUtilizationLabel" runat="server" />
     <br />
-    <asp:Label ID="statisticsLabel" runat="server" />
-    <asp:Table ID="Table1" runat="server" Height="64px" Width="75px">
-    </asp:Table>
+    <br />
+    Days:
+    <asp:DropDownList ID="daysDropDownList" runat="server" AutoPostBack="True" OnSelectedIndexChanged="daysDropDownList_SelectedIndexChanged">
+      <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 />
+    Avg. CPU Utilization History of all Slaves<br />
+    <asp:Chart ID="cpuUtilizationChart" runat="server" Height="270px" Width="1900px">
+      <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 />
+    <br />
+    Cores/Used Cores History<br />
+    <asp:Chart ID="coresChart" runat="server" Palette="None" Width="1900px" 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 />
+    <br />
+    Memory/Used Memory History (GB)<br />
+    <asp:Chart ID="memoryChart" runat="server" Palette="None" PaletteCustomColors="170, 70, 67; 209, 147, 146"
+      Width="1900px">
+      <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 />
+    Speedup (ComputedMinutes/Minute)<br />
+    <asp:Chart ID="speedupChartMinutes" runat="server" Palette="None" Width="1900px"
+      PaletteCustomColors="79, 129, 189">
+      <Series>
+        <asp:Series ChartType="Area" Name="Cores" 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 Minimum="-5">
+            <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 />
+    <br />
+    Speedup (ComputedHours/Hour)<br />
+    <br />
+    <asp:Chart ID="speedupChartHours" runat="server" Palette="None" Width="1900px" PaletteCustomColors="79, 129, 189">
+      <Series>
+        <asp:Series ChartType="Area" Name="Cores" 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>
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Status.aspx.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Status.aspx.cs	(revision 6457)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Status.aspx.cs	(revision 6458)
@@ -9,4 +9,5 @@
 using HeuristicLab.Services.Hive.Common.DataTransfer;
 using System.Text;
+using System.Web.UI.DataVisualization.Charting;
 
 public partial class Status : System.Web.UI.Page {
@@ -15,27 +16,63 @@
     var onlineSlaves = dao.GetSlaves(x => x.SlaveState == SlaveState.Calculating || x.SlaveState == SlaveState.Idle);
 
-    int availableCores = onlineSlaves.Sum(s => s.Cores.Value);
-    int usedCores = availableCores - onlineSlaves.Sum(s => s.FreeCores.Value);
-    int jobCount = ServiceLocator.Instance.HiveDao.GetJobs(x => x.State == JobState.Waiting).Count();
+    int currentlyAvailableCores = onlineSlaves.Sum(s => s.Cores.Value);
+    int currentlyUsedCores = currentlyAvailableCores - onlineSlaves.Sum(s => s.FreeCores.Value);
+    int currentlyJobsWaiting = ServiceLocator.Instance.HiveDao.GetJobs(x => x.State == JobState.Waiting).Count();
 
-    this.availableCoresLabel.Text = availableCores.ToString();
-    this.usedCoresLabel.Text = usedCores.ToString();
-    this.waitingJobsLabel.Text = jobCount.ToString();
+    this.availableCoresLabel.Text = currentlyAvailableCores.ToString();
+    this.usedCoresLabel.Text = currentlyUsedCores.ToString();
+    this.waitingJobsLabel.Text = currentlyJobsWaiting.ToString();
 
-    slavesLabel.Text = string.Join(", ", onlineSlaves.Select(x => x.Name));
+    slavesLabel.Text = string.Join(", ", onlineSlaves.Select(x => string.Format("{0} ({1} %)", x.Name, Math.Round(x.CpuUtilization, 2))));
 
-    var stats = dao.GetStatistics(x => x.Timestamp >= DateTime.Now.Subtract(TimeSpan.FromDays(7))).OrderByDescending(x => x.TimeStamp);
-    var sb = new StringBuilder();
-    int i = 0;
-    foreach (var s in stats) {
-      if (i % 60 == 0) { // just ~1 per hour
-        var cores = s.SlaveStatistics.Sum(x => x.Cores);
-        var usdCores = cores - s.SlaveStatistics.Sum(x => x.FreeCores);
+    cpuUtilizationLabel.Text = onlineSlaves.Count() > 0 ? onlineSlaves.Average(s => s.CpuUtilization).ToString() : "0.0";
+
+    HeuristicLab.Services.Hive.Common.DataTransfer.Statistics[] stats;
+    if (daysDropDownList.SelectedValue == "All")
+      stats = dao.GetStatistics(x => true).OrderByDescending(x => x.TimeStamp).ToArray();
+    else
+      stats = dao.GetStatistics(x => x.Timestamp >= DateTime.Now.Subtract(TimeSpan.FromDays(int.Parse(daysDropDownList.SelectedValue)))).OrderByDescending(x => x.TimeStamp).ToArray();
+
+
+    for (int i = 0; i < stats.Length; i++) {
+      var s = stats[i];
+
+      var averageCpuUtilization = s.SlaveStatistics.Count() > 0 ? s.SlaveStatistics.Average(x => x.CpuUtilization) : 0.0;
+      cpuUtilizationChart.Series[0].Points.Add(new DataPoint(s.TimeStamp.ToOADate(), averageCpuUtilization));
+
+      var cores = s.SlaveStatistics.Sum(x => x.Cores);
+
+      var usedCores = cores - s.SlaveStatistics.Sum(x => x.FreeCores);
+      coresChart.Series[0].Points.AddXY(s.TimeStamp.ToOADate(), cores);
+      coresChart.Series[1].Points.AddXY(s.TimeStamp.ToOADate(), usedCores);
+
+      var memory = s.SlaveStatistics.Sum(x => x.Memory);
+      var usedMemory = memory - s.SlaveStatistics.Sum(x => x.FreeMemory);
+      memoryChart.Series[0].Points.AddXY(s.TimeStamp.ToOADate(), memory/1024);
+      memoryChart.Series[1].Points.AddXY(s.TimeStamp.ToOADate(), usedMemory/1024);
+
+      if (i > 0) {
         var execTime = new TimeSpan(s.UserStatistics.Sum(x => x.ExecutionTime.Ticks));
-        sb.AppendLine(string.Format("{0}: Cores: {1}, UsedCores: {2}, TotalExecutionTime: {3}<br/>", s.TimeStamp.ToString(), cores, usdCores, execTime.ToString()));
+        var execTimePrev = new TimeSpan(stats[i - 1].UserStatistics.Sum(x => x.ExecutionTime.Ticks));
+        var execTimeDifference = execTimePrev - execTime;
+
+        var timeDifference = stats[i - 1].TimeStamp - s.TimeStamp; // the difference between statistic entries is not alway exactly 1 minute
+        var speedup = execTimeDifference.TotalMinutes / timeDifference.TotalMinutes;
+        speedupChartMinutes.Series[0].Points.AddXY(s.TimeStamp.ToOADate(), speedup);
       }
-      i++;
+      if (i - 60 >= 0) {
+        var execTime = new TimeSpan(s.UserStatistics.Sum(x => x.ExecutionTime.Ticks));
+        var execTimePrev = new TimeSpan(stats[i - 60].UserStatistics.Sum(x => x.ExecutionTime.Ticks));
+        var execTimeDifference = execTimePrev - execTime;
+
+        var timeDifference = stats[i - 60].TimeStamp - s.TimeStamp; // the difference between statistic entries is not alway exactly 1 minute
+        var speedup = execTimeDifference.TotalMinutes / timeDifference.TotalMinutes;
+        speedupChartHours.Series[0].Points.AddXY(s.TimeStamp.ToOADate(), speedup);
+      }
     }
-    statisticsLabel.Text = sb.ToString();
+  }
+
+  protected void daysDropDownList_SelectedIndexChanged(object sender, EventArgs e) {
+
   }
 }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Web.config
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Web.config	(revision 6457)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Web.config	(revision 6458)
@@ -1,113 +1,114 @@
-﻿<?xml version="1.0"?>
+<?xml version="1.0"?>
 <configuration>
-
-  <configSections>
-    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
-      <section name="HeuristicLab.Services.Hive.DataAccess.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
-      <section name="HeuristicLab.Services.Hive.Common.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
-    </sectionGroup>
-  </configSections>
-
-  <applicationSettings>
-    <HeuristicLab.Services.Hive.DataAccess.Settings>
-      <!-- Timeout for long running database command (storing or loading jobData) -->
-      <setting name="LongRunningDatabaseCommandTimeout" serializeAs="String">
-        <value>00:05:33</value>
-      </setting>
-    </HeuristicLab.Services.Hive.DataAccess.Settings>
-    
-    <HeuristicLab.Services.Hive.Common.Settings>
-      <!-- If a slave does not send a heartbeat for this time, it is set offline which means all of its jobs are rescheduled -->
-      <setting name="SlaveHeartbeatTimeout" serializeAs="String">
-        <value>00:01:00</value>
-      </setting>
-
-      <!-- When a job is in state `Calculating` this is the maximum time it does not have to send heartbeats, otherwise its rescheduled -->
-      <setting name="CalculatingJobHeartbeatTimeout" serializeAs="String">
-        <value>00:05:30</value>
-      </setting>
-
-      <!-- When a job is in state `Transferring` this is the maximum time it does not have to send heartbeats, otherwise its rescheduled --> 
-      <setting name="TransferringJobHeartbeatTimeout" serializeAs="String">
-        <value>00:05:30</value>
-      </setting>
-    </HeuristicLab.Services.Hive.Common.Settings>
-  </applicationSettings>
-  
-  <connectionStrings>
-    <add name="HeuristicLab.Authentication" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=HeuristicLab.Authentication"/>
-  </connectionStrings>
-  
-  <system.web>
-    <compilation debug="true" targetFramework="4.0" />
-    <membership>
-      <providers>
-        <clear/>
-        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="HeuristicLab.Authentication" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="HeuristicLab.Authentication"/>
-      </providers>
-    </membership>
-    <roleManager enabled="true">
-      <providers>
-        <clear/>
-        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="HeuristicLab.Authentication" applicationName="HeuristicLab.Authentication"/>
-      </providers>
-    </roleManager>
-    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
-    <httpRuntime maxRequestLength="1048576" />
-  </system.web>
-  
-  <system.serviceModel>
-    <diagnostics>
-      <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="3000"/>
-    </diagnostics>
-    
-    <bindings>
-      <wsHttpBinding>
-        <binding name="WSHttpBinding_IHiveService"
-		             receiveTimeout="00:10:00"
-                 sendTimeout="00:10:00"
-		             maxBufferPoolSize="2147483647"
-		             maxReceivedMessageSize="2147483647">
-          <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" />
-          <security mode="Message">
-            <transport clientCredentialType="Certificate"/>
-            <message clientCredentialType="UserName" />
-          </security>
-        </binding>
-      </wsHttpBinding>
-    </bindings>
-    
-    <behaviors>
-      <serviceBehaviors>
-        <behavior name="ServiceBehaviour_IHiveService">
-          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
-          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
-          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
-          <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true" />
-          <serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="AspNetSqlRoleProvider" />
-          <serviceCredentials>
-            <serviceCertificate findValue="localhost" x509FindType="FindBySubjectName" />
-            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="AspNetSqlMembershipProvider" />
-          </serviceCredentials>
-          <serviceSecurityAudit auditLogLocation="Application" suppressAuditFailure="false" messageAuthenticationAuditLevel="SuccessOrFailure" />
-          <serviceThrottling maxConcurrentCalls="100" />
-          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
-        </behavior>
-      </serviceBehaviors>
-    </behaviors>
-
-    <services>
-      <service behaviorConfiguration="ServiceBehaviour_IHiveService" name="HeuristicLab.Services.Hive.HiveService">
-        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" name="MexEndpoint" contract="IMetadataExchange" />
-        <endpoint binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IHiveService" name="WSHttpBinding_IHiveService" contract="HeuristicLab.Services.Hive.Common.ServiceContracts.IHiveService" />
-      </service>
-    </services>
-    
-    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
-  </system.serviceModel>
-
-  <system.webServer>
-    <directoryBrowse enabled="true"/>    
-  </system.webServer>
-  
+	<configSections>
+		<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+			<section name="HeuristicLab.Services.Hive.DataAccess.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
+			<section name="HeuristicLab.Services.Hive.Common.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
+		</sectionGroup>
+	</configSections>
+	<appSettings>
+  <add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
+ </appSettings>
+ <applicationSettings>
+		<HeuristicLab.Services.Hive.DataAccess.Settings>
+			<!-- Timeout for long running database command (storing or loading jobData) -->
+			<setting name="LongRunningDatabaseCommandTimeout" serializeAs="String">
+				<value>00:05:33</value>
+			</setting>
+		</HeuristicLab.Services.Hive.DataAccess.Settings>
+		<HeuristicLab.Services.Hive.Common.Settings>
+			<!-- If a slave does not send a heartbeat for this time, it is set offline which means all of its jobs are rescheduled -->
+			<setting name="SlaveHeartbeatTimeout" serializeAs="String">
+				<value>00:01:00</value>
+			</setting>
+			<!-- When a job is in state `Calculating` this is the maximum time it does not have to send heartbeats, otherwise its rescheduled -->
+			<setting name="CalculatingJobHeartbeatTimeout" serializeAs="String">
+				<value>00:05:30</value>
+			</setting>
+			<!-- When a job is in state `Transferring` this is the maximum time it does not have to send heartbeats, otherwise its rescheduled -->
+			<setting name="TransferringJobHeartbeatTimeout" serializeAs="String">
+				<value>00:05:30</value>
+			</setting>
+		</HeuristicLab.Services.Hive.Common.Settings>
+	</applicationSettings>
+	<connectionStrings>
+		<add name="HeuristicLab.Authentication" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=HeuristicLab.Authentication"/>
+	</connectionStrings>
+	<system.web>
+		<httpHandlers>
+   <add path="ChartImg.axd" verb="GET,HEAD,POST" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
+    validate="false" />
+  </httpHandlers>
+  <compilation debug="true" targetFramework="4.0">
+			<assemblies>
+				<add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></assemblies></compilation>
+		<membership>
+			<providers>
+				<clear/>
+				<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="HeuristicLab.Authentication" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="HeuristicLab.Authentication"/>
+			</providers>
+		</membership>
+		<roleManager enabled="true">
+			<providers>
+				<clear/>
+				<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="HeuristicLab.Authentication" applicationName="HeuristicLab.Authentication"/>
+			</providers>
+		</roleManager>
+		<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
+   <controls>
+    <add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting"
+     assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+   </controls>
+  </pages>
+		<httpRuntime maxRequestLength="1048576"/>
+	</system.web>
+	<system.serviceModel>
+		<diagnostics>
+			<messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="3000"/>
+		</diagnostics>
+		<bindings>
+			<wsHttpBinding>
+				<binding name="WSHttpBinding_IHiveService" receiveTimeout="00:10:00" sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
+					<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647"/>
+					<security mode="Message">
+						<transport clientCredentialType="Certificate"/>
+						<message clientCredentialType="UserName"/>
+					</security>
+				</binding>
+			</wsHttpBinding>
+		</bindings>
+		<behaviors>
+			<serviceBehaviors>
+				<behavior name="ServiceBehaviour_IHiveService">
+					<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
+					<serviceMetadata httpGetEnabled="true" httpsGetEnabled="false"/>
+					<!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
+					<serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true"/>
+					<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="AspNetSqlRoleProvider"/>
+					<serviceCredentials>
+						<serviceCertificate findValue="localhost" x509FindType="FindBySubjectName"/>
+						<userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="AspNetSqlMembershipProvider"/>
+					</serviceCredentials>
+					<serviceSecurityAudit auditLogLocation="Application" suppressAuditFailure="false" messageAuthenticationAuditLevel="SuccessOrFailure"/>
+					<serviceThrottling maxConcurrentCalls="100"/>
+					<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
+				</behavior>
+			</serviceBehaviors>
+		</behaviors>
+		<services>
+			<service behaviorConfiguration="ServiceBehaviour_IHiveService" name="HeuristicLab.Services.Hive.HiveService">
+				<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" name="MexEndpoint" contract="IMetadataExchange"/>
+				<endpoint binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IHiveService" name="WSHttpBinding_IHiveService" contract="HeuristicLab.Services.Hive.Common.ServiceContracts.IHiveService"/>
+			</service>
+		</services>
+		<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
+	</system.serviceModel>
+	<system.webServer>
+  <directoryBrowse enabled="true" />
+  <handlers>
+   <remove name="ChartImageHandler" />
+   <add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD,POST"
+    path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+  </handlers>
+ </system.webServer>
 </configuration>
