Changeset 12878


Ignore:
Timestamp:
08/18/15 10:08:58 (4 years ago)
Author:
ascheibe
Message:

#2388 merged hive statistics branch into trunk

Location:
trunk/sources
Files:
17 deleted
45 edited
17 copied

Legend:

Unmodified
Added
Removed
  • trunk/sources

  • trunk/sources/HeuristicLab 3.3 Services.sln

    r12479 r12878  
    6464  ProjectSection(SolutionItems) = preProject
    6565    .nuget\NuGet.Config = .nuget\NuGet.Config
    66     .nuget\NuGet.exe = .nuget\NuGet.exe
    6766    .nuget\NuGet.targets = .nuget\NuGet.targets
    6867  EndProjectSection
    6968EndProject
    7069Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.GeoIP", "HeuristicLab.ExtLibs\HeuristicLab.GeoIP\1.12\HeuristicLab.GeoIP.csproj", "{BE9B0229-9150-49A4-AEA6-BB58E055992F}"
     70EndProject
     71Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.WebApp.Statistics-3.3", "HeuristicLab.Services.WebApp.Statistics\3.3\HeuristicLab.Services.WebApp.Statistics-3.3.csproj", "{1BC54353-7D4C-4734-BAA9-3D11B3242B59}"
     72EndProject
     73Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.WebApp.Maintenance-3.3", "HeuristicLab.Services.WebApp.Maintenance\3.3\HeuristicLab.Services.WebApp.Maintenance-3.3.csproj", "{3F22B7DA-FDDB-48F0-8BB7-0ABA5120FC87}"
    7174EndProject
    7275Global
     
    243246    {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Release|x86.ActiveCfg = Release|x86
    244247    {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Release|x86.Build.0 = Release|x86
     248    {1BC54353-7D4C-4734-BAA9-3D11B3242B59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     249    {1BC54353-7D4C-4734-BAA9-3D11B3242B59}.Debug|Any CPU.Build.0 = Debug|Any CPU
     250    {1BC54353-7D4C-4734-BAA9-3D11B3242B59}.Debug|x64.ActiveCfg = Debug|x64
     251    {1BC54353-7D4C-4734-BAA9-3D11B3242B59}.Debug|x64.Build.0 = Debug|x64
     252    {1BC54353-7D4C-4734-BAA9-3D11B3242B59}.Debug|x86.ActiveCfg = Debug|x86
     253    {1BC54353-7D4C-4734-BAA9-3D11B3242B59}.Debug|x86.Build.0 = Debug|x86
     254    {1BC54353-7D4C-4734-BAA9-3D11B3242B59}.Release|Any CPU.ActiveCfg = Release|Any CPU
     255    {1BC54353-7D4C-4734-BAA9-3D11B3242B59}.Release|Any CPU.Build.0 = Release|Any CPU
     256    {1BC54353-7D4C-4734-BAA9-3D11B3242B59}.Release|x64.ActiveCfg = Release|x64
     257    {1BC54353-7D4C-4734-BAA9-3D11B3242B59}.Release|x64.Build.0 = Release|x64
     258    {1BC54353-7D4C-4734-BAA9-3D11B3242B59}.Release|x86.ActiveCfg = Release|x86
     259    {1BC54353-7D4C-4734-BAA9-3D11B3242B59}.Release|x86.Build.0 = Release|x86
     260    {3F22B7DA-FDDB-48F0-8BB7-0ABA5120FC87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     261    {3F22B7DA-FDDB-48F0-8BB7-0ABA5120FC87}.Debug|Any CPU.Build.0 = Debug|Any CPU
     262    {3F22B7DA-FDDB-48F0-8BB7-0ABA5120FC87}.Debug|x64.ActiveCfg = Debug|x64
     263    {3F22B7DA-FDDB-48F0-8BB7-0ABA5120FC87}.Debug|x64.Build.0 = Debug|x64
     264    {3F22B7DA-FDDB-48F0-8BB7-0ABA5120FC87}.Debug|x86.ActiveCfg = Debug|x86
     265    {3F22B7DA-FDDB-48F0-8BB7-0ABA5120FC87}.Debug|x86.Build.0 = Debug|x86
     266    {3F22B7DA-FDDB-48F0-8BB7-0ABA5120FC87}.Release|Any CPU.ActiveCfg = Release|Any CPU
     267    {3F22B7DA-FDDB-48F0-8BB7-0ABA5120FC87}.Release|Any CPU.Build.0 = Release|Any CPU
     268    {3F22B7DA-FDDB-48F0-8BB7-0ABA5120FC87}.Release|x64.ActiveCfg = Release|Any CPU
     269    {3F22B7DA-FDDB-48F0-8BB7-0ABA5120FC87}.Release|x86.ActiveCfg = Release|Any CPU
    245270  EndGlobalSection
    246271  GlobalSection(SolutionProperties) = preSolution
  • trunk/sources/HeuristicLab.Services.Hive

  • trunk/sources/HeuristicLab.Services.Hive.DataAccess

  • trunk/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj

    r11623 r12878  
    104104  <ItemGroup>
    105105    <None Include="Plugin.cs.frame" />
     106    <Compile Include="Daos\AssignedResourceDao.cs" />
     107    <Compile Include="Daos\DowntimeDao.cs" />
     108    <Compile Include="Daos\GenericDao.cs" />
     109    <Compile Include="Daos\HiveStatistics\DimClientDao.cs" />
     110    <Compile Include="Daos\HiveStatistics\DimJobDao.cs" />
     111    <Compile Include="Daos\HiveStatistics\DimTimeDao.cs" />
     112    <Compile Include="Daos\HiveStatistics\DimUserDao.cs" />
     113    <Compile Include="Daos\HiveStatistics\FactClientInfoDao.cs" />
     114    <Compile Include="Daos\HiveStatistics\FactTaskDao.cs" />
     115    <Compile Include="Daos\JobDao.cs" />
     116    <Compile Include="Daos\JobPermissionDao.cs" />
     117    <Compile Include="Daos\LifecycleDao.cs" />
     118    <Compile Include="Daos\PluginDao.cs" />
     119    <Compile Include="Daos\PluginDataDao.cs" />
     120    <Compile Include="Daos\RequiredPluginDao.cs" />
     121    <Compile Include="Daos\ResourceDao.cs" />
     122    <Compile Include="Daos\ResourcePermissionDao.cs" />
     123    <Compile Include="Daos\SlaveDao.cs" />
     124    <Compile Include="Daos\SlaveGroupDao.cs" />
     125    <Compile Include="Daos\StateLogDao.cs" />
     126    <Compile Include="Daos\TaskDao.cs" />
     127    <Compile Include="Daos\TaskDataDao.cs" />
     128    <Compile Include="Daos\UserPriorityDao.cs" />
     129    <Compile Include="Data\TableInformation.cs" />
     130    <Compile Include="Interfaces\IGenericDao.cs" />
    106131    <Compile Include="Enums\Command.cs" />
    107132    <Compile Include="Enums\DowntimeType.cs" />
    108133    <Compile Include="Enums\CpuArchitecture.cs" />
     134    <Compile Include="Interfaces\IPersistenceManager.cs" />
     135    <Compile Include="Manager\PersistenceManager.cs" />
    109136    <Compile Include="Plugin.cs" />
    110137    <Compile Include="HiveDataContext.cs">
     
    116143      <DependentUpon>HiveDataContext.dbml</DependentUpon>
    117144    </Compile>
    118     <Compile Include="ITransactionManager.cs" />
    119145    <Compile Include="Enums\TaskState.cs" />
    120146    <Compile Include="Logger.cs" />
     
    128154    </Compile>
    129155    <Compile Include="Enums\SlaveState.cs" />
    130     <Compile Include="TransactionManager.cs" />
    131156  </ItemGroup>
    132157  <ItemGroup>
     
    155180  <ItemGroup>
    156181    <Content Include="SQL Scripts\Initialize Hive Database.sql" />
    157     <Content Include="SQL Scripts\Migrate to Filestream.sql" />
    158182    <Content Include="SQL Scripts\Prepare Hive Database.sql" />
    159183  </ItemGroup>
     184  <ItemGroup />
    160185  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
    161186  <PropertyGroup>
  • trunk/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.cs

    r12012 r12878  
    3030      throw new NotImplementedException();
    3131    }
     32
     33    partial void OnCreated() {
     34      LogFactory.GetLogger(this.GetType().Namespace).Log("HiveDataContext created");
     35    }
    3236  }
    3337}
  • trunk/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml

    r9665 r12878  
    156156    </Type>
    157157  </Table>
    158   <Table Name="" Member="DeletedJobStatistics">
    159     <Type Name="DeletedJobStatistics">
    160       <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
    161       <Column Name="ExecutionTimeS" Storage="_ExecutionTime" Type="System.Double" DbType="float NOT NULL" CanBeNull="false" />
    162       <Column Name="ExecutionTimeSFinishedJobs" Storage="_ExecutionTimeFinishedJobs" Type="System.Double" DbType="float NOT NULL" CanBeNull="false" />
    163       <Column Name="StartToEndTimeS" Storage="_StartToEndTime" Type="System.Double" DbType="float NOT NULL" CanBeNull="false" />
    164       <Column Name="DeletedJobStatisticsId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
    165     </Type>
    166   </Table>
    167   <Table Name="" Member="UserStatistics">
    168     <Type Name="UserStatistics">
    169       <Column Name="StatisticsId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
    170       <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
    171       <Column Name="ExecutionTimeMs" Storage="_ExecutionTime" Type="System.Double" DbType="float NOT NULL" CanBeNull="false" />
    172       <Column Name="UsedCores" Storage="_CoresUsed" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
    173       <Column Name="ExecutionTimeMsFinishedJobs" Storage="_ExecutionTimeFinishedJobs" Type="System.Double" DbType="float NOT NULL" CanBeNull="false" />
    174       <Column Name="StartToEndTimeMs" Storage="_StartToEndTime" Type="System.Double" DbType="float NOT NULL" CanBeNull="false" />
    175       <Association Name="Statistics_UserStatistics" Member="Statistics" ThisKey="StatisticsId" OtherKey="StatisticsId" Type="Statistics" IsForeignKey="true" />
    176     </Type>
    177   </Table>
    178   <Table Name="" Member="SlaveStatistics">
    179     <Type Name="SlaveStatistics">
    180       <Column Name="StatisticsId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
    181       <Column Name="SlaveId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
    182       <Column Name="Cores" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
    183       <Column Name="FreeCores" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
    184       <Column Name="CpuUtilization" Type="System.Double" DbType="float NOT NULL" CanBeNull="false" />
    185       <Column Name="Memory" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
    186       <Column Name="FreeMemory" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
    187       <Association Name="Statistics_SlaveStatistics" Member="Statistics" ThisKey="StatisticsId" OtherKey="StatisticsId" Type="Statistics" IsForeignKey="true" />
    188     </Type>
    189   </Table>
    190   <Table Name="" Member="Statistics">
    191     <Type Name="Statistics">
    192       <Column Name="StatisticsId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
    193       <Column Name="Timestamp" Type="System.DateTime" CanBeNull="false" />
    194       <Association Name="Statistics_UserStatistics" Member="UserStatistics" ThisKey="StatisticsId" OtherKey="StatisticsId" Type="UserStatistics" />
    195       <Association Name="Statistics_SlaveStatistics" Member="SlaveStatistics" ThisKey="StatisticsId" OtherKey="StatisticsId" Type="SlaveStatistics" />
    196     </Type>
    197   </Table>
    198158  <Table Name="dbo.ResourcePermission" Member="ResourcePermissions">
    199159    <Type Name="ResourcePermission">
     
    210170    </Type>
    211171  </Table>
     172  <Table Name="[statistics].DimClient" Member="DimClients">
     173    <Type Name="DimClient">
     174      <Column Name="Id" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
     175      <Column Name="Name" Type="System.String" DbType="VarChar(MAX) NOT NULL" CanBeNull="false" />
     176      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
     177      <Column Name="ExpirationTime" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
     178      <Column Name="ResourceGroupId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
     179      <Column Name="ResourceGroup2Id" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
     180      <Column Name="GroupName" Type="System.String" CanBeNull="true" />
     181      <Column Name="GroupName2" Type="System.String" CanBeNull="true" />
     182      <Association Name="DimClient_FactTask" Member="FactTasks" ThisKey="Id" OtherKey="LastClientId" Type="FactTask" />
     183      <Association Name="DimClient_FactClientInfo" Member="FactClientInfos" ThisKey="Id" OtherKey="ClientId" Type="FactClientInfo" />
     184    </Type>
     185  </Table>
     186  <Table Name="[statistics].FactTask" Member="FactTasks">
     187    <Type Name="FactTask">
     188      <Column Name="TaskId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
     189      <Column Name="CalculatingTime" Storage="_TotalRuntime" Type="System.Int64" DbType="INT NOT NULL" CanBeNull="false" />
     190      <Column Name="WaitingTime" Storage="_TotalWaitingTime" Type="System.Int64" DbType="INT NOT NULL" CanBeNull="false" />
     191      <Column Name="TransferTime" Storage="_TotalTransferTime" Type="System.Int64" DbType="INT NOT NULL" CanBeNull="false" />
     192      <Column Name="NumCalculationRuns" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
     193      <Column Name="NumRetries" Storage="_NumFails" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
     194      <Column Name="CoresRequired" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
     195      <Column Name="MemoryRequired" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
     196      <Column Name="Priority" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
     197      <Column Name="LastClientId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="true" />
     198      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
     199      <Column Name="EndTime" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="true" />
     200      <Column Name="TaskState" Type="global::HeuristicLab.Services.Hive.DataAccess.TaskState" DbType="varchar(30)" CanBeNull="false" />
     201      <Column Name="Exception" Type="System.String" DbType="varchar(MAX)" CanBeNull="true" />
     202      <Column Name="InitialWaitingTime" Storage="_InitialWaitingTimeMs" Type="System.Int64" DbType="INT" CanBeNull="false" />
     203      <Column Name="StartTime" Type="System.DateTime" CanBeNull="true" />
     204      <Association Name="DimClient_FactTask" Member="DimClient" ThisKey="LastClientId" OtherKey="Id" Type="DimClient" IsForeignKey="true" />
     205      <Association Name="DimJob_FactTask" Member="DimJob" ThisKey="JobId" OtherKey="JobId" Type="DimJob" IsForeignKey="true" />
     206    </Type>
     207  </Table>
     208  <Table Name="[statistics].DimJob" Member="DimJobs">
     209    <Type Name="DimJob">
     210      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
     211      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
     212      <Column Name="JobName" Type="System.String" DbType="VarChar(MAX) NOT NULL" CanBeNull="false" />
     213      <Column Name="UserName" Type="System.String" DbType="VarChar(MAX) NOT NULL" CanBeNull="false" />
     214      <Column Name="DateCreated" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
     215      <Column Name="TotalTasks" Type="System.Int32" DbType="INT NOT NULL" CanBeNull="false" />
     216      <Column Name="CompletedTasks" Type="System.Int32" DbType="INT NOT NULL" CanBeNull="false" />
     217      <Column Name="DateCompleted" Type="System.DateTime" DbType="DateTime NULL" CanBeNull="true" />
     218      <Association Name="DimJob_FactTask" Member="FactTasks" ThisKey="JobId" OtherKey="JobId" Type="FactTask" />
     219    </Type>
     220  </Table>
     221  <Table Name="[statistics].DimTime" Member="DimTimes">
     222    <Type Name="DimTime">
     223      <Column Name="Time" Type="System.DateTime" DbType="DateTime NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
     224      <Column Name="Hour" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
     225      <Column Name="Day" Type="System.DateTime" DbType="Date NOT NULL" CanBeNull="false" />
     226      <Column Name="Month" Type="System.DateTime" DbType="Date NOT NULL" CanBeNull="false" />
     227      <Column Name="Year" Type="System.DateTime" DbType="Date NOT NULL" CanBeNull="false" />
     228      <Column Name="Minute" Type="System.DateTime" CanBeNull="false" />
     229      <Association Name="DimTime_FactClientInfo" Member="FactClientInfos" ThisKey="Time" OtherKey="Time" Type="FactClientInfo" />
     230    </Type>
     231  </Table>
     232  <Table Name="[statistics].DimUser" Member="DimUsers">
     233    <Type Name="DimUser">
     234      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
     235      <Column Name="Name" Type="System.String" DbType="VarChar(MAX) NOT NULL" CanBeNull="false" />
     236      <Association Name="DimUser_FactClientInfo" Member="FactClientInfos" ThisKey="UserId" OtherKey="UserId" Type="FactClientInfo" />
     237    </Type>
     238  </Table>
     239  <Table Name="[statistics].FactClientInfo" Member="FactClientInfos">
     240    <Type Name="FactClientInfo">
     241      <Column Name="ClientId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
     242      <Column Name="Time" Type="System.DateTime" DbType="DateTime NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
     243      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier NULL" IsPrimaryKey="true" CanBeNull="false" />
     244      <Column Name="NumUsedCores" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
     245      <Column Name="NumTotalCores" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
     246      <Column Name="UsedMemory" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
     247      <Column Name="TotalMemory" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
     248      <Column Name="CpuUtilization" Type="System.Double" DbType="Float NOT NULL" CanBeNull="false" />
     249      <Column Name="IdleTime" Storage="_TotalTimeIdle" Type="System.Int64" DbType="INT NOT NULL" CanBeNull="false" />
     250      <Column Name="OfflineTime" Storage="_TotalTimeOffline" Type="System.Int64" DbType="INT NOT NULL" CanBeNull="false" />
     251      <Column Name="UnavailableTime" Storage="_TotalTimeUnavailable" Type="System.Int64" DbType="INT NOT NULL" CanBeNull="false" />
     252      <Column Name="SlaveState" Type="global::HeuristicLab.Services.Hive.DataAccess.SlaveState" DbType="VarChar(15)" CanBeNull="false" />
     253      <Column Name="IsAllowedToCalculate" Type="System.Boolean" DbType="BIT" CanBeNull="false" />
     254      <Association Name="DimClient_FactClientInfo" Member="DimClient" ThisKey="ClientId" OtherKey="Id" Type="DimClient" IsForeignKey="true" />
     255      <Association Name="DimTime_FactClientInfo" Member="DimTime" ThisKey="Time" OtherKey="Time" Type="DimTime" IsForeignKey="true" />
     256      <Association Name="DimUser_FactClientInfo" Member="DimUser" ThisKey="UserId" OtherKey="UserId" Type="DimUser" IsForeignKey="true" />
     257    </Type>
     258  </Table>
    212259</Database>
  • trunk/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml.layout

    r9665 r12878  
    11<?xml version="1.0" encoding="utf-8"?>
    2 <ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 24.25, 8.5" name="HiveDataContext">
     2<ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 15.75, 17.875" name="HiveDataContext">
    33  <DataContextMoniker Name="/HiveDataContext" />
    44  <nestedChildShapes>
    5     <classShape Id="a929c9dc-69f4-4488-ba1c-a2342bf81d89" absoluteBounds="8.875, 4.5, 2, 1.0961531575520827">
     5    <classShape Id="a929c9dc-69f4-4488-ba1c-a2342bf81d89" absoluteBounds="8.875, 4.5, 2, 1.1939925130208327">
    66      <DataClassMoniker Name="/HiveDataContext/AssignedResource" />
    77      <nestedChildShapes>
    8         <elementListCompartment Id="8b005775-f0ee-41b0-ae10-6d1151003708" absoluteBounds="8.89, 4.9600000000000009, 1.9700000000000002, 0.53615315755208326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    9       </nestedChildShapes>
    10     </classShape>
    11     <classShape Id="7d998e56-4fba-41ca-a1a8-1dcdb9068edf" absoluteBounds="8.875, 5.875, 2, 1.7535424804687496">
     8        <elementListCompartment Id="8b005775-f0ee-41b0-ae10-6d1151003708" absoluteBounds="8.89, 4.9600000000000009, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     9      </nestedChildShapes>
     10    </classShape>
     11    <classShape Id="7d998e56-4fba-41ca-a1a8-1dcdb9068edf" absoluteBounds="8.875, 5.875, 2, 1.9631982421874996">
    1212      <DataClassMoniker Name="/HiveDataContext/Plugin" />
    1313      <nestedChildShapes>
    14         <elementListCompartment Id="ec4ba325-6dff-4418-baad-59af81ae2024" absoluteBounds="8.89, 6.3350000000000009, 1.9700000000000002, 1.19354248046875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    15       </nestedChildShapes>
    16     </classShape>
    17     <classShape Id="97b00810-fa30-457e-b484-b4e80b22f91b" absoluteBounds="6.5, 5.875, 2, 1.2605004882812496">
     14        <elementListCompartment Id="ec4ba325-6dff-4418-baad-59af81ae2024" absoluteBounds="8.89, 6.3350000000000009, 1.9700000000000002, 1.4031982421875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     15      </nestedChildShapes>
     16    </classShape>
     17    <classShape Id="97b00810-fa30-457e-b484-b4e80b22f91b" absoluteBounds="6.5, 5.875, 2, 1.3862939453124996">
    1818      <DataClassMoniker Name="/HiveDataContext/RequiredPlugin" />
    1919      <nestedChildShapes>
    20         <elementListCompartment Id="df6451e5-069e-4ca0-a909-61b8213b5047" absoluteBounds="6.5150000000000006, 6.3350000000000009, 1.9700000000000002, 0.70050048828125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    21       </nestedChildShapes>
    22     </classShape>
    23     <classShape Id="706a4581-6daf-4e71-ae2a-87d50b27a051" absoluteBounds="11.25, 1, 2, 1.75354248046875">
     20        <elementListCompartment Id="df6451e5-069e-4ca0-a909-61b8213b5047" absoluteBounds="6.5150000000000006, 6.3350000000000009, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     21      </nestedChildShapes>
     22    </classShape>
     23    <classShape Id="706a4581-6daf-4e71-ae2a-87d50b27a051" absoluteBounds="11.25, 1, 2, 1.9631982421875">
    2424      <DataClassMoniker Name="/HiveDataContext/Resource" />
    2525      <nestedChildShapes>
    26         <elementListCompartment Id="8c24f5bf-2164-4d0f-832e-1730eb0066df" absoluteBounds="11.265, 1.46, 1.9700000000000002, 1.19354248046875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    27       </nestedChildShapes>
    28     </classShape>
    29     <classShape Id="695bfc39-59f3-4e60-8644-f847964bf62c" absoluteBounds="6.5, 1, 2, 2.9039737955729166">
     26        <elementListCompartment Id="8c24f5bf-2164-4d0f-832e-1730eb0066df" absoluteBounds="11.265, 1.46, 1.9700000000000002, 1.4031982421875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     27      </nestedChildShapes>
     28    </classShape>
     29    <classShape Id="695bfc39-59f3-4e60-8644-f847964bf62c" absoluteBounds="6.5, 1, 2, 3.3093082682291666">
    3030      <DataClassMoniker Name="/HiveDataContext/Task" />
    3131      <nestedChildShapes>
    32         <elementListCompartment Id="a6a30e11-03d1-4869-82e6-b733f4ef9974" absoluteBounds="6.5150000000000006, 1.46, 1.9700000000000002, 2.3439737955729165" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    33       </nestedChildShapes>
    34     </classShape>
    35     <classShape Id="8d5712f7-7a1a-4a89-bd4d-fd60200d3306" absoluteBounds="13.5, 2.5, 2, 2.0822371419270826">
     32        <elementListCompartment Id="a6a30e11-03d1-4869-82e6-b733f4ef9974" absoluteBounds="6.5150000000000006, 1.46, 1.9700000000000002, 2.7493082682291665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     33      </nestedChildShapes>
     34    </classShape>
     35    <classShape Id="8d5712f7-7a1a-4a89-bd4d-fd60200d3306" absoluteBounds="13.5, 2.5, 2, 2.3478011067708326">
    3636      <DataClassMoniker Name="/HiveDataContext/Downtime" />
    3737      <nestedChildShapes>
    38         <elementListCompartment Id="7d8f121b-35bb-4753-a25f-3fac1562e68e" absoluteBounds="13.515, 2.9600000000000009, 1.9700000000000002, 1.5222371419270833" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    39       </nestedChildShapes>
    40     </classShape>
    41     <classShape Id="e6f840cc-2968-4be1-b234-eef624ccacbb" absoluteBounds="4.125, 2.625, 2, 1.7535424804687496">
     38        <elementListCompartment Id="7d8f121b-35bb-4753-a25f-3fac1562e68e" absoluteBounds="13.515, 2.9600000000000009, 1.9700000000000002, 1.7878011067708333" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     39      </nestedChildShapes>
     40    </classShape>
     41    <classShape Id="e6f840cc-2968-4be1-b234-eef624ccacbb" absoluteBounds="4.125, 2.625, 2, 1.9631982421874996">
    4242      <DataClassMoniker Name="/HiveDataContext/Job" />
    4343      <nestedChildShapes>
    44         <elementListCompartment Id="0c65d4e1-256a-4a91-9a57-392f25e4de7f" absoluteBounds="4.1400000000000006, 3.0850000000000009, 1.9700000000000002, 1.19354248046875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    45       </nestedChildShapes>
    46     </classShape>
    47     <classShape Id="26f4edfa-91dd-4941-a058-359f89e567a8" absoluteBounds="8.875, 0.75, 2, 2.9039737955729166">
     44        <elementListCompartment Id="0c65d4e1-256a-4a91-9a57-392f25e4de7f" absoluteBounds="4.1400000000000006, 3.0850000000000009, 1.9700000000000002, 1.4031982421875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     45      </nestedChildShapes>
     46    </classShape>
     47    <classShape Id="26f4edfa-91dd-4941-a058-359f89e567a8" absoluteBounds="8.875, 0.75, 2, 3.3093082682291666">
    4848      <DataClassMoniker Name="/HiveDataContext/Slave" />
    4949      <nestedChildShapes>
    50         <elementListCompartment Id="1e61f36b-08dc-4df7-8594-c9dcd95c0791" absoluteBounds="8.89, 1.21, 1.9700000000000002, 2.3439737955729165" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    51       </nestedChildShapes>
    52     </classShape>
    53     <classShape Id="bbd91675-92f2-4a69-8429-0950008fc8a4" absoluteBounds="13.5, 1, 2, 0.76745849609375">
     50        <elementListCompartment Id="1e61f36b-08dc-4df7-8594-c9dcd95c0791" absoluteBounds="8.89, 1.21, 1.9700000000000002, 2.7493082682291665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     51      </nestedChildShapes>
     52    </classShape>
     53    <classShape Id="bbd91675-92f2-4a69-8429-0950008fc8a4" absoluteBounds="13.5, 1, 2, 0.8093896484375">
    5454      <DataClassMoniker Name="/HiveDataContext/SlaveGroup" />
    5555      <nestedChildShapes>
    56         <elementListCompartment Id="5a790e8f-6e2e-4bf5-bd2b-f8a82224d9d7" absoluteBounds="13.5, 1, 0.125, 0.20745849609375" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     56        <elementListCompartment Id="5a790e8f-6e2e-4bf5-bd2b-f8a82224d9d7" absoluteBounds="13.5, 1, 0.125, 0.2493896484375" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    5757      </nestedChildShapes>
    5858    </classShape>
     
    6969      </nodes>
    7070    </inheritanceConnector>
    71     <associationConnector edgePoints="[(11.8134963640734 : 2.75354248046875); (11.8134963640734 : 3.56770833333333); (11.1119791666667 : 3.56770833333333); (11.1119791666667 : 5.09699625651042); (10.875 : 5.09699625651042)]" manuallyRouted="true" fixedFrom="Algorithm" fixedTo="Algorithm">
     71    <associationConnector edgePoints="[(11.8134963640734 : 2.9631982421875); (11.8134963640734 : 3.56770833333333); (11.1119791666667 : 3.56770833333333); (11.1119791666667 : 5.09699625651042); (10.875 : 5.09699625651042)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
    7272      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_AssignedResource" />
    7373      <nodes>
     
    7676      </nodes>
    7777    </associationConnector>
    78     <classShape Id="6bc13f26-f9a8-4597-b054-35be34190d12" absoluteBounds="4.125, 1, 2, 1.26050048828125">
     78    <classShape Id="6bc13f26-f9a8-4597-b054-35be34190d12" absoluteBounds="4.125, 1, 2, 1.3862939453125">
    7979      <DataClassMoniker Name="/HiveDataContext/TaskData" />
    8080      <nestedChildShapes>
    81         <elementListCompartment Id="a068522c-7974-4679-b356-e33c941c465b" absoluteBounds="4.14, 1.46, 1.9700000000000002, 0.70050048828125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    82       </nestedChildShapes>
    83     </classShape>
    84     <classShape Id="ad25bd0f-80e8-4a06-abd8-190eb678eec7" absoluteBounds="11.25, 5.875, 2, 1.4248478190104166">
     81        <elementListCompartment Id="a068522c-7974-4679-b356-e33c941c465b" absoluteBounds="4.14, 1.46, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     82      </nestedChildShapes>
     83    </classShape>
     84    <classShape Id="ad25bd0f-80e8-4a06-abd8-190eb678eec7" absoluteBounds="11.25, 5.875, 2, 1.5785953776041666">
    8585      <DataClassMoniker Name="/HiveDataContext/PluginData" />
    8686      <nestedChildShapes>
    87         <elementListCompartment Id="acddb513-7de6-4bb4-8335-d6982fb2ef35" absoluteBounds="11.265, 6.3350000000000009, 1.9700000000000002, 0.86484781901041663" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     87        <elementListCompartment Id="acddb513-7de6-4bb4-8335-d6982fb2ef35" absoluteBounds="11.265, 6.3350000000000009, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    8888      </nestedChildShapes>
    8989    </classShape>
     
    109109      </nodes>
    110110    </associationConnector>
    111     <classShape Id="00352397-340e-449a-8e23-6ddd216e8617" absoluteBounds="1.75, 1, 2, 1.9178898111979166">
     111    <classShape Id="00352397-340e-449a-8e23-6ddd216e8617" absoluteBounds="1.75, 1, 2, 2.1554996744791666">
    112112      <DataClassMoniker Name="/HiveDataContext/StateLog" />
    113113      <nestedChildShapes>
    114         <elementListCompartment Id="9a003897-deef-4bb5-b180-4c4bcdb7fadc" absoluteBounds="1.765, 1.46, 1.9700000000000002, 1.3578898111979165" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    115       </nestedChildShapes>
    116     </classShape>
    117     <classShape Id="4d800dc9-1b18-469f-b02c-d4554757c5e1" absoluteBounds="1.75, 3.625, 2, 1.4248478190104166">
     114        <elementListCompartment Id="9a003897-deef-4bb5-b180-4c4bcdb7fadc" absoluteBounds="1.765, 1.46, 1.9700000000000002, 1.5954996744791665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     115      </nestedChildShapes>
     116    </classShape>
     117    <classShape Id="4d800dc9-1b18-469f-b02c-d4554757c5e1" absoluteBounds="1.75, 3.625, 2, 1.5785953776041666">
    118118      <DataClassMoniker Name="/HiveDataContext/JobPermission" />
    119119      <nestedChildShapes>
    120         <elementListCompartment Id="dedd97d3-a9a2-45a2-9b95-d7366fb65a7f" absoluteBounds="1.765, 4.085, 1.9700000000000002, 0.86484781901041663" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    121       </nestedChildShapes>
    122     </classShape>
    123     <associationConnector edgePoints="[(11.25 : 1.98159912109375); (10.9375 : 1.98159912109375); (10.9375 : 0.6875); (2.75 : 0.6875); (2.75 : 1)]" fixedFrom="NotFixed" fixedTo="NotFixed">
     120        <elementListCompartment Id="dedd97d3-a9a2-45a2-9b95-d7366fb65a7f" absoluteBounds="1.765, 4.085, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     121      </nestedChildShapes>
     122    </classShape>
     123    <associationConnector edgePoints="[(11.25 : 1.44547136382195); (11.0260416666667 : 1.44547136382195); (11.0260416666667 : 0.5625); (2.75 : 0.5625); (2.75 : 1)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
    124124      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_StateLog" />
    125125      <nodes>
     
    128128      </nodes>
    129129    </associationConnector>
    130     <classShape Id="b4e7aaa8-a382-4560-a1fd-498de77e9340" absoluteBounds="1.75, 5.5, 2, 1.0961531575520827">
     130    <classShape Id="b4e7aaa8-a382-4560-a1fd-498de77e9340" absoluteBounds="1.75, 5.5, 2, 1.1939925130208327">
    131131      <DataClassMoniker Name="/HiveDataContext/Lifecycle" />
    132132      <nestedChildShapes>
    133         <elementListCompartment Id="03597a2c-5c5d-4c2c-b741-c49ab5aa34d5" absoluteBounds="1.7650000000000001, 5.96, 1.9700000000000002, 0.53615315755208326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    134       </nestedChildShapes>
    135     </classShape>
    136     <classShape Id="cdddf4da-eaef-46a1-9cfd-987bb6b3d03e" absoluteBounds="17, 3.125, 2.5, 1.5891951497395827">
    137       <DataClassMoniker Name="/HiveDataContext/DeletedJobStatistics" />
    138       <nestedChildShapes>
    139         <elementListCompartment Id="b8738381-f696-4dba-a517-47e9cd96a9a6" absoluteBounds="17.015, 3.585, 2.4699999999999998, 1.0291951497395833" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    140       </nestedChildShapes>
    141     </classShape>
    142     <classShape Id="25442617-ff41-49a0-b5d5-4cbe0b2f0f45" absoluteBounds="22, 4.5, 2, 1.7535424804687496">
    143       <DataClassMoniker Name="/HiveDataContext/UserStatistics" />
    144       <nestedChildShapes>
    145         <elementListCompartment Id="6edf08e7-054a-4253-8d4f-5bf2dfec2d29" absoluteBounds="22.015, 4.96, 1.9700000000000002, 1.19354248046875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    146       </nestedChildShapes>
    147     </classShape>
    148     <classShape Id="f78ec989-4862-4bac-87e3-9b0aad4bc037" absoluteBounds="19.875, 4.5, 2, 1.9178898111979166">
    149       <DataClassMoniker Name="/HiveDataContext/SlaveStatistics" />
    150       <nestedChildShapes>
    151         <elementListCompartment Id="98cb46fe-820e-4041-aee8-04e8bed3df23" absoluteBounds="19.89, 4.96, 1.9700000000000002, 1.3578898111979165" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    152       </nestedChildShapes>
    153     </classShape>
    154     <classShape Id="4d9f0606-b7ee-4dae-a8ac-aff88d25a941" absoluteBounds="21, 3, 2, 1.0961531575520827">
    155       <DataClassMoniker Name="/HiveDataContext/Statistics" />
    156       <nestedChildShapes>
    157         <elementListCompartment Id="17821282-8edf-40b7-9065-84f53391d5c1" absoluteBounds="21.015, 3.46, 1.9700000000000002, 0.53615315755208326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    158       </nestedChildShapes>
    159     </classShape>
    160     <associationConnector edgePoints="[(21.4375 : 4.19399251302083); (21.4375 : 4.5)]" fixedFrom="NotFixed" fixedTo="NotFixed">
    161       <AssociationMoniker Name="/HiveDataContext/Statistics/Statistics_SlaveStatistics" />
    162       <nodes>
    163         <classShapeMoniker Id="4d9f0606-b7ee-4dae-a8ac-aff88d25a941" />
    164         <classShapeMoniker Id="f78ec989-4862-4bac-87e3-9b0aad4bc037" />
    165       </nodes>
    166     </associationConnector>
    167     <associationConnector edgePoints="[(22.5 : 4.19399251302083); (22.5 : 4.5)]" fixedFrom="NotFixed" fixedTo="NotFixed">
    168       <AssociationMoniker Name="/HiveDataContext/Statistics/Statistics_UserStatistics" />
    169       <nodes>
    170         <classShapeMoniker Id="4d9f0606-b7ee-4dae-a8ac-aff88d25a941" />
    171         <classShapeMoniker Id="25442617-ff41-49a0-b5d5-4cbe0b2f0f45" />
    172       </nodes>
    173     </associationConnector>
     133        <elementListCompartment Id="03597a2c-5c5d-4c2c-b741-c49ab5aa34d5" absoluteBounds="1.7650000000000001, 5.96, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     134      </nestedChildShapes>
     135    </classShape>
    174136    <associationConnector edgePoints="[(13.25 : 2.73159912109375); (13.5 : 2.73159912109375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
    175137      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_Downtime" />
     
    179141      </nodes>
    180142    </associationConnector>
    181     <associationConnector edgePoints="[(7.96163946463664 : 4.30930826822917); (7.96163946463664 : 5.09699625651042); (8.875 : 5.09699625651042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
     143    <associationConnector edgePoints="[(8.0192961430407 : 3.90397379557292); (8.0192961430407 : 5.04807657877604); (8.875 : 5.04807657877604)]" fixedFrom="NotFixed" fixedTo="NotFixed">
    182144      <AssociationMoniker Name="/HiveDataContext/Task/Task_AssignedResource" />
    183145      <nodes>
     
    186148      </nodes>
    187149    </associationConnector>
    188     <associationConnector edgePoints="[(7.16831973231832 : 4.30930826822917); (7.16831973231832 : 5.875)]" fixedFrom="NotFixed" fixedTo="NotFixed">
     150    <associationConnector edgePoints="[(7.20145120722822 : 3.90397379557292); (7.20145120722822 : 5.875)]" fixedFrom="NotFixed" fixedTo="NotFixed">
    189151      <AssociationMoniker Name="/HiveDataContext/Task/Task_RequiredPlugin" />
    190152      <nodes>
     
    193155      </nodes>
    194156    </associationConnector>
    195     <associationConnector edgePoints="[(7.20923076923077 : 1); (7.20923076923077 : 0.875); (7.80461538461539 : 0.875); (7.80461538461539 : 1)]" fixedFrom="NotFixed" fixedTo="NotFixed">
     157    <associationConnector edgePoints="[(7.20923076923077 : 1); (7.20923076923077 : 0.770833333333333); (7.80461538461539 : 0.770833333333333); (7.80461538461539 : 1)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
    196158      <AssociationMoniker Name="/HiveDataContext/Task/Task_Task" />
    197159      <nodes>
     
    228190      </nodes>
    229191    </associationConnector>
    230     <classShape Id="a3f352be-9f15-4e73-8d44-3e8ac02fb4cf" absoluteBounds="11.25, 3.875, 2, 1.2605004882812496">
     192    <classShape Id="a3f352be-9f15-4e73-8d44-3e8ac02fb4cf" absoluteBounds="11.25, 3.875, 2, 1.3862939453124996">
    231193      <DataClassMoniker Name="/HiveDataContext/ResourcePermission" />
    232194      <nestedChildShapes>
    233         <elementListCompartment Id="45e2f1a8-8a1e-4647-b649-10ec55976ab4" absoluteBounds="11.265, 4.335, 1.9700000000000002, 0.70050048828125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     195        <elementListCompartment Id="45e2f1a8-8a1e-4647-b649-10ec55976ab4" absoluteBounds="11.265, 4.335, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    234196      </nestedChildShapes>
    235197    </classShape>
     
    241203      </nodes>
    242204    </associationConnector>
    243     <classShape Id="f9e8867f-fd15-4a72-8ca4-4f02cd3f141f" absoluteBounds="4.125, 5.5, 2, 1.0961531575520827">
     205    <classShape Id="f9e8867f-fd15-4a72-8ca4-4f02cd3f141f" absoluteBounds="4.125, 5.5, 2, 1.1939925130208327">
    244206      <DataClassMoniker Name="/HiveDataContext/UserPriority" />
    245207      <nestedChildShapes>
    246         <elementListCompartment Id="ee41f516-7d9c-4a1d-a1b8-bbe00a6ffea8" absoluteBounds="4.14, 5.96, 1.9700000000000002, 0.53615315755208326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
    247       </nestedChildShapes>
    248     </classShape>
     208        <elementListCompartment Id="ee41f516-7d9c-4a1d-a1b8-bbe00a6ffea8" absoluteBounds="4.14, 5.96, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     209      </nestedChildShapes>
     210    </classShape>
     211    <classShape Id="b5b919c2-4efc-4f09-8f52-9d541a11e961" absoluteBounds="4.625, 15.25, 2, 2.3478011067708344">
     212      <DataClassMoniker Name="/HiveDataContext/DimClient" />
     213      <nestedChildShapes>
     214        <elementListCompartment Id="30f62a7b-0b16-404e-b972-fb12bfe978dd" absoluteBounds="4.6400000000000006, 15.71, 1.9700000000000002, 1.7878011067708333" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     215      </nestedChildShapes>
     216    </classShape>
     217    <classShape Id="04f52807-ce17-4d65-bd23-cc38c6dfbd7a" absoluteBounds="6.875, 11.25, 2, 3.8862125651041666">
     218      <DataClassMoniker Name="/HiveDataContext/FactTask" />
     219      <nestedChildShapes>
     220        <elementListCompartment Id="63e3ddcb-a6fe-48e0-a674-e650a55a9f2c" absoluteBounds="6.8900000000000006, 11.71, 1.9700000000000002, 3.3262125651041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     221      </nestedChildShapes>
     222    </classShape>
     223    <classShape Id="e0cb8641-a75e-4b9f-beda-3218c56938b1" absoluteBounds="8.125, 8.25, 2, 2.3478011067708344">
     224      <DataClassMoniker Name="/HiveDataContext/DimJob" />
     225      <nestedChildShapes>
     226        <elementListCompartment Id="6b9e8260-7e4b-4357-9c26-eebebfd69504" absoluteBounds="8.14, 8.71, 1.9700000000000002, 1.7878011067708333" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     227      </nestedChildShapes>
     228    </classShape>
     229    <classShape Id="a769f2ac-c8e3-4860-baa5-c46f46c38ed8" absoluteBounds="3.625, 8.5, 2, 1.9631982421875005">
     230      <DataClassMoniker Name="/HiveDataContext/DimTime" />
     231      <nestedChildShapes>
     232        <elementListCompartment Id="694c4a5a-20fb-43a9-bc9a-7b59d794a7fb" absoluteBounds="3.6399999999999997, 8.96, 1.9700000000000002, 1.4031982421875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     233      </nestedChildShapes>
     234    </classShape>
     235    <classShape Id="66c34ced-4fdb-4a1d-b8dd-fe094679b7fb" absoluteBounds="0.625, 8.875, 2, 1.1939925130208344">
     236      <DataClassMoniker Name="/HiveDataContext/DimUser" />
     237      <nestedChildShapes>
     238        <elementListCompartment Id="6181c560-fc74-4d43-b064-a90032bf17a5" absoluteBounds="0.64000000000000012, 9.335, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     239      </nestedChildShapes>
     240    </classShape>
     241    <classShape Id="053a5cff-b18a-4ee5-8d43-48ed5c5dcfad" absoluteBounds="2.625, 11, 2, 3.3093082682291666">
     242      <DataClassMoniker Name="/HiveDataContext/FactClientInfo" />
     243      <nestedChildShapes>
     244        <elementListCompartment Id="0a1cc913-6636-455c-95b3-302f533527db" absoluteBounds="2.6399999999999997, 11.46, 1.9700000000000002, 2.7493082682291665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
     245      </nestedChildShapes>
     246    </classShape>
     247    <associationConnector edgePoints="[(6.625 : 15.25); (6.875 : 15.1362125651042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
     248      <AssociationMoniker Name="/HiveDataContext/DimClient/DimClient_FactTask" />
     249      <nodes>
     250        <classShapeMoniker Id="b5b919c2-4efc-4f09-8f52-9d541a11e961" />
     251        <classShapeMoniker Id="04f52807-ce17-4d65-bd23-cc38c6dfbd7a" />
     252      </nodes>
     253    </associationConnector>
     254    <associationConnector edgePoints="[(8.5 : 10.5978011067708); (8.5 : 11.25)]" fixedFrom="NotFixed" fixedTo="NotFixed">
     255      <AssociationMoniker Name="/HiveDataContext/DimJob/DimJob_FactTask" />
     256      <nodes>
     257        <classShapeMoniker Id="e0cb8641-a75e-4b9f-beda-3218c56938b1" />
     258        <classShapeMoniker Id="04f52807-ce17-4d65-bd23-cc38c6dfbd7a" />
     259      </nodes>
     260    </associationConnector>
     261    <associationConnector edgePoints="[(5.6249975 : 15.25); (5.6249975 : 12.6546541341146); (4.625 : 12.6546541341146)]" fixedFrom="NotFixed" fixedTo="NotFixed">
     262      <AssociationMoniker Name="/HiveDataContext/DimClient/DimClient_FactClientInfo" />
     263      <nodes>
     264        <classShapeMoniker Id="b5b919c2-4efc-4f09-8f52-9d541a11e961" />
     265        <classShapeMoniker Id="053a5cff-b18a-4ee5-8d43-48ed5c5dcfad" />
     266      </nodes>
     267    </associationConnector>
     268    <associationConnector edgePoints="[(4.125 : 10.4631982421875); (4.125 : 11)]" fixedFrom="NotFixed" fixedTo="NotFixed">
     269      <AssociationMoniker Name="/HiveDataContext/DimTime/DimTime_FactClientInfo" />
     270      <nodes>
     271        <classShapeMoniker Id="a769f2ac-c8e3-4860-baa5-c46f46c38ed8" />
     272        <classShapeMoniker Id="053a5cff-b18a-4ee5-8d43-48ed5c5dcfad" />
     273      </nodes>
     274    </associationConnector>
     275    <associationConnector edgePoints="[(1.59375 : 10.0689925130208); (1.59375 : 12.6546541341146); (2.625 : 12.6546541341146)]" fixedFrom="NotFixed" fixedTo="NotFixed">
     276      <AssociationMoniker Name="/HiveDataContext/DimUser/DimUser_FactClientInfo" />
     277      <nodes>
     278        <classShapeMoniker Id="66c34ced-4fdb-4a1d-b8dd-fe094679b7fb" />
     279        <classShapeMoniker Id="053a5cff-b18a-4ee5-8d43-48ed5c5dcfad" />
     280      </nodes>
     281    </associationConnector>
    249282  </nestedChildShapes>
    250283</ordesignerObjectsDiagram>
  • trunk/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.designer.cs

    r11623 r12878  
    33// <auto-generated>
    44//     This code was generated by a tool.
    5 //     Runtime Version:4.0.30319.34014
     5//     Runtime Version:4.0.30319.34209
    66//
    77//     Changes to this file may cause incorrect behavior and will be lost if
     
    6767    partial void UpdateLifecycle(Lifecycle instance);
    6868    partial void DeleteLifecycle(Lifecycle instance);
    69     partial void InsertDeletedJobStatistics(DeletedJobStatistics instance);
    70     partial void UpdateDeletedJobStatistics(DeletedJobStatistics instance);
    71     partial void DeleteDeletedJobStatistics(DeletedJobStatistics instance);
    72     partial void InsertUserStatistics(UserStatistics instance);
    73     partial void UpdateUserStatistics(UserStatistics instance);
    74     partial void DeleteUserStatistics(UserStatistics instance);
    75     partial void InsertSlaveStatistics(SlaveStatistics instance);
    76     partial void UpdateSlaveStatistics(SlaveStatistics instance);
    77     partial void DeleteSlaveStatistics(SlaveStatistics instance);
    78     partial void InsertStatistics(Statistics instance);
    79     partial void UpdateStatistics(Statistics instance);
    80     partial void DeleteStatistics(Statistics instance);
    8169    partial void InsertResourcePermission(ResourcePermission instance);
    8270    partial void UpdateResourcePermission(ResourcePermission instance);
     
    8573    partial void UpdateUserPriority(UserPriority instance);
    8674    partial void DeleteUserPriority(UserPriority instance);
     75    partial void InsertDimClient(DimClient instance);
     76    partial void UpdateDimClient(DimClient instance);
     77    partial void DeleteDimClient(DimClient instance);
     78    partial void InsertFactTask(FactTask instance);
     79    partial void UpdateFactTask(FactTask instance);
     80    partial void DeleteFactTask(FactTask instance);
     81    partial void InsertDimJob(DimJob instance);
     82    partial void UpdateDimJob(DimJob instance);
     83    partial void DeleteDimJob(DimJob instance);
     84    partial void InsertDimTime(DimTime instance);
     85    partial void UpdateDimTime(DimTime instance);
     86    partial void DeleteDimTime(DimTime instance);
     87    partial void InsertDimUser(DimUser instance);
     88    partial void UpdateDimUser(DimUser instance);
     89    partial void DeleteDimUser(DimUser instance);
     90    partial void InsertFactClientInfo(FactClientInfo instance);
     91    partial void UpdateFactClientInfo(FactClientInfo instance);
     92    partial void DeleteFactClientInfo(FactClientInfo instance);
    8793    #endregion
    8894   
     
    213219    }
    214220   
    215     public System.Data.Linq.Table<DeletedJobStatistics> DeletedJobStatistics
    216     {
    217       get
    218       {
    219         return this.GetTable<DeletedJobStatistics>();
    220       }
    221     }
    222    
    223     public System.Data.Linq.Table<UserStatistics> UserStatistics
    224     {
    225       get
    226       {
    227         return this.GetTable<UserStatistics>();
    228       }
    229     }
    230    
    231     public System.Data.Linq.Table<SlaveStatistics> SlaveStatistics
    232     {
    233       get
    234       {
    235         return this.GetTable<SlaveStatistics>();
    236       }
    237     }
    238    
    239     public System.Data.Linq.Table<Statistics> Statistics
    240     {
    241       get
    242       {
    243         return this.GetTable<Statistics>();
    244       }
    245     }
    246    
    247221    public System.Data.Linq.Table<ResourcePermission> ResourcePermissions
    248222    {
     
    258232      {
    259233        return this.GetTable<UserPriority>();
     234      }
     235    }
     236   
     237    public System.Data.Linq.Table<DimClient> DimClients
     238    {
     239      get
     240      {
     241        return this.GetTable<DimClient>();
     242      }
     243    }
     244   
     245    public System.Data.Linq.Table<FactTask> FactTasks
     246    {
     247      get
     248      {
     249        return this.GetTable<FactTask>();
     250      }
     251    }
     252   
     253    public System.Data.Linq.Table<DimJob> DimJobs
     254    {
     255      get
     256      {
     257        return this.GetTable<DimJob>();
     258      }
     259    }
     260   
     261    public System.Data.Linq.Table<DimTime> DimTimes
     262    {
     263      get
     264      {
     265        return this.GetTable<DimTime>();
     266      }
     267    }
     268   
     269    public System.Data.Linq.Table<DimUser> DimUsers
     270    {
     271      get
     272      {
     273        return this.GetTable<DimUser>();
     274      }
     275    }
     276   
     277    public System.Data.Linq.Table<FactClientInfo> FactClientInfos
     278    {
     279      get
     280      {
     281        return this.GetTable<FactClientInfo>();
    260282      }
    261283    }
     
    35283550  }
    35293551 
    3530   [global::System.Data.Linq.Mapping.TableAttribute(Name="")]
    3531   public partial class DeletedJobStatistics : INotifyPropertyChanging, INotifyPropertyChanged
    3532   {
    3533    
    3534     private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
    3535    
    3536     private System.Guid _UserId;
    3537    
    3538     private double _ExecutionTime;
    3539    
    3540     private double _ExecutionTimeFinishedJobs;
    3541    
    3542     private double _StartToEndTime;
    3543    
    3544     private System.Guid _DeletedJobStatisticsId;
    3545    
    3546     #region Extensibility Method Definitions
    3547     partial void OnLoaded();
    3548     partial void OnValidate(System.Data.Linq.ChangeAction action);
    3549     partial void OnCreated();
    3550     partial void OnUserIdChanging(System.Guid value);
    3551     partial void OnUserIdChanged();
    3552     partial void OnExecutionTimeSChanging(double value);
    3553     partial void OnExecutionTimeSChanged();
    3554     partial void OnExecutionTimeSFinishedJobsChanging(double value);
    3555     partial void OnExecutionTimeSFinishedJobsChanged();
    3556     partial void OnStartToEndTimeSChanging(double value);
    3557     partial void OnStartToEndTimeSChanged();
    3558     partial void OnDeletedJobStatisticsIdChanging(System.Guid value);
    3559     partial void OnDeletedJobStatisticsIdChanged();
    3560     #endregion
    3561    
    3562     public DeletedJobStatistics()
    3563     {
    3564       OnCreated();
    3565     }
    3566    
    3567     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier NOT NULL")]
    3568     public System.Guid UserId
    3569     {
    3570       get
    3571       {
    3572         return this._UserId;
    3573       }
    3574       set
    3575       {
    3576         if ((this._UserId != value))
    3577         {
    3578           this.OnUserIdChanging(value);
    3579           this.SendPropertyChanging();
    3580           this._UserId = value;
    3581           this.SendPropertyChanged("UserId");
    3582           this.OnUserIdChanged();
    3583         }
    3584       }
    3585     }
    3586    
    3587     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExecutionTime", DbType="float NOT NULL")]
    3588     public double ExecutionTimeS
    3589     {
    3590       get
    3591       {
    3592         return this._ExecutionTime;
    3593       }
    3594       set
    3595       {
    3596         if ((this._ExecutionTime != value))
    3597         {
    3598           this.OnExecutionTimeSChanging(value);
    3599           this.SendPropertyChanging();
    3600           this._ExecutionTime = value;
    3601           this.SendPropertyChanged("ExecutionTimeS");
    3602           this.OnExecutionTimeSChanged();
    3603         }
    3604       }
    3605     }
    3606    
    3607     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExecutionTimeFinishedJobs", DbType="float NOT NULL")]
    3608     public double ExecutionTimeSFinishedJobs
    3609     {
    3610       get
    3611       {
    3612         return this._ExecutionTimeFinishedJobs;
    3613       }
    3614       set
    3615       {
    3616         if ((this._ExecutionTimeFinishedJobs != value))
    3617         {
    3618           this.OnExecutionTimeSFinishedJobsChanging(value);
    3619           this.SendPropertyChanging();
    3620           this._ExecutionTimeFinishedJobs = value;
    3621           this.SendPropertyChanged("ExecutionTimeSFinishedJobs");
    3622           this.OnExecutionTimeSFinishedJobsChanged();
    3623         }
    3624       }
    3625     }
    3626    
    3627     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_StartToEndTime", DbType="float NOT NULL")]
    3628     public double StartToEndTimeS
    3629     {
    3630       get
    3631       {
    3632         return this._StartToEndTime;
    3633       }
    3634       set
    3635       {
    3636         if ((this._StartToEndTime != value))
    3637         {
    3638           this.OnStartToEndTimeSChanging(value);
    3639           this.SendPropertyChanging();
    3640           this._StartToEndTime = value;
    3641           this.SendPropertyChanged("StartToEndTimeS");
    3642           this.OnStartToEndTimeSChanged();
    3643         }
    3644       }
    3645     }
    3646    
    3647     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DeletedJobStatisticsId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
    3648     public System.Guid DeletedJobStatisticsId
    3649     {
    3650       get
    3651       {
    3652         return this._DeletedJobStatisticsId;
    3653       }
    3654       set
    3655       {
    3656         if ((this._DeletedJobStatisticsId != value))
    3657         {
    3658           this.OnDeletedJobStatisticsIdChanging(value);
    3659           this.SendPropertyChanging();
    3660           this._DeletedJobStatisticsId = value;
    3661           this.SendPropertyChanged("DeletedJobStatisticsId");
    3662           this.OnDeletedJobStatisticsIdChanged();
    3663         }
    3664       }
    3665     }
    3666    
    3667     public event PropertyChangingEventHandler PropertyChanging;
    3668    
    3669     public event PropertyChangedEventHandler PropertyChanged;
    3670    
    3671     protected virtual void SendPropertyChanging()
    3672     {
    3673       if ((this.PropertyChanging != null))
    3674       {
    3675         this.PropertyChanging(this, emptyChangingEventArgs);
    3676       }
    3677     }
    3678    
    3679     protected virtual void SendPropertyChanged(String propertyName)
    3680     {
    3681       if ((this.PropertyChanged != null))
    3682       {
    3683         this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    3684       }
    3685     }
    3686   }
    3687  
    3688   [global::System.Data.Linq.Mapping.TableAttribute(Name="")]
    3689   public partial class UserStatistics : INotifyPropertyChanging, INotifyPropertyChanged
    3690   {
    3691    
    3692     private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
    3693    
    3694     private System.Guid _StatisticsId;
    3695    
    3696     private System.Guid _UserId;
    3697    
    3698     private double _ExecutionTime;
    3699    
    3700     private int _CoresUsed;
    3701    
    3702     private double _ExecutionTimeFinishedJobs;
    3703    
    3704     private double _StartToEndTime;
    3705    
    3706     private EntityRef<Statistics> _Statistics;
    3707    
    3708     #region Extensibility Method Definitions
    3709     partial void OnLoaded();
    3710     partial void OnValidate(System.Data.Linq.ChangeAction action);
    3711     partial void OnCreated();
    3712     partial void OnStatisticsIdChanging(System.Guid value);
    3713     partial void OnStatisticsIdChanged();
    3714     partial void OnUserIdChanging(System.Guid value);
    3715     partial void OnUserIdChanged();
    3716     partial void OnExecutionTimeMsChanging(double value);
    3717     partial void OnExecutionTimeMsChanged();
    3718     partial void OnUsedCoresChanging(int value);
    3719     partial void OnUsedCoresChanged();
    3720     partial void OnExecutionTimeMsFinishedJobsChanging(double value);
    3721     partial void OnExecutionTimeMsFinishedJobsChanged();
    3722     partial void OnStartToEndTimeMsChanging(double value);
    3723     partial void OnStartToEndTimeMsChanged();
    3724     #endregion
    3725    
    3726     public UserStatistics()
    3727     {
    3728       this._Statistics = default(EntityRef<Statistics>);
    3729       OnCreated();
    3730     }
    3731    
    3732     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_StatisticsId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
    3733     public System.Guid StatisticsId
    3734     {
    3735       get
    3736       {
    3737         return this._StatisticsId;
    3738       }
    3739       set
    3740       {
    3741         if ((this._StatisticsId != value))
    3742         {
    3743           if (this._Statistics.HasLoadedOrAssignedValue)
    3744           {
    3745             throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
    3746           }
    3747           this.OnStatisticsIdChanging(value);
    3748           this.SendPropertyChanging();
    3749           this._StatisticsId = value;
    3750           this.SendPropertyChanged("StatisticsId");
    3751           this.OnStatisticsIdChanged();
    3752         }
    3753       }
    3754     }
    3755    
    3756     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
    3757     public System.Guid UserId
    3758     {
    3759       get
    3760       {
    3761         return this._UserId;
    3762       }
    3763       set
    3764       {
    3765         if ((this._UserId != value))
    3766         {
    3767           this.OnUserIdChanging(value);
    3768           this.SendPropertyChanging();
    3769           this._UserId = value;
    3770           this.SendPropertyChanged("UserId");
    3771           this.OnUserIdChanged();
    3772         }
    3773       }
    3774     }
    3775    
    3776     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExecutionTime", DbType="float NOT NULL")]
    3777     public double ExecutionTimeMs
    3778     {
    3779       get
    3780       {
    3781         return this._ExecutionTime;
    3782       }
    3783       set
    3784       {
    3785         if ((this._ExecutionTime != value))
    3786         {
    3787           this.OnExecutionTimeMsChanging(value);
    3788           this.SendPropertyChanging();
    3789           this._ExecutionTime = value;
    3790           this.SendPropertyChanged("ExecutionTimeMs");
    3791           this.OnExecutionTimeMsChanged();
    3792         }
    3793       }
    3794     }
    3795    
    3796     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CoresUsed", DbType="Int NOT NULL")]
    3797     public int UsedCores
    3798     {
    3799       get
    3800       {
    3801         return this._CoresUsed;
    3802       }
    3803       set
    3804       {
    3805         if ((this._CoresUsed != value))
    3806         {
    3807           this.OnUsedCoresChanging(value);
    3808           this.SendPropertyChanging();
    3809           this._CoresUsed = value;
    3810           this.SendPropertyChanged("UsedCores");
    3811           this.OnUsedCoresChanged();
    3812         }
    3813       }
    3814     }
    3815    
    3816     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExecutionTimeFinishedJobs", DbType="float NOT NULL")]
    3817     public double ExecutionTimeMsFinishedJobs
    3818     {
    3819       get
    3820       {
    3821         return this._ExecutionTimeFinishedJobs;
    3822       }
    3823       set
    3824       {
    3825         if ((this._ExecutionTimeFinishedJobs != value))
    3826         {
    3827           this.OnExecutionTimeMsFinishedJobsChanging(value);
    3828           this.SendPropertyChanging();
    3829           this._ExecutionTimeFinishedJobs = value;
    3830           this.SendPropertyChanged("ExecutionTimeMsFinishedJobs");
    3831           this.OnExecutionTimeMsFinishedJobsChanged();
    3832         }
    3833       }
    3834     }
    3835    
    3836     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_StartToEndTime", DbType="float NOT NULL")]
    3837     public double StartToEndTimeMs
    3838     {
    3839       get
    3840       {
    3841         return this._StartToEndTime;
    3842       }
    3843       set
    3844       {
    3845         if ((this._StartToEndTime != value))
    3846         {
    3847           this.OnStartToEndTimeMsChanging(value);
    3848           this.SendPropertyChanging();
    3849           this._StartToEndTime = value;
    3850           this.SendPropertyChanged("StartToEndTimeMs");
    3851           this.OnStartToEndTimeMsChanged();
    3852         }
    3853       }
    3854     }
    3855    
    3856     [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Statistics_UserStatistics", Storage="_Statistics", ThisKey="StatisticsId", OtherKey="StatisticsId", IsForeignKey=true)]
    3857     public Statistics Statistics
    3858     {
    3859       get
    3860       {
    3861         return this._Statistics.Entity;
    3862       }
    3863       set
    3864       {
    3865         Statistics previousValue = this._Statistics.Entity;
    3866         if (((previousValue != value)
    3867               || (this._Statistics.HasLoadedOrAssignedValue == false)))
    3868         {
    3869           this.SendPropertyChanging();
    3870           if ((previousValue != null))
    3871           {
    3872             this._Statistics.Entity = null;
    3873             previousValue.UserStatistics.Remove(this);
    3874           }
    3875           this._Statistics.Entity = value;
    3876           if ((value != null))
    3877           {
    3878             value.UserStatistics.Add(this);
    3879             this._StatisticsId = value.StatisticsId;
    3880           }
    3881           else
    3882           {
    3883             this._StatisticsId = default(System.Guid);
    3884           }
    3885           this.SendPropertyChanged("Statistics");
    3886         }
    3887       }
    3888     }
    3889    
    3890     public event PropertyChangingEventHandler PropertyChanging;
    3891    
    3892     public event PropertyChangedEventHandler PropertyChanged;
    3893    
    3894     protected virtual void SendPropertyChanging()
    3895     {
    3896       if ((this.PropertyChanging != null))
    3897       {
    3898         this.PropertyChanging(this, emptyChangingEventArgs);
    3899       }
    3900     }
    3901    
    3902     protected virtual void SendPropertyChanged(String propertyName)
    3903     {
    3904       if ((this.PropertyChanged != null))
    3905       {
    3906         this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    3907       }
    3908     }
    3909   }
    3910  
    3911   [global::System.Data.Linq.Mapping.TableAttribute(Name="")]
    3912   public partial class SlaveStatistics : INotifyPropertyChanging, INotifyPropertyChanged
    3913   {
    3914    
    3915     private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
    3916    
    3917     private System.Guid _StatisticsId;
    3918    
    3919     private System.Guid _SlaveId;
    3920    
    3921     private int _Cores;
    3922    
    3923     private int _FreeCores;
    3924    
    3925     private double _CpuUtilization;
    3926    
    3927     private int _Memory;
    3928    
    3929     private int _FreeMemory;
    3930    
    3931     private EntityRef<Statistics> _Statistics;
    3932    
    3933     #region Extensibility Method Definitions
    3934     partial void OnLoaded();
    3935     partial void OnValidate(System.Data.Linq.ChangeAction action);
    3936     partial void OnCreated();
    3937     partial void OnStatisticsIdChanging(System.Guid value);
    3938     partial void OnStatisticsIdChanged();
    3939     partial void OnSlaveIdChanging(System.Guid value);
    3940     partial void OnSlaveIdChanged();
    3941     partial void OnCoresChanging(int value);
    3942     partial void OnCoresChanged();
    3943     partial void OnFreeCoresChanging(int value);
    3944     partial void OnFreeCoresChanged();
    3945     partial void OnCpuUtilizationChanging(double value);
    3946     partial void OnCpuUtilizationChanged();
    3947     partial void OnMemoryChanging(int value);
    3948     partial void OnMemoryChanged();
    3949     partial void OnFreeMemoryChanging(int value);
    3950     partial void OnFreeMemoryChanged();
    3951     #endregion
    3952    
    3953     public SlaveStatistics()
    3954     {
    3955       this._Statistics = default(EntityRef<Statistics>);
    3956       OnCreated();
    3957     }
    3958    
    3959     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_StatisticsId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
    3960     public System.Guid StatisticsId
    3961     {
    3962       get
    3963       {
    3964         return this._StatisticsId;
    3965       }
    3966       set
    3967       {
    3968         if ((this._StatisticsId != value))
    3969         {
    3970           if (this._Statistics.HasLoadedOrAssignedValue)
    3971           {
    3972             throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
    3973           }
    3974           this.OnStatisticsIdChanging(value);
    3975           this.SendPropertyChanging();
    3976           this._StatisticsId = value;
    3977           this.SendPropertyChanged("StatisticsId");
    3978           this.OnStatisticsIdChanged();
    3979         }
    3980       }
    3981     }
    3982    
    3983     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SlaveId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
    3984     public System.Guid SlaveId
    3985     {
    3986       get
    3987       {
    3988         return this._SlaveId;
    3989       }
    3990       set
    3991       {
    3992         if ((this._SlaveId != value))
    3993         {
    3994           this.OnSlaveIdChanging(value);
    3995           this.SendPropertyChanging();
    3996           this._SlaveId = value;
    3997           this.SendPropertyChanged("SlaveId");
    3998           this.OnSlaveIdChanged();
    3999         }
    4000       }
    4001     }
    4002    
    4003     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Cores", DbType="Int NOT NULL")]
    4004     public int Cores
    4005     {
    4006       get
    4007       {
    4008         return this._Cores;
    4009       }
    4010       set
    4011       {
    4012         if ((this._Cores != value))
    4013         {
    4014           this.OnCoresChanging(value);
    4015           this.SendPropertyChanging();
    4016           this._Cores = value;
    4017           this.SendPropertyChanged("Cores");
    4018           this.OnCoresChanged();
    4019         }
    4020       }
    4021     }
    4022    
    4023     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_FreeCores", DbType="Int NOT NULL")]
    4024     public int FreeCores
    4025     {
    4026       get
    4027       {
    4028         return this._FreeCores;
    4029       }
    4030       set
    4031       {
    4032         if ((this._FreeCores != value))
    4033         {
    4034           this.OnFreeCoresChanging(value);
    4035           this.SendPropertyChanging();
    4036           this._FreeCores = value;
    4037           this.SendPropertyChanged("FreeCores");
    4038           this.OnFreeCoresChanged();
    4039         }
    4040       }
    4041     }
    4042    
    4043     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CpuUtilization", DbType="float NOT NULL")]
    4044     public double CpuUtilization
    4045     {
    4046       get
    4047       {
    4048         return this._CpuUtilization;
    4049       }
    4050       set
    4051       {
    4052         if ((this._CpuUtilization != value))
    4053         {
    4054           this.OnCpuUtilizationChanging(value);
    4055           this.SendPropertyChanging();
    4056           this._CpuUtilization = value;
    4057           this.SendPropertyChanged("CpuUtilization");
    4058           this.OnCpuUtilizationChanged();
    4059         }
    4060       }
    4061     }
    4062    
    4063     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Memory", DbType="Int NOT NULL")]
    4064     public int Memory
    4065     {
    4066       get
    4067       {
    4068         return this._Memory;
    4069       }
    4070       set
    4071       {
    4072         if ((this._Memory != value))
    4073         {
    4074           this.OnMemoryChanging(value);
    4075           this.SendPropertyChanging();
    4076           this._Memory = value;
    4077           this.SendPropertyChanged("Memory");
    4078           this.OnMemoryChanged();
    4079         }
    4080       }
    4081     }
    4082    
    4083     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_FreeMemory", DbType="Int NOT NULL")]
    4084     public int FreeMemory
    4085     {
    4086       get
    4087       {
    4088         return this._FreeMemory;
    4089       }
    4090       set
    4091       {
    4092         if ((this._FreeMemory != value))
    4093         {
    4094           this.OnFreeMemoryChanging(value);
    4095           this.SendPropertyChanging();
    4096           this._FreeMemory = value;
    4097           this.SendPropertyChanged("FreeMemory");
    4098           this.OnFreeMemoryChanged();
    4099         }
    4100       }
    4101     }
    4102    
    4103     [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Statistics_SlaveStatistics", Storage="_Statistics", ThisKey="StatisticsId", OtherKey="StatisticsId", IsForeignKey=true)]
    4104     public Statistics Statistics
    4105     {
    4106       get
    4107       {
    4108         return this._Statistics.Entity;
    4109       }
    4110       set
    4111       {
    4112         Statistics previousValue = this._Statistics.Entity;
    4113         if (((previousValue != value)
    4114               || (this._Statistics.HasLoadedOrAssignedValue == false)))
    4115         {
    4116           this.SendPropertyChanging();
    4117           if ((previousValue != null))
    4118           {
    4119             this._Statistics.Entity = null;
    4120             previousValue.SlaveStatistics.Remove(this);
    4121           }
    4122           this._Statistics.Entity = value;
    4123           if ((value != null))
    4124           {
    4125             value.SlaveStatistics.Add(this);
    4126             this._StatisticsId = value.StatisticsId;
    4127           }
    4128           else
    4129           {
    4130             this._StatisticsId = default(System.Guid);
    4131           }
    4132           this.SendPropertyChanged("Statistics");
    4133         }
    4134       }
    4135     }
    4136    
    4137     public event PropertyChangingEventHandler PropertyChanging;
    4138    
    4139     public event PropertyChangedEventHandler PropertyChanged;
    4140    
    4141     protected virtual void SendPropertyChanging()
    4142     {
    4143       if ((this.PropertyChanging != null))
    4144       {
    4145         this.PropertyChanging(this, emptyChangingEventArgs);
    4146       }
    4147     }
    4148    
    4149     protected virtual void SendPropertyChanged(String propertyName)
    4150     {
    4151       if ((this.PropertyChanged != null))
    4152       {
    4153         this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    4154       }
    4155     }
    4156   }
    4157  
    4158   [global::System.Data.Linq.Mapping.TableAttribute(Name="")]
    4159   public partial class Statistics : INotifyPropertyChanging, INotifyPropertyChanged
    4160   {
    4161    
    4162     private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
    4163    
    4164     private System.Guid _StatisticsId;
    4165    
    4166     private System.DateTime _Timestamp;
    4167    
    4168     private EntitySet<UserStatistics> _UserStatistics;
    4169    
    4170     private EntitySet<SlaveStatistics> _SlaveStatistics;
    4171    
    4172     #region Extensibility Method Definitions
    4173     partial void OnLoaded();
    4174     partial void OnValidate(System.Data.Linq.ChangeAction action);
    4175     partial void OnCreated();
    4176     partial void OnStatisticsIdChanging(System.Guid value);
    4177     partial void OnStatisticsIdChanged();
    4178     partial void OnTimestampChanging(System.DateTime value);
    4179     partial void OnTimestampChanged();
    4180     #endregion
    4181    
    4182     public Statistics()
    4183     {
    4184       this._UserStatistics = new EntitySet<UserStatistics>(new Action<UserStatistics>(this.attach_UserStatistics), new Action<UserStatistics>(this.detach_UserStatistics));
    4185       this._SlaveStatistics = new EntitySet<SlaveStatistics>(new Action<SlaveStatistics>(this.attach_SlaveStatistics), new Action<SlaveStatistics>(this.detach_SlaveStatistics));
    4186       OnCreated();
    4187     }
    4188    
    4189     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_StatisticsId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
    4190     public System.Guid StatisticsId
    4191     {
    4192       get
    4193       {
    4194         return this._StatisticsId;
    4195       }
    4196       set
    4197       {
    4198         if ((this._StatisticsId != value))
    4199         {
    4200           this.OnStatisticsIdChanging(value);
    4201           this.SendPropertyChanging();
    4202           this._StatisticsId = value;
    4203           this.SendPropertyChanged("StatisticsId");
    4204           this.OnStatisticsIdChanged();
    4205         }
    4206       }
    4207     }
    4208    
    4209     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Timestamp")]
    4210     public System.DateTime Timestamp
    4211     {
    4212       get
    4213       {
    4214         return this._Timestamp;
    4215       }
    4216       set
    4217       {
    4218         if ((this._Timestamp != value))
    4219         {
    4220           this.OnTimestampChanging(value);
    4221           this.SendPropertyChanging();
    4222           this._Timestamp = value;
    4223           this.SendPropertyChanged("Timestamp");
    4224           this.OnTimestampChanged();
    4225         }
    4226       }
    4227     }
    4228    
    4229     [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Statistics_UserStatistics", Storage="_UserStatistics", ThisKey="StatisticsId", OtherKey="StatisticsId")]
    4230     public EntitySet<UserStatistics> UserStatistics
    4231     {
    4232       get
    4233       {
    4234         return this._UserStatistics;
    4235       }
    4236       set
    4237       {
    4238         this._UserStatistics.Assign(value);
    4239       }
    4240     }
    4241    
    4242     [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Statistics_SlaveStatistics", Storage="_SlaveStatistics", ThisKey="StatisticsId", OtherKey="StatisticsId")]
    4243     public EntitySet<SlaveStatistics> SlaveStatistics
    4244     {
    4245       get
    4246       {
    4247         return this._SlaveStatistics;
    4248       }
    4249       set
    4250       {
    4251         this._SlaveStatistics.Assign(value);
    4252       }
    4253     }
    4254    
    4255     public event PropertyChangingEventHandler PropertyChanging;
    4256    
    4257     public event PropertyChangedEventHandler PropertyChanged;
    4258    
    4259     protected virtual void SendPropertyChanging()
    4260     {
    4261       if ((this.PropertyChanging != null))
    4262       {
    4263         this.PropertyChanging(this, emptyChangingEventArgs);
    4264       }
    4265     }
    4266    
    4267     protected virtual void SendPropertyChanged(String propertyName)
    4268     {
    4269       if ((this.PropertyChanged != null))
    4270       {
    4271         this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    4272       }
    4273     }
    4274    
    4275     private void attach_UserStatistics(UserStatistics entity)
    4276     {
    4277       this.SendPropertyChanging();
    4278       entity.Statistics = this;
    4279     }
    4280    
    4281     private void detach_UserStatistics(UserStatistics entity)
    4282     {
    4283       this.SendPropertyChanging();
    4284       entity.Statistics = null;
    4285     }
    4286    
    4287     private void attach_SlaveStatistics(SlaveStatistics entity)
    4288     {
    4289       this.SendPropertyChanging();
    4290       entity.Statistics = this;
    4291     }
    4292    
    4293     private void detach_SlaveStatistics(SlaveStatistics entity)
    4294     {
    4295       this.SendPropertyChanging();
    4296       entity.Statistics = null;
    4297     }
    4298   }
    4299  
    43003552  [global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ResourcePermission")]
    43013553  public partial class ResourcePermission : INotifyPropertyChanging, INotifyPropertyChanged
     
    45343786    }
    45353787  }
     3788 
     3789  [global::System.Data.Linq.Mapping.TableAttribute(Name="[statistics].DimClient")]
     3790  public partial class DimClient : INotifyPropertyChanging, INotifyPropertyChanged
     3791  {
     3792   
     3793    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
     3794   
     3795    private System.Guid _Id;
     3796   
     3797    private string _Name;
     3798   
     3799    private System.Guid _ResourceId;
     3800   
     3801    private System.Nullable<System.DateTime> _ExpirationTime;
     3802   
     3803    private System.Nullable<System.Guid> _ResourceGroupId;
     3804   
     3805    private System.Nullable<System.Guid> _ResourceGroup2Id;
     3806   
     3807    private string _GroupName;
     3808   
     3809    private string _GroupName2;
     3810   
     3811    private EntitySet<FactTask> _FactTasks;
     3812   
     3813    private EntitySet<FactClientInfo> _FactClientInfos;
     3814   
     3815    #region Extensibility Method Definitions
     3816    partial void OnLoaded();
     3817    partial void OnValidate(System.Data.Linq.ChangeAction action);
     3818    partial void OnCreated();
     3819    partial void OnIdChanging(System.Guid value);
     3820    partial void OnIdChanged();
     3821    partial void OnNameChanging(string value);
     3822    partial void OnNameChanged();
     3823    partial void OnResourceIdChanging(System.Guid value);
     3824    partial void OnResourceIdChanged();
     3825    partial void OnExpirationTimeChanging(System.Nullable<System.DateTime> value);
     3826    partial void OnExpirationTimeChanged();
     3827    partial void OnResourceGroupIdChanging(System.Nullable<System.Guid> value);
     3828    partial void OnResourceGroupIdChanged();
     3829    partial void OnResourceGroup2IdChanging(System.Nullable<System.Guid> value);
     3830    partial void OnResourceGroup2IdChanged();
     3831    partial void OnGroupNameChanging(string value);
     3832    partial void OnGroupNameChanged();
     3833    partial void OnGroupName2Changing(string value);
     3834    partial void OnGroupName2Changed();
     3835    #endregion
     3836   
     3837    public DimClient()
     3838    {
     3839      this._FactTasks = new EntitySet<FactTask>(new Action<FactTask>(this.attach_FactTasks), new Action<FactTask>(this.detach_FactTasks));
     3840      this._FactClientInfos = new EntitySet<FactClientInfo>(new Action<FactClientInfo>(this.attach_FactClientInfos), new Action<FactClientInfo>(this.detach_FactClientInfos));
     3841      OnCreated();
     3842    }
     3843   
     3844    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
     3845    public System.Guid Id
     3846    {
     3847      get
     3848      {
     3849        return this._Id;
     3850      }
     3851      set
     3852      {
     3853        if ((this._Id != value))
     3854        {
     3855          this.OnIdChanging(value);
     3856          this.SendPropertyChanging();
     3857          this._Id = value;
     3858          this.SendPropertyChanged("Id");
     3859          this.OnIdChanged();
     3860        }
     3861      }
     3862    }
     3863   
     3864    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="VarChar(MAX) NOT NULL", CanBeNull=false)]
     3865    public string Name
     3866    {
     3867      get
     3868      {
     3869        return this._Name;
     3870      }
     3871      set
     3872      {
     3873        if ((this._Name != value))
     3874        {
     3875          this.OnNameChanging(value);
     3876          this.SendPropertyChanging();
     3877          this._Name = value;
     3878          this.SendPropertyChanged("Name");
     3879          this.OnNameChanged();
     3880        }
     3881      }
     3882    }
     3883   
     3884    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL")]
     3885    public System.Guid ResourceId
     3886    {
     3887      get
     3888      {
     3889        return this._ResourceId;
     3890      }
     3891      set
     3892      {
     3893        if ((this._ResourceId != value))
     3894        {
     3895          this.OnResourceIdChanging(value);
     3896          this.SendPropertyChanging();
     3897          this._ResourceId = value;
     3898          this.SendPropertyChanged("ResourceId");
     3899          this.OnResourceIdChanged();
     3900        }
     3901      }
     3902    }
     3903   
     3904    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExpirationTime", DbType="DateTime")]
     3905    public System.Nullable<System.DateTime> ExpirationTime
     3906    {
     3907      get
     3908      {
     3909        return this._ExpirationTime;
     3910      }
     3911      set
     3912      {
     3913        if ((this._ExpirationTime != value))
     3914        {
     3915          this.OnExpirationTimeChanging(value);
     3916          this.SendPropertyChanging();
     3917          this._ExpirationTime = value;
     3918          this.SendPropertyChanged("ExpirationTime");
     3919          this.OnExpirationTimeChanged();
     3920        }
     3921      }
     3922    }
     3923   
     3924    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceGroupId", DbType="UniqueIdentifier")]
     3925    public System.Nullable<System.Guid> ResourceGroupId
     3926    {
     3927      get
     3928      {
     3929        return this._ResourceGroupId;
     3930      }
     3931      set
     3932      {
     3933        if ((this._ResourceGroupId != value))
     3934        {
     3935          this.OnResourceGroupIdChanging(value);
     3936          this.SendPropertyChanging();
     3937          this._ResourceGroupId = value;
     3938          this.SendPropertyChanged("ResourceGroupId");
     3939          this.OnResourceGroupIdChanged();
     3940        }
     3941      }
     3942    }
     3943   
     3944    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceGroup2Id", DbType="UniqueIdentifier")]
     3945    public System.Nullable<System.Guid> ResourceGroup2Id
     3946    {
     3947      get
     3948      {
     3949        return this._ResourceGroup2Id;
     3950      }
     3951      set
     3952      {
     3953        if ((this._ResourceGroup2Id != value))
     3954        {
     3955          this.OnResourceGroup2IdChanging(value);
     3956          this.SendPropertyChanging();
     3957          this._ResourceGroup2Id = value;
     3958          this.SendPropertyChanged("ResourceGroup2Id");
     3959          this.OnResourceGroup2IdChanged();
     3960        }
     3961      }
     3962    }
     3963   
     3964    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_GroupName")]
     3965    public string GroupName
     3966    {
     3967      get
     3968      {
     3969        return this._GroupName;
     3970      }
     3971      set
     3972      {
     3973        if ((this._GroupName != value))
     3974        {
     3975          this.OnGroupNameChanging(value);
     3976          this.SendPropertyChanging();
     3977          this._GroupName = value;
     3978          this.SendPropertyChanged("GroupName");
     3979          this.OnGroupNameChanged();
     3980        }
     3981      }
     3982    }
     3983   
     3984    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_GroupName2")]
     3985    public string GroupName2
     3986    {
     3987      get
     3988      {
     3989        return this._GroupName2;
     3990      }
     3991      set
     3992      {
     3993        if ((this._GroupName2 != value))
     3994        {
     3995          this.OnGroupName2Changing(value);
     3996          this.SendPropertyChanging();
     3997          this._GroupName2 = value;
     3998          this.SendPropertyChanged("GroupName2");
     3999          this.OnGroupName2Changed();
     4000        }
     4001      }
     4002    }
     4003   
     4004    [global::System.Data.Linq.Mapping.AssociationAttribute(Name="DimClient_FactTask", Storage="_FactTasks", ThisKey="Id", OtherKey="LastClientId")]
     4005    public EntitySet<FactTask> FactTasks
     4006    {
     4007      get
     4008      {
     4009        return this._FactTasks;
     4010      }
     4011      set
     4012      {
     4013        this._FactTasks.Assign(value);
     4014      }
     4015    }
     4016   
     4017    [global::System.Data.Linq.Mapping.AssociationAttribute(Name="DimClient_FactClientInfo", Storage="_FactClientInfos", ThisKey="Id", OtherKey="ClientId")]
     4018    public EntitySet<FactClientInfo> FactClientInfos
     4019    {
     4020      get
     4021      {
     4022        return this._FactClientInfos;
     4023      }
     4024      set
     4025      {
     4026        this._FactClientInfos.Assign(value);
     4027      }
     4028    }
     4029   
     4030    public event PropertyChangingEventHandler PropertyChanging;
     4031   
     4032    public event PropertyChangedEventHandler PropertyChanged;
     4033   
     4034    protected virtual void SendPropertyChanging()
     4035    {
     4036      if ((this.PropertyChanging != null))
     4037      {
     4038        this.PropertyChanging(this, emptyChangingEventArgs);
     4039      }
     4040    }
     4041   
     4042    protected virtual void SendPropertyChanged(String propertyName)
     4043    {
     4044      if ((this.PropertyChanged != null))
     4045      {
     4046        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
     4047      }
     4048    }
     4049   
     4050    private void attach_FactTasks(FactTask entity)
     4051    {
     4052      this.SendPropertyChanging();
     4053      entity.DimClient = this;
     4054    }
     4055   
     4056    private void detach_FactTasks(FactTask entity)
     4057    {
     4058      this.SendPropertyChanging();
     4059      entity.DimClient = null;
     4060    }
     4061   
     4062    private void attach_FactClientInfos(FactClientInfo entity)
     4063    {
     4064      this.SendPropertyChanging();
     4065      entity.DimClient = this;
     4066    }
     4067   
     4068    private void detach_FactClientInfos(FactClientInfo entity)
     4069    {
     4070      this.SendPropertyChanging();
     4071      entity.DimClient = null;
     4072    }
     4073  }
     4074 
     4075  [global::System.Data.Linq.Mapping.TableAttribute(Name="[statistics].FactTask")]
     4076  public partial class FactTask : INotifyPropertyChanging, INotifyPropertyChanged
     4077  {
     4078   
     4079    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
     4080   
     4081    private System.Guid _TaskId;
     4082   
     4083    private long _TotalRuntime;
     4084   
     4085    private long _TotalWaitingTime;
     4086   
     4087    private long _TotalTransferTime;
     4088   
     4089    private int _NumCalculationRuns;
     4090   
     4091    private int _NumFails;
     4092   
     4093    private int _CoresRequired;
     4094   
     4095    private int _MemoryRequired;
     4096   
     4097    private int _Priority;
     4098   
     4099    private System.Nullable<System.Guid> _LastClientId;
     4100   
     4101    private System.Guid _JobId;
     4102   
     4103    private System.Nullable<System.DateTime> _EndTime;
     4104   
     4105    private global::HeuristicLab.Services.Hive.DataAccess.TaskState _TaskState;
     4106   
     4107    private string _Exception;
     4108   
     4109    private long _InitialWaitingTimeMs;
     4110   
     4111    private System.Nullable<System.DateTime> _StartTime;
     4112   
     4113    private EntityRef<DimClient> _DimClient;
     4114   
     4115    private EntityRef<DimJob> _DimJob;
     4116   
     4117    #region Extensibility Method Definitions
     4118    partial void OnLoaded();
     4119    partial void OnValidate(System.Data.Linq.ChangeAction action);
     4120    partial void OnCreated();
     4121    partial void OnTaskIdChanging(System.Guid value);
     4122    partial void OnTaskIdChanged();
     4123    partial void OnCalculatingTimeChanging(long value);
     4124    partial void OnCalculatingTimeChanged();
     4125    partial void OnWaitingTimeChanging(long value);
     4126    partial void OnWaitingTimeChanged();
     4127    partial void OnTransferTimeChanging(long value);
     4128    partial void OnTransferTimeChanged();
     4129    partial void OnNumCalculationRunsChanging(int value);
     4130    partial void OnNumCalculationRunsChanged();
     4131    partial void OnNumRetriesChanging(int value);
     4132    partial void OnNumRetriesChanged();
     4133    partial void OnCoresRequiredChanging(int value);
     4134    partial void OnCoresRequiredChanged();
     4135    partial void OnMemoryRequiredChanging(int value);
     4136    partial void OnMemoryRequiredChanged();
     4137    partial void OnPriorityChanging(int value);
     4138    partial void OnPriorityChanged();
     4139    partial void OnLastClientIdChanging(System.Nullable<System.Guid> value);
     4140    partial void OnLastClientIdChanged();
     4141    partial void OnJobIdChanging(System.Guid value);
     4142    partial void OnJobIdChanged();
     4143    partial void OnEndTimeChanging(System.Nullable<System.DateTime> value);
     4144    partial void OnEndTimeChanged();
     4145    partial void OnTaskStateChanging(global::HeuristicLab.Services.Hive.DataAccess.TaskState value);
     4146    partial void OnTaskStateChanged();
     4147    partial void OnExceptionChanging(string value);
     4148    partial void OnExceptionChanged();
     4149    partial void OnInitialWaitingTimeChanging(long value);
     4150    partial void OnInitialWaitingTimeChanged();
     4151    partial void OnStartTimeChanging(System.Nullable<System.DateTime> value);
     4152    partial void OnStartTimeChanged();
     4153    #endregion
     4154   
     4155    public FactTask()
     4156    {
     4157      this._DimClient = default(EntityRef<DimClient>);
     4158      this._DimJob = default(EntityRef<DimJob>);
     4159      OnCreated();
     4160    }
     4161   
     4162    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_TaskId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
     4163    public System.Guid TaskId
     4164    {
     4165      get
     4166      {
     4167        return this._TaskId;
     4168      }
     4169      set
     4170      {
     4171        if ((this._TaskId != value))
     4172        {
     4173          this.OnTaskIdChanging(value);
     4174          this.SendPropertyChanging();
     4175          this._TaskId = value;
     4176          this.SendPropertyChanged("TaskId");
     4177          this.OnTaskIdChanged();
     4178        }
     4179      }
     4180    }
     4181   
     4182    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_TotalRuntime", DbType="INT NOT NULL")]
     4183    public long CalculatingTime
     4184    {
     4185      get
     4186      {
     4187        return this._TotalRuntime;
     4188      }
     4189      set
     4190      {
     4191        if ((this._TotalRuntime != value))
     4192        {
     4193          this.OnCalculatingTimeChanging(value);
     4194          this.SendPropertyChanging();
     4195          this._TotalRuntime = value;
     4196          this.SendPropertyChanged("CalculatingTime");
     4197          this.OnCalculatingTimeChanged();
     4198        }
     4199      }
     4200    }
     4201   
     4202    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_TotalWaitingTime", DbType="INT NOT NULL")]
     4203    public long WaitingTime
     4204    {
     4205      get
     4206      {
     4207        return this._TotalWaitingTime;
     4208      }
     4209      set
     4210      {
     4211        if ((this._TotalWaitingTime != value))
     4212        {
     4213          this.OnWaitingTimeChanging(value);
     4214          this.SendPropertyChanging();
     4215          this._TotalWaitingTime = value;
     4216          this.SendPropertyChanged("WaitingTime");
     4217          this.OnWaitingTimeChanged();
     4218        }
     4219      }
     4220    }
     4221   
     4222    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_TotalTransferTime", DbType="INT NOT NULL")]
     4223    public long TransferTime
     4224    {
     4225      get
     4226      {
     4227        return this._TotalTransferTime;
     4228      }
     4229      set
     4230      {
     4231        if ((this._TotalTransferTime != value))
     4232        {
     4233          this.OnTransferTimeChanging(value);
     4234          this.SendPropertyChanging();
     4235          this._TotalTransferTime = value;
     4236          this.SendPropertyChanged("TransferTime");
     4237          this.OnTransferTimeChanged();
     4238        }
     4239      }
     4240    }
     4241   
     4242    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_NumCalculationRuns", DbType="Int NOT NULL")]
     4243    public int NumCalculationRuns
     4244    {
     4245      get
     4246      {
     4247        return this._NumCalculationRuns;
     4248      }
     4249      set
     4250      {
     4251        if ((this._NumCalculationRuns != value))
     4252        {
     4253          this.OnNumCalculationRunsChanging(value);
     4254          this.SendPropertyChanging();
     4255          this._NumCalculationRuns = value;
     4256          this.SendPropertyChanged("NumCalculationRuns");
     4257          this.OnNumCalculationRunsChanged();
     4258        }
     4259      }
     4260    }
     4261   
     4262    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_NumFails", DbType="Int NOT NULL")]
     4263    public int NumRetries
     4264    {
     4265      get
     4266      {
     4267        return this._NumFails;
     4268      }
     4269      set
     4270      {
     4271        if ((this._NumFails != value))
     4272        {
     4273          this.OnNumRetriesChanging(value);
     4274          this.SendPropertyChanging();
     4275          this._NumFails = value;
     4276          this.SendPropertyChanged("NumRetries");
     4277          this.OnNumRetriesChanged();
     4278        }
     4279      }
     4280    }
     4281   
     4282    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CoresRequired", DbType="Int NOT NULL")]
     4283    public int CoresRequired
     4284    {
     4285      get
     4286      {
     4287        return this._CoresRequired;
     4288      }
     4289      set
     4290      {
     4291        if ((this._CoresRequired != value))
     4292        {
     4293          this.OnCoresRequiredChanging(value);
     4294          this.SendPropertyChanging();
     4295          this._CoresRequired = value;
     4296          this.SendPropertyChanged("CoresRequired");
     4297          this.OnCoresRequiredChanged();
     4298        }
     4299      }
     4300    }
     4301   
     4302    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_MemoryRequired", DbType="Int NOT NULL")]
     4303    public int MemoryRequired
     4304    {
     4305      get
     4306      {
     4307        return this._MemoryRequired;
     4308      }
     4309      set
     4310      {
     4311        if ((this._MemoryRequired != value))
     4312        {
     4313          this.OnMemoryRequiredChanging(value);
     4314          this.SendPropertyChanging();
     4315          this._MemoryRequired = value;
     4316          this.SendPropertyChanged("MemoryRequired");
     4317          this.OnMemoryRequiredChanged();
     4318        }
     4319      }
     4320    }
     4321   
     4322    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Priority", DbType="Int NOT NULL")]
     4323    public int Priority
     4324    {
     4325      get
     4326      {
     4327        return this._Priority;
     4328      }
     4329      set
     4330      {
     4331        if ((this._Priority != value))
     4332        {
     4333          this.OnPriorityChanging(value);
     4334          this.SendPropertyChanging();
     4335          this._Priority = value;
     4336          this.SendPropertyChanged("Priority");
     4337          this.OnPriorityChanged();
     4338        }
     4339      }
     4340    }
     4341   
     4342    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LastClientId", DbType="UniqueIdentifier NOT NULL")]
     4343    public System.Nullable<System.Guid> LastClientId
     4344    {
     4345      get
     4346      {
     4347        return this._LastClientId;
     4348      }
     4349      set
     4350      {
     4351        if ((this._LastClientId != value))
     4352        {
     4353          if (this._DimClient.HasLoadedOrAssignedValue)
     4354          {
     4355            throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
     4356          }
     4357          this.OnLastClientIdChanging(value);
     4358          this.SendPropertyChanging();
     4359          this._LastClientId = value;
     4360          this.SendPropertyChanged("LastClientId");
     4361          this.OnLastClientIdChanged();
     4362        }
     4363      }
     4364    }
     4365   
     4366    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobId", DbType="UniqueIdentifier NOT NULL")]
     4367    public System.Guid JobId
     4368    {
     4369      get
     4370      {
     4371        return this._JobId;
     4372      }
     4373      set
     4374      {
     4375        if ((this._JobId != value))
     4376        {
     4377          if (this._DimJob.HasLoadedOrAssignedValue)
     4378          {
     4379            throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
     4380          }
     4381          this.OnJobIdChanging(value);
     4382          this.SendPropertyChanging();
     4383          this._JobId = value;
     4384          this.SendPropertyChanged("JobId");
     4385          this.OnJobIdChanged();
     4386        }
     4387      }
     4388    }
     4389   
     4390    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_EndTime", DbType="DateTime NOT NULL")]
     4391    public System.Nullable<System.DateTime> EndTime
     4392    {
     4393      get
     4394      {
     4395        return this._EndTime;
     4396      }
     4397      set
     4398      {
     4399        if ((this._EndTime != value))
     4400        {
     4401          this.OnEndTimeChanging(value);
     4402          this.SendPropertyChanging();
     4403          this._EndTime = value;
     4404          this.SendPropertyChanged("EndTime");
     4405          this.OnEndTimeChanged();
     4406        }
     4407      }
     4408    }
     4409   
     4410    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_TaskState", DbType="varchar(30)", CanBeNull=false)]
     4411    public global::HeuristicLab.Services.Hive.DataAccess.TaskState TaskState
     4412    {
     4413      get
     4414      {
     4415        return this._TaskState;
     4416      }
     4417      set
     4418      {
     4419        if ((this._TaskState != value))
     4420        {
     4421          this.OnTaskStateChanging(value);
     4422          this.SendPropertyChanging();
     4423          this._TaskState = value;
     4424          this.SendPropertyChanged("TaskState");
     4425          this.OnTaskStateChanged();
     4426        }
     4427      }
     4428    }
     4429   
     4430    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Exception", DbType="varchar(MAX)")]
     4431    public string Exception
     4432    {
     4433      get
     4434      {
     4435        return this._Exception;
     4436      }
     4437      set
     4438      {
     4439        if ((this._Exception != value))
     4440        {
     4441          this.OnExceptionChanging(value);
     4442          this.SendPropertyChanging();
     4443          this._Exception = value;
     4444          this.SendPropertyChanged("Exception");
     4445          this.OnExceptionChanged();
     4446        }
     4447      }
     4448    }
     4449   
     4450    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_InitialWaitingTimeMs", DbType="INT")]
     4451    public long InitialWaitingTime
     4452    {
     4453      get
     4454      {
     4455        return this._InitialWaitingTimeMs;
     4456      }
     4457      set
     4458      {
     4459        if ((this._InitialWaitingTimeMs != value))
     4460        {
     4461          this.OnInitialWaitingTimeChanging(value);
     4462          this.SendPropertyChanging();
     4463          this._InitialWaitingTimeMs = value;
     4464          this.SendPropertyChanged("InitialWaitingTime");
     4465          this.OnInitialWaitingTimeChanged();
     4466        }
     4467      }
     4468    }
     4469   
     4470    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_StartTime")]
     4471    public System.Nullable<System.DateTime> StartTime
     4472    {
     4473      get
     4474      {
     4475        return this._StartTime;
     4476      }
     4477      set
     4478      {
     4479        if ((this._StartTime != value))
     4480        {
     4481          this.OnStartTimeChanging(value);
     4482          this.SendPropertyChanging();
     4483          this._StartTime = value;
     4484          this.SendPropertyChanged("StartTime");
     4485          this.OnStartTimeChanged();
     4486        }
     4487      }
     4488    }
     4489   
     4490    [global::System.Data.Linq.Mapping.AssociationAttribute(Name="DimClient_FactTask", Storage="_DimClient", ThisKey="LastClientId", OtherKey="Id", IsForeignKey=true)]
     4491    public DimClient DimClient
     4492    {
     4493      get
     4494      {
     4495        return this._DimClient.Entity;
     4496      }
     4497      set
     4498      {
     4499        DimClient previousValue = this._DimClient.Entity;
     4500        if (((previousValue != value)
     4501              || (this._DimClient.HasLoadedOrAssignedValue == false)))
     4502        {
     4503          this.SendPropertyChanging();
     4504          if ((previousValue != null))
     4505          {
     4506            this._DimClient.Entity = null;
     4507            previousValue.FactTasks.Remove(this);
     4508          }
     4509          this._DimClient.Entity = value;
     4510          if ((value != null))
     4511          {
     4512            value.FactTasks.Add(this);
     4513            this._LastClientId = value.Id;
     4514          }
     4515          else
     4516          {
     4517            this._LastClientId = default(Nullable<System.Guid>);
     4518          }
     4519          this.SendPropertyChanged("DimClient");
     4520        }
     4521      }
     4522    }
     4523   
     4524    [global::System.Data.Linq.Mapping.AssociationAttribute(Name="DimJob_FactTask", Storage="_DimJob", ThisKey="JobId", OtherKey="JobId", IsForeignKey=true)]
     4525    public DimJob DimJob
     4526    {
     4527      get
     4528      {
     4529        return this._DimJob.Entity;
     4530      }
     4531      set
     4532      {
     4533        DimJob previousValue = this._DimJob.Entity;
     4534        if (((previousValue != value)
     4535              || (this._DimJob.HasLoadedOrAssignedValue == false)))
     4536        {
     4537          this.SendPropertyChanging();
     4538          if ((previousValue != null))
     4539          {
     4540            this._DimJob.Entity = null;
     4541            previousValue.FactTasks.Remove(this);
     4542          }
     4543          this._DimJob.Entity = value;
     4544          if ((value != null))
     4545          {
     4546            value.FactTasks.Add(this);
     4547            this._JobId = value.JobId;
     4548          }
     4549          else
     4550          {
     4551            this._JobId = default(System.Guid);
     4552          }
     4553          this.SendPropertyChanged("DimJob");
     4554        }
     4555      }
     4556    }
     4557   
     4558    public event PropertyChangingEventHandler PropertyChanging;
     4559   
     4560    public event PropertyChangedEventHandler PropertyChanged;
     4561   
     4562    protected virtual void SendPropertyChanging()
     4563    {
     4564      if ((this.PropertyChanging != null))
     4565      {
     4566        this.PropertyChanging(this, emptyChangingEventArgs);
     4567      }
     4568    }
     4569   
     4570    protected virtual void SendPropertyChanged(String propertyName)
     4571    {
     4572      if ((this.PropertyChanged != null))
     4573      {
     4574        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
     4575      }
     4576    }
     4577  }
     4578 
     4579  [global::System.Data.Linq.Mapping.TableAttribute(Name="[statistics].DimJob")]
     4580  public partial class DimJob : INotifyPropertyChanging, INotifyPropertyChanged
     4581  {
     4582   
     4583    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
     4584   
     4585    private System.Guid _JobId;
     4586   
     4587    private System.Guid _UserId;
     4588   
     4589    private string _JobName;
     4590   
     4591    private string _UserName;
     4592   
     4593    private System.DateTime _DateCreated;
     4594   
     4595    private int _TotalTasks;
     4596   
     4597    private int _CompletedTasks;
     4598   
     4599    private System.Nullable<System.DateTime> _DateCompleted;
     4600   
     4601    private EntitySet<FactTask> _FactTasks;
     4602   
     4603    #region Extensibility Method Definitions
     4604    partial void OnLoaded();
     4605    partial void OnValidate(System.Data.Linq.ChangeAction action);
     4606    partial void OnCreated();
     4607    partial void OnJobIdChanging(System.Guid value);
     4608    partial void OnJobIdChanged();
     4609    partial void OnUserIdChanging(System.Guid value);
     4610    partial void OnUserIdChanged();
     4611    partial void OnJobNameChanging(string value);
     4612    partial void OnJobNameChanged();
     4613    partial void OnUserNameChanging(string value);
     4614    partial void OnUserNameChanged();
     4615    partial void OnDateCreatedChanging(System.DateTime value);
     4616    partial void OnDateCreatedChanged();
     4617    partial void OnTotalTasksChanging(int value);
     4618    partial void OnTotalTasksChanged();
     4619    partial void OnCompletedTasksChanging(int value);
     4620    partial void OnCompletedTasksChanged();
     4621    partial void OnDateCompletedChanging(System.Nullable<System.DateTime> value);
     4622    partial void OnDateCompletedChanged();
     4623    #endregion
     4624   
     4625    public DimJob()
     4626    {
     4627      this._FactTasks = new EntitySet<FactTask>(new Action<FactTask>(this.attach_FactTasks), new Action<FactTask>(this.detach_FactTasks));
     4628      OnCreated();
     4629    }
     4630   
     4631    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
     4632    public System.Guid JobId
     4633    {
     4634      get
     4635      {
     4636        return this._JobId;
     4637      }
     4638      set
     4639      {
     4640        if ((this._JobId != value))
     4641        {
     4642          this.OnJobIdChanging(value);
     4643          this.SendPropertyChanging();
     4644          this._JobId = value;
     4645          this.SendPropertyChanged("JobId");
     4646          this.OnJobIdChanged();
     4647        }
     4648      }
     4649    }
     4650   
     4651    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier NOT NULL")]
     4652    public System.Guid UserId
     4653    {
     4654      get
     4655      {
     4656        return this._UserId;
     4657      }
     4658      set
     4659      {
     4660        if ((this._UserId != value))
     4661        {
     4662          this.OnUserIdChanging(value);
     4663          this.SendPropertyChanging();
     4664          this._UserId = value;
     4665          this.SendPropertyChanged("UserId");
     4666          this.OnUserIdChanged();
     4667        }
     4668      }
     4669    }
     4670   
     4671    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobName", DbType="VarChar(MAX) NOT NULL", CanBeNull=false)]
     4672    public string JobName
     4673    {
     4674      get
     4675      {
     4676        return this._JobName;
     4677      }
     4678      set
     4679      {
     4680        if ((this._JobName != value))
     4681        {
     4682          this.OnJobNameChanging(value);
     4683          this.SendPropertyChanging();
     4684          this._JobName = value;
     4685          this.SendPropertyChanged("JobName");
     4686          this.OnJobNameChanged();
     4687        }
     4688      }
     4689    }
     4690   
     4691    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserName", DbType="VarChar(MAX) NOT NULL", CanBeNull=false)]
     4692    public string UserName
     4693    {
     4694      get
     4695      {
     4696        return this._UserName;
     4697      }
     4698      set
     4699      {
     4700        if ((this._UserName != value))
     4701        {
     4702          this.OnUserNameChanging(value);
     4703          this.SendPropertyChanging();
     4704          this._UserName = value;
     4705          this.SendPropertyChanged("UserName");
     4706          this.OnUserNameChanged();
     4707        }
     4708      }
     4709    }
     4710   
     4711    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DateCreated", DbType="DateTime NOT NULL")]
     4712    public System.DateTime DateCreated
     4713    {
     4714      get
     4715      {
     4716        return this._DateCreated;
     4717      }
     4718      set
     4719      {
     4720        if ((this._DateCreated != value))
     4721        {
     4722          this.OnDateCreatedChanging(value);
     4723          this.SendPropertyChanging();
     4724          this._DateCreated = value;
     4725          this.SendPropertyChanged("DateCreated");
     4726          this.OnDateCreatedChanged();
     4727        }
     4728      }
     4729    }
     4730   
     4731    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_TotalTasks", DbType="INT NOT NULL")]
     4732    public int TotalTasks
     4733    {
     4734      get
     4735      {
     4736        return this._TotalTasks;
     4737      }
     4738      set
     4739      {
     4740        if ((this._TotalTasks != value))
     4741        {
     4742          this.OnTotalTasksChanging(value);
     4743          this.SendPropertyChanging();
     4744          this._TotalTasks = value;
     4745          this.SendPropertyChanged("TotalTasks");
     4746          this.OnTotalTasksChanged();
     4747        }
     4748      }
     4749    }
     4750   
     4751    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CompletedTasks", DbType="INT NOT NULL")]
     4752    public int CompletedTasks
     4753    {
     4754      get
     4755      {
     4756        return this._CompletedTasks;
     4757      }
     4758      set
     4759      {
     4760        if ((this._CompletedTasks != value))
     4761        {
     4762          this.OnCompletedTasksChanging(value);
     4763          this.SendPropertyChanging();
     4764          this._CompletedTasks = value;
     4765          this.SendPropertyChanged("CompletedTasks");
     4766          this.OnCompletedTasksChanged();
     4767        }
     4768      }
     4769    }
     4770   
     4771    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DateCompleted", DbType="DateTime NULL")]
     4772    public System.Nullable<System.DateTime> DateCompleted
     4773    {
     4774      get
     4775      {
     4776        return this._DateCompleted;
     4777      }
     4778      set
     4779      {
     4780        if ((this._DateCompleted != value))
     4781        {
     4782          this.OnDateCompletedChanging(value);
     4783          this.SendPropertyChanging();
     4784          this._DateCompleted = value;
     4785          this.SendPropertyChanged("DateCompleted");
     4786          this.OnDateCompletedChanged();
     4787        }
     4788      }
     4789    }
     4790   
     4791    [global::System.Data.Linq.Mapping.AssociationAttribute(Name="DimJob_FactTask", Storage="_FactTasks", ThisKey="JobId", OtherKey="JobId")]
     4792    public EntitySet<FactTask> FactTasks
     4793    {
     4794      get
     4795      {
     4796        return this._FactTasks;
     4797      }
     4798      set
     4799      {
     4800        this._FactTasks.Assign(value);
     4801      }
     4802    }
     4803   
     4804    public event PropertyChangingEventHandler PropertyChanging;
     4805   
     4806    public event PropertyChangedEventHandler PropertyChanged;
     4807   
     4808    protected virtual void SendPropertyChanging()
     4809    {
     4810      if ((this.PropertyChanging != null))
     4811      {
     4812        this.PropertyChanging(this, emptyChangingEventArgs);
     4813      }
     4814    }
     4815   
     4816    protected virtual void SendPropertyChanged(String propertyName)
     4817    {
     4818      if ((this.PropertyChanged != null))
     4819      {
     4820        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
     4821      }
     4822    }
     4823   
     4824    private void attach_FactTasks(FactTask entity)
     4825    {
     4826      this.SendPropertyChanging();
     4827      entity.DimJob = this;
     4828    }
     4829   
     4830    private void detach_FactTasks(FactTask entity)
     4831    {
     4832      this.SendPropertyChanging();
     4833      entity.DimJob = null;
     4834    }
     4835  }
     4836 
     4837  [global::System.Data.Linq.Mapping.TableAttribute(Name="[statistics].DimTime")]
     4838  public partial class DimTime : INotifyPropertyChanging, INotifyPropertyChanged
     4839  {
     4840   
     4841    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
     4842   
     4843    private System.DateTime _Time;
     4844   
     4845    private System.DateTime _Hour;
     4846   
     4847    private System.DateTime _Day;
     4848   
     4849    private System.DateTime _Month;
     4850   
     4851    private System.DateTime _Year;
     4852   
     4853    private System.DateTime _Minute;
     4854   
     4855    private EntitySet<FactClientInfo> _FactClientInfos;
     4856   
     4857    #region Extensibility Method Definitions
     4858    partial void OnLoaded();
     4859    partial void OnValidate(System.Data.Linq.ChangeAction action);
     4860    partial void OnCreated();
     4861    partial void OnTimeChanging(System.DateTime value);
     4862    partial void OnTimeChanged();
     4863    partial void OnHourChanging(System.DateTime value);
     4864    partial void OnHourChanged();
     4865    partial void OnDayChanging(System.DateTime value);
     4866    partial void OnDayChanged();
     4867    partial void OnMonthChanging(System.DateTime value);
     4868    partial void OnMonthChanged();
     4869    partial void OnYearChanging(System.DateTime value);
     4870    partial void OnYearChanged();
     4871    partial void OnMinuteChanging(System.DateTime value);
     4872    partial void OnMinuteChanged();
     4873    #endregion
     4874   
     4875    public DimTime()
     4876    {
     4877      this._FactClientInfos = new EntitySet<FactClientInfo>(new Action<FactClientInfo>(this.attach_FactClientInfos), new Action<FactClientInfo>(this.detach_FactClientInfos));
     4878      OnCreated();
     4879    }
     4880   
     4881    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Time", DbType="DateTime NOT NULL", IsPrimaryKey=true)]
     4882    public System.DateTime Time
     4883    {
     4884      get
     4885      {
     4886        return this._Time;
     4887      }
     4888      set
     4889      {
     4890        if ((this._Time != value))
     4891        {
     4892          this.OnTimeChanging(value);
     4893          this.SendPropertyChanging();
     4894          this._Time = value;
     4895          this.SendPropertyChanged("Time");
     4896          this.OnTimeChanged();
     4897        }
     4898      }
     4899    }
     4900   
     4901    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Hour", DbType="DateTime NOT NULL")]
     4902    public System.DateTime Hour
     4903    {
     4904      get
     4905      {
     4906        return this._Hour;
     4907      }
     4908      set
     4909      {
     4910        if ((this._Hour != value))
     4911        {
     4912          this.OnHourChanging(value);
     4913          this.SendPropertyChanging();
     4914          this._Hour = value;
     4915          this.SendPropertyChanged("Hour");
     4916          this.OnHourChanged();
     4917        }
     4918      }
     4919    }
     4920   
     4921    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Day", DbType="Date NOT NULL")]
     4922    public System.DateTime Day
     4923    {
     4924      get
     4925      {
     4926        return this._Day;
     4927      }
     4928      set
     4929      {
     4930        if ((this._Day != value))
     4931        {
     4932          this.OnDayChanging(value);
     4933          this.SendPropertyChanging();
     4934          this._Day = value;
     4935          this.SendPropertyChanged("Day");
     4936          this.OnDayChanged();
     4937        }
     4938      }
     4939    }
     4940   
     4941    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Month", DbType="Date NOT NULL")]
     4942    public System.DateTime Month
     4943    {
     4944      get
     4945      {
     4946        return this._Month;
     4947      }
     4948      set
     4949      {
     4950        if ((this._Month != value))
     4951        {
     4952          this.OnMonthChanging(value);
     4953          this.SendPropertyChanging();
     4954          this._Month = value;
     4955          this.SendPropertyChanged("Month");
     4956          this.OnMonthChanged();
     4957        }
     4958      }
     4959    }
     4960   
     4961    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Year", DbType="Date NOT NULL")]
     4962    public System.DateTime Year
     4963    {
     4964      get
     4965      {
     4966        return this._Year;
     4967      }
     4968      set
     4969      {
     4970        if ((this._Year != value))
     4971        {
     4972          this.OnYearChanging(value);
     4973          this.SendPropertyChanging();
     4974          this._Year = value;
     4975          this.SendPropertyChanged("Year");
     4976          this.OnYearChanged();
     4977        }
     4978      }
     4979    }
     4980   
     4981    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Minute")]
     4982    public System.DateTime Minute
     4983    {
     4984      get
     4985      {
     4986        return this._Minute;
     4987      }
     4988      set
     4989      {
     4990        if ((this._Minute != value))
     4991        {
     4992          this.OnMinuteChanging(value);
     4993          this.SendPropertyChanging();
     4994          this._Minute = value;
     4995          this.SendPropertyChanged("Minute");
     4996          this.OnMinuteChanged();
     4997        }
     4998      }
     4999    }
     5000   
     5001    [global::System.Data.Linq.Mapping.AssociationAttribute(Name="DimTime_FactClientInfo", Storage="_FactClientInfos", ThisKey="Time", OtherKey="Time")]
     5002    public EntitySet<FactClientInfo> FactClientInfos
     5003    {
     5004      get
     5005      {
     5006        return this._FactClientInfos;
     5007      }
     5008      set
     5009      {
     5010        this._FactClientInfos.Assign(value);
     5011      }
     5012    }
     5013   
     5014    public event PropertyChangingEventHandler PropertyChanging;
     5015   
     5016    public event PropertyChangedEventHandler PropertyChanged;
     5017   
     5018    protected virtual void SendPropertyChanging()
     5019    {
     5020      if ((this.PropertyChanging != null))
     5021      {
     5022        this.PropertyChanging(this, emptyChangingEventArgs);
     5023      }
     5024    }
     5025   
     5026    protected virtual void SendPropertyChanged(String propertyName)
     5027    {
     5028      if ((this.PropertyChanged != null))
     5029      {
     5030        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
     5031      }
     5032    }
     5033   
     5034    private void attach_FactClientInfos(FactClientInfo entity)
     5035    {
     5036      this.SendPropertyChanging();
     5037      entity.DimTime = this;
     5038    }
     5039   
     5040    private void detach_FactClientInfos(FactClientInfo entity)
     5041    {
     5042      this.SendPropertyChanging();
     5043      entity.DimTime = null;
     5044    }
     5045  }
     5046 
     5047  [global::System.Data.Linq.Mapping.TableAttribute(Name="[statistics].DimUser")]
     5048  public partial class DimUser : INotifyPropertyChanging, INotifyPropertyChanged
     5049  {
     5050   
     5051    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
     5052   
     5053    private System.Guid _UserId;
     5054   
     5055    private string _Name;
     5056   
     5057    private EntitySet<FactClientInfo> _FactClientInfos;
     5058   
     5059    #region Extensibility Method Definitions
     5060    partial void OnLoaded();
     5061    partial void OnValidate(System.Data.Linq.ChangeAction action);
     5062    partial void OnCreated();
     5063    partial void OnUserIdChanging(System.Guid value);
     5064    partial void OnUserIdChanged();
     5065    partial void OnNameChanging(string value);
     5066    partial void OnNameChanged();
     5067    #endregion
     5068   
     5069    public DimUser()
     5070    {
     5071      this._FactClientInfos = new EntitySet<FactClientInfo>(new Action<FactClientInfo>(this.attach_FactClientInfos), new Action<FactClientInfo>(this.detach_FactClientInfos));
     5072      OnCreated();
     5073    }
     5074   
     5075    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
     5076    public System.Guid UserId
     5077    {
     5078      get
     5079      {
     5080        return this._UserId;
     5081      }
     5082      set
     5083      {
     5084        if ((this._UserId != value))
     5085        {
     5086          this.OnUserIdChanging(value);
     5087          this.SendPropertyChanging();
     5088          this._UserId = value;
     5089          this.SendPropertyChanged("UserId");
     5090          this.OnUserIdChanged();
     5091        }
     5092      }
     5093    }
     5094   
     5095    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="VarChar(MAX) NOT NULL", CanBeNull=false)]
     5096    public string Name
     5097    {
     5098      get
     5099      {
     5100        return this._Name;
     5101      }
     5102      set
     5103      {
     5104        if ((this._Name != value))
     5105        {
     5106          this.OnNameChanging(value);
     5107          this.SendPropertyChanging();
     5108          this._Name = value;
     5109          this.SendPropertyChanged("Name");
     5110          this.OnNameChanged();
     5111        }
     5112      }
     5113    }
     5114   
     5115    [global::System.Data.Linq.Mapping.AssociationAttribute(Name="DimUser_FactClientInfo", Storage="_FactClientInfos", ThisKey="UserId", OtherKey="UserId")]
     5116    public EntitySet<FactClientInfo> FactClientInfos
     5117    {
     5118      get
     5119      {
     5120        return this._FactClientInfos;
     5121      }
     5122      set
     5123      {
     5124        this._FactClientInfos.Assign(value);
     5125      }
     5126    }
     5127   
     5128    public event PropertyChangingEventHandler PropertyChanging;
     5129   
     5130    public event PropertyChangedEventHandler PropertyChanged;
     5131   
     5132    protected virtual void SendPropertyChanging()
     5133    {
     5134      if ((this.PropertyChanging != null))
     5135      {
     5136        this.PropertyChanging(this, emptyChangingEventArgs);
     5137      }
     5138    }
     5139   
     5140    protected virtual void SendPropertyChanged(String propertyName)
     5141    {
     5142      if ((this.PropertyChanged != null))
     5143      {
     5144        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
     5145      }
     5146    }
     5147   
     5148    private void attach_FactClientInfos(FactClientInfo entity)
     5149    {
     5150      this.SendPropertyChanging();
     5151      entity.DimUser = this;
     5152    }
     5153   
     5154    private void detach_FactClientInfos(FactClientInfo entity)
     5155    {
     5156      this.SendPropertyChanging();
     5157      entity.DimUser = null;
     5158    }
     5159  }
     5160 
     5161  [global::System.Data.Linq.Mapping.TableAttribute(Name="[statistics].FactClientInfo")]
     5162  public partial class FactClientInfo : INotifyPropertyChanging, INotifyPropertyChanged
     5163  {
     5164   
     5165    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
     5166   
     5167    private System.Guid _ClientId;
     5168   
     5169    private System.DateTime _Time;
     5170   
     5171    private System.Guid _UserId;
     5172   
     5173    private int _NumUsedCores;
     5174   
     5175    private int _NumTotalCores;
     5176   
     5177    private int _UsedMemory;
     5178   
     5179    private int _TotalMemory;
     5180   
     5181    private double _CpuUtilization;
     5182   
     5183    private long _TotalTimeIdle;
     5184   
     5185    private long _TotalTimeOffline;
     5186   
     5187    private long _TotalTimeUnavailable;
     5188   
     5189    private global::HeuristicLab.Services.Hive.DataAccess.SlaveState _SlaveState;
     5190   
     5191    private bool _IsAllowedToCalculate;
     5192   
     5193    private EntityRef<DimClient> _DimClient;
     5194   
     5195    private EntityRef<DimTime> _DimTime;
     5196   
     5197    private EntityRef<DimUser> _DimUser;
     5198   
     5199    #region Extensibility Method Definitions
     5200    partial void OnLoaded();
     5201    partial void OnValidate(System.Data.Linq.ChangeAction action);
     5202    partial void OnCreated();
     5203    partial void OnClientIdChanging(System.Guid value);
     5204    partial void OnClientIdChanged();
     5205    partial void OnTimeChanging(System.DateTime value);
     5206    partial void OnTimeChanged();
     5207    partial void OnUserIdChanging(System.Guid value);
     5208    partial void OnUserIdChanged();
     5209    partial void OnNumUsedCoresChanging(int value);
     5210    partial void OnNumUsedCoresChanged();
     5211    partial void OnNumTotalCoresChanging(int value);
     5212    partial void OnNumTotalCoresChanged();
     5213    partial void OnUsedMemoryChanging(int value);
     5214    partial void OnUsedMemoryChanged();
     5215    partial void OnTotalMemoryChanging(int value);
     5216    partial void OnTotalMemoryChanged();
     5217    partial void OnCpuUtilizationChanging(double value);
     5218    partial void OnCpuUtilizationChanged();
     5219    partial void OnIdleTimeChanging(long value);
     5220    partial void OnIdleTimeChanged();
     5221    partial void OnOfflineTimeChanging(long value);
     5222    partial void OnOfflineTimeChanged();
     5223    partial void OnUnavailableTimeChanging(long value);
     5224    partial void OnUnavailableTimeChanged();
     5225    partial void OnSlaveStateChanging(global::HeuristicLab.Services.Hive.DataAccess.SlaveState value);
     5226    partial void OnSlaveStateChanged();
     5227    partial void OnIsAllowedToCalculateChanging(bool value);
     5228    partial void OnIsAllowedToCalculateChanged();
     5229    #endregion
     5230   
     5231    public FactClientInfo()
     5232    {
     5233      this._DimClient = default(EntityRef<DimClient>);
     5234      this._DimTime = default(EntityRef<DimTime>);
     5235      this._DimUser = default(EntityRef<DimUser>);
     5236      OnCreated();
     5237    }
     5238   
     5239    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ClientId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
     5240    public System.Guid ClientId
     5241    {
     5242      get
     5243      {
     5244        return this._ClientId;
     5245      }
     5246      set
     5247      {
     5248        if ((this._ClientId != value))
     5249        {
     5250          if (this._DimClient.HasLoadedOrAssignedValue)
     5251          {
     5252            throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
     5253          }
     5254          this.OnClientIdChanging(value);
     5255          this.SendPropertyChanging();
     5256          this._ClientId = value;
     5257          this.SendPropertyChanged("ClientId");
     5258          this.OnClientIdChanged();
     5259        }
     5260      }
     5261    }
     5262   
     5263    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Time", DbType="DateTime NOT NULL", IsPrimaryKey=true)]
     5264    public System.DateTime Time
     5265    {
     5266      get
     5267      {
     5268        return this._Time;
     5269      }
     5270      set
     5271      {
     5272        if ((this._Time != value))
     5273        {
     5274          if (this._DimTime.HasLoadedOrAssignedValue)
     5275          {
     5276            throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
     5277          }
     5278          this.OnTimeChanging(value);
     5279          this.SendPropertyChanging();
     5280          this._Time = value;
     5281          this.SendPropertyChanged("Time");
     5282          this.OnTimeChanged();
     5283        }
     5284      }
     5285    }
     5286   
     5287    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier NULL", IsPrimaryKey=true)]
     5288    public System.Guid UserId
     5289    {
     5290      get
     5291      {
     5292        return this._UserId;
     5293      }
     5294      set
     5295      {
     5296        if ((this._UserId != value))
     5297        {
     5298          if (this._DimUser.HasLoadedOrAssignedValue)
     5299          {
     5300            throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
     5301          }
     5302          this.OnUserIdChanging(value);
     5303          this.SendPropertyChanging();
     5304          this._UserId = value;
     5305          this.SendPropertyChanged("UserId");
     5306          this.OnUserIdChanged();
     5307        }
     5308      }
     5309    }
     5310   
     5311    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_NumUsedCores", DbType="Int NOT NULL")]
     5312    public int NumUsedCores
     5313    {
     5314      get
     5315      {
     5316        return this._NumUsedCores;
     5317      }
     5318      set
     5319      {
     5320        if ((this._NumUsedCores != value))
     5321        {
     5322          this.OnNumUsedCoresChanging(value);
     5323          this.SendPropertyChanging();
     5324          this._NumUsedCores = value;
     5325          this.SendPropertyChanged("NumUsedCores");
     5326          this.OnNumUsedCoresChanged();
     5327        }
     5328      }
     5329    }
     5330   
     5331    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_NumTotalCores", DbType="Int NOT NULL")]
     5332    public int NumTotalCores
     5333    {
     5334      get
     5335      {
     5336        return this._NumTotalCores;
     5337      }
     5338      set
     5339      {
     5340        if ((this._NumTotalCores != value))
     5341        {
     5342          this.OnNumTotalCoresChanging(value);
     5343          this.SendPropertyChanging();
     5344          this._NumTotalCores = value;
     5345          this.SendPropertyChanged("NumTotalCores");
     5346          this.OnNumTotalCoresChanged();
     5347        }
     5348      }
     5349    }
     5350   
     5351    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UsedMemory", DbType="Int NOT NULL")]
     5352    public int UsedMemory
     5353    {
     5354      get
     5355      {
     5356        return this._UsedMemory;
     5357      }
     5358      set
     5359      {
     5360        if ((this._UsedMemory != value))
     5361        {
     5362          this.OnUsedMemoryChanging(value);
     5363          this.SendPropertyChanging();
     5364          this._UsedMemory = value;
     5365          this.SendPropertyChanged("UsedMemory");
     5366          this.OnUsedMemoryChanged();
     5367        }
     5368      }
     5369    }
     5370   
     5371    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_TotalMemory", DbType="Int NOT NULL")]
     5372    public int TotalMemory
     5373    {
     5374      get
     5375      {
     5376        return this._TotalMemory;
     5377      }
     5378      set
     5379      {
     5380        if ((this._TotalMemory != value))
     5381        {
     5382          this.OnTotalMemoryChanging(value);
     5383          this.SendPropertyChanging();
     5384          this._TotalMemory = value;
     5385          this.SendPropertyChanged("TotalMemory");
     5386          this.OnTotalMemoryChanged();
     5387        }
     5388      }
     5389    }
     5390   
     5391    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CpuUtilization", DbType="Float NOT NULL")]
     5392    public double CpuUtilization
     5393    {
     5394      get
     5395      {
     5396        return this._CpuUtilization;
     5397      }
     5398      set
     5399      {
     5400        if ((this._CpuUtilization != value))
     5401        {
     5402          this.OnCpuUtilizationChanging(value);
     5403          this.SendPropertyChanging();
     5404          this._CpuUtilization = value;
     5405          this.SendPropertyChanged("CpuUtilization");
     5406          this.OnCpuUtilizationChanged();
     5407        }
     5408      }
     5409    }
     5410   
     5411    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_TotalTimeIdle", DbType="INT NOT NULL")]
     5412    public long IdleTime
     5413    {
     5414      get
     5415      {
     5416        return this._TotalTimeIdle;
     5417      }
     5418      set
     5419      {
     5420        if ((this._TotalTimeIdle != value))
     5421        {
     5422          this.OnIdleTimeChanging(value);
     5423          this.SendPropertyChanging();
     5424          this._TotalTimeIdle = value;
     5425          this.SendPropertyChanged("IdleTime");
     5426          this.OnIdleTimeChanged();
     5427        }
     5428      }
     5429    }
     5430   
     5431    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_TotalTimeOffline", DbType="INT NOT NULL")]
     5432    public long OfflineTime
     5433    {
     5434      get
     5435      {
     5436        return this._TotalTimeOffline;
     5437      }
     5438      set
     5439      {
     5440        if ((this._TotalTimeOffline != value))
     5441        {
     5442          this.OnOfflineTimeChanging(value);
     5443          this.SendPropertyChanging();
     5444          this._TotalTimeOffline = value;
     5445          this.SendPropertyChanged("OfflineTime");
     5446          this.OnOfflineTimeChanged();
     5447        }
     5448      }
     5449    }
     5450   
     5451    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_TotalTimeUnavailable", DbType="INT NOT NULL")]
     5452    public long UnavailableTime
     5453    {
     5454      get
     5455      {
     5456        return this._TotalTimeUnavailable;
     5457      }
     5458      set
     5459      {
     5460        if ((this._TotalTimeUnavailable != value))
     5461        {
     5462          this.OnUnavailableTimeChanging(value);
     5463          this.SendPropertyChanging();
     5464          this._TotalTimeUnavailable = value;
     5465          this.SendPropertyChanged("UnavailableTime");
     5466          this.OnUnavailableTimeChanged();
     5467        }
     5468      }
     5469    }
     5470   
     5471    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SlaveState", DbType="VarChar(15)", CanBeNull=false)]
     5472    public global::HeuristicLab.Services.Hive.DataAccess.SlaveState SlaveState
     5473    {
     5474      get
     5475      {
     5476        return this._SlaveState;
     5477      }
     5478      set
     5479      {
     5480        if ((this._SlaveState != value))
     5481        {
     5482          this.OnSlaveStateChanging(value);
     5483          this.SendPropertyChanging();
     5484          this._SlaveState = value;
     5485          this.SendPropertyChanged("SlaveState");
     5486          this.OnSlaveStateChanged();
     5487        }
     5488      }
     5489    }
     5490   
     5491    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_IsAllowedToCalculate", DbType="BIT")]
     5492    public bool IsAllowedToCalculate
     5493    {
     5494      get
     5495      {
     5496        return this._IsAllowedToCalculate;
     5497      }
     5498      set
     5499      {
     5500        if ((this._IsAllowedToCalculate != value))
     5501        {
     5502          this.OnIsAllowedToCalculateChanging(value);
     5503          this.SendPropertyChanging();
     5504          this._IsAllowedToCalculate = value;
     5505          this.SendPropertyChanged("IsAllowedToCalculate");
     5506          this.OnIsAllowedToCalculateChanged();
     5507        }
     5508      }
     5509    }
     5510   
     5511    [global::System.Data.Linq.Mapping.AssociationAttribute(Name="DimClient_FactClientInfo", Storage="_DimClient", ThisKey="ClientId", OtherKey="Id", IsForeignKey=true)]
     5512    public DimClient DimClient
     5513    {
     5514      get
     5515      {
     5516        return this._DimClient.Entity;
     5517      }
     5518      set
     5519      {
     5520        DimClient previousValue = this._DimClient.Entity;
     5521        if (((previousValue != value)
     5522              || (this._DimClient.HasLoadedOrAssignedValue == false)))
     5523        {
     5524          this.SendPropertyChanging();
     5525          if ((previousValue != null))
     5526          {
     5527            this._DimClient.Entity = null;
     5528            previousValue.FactClientInfos.Remove(this);
     5529          }
     5530          this._DimClient.Entity = value;
     5531          if ((value != null))
     5532          {
     5533            value.FactClientInfos.Add(this);
     5534            this._ClientId = value.Id;
     5535          }
     5536          else
     5537          {
     5538            this._ClientId = default(System.Guid);
     5539          }
     5540          this.SendPropertyChanged("DimClient");
     5541        }
     5542      }
     5543    }
     5544   
     5545    [global::System.Data.Linq.Mapping.AssociationAttribute(Name="DimTime_FactClientInfo", Storage="_DimTime", ThisKey="Time", OtherKey="Time", IsForeignKey=true)]
     5546    public DimTime DimTime
     5547    {
     5548      get
     5549      {
     5550        return this._DimTime.Entity;
     5551      }
     5552      set
     5553      {
     5554        DimTime previousValue = this._DimTime.Entity;
     5555        if (((previousValue != value)
     5556              || (this._DimTime.HasLoadedOrAssignedValue == false)))
     5557        {
     5558          this.SendPropertyChanging();
     5559          if ((previousValue != null))
     5560          {
     5561            this._DimTime.Entity = null;
     5562            previousValue.FactClientInfos.Remove(this);
     5563          }
     5564          this._DimTime.Entity = value;
     5565          if ((value != null))
     5566          {
     5567            value.FactClientInfos.Add(this);
     5568            this._Time = value.Time;
     5569          }
     5570          else
     5571          {
     5572            this._Time = default(System.DateTime);
     5573          }
     5574          this.SendPropertyChanged("DimTime");
     5575        }
     5576      }
     5577    }
     5578   
     5579    [global::System.Data.Linq.Mapping.AssociationAttribute(Name="DimUser_FactClientInfo", Storage="_DimUser", ThisKey="UserId", OtherKey="UserId", IsForeignKey=true)]
     5580    public DimUser DimUser
     5581    {
     5582      get
     5583      {
     5584        return this._DimUser.Entity;
     5585      }
     5586      set
     5587      {
     5588        DimUser previousValue = this._DimUser.Entity;
     5589        if (((previousValue != value)
     5590              || (this._DimUser.HasLoadedOrAssignedValue == false)))
     5591        {
     5592          this.SendPropertyChanging();
     5593          if ((previousValue != null))
     5594          {
     5595            this._DimUser.Entity = null;
     5596            previousValue.FactClientInfos.Remove(this);
     5597          }
     5598          this._DimUser.Entity = value;
     5599          if ((value != null))
     5600          {
     5601            value.FactClientInfos.Add(this);
     5602            this._UserId = value.UserId;
     5603          }
     5604          else
     5605          {
     5606            this._UserId = default(System.Guid);
     5607          }
     5608          this.SendPropertyChanged("DimUser");
     5609        }
     5610      }
     5611    }
     5612   
     5613    public event PropertyChangingEventHandler PropertyChanging;
     5614   
     5615    public event PropertyChangedEventHandler PropertyChanged;
     5616   
     5617    protected virtual void SendPropertyChanging()
     5618    {
     5619      if ((this.PropertyChanging != null))
     5620      {
     5621        this.PropertyChanging(this, emptyChangingEventArgs);
     5622      }
     5623    }
     5624   
     5625    protected virtual void SendPropertyChanged(String propertyName)
     5626    {
     5627      if ((this.PropertyChanged != null))
     5628      {
     5629        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
     5630      }
     5631    }
     5632  }
    45365633}
    45375634#pragma warning restore 1591
  • trunk/sources/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Initialize Hive Database.sql

    r9665 r12878  
    1 USE [HeuristicLab.Hive-3.3]
    2 /* create and initialize hive database tables */
     1/* HeuristicLab
     2 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 *
     4 * This file is part of HeuristicLab.
     5 *
     6 * HeuristicLab is free software: you can redistribute it and/or modify
     7 * it under the terms of the GNU General Public License as published by
     8 * the Free Software Foundation, either version 3 of the License, or
     9 * (at your option) any later version.
     10 *
     11 * HeuristicLab is distributed in the hope that it will be useful,
     12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14 * GNU General Public License for more details.
     15 *
     16 * You should have received a copy of the GNU General Public License
     17 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     18 */
     19USE [HeuristicLab.Hive-3.3]
    320
    421EXEC sp_configure filestream_access_level, 2
     
    131148  [DateEnqueued] DateTime NOT NULL,
    132149  CONSTRAINT [PK_UserPriority] PRIMARY KEY ([UserId])
    133   )
    134 CREATE TABLE [DeletedJobStatistics](
    135   [UserId] UniqueIdentifier NOT NULL,
    136   [ExecutionTimeS] float NOT NULL,
    137   [ExecutionTimeSFinishedJobs] float NOT NULL,
    138   [StartToEndTimeS] float NOT NULL,
    139   [DeletedJobStatisticsId] UniqueIdentifier NOT NULL,
    140   CONSTRAINT [PK_DeletedJobStatistics] PRIMARY KEY ([DeletedJobStatisticsId])
    141   )
    142 CREATE TABLE [UserStatistics](
    143   [StatisticsId] UniqueIdentifier NOT NULL,
    144   [UserId] UniqueIdentifier NOT NULL,
    145   [ExecutionTimeMs] float NOT NULL,
    146   [UsedCores] Int NOT NULL,
    147   [ExecutionTimeMsFinishedJobs] float NOT NULL,
    148   [StartToEndTimeMs] float NOT NULL,
    149   CONSTRAINT [PK_UserStatistics] PRIMARY KEY ([StatisticsId], [UserId])
    150   )
    151 CREATE TABLE [SlaveStatistics](
    152   [StatisticsId] UniqueIdentifier NOT NULL,
    153   [SlaveId] UniqueIdentifier NOT NULL,
    154   [Cores] Int NOT NULL,
    155   [FreeCores] Int NOT NULL,
    156   [CpuUtilization] float NOT NULL,
    157   [Memory] Int NOT NULL,
    158   [FreeMemory] Int NOT NULL,
    159   CONSTRAINT [PK_SlaveStatistics] PRIMARY KEY ([StatisticsId], [SlaveId])
    160   )
    161 CREATE TABLE [Statistics](
    162   [StatisticsId] UniqueIdentifier NOT NULL,
    163   [Timestamp] DateTime NOT NULL,
    164   CONSTRAINT [PK_Statistics] PRIMARY KEY ([StatisticsId])
    165150  )
    166151ALTER TABLE [dbo].[AssignedResources]
     
    192177ALTER TABLE [dbo].[JobPermission]
    193178  ADD CONSTRAINT [Job_JobPermission] FOREIGN KEY ([JobId]) REFERENCES [dbo].[Job]([JobId])
    194 ALTER TABLE [UserStatistics]
    195   ADD CONSTRAINT [Statistics_UserStatistics] FOREIGN KEY ([StatisticsId]) REFERENCES [Statistics]([StatisticsId])
    196 ALTER TABLE [SlaveStatistics]
    197   ADD CONSTRAINT [Statistics_SlaveStatistics] FOREIGN KEY ([StatisticsId]) REFERENCES [Statistics]([StatisticsId])
     179
     180GO
     181CREATE SCHEMA [statistics]
     182GO
     183
     184CREATE TABLE [statistics].[DimTime] (
     185    [Time]   DATETIME NOT NULL,
     186    [Minute] DATETIME NOT NULL,
     187    [Hour]   DATETIME NOT NULL,
     188    [Day]    DATE     NOT NULL,
     189    [Month]  DATE     NOT NULL,
     190    [Year]   DATE     NOT NULL,
     191    CONSTRAINT [PK_DimTime] PRIMARY KEY CLUSTERED ([Time] ASC)
     192);
     193CREATE TABLE [statistics].[DimClient] (
     194    [Id]               UNIQUEIDENTIFIER CONSTRAINT [DF_DimClient_Id] DEFAULT (newsequentialid()) NOT NULL,
     195    [Name]             VARCHAR (MAX)    NOT NULL,
     196    [ResourceId]       UNIQUEIDENTIFIER NOT NULL,
     197    [ExpirationTime]   DATETIME         NULL,
     198    [ResourceGroupId]  UNIQUEIDENTIFIER NULL,
     199    [ResourceGroup2Id] UNIQUEIDENTIFIER NULL,
     200    [GroupName]        VARCHAR (MAX)    NULL,
     201    [GroupName2]       VARCHAR (MAX)    NULL,
     202    CONSTRAINT [PK_DimClient] PRIMARY KEY CLUSTERED ([Id] ASC)
     203);
     204CREATE TABLE [statistics].[DimJob] (
     205    [JobId]          UNIQUEIDENTIFIER NOT NULL,
     206    [UserId]         UNIQUEIDENTIFIER NOT NULL,
     207    [JobName]        VARCHAR (MAX)    NOT NULL,
     208    [UserName]       VARCHAR (MAX)    NOT NULL,
     209    [DateCreated]    DATETIME     NOT NULL,
     210    [TotalTasks]     INT              NOT NULL,
     211    [CompletedTasks] INT              NOT NULL,
     212    [DateCompleted]  DATETIME     NULL,
     213    CONSTRAINT [PK_DimJob] PRIMARY KEY CLUSTERED ([JobId] ASC)
     214);
     215CREATE TABLE [statistics].[DimUser] (
     216    [UserId] UNIQUEIDENTIFIER NOT NULL,
     217    [Name]   VARCHAR (MAX)    NOT NULL,
     218    CONSTRAINT [PK_DimUser] PRIMARY KEY CLUSTERED ([UserId] ASC)
     219);
     220CREATE TABLE [statistics].[FactClientInfo] (
     221    [ClientId]             UNIQUEIDENTIFIER NOT NULL,
     222    [Time]                 DATETIME         NOT NULL,
     223    [UserId]               UNIQUEIDENTIFIER NOT NULL,
     224    [NumUsedCores]         INT              NOT NULL,
     225    [NumTotalCores]        INT              NOT NULL,
     226    [UsedMemory]           INT              NOT NULL,
     227    [TotalMemory]          INT              NOT NULL,
     228    [CpuUtilization]       FLOAT (53)       NOT NULL,
     229    [SlaveState]           VarChar(15)      NOT NULL,
     230    [IdleTime]             INT              NOT NULL,
     231    [OfflineTime]          INT              NOT NULL,
     232    [UnavailableTime]      INT              NOT NULL,
     233    [IsAllowedToCalculate] BIT              NOT NULL,
     234    CONSTRAINT [PK_FactClientInfo] PRIMARY KEY CLUSTERED ([ClientId] ASC, [Time] ASC, [UserId] ASC),
     235    CONSTRAINT [FK_FactClientInfo_DimTime] FOREIGN KEY ([Time]) REFERENCES [statistics].[DimTime] ([Time]),
     236    CONSTRAINT [FK_FactClientInfo_DimClient] FOREIGN KEY ([ClientId]) REFERENCES [statistics].[DimClient] ([Id]),
     237    CONSTRAINT [FK_FactClientInfo_DimUser] FOREIGN KEY ([UserId]) REFERENCES [statistics].[DimUser] ([UserId])
     238);
     239CREATE TABLE [statistics].[FactTask] (
     240  [TaskId]             UNIQUEIDENTIFIER NOT NULL,
     241  [CalculatingTime]    INT              NOT NULL,
     242  [WaitingTime]        INT              NOT NULL,
     243  [TransferTime]       INT              NOT NULL,
     244  [NumCalculationRuns] INT              NOT NULL,
     245  [NumRetries]         INT              NOT NULL,
     246  [CoresRequired]      INT              NOT NULL,
     247  [MemoryRequired]     INT              NOT NULL,
     248  [Priority]           INT              NOT NULL,
     249  [LastClientId]       UNIQUEIDENTIFIER NULL,
     250  [JobId]          UNIQUEIDENTIFIER NOT NULL,
     251  [StartTime]          DATETIME         NULL,
     252  [EndTime]            DATETIME         NULL,
     253  [TaskState]          VARCHAR (30)     NOT NULL,
     254  [Exception]          VARCHAR (MAX)    NULL,
     255  [InitialWaitingTime] INT              NULL,
     256  CONSTRAINT [PK_FactTask] PRIMARY KEY CLUSTERED ([TaskId] ASC),
     257  CONSTRAINT [FK_FactTask_DimClient] FOREIGN KEY ([LastClientId]) REFERENCES [statistics].[DimClient] ([Id]),
     258  CONSTRAINT [FK_FactTask_DimJob] FOREIGN KEY ([JobId]) REFERENCES [statistics].[DimJob] ([JobId])
     259);
     260
     261/* dummy for nullable userIds in FactClientInfo */
     262INSERT INTO [statistics].[DimUser] ([UserId], [Name])
     263VALUES ('00000000-0000-0000-0000-000000000000', 'NULL');
  • trunk/sources/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Prepare Hive Database.sql

    r9665 r12878  
     1/* HeuristicLab
     2 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 *
     4 * This file is part of HeuristicLab.
     5 *
     6 * HeuristicLab is free software: you can redistribute it and/or modify
     7 * it under the terms of the GNU General Public License as published by
     8 * the Free Software Foundation, either version 3 of the License, or
     9 * (at your option) any later version.
     10 *
     11 * HeuristicLab is distributed in the hope that it will be useful,
     12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14 * GNU General Public License for more details.
     15 *
     16 * You should have received a copy of the GNU General Public License
     17 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     18 */
     19
     20/* this script is supposed to be executed after the plain DB is generated by the linq-to-sql schema */
    121USE [HeuristicLab.Hive-3.3]
    2 /* this script is supposed to be executed after the plain DB is generated by the linq-to-sql schema */
    3 /* adds default values */
    4 /* creates delete and update cascades */
    5 /* creates indices */
    6 /* creates views */
    7 /* creates triggers */
    8 
    922
    1023ALTER TABLE [dbo].[AssignedResources]  DROP  CONSTRAINT [Task_AssignedResource]
     
    93106GO
    94107
    95 ALTER TABLE [dbo].[Statistics] ALTER COLUMN StatisticsId ADD ROWGUIDCOL;
    96 ALTER TABLE [dbo].[Statistics] WITH NOCHECK ADD CONSTRAINT [DF_Statistics_StatisticsId] DEFAULT (NEWSEQUENTIALID()) FOR StatisticsId;
    97 GO
    98 
    99 ALTER TABLE [dbo].[DeletedJobStatistics] ALTER COLUMN DeletedJobStatisticsId ADD ROWGUIDCOL;
    100 ALTER TABLE [dbo].[DeletedJobStatistics] WITH NOCHECK ADD CONSTRAINT [DF_DeletedJobStatistics_DeletedJobStatisticsId] DEFAULT (NEWSEQUENTIALID()) FOR DeletedJobStatisticsId;
    101 GO
    102 
    103 ALTER TABLE [dbo].[SlaveStatistics]  DROP  CONSTRAINT [Statistics_SlaveStatistics]
    104 ALTER TABLE [dbo].[SlaveStatistics]  WITH CHECK ADD  CONSTRAINT [Statistics_SlaveStatistics] FOREIGN KEY([StatisticsId])
    105 REFERENCES [dbo].[Statistics] ([StatisticsId])
    106 ON UPDATE CASCADE
    107 ON DELETE CASCADE
    108 GO
    109 
    110 ALTER TABLE [dbo].[UserStatistics]  DROP  CONSTRAINT [Statistics_UserStatistics]
    111 ALTER TABLE [dbo].[UserStatistics]  WITH CHECK ADD  CONSTRAINT [Statistics_UserStatistics] FOREIGN KEY([StatisticsId])
    112 REFERENCES [dbo].[Statistics] ([StatisticsId])
    113 ON UPDATE CASCADE
    114 ON DELETE CASCADE
    115 GO
    116 
    117108/* create indices */
    118109CREATE INDEX Index_RequiredPlugins_TaskId ON RequiredPlugins(TaskId);
    119110GO
    120111
    121 /* views */
    122 -- =============================================
    123 -- Author:    cneumuel
    124 -- Description: Returns the first StateLog entry for each job
    125 -- =============================================
    126 CREATE VIEW [dbo].[view_FirstState]
    127 AS
    128 SELECT     sl.TaskId, sl.DateTime, sl.State
    129 FROM         dbo.StateLog AS sl INNER JOIN
    130                           (SELECT     TaskId, MIN(DateTime) AS DateTime
    131                             FROM          dbo.StateLog
    132                             GROUP BY TaskId) AS minDate ON sl.DateTime = minDate.DateTime AND sl.TaskId = minDate.TaskId
    133 
     112-- speed up joins between Job and Task
     113CREATE NONCLUSTERED INDEX [TaskJobIdIndex]
     114ON [dbo].[Task] ([JobId])
     115INCLUDE ([TaskId],[TaskState],[ExecutionTimeMs],[LastHeartbeat],[ParentTaskId],[Priority],[CoresNeeded],[MemoryNeeded],[IsParentTask],[FinishWhenChildJobsFinished],[Command],[IsPrivileged])
    134116GO
    135117
    136 -- =============================================
    137 -- Author:    cneumuel
    138 -- Description: Returns the last StateLog entry for each job
    139 -- =============================================
    140 CREATE VIEW [dbo].[view_LastState]
    141 AS
    142 SELECT     sl.TaskId, sl.DateTime, sl.State
    143 FROM         dbo.StateLog AS sl INNER JOIN
    144                           (SELECT     TaskId, MAX(DateTime) AS DateTime
    145                             FROM          dbo.StateLog
    146                             GROUP BY TaskId) AS minDate ON sl.DateTime = minDate.DateTime AND sl.TaskId = minDate.TaskId
     118-- this is an index to speed up the GetWaitingTasks() method
     119CREATE NONCLUSTERED INDEX [TaskGetWaitingTasksIndex]
     120ON [dbo].[Task] ([TaskState],[IsParentTask],[FinishWhenChildJobsFinished],[CoresNeeded],[MemoryNeeded])
     121INCLUDE ([TaskId],[ExecutionTimeMs],[LastHeartbeat],[ParentTaskId],[Priority],[Command],[JobId],[IsPrivileged])
    147122GO
    148123
    149 -- =============================================
    150 -- Author:    cneumuel
    151 -- Description: returns aggregates statistic information for every minute
    152 -- =============================================
    153 CREATE VIEW [dbo].[view_Statistics]
    154 AS
    155 SELECT  CONVERT(VARCHAR(19), MIN(s.Timestamp), 120) AS DateTime, SUM(ss.Cores) AS Cores, SUM(ss.FreeCores) AS FreeCores,
    156         AVG(ss.CpuUtilization) AS CpuUtilization, SUM(ss.Memory) AS Memory, SUM(ss.FreeMemory) AS FreeMemory, x.exSum AS ExecutionTimeHours,
    157         x.exFinishedSum AS ExecutionTimeFinished, x.exStartToEndSum AS StartToEndTimeFinished
    158 FROM         dbo.SlaveStatistics AS ss INNER JOIN
    159                       dbo.[Statistics] AS s ON ss.StatisticsId = s.StatisticsId INNER JOIN
    160                       dbo.Resource AS r ON ss.SlaveId = r.ResourceId INNER JOIN
    161                           (SELECT     StatisticsId, SUM(ExecutionTimeMs) / 1000 / 60 / 60 AS exSum, SUM(ExecutionTimeMsFinishedJobs) / 1000 / 60 / 60 AS exFinishedSum,
    162                                                    SUM(StartToEndTimeMs) / 1000 / 60 / 60 AS exStartToEndSum
    163                             FROM          dbo.UserStatistics AS us
    164                             GROUP BY StatisticsId) AS x ON s.StatisticsId = x.StatisticsId
    165 GROUP BY s.StatisticsId, x.exSum, x.exFinishedSum, x.exStartToEndSum
    166124
    167 /* triggers */
    168 GO
    169125/****** Object:  Trigger [dbo].[tr_JobDeleteCascade]    Script Date: 04/19/2011 16:31:53 ******/
    170126SET ANSI_NULLS ON
     
    182138CREATE TRIGGER [dbo].[tr_JobDeleteCascade] ON [dbo].[Job] INSTEAD OF DELETE AS
    183139BEGIN
    184   DELETE Task FROM deleted, Task WHERE deleted.JobId = Task.JobId
    185   DELETE Job FROM deleted, Job WHERE deleted.JobId = Job.JobId
     140    DELETE Task FROM deleted, Task WHERE deleted.JobId = Task.JobId
     141    DELETE Job FROM deleted, Job WHERE deleted.JobId = Job.JobId
    186142END
    187143GO
     
    191147-- Create date: 11.11.2010
    192148-- Description: Recursively deletes all child-jobs of a job when it is deleted. (Source: http://devio.wordpress.com/2008/05/23/recursive-delete-in-sql-server/)
    193 -- =============================================
     149-- =============================================DeletedJobStatistics
    194150CREATE TRIGGER [dbo].[tr_TaskDeleteCascade] ON [dbo].[Task] INSTEAD OF DELETE AS
    195151BEGIN
    196   -- add statistics
    197   INSERT INTO dbo.DeletedJobStatistics (UserId, ExecutionTimeS, ExecutionTimeSFinishedJobs, StartToEndTimeS)
    198   SELECT
    199     he.OwnerUserId AS UserId,
    200     ROUND(SUM(j.ExecutionTimeMs) / 1000, 0) AS ExecutionTimeS, 
    201     ROUND(ISNULL(SUM(CASE ls.State WHEN 'Finished' THEN j.ExecutionTimeMs END), 0) / 1000, 0) AS ExecutionTimeSFinishedJobs,
    202     ISNULL(SUM(CASE ls.State WHEN 'Finished' THEN DATEDIFF(s, fs.DateTime, ls.DateTime) ELSE 0 END), 0) AS StartToEndTimeS
    203   FROM
    204     deleted j,
    205     Job he,
    206     view_FirstState fs,
    207     view_LastState ls
    208   WHERE
    209     he.JobId = j.JobId AND
    210     fs.TaskId = j.TaskId AND
    211     ls.TaskId = j.TaskId
    212   GROUP BY he.OwnerUserId
    213 
    214   -- recursively delete jobs
    215   CREATE TABLE #Table(
    216     TaskId uniqueidentifier
    217   )
    218   INSERT INTO #Table (TaskId)
    219   SELECT TaskId FROM deleted
    220  
    221   DECLARE @c INT
    222   SET @c = 0
    223  
    224   WHILE @c <> (SELECT COUNT(TaskId) FROM #Table) BEGIN
    225     SELECT @c = COUNT(TaskId) FROM #Table
    226    
    227     INSERT INTO #Table (TaskId)
    228       SELECT Task.TaskId
    229       FROM Task
    230       LEFT OUTER JOIN #Table ON Task.TaskId = #Table.TaskId
    231       WHERE Task.ParentTaskId IN (SELECT TaskId FROM #Table)
    232         AND #Table.TaskId IS NULL
    233   END
    234  
    235   DELETE TaskData FROM TaskData INNER JOIN #Table ON TaskData.TaskId = #Table.TaskId
    236   DELETE Task FROM Task INNER JOIN #Table ON Task.TaskId = #Table.TaskId
     152    -- recursively delete jobs
     153    CREATE TABLE #Table(
     154        TaskId uniqueidentifier
     155    )
     156    INSERT INTO #Table (TaskId)
     157    SELECT TaskId FROM deleted
     158   
     159    DECLARE @c INT
     160    SET @c = 0
     161   
     162    WHILE @c <> (SELECT COUNT(TaskId) FROM #Table) BEGIN
     163        SELECT @c = COUNT(TaskId) FROM #Table
     164       
     165        INSERT INTO #Table (TaskId)
     166            SELECT Task.TaskId
     167            FROM Task
     168            LEFT OUTER JOIN #Table ON Task.TaskId = #Table.TaskId
     169            WHERE Task.ParentTaskId IN (SELECT TaskId FROM #Table)
     170                AND #Table.TaskId IS NULL
     171    END
     172   
     173    DELETE TaskData FROM TaskData INNER JOIN #Table ON TaskData.TaskId = #Table.TaskId
     174    DELETE Task FROM Task INNER JOIN #Table ON Task.TaskId = #Table.TaskId
    237175END
    238176GO
    239177
    240178
    241 CREATE TRIGGER [dbo].[tr_StatisticsDeleteCascade] ON [dbo].[Statistics] INSTEAD OF DELETE AS
    242 BEGIN
    243   DELETE SlaveStatistics FROM deleted, SlaveStatistics WHERE deleted.StatisticsId = SlaveStatistics.StatisticsId
    244   -- should also remove UserStatistics here
    245   DELETE [Statistics] FROM deleted, [Statistics] WHERE deleted.StatisticsId = [Statistics].StatisticsId
    246 END
    247 GO
    248 
    249 
    250 -- ============================================================
    251 -- Description: Create indices to speed up execution of queries
    252 -- ============================================================
    253 
    254 -- speed up joins between Job and Task
    255 CREATE NONCLUSTERED INDEX [TaskJobIdIndex]
    256 ON [dbo].[Task] ([JobId])
    257 INCLUDE ([TaskId],[TaskState],[ExecutionTimeMs],[LastHeartbeat],[ParentTaskId],[Priority],[CoresNeeded],[MemoryNeeded],[IsParentTask],[FinishWhenChildJobsFinished],[Command],[IsPrivileged])
    258 GO
    259 
    260 -- this is an index to speed up the GetWaitingTasks() method
    261 CREATE NONCLUSTERED INDEX [TaskGetWaitingTasksIndex]
    262 ON [dbo].[Task] ([TaskState],[IsParentTask],[FinishWhenChildJobsFinished],[CoresNeeded],[MemoryNeeded])
    263 INCLUDE ([TaskId],[ExecutionTimeMs],[LastHeartbeat],[ParentTaskId],[Priority],[Command],[JobId],[IsPrivileged])
    264 GO
  • trunk/sources/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj

    r11651 r12878  
    124124  </ItemGroup>
    125125  <ItemGroup>
     126    <ProjectReference Include="..\..\HeuristicLab.Services.Access.DataAccess\3.3\HeuristicLab.Services.Access.DataAccess-3.3.csproj">
     127      <Project>{0f652437-998a-4eab-8bf1-444b5fe8ce97}</Project>
     128      <Name>HeuristicLab.Services.Access.DataAccess-3.3</Name>
     129    </ProjectReference>
     130    <ProjectReference Include="..\..\HeuristicLab.Services.Access\3.3\HeuristicLab.Services.Access-3.3.csproj">
     131      <Project>{9fac0b23-2730-452a-9ba0-d7ca1746c541}</Project>
     132      <Name>HeuristicLab.Services.Access-3.3</Name>
     133    </ProjectReference>
    126134    <ProjectReference Include="..\..\HeuristicLab.Services.Hive.DataAccess\3.3\HeuristicLab.Services.Hive.DataAccess-3.3.csproj">
    127135      <Project>{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}</Project>
  • trunk/sources/HeuristicLab.Services.Hive.JanitorService/3.3/JanitorService.cs

    r12012 r12878  
    2626  public partial class JanitorService : ServiceBase {
    2727    private HiveJanitor janitor;
    28     private Thread janitorThread;
     28    private Thread janitorCleanupThread;
     29    private Thread janitorGenerateStatisticsThread;
    2930
    3031    public JanitorService() {
     
    3536      janitor = new HiveJanitor();
    3637
    37       janitorThread = new Thread(janitor.Run);
    38       janitorThread.IsBackground = true; //dont keep app alive
    39       janitorThread.Start();
     38      janitorCleanupThread = new Thread(janitor.RunCleanup) {
     39        IsBackground = true
     40      };
     41      janitorGenerateStatisticsThread = new Thread(janitor.RunGenerateStatistics) {
     42        IsBackground = true
     43      };
     44
     45      janitorCleanupThread.Start();
     46      janitorGenerateStatisticsThread.Start();
    4047    }
    4148
    4249    protected override void OnStop() {
    4350      janitor.StopJanitor();
    44       janitorThread.Join();
     51      janitorCleanupThread.Join();
     52      janitorGenerateStatisticsThread.Join();
    4553    }
    4654  }
  • trunk/sources/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj

    r11623 r12878  
    118118  </ItemGroup>
    119119  <ItemGroup>
    120     <Compile Include="Convert.cs" />
     120    <Compile Include="Converter.cs" />
    121121    <Compile Include="DataTransfer\Command.cs" />
    122122    <Compile Include="DataTransfer\UserPriority.cs" />
     
    139139    <Compile Include="DataTransfer\SlaveGroup.cs" />
    140140    <Compile Include="DataTransfer\SlaveState.cs" />
    141     <Compile Include="DataTransfer\SlaveStatistics.cs" />
    142141    <Compile Include="DataTransfer\StateLog.cs" />
    143     <Compile Include="DataTransfer\Statistics.cs" />
    144     <Compile Include="DataTransfer\UserStatistics.cs" />
    145     <Compile Include="OptimizedHiveDao.cs" />
    146     <Compile Include="HiveDao.cs" />
     142    <Compile Include="HiveStatisticsGenerator.cs" />
     143    <Compile Include="Interfaces\IStatisticsGenerator.cs" />
    147144    <Compile Include="HiveJanitor.cs" />
    148145    <Compile Include="HiveOperationContext.cs" />
    149     <Compile Include="Interfaces\IOptimizedHiveDao.cs" />
    150     <Compile Include="Interfaces\IHiveDao.cs" />
    151146    <Compile Include="Interfaces\ITaskScheduler.cs" />
     147    <Compile Include="PerformanceLogger.cs" />
    152148    <Compile Include="Scheduler\TaskInfoForScheduler.cs" />
    153149    <Compile Include="Scheduler\JobInfoForScheduler.cs" />
    154150    <Compile Include="Scheduler\RoundRobinTaskScheduler.cs" />
    155     <Compile Include="Settings.cs" />
    156151    <None Include="app.config" />
    157152    <None Include="Plugin.cs.frame" />
     
    182177  </ItemGroup>
    183178  <ItemGroup>
     179    <ProjectReference Include="..\..\HeuristicLab.Services.Access.DataAccess\3.3\HeuristicLab.Services.Access.DataAccess-3.3.csproj">
     180      <Project>{0F652437-998A-4EAB-8BF1-444B5FE8CE97}</Project>
     181      <Name>HeuristicLab.Services.Access.DataAccess-3.3</Name>
     182    </ProjectReference>
    184183    <ProjectReference Include="..\..\HeuristicLab.Services.Access\3.3\HeuristicLab.Services.Access-3.3.csproj">
    185184      <Project>{9FAC0B23-2730-452A-9BA0-D7CA1746C541}</Project>
  • trunk/sources/HeuristicLab.Services.Hive/3.3/HiveJanitor.cs

    r12012 r12878  
    2323using System.Threading;
    2424using HeuristicLab.Services.Hive.DataAccess;
     25using HeuristicLab.Services.Hive.DataAccess.Interfaces;
    2526
    2627namespace HeuristicLab.Services.Hive {
    2728  public class HiveJanitor {
    2829    private bool stop;
    29     private AutoResetEvent waitHandle;
     30    private AutoResetEvent cleanupWaitHandle;
     31    private AutoResetEvent generateStatisticsWaitHandle;
    3032
    31     private DataAccess.ITransactionManager trans {
    32       get { return ServiceLocator.Instance.TransactionManager; }
     33    private IPersistenceManager PersistenceManager {
     34      get { return ServiceLocator.Instance.PersistenceManager; }
    3335    }
    34 
    35     private IEventManager eventManager {
     36    private IEventManager EventManager {
    3637      get { return ServiceLocator.Instance.EventManager; }
    3738    }
    3839
    39     private IHiveDao dao {
    40       get { return ServiceLocator.Instance.HiveDao; }
     40    private IStatisticsGenerator StatisticsGenerator {
     41      get { return ServiceLocator.Instance.StatisticsGenerator; }
    4142    }
    4243
    4344    public HiveJanitor() {
    4445      stop = false;
    45       waitHandle = new AutoResetEvent(true);
     46      cleanupWaitHandle = new AutoResetEvent(false);
     47      generateStatisticsWaitHandle = new AutoResetEvent(false);
    4648    }
    4749
    4850    public void StopJanitor() {
    4951      stop = true;
    50       waitHandle.Set();
     52      cleanupWaitHandle.Set();
     53      generateStatisticsWaitHandle.Set();
    5154    }
    5255
    53     public void Run() {
     56    public void RunCleanup() {
     57      var pm = PersistenceManager;
    5458      while (!stop) {
    5559        try {
    56           LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log("HiveJanitor: starting cleanup");
     60          LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log("HiveJanitor: starting cleanup.");
    5761          bool cleanup = false;
    58           trans.UseTransaction(() => {
    59             DateTime lastCleanup = dao.GetLastCleanup();
    60             if (DateTime.Now - lastCleanup > HeuristicLab.Services.Hive.Properties.Settings.Default.CleanupInterval) {
    61               dao.SetLastCleanup(DateTime.Now);
     62
     63          var lifecycleDao = pm.LifecycleDao;
     64          pm.UseTransaction(() => {
     65            var lifecycle = lifecycleDao.GetLastLifecycle();
     66            if (lifecycle == null
     67                || DateTime.Now - lifecycle.LastCleanup > Properties.Settings.Default.CleanupInterval) {
     68              lifecycleDao.UpdateLifecycle();
    6269              cleanup = true;
    6370            }
     71            pm.SubmitChanges();
    6472          }, true);
    6573
    6674          if (cleanup) {
    67             eventManager.Cleanup();
     75            EventManager.Cleanup();
    6876          }
    69           LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log("HiveJanitor: cleanup finished");
     77          LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log("HiveJanitor: cleanup finished.");
    7078        }
    7179        catch (Exception e) {
    7280          LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log(string.Format("HiveJanitor: The following exception occured: {0}", e.ToString()));
    7381        }
    74         waitHandle.WaitOne(HeuristicLab.Services.Hive.Properties.Settings.Default.CleanupInterval);
     82        cleanupWaitHandle.WaitOne(Properties.Settings.Default.CleanupInterval);
    7583      }
    76       waitHandle.Close();
     84      cleanupWaitHandle.Close();
     85    }
     86
     87    public void RunGenerateStatistics() {
     88      while (!stop) {
     89        try {
     90          LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log("HiveJanitor: starting generate statistics.");
     91          StatisticsGenerator.GenerateStatistics();
     92          LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log("HiveJanitor: generate statistics finished.");
     93        }
     94        catch (Exception e) {
     95          LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log(string.Format("HiveJanitor: The following exception occured: {0}", e));
     96        }
     97
     98        generateStatisticsWaitHandle.WaitOne(Properties.Settings.Default.GenerateStatisticsInterval);
     99      }
     100
     101      generateStatisticsWaitHandle.Close();
    77102    }
    78103  }
  • trunk/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IServiceLocator.cs

    r12012 r12878  
    2020#endregion
    2121
    22 using HeuristicLab.Services.Hive.DataAccess;
     22using HeuristicLab.Services.Hive.DataAccess.Interfaces;
     23using HeuristicLab.Services.Hive.Manager;
    2324
    2425namespace HeuristicLab.Services.Hive {
     
    2627    Access.IRoleVerifier RoleVerifier { get; }
    2728    IAuthorizationManager AuthorizationManager { get; }
    28     IHiveDao HiveDao { get; }
    29     IOptimizedHiveDao OptimizedHiveDao { get; }
     29    IPersistenceManager PersistenceManager { get; }
    3030    IEventManager EventManager { get; }
    31     ITransactionManager TransactionManager { get; }
     31    IStatisticsGenerator StatisticsGenerator { get; }
    3232    Access.IUserManager UserManager { get; }
    3333    HeartbeatManager HeartbeatManager { get; }
  • trunk/sources/HeuristicLab.Services.Hive/3.3/Manager/AuthorizationManager.cs

    r12012 r12878  
    2222using System;
    2323using System.Security;
     24using HeuristicLab.Services.Access;
    2425using HeuristicLab.Services.Hive.DataAccess;
     26using HeuristicLab.Services.Hive.DataAccess.Interfaces;
     27using DA = HeuristicLab.Services.Hive.DataAccess;
    2528using DT = HeuristicLab.Services.Hive.DataTransfer;
    2629
     
    2831namespace HeuristicLab.Services.Hive {
    2932  public class AuthorizationManager : IAuthorizationManager {
     33
     34    private const string NOT_AUTHORIZED = "Current user is not authorized to access the requested resource";
     35    private IPersistenceManager PersistenceManager {
     36      get { return ServiceLocator.Instance.PersistenceManager; }
     37    }
     38
     39    private IUserManager UserManager {
     40      get { return ServiceLocator.Instance.UserManager; }
     41    }
     42
     43    private IRoleVerifier RoleVerifier {
     44      get { return ServiceLocator.Instance.RoleVerifier; }
     45    }
     46
    3047    public void Authorize(Guid userId) {
    3148      if (userId != ServiceLocator.Instance.UserManager.CurrentUserId)
    32         throw new SecurityException("Current user is not authorized to access object");
     49        throw new SecurityException(NOT_AUTHORIZED);
    3350    }
    3451
    3552    public void AuthorizeForTask(Guid taskId, DT.Permission requiredPermission) {
    3653      if (ServiceLocator.Instance.RoleVerifier.IsInRole(HiveRoles.Slave)) return; // slave-users can access all tasks
    37 
    38       Permission permission = ServiceLocator.Instance.HiveDao.GetPermissionForTask(taskId, ServiceLocator.Instance.UserManager.CurrentUserId);
    39       if (permission == Permission.NotAllowed || (permission != DT.Convert.ToEntity(requiredPermission) && DT.Convert.ToEntity(requiredPermission) == Permission.Full))
    40         throw new SecurityException("Current user is not authorized to access task");
     54      var pm = PersistenceManager;
     55      var taskDao = pm.TaskDao;
     56      pm.UseTransaction(() => {
     57        var task = taskDao.GetById(taskId);
     58        if (task == null) throw new SecurityException(NOT_AUTHORIZED);
     59        AuthorizeJob(pm, task.JobId, requiredPermission);
     60      });
    4161    }
    4262
    4363    public void AuthorizeForJob(Guid jobId, DT.Permission requiredPermission) {
    44       Permission permission = ServiceLocator.Instance.HiveDao.GetPermissionForJob(jobId, ServiceLocator.Instance.UserManager.CurrentUserId);
    45       if (permission == Permission.NotAllowed || (permission != DT.Convert.ToEntity(requiredPermission) && DT.Convert.ToEntity(requiredPermission) == Permission.Full))
    46         throw new SecurityException("Current user is not authorized to access task");
     64      var pm = PersistenceManager;
     65      pm.UseTransaction(() => {
     66        AuthorizeJob(pm, jobId, requiredPermission);
     67      });
    4768    }
    4869
    4970    public void AuthorizeForResourceAdministration(Guid resourceId) {
    50       Resource resource = DT.Convert.ToEntity(ServiceLocator.Instance.HiveDao.GetResource(resourceId));
    51       if (resource.OwnerUserId != ServiceLocator.Instance.UserManager.CurrentUserId && !ServiceLocator.Instance.RoleVerifier.IsInRole(HiveRoles.Administrator))
    52         throw new SecurityException("Current user is not authorized to access resource");
     71      var pm = PersistenceManager;
     72      var resourceDao = pm.ResourceDao;
     73      pm.UseTransaction(() => {
     74        var resource = resourceDao.GetById(resourceId);
     75        if (resource == null) throw new SecurityException(NOT_AUTHORIZED);
     76        if (resource.OwnerUserId != UserManager.CurrentUserId
     77            && !RoleVerifier.IsInRole(HiveRoles.Administrator)) {
     78          throw new SecurityException(NOT_AUTHORIZED);
     79        }
     80      });
     81    }
     82
     83    private DA.Permission GetPermissionForJob(IPersistenceManager pm, Guid jobId, Guid userId) {
     84      var jobDao = pm.JobDao;
     85      var jobPermissionDao = pm.JobPermissionDao;
     86      var job = jobDao.GetById(jobId);
     87      if (job == null) return DA.Permission.NotAllowed;
     88      if (job.OwnerUserId == userId) return DA.Permission.Full;
     89      var jobPermission = jobPermissionDao.GetByJobAndUserId(jobId, userId);
     90      if (jobPermission == null) return DA.Permission.NotAllowed;
     91      return jobPermission.Permission;
     92    }
     93
     94    private void AuthorizeJob(IPersistenceManager pm, Guid jobId, DT.Permission requiredPermission) {
     95      var requiredPermissionEntity = requiredPermission.ToEntity();
     96      DA.Permission permission = GetPermissionForJob(pm, jobId, UserManager.CurrentUserId);
     97      if (permission == Permission.NotAllowed
     98          || ((permission != requiredPermissionEntity) && requiredPermissionEntity == Permission.Full)) {
     99        throw new SecurityException(NOT_AUTHORIZED);
     100      }
    53101    }
    54102  }
  • trunk/sources/HeuristicLab.Services.Hive/3.3/Properties/Settings.Designer.cs

    r11623 r12878  
    11//------------------------------------------------------------------------------
    22// <auto-generated>
    3 //     This code was generated by a tool.
    4 //     Runtime Version:4.0.30319.34014
     3//     Dieser Code wurde von einem Tool generiert.
     4//     Laufzeitversion:4.0.30319.42000
    55//
    6 //     Changes to this file may cause incorrect behavior and will be lost if
    7 //     the code is regenerated.
     6//     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
     7//     der Code erneut generiert wird.
    88// </auto-generated>
    99//------------------------------------------------------------------------------
     
    1313   
    1414    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    15     [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
     15    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
    1616    public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
    1717       
     
    8686            }
    8787        }
     88       
     89        [global::System.Configuration.ApplicationScopedSettingAttribute()]
     90        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
     91        [global::System.Configuration.DefaultSettingValueAttribute("True")]
     92        public bool ProfileServicePerformance {
     93            get {
     94                return ((bool)(this["ProfileServicePerformance"]));
     95            }
     96        }
     97       
     98        [global::System.Configuration.ApplicationScopedSettingAttribute()]
     99        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
     100        [global::System.Configuration.DefaultSettingValueAttribute("00:03:00")]
     101        public global::System.TimeSpan GenerateStatisticsInterval {
     102            get {
     103                return ((global::System.TimeSpan)(this["GenerateStatisticsInterval"]));
     104            }
     105        }
    88106    }
    89107}
  • trunk/sources/HeuristicLab.Services.Hive/3.3/Properties/Settings.settings

    r9123 r12878  
    2424      <Value Profile="(Default)">00:00:20</Value>
    2525    </Setting>
     26    <Setting Name="ProfileServicePerformance" Type="System.Boolean" Scope="Application">
     27      <Value Profile="(Default)">True</Value>
     28    </Setting>
     29    <Setting Name="GenerateStatisticsInterval" Type="System.TimeSpan" Scope="Application">
     30      <Value Profile="(Default)">00:03:00</Value>
     31    </Setting>
    2632  </Settings>
    2733</SettingsFile>
  • trunk/sources/HeuristicLab.Services.Hive/3.3/ServiceContracts/IHiveService.cs

    r12012 r12878  
    4141
    4242    [OperationContract]
    43     IEnumerable<Task> GetTasks();
    44 
    45     [OperationContract]
    46     IEnumerable<LightweightTask> GetLightweightTasks(IEnumerable<Guid> taskIds);
    47 
    48     [OperationContract]
    49     IEnumerable<LightweightTask> GetLightweightChildTasks(Guid? parentTaskId, bool recursive, bool includeParent);
    50 
    51     [OperationContract]
    5243    IEnumerable<LightweightTask> GetLightweightJobTasks(Guid jobId);
    5344
     
    6556
    6657    [OperationContract]
    67     void DeleteTask(Guid taskId);
    68 
    69     [OperationContract]
    70     void DeleteChildTasks(Guid parentTaskId);
    71 
    72     [OperationContract]
    7358    Task UpdateTaskState(Guid taskId, TaskState taskState, Guid? slaveId, Guid? userId, string exception);
    7459    #endregion
     
    8974    Job GetJob(Guid id);
    9075
    91     /// <summary>
    92     /// Returns all task for the current user
    93     /// </summary>
    9476    [OperationContract]
    9577    IEnumerable<Job> GetJobs();
    9678
    97     /// <summary>
    98     /// Returns all task in the hive (only for admins)
    99     /// </summary>
    100     /// <returns></returns>
    101     [OperationContract]
    102     IEnumerable<Job> GetAllJobs();
    103 
    10479    [OperationContract]
    10580    Guid AddJob(Job jobDto);
     
    142117    [OperationContract]
    143118    Plugin GetPlugin(Guid pluginId);
    144 
    145     [OperationContract]
    146     Plugin GetPluginByHash(byte[] hash);
    147119
    148120    [OperationContract]
     
    155127    [OperationContract]
    156128    IEnumerable<PluginData> GetPluginDatas(List<Guid> pluginIds);
    157 
    158     [OperationContract]
    159     void DeletePlugin(Guid pluginId);
    160129    #endregion
    161130
     
    171140    #endregion
    172141
    173     #region Resource Methods
    174     [OperationContract]
    175     IEnumerable<Resource> GetChildResources(Guid resourceId);
    176     #endregion
    177 
    178142    #region Slave Methods
    179143    [OperationContract]
     
    187151
    188152    [OperationContract]
    189     SlaveGroup GetSlaveGroup(Guid slaveGroupId);
    190 
    191     [OperationContract]
    192153    IEnumerable<Slave> GetSlaves();
    193154
     
    217178
    218179    [OperationContract]
    219     IEnumerable<Task> GetTasksByResourceId(Guid resourceId);
    220 
    221     [OperationContract]
    222180    void TriggerEventManager(bool force);
    223181
     
    234192
    235193    [OperationContract]
    236     void UpdateDowntime(Downtime downtime);
     194    void UpdateDowntime(Downtime downtimeDto);
    237195
    238196    [OperationContract]
     
    251209    [OperationContract]
    252210    IEnumerable<UserPriority> GetUserPriorities();
    253     #endregion
    254 
    255     #region Statistics Methods
    256     [OperationContract]
    257     IEnumerable<Statistics> GetStatistics();
    258     [OperationContract]
    259     IEnumerable<Statistics> GetStatisticsForTimePeriod(DateTime from, DateTime to);
    260211    #endregion
    261212  }
  • trunk/sources/HeuristicLab.Services.Hive/3.3/ServiceLocator.cs

    r12012 r12878  
    2121
    2222using HeuristicLab.Services.Hive.DataAccess;
     23using HeuristicLab.Services.Hive.DataAccess.Interfaces;
     24using HeuristicLab.Services.Hive.DataAccess.Manager;
     25using HeuristicLab.Services.Hive.Manager;
    2326
    2427namespace HeuristicLab.Services.Hive {
    25 
    2628  public class ServiceLocator : IServiceLocator {
    2729    private static IServiceLocator instance;
     
    3436    }
    3537
    36     private IHiveDao hiveDao;
    37     public IHiveDao HiveDao {
    38       get {
    39         if (hiveDao == null) hiveDao = new HiveDao();
    40         return hiveDao;
    41       }
    42     }
    43 
    44     public IOptimizedHiveDao OptimizedHiveDao {
     38    public IPersistenceManager PersistenceManager {
    4539      get {
    4640        var dataContext = HiveOperationContext.Current != null
    4741                            ? HiveOperationContext.Current.DataContext
    4842                            : new HiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString);
    49         return new OptimizedHiveDao(dataContext);
     43        return new PersistenceManager(dataContext);
    5044      }
    5145    }
     
    7569    }
    7670
    77     private ITransactionManager transactionManager;
    78     public ITransactionManager TransactionManager {
    79       get {
    80         if (transactionManager == null) transactionManager = new TransactionManager();
    81         return transactionManager;
    82       }
     71    private IStatisticsGenerator statisticsGenerator;
     72    public IStatisticsGenerator StatisticsGenerator {
     73      get { return statisticsGenerator ?? (statisticsGenerator = new HiveStatisticsGenerator()); }
    8374    }
    8475
  • trunk/sources/HeuristicLab.Services.Hive/3.3/app.config

    r11623 r12878  
    2929                <value>00:00:20</value>
    3030            </setting>
     31            <setting name="ProfileServicePerformance" serializeAs="String">
     32                <value>True</value>
     33            </setting>
     34            <setting name="GenerateStatisticsInterval" serializeAs="String">
     35                <value>00:03:00</value>
     36            </setting>
    3137        </HeuristicLab.Services.Hive.Properties.Settings>
    3238    </applicationSettings>
    33 <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>
     39<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>
     40</configuration>
  • trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj

    r12552 r12878  
    99    <AppDesignerFolder>Properties</AppDesignerFolder>
    1010    <RootNamespace>HeuristicLab.Services.WebApp.Status</RootNamespace>
    11     <AssemblyName>HeuristicLab.Services.WebApp.Status</AssemblyName>
     11    <AssemblyName>HeuristicLab.Services.WebApp.Status-3.3</AssemblyName>
    1212    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    1313    <FileAlignment>512</FileAlignment>
     
    7676      <SpecificVersion>False</SpecificVersion>
    7777      <HintPath>..\..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
     78      <Private>False</Private>
    7879    </Reference>
    7980    <Reference Include="System" />
  • trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/WebApi/DataController.cs

    r12521 r12878  
    2222using System;
    2323using System.Collections.Generic;
    24 using System.Data.Linq;
    2524using System.Linq;
    2625using System.Web.Http;
    2726using HeuristicLab.Services.Hive;
    2827using HeuristicLab.Services.Hive.DataAccess;
    29 using DAL = HeuristicLab.Services.Hive.DataAccess;
    30 using DTO = HeuristicLab.Services.WebApp.Status.WebApi.DataTransfer;
     28using HeuristicLab.Services.Hive.DataAccess.Interfaces;
     29using DT = HeuristicLab.Services.WebApp.Status.WebApi.DataTransfer;
    3130
    3231namespace HeuristicLab.Services.WebApp.Status.WebApi {
    3332  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
    3639    private const string SQL_USER_TASK_STATUS =
    3740      @"WITH UserTasks AS (
     
    5356    }
    5457
    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)
    61114        },
    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
    84138          },
    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) {
    122152      TimeSpan ts = end - start;
    123153      int increment = 1;
     
    127157        increment += 5;
    128158      }
    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()
    141185        };
    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;
    178199        }
     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);
    179221      }
     222      if (n < 2) {
     223        return M2;
     224      }
     225      return Math.Sqrt(M2 / (n - 1));
    180226    }
    181227  }
  • trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/WebApi/DataTransfer/Status.cs

    r12435 r12878  
    2020#endregion
    2121
     22using System;
    2223using System.Collections.Generic;
    2324
     
    2627  public class CoreStatus {
    2728    public int TotalCores { get; set; }
    28     public int FreeCores { get; set; } // temporary quickfix for old chart data
     29    public int UsedCores { get; set; }
    2930    public int ActiveCores { get; set; }
    3031    public int CalculatingCores { get; set; }
     
    3940  public class MemoryStatus {
    4041    public int TotalMemory { get; set; }
    41     public int FreeMemory { get; set; } // temporary quickfix for old chart data
     42    public int UsedMemory { get; set; }
    4243    public int ActiveMemory { get; set; }
    43     public int UsedMemory { get; set; }
     44    public int CalculatingMemory { get; set; }
    4445  }
    4546
     
    6162  }
    6263
     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
    6374  public class Status {
    6475    public CoreStatus CoreStatus { get; set; }
    6576    public CpuUtilizationStatus CpuUtilizationStatus { get; set; }
    6677    public MemoryStatus MemoryStatus { get; set; }
     78    public TimeStatus TimeStatus { get; set; }
    6779    public IEnumerable<TaskStatus> TasksStatus { get; set; }
    6880    public IEnumerable<SlaveStatus> SlavesStatus { get; set; }
  • trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/WebApp/history/history.cshtml

    r12666 r12878  
    1515            <label for="fromDate">From:&nbsp;</label>
    1616            <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"/>
    1818                <span class="input-group-btn">
    1919                    <button type="button" class="btn btn-default" ng-click="openFromDateSelection($event)"><i class="glyphicon glyphicon-calendar"></i></button>
     
    3232        <div class="form-group" style="margin-left: 5px; margin-right: 5px;">
    3333            <div class="btn-group" dropdown dropdown-append-to-body>
    34                 <button type="button" class="btn btn-default dropdown-toggle" dropdown-toggle style="width: 130px; 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>
    3636                    <span class="glyphicon glyphicon-chevron-down" style="margin-top: 3px;"></span>
    3737                </button>
    3838                <ul class="dropdown-menu" role="menu">
    3939                    <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>
    4141                    </li>
    4242                </ul>
     
    5050    </form>
    5151</div>
    52 
    5352
    5453<div class="default-view-container">
  • trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/WebApp/history/historyCtrl.js

    r12583 r12878  
    22    var module = appStatusPlugin.getAngularModule();
    33    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) {
    66            $scope.chartOptions = {
    77                grid: {
     
    4040            };
    4141
    42 
    4342            $scope.fromDate = new Date();
    4443            $scope.toDate = new Date();
     
    5251                { id: 2, name: 'Yesterday' },
    5352                { 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' }
    5556            ];
    5657            $scope.changeQuickSelection = function (quickSelection) {
     
    7273                    case 4:
    7374                        $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);
    7489                        $scope.toDate = new Date(today.valueOf());
    7590                        break;
     
    113128                    for (var i = 0; i < noOfStatus; ++i) {
    114129                        var curStatus = status[i];
    115                         var cpuData = Math.round(curStatus.CpuUtilizationStatus.ActiveCpuUtilization);
     130                        var cpuData = Math.round(curStatus.CpuUtilizationStatus.TotalCpuUtilization);
    116131                        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)]);
    120135                        memorySeries[1].push([curStatus.Timestamp, Math.round(curStatus.MemoryStatus.UsedMemory / 1024)]);
    121136                    }
     
    129144                        { data: memorySeries[1], label: "&nbsp;Used Memory", color: "LightPink" }
    130145                    ];
    131 
    132146                });
    133147            };
  • trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/WebApp/status/status.cshtml

    r12557 r12878  
    8888                    <tr data-toggle="tooltip" data-placement="bottom" title="All calculating slaves that are allowed to calculate">
    8989                        <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>
    9191                    </tr>
    9292                </table>
     
    115115                    </tr>
    116116                </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>
    117167            </div>
    118168        </div>
  • trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/WebApp/status/statusCtrl.js

    r12561 r12878  
    103103                    $scope.cpu.knobData = Math.round(status.CpuUtilizationStatus.ActiveCpuUtilization);
    104104                    $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);
    106106                    // chart series
    107107                    var cpuSeries = $scope.cpu.series[0].data.splice(0);
     
    127127                   
    128128                    cpuSeries.push([$scope.status.Timestamp, Math.round(status.CpuUtilizationStatus.TotalCpuUtilization)]);
    129                     // charts are currently filled with old total/used data
    130                     // start temporary
    131                     var usedCores = status.CoreStatus.TotalCores - status.CoreStatus.FreeCores;
    132                     var usedMemory = status.MemoryStatus.TotalMemory - status.MemoryStatus.FreeMemory;
    133                     // end temporary
    134129                    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]);
    136131                    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)]);
    138133                    $scope.cpu.series = [{ data: cpuSeries, label: "&nbsp;CPU Utilization", color: "#f7921d" }];
    139134                    $scope.core.series = [
     
    160155                    for (var i = 0; i < noOfStatus; ++i) {
    161156                        var curStatus = status[i];
    162                         var cpuData = Math.round(curStatus.CpuUtilizationStatus.ActiveCpuUtilization);
     157                        var cpuData = Math.round(curStatus.CpuUtilizationStatus.TotalCpuUtilization);
    163158                        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)]);
    167162                        memorySeries[1].push([curStatus.Timestamp, Math.round(curStatus.MemoryStatus.UsedMemory / 1024)]);
    168163                    }
  • trunk/sources/HeuristicLab.Services.WebApp.Status/3.3/status.js

    r12557 r12878  
    2323            name: 'History',
    2424            route: '#/status/history',
    25             icon: 'glyphicon glyphicon-stats'
     25            icon: 'glyphicon glyphicon-calendar'
    2626        }]
    2727    });
  • trunk/sources/HeuristicLab.Services.WebApp/3.3

    • Property svn:ignore
      •  

        old new  
        11Bin
         2HeuristicLab.Services.WebApp-3.3.csproj.user
  • trunk/sources/HeuristicLab.Services.WebApp/3.3/Configs/BundleConfig.cs

    r12583 r12878  
    5959        // bootstrap
    6060        "~/WebApp/libs/bootstrap/js/bootstrap.min.js",
    61         // crypto js
     61        // cryptojs
    6262        "~/WebApp/libs/cryptojs/aes.js",
    6363        // angular js
     
    7777        "~/WebApp/libs/angularjs/loading-bar/loading-bar.js",
    7878        "~/WebApp/libs/angularjs/ocLazyLoad/ocLazyLoad.min.js",
     79        "~/WebApp/libs/angularjs/fittext/ng-FitText.js",
    7980        // smoothScroll
    8081        "~/WebApp/libs/smoothScroll/smoothScroll.js"
     
    105106      PluginManager pluginManager = PluginManager.Instance;
    106107      foreach (var plugin in pluginManager.Plugins) {
    107         if (File.Exists(string.Format(@"{0}\{1}\{1}.js", PluginManager.PluginsDirectory, plugin.Name))) {
     108        var path = Path.Combine(PluginManager.PluginsDirectory, plugin.Name, string.Concat(plugin.Name, ".js"));
     109        if (File.Exists(path)) {
    108110          jsFiles.Add(string.Format("WebApp/plugins/{0}/{0}.js", plugin.Name));
    109111        }
  • trunk/sources/HeuristicLab.Services.WebApp/3.3/Controllers/AppController.cs

    r12556 r12878  
    2020#endregion
    2121
     22using System.Web;
    2223using System.Web.Mvc;
    2324
     
    3031        return RedirectPermanent(Request.Url + "/");
    3132      }
     33      Response.Cache.SetCacheability(HttpCacheability.NoCache);
    3234      return View("~/WebApp/shared/layout/layout.cshtml");
    3335    }
     
    3840
    3941    public ActionResult LoadSharedView(string directory, string view, string dateTime) {
    40       // dateTime is optional to avoid browser caching
     42      Response.Cache.SetCacheability(HttpCacheability.NoCache);
     43      // dateTime is optional to definitly avoid browser caching
    4144      return View(string.Format("~/WebApp/shared/{0}/{1}", directory, view));
    4245    }
    4346
    4447    public ActionResult LoadPluginView(string plugin, string view, string dateTime) {
    45       // dateTime is optional to avoid browser caching
     48      Response.Cache.SetCacheability(HttpCacheability.NoCache);
     49      // dateTime is optional to definitly avoid browser caching
    4650      return View(string.Format("~/WebApp/plugins/{0}/{1}", plugin, view));
    4751    }
  • trunk/sources/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj

    r12559 r12878  
    1313    <AppDesignerFolder>Properties</AppDesignerFolder>
    1414    <RootNamespace>HeuristicLab.Services.WebApp</RootNamespace>
    15     <AssemblyName>HeuristicLab.Services.WebApp</AssemblyName>
     15    <AssemblyName>HeuristicLab.Services.WebApp-3.3</AssemblyName>
    1616    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    1717    <MvcBuildViews>false</MvcBuildViews>
     
    118118    <Reference Include="System.Net.Http.WebRequest">
    119119    </Reference>
    120     <Reference Include="WebGrease, Version=1.6.5135.21930, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
    121       <SpecificVersion>False</SpecificVersion>
     120    <Reference Include="WebGrease">
    122121      <HintPath>..\..\packages\WebGrease.1.6.0\lib\WebGrease.dll</HintPath>
    123122    </Reference>
     
    146145    <Content Include="WebApp\libs\angularjs\angular-tablesort\angular-tablesort.js" />
    147146    <Content Include="WebApp\libs\angularjs\angular-tablesort\tablesort.css" />
     147    <Content Include="WebApp\libs\angularjs\fittext\ng-FitText.js" />
     148    <Content Include="WebApp\libs\cryptojs\aes.js" />
    148149    <Content Include="WebApp\main.js" />
    149150    <Content Include="WebApp\helper.js" />
     
    172173    <Content Include="WebApp\plugins\about\about.js" />
    173174    <Content Include="WebApp\plugins\about\aboutCtrl.js" />
    174     <Content Include="WebApp\plugins\login\login.css" />
    175     <Content Include="WebApp\plugins\login\login.js" />
    176     <Content Include="WebApp\plugins\login\loginCtrl.js" />
    177     <Content Include="WebApp\plugins\plugins\pluginsExceptionCtrl.js" />
    178     <Content Include="WebApp\plugins\plugins\plugins.js" />
    179     <Content Include="WebApp\plugins\plugins\pluginsCtrl.js" />
     175    <Content Include="WebApp\plugins\login\login.css">
     176      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     177    </Content>
     178    <Content Include="WebApp\plugins\login\login.js">
     179      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     180    </Content>
     181    <Content Include="WebApp\plugins\login\loginCtrl.js">
     182      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     183    </Content>
     184    <Content Include="WebApp\plugins\plugins\pluginsExceptionCtrl.js">
     185      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     186    </Content>
     187    <Content Include="WebApp\plugins\plugins\plugins.js">
     188      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     189    </Content>
     190    <Content Include="WebApp\plugins\plugins\pluginsCtrl.js">
     191      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     192    </Content>
    180193    <Content Include="WebApp\plugins\plugins\pluginsService.js" />
    181194    <Content Include="WebApp\shared\directives\flot.js" />
     
    208221    <Content Include="HeuristicLab.snk" />
    209222    <Content Include="Properties\AssemblyInfo.cs.frame" />
    210     <Content Include="Web.config" />
     223    <Content Include="Web.config">
     224      <SubType>Designer</SubType>
     225    </Content>
    211226    <Content Include="Web.Debug.config">
    212227      <DependentUpon>Web.config</DependentUpon>
     
    219234    <Content Include="WebApp\libs\bootstrap\fonts\glyphicons-halflings-regular.woff" />
    220235    <Content Include="WebApp\libs\bootstrap\fonts\glyphicons-halflings-regular.woff2" />
     236    <Content Include="WebApp\shared\directives\scrollToTop.js" />
    221237    <Content Include="WebApp\shared\filter\filters.js" />
    222238    <Content Include="WebApp\shared\images\HeuristicLab-Logo.png" />
     
    249265  </ItemGroup>
    250266  <ItemGroup>
     267    <None Include="Properties\PublishProfiles\WebApp.pubxml" />
    251268    <Content Include="WebApp\plugins\about\about.cshtml" />
    252269  </ItemGroup>
  • trunk/sources/HeuristicLab.Services.WebApp/3.3/Plugin.cs

    r12523 r12878  
    7777        if (!assemblies.Any())
    7878          return;
     79
    7980        var assemblyPath = assemblies.First();
    8081        AssemblyName = Path.GetFileName(assemblyPath);
  • trunk/sources/HeuristicLab.Services.WebApp/3.3/PluginManager.cs

    r12514 r12878  
    4343
    4444    public static string PluginsDirectory {
    45       get { return string.Format(@"{0}WebApp\plugins", HttpRuntime.AppDomainAppPath); }
     45      get {
     46        return Path.Combine(HttpRuntime.AppDomainAppPath, "WebApp", "plugins");
     47      }
    4648    }
    4749
     
    6062    private void OnFilesChanged(object sender, FileSystemEventArgs args) {
    6163      string path = args.FullPath.Remove(0, PluginsDirectory.Length + 1);
    62       var pathParts = path.Split(Path.PathSeparator);
     64      var pathParts = path.Split(Path.DirectorySeparatorChar);
    6365      string pluginName = pathParts[0];
    64       if (pathParts.Length == 1) {
     66      if (pathParts.Length <= 2) {
    6567        switch (args.ChangeType) {
    6668          case WatcherChangeTypes.Created:
     
    7577            RenamedEventArgs renamedArgs = (RenamedEventArgs)args;
    7678            string oldPath = renamedArgs.OldFullPath.Remove(0, PluginsDirectory.Length + 1);
    77             var oldPathParts = oldPath.Split(Path.PathSeparator);
     79            var oldPathParts = oldPath.Split(Path.DirectorySeparatorChar);
    7880            string oldPluginName = oldPathParts[0];
    7981            plugins.Remove(oldPluginName);
     
    9496      Plugin plugin = LookupPlugin(name);
    9597      if (plugin == null) {
    96         string directory = string.Format(@"{0}\{1}", PluginsDirectory, name);
     98        string directory = Path.Combine(PluginsDirectory, name);
    9799        if (Directory.Exists(directory)) {
    98100          plugin = new Plugin(name, directory, Configuration);
  • trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/app.css

    r12514 r12878  
    352352}
    353353
    354 [ng-click],
    355 [data-ng-click],
    356 [x-ng-click] {
    357     cursor: pointer;
    358 }
    359354
    360355.navbar-default .navbar-brand {
     
    419414.default-view-container {
    420415  padding: 30px;
     416  min-height: 300px;
     417}
     418
     419.default-view-header {
     420  padding: 30px;
     421  background: #F5F5F5;
     422  border-bottom: 1px solid #D3D3D3;
    421423}
    422424
     
    434436  text-decoration: none;
    435437}
     438
     439/*remove button gradient*/
     440.btn {
     441  background-image: none;
     442  filter: none;
     443  -webkit-box-shadow: none !important;
     444     -moz-box-shadow: none !important;
     445       -o-box-shadow: none !important;
     446          box-shadow: none !important;
     447}
     448
     449.btn-default {
     450  background-image: none;
     451  filter: none;
     452  -webkit-box-shadow: none !important;
     453     -moz-box-shadow: none !important;
     454       -o-box-shadow: none !important;
     455          box-shadow: none !important;
     456}
     457
     458.btn .btn-default {
     459  background-image: none;
     460  filter: none;
     461  -webkit-box-shadow: none !important;
     462     -moz-box-shadow: none !important;
     463       -o-box-shadow: none !important;
     464          box-shadow: none !important;
     465}
     466
     467.btn-default.active, .btn-default:active{
     468  border-color: #adadad;
     469}
     470
     471
     472
     473.modal-dialog-center {
     474    margin: 0;
     475    position: absolute;
     476    top: 50%;
     477    left: 50%;
     478}
     479
     480.modal-header {
     481  background: #fafafa;
     482}
     483
     484.modal-body {
     485    overflow-y: auto;
     486}
     487.modal-footer {
     488    margin-top: 0;
     489}
     490
     491@media (max-width: 767px) {
     492  .modal-dialog-center {
     493    width: 100%;
     494  }
     495}
     496
     497body.modal-open {
     498    overflow: visible;
     499}
     500
     501.table .progress {
     502margin-bottom: 0px;
     503}
     504
     505.default-filter-header {
     506  padding: 30px;
     507  background: #F5F5F5;
     508  border-top: 1px solid #D3D3D3;
     509  border-bottom: 1px solid #D3D3D3;
     510}
     511
     512.default-tab-filter-header {
     513  padding: 30px;
     514  background: #F5F5F5;
     515  border-bottom: 1px solid #D3D3D3;
     516}
     517
     518.cursor-pointer:hover {
     519  cursor: pointer
     520}
     521
     522.app-modal-window .modal-dialog {
     523  top: 15%;
     524  z-index: 1050;
     525}
     526
     527.pagination>li>a,
     528.pagination>li>span {
     529  border-color: #ccc;
     530}
     531
     532.pagination>.active>a,
     533.pagination>.active>a:focus,
     534.pagination>.active>span,
     535.pagination>.active>span:focus {
     536  color: black;
     537  background: #e0e0e0;
     538  border-color: #adadad;
     539}
     540
     541.pagination>.active>a:hover,
     542.pagination>.active>span:hover {
     543  color: black;
     544  border-color: #ccc;
     545  background: #eeeeee;
     546}
  • trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/app.js

    r12428 r12878  
    22var appName = 'app';
    33var appPath = 'WebApp';
     4var defaultPageUpdateInterval = 60000;
    45
    56// route, plugin, menu, section and main app
  • trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/helper.js

    r12583 r12878  
    77Number.prototype.zeropad = function (n) {
    88    return (new Array(n + 1).join("0") + this).slice(-n);
     9};
     10
     11Number.prototype.toHHMMSS = function() {
     12    d = this;
     13    d = Number(d);
     14    var years = Math.floor(d / 31536000);
     15    var days = Math.floor(d / 86400 % 365);
     16    var h = Math.floor(d / 3600 % 24);
     17    var m = Math.floor(d % 3600 / 60);
     18    var s = Math.floor(d % 3600 % 60);
     19    var timeStr = "";
     20    if (years > 0) {
     21        timeStr = years + "y ";
     22    }
     23    if (days > 0) {
     24        timeStr = timeStr + days + "d ";
     25    }
     26    return timeStr + h.zeropad(2) + ":" + m.zeropad(2) + ":" + s.zeropad(2);
    927};
    1028
     
    3351};
    3452
    35 
    3653var CSharpDateToString = function (datetime) {
    3754    var date = new Date(Date.parse(datetime));
  • trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.cshtml

    r12583 r12878  
    2828                <div class="panel-body">
    2929                    <p><strong>Support</strong>: <a href="App/RedirectUrl?url=http://groups.google.com/group/heuristiclab">HeuristicLab Google Group</a></p>
    30                     <p><strong>Inquiries</strong>: ​<a ng-click="mailToSupport()">support(at)heuristiclab.com</a></p>
     30                    <p><strong>Inquiries</strong>: ​<a class="cursor-pointer" ng-click="mailToSupport()">support(at)heuristiclab.com</a></p>
    3131                    <p><strong>Heuristic and Evolutionary Algorithms Laboratory (HEAL)</strong>: <a href="App/RedirectUrl?url=http://heal.heuristiclab.com">​http://heal.heuristiclab.com</a></p>
    3232                    <p><strong>HeuristicLab development site</strong>: <a href="App/RedirectUrl?url=http://dev.heuristiclab.com">http://dev.heuristiclab.com</a></p>
     
    3636                        <span class="glyphicon glyphicon-phone-alt"></span> +43 50804 22030<br />
    3737                        <span class="glyphicon glyphicon-print"></span> +43 50804 21599<br />
    38                         <span class="glyphicon glyphicon-envelope"></span> <a ng-click="mailToStefanWagner()">stefan.wagner(at)heuristiclab.com</a><br />
     38                        <span class="glyphicon glyphicon-envelope"></span> <a class="cursor-pointer" ng-click="mailToStefanWagner()">stefan.wagner(at)heuristiclab.com</a><br />
    3939                    </p>
    4040                </div>
  • trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/login/login.cshtml

    r12428 r12878  
    1414                            <div class="input-group">
    1515                                <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
    16                                 <input type="text" class="form-control" name="Username" placeholder="User"
     16                                <input type="text" class="form-control" name="Username" placeholder="Username"
    1717                                       ng-model="user.Username">
    1818                            </div>
  • trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/plugins/plugins.cshtml

    r12557 r12878  
    2121                                <th>#</th>
    2222                                <th ts-criteria="Name">Name</th>
    23                                 <th ts-criteria ="AssemblyName">Assembly</th>
     23                                <th ts-criteria="AssemblyName">Assembly</th>
    2424                                <th ts-criteria="LastReload">Last reload</th>
    25                                 <th>Status</th>
     25                                <th class="text-center">Status</th>
    2626                                <th></th>
    2727                            </tr>
     
    3333                                <td>{{plugin.AssemblyName}}</td>
    3434                                <td>{{plugin.LastReload}}</td>
    35                                 <td>
     35                                <td class="text-center">
    3636                                    <span ng-hide="plugin.Exception" class="glyphicon glyphicon glyphicon-ok" style="color: green"></span>
    3737                                    <span ng-show="plugin.Exception" class="glyphicon glyphicon glyphicon-remove" style="color: darkred"
     
    3939                                </td>
    4040                                <td>
    41                                     <a ng-href="" data-ng-click="reloadPlugin(plugin.Name)">Reload</a>
     41                                    <a ng-href="" class="cursor-pointer" data-ng-click="reloadPlugin(plugin.Name)">Reload</a>
    4242                                </td>
    4343                            </tr>
  • trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/shared/filter/filters.js

    r12546 r12878  
    1 (function () {
     1(function() {
    22    var module = appMainPlugin.getAngularModule();
    33    module.filter('kbToGB', function () {
  • trunk/sources/HeuristicLab.Services.WebApp/3.3/WebApp/shared/layout/layout.cshtml

    r12514 r12878  
    2424    <meta charset="utf-8" />
    2525    <meta name="viewport" content="width=device-width, initial-scale=1">
     26    <meta http-equiv="pragma" content="no-cache" />
    2627    <title>HeuristicLab Hive</title>
    2728    <link href="~/WebApp/HeuristicLab.ico" rel="shortcut icon" type="image/x-icon" />
    2829    @Styles.Render("~/Bundles/Vendors/css")
    2930    @Styles.Render("~/Bundles/WebApp/css")
    30     <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700">
     31    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans:300,400,600,700">
    3132    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    3233    <!--[if lt IE 9]>
     
    6364                <div class="navbar-content">
    6465                    <ul class="nav navbar-nav navbar-right">
    65                         @if (Request.IsAuthenticated)
    66                         {
     66                        @if (Request.IsAuthenticated) {
    6767                            <li>
    6868                                <span class="navbar-text">Hello @User.Identity.Name!</span>
    6969                            </li>
    7070                            <li>
    71                                 <a ng-href="" data-ng-click="logout()">Logout</a>
     71                                <a ng-href="#" data-ng-click="logout()">Logout</a>
    7272                            </li>
    73                         }
    74                         else
    75                         {
     73                        } else {
    7674                            <li>
    7775                                <a ng-href="#/login" data-ng-click="hideMenu()">Login</a>
     
    9795</div>
    9896<script type="text/javascript">
    99 $('.navbar-collapse').on('click', 'li a', function () {
    100     $('.navbar-collapse').collapse('hide');
    101 });
     97    $('.navbar-collapse').on('click', 'li a', function () {
     98        $('.navbar-collapse').collapse('hide');
     99    });
    102100</script>
    103101</body>
  • trunk/sources/Installers/HiveJanitorServiceInstaller.nsi

    r12753 r12878  
    5151  File "${JANITORBUILDPATH}\HeuristicLab.PluginInfrastructure-3.3.dll"
    5252  File "${JANITORBUILDPATH}\HeuristicLab.Services.Access.dll"
     53  File "${JANITORBUILDPATH}\HeuristicLab.Services.Access.DataAccess.dll"
    5354  File "${JANITORBUILDPATH}\HeuristicLab.Services.Hive.DataAccess-3.3.dll"
    5455  File "${JANITORBUILDPATH}\HeuristicLab.Services.Hive.JanitorService-3.3.exe"
Note: See TracChangeset for help on using the changeset viewer.