Changeset 12563


Ignore:
Timestamp:
07/01/15 14:59:47 (4 years ago)
Author:
ascheibe
Message:

#2394 merged r12428, r12429, r12430, r12435, r12442, r12443, r12445, r12514, r12517, r12519, r12520, r12521, r12523, r12532, r12542, r12546, r12552, r12553, r12556, r12557, r12559, r12561, r12146, r12457 into stable

Location:
stable
Files:
5 deleted
47 edited
7 copied

Legend:

Unmodified
Added
Removed
  • stable

  • stable/.nuget/NuGet.targets

    r12532 r12563  
    1414
    1515        <!-- Download NuGet.exe if it does not already exist -->
    16         <DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe>
     16        <DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>
    1717    </PropertyGroup>
    1818
  • stable/HeuristicLab 3.3 Services.sln

    r11920 r12563  
    5959Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.OKB-3.3", "HeuristicLab.Services.OKB\3.3\HeuristicLab.Services.OKB-3.3.csproj", "{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}"
    6060EndProject
     61Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.WebApp-3.3", "HeuristicLab.Services.WebApp\3.3\HeuristicLab.Services.WebApp-3.3.csproj", "{6564C6AF-3E37-4C29-8947-68D4E22232BE}"
     62EndProject
     63Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.WebApp.Status-3.3", "HeuristicLab.Services.WebApp.Status\3.3\HeuristicLab.Services.WebApp.Status-3.3.csproj", "{2351DBE7-D0E1-44F9-9CE9-2F0F5E580572}"
     64EndProject
     65Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{A7A361BD-1E7F-4012-95DA-52D376300749}"
     66  ProjectSection(SolutionItems) = preProject
     67    .nuget\NuGet.Config = .nuget\NuGet.Config
     68    .nuget\NuGet.exe = .nuget\NuGet.exe
     69    .nuget\NuGet.targets = .nuget\NuGet.targets
     70  EndProjectSection
     71EndProject
    6172Global
    6273  GlobalSection(SolutionConfigurationPlatforms) = preSolution
     
    7182    {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    7283    {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|Any CPU.Build.0 = Debug|Any CPU
    73     {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|x64.ActiveCfg = Debug|x64
    74     {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|x64.Build.0 = Debug|x64
    75     {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|x86.ActiveCfg = Debug|x86
    76     {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|x86.Build.0 = Debug|x86
     84    {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|x64.ActiveCfg = Release|x64
     85    {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|x64.Build.0 = Release|x64
     86    {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|x86.ActiveCfg = Release|x86
     87    {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|x86.Build.0 = Release|x86
    7788    {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Release|Any CPU.ActiveCfg = Release|Any CPU
    7889    {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Release|Any CPU.Build.0 = Release|Any CPU
     
    8394    {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    8495    {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|Any CPU.Build.0 = Debug|Any CPU
    85     {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|x64.ActiveCfg = Debug|x64
    86     {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|x64.Build.0 = Debug|x64
    87     {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|x86.ActiveCfg = Debug|x86
    88     {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|x86.Build.0 = Debug|x86
     96    {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|x64.ActiveCfg = Release|x64
     97    {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|x64.Build.0 = Release|x64
     98    {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|x86.ActiveCfg = Release|x86
     99    {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|x86.Build.0 = Release|x86
    89100    {EBEBA863-DD05-4331-BE25-5758B15F7407}.Release|Any CPU.ActiveCfg = Release|Any CPU
    90101    {EBEBA863-DD05-4331-BE25-5758B15F7407}.Release|Any CPU.Build.0 = Release|Any CPU
     
    95106    {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    96107    {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|Any CPU.Build.0 = Debug|Any CPU
    97     {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|x64.ActiveCfg = Debug|x64
    98     {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|x64.Build.0 = Debug|x64
    99     {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|x86.ActiveCfg = Debug|x86
    100     {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|x86.Build.0 = Debug|x86
     108    {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|x64.ActiveCfg = Release|x64
     109    {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|x64.Build.0 = Release|x64
     110    {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|x86.ActiveCfg = Release|x86
     111    {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|x86.Build.0 = Release|x86
    101112    {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Release|Any CPU.ActiveCfg = Release|Any CPU
    102113    {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Release|Any CPU.Build.0 = Release|Any CPU
     
    107118    {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    108119    {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
    109     {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x64.ActiveCfg = Debug|x64
    110     {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x64.Build.0 = Debug|x64
    111     {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x86.ActiveCfg = Debug|x86
    112     {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x86.Build.0 = Debug|x86
     120    {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x64.ActiveCfg = Release|x64
     121    {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x64.Build.0 = Release|x64
     122    {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x86.ActiveCfg = Release|x86
     123    {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x86.Build.0 = Release|x86
    113124    {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
    114125    {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Release|Any CPU.Build.0 = Release|Any CPU
     
    119130    {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    120131    {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|Any CPU.Build.0 = Debug|Any CPU
    121     {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x64.ActiveCfg = Debug|x64
    122     {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x64.Build.0 = Debug|x64
    123     {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x86.ActiveCfg = Debug|x86
    124     {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x86.Build.0 = Debug|x86
     132    {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x64.ActiveCfg = Release|x64
     133    {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x64.Build.0 = Release|x64
     134    {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x86.ActiveCfg = Release|x86
     135    {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x86.Build.0 = Release|x86
    125136    {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Release|Any CPU.ActiveCfg = Release|Any CPU
    126137    {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Release|Any CPU.Build.0 = Release|Any CPU
     
    138149    {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    139150    {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|Any CPU.Build.0 = Debug|Any CPU
    140     {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|x64.ActiveCfg = Debug|x64
    141     {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|x64.Build.0 = Debug|x64
    142     {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|x86.ActiveCfg = Debug|x86
    143     {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|x86.Build.0 = Debug|x86
     151    {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|x64.ActiveCfg = Release|x64
     152    {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|x64.Build.0 = Release|x64
     153    {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|x86.ActiveCfg = Release|x86
     154    {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|x86.Build.0 = Release|x86
    144155    {F685556B-F6EB-4143-8E7E-662D00FDD299}.Release|Any CPU.ActiveCfg = Release|Any CPU
    145156    {F685556B-F6EB-4143-8E7E-662D00FDD299}.Release|Any CPU.Build.0 = Release|Any CPU
     
    150161    {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    151162    {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|Any CPU.Build.0 = Debug|Any CPU
    152     {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|x64.ActiveCfg = Debug|x64
    153     {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|x64.Build.0 = Debug|x64
    154     {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|x86.ActiveCfg = Debug|x86
    155     {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|x86.Build.0 = Debug|x86
     163    {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|x64.ActiveCfg = Release|x64
     164    {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|x64.Build.0 = Release|x64
     165    {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|x86.ActiveCfg = Release|x86
     166    {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|x86.Build.0 = Release|x86
    156167    {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Release|Any CPU.ActiveCfg = Release|Any CPU
    157168    {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Release|Any CPU.Build.0 = Release|Any CPU
     
    162173    {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    163174    {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|Any CPU.Build.0 = Debug|Any CPU
    164     {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|x64.ActiveCfg = Debug|x64
    165     {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|x64.Build.0 = Debug|x64
    166     {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|x86.ActiveCfg = Debug|x86
    167     {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|x86.Build.0 = Debug|x86
     175    {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|x64.ActiveCfg = Release|x64
     176    {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|x64.Build.0 = Release|x64
     177    {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|x86.ActiveCfg = Release|x86
     178    {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|x86.Build.0 = Release|x86
    168179    {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Release|Any CPU.ActiveCfg = Release|Any CPU
    169180    {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Release|Any CPU.Build.0 = Release|Any CPU
     
    174185    {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    175186    {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|Any CPU.Build.0 = Debug|Any CPU
    176     {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|x64.ActiveCfg = Debug|x64
    177     {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|x64.Build.0 = Debug|x64
    178     {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|x86.ActiveCfg = Debug|x86
    179     {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|x86.Build.0 = Debug|x86
     187    {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|x64.ActiveCfg = Release|x64
     188    {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|x64.Build.0 = Release|x64
     189    {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|x86.ActiveCfg = Release|x86
     190    {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|x86.Build.0 = Release|x86
    180191    {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Release|Any CPU.ActiveCfg = Release|Any CPU
    181192    {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Release|Any CPU.Build.0 = Release|Any CPU
     
    186197    {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    187198    {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|Any CPU.Build.0 = Debug|Any CPU
    188     {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x64.ActiveCfg = Debug|x64
    189     {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x64.Build.0 = Debug|x64
    190     {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x86.ActiveCfg = Debug|x86
    191     {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x86.Build.0 = Debug|x86
     199    {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x64.ActiveCfg = Release|x64
     200    {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x64.Build.0 = Release|x64
     201    {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x86.ActiveCfg = Release|x86
     202    {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x86.Build.0 = Release|x86
    192203    {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Release|Any CPU.ActiveCfg = Release|Any CPU
    193204    {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Release|Any CPU.Build.0 = Release|Any CPU
     
    198209    {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    199210    {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
    200     {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x64.ActiveCfg = Debug|x64
    201     {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x64.Build.0 = Debug|x64
    202     {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x86.ActiveCfg = Debug|x86
    203     {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x86.Build.0 = Debug|x86
     211    {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x64.ActiveCfg = Release|x64
     212    {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x64.Build.0 = Release|x64
     213    {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x86.ActiveCfg = Release|x86
     214    {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x86.Build.0 = Release|x86
    204215    {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
    205216    {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|Any CPU.Build.0 = Release|Any CPU
     
    208219    {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|x86.ActiveCfg = Release|x86
    209220    {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|x86.Build.0 = Release|x86
     221    {6564C6AF-3E37-4C29-8947-68D4E22232BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     222    {6564C6AF-3E37-4C29-8947-68D4E22232BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
     223    {6564C6AF-3E37-4C29-8947-68D4E22232BE}.Debug|x64.ActiveCfg = Release|x64
     224    {6564C6AF-3E37-4C29-8947-68D4E22232BE}.Debug|x64.Build.0 = Release|x64
     225    {6564C6AF-3E37-4C29-8947-68D4E22232BE}.Debug|x86.ActiveCfg = Release|x86
     226    {6564C6AF-3E37-4C29-8947-68D4E22232BE}.Debug|x86.Build.0 = Release|x86
     227    {6564C6AF-3E37-4C29-8947-68D4E22232BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
     228    {6564C6AF-3E37-4C29-8947-68D4E22232BE}.Release|Any CPU.Build.0 = Release|Any CPU
     229    {6564C6AF-3E37-4C29-8947-68D4E22232BE}.Release|x64.ActiveCfg = Release|x64
     230    {6564C6AF-3E37-4C29-8947-68D4E22232BE}.Release|x64.Build.0 = Release|x64
     231    {6564C6AF-3E37-4C29-8947-68D4E22232BE}.Release|x86.ActiveCfg = Release|x86
     232    {6564C6AF-3E37-4C29-8947-68D4E22232BE}.Release|x86.Build.0 = Release|x86
     233    {2351DBE7-D0E1-44F9-9CE9-2F0F5E580572}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
     234    {2351DBE7-D0E1-44F9-9CE9-2F0F5E580572}.Debug|Any CPU.Build.0 = Debug|Any CPU
     235    {2351DBE7-D0E1-44F9-9CE9-2F0F5E580572}.Debug|x64.ActiveCfg = Release|x64
     236    {2351DBE7-D0E1-44F9-9CE9-2F0F5E580572}.Debug|x64.Build.0 = Release|x64
     237    {2351DBE7-D0E1-44F9-9CE9-2F0F5E580572}.Debug|x86.ActiveCfg = Release|x86
     238    {2351DBE7-D0E1-44F9-9CE9-2F0F5E580572}.Debug|x86.Build.0 = Release|x86
     239    {2351DBE7-D0E1-44F9-9CE9-2F0F5E580572}.Release|Any CPU.ActiveCfg = Release|Any CPU
     240    {2351DBE7-D0E1-44F9-9CE9-2F0F5E580572}.Release|Any CPU.Build.0 = Release|Any CPU
     241    {2351DBE7-D0E1-44F9-9CE9-2F0F5E580572}.Release|x64.ActiveCfg = Release|x64
     242    {2351DBE7-D0E1-44F9-9CE9-2F0F5E580572}.Release|x64.Build.0 = Release|x64
     243    {2351DBE7-D0E1-44F9-9CE9-2F0F5E580572}.Release|x86.ActiveCfg = Release|x86
     244    {2351DBE7-D0E1-44F9-9CE9-2F0F5E580572}.Release|x86.Build.0 = Release|x86
    210245  EndGlobalSection
    211246  GlobalSection(SolutionProperties) = preSolution
  • stable/HeuristicLab.Services.Hive

  • stable/HeuristicLab.Services.Hive/3.3/HiveDao.cs

    r12541 r12563  
    869869    }
    870870
    871     public Dictionary<Guid, int> GetWaitingTasksByUser() {
    872       using (var db = CreateContext()) {
    873         var waitingTasksByUser = from task in db.Tasks
    874                                  where task.State == TaskState.Waiting
    875                                  group task by task.Job.OwnerUserId into g
    876                                  select new { UserId = g.Key, UsedCores = g.Count() };
    877         return waitingTasksByUser.ToDictionary(x => x.UserId, x => x.UsedCores);
    878       }
    879     }
    880 
    881871    public Dictionary<Guid, int> GetWaitingTasksByUserForResources(List<Guid> resourceIds) {
    882872      using (var db = CreateContext()) {
     
    886876                                 select new { UserId = g.Key, UsedCores = g.Count() };
    887877        return waitingTasksByUser.ToDictionary(x => x.UserId, x => x.UsedCores);
    888       }
    889     }
    890 
    891     public Dictionary<Guid, int> GetCalculatingTasksByUser() {
    892       using (var db = CreateContext()) {
    893         var calculatingTasksByUser = from task in db.Tasks
    894                                      where task.State == TaskState.Calculating
    895                                      group task by task.Job.OwnerUserId into g
    896                                      select new { UserId = g.Key, UsedCores = g.Count() };
    897         return calculatingTasksByUser.ToDictionary(x => x.UserId, x => x.UsedCores);
    898878      }
    899879    }
  • stable/HeuristicLab.Services.Hive/3.3/Interfaces/IHiveDao.cs

    r12009 r12563  
    150150
    151151    #region Statistics Methods
    152     Dictionary<Guid, int> GetWaitingTasksByUser();
    153152    Dictionary<Guid, int> GetWaitingTasksByUserForResources(List<Guid> resourceIds);
    154     Dictionary<Guid, int> GetCalculatingTasksByUser();
    155153    Dictionary<Guid, int> GetCalculatingTasksByUserForResources(List<Guid> resourceIds);
    156154    DT.Statistics GetStatistic(Guid id);
  • stable/HeuristicLab.Services.Hive/3.3/Interfaces/IOptimizedHiveDao.cs

    r12009 r12563  
    6565    IEnumerable<Guid> GetAssignedResourceIds(Guid jobId);
    6666    #endregion
     67
     68    #region Website Methods
     69
     70    IEnumerable<Guid> GetAllResourceIds();
     71
     72    int GetNumberOfWaitingTasks();
     73
     74    Dictionary<Guid, int> GetCalculatingTasksByUser();
     75
     76    Dictionary<Guid, int> GetWaitingTasksByUser();
     77
     78    #endregion
    6779  }
    6880}
  • stable/HeuristicLab.Services.Hive/3.3/OptimizedHiveDao.cs

    r12009 r12563  
    245245    );
    246246    #endregion
     247
     248
     249    #region Website Methods
     250    private const string GetAllResourceIdsString = @"SELECT ResourceId FROM [Resource]";
     251    public IEnumerable<Guid> GetAllResourceIds() {
     252      return Db.ExecuteQuery<Guid>(GetAllResourceIdsString);
     253    }
     254
     255    private const string GetNumberOfWaitingTasksString = @"SELECT COUNT(TaskId)
     256                                                           FROM [Task]
     257                                                           WHERE TaskState LIKE 'Waiting'";
     258    public int GetNumberOfWaitingTasks() {
     259      return Db.ExecuteQuery<int>(GetNumberOfWaitingTasksString).Single();
     260    }
     261
     262    private class UserTasks {
     263      public Guid OwnerUserId;
     264      public int Count;
     265    }
     266
     267    private const string GetCalculatingTasksByUserString = @"SELECT Job.OwnerUserId, COUNT(Task.TaskId) as Count
     268                                                             FROM Task, Job
     269                                                             WHERE TaskState LIKE 'Calculating' AND Task.JobId = Job.JobId
     270                                                             GROUP BY Job.OwnerUserId";
     271
     272    public Dictionary<Guid, int> GetCalculatingTasksByUser() {
     273      var result = Db.ExecuteQuery<UserTasks>(GetCalculatingTasksByUserString);
     274      Dictionary<Guid, int> lst = new Dictionary<Guid, int>();
     275
     276      foreach (var userTask in result) {
     277        lst.Add(userTask.OwnerUserId, userTask.Count);
     278      }
     279      return lst;
     280    }
     281
     282    private const string GetWaitingTasksByUserString = @"SELECT Job.OwnerUserId, COUNT(Task.TaskId) as Count
     283                                                         FROM Task, Job
     284                                                         WHERE TaskState LIKE 'Waiting' AND Task.JobId = Job.JobId
     285                                                         GROUP BY Job.OwnerUserId";
     286
     287    public Dictionary<Guid, int> GetWaitingTasksByUser() {
     288      var result = Db.ExecuteQuery<UserTasks>(GetWaitingTasksByUserString);
     289      Dictionary<Guid, int> lst = new Dictionary<Guid, int>();
     290
     291      foreach (var userTask in result) {
     292        lst.Add(userTask.OwnerUserId, userTask.Count);
     293      }
     294      return lst;
     295    }
     296    #endregion
    247297  }
    248298}
  • stable/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj

    r12428 r12563  
    7373  </PropertyGroup>
    7474  <ItemGroup>
    75     <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
    76       <HintPath>..\..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll</HintPath>
    77       <Private>False</Private>
     75    <Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
     76      <SpecificVersion>False</SpecificVersion>
     77      <HintPath>..\..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
    7878    </Reference>
    7979    <Reference Include="System" />
  • stable/HeuristicLab.Services.WebApp.Status/3.3/WebApi/DataController.cs

    r12428 r12563  
    1 using System;
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22using System;
    223using System.Collections.Generic;
     24using System.Data.Linq;
    325using System.Linq;
    426using System.Web.Http;
     
    2547        FROM UserTasks ut;";
    2648
    27 
    2849    private class UserTaskStatus {
    2950      public Guid UserId { get; set; }
     
    4162        CalculatingTasks = uts.CalculatingTasks,
    4263        WaitingTasks = uts.WaitingTasks
    43       });
     64      }).OrderBy(x => x.User.Name);
    4465    }
    4566    // end temporary quickfix
     
    5071                            where slave.SlaveState == SlaveState.Calculating || slave.SlaveState == SlaveState.Idle
    5172                            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
    5278        return new DTO.Status {
    5379          CoreStatus = new DTO.CoreStatus {
    5480            TotalCores = onlineSlaves.Sum(s => s.Cores ?? 0),
    55             AvailableCores = onlineSlaves.Where(s => s.IsAllowedToCalculate).Sum(s => s.Cores ?? 0),
    56             FreeCores = onlineSlaves.Sum(s => s.FreeCores ?? 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)
    5784          },
    5885          CpuUtilizationStatus = new DTO.CpuUtilizationStatus {
     
    6087                                  ? Math.Round(onlineSlaves.Average(s => s.CpuUtilization), 2)
    6188                                  : 0.0,
    62             UsedCpuUtilization = onlineSlaves.Any(x => x.IsAllowedToCalculate)
    63                                  ? Math.Round(onlineSlaves.Where(x => x.IsAllowedToCalculate).Average(s => s.CpuUtilization), 2)
    64                                  : 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
    6595          },
    6696          MemoryStatus = new DTO.MemoryStatus {
    67             TotalMemory = onlineSlaves.Any() ? (int)onlineSlaves.Sum(s => s.Memory) / 1024 : 0,
    68             FreeMemory = onlineSlaves.Any() ? (int)onlineSlaves.Sum(s => s.FreeMemory) / 1024 : 0
     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
    69101          },
    70102          TasksStatus = GetTaskStatus(db),
    71           SlavesCpuStatus = onlineSlaves.Select(x => new DTO.SlaveCpuStatus {
    72             CpuUtilization = Math.Round(x.CpuUtilization, 2),
     103          SlavesStatus = onlineSlaves.Select(x => new DTO.SlaveStatus {
    73104            Slave = new DTO.Slave {
    74105              Id = x.ResourceId.ToString(),
    75106              Name = x.Name
    76             }
    77           }),
     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),
    78116          Timestamp = JavascriptUtils.ToTimestamp(DateTime.Now)
    79117        };
     
    82120
    83121    public IEnumerable<DTO.Status> GetStatusHistory(DateTime start, DateTime end) {
     122      TimeSpan ts = end - start;
     123      int increment = 1;
     124      double totalMinutes = ts.TotalMinutes;
     125      while (totalMinutes > 5761) {
     126        totalMinutes -= 5761;
     127        increment += 5;
     128      }
    84129      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;
    85134        var statistics = db.Statistics.Where(s => s.Timestamp >= start && s.Timestamp <= end)
    86                                       .OrderBy(x => x.Timestamp)
     135                                      .OrderBy(s => s.Timestamp)
    87136                                      .ToList();
     137        var status = new DTO.Status {
     138          CoreStatus = new DTO.CoreStatus(),
     139          CpuUtilizationStatus = new DTO.CpuUtilizationStatus(),
     140          MemoryStatus = new DTO.MemoryStatus()
     141        };
     142        int freeCores = 0;
     143        int freeMemory = 0;
     144        int i = 1;
    88145        foreach (var statistic in statistics) {
    89           yield return new DTO.Status {
    90             CoreStatus = new DTO.CoreStatus {
    91               TotalCores = statistic.SlaveStatistics.Sum(x => x.Cores),
    92               AvailableCores = 0,
    93               FreeCores = statistic.SlaveStatistics.Sum(x => x.FreeCores)
    94             },
    95             CpuUtilizationStatus = new DTO.CpuUtilizationStatus {
    96               TotalCpuUtilization = 0.0,
    97               UsedCpuUtilization = statistic.SlaveStatistics.Any() ? statistic.SlaveStatistics.Average(x => x.CpuUtilization) : 0.0
    98             },
    99             MemoryStatus = new DTO.MemoryStatus {
    100               TotalMemory = statistic.SlaveStatistics.Sum(x => x.Memory) / 1024,
    101               FreeMemory = statistic.SlaveStatistics.Sum(x => x.FreeMemory) / 1024
    102             },
    103             Timestamp = JavascriptUtils.ToTimestamp(statistic.Timestamp)
    104           };
     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          }
    105178        }
    106179      }
  • stable/HeuristicLab.Services.WebApp.Status/3.3/WebApi/DataTransfer/Slave.cs

    r12428 r12563  
    1 namespace HeuristicLab.Services.WebApp.Status.WebApi.DataTransfer {
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22namespace HeuristicLab.Services.WebApp.Status.WebApi.DataTransfer {
    223  public class Slave {
    324    public string Id { get; set; } // currently unused
  • stable/HeuristicLab.Services.WebApp.Status/3.3/WebApi/DataTransfer/Status.cs

    r12428 r12563  
    1 using System.Collections.Generic;
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22using System.Collections.Generic;
    223
    324namespace HeuristicLab.Services.WebApp.Status.WebApi.DataTransfer {
     
    526  public class CoreStatus {
    627    public int TotalCores { get; set; }
    7     public int AvailableCores { get; set; }
    8     public int FreeCores { get; set; }
     28    public int FreeCores { get; set; } // temporary quickfix for old chart data
     29    public int ActiveCores { get; set; }
     30    public int CalculatingCores { get; set; }
    931  }
    1032
    1133  public class CpuUtilizationStatus {
    1234    public double TotalCpuUtilization { get; set; }
    13     public double UsedCpuUtilization { get; set; }
     35    public double ActiveCpuUtilization { get; set; }
     36    public double CalculatingCpuUtilization { get; set; }
    1437  }
    1538
    1639  public class MemoryStatus {
    1740    public int TotalMemory { get; set; }
    18     public int FreeMemory { get; set; }
     41    public int FreeMemory { get; set; } // temporary quickfix for old chart data
     42    public int ActiveMemory { get; set; }
     43    public int UsedMemory { get; set; }
    1944  }
    2045
     
    2550  }
    2651
    27   public class SlaveCpuStatus {
     52  public class SlaveStatus {
    2853    public Slave Slave { get; set; }
    2954    public double CpuUtilization { get; set; }
     55    public int Cores { get; set; }
     56    public int FreeCores { get; set; }
     57    public int Memory { get; set; }
     58    public int FreeMemory { get; set; }
     59    public bool IsAllowedToCalculate { get; set; }
     60    public string State { get; set; }
    3061  }
    3162
     
    3566    public MemoryStatus MemoryStatus { get; set; }
    3667    public IEnumerable<TaskStatus> TasksStatus { get; set; }
    37     public IEnumerable<SlaveCpuStatus> SlavesCpuStatus { get; set; }
     68    public IEnumerable<SlaveStatus> SlavesStatus { get; set; }
    3869    public long Timestamp { get; set; }
    3970  }
  • stable/HeuristicLab.Services.WebApp.Status/3.3/WebApi/DataTransfer/User.cs

    r12428 r12563  
    1 
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
    222namespace HeuristicLab.Services.WebApp.Status.WebApi.DataTransfer {
    323  public class User {
  • stable/HeuristicLab.Services.WebApp.Status/3.3/WebApi/JavascriptUtils.cs

    r12428 r12563  
    1 using System;
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22using System;
    223
    324namespace HeuristicLab.Services.WebApp.Status.WebApi {
     
    627      var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    728      var time = input.Subtract(new TimeSpan(epoch.Ticks));
    8       return (long)(time.Ticks / 10000);
     29      return time.Ticks / 10000;
    930    }
    1031  }
  • stable/HeuristicLab.Services.WebApp.Status/3.3/WebApp/history/history.cshtml

    r12428 r12563  
    1212<div id="history-header">
    1313    <form class="form-inline">
    14         <div class="form-group">
     14        <div class="form-group" style="margin-left: 5px; margin-right: 5px;">
    1515            <label for="fromDate">From:&nbsp;</label>
    1616            <div class="input-group">
     
    2121            </div>
    2222        </div>
    23         <div class="form-group">
    24             <label for="fromDate">&nbsp;&nbsp;To:&nbsp;</label>
     23        <div class="form-group" style="margin-left: 5px; margin-right: 5px;">
     24            <label for="fromDate">To:&nbsp;</label>
    2525            <div class="input-group">
    2626                <input id="fromDate" type="text" class="form-control" datepicker-popup="dd.MM.yyyy" ng-model="toDate" is-open="toIsOpen" datepicker-options="dateOptions" ng-required="true" close-text="Close" />
     
    2929                </span>
    3030            </div>
     31        </div>
     32        <div class="form-group" style="margin-left: 5px; margin-right: 5px;">
     33            <button type="button" class="btn btn-default" ng-click="updateCharts()">
     34                Apply
     35            </button>
    3136        </div>
    3237    </form>
  • stable/HeuristicLab.Services.WebApp.Status/3.3/WebApp/history/historyCtrl.js

    r12428 r12563  
    44        ['$scope', '$interval', 'app.status.data.service',
    55        function ($scope, $interval, dataService) {
    6 
    76            $scope.chartOptions = {
    87                grid: {
     
    1514                yaxis: {
    1615                    min: 0,
    17                     max: 100,
    18                     zoomRange: false,
    19                     panRange: false
     16                    max: 100
    2017                },
    2118                xaxis: {
    2219                    mode: "time",
    2320                    twelveHourClock: false
    24                 },
    25                 zoom: {
    26                     interactive: true
    27                 },
    28                 pan: {
    29                     interactive: true
    3021                }
    3122            };
     
    4334                    }
    4435                },
    45                 yaxis: {
    46                     zoomRange: false,
    47                     panRange: false
    48                 },
    4936                xaxis: {
    5037                    mode: "time",
    5138                    twelveHourClock: false
    52                 },
    53                 zoom: {
    54                     interactive: true
    55                 },
    56                 pan: {
    57                     interactive: true
    5839                }
    5940            };
     41
    6042
    6143            $scope.fromDate = new Date();
     
    8870            $scope.memorySeries = [[]];
    8971
    90             var updateCharts = function () {
    91                 dataService.getStatusHistory({start: ConvertFromDate($scope.fromDate), end: ConvertToDate($scope.toDate)}, function (status) {
     72            $scope.updateCharts = function () {
     73                dataService.getStatusHistory({ start: ConvertFromDate($scope.fromDate), end: ConvertToDate($scope.toDate) }, function (status) {
    9274                    var noOfStatus = status.length;
    9375                    var cpuSeries = [];
     
    9678                    for (var i = 0; i < noOfStatus; ++i) {
    9779                        var curStatus = status[i];
    98                         var cpuData = Math.round(curStatus.CpuUtilizationStatus.UsedCpuUtilization);
    99                         var usedCores = curStatus.CoreStatus.TotalCores - curStatus.CoreStatus.FreeCores;
    100                         var usedMemory = curStatus.MemoryStatus.TotalMemory - curStatus.MemoryStatus.FreeMemory;
     80                        var cpuData = Math.round(curStatus.CpuUtilizationStatus.ActiveCpuUtilization);
    10181                        cpuSeries.push([curStatus.Timestamp, cpuData]);
    102                         coreSeries[0].push([curStatus.Timestamp, curStatus.CoreStatus.TotalCores]);
    103                         coreSeries[1].push([curStatus.Timestamp, usedCores]);
    104                         memorySeries[0].push([curStatus.Timestamp, curStatus.MemoryStatus.TotalMemory]);
    105                         memorySeries[1].push([curStatus.Timestamp, usedMemory]);
     82                        coreSeries[0].push([curStatus.Timestamp, curStatus.CoreStatus.ActiveCores]);
     83                        coreSeries[1].push([curStatus.Timestamp, curStatus.CoreStatus.CalculatingCores]);
     84                        memorySeries[0].push([curStatus.Timestamp, Math.round(curStatus.MemoryStatus.ActiveMemory / 1024)]);
     85                        memorySeries[1].push([curStatus.Timestamp, Math.round(curStatus.MemoryStatus.UsedMemory / 1024)]);
    10686                    }
    10787                    $scope.cpuSeries = [{ data: cpuSeries, label: "&nbsp;CPU Utilization", color: "#f7921d" }];
     
    11797                });
    11898            };
    119 
    120             $scope.$watch('fromDate', function (newValue, oldValue) {
    121                 updateCharts();
    122             });
    123             $scope.$watch('toDate', function (newValue, oldValue) {
    124                 updateCharts();
    125             });
     99            $scope.updateCharts();
    126100        }]
    127101    );
  • stable/HeuristicLab.Services.WebApp.Status/3.3/WebApp/status/status.cshtml

    r12428 r12563  
    1111
    1212<div class="default-view-container">
    13     <div class="row">
    14         <div class="col-lg-3 col-md-6">
    15             <div class="panel panel-default">
    16                 <div class="panel-heading">
    17                     <h3 class="panel-title">Cores</h3>
    18                 </div>
     13<div class="row">
     14    <div class="col-lg-3 col-md-6">
     15        <div class="panel panel-default">
     16            <div class="panel-heading">
     17                <h3 class="panel-title">Cores</h3>
     18            </div>
     19            <div class="panel-body">
     20                <div class="text-center">
     21                    <knob knob-data="core.knobData" knob-options="knobOptions"></knob>
     22                </div>
     23                <table class="table table-no-border table-condensed table-auto-width table-content">
     24                    <tr data-toggle="tooltip" data-placement="bottom" title="All online slaves">
     25                        <td class="text-left">
     26                            Total:
     27                        </td>
     28                        <td class="text-right">{{status.CoreStatus.TotalCores | number}}</td>
     29                    </tr>
     30                    <tr data-toggle="tooltip" data-placement="bottom" title="All calculating and idle slaves that are allowed to calculate">
     31                        <td class="text-left">Active:</td>
     32                        <td class="text-right">{{status.CoreStatus.ActiveCores | number}}</td>
     33                    </tr>
     34                    <tr data-toggle="tooltip" data-placement="bottom" title="All calculating slaves that are allowed to calculate">
     35                        <td class="text-left">Calculating:</td>
     36                        <td class="text-right">{{status.CoreStatus.CalculatingCores | number}}</td>
     37                    </tr>
     38                </table>
     39            </div>
     40        </div>
     41    </div>
     42
     43    <div class="col-lg-3 col-md-6">
     44        <div class="panel panel-default">
     45            <div class="panel-heading">
     46                <h3 class="panel-title">CPU Utilization</h3>
     47            </div>
     48            <div class="panel-body">
     49                <div class="text-center">
     50                    <knob knob-data="cpu.knobData" knob-options="knobOptions"></knob>
     51                </div>
     52                <table class="table table-no-border table-condensed table-auto-width table-content">
     53                    <tr data-toggle="tooltip" data-placement="bottom" title="All online slaves">
     54                        <td class="text-left">Total:</td>
     55                        <td class="text-right">{{status.CpuUtilizationStatus.TotalCpuUtilization | number: 2}} %</td>
     56                    </tr>
     57                    <tr data-toggle="tooltip" data-placement="bottom" title="All calculating and idle slaves that are allowed to calculate">
     58                        <td class="text-left">Active:</td>
     59                        <td class="text-right">{{status.CpuUtilizationStatus.ActiveCpuUtilization | number: 2}} %</td>
     60                    </tr>
     61                    <tr data-toggle="tooltip" data-placement="bottom" title="All calculating slaves that are allowed to calculate">
     62                        <td class="text-left">Calculating:</td>
     63                        <td class="text-right">{{status.CpuUtilizationStatus.CalculatingCpuUtilization | number: 2}} %</td>
     64                    </tr>
     65                </table>
     66            </div>
     67        </div>
     68    </div>
     69
     70    <div class="col-lg-3 col-md-6">
     71        <div class="panel panel-default">
     72            <div class="panel-heading">
     73                <h3 class="panel-title">Memory</h3>
     74            </div>
     75            <div class="panel-body">
     76                <div class="text-center">
     77                    <knob knob-data="memory.knobData" knob-options="knobOptions"></knob>
     78                </div>
     79                <table class="table table-no-border table-condensed table-auto-width table-content">
     80                    <tr data-toggle="tooltip" data-placement="bottom" title="All online slaves">
     81                        <td class="text-left">Total:</td>
     82                        <td class="text-right">{{status.MemoryStatus.TotalMemory | kbToGB}} GB</td>
     83                    </tr>
     84                    <tr data-toggle="tooltip" data-placement="bottom" title="All calculating and idle slaves that are allowed to calculate">
     85                        <td class="text-left">Active:</td>
     86                        <td class="text-right">{{status.MemoryStatus.ActiveMemory | kbToGB}} GB</td>
     87                    </tr>
     88                    <tr data-toggle="tooltip" data-placement="bottom" title="All calculating slaves that are allowed to calculate">
     89                        <td class="text-left">Calculating:</td>
     90                        <td class="text-right">{{status.MemoryStatus.UsedMemory | kbToGB}} GB</td>
     91                    </tr>
     92                </table>
     93            </div>
     94        </div>
     95    </div>
     96
     97    <div class="col-lg-3 col-md-6">
     98        <div class="panel panel-default">
     99            <div class="panel-heading">
     100                <h3 class="panel-title">Tasks</h3>
     101            </div>
     102            <div class="panel-body">
     103                <table class="table table-no-border table-condensed table-auto-width table-content">
     104                    <tr>
     105                        <td class="text-left">Total:</td>
     106                        <td class="text-right">{{tasks.WaitingTasks + tasks.CalculatingTasks | number}}</td>
     107                    </tr>
     108                    <tr>
     109                        <td class="text-left">Waiting:</td>
     110                        <td class="text-right">{{tasks.WaitingTasks | number}}</td>
     111                    </tr>
     112                    <tr>
     113                        <td class="text-left">Calculating:</td>
     114                        <td class="text-right">{{tasks.CalculatingTasks | number}}</td>
     115                    </tr>
     116                </table>
     117            </div>
     118        </div>
     119    </div>
     120</div>
     121
     122<div class="row">
     123    <div class="col-lg-12">
     124        <div class="panel panel-default">
     125            <div class="panel-heading">
     126                <h3 class="panel-title">CPU Utilization Chart</h3>
     127            </div>
     128            <div class="panel-body">
     129                <flot dataset="cpu.series" options="chartOptions"></flot>
     130            </div>
     131        </div>
     132    </div>
     133</div>
     134
     135<div class="row">
     136    <div class="col-lg-12">
     137        <div class="panel panel-default">
     138            <div class="panel-heading">
     139                <h3 class="panel-title">Core Chart</h3>
     140            </div>
     141            <div class="panel-body">
     142                <flot dataset="core.series" options="fillChartOptions"></flot>
     143            </div>
     144        </div>
     145    </div>
     146</div>
     147
     148<div class="row">
     149    <div class="col-lg-12">
     150        <div class="panel panel-default">
     151            <div class="panel-heading">
     152                <h3 class="panel-title">Memory Chart</h3>
     153            </div>
     154            <div class="panel-body">
     155                <flot dataset="memory.series" options="fillChartOptions"></flot>
     156            </div>
     157        </div>
     158    </div>
     159</div>
     160
     161<div class="row">
     162    <div class="col-lg-12">
     163        <div class="panel panel-default">
     164            <div class="panel-heading">
     165                <h3 class="panel-title">Tasks by User</h3>
     166            </div>
     167            <div class="panel-body">
     168                <table class="table table-hover" ts-wrapper>
     169                    <thead>
     170                        <tr>
     171                            <th ts-criteria="User.Name">Username</th>
     172                            <th ts-criteria="CalculatingTasks|parseInt">Calculating Tasks</th>
     173                            <th ts-criteria="WaitingTasks|parseInt">Waiting Tasks</th>
     174                        </tr>
     175                    </thead>
     176                    <tbody>
     177                        <tr ng-repeat="task in status.TasksStatus" ts-repeat>
     178                            <td>{{task.User.Name}}</td>
     179                            <td>{{task.CalculatingTasks | number}}</td>
     180                            <td>{{task.WaitingTasks | number}}</td>
     181                        </tr>
     182                        <tr ng-hide="status.TasksStatus.length">
     183                            <td colspan="3" class="text-center">
     184                                There are no waiting or calculating tasks available!
     185                            </td>
     186                        </tr>
     187                    </tbody>
     188                </table>
     189            </div>
     190        </div>
     191    </div>
     192</div>
     193
     194<div class="row">
     195    <div class="col-lg-12">
     196        <div class="panel panel-default">
     197            <div class="panel-heading">
     198                <h3 class="panel-title">
     199                    <a data-toggle="collapse" data-target="#collapseActiveCalculatingSlaves"
     200                       ng-href="#/status">
     201                        Active Calculating Slaves
     202                    </a>
     203                </h3>
     204            </div>
     205            <div id="collapseActiveCalculatingSlaves"
     206                 class="panel-collapse collapse in">
    19207                <div class="panel-body">
    20                     <center>
    21                         <knob knob-data="core.knobData" knob-options="knobOptions"></knob>
    22                     </center>
    23                     <p>Total Cores: {{status.CoreStatus.TotalCores}}</p>
    24                     <p>Used Cores: {{status.CoreStatus.TotalCores - status.CoreStatus.FreeCores}}</p>
    25                 </div>
    26             </div>
    27         </div>
    28 
    29         <div class="col-lg-3 col-md-6">
    30             <div class="panel panel-default">
    31                 <div class="panel-heading">
    32                     <h3 class="panel-title">CPU Utilization</h3>
    33                 </div>
    34                 <div class="panel-body">
    35                     <center>
    36                         <knob knob-data="cpu.knobData" knob-options="knobOptions"></knob>
    37                     </center>
    38                     <p>Total Utilization: {{status.CpuUtilizationStatus.TotalCpuUtilization}} %</p>
    39                     <p>Used Utilization: {{status.CpuUtilizationStatus.UsedCpuUtilization}} %</p>
    40                 </div>
    41             </div>
    42         </div>
    43 
    44         <div class="col-lg-3 col-md-6">
    45             <div class="panel panel-default">
    46                 <div class="panel-heading">
    47                     <h3 class="panel-title">Memory</h3>
    48                 </div>
    49                 <div class="panel-body">
    50                     <center>
    51                         <knob knob-data="memory.knobData" knob-options="knobOptions"></knob>
    52                     </center>
    53                     <p>TotalMemory: {{status.MemoryStatus.TotalMemory}} GB</p>
    54                     <p>UsedMemory: {{status.MemoryStatus.TotalMemory - status.MemoryStatus.FreeMemory}} GB</p>
    55                 </div>
    56             </div>
    57         </div>
    58 
    59         <div class="col-lg-3 col-md-6">
    60             <div class="panel panel-default">
    61                 <div class="panel-heading">
    62                     <h3 class="panel-title">Tasks</h3>
    63                 </div>
    64                 <div class="panel-body">
    65                     <p>Total: {{tasks.WaitingTasks + tasks.CalculatingTasks}}</p>
    66                     <p>Waiting: {{tasks.WaitingTasks}}</p>
    67                     <p>Calculating: {{tasks.CalculatingTasks}}</p>
    68                 </div>
    69             </div>
    70         </div>
    71     </div>
    72 
    73     <div class="row">
    74         <div class="col-lg-12">
    75             <div class="panel panel-default">
    76                 <div class="panel-heading">
    77                     <h3 class="panel-title">CPU Utilization Chart</h3>
    78                 </div>
    79                 <div class="panel-body">
    80                     <flot dataset="cpu.series" options="chartOptions"></flot>
    81                 </div>
    82             </div>
    83         </div>
    84     </div>
    85 
    86     <div class="row">
    87         <div class="col-lg-12">
    88             <div class="panel panel-default">
    89                 <div class="panel-heading">
    90                     <h3 class="panel-title">Core Chart</h3>
    91                 </div>
    92                 <div class="panel-body">
    93                     <flot dataset="core.series" options="fillChartOptions"></flot>
    94                 </div>
    95             </div>
    96         </div>
    97     </div>
    98 
    99     <div class="row">
    100         <div class="col-lg-12">
    101             <div class="panel panel-default">
    102                 <div class="panel-heading">
    103                     <h3 class="panel-title">Memory Chart</h3>
    104                 </div>
    105                 <div class="panel-body">
    106                     <flot dataset="memory.series" options="fillChartOptions"></flot>
    107                 </div>
    108             </div>
    109         </div>
    110     </div>
    111 
    112     <div class="row">
    113         <div class="col-lg-12">
    114             <div class="panel panel-default">
    115                 <div class="panel-heading">
    116                     <h3 class="panel-title">Tasks by User</h3>
    117                 </div>
    118                 <div class="panel-body">
    119                     <table class="table table-hover">
     208                    <table class="table table-hover" ts-wrapper>
    120209                        <thead>
    121210                            <tr>
    122                                 <th>Username</th>
    123                                 <th>Calculating Tasks</th>
    124                                 <th>Waiting Tasks</th>
     211                                <th ts-criteria="Slave.Name">Slave</th>
     212                                <th ts-criteria="CpuUtilization|parseFloat">CPU Utilization</th>
     213                                <th ts-criteria="Cores|parseInt">Cores</th>
     214                                <th ts-criteria="Memory|parseInt">Memory</th>
    125215                            </tr>
    126216                        </thead>
    127                         <tr ng-repeat="task in status.TasksStatus">
    128                             <td>{{task.User.Name}}</td>
    129                             <td>{{task.CalculatingTasks}}</td>
    130                             <td>{{task.WaitingTasks}}</td>
     217                        <tbody>
     218                            <tr ng-repeat="slave in activeCalculatingSlaves = (status.SlavesStatus
     219                                | filter: {
     220                                    IsAllowedToCalculate: true,
     221                                    State: 'Calculating'
     222                                  })" ts-repeat>
     223                                <td>{{slave.Slave.Name}}</td>
     224                                <td>{{slave.CpuUtilization | number: 2}} %</td>
     225                                <td>{{slave.Cores - slave.FreeCores | number}} / {{slave.Cores | number}}</td>
     226                                <td>{{slave.Memory - slave.FreeMemory | kbToGB}} / {{slave.Memory | kbToGB}} GB</td>
     227                            </tr>
     228                            <tr ng-hide="activeCalculatingSlaves.length">
     229                                <td colspan="4" class="text-center">
     230                                    There are no active calculating slaves available!
     231                                </td>
     232                            </tr>
     233                        </tbody>
     234                    </table>
     235                </div>
     236            </div>
     237        </div>
     238    </div>
     239</div>
     240
     241<div class="row">
     242    <div class="col-lg-12">
     243        <div class="panel panel-default">
     244            <div class="panel-heading">
     245                <h3 class="panel-title">
     246                    <a data-toggle="collapse" data-target="#collapseActiveIdleSlaves"
     247                       ng-href="#/status" class="collapsed">
     248                        Active Idle Slaves
     249                    </a>
     250                </h3>
     251            </div>
     252            <div id="collapseActiveIdleSlaves"
     253                 class="panel-collapse collapse">
     254                <div class="panel-body">
     255                    <table class="table table-hover" ts-wrapper>
     256                        <thead>
     257                        <tr>
     258                            <th ts-criteria="Slave.Name">Slave</th>
     259                            <th ts-criteria="CpuUtilization|parseFloat">CPU Utilization</th>
     260                            <th ts-criteria="Cores|parseInt">Cores</th>
     261                            <th ts-criteria="Memory|parseInt">Memory</th>
    131262                        </tr>
     263                        </thead>
     264                        <tbody>
     265                            <tr ng-repeat="slave in activeIdleSlaves = (status.SlavesStatus
     266                                | filter: {
     267                                    IsAllowedToCalculate: true,
     268                                    State: 'Idle'
     269                                  })" ts-repeat>
     270                                <td>{{slave.Slave.Name}}</td>
     271                                <td>{{slave.CpuUtilization | number: 2}} %</td>
     272                                <td>{{slave.Cores - slave.FreeCores | number}} / {{slave.Cores | number}}</td>
     273                                <td>{{slave.Memory - slave.FreeMemory | kbToGB}} / {{slave.Memory | kbToGB}} GB</td>
     274                            </tr>
     275                            <tr ng-hide="activeIdleSlaves.length">
     276                                <td colspan="4" class="text-center">
     277                                    There are no active idle slaves available!
     278                                <td>
     279                            </tr>
     280                        </tbody>
    132281                    </table>
    133282                </div>
     
    135284        </div>
    136285    </div>
    137 
    138     <div class="row">
    139         <div class="col-lg-12">
    140             <div class="panel panel-default">
    141                 <div class="panel-heading">
    142                     <h3 class="panel-title">CPU Utilization by Slave</h3>
    143                 </div>
     286</div>
     287
     288<div class="row">
     289    <div class="col-lg-12">
     290        <div class="panel panel-default">
     291            <div class="panel-heading">
     292                <h3 class="panel-title">
     293                    <a data-toggle="collapse" data-target="#collapseInactiveSlaves"
     294                       ng-href="#/status" class="collapsed">
     295                        Inactive Slaves
     296                    </a>
     297                </h3>
     298            </div>
     299            <div id="collapseInactiveSlaves"
     300                 class="panel-collapse collapse">
    144301                <div class="panel-body">
    145                     <table class="table table-hover">
     302                    <table class="table table-hover" ts-wrapper>
    146303                        <thead>
    147304                            <tr>
    148                                 <th>Slave</th>
    149                                 <th>CPU Utilization</th>
     305                                <th ts-criteria="Slave.Name">Slave</th>
     306                                <th ts-criteria="CpuUtilization|parseFloat">CPU Utilization</th>
     307                                <th ts-criteria="Cores|parseInt">Cores</th>
     308                                <th ts-criteria="Memory|parseInt">Memory</th>
    150309                            </tr>
    151310                        </thead>
    152                         <tr ng-repeat="slave in status.SlavesCpuStatus">
    153                             <td>{{slave.Slave.Name}}</td>
    154                             <td>{{slave.CpuUtilization}} %</td>
    155                         </tr>
     311                        <tbody>
     312                            <tr ng-repeat="slave in inactiveSlaves = (status.SlavesStatus
     313                                | filter: {
     314                                    IsAllowedToCalculate: false
     315                                  })" ts-repeat>
     316                                <td>{{slave.Slave.Name}}</td>
     317                                <td>{{slave.CpuUtilization | number: 2}} %</td>
     318                                <td>{{slave.Cores - slave.FreeCores | number}} / {{slave.Cores | number}}</td>
     319                                <td>{{slave.Memory - slave.FreeMemory | kbToGB}} / {{slave.Memory | kbToGB}} GB</td>
     320                            </tr>
     321                            <tr ng-hide="inactiveSlaves.length">
     322                                <td colspan="4" class="text-center">No inactive slaves available!</td>
     323                            </tr>
     324                        </tbody>
    156325                    </table>
    157326                </div>
     
    160329    </div>
    161330</div>
     331</div>
     332
     333<script>
     334    $(document).ready(function () {
     335        $('[data-toggle="tooltip"]').tooltip();
     336    });
     337</script>
  • stable/HeuristicLab.Services.WebApp.Status/3.3/WebApp/status/statusCtrl.js

    r12428 r12563  
    5353                    mode: "time",
    5454                    twelveHourClock: false
     55                },
     56                yaxis: {
     57                    min: 0
    5558                }
    5659            };
     
    8588                // update status data
    8689                dataService.getStatus({}, function (status) {
     90                    var oneDayInMs = 24 * 60 * 60 * 1000;
     91                    var today = new Date().getTime() - oneDayInMs;
    8792                    // raw status data
    8893                    $scope.status = status;
     
    96101                    }
    97102                    // knobs
    98                     $scope.cpu.knobData = Math.round(status.CpuUtilizationStatus.UsedCpuUtilization);
    99                     var usedCores = status.CoreStatus.TotalCores - status.CoreStatus.FreeCores;
    100                     $scope.core.knobData = Math.round(usedCores / status.CoreStatus.TotalCores * 100);
    101                     var usedMemory = status.MemoryStatus.TotalMemory - status.MemoryStatus.FreeMemory;
    102                     $scope.memory.knobData = Math.round(usedMemory / status.MemoryStatus.TotalMemory * 100);
     103                    $scope.cpu.knobData = Math.round(status.CpuUtilizationStatus.ActiveCpuUtilization);
     104                    $scope.core.knobData = Math.round(status.CoreStatus.CalculatingCores / status.CoreStatus.ActiveCores * 100);
     105                    $scope.memory.knobData = Math.round(status.MemoryStatus.UsedMemory / status.MemoryStatus.ActiveMemory * 100);
    103106                    // chart series
    104107                    var cpuSeries = $scope.cpu.series[0].data.splice(0);
    105                     if (cpuSeries.length > 2) {
    106                         cpuSeries.splice(0, 1);
     108                    var coreSeries = [$scope.core.series[0].data, $scope.core.series[1].data];
     109                    var memorySeries = [$scope.memory.series[0].data, $scope.memory.series[1].data];
     110                    if ($scope.status.Timestamp < today) {
     111                        if (cpuSeries.length > 2) {
     112                            cpuSeries.splice(0, 1);
     113                        }
     114                        if (coreSeries[0].length > 2) {
     115                            coreSeries[0].splice(0, 1);
     116                        }
     117                        if (coreSeries[1].length > 2) {
     118                            coreSeries[1].splice(0, 1);
     119                        }
     120                        if (memorySeries[0].length > 2) {
     121                            memorySeries[0].splice(0, 1);
     122                        }
     123                        if (memorySeries[1].length > 2) {
     124                            memorySeries[1].splice(0, 1);
     125                        }
    107126                    }
    108                     var coreSeries = [$scope.core.series[0].data, $scope.core.series[1].data];
    109                     if (coreSeries[0].length > 2) {
    110                         coreSeries[0].splice(0, 1);
    111                     }
    112                     if (coreSeries[1].length > 2) {
    113                         coreSeries[1].splice(0, 1);
    114                     }
    115                     var memorySeries = [$scope.memory.series[0].data, $scope.memory.series[1].data];
    116                     if (memorySeries[0].length > 2) {
    117                         memorySeries[0].splice(0, 1);
    118                     }
    119                     if (memorySeries[1].length > 2) {
    120                         memorySeries[1].splice(0, 1);
    121                     }
    122                     cpuSeries.push([$scope.status.Timestamp, $scope.cpu.knobData]);
     127                   
     128                    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
    123134                    coreSeries[0].push([$scope.status.Timestamp, status.CoreStatus.TotalCores]);
    124135                    coreSeries[1].push([$scope.status.Timestamp, usedCores]);
    125                     memorySeries[0].push([$scope.status.Timestamp, status.MemoryStatus.TotalMemory]);
    126                     memorySeries[1].push([$scope.status.Timestamp, usedMemory]);
     136                    memorySeries[0].push([$scope.status.Timestamp, Math.round(status.MemoryStatus.TotalMemory / 1024)]);
     137                    memorySeries[1].push([$scope.status.Timestamp, Math.round(usedMemory / 1024)]);
    127138                    $scope.cpu.series = [{ data: cpuSeries, label: "&nbsp;CPU Utilization", color: "#f7921d" }];
    128139                    $scope.core.series = [
     
    145156                    var noOfStatus = status.length;
    146157                    var cpuSeries = [];
    147                     var coreSeries = [[],[]];
    148                     var memorySeries = [[],[]];
     158                    var coreSeries = [[], []];
     159                    var memorySeries = [[], []];
    149160                    for (var i = 0; i < noOfStatus; ++i) {
    150161                        var curStatus = status[i];
    151                         var cpuData = Math.round(curStatus.CpuUtilizationStatus.UsedCpuUtilization);
    152                         var usedCores = curStatus.CoreStatus.TotalCores - curStatus.CoreStatus.FreeCores;
    153                         var usedMemory = curStatus.MemoryStatus.TotalMemory - curStatus.MemoryStatus.FreeMemory;
     162                        var cpuData = Math.round(curStatus.CpuUtilizationStatus.ActiveCpuUtilization);
    154163                        cpuSeries.push([curStatus.Timestamp, cpuData]);
    155                         coreSeries[0].push([curStatus.Timestamp, curStatus.CoreStatus.TotalCores]);
    156                         coreSeries[1].push([curStatus.Timestamp, usedCores]);
    157                         memorySeries[0].push([curStatus.Timestamp, curStatus.MemoryStatus.TotalMemory]);
    158                         memorySeries[1].push([curStatus.Timestamp, usedMemory]);
     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)]);
     167                        memorySeries[1].push([curStatus.Timestamp, Math.round(curStatus.MemoryStatus.UsedMemory / 1024)]);
    159168                    }
    160169                    $scope.cpu.series = [{ data: cpuSeries, label: "&nbsp;CPU Utilization", color: "#f7921d" }];
  • stable/HeuristicLab.Services.WebApp.Status/3.3/packages.config

    r12429 r12563  
    55  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
    66  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net45" />
    7   <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net45" />
     7  <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
    88</packages>
  • stable/HeuristicLab.Services.WebApp.Status/3.3/status.js

    r12428 r12563  
    22(function () {
    33    var plugin = appStatusPlugin;
    4     plugin.dependencies = ['ngResource', 'ui.knob', 'ui.bootstrap'];
     4    plugin.dependencies = ['ngResource', 'ui.knob', 'ui.bootstrap', 'tableSort'];
    55    plugin.files = [
    66        'WebApp/status.css',
     
    1515    ];
    1616    var menu = app.getMenu();
    17     var section = menu.getSection('Menü', 1);
     17    var section = menu.getSection('Menu', 1);
    1818    section.addEntry({
    1919        name: 'Status',
  • stable/HeuristicLab.Services.WebApp/3.3/Configs/BundleConfig.cs

    r12428 r12563  
    1 using System.Collections.Generic;
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22using System.Collections.Generic;
    223using System.IO;
    3 using System.Linq;
    4 using System.Web;
    524using System.Web.Optimization;
    625
    726namespace HeuristicLab.Services.WebApp.Configs {
    827  public class BundleConfig {
     28
    929    public static void RegisterBundles(BundleCollection bundles) {
    1030      bundles.IgnoreList.Clear();
     
    2141        "~/WebApp/libs/bootstrap/css/bootstrap-theme.min.css",
    2242        "~/WebApp/libs/font-aweseome/font-aweseome.min.css",
    23         "~/WebApp/libs/angularjs/loading-bar/loading-bar.css"
     43        "~/WebApp/libs/angularjs/loading-bar/loading-bar.css",
     44        "~/WebApp/libs/angularjs/angular-tablesort/tablesort.css"
    2445      ));
    2546
     
    5071        "~/WebApp/libs/angularjs/angular-ui-router.min.js",
    5172        "~/WebApp/libs/angularjs/angular-knob/angular-knob.js",
     73        "~/WebApp/libs/angularjs/angular-tablesort/angular-tablesort.js",
    5274        "~/WebApp/libs/angularjs/angular-ui/ui-bootstrap-tpls-0.13.0.min.js",
    5375        "~/WebApp/libs/angularjs/loading-bar/loading-bar.js",
     
    6183        "~/WebApp/app.css"
    6284      ));
    63       AddOrUpdateWebAppBundle();
     85
     86      bundles.Add(new ScriptBundle("~/Bundles/WebApp/Main").Include(
     87        "~/WebApp/main.js"
     88      ));
     89
     90      bundles.Add(new ScriptBundle("~/Bundles/WebApp/Shared")
     91        .IncludeDirectory("~/WebApp/shared/services", "*.js", true)
     92        .IncludeDirectory("~/WebApp/shared/directives", "*.js", true)
     93        .IncludeDirectory("~/WebApp/shared/filter", "*.js", true)
     94        .IncludeDirectory("~/WebApp/shared/menu", "*.js", true)
     95      );
    6496    }
    6597
    66     public static void AddOrUpdateWebAppBundle() {
    67       var jsBundle = BundleTable.Bundles.GetBundleFor("~/Bundles/WebApp/js");
    68       if (jsBundle != null) {
    69         BundleTable.Bundles.Remove(jsBundle);
     98    public static IEnumerable<string> GetWebAppScripts() {
     99      var jsFiles = new List<string> {
     100        "WebApp/helper.js",
     101        "WebApp/app.js"
     102      };
     103      PluginManager pluginManager = PluginManager.Instance;
     104      foreach (var plugin in pluginManager.Plugins) {
     105        if (File.Exists(string.Format(@"{0}\{1}\{1}.js", PluginManager.PluginsDirectory, plugin.Name))) {
     106          jsFiles.Add(string.Format("WebApp/plugins/{0}/{0}.js", plugin.Name));
     107        }
    70108      }
    71       var jsFiles = new List<string> {
    72         "~/WebApp/helper.js",
    73         "~/WebApp/app.js"
    74       };
    75       var directories = Directory.GetDirectories(string.Format(@"{0}WebApp\plugins", HttpRuntime.AppDomainAppPath));
    76       jsFiles.AddRange(directories.Select(Path.GetFileName).Select(directory => string.Format("~/WebApp/plugins/{0}/{0}.js", directory)));
    77       jsFiles.Add("~/WebApp/main.js");
    78       jsBundle = new ScriptBundle("~/Bundles/WebApp/js");
    79       jsBundle.Include(jsFiles.ToArray());
    80       jsBundle.IncludeDirectory("~/WebApp/shared/", "*.js", true);
    81       BundleTable.Bundles.Add(jsBundle);
     109      jsFiles.Add("WebApp/main.js");
     110      return jsFiles;
    82111    }
    83112  }
  • stable/HeuristicLab.Services.WebApp/3.3/Configs/FilterConfig.cs

    r12428 r12563  
    1 using System.Web.Mvc;
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22using System.Web.Mvc;
    223
    324namespace HeuristicLab.Services.WebApp.Configs {
  • stable/HeuristicLab.Services.WebApp/3.3/Configs/RouteConfig.cs

    r12428 r12563  
    1 using System.Web.Mvc;
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22using System.Web.Mvc;
    223using System.Web.Routing;
    324
  • stable/HeuristicLab.Services.WebApp/3.3/Configs/WebApiConfig.cs

    r12428 r12563  
    1 
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
    222using System.Net.Http.Formatting;
    323using System.Web.Http;
  • stable/HeuristicLab.Services.WebApp/3.3/Controllers/AppController.cs

    r12428 r12563  
    2121
    2222using System.Web.Mvc;
    23 using HeuristicLab.Services.WebApp.Configs;
    2423
    2524namespace HeuristicLab.Services.WebApp.Controllers {
     
    3130        return RedirectPermanent(Request.Url + "/");
    3231      }
    33       BundleConfig.AddOrUpdateWebAppBundle();
    3432      return View("~/WebApp/shared/layout/layout.cshtml");
    3533    }
     
    4947    }
    5048
     49    public ActionResult RedirectUrl(string url) {
     50      return RedirectPermanent(url);
     51    }
    5152  }
    5253}
  • stable/HeuristicLab.Services.WebApp/3.3/Controllers/AuthenticationController.cs

    r12428 r12563  
    1 using System.Web.Http;
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22using System.Web.Http;
    223using System.Web.Security;
    324using HeuristicLab.Services.WebApp.Controllers.DataTransfer;
  • stable/HeuristicLab.Services.WebApp/3.3/Controllers/DataTransfer/Plugin.cs

    r12428 r12563  
    1 using System;
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22using System;
    223
    324namespace HeuristicLab.Services.WebApp.Controllers.DataTransfer {
     
    728    public DateTime? LastReload { get; set; }
    829    public int Reloads { get; set; }
     30    public string Exception { get; set; }
    931  }
    1032}
  • stable/HeuristicLab.Services.WebApp/3.3/Controllers/DataTransfer/User.cs

    r12428 r12563  
    1 namespace HeuristicLab.Services.WebApp.Controllers.DataTransfer {
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22namespace HeuristicLab.Services.WebApp.Controllers.DataTransfer {
    223  public class User {
    324    public string Username { get; set; }
  • stable/HeuristicLab.Services.WebApp/3.3/Controllers/PluginController.cs

    r12428 r12563  
    1 using System.Collections.Generic;
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22using System.Collections.Generic;
    223using System.Linq;
    324using System.Web.Http;
     25using HeuristicLab.Services.Hive;
    426using DTO = HeuristicLab.Services.WebApp.Controllers.DataTransfer;
    527
    628namespace HeuristicLab.Services.WebApp.Controllers {
    729
    8   [Authorize(Roles = "Hive Administrator")]
     30  [Authorize(Roles = HiveRoles.Administrator)]
    931  public class PluginController : ApiController {
    1032
     
    1234
    1335    public IEnumerable<DTO.Plugin> GetPlugins() {
    14       var plugins = pluginManager.GetPlugins();
     36      var plugins = pluginManager.Plugins;
    1537      return plugins.Select(plugin => new DTO.Plugin {
    1638        Name = plugin.Name,
    1739        AssemblyName = plugin.AssemblyName,
    18         LastReload = plugin.LastReload
     40        LastReload = plugin.LastReload,
     41        Exception = plugin.Exception
    1942      });
    2043    }
    2144
    2245    public bool ReloadPlugin(string name) {
    23       var plugin = PluginManager.Instance.GetPlugin(name);
     46      var plugin = pluginManager.GetPlugin(name);
     47      if (plugin == null)
     48        return false;
    2449      plugin.ReloadControllers();
    2550      return true;
  • stable/HeuristicLab.Services.WebApp/3.3/Controllers/WebAppControllerSelector.cs

    r12428 r12563  
    1 using System;
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22using System;
    223using System.Collections.Concurrent;
    324using System.Collections.Generic;
     
    1839      : base(configuration) {
    1940      this.configuration = configuration;
    20       pluginManager.Configuration = configuration;
    2141      controllers = new ConcurrentDictionary<string, HttpControllerDescriptor>();
    2242      LoadAppControllers();
  • stable/HeuristicLab.Services.WebApp/3.3/Global.asax

    r12428 r12563  
    1 <%@ Application Codebehind="Global.asax.cs" Inherits="HeuristicLab.Services.WebApp.MvcApplication" Language="C#" %>
     1<%@ Application Codebehind="Global.asax.cs" Inherits="HeuristicLab.Services.WebApp.HeuristicLabWebApp" Language="C#" %>
  • stable/HeuristicLab.Services.WebApp/3.3/Global.asax.cs

    r12428 r12563  
    1 using System.Web.Http;
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22using System.Web.Http;
    223using System.Web.Mvc;
    324using System.Web.Optimization;
     
    627
    728namespace HeuristicLab.Services.WebApp {
    8   public class MvcApplication : System.Web.HttpApplication {
     29  public class HeuristicLabWebApp : System.Web.HttpApplication {
    930    protected void Application_Start() {
     31      var pluginManager = PluginManager.Instance;
     32      pluginManager.Configuration = GlobalConfiguration.Configuration;
     33      pluginManager.DiscoverPlugins();
    1034      AreaRegistration.RegisterAllAreas();
    1135      GlobalConfiguration.Configure(WebApiConfig.Register);
  • stable/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj

    r12428 r12563  
    2323    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
    2424    <RestorePackages>true</RestorePackages>
    25     <WebGreaseLibPath>..\..\packages\WebGrease.1.5.2\lib</WebGreaseLibPath>
    2625  </PropertyGroup>
    2726  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     
    4443  </PropertyGroup>
    4544  <ItemGroup>
    46     <Reference Include="Antlr3.Runtime, Version=3.4.1.9004, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL">
    47       <HintPath>..\..\packages\Antlr.3.4.1.9004\lib\Antlr3.Runtime.dll</HintPath>
    48       <Private>True</Private>
     45    <Reference Include="Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL">
     46      <SpecificVersion>False</SpecificVersion>
     47      <HintPath>..\..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll</HintPath>
    4948    </Reference>
    5049    <Reference Include="Microsoft.CSharp" />
     
    5352      <Private>True</Private>
    5453    </Reference>
    55     <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
    56       <HintPath>..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
    57       <Private>True</Private>
     54    <Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
     55      <SpecificVersion>False</SpecificVersion>
     56      <HintPath>..\..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
    5857    </Reference>
    5958    <Reference Include="System" />
     
    119118    <Reference Include="System.Net.Http.WebRequest">
    120119    </Reference>
    121     <Reference Include="WebGrease, Version=1.5.2.14234, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
    122       <HintPath>..\..\packages\WebGrease.1.5.2\lib\WebGrease.dll</HintPath>
    123       <Private>True</Private>
     120    <Reference Include="WebGrease, Version=1.6.5135.21930, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
     121      <SpecificVersion>False</SpecificVersion>
     122      <HintPath>..\..\packages\WebGrease.1.6.0\lib\WebGrease.dll</HintPath>
    124123    </Reference>
    125124  </ItemGroup>
     
    145144    <Content Include="WebApp\app.css" />
    146145    <Content Include="Global.asax" />
     146    <Content Include="WebApp\libs\angularjs\angular-tablesort\angular-tablesort.js" />
     147    <Content Include="WebApp\libs\angularjs\angular-tablesort\tablesort.css" />
    147148    <Content Include="WebApp\main.js" />
    148149    <Content Include="WebApp\helper.js" />
     
    169170    <Content Include="WebApp\libs\smoothScroll\smoothScroll.js" />
    170171    <Content Include="WebApp\app.js" />
    171     <Content Include="WebApp\plugins\login\login.css">
    172       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    173     </Content>
    174     <Content Include="WebApp\plugins\login\login.js">
    175       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    176     </Content>
    177     <Content Include="WebApp\plugins\login\loginCtrl.js">
    178       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    179     </Content>
    180     <Content Include="WebApp\plugins\plugins\plugins.js">
    181       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    182     </Content>
    183     <Content Include="WebApp\plugins\plugins\pluginsCtrl.js">
    184       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    185     </Content>
     172    <Content Include="WebApp\plugins\about\about.js" />
     173    <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" />
    186180    <Content Include="WebApp\plugins\plugins\pluginsService.js" />
    187181    <Content Include="WebApp\shared\directives\flot.js" />
     
    225219    <Content Include="WebApp\libs\bootstrap\fonts\glyphicons-halflings-regular.woff" />
    226220    <Content Include="WebApp\libs\bootstrap\fonts\glyphicons-halflings-regular.woff2" />
     221    <Content Include="WebApp\shared\filter\filters.js" />
    227222    <Content Include="WebApp\shared\images\HeuristicLab-Logo.png" />
    228223    <Content Include="WebApp\shared\layout\layout.cshtml" />
     
    232227    <Content Include="WebApp\shared\menu\menu.cshtml" />
    233228    <Content Include="WebApp\shared\restricted\empty.cshtml" />
    234     <Content Include="WebApp\plugins\login\login.cshtml">
    235       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    236     </Content>
    237     <Content Include="WebApp\plugins\plugins\plugins.cshtml">
    238       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    239     </Content>
    240     <Content Include="WebApp\plugins\plugins\Web.config">
    241       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    242     </Content>
     229    <Content Include="WebApp\plugins\login\login.cshtml" />
     230    <Content Include="WebApp\plugins\plugins\plugins.cshtml" />
     231    <Content Include="WebApp\plugins\plugins\Web.config" />
    243232  </ItemGroup>
    244233  <ItemGroup>
     
    258247      <Name>HeuristicLab.Services.Hive-3.3</Name>
    259248    </ProjectReference>
     249  </ItemGroup>
     250  <ItemGroup>
     251    <Content Include="WebApp\plugins\about\about.cshtml" />
    260252  </ItemGroup>
    261253  <PropertyGroup>
  • stable/HeuristicLab.Services.WebApp/3.3/Plugin.cs

    r12428 r12563  
    1 using System;
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22using System;
    223using System.Collections.Concurrent;
    324using System.Collections.Generic;
     
    526using System.Linq;
    627using System.Reflection;
    7 using System.Text;
    828using System.Web.Http;
    929using System.Web.Http.Controllers;
     
    1131namespace HeuristicLab.Services.WebApp {
    1232  public class Plugin {
    13     private HttpConfiguration configuration;
    1433    public string Name { get; set; }
    1534    public string Directory { get; set; }
    1635    public string AssemblyName { get; set; }
     36    public string Exception { get; set; }
    1737    public DateTime? LastReload { get; set; }
     38
     39    private HttpConfiguration configuration;
     40    public HttpConfiguration Configuration {
     41      get { return configuration; }
     42      set {
     43        if (configuration != value) {
     44          configuration = value;
     45          ReloadControllers();
     46        }
     47      }
     48    }
    1849
    1950    private IDictionary<string, HttpControllerDescriptor> controllers;
     
    2253    }
    2354
    24     public void Configure(HttpConfiguration configuration) {
    25       if (this.configuration != configuration) {
    26         this.configuration = configuration;
    27         ReloadControllers();
    28       }
     55    public Plugin(string name, string directory, HttpConfiguration configuration) {
     56      Name = name;
     57      Directory = directory;
     58      Configuration = configuration;
    2959    }
    3060
     
    3767    public void ReloadControllers() {
    3868      AssemblyName = null;
     69      Exception = null;
    3970      Controllers.Clear();
    4071      LastReload = DateTime.Now;
     
    4778          return;
    4879        var assemblyPath = assemblies.First();
     80        AssemblyName = Path.GetFileName(assemblyPath);
    4981        var assembly = Assembly.Load(File.ReadAllBytes(assemblyPath));
    5082        var assemblyTypes = assembly.GetTypes();
     
    5486          Controllers.Add(controllerName, new HttpControllerDescriptor(configuration, controllerName, apiController));
    5587        }
    56         AssemblyName = Path.GetFileName(assemblyPath);
    5788      }
    58       catch (ReflectionTypeLoadException ex) {
    59         StringBuilder sb = new StringBuilder();
    60         foreach (Exception exSub in ex.LoaderExceptions) {
    61           sb.AppendLine(exSub.Message);
    62           FileNotFoundException exFileNotFound = exSub as FileNotFoundException;
    63           if (exFileNotFound != null) {
    64             if (!string.IsNullOrEmpty(exFileNotFound.FusionLog)) {
    65               sb.AppendLine("Fusion Log:");
    66               sb.AppendLine(exFileNotFound.FusionLog);
    67             }
    68           }
    69           sb.AppendLine();
    70         }
    71         AssemblyName = "Error loading assembly: " + sb.ToString();
     89      catch (Exception e) {
     90        Exception = e.ToString();
    7291        Controllers.Clear();
    7392      }
  • stable/HeuristicLab.Services.WebApp/3.3/PluginManager.cs

    r12428 r12563  
    1 using System.Collections.Concurrent;
     1#region License Information
     2/* HeuristicLab
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     4 *
     5 * This file is part of HeuristicLab.
     6 *
     7 * HeuristicLab is free software: you can redistribute it and/or modify
     8 * it under the terms of the GNU General Public License as published by
     9 * the Free Software Foundation, either version 3 of the License, or
     10 * (at your option) any later version.
     11 *
     12 * HeuristicLab is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU General Public License
     18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
     19 */
     20#endregion
     21
     22using System.Collections.Concurrent;
    223using System.Collections.Generic;
    324using System.IO;
     
    1738    public HttpConfiguration Configuration { get; set; }
    1839
    19     private string PluginsDirectory {
     40    public IEnumerable<Plugin> Plugins {
     41      get { return plugins.Values; }
     42    }
     43
     44    public static string PluginsDirectory {
    2045      get { return string.Format(@"{0}WebApp\plugins", HttpRuntime.AppDomainAppPath); }
    2146    }
     
    2348    public PluginManager() {
    2449      plugins = new ConcurrentDictionary<string, Plugin>();
     50      var fileWatcher = new FileSystemWatcher(PluginsDirectory, "*") {
     51        IncludeSubdirectories = true,
     52        EnableRaisingEvents = true
     53      };
     54      fileWatcher.Created += OnFilesChanged;
     55      fileWatcher.Changed += OnFilesChanged;
     56      fileWatcher.Deleted += OnFilesChanged;
     57      fileWatcher.Renamed += OnFilesChanged;
     58    }
     59
     60    private void OnFilesChanged(object sender, FileSystemEventArgs args) {
     61      string path = args.FullPath.Remove(0, PluginsDirectory.Length + 1);
     62      var pathParts = path.Split(Path.PathSeparator);
     63      string pluginName = pathParts[0];
     64      if (pathParts.Length == 1) {
     65        switch (args.ChangeType) {
     66          case WatcherChangeTypes.Created:
     67            GetPlugin(pluginName);
     68            break;
     69
     70          case WatcherChangeTypes.Deleted:
     71            plugins.Remove(pluginName);
     72            break;
     73
     74          case WatcherChangeTypes.Renamed:
     75            RenamedEventArgs renamedArgs = (RenamedEventArgs)args;
     76            string oldPath = renamedArgs.OldFullPath.Remove(0, PluginsDirectory.Length + 1);
     77            var oldPathParts = oldPath.Split(Path.PathSeparator);
     78            string oldPluginName = oldPathParts[0];
     79            plugins.Remove(oldPluginName);
     80            GetPlugin(pluginName);
     81            break;
     82
     83          case WatcherChangeTypes.Changed:
     84            Plugin plugin = LookupPlugin(pluginName);
     85            if (plugin != null) {
     86              plugin.ReloadControllers();
     87            }
     88            break;
     89        }
     90      }
    2591    }
    2692
    2793    public Plugin GetPlugin(string name) {
    28       Plugin plugin;
    29       plugins.TryGetValue(name, out plugin);
     94      Plugin plugin = LookupPlugin(name);
    3095      if (plugin == null) {
    3196        string directory = string.Format(@"{0}\{1}", PluginsDirectory, name);
    3297        if (Directory.Exists(directory)) {
    33           plugin = new Plugin {
    34             Name = name,
    35             Directory = directory
    36           };
    37           plugin.Configure(Configuration);
     98          plugin = new Plugin(name, directory, Configuration);
    3899          plugins.Add(name, plugin);
    39100        }
     
    43104
    44105    public IEnumerable<Plugin> GetPlugins() {
    45       DiscoverPlugins();
    46106      return plugins.Values;
    47107    }
    48108
    49     private void DiscoverPlugins() {
     109    public void DiscoverPlugins() {
    50110      var pluginDirectories = Directory.GetDirectories(PluginsDirectory);
    51111      foreach (var directory in pluginDirectories) {
    52112        string pluginName = Path.GetFileName(directory);
    53         Plugin plugin;
    54         plugins.TryGetValue(pluginName, out plugin);
     113        Plugin plugin = LookupPlugin(pluginName);
    55114        if (plugin == null) {
    56           plugin = new Plugin {
    57             Name = pluginName,
    58             Directory = directory
    59           };
    60           plugin.Configure(Configuration);
     115          plugin = new Plugin(pluginName, directory, Configuration);
    61116          plugins.Add(pluginName, plugin);
    62117        }
    63118      }
    64119    }
     120
     121    private Plugin LookupPlugin(string name) {
     122      Plugin plugin;
     123      plugins.TryGetValue(name, out plugin);
     124      return plugin;
     125    }
    65126  }
    66127}
  • stable/HeuristicLab.Services.WebApp/3.3/Web.config

    r12428 r12563  
    3131      </providers>
    3232    </roleManager>
    33     <compilation debug="true" targetFramework="4.5" />
     33    <compilation debug="false" targetFramework="4.5" />
    3434    <httpRuntime targetFramework="4.5" />
    3535  </system.web>
     
    5959      <dependentAssembly>
    6060        <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
    61         <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
     61        <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
    6262      </dependentAssembly>
    6363      <dependentAssembly>
     
    6767      <dependentAssembly>
    6868        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
    69         <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
     69        <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
    7070      </dependentAssembly>
    7171      <dependentAssembly>
     
    8181        <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
    8282      </dependentAssembly>
     83      <dependentAssembly>
     84        <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />
     85        <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
     86      </dependentAssembly>
    8387    </assemblyBinding>
    8488  </runtime>
  • stable/HeuristicLab.Services.WebApp/3.3/WebApp/app.css

    r12428 r12563  
    33     -moz-border-radius: 0 !important;
    44          border-radius: 0 !important;
    5     /* -webkit-box-shadow: none !important;
    6         -moz-box-shadow: none !important;
    7           -o-box-shadow: none !important;
    8              box-shadow: none !important;*/
    95  font-family: "Open Sans", Helvetica, Arial, sans-serif;
    106}
     
    7975
    8076#menu {
    81   position: absolute;
    82   min-height: inherit;
    83   width: 250px;
     77  position: relative;
    8478  background: #FAFAFA;
    8579  display: block;
    8680  overflow: hidden;
    87   border-right: 1px solid #D3D3D3;
     81  z-index: 10000;
     82  width: 100%;
    8883}
    8984
     
    10196#view {
    10297  position: relative;
    103   left: 0px;
    104   margin-left: 250px;
     98  left: 0;
     99  margin-left: 0px;
    105100  display: block;
    106101  overflow: hidden;
    107102}
     103
    108104
    109105.view-header {
     
    124120}
    125121
    126 .navbar-header{
    127   width: 250px;
     122.navbar-header {
     123  width: 100%;
    128124  background: #3c3a39;
    129125  color: #FFFFFF;
     126  float: left;
     127}
     128
     129
     130@media (min-width: 768px) {
     131  #view {
     132    margin-left: 250px;
     133  }
     134
     135  #menu {
     136    visibility: visible;
     137    position: absolute;
     138    width: 250px;
     139    min-height: inherit;
     140    border-right: 1px solid #D3D3D3;
     141    z-index: 0;
     142  }
     143
     144  .navbar-header {
     145    width: 250px;
     146  }
     147}
     148.container-fluid .navbar-header {
     149  margin: 0;
     150  padding: 0;
     151}
     152
     153.navbar-nav {
     154  margin: 0;
     155  padding: 0;
     156}
     157
     158.navbar-right {
     159  float: right!important
     160}
     161
     162.navbar-nav>li>a {
     163  padding-top: 15px;
     164  padding-bottom: 15px;
     165}
     166
     167.navbar-content {
     168  padding-right: 15px;
     169}
     170
     171.navbar-nav > li {
     172  float: left;
    130173}
    131174
     
    140183.nav-sidebar {
    141184  font-size: 12px;
     185  padding-bottom: 30px;
    142186}
    143187
     
    279323}
    280324
     325.table-no-border>thead>tr>th,
     326.table-no-border>tbody>tr>th,
     327.table-no-border>tfoot>tr>th,
     328.table-no-border>thead>tr>td,
     329.table-no-border>tbody>tr>td,
     330.table-no-border>tfoot>tr>td,
     331.table-no-border>tbody,
     332.table-no-border>thead,
     333.table-no-border>tfoot{
     334  border-top: none !important;
     335  border-bottom: none !important;
     336}
     337
     338.table-auto-width {
     339  width: auto !important;
     340}
     341
     342.center-element {
     343  margin: 0 auto;
     344}
     345
     346.table-content {
     347  margin-bottom: 0;
     348}
    281349
    282350#top-navbar {
     
    311379
    312380.navbar-default .navbar-text {
     381  display: block;
    313382  color: #ffffff;
    314383  text-shadow: none !important;
    315 }
    316 
     384  margin: 0;
     385  padding: 15px;
     386}
     387
     388.navbar-nav {
     389  float:left;
     390  margin:0
     391}
     392
     393.navbar-nav>li {
     394  float:left
     395}
     396
     397.navbar-nav>li>a {
     398  padding-top:15px;
     399  padding-bottom:15px
     400}
     401
     402.navbar-toggle {
     403  border: none !important;
     404}
     405
     406.navbar-toggle:focus {
     407  background-color: transparent !important;
     408}
     409
     410.navbar-toggle:hover {
     411  background-color: #D3D3D3 !important;
     412}
     413
     414#menu .navbar-collapse {
     415  padding: 0;
     416  margin: 0;
     417}
    317418
    318419.default-view-container {
    319420  padding: 30px;
    320421}
     422
     423.panel-heading a:after {
     424    font-family:'Glyphicons Halflings';
     425    content:"\e114";
     426    float: right;
     427    color: grey;
     428}
     429.panel-heading a.collapsed:after {
     430    content:"\e080";
     431}
     432
     433.panel-heading a:focus, a:hover {
     434  text-decoration: none;
     435}
  • stable/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.cshtml

    r12546 r12563  
    88                <div class="panel-body">
    99                    <p>
    10                         Heuristic and Evolutionary Algorithms Laboratory (HEAL)<br />
     10                        <strong>Heuristic and Evolutionary Algorithms Laboratory (HEAL)</strong><br />
    1111                        School of Informatics, Communications and Media<br />
    1212                        University of Applied Sciences Upper Austria<br />
     
    2727                </div>
    2828                <div class="panel-body">
    29                     <p><strong>Support and Inquiries</strong>: ​<a href="mailto:#">support@heuristiclab.com</a></p>
    30                     <p><strong>Heuristic and Evolutionary Algorithms Laboratory (HEAL)</strong>: <a href="​http://heal.heuristiclab.com">​http://heal.heuristiclab.com</a></p>
     29                    <p><strong>Support and Inquiries</strong>: ​<a href="mailto:support@heuristiclab.com">support@heuristiclab.com</a></p>
     30                    <p><strong>Heuristic and Evolutionary Algorithms Laboratory (HEAL)</strong>: <a href="App/RedirectUrl?url=http://heal.heuristiclab.com">​http://heal.heuristiclab.com</a></p>
     31                    <p><strong>HeuristicLab development site</strong>: <a href="App/RedirectUrl?url=http://dev.heuristiclab.com">http://dev.heuristiclab.com</a></p>
    3132                    <p>
    32                         <strong>Head of HeuristicLab</strong>:<br />
     33                        <strong>Head of HeuristicLab</strong>: <br />
    3334                        FH-Prof. DI Dr. Stefan Wagner<br />
    34                         Phone: +43 50804 22030<br />
    35                         Fax: +43 50804 21599<br />
    36                         E-mail: <a href="mailto:#">stefan.wagner@heuristiclab.com</a><br />
     35                        <span class="glyphicon glyphicon-phone-alt"></span> +43 50804 22030<br />
     36                        <span class="glyphicon glyphicon-print"></span> +43 50804 21599<br />
     37                        <span class="glyphicon glyphicon-envelope"></span> <a href="mailto:stefan.wagner@heuristiclab.com">stefan.wagner@heuristiclab.com</a><br />
    3738                    </p>
    3839                </div>
     
    4546            <div class="panel panel-default">
    4647                <div class="panel-heading">
    47                     <h3 class="panel-title">Disclaimer of Liability and Endorsement</h3>
     48                    <h3 class="panel-title">Disclaimer</h3>
    4849                </div>
    4950                <div class="panel-body">
    50                     <p style="text-align:justify">HeuristicLab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details (http://www.gnu.org/licenses). All contents on the development homepage and wiki of the HeuristicLab have been compiled carefully. Still, the Heuristic and Evolutionary Algorithms Laboratory (HEAL) makes no guarantees of accuracy, completeness and timeliness of the information on this website. Therefore HEAL accepts no responsibility or liability for damages or losses resulting from the use of this website and/or the software.</p>
     51                    <p style="text-align: justify">HeuristicLab, Hive and HeuristicLab WebApp are distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details (<a href="App/RedirectUrl?url=http://www.gnu.org/licenses">http://www.gnu.org/licenses</a>). </p>
    5152                </div>
    5253            </div>
  • stable/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.js

    r12546 r12563  
    99
    1010    var menu = app.getMenu();
    11     var section = menu.getSection('Menü', -1);
     11    var section = menu.getSection('Menu', -1);
    1212    section.addEntry({
    1313        index: 10000,
  • stable/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/login/loginCtrl.js

    r12428 r12563  
    99                        $window.location.reload();
    1010                    } else {
    11                         $scope.result = "error logging in";
     11                        $scope.result = "Invalid username or password. Please try again.";
    1212                    }
    1313                });
  • stable/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/plugins/plugins.cshtml

    r12428 r12563  
    11<div class="default-view-container">
     2    <script type="text/ng-template" id="pluginsExceptionDialog">
     3        <div class="modal-header">
     4            <button type="button" ng-click="close()" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
     5            <h4 class="modal-title">Plugin {{pluginName}}</h4>
     6        </div>
     7        <div class="modal-body">
     8            {{exception}}
     9        </div>
     10    </script>
    211    <div class="row">
    312        <div class="col-lg-12">
     
    716                </div>
    817                <div class="panel-body">
    9                     <table class="table table-hover table-condensed">
     18                    <table class="table table-hover table-condensed" ts-wrapper>
    1019                        <thead>
    1120                            <tr>
    1221                                <th>#</th>
    13                                 <th>Name</th>
    14                                 <th>Assembly</th>
    15                                 <th>Last reload</th>
     22                                <th ts-criteria="Name">Name</th>
     23                                <th ts-criteria ="AssemblyName">Assembly</th>
     24                                <th ts-criteria="LastReload">Last reload</th>
     25                                <th>Status</th>
    1626                                <th></th>
    1727                            </tr>
    1828                        </thead>
    19                         <tr ng-repeat="plugin in plugins">
    20                             <td>{{$index + 1}}</td>
    21                             <td>{{plugin.Name}}</td>
    22                             <td>{{plugin.AssemblyName}}</td>
    23                             <td>{{plugin.LastReload}}</td>
    24                             <td>
    25                                 <a ng-href="" data-ng-click="reloadPlugin(plugin.Name)">Reload</a>
    26                             </td>
    27                         </tr>
     29                        <tbody>
     30                            <tr ng-repeat="plugin in plugins" ts-repeat>
     31                                <td>{{$index + 1}}</td>
     32                                <td>{{plugin.Name}}</td>
     33                                <td>{{plugin.AssemblyName}}</td>
     34                                <td>{{plugin.LastReload}}</td>
     35                                <td>
     36                                    <span ng-hide="plugin.Exception" class="glyphicon glyphicon glyphicon-ok" style="color: green"></span>
     37                                    <span ng-show="plugin.Exception" class="glyphicon glyphicon glyphicon-remove" style="color: darkred"
     38                                          ng-click="open(plugin.Name, plugin.Exception)"></span>
     39                                </td>
     40                                <td>
     41                                    <a ng-href="" data-ng-click="reloadPlugin(plugin.Name)">Reload</a>
     42                                </td>
     43                            </tr>
     44                        </tbody>
    2845                    </table>
    2946                </div>
  • stable/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/plugins/plugins.js

    r12428 r12563  
    22(function () {
    33    var plugin = appPluginsPlugin;
    4     plugin.dependencies = ['ngResource', 'ui.bootstrap'];
     4    plugin.dependencies = ['ngResource', 'ui.bootstrap', 'tableSort'];
    55    plugin.files = [
    66        'pluginsService.js',
    7         'pluginsCtrl.js'
     7        'pluginsCtrl.js',
     8        'pluginsExceptionCtrl.js'
    89    ];
    910    plugin.view = 'plugins.cshtml';
  • stable/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/plugins/pluginsCtrl.js

    r12428 r12563  
    22    var module = appPluginsPlugin.getAngularModule();
    33    module.controller('app.plugins.ctrl',
    4         ['$scope', 'app.plugins.service', function ($scope, pluginService) {
     4        ['$scope', '$modal', 'app.plugins.service', function ($scope, $modal, pluginService) {
    55            var getPlugins = function () {
    66                pluginService.getPlugins({}, function (plugins) {
     
    2222
    2323            $scope.reloadPlugin = function (name) {
    24                 pluginService.reloadPlugin({ name: name }, function() {
     24                pluginService.reloadPlugin({ name: name }, function () {
    2525                    getPlugins();
     26                });
     27            };
     28
     29            $scope.open = function (pluginName, exception) {
     30                $scope.pluginName = pluginName;
     31                $scope.exception = exception;
     32                $modal.open({
     33                    animation: true,
     34                    templateUrl: 'pluginsExceptionDialog',
     35                    controller: 'app.plugins.pluginsExceptionCtrl',
     36                    resolve: {
     37                        pluginName: function () {
     38                            return $scope.pluginName;
     39                        },
     40                        exception: function () {
     41                            return $scope.exception;
     42                        }
     43                    }
    2644                });
    2745            };
  • stable/HeuristicLab.Services.WebApp/3.3/WebApp/shared/directives/flot.js

    r12428 r12563  
    66            link: function (scope, element, attrs) {
    77                var chart = null, opts = scope[attrs.options];
     8                var div = null;
    89
    910                scope.$watchCollection(attrs.dataset, function (newData, oldData) {
    1011                    if (!chart) {
    11                         var div = element.append("<div>");
     12                        div = element.append("<div>");
    1213                        div.bind("plotselected", function (event, ranges) {
    1314                            $.each(chart.getXAxes(), function (_, axis) {
  • stable/HeuristicLab.Services.WebApp/3.3/WebApp/shared/layout/layout.cshtml

    r12428 r12563  
    1 @using HeuristicLab.Services.WebApp.Configs
     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@using HeuristicLab.Services.WebApp.Configs
    221<!DOCTYPE html>
    322<html lang="en" ng-app="app">
     
    1534    <![endif]-->
    1635    @Scripts.Render("~/Bundles/Vendors/js")
    17     @{
    18         BundleTable.EnableOptimizations = false;
     36    @foreach (var script in BundleConfig.GetWebAppScripts()) {
     37        <script src="@script"></script>
    1938    }
    20     @Scripts.Render("~/Bundles/WebApp/js")
    21     @{
    22         BundleTable.EnableOptimizations = true;
    23     }
     39
     40    @Scripts.Render("~/Bundles/WebApp/Shared")
    2441</head>
    25 <body>
    26     <div id="app">
    27         <header id="toolbar" class="navbar navbar-default navbar-static-top no-border no-padding-margin"
    28                 ng-controller="app.menu.ctrl">
    29             <nav>
    30                 <div class="container-fluid">
    31                     <div class="navbar-header">
    32                         <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#top-navbar">
     42<body ngcloak>
     43<div id="app">
     44    <header id="toolbar" class="navbar navbar-default navbar-static-top no-border no-padding-margin"
     45            ng-controller="app.menu.ctrl">
     46        <nav>
     47            <div class="container-fluid">
     48                <div class="navbar-header">
     49                    <div class="center-block">
     50                        <a class="navbar-brand" href="#">
     51                            <img src="~/WebApp/shared/images/HeuristicLab-Logo.png" style="float: left; height: 100%; margin-right: 5px;"/>
     52                            <span style="color: #f7921d">HeuristicLab</span>
     53                        </a>
     54                        <button class="navbar-toggle collapsed" type="button" data-toggle="collapse" data-target="#menu .navbar-collapse">
    3355                            <span class="sr-only">Toggle navigation</span>
    3456                            <span class="icon-bar"></span>
     
    3658                            <span class="icon-bar"></span>
    3759                        </button>
    38                         <a class="navbar-brand" href="#">
    39                             <img src="~/WebApp/shared/images/HeuristicLab-Logo.png" style="float: left; height: 100%; margin-left: 25px; margin-right: 5px;" />
    40                             Heuristic<span style="color: #f7921d">Lab</span>
    41                         </a>
    42                     </div>
    43 
    44                     <div class="collapse navbar-collapse" id="top-navbar">
    45                         <ul class="nav navbar-nav navbar-right">
    46                             @if (Request.IsAuthenticated) {
    47                                 <li>
    48                                     <p class="navbar-text">Hello @User.Identity.Name!</p>
    49                                 </li>
    50                                 <li>
    51                                     <a ng-href="" data-ng-click="logout()">Logout</a>
    52                                 </li>
    53                             } else {
    54                                 <li>
    55                                     <a ng-href="#/login">Login</a>
    56                                 </li>
    57                             }
    58                         </ul>
    5960                    </div>
    6061                </div>
    61             </nav>
    62         </header>
    6362
    64         <aside id="menu" ng-controller="app.menu.ctrl">
     63                <div class="navbar-content">
     64                    <ul class="nav navbar-nav navbar-right">
     65                        @if (Request.IsAuthenticated)
     66                        {
     67                            <li>
     68                                <span class="navbar-text">Hello @User.Identity.Name!</span>
     69                            </li>
     70                            <li>
     71                                <a ng-href="" data-ng-click="logout()">Logout</a>
     72                            </li>
     73                        }
     74                        else
     75                        {
     76                            <li>
     77                                <a ng-href="#/login" data-ng-click="hideMenu()">Login</a>
     78                            </li>
     79                        }
     80                    </ul>
     81                </div>
     82            </div>
     83        </nav>
     84    </header>
     85
     86    <aside id="menu" ng-controller="app.menu.ctrl">
     87        <div class="navbar-collapse collapse">
    6588            <ul class="nav nav-sidebar"
    6689                ng-include="'App/LoadSharedView?directory=menu&view=menu.cshtml&dateTime=@DateTime.Now'"
    6790                ng-init="entries = menuEntries;"></ul>
    68         </aside>
     91        </div>
     92    </aside>
    6993
    70         <section id="view">
    71             <ui-view/>
    72         </section>
    73     </div>
     94    <section id="view">
     95        <ui-view/>
     96    </section>
     97</div>
     98<script type="text/javascript">
     99$('.navbar-collapse').on('click', 'li a', function () {
     100    $('.navbar-collapse').collapse('hide');
     101});
     102</script>
    74103</body>
    75104</html>
  • stable/HeuristicLab.Services.WebApp/3.3/WebApp/shared/menu/menuCtrl.js

    r12428 r12563  
    77            $scope.menuEntries = app.getMenu().getMenuEntries();
    88            $scope.isActive = function (viewLocation) {
    9                 var loc = viewLocation.toUpperCase().substr(1);
    10                 var actualLocation = $location.path().toUpperCase();
    11                 var splitLoc = loc.split("/");
    12                 if (splitLoc.length <= 2) {
    13                     var actualLocationSplit = actualLocation.split("/");
    14                     if (actualLocationSplit.length > 1) {
    15                         if (splitLoc[1] == actualLocationSplit[1]) {
    16                             return true;
     9                var linkLocation = viewLocation.toUpperCase().substr(1);
     10                var currentLocation = $location.path().toUpperCase();
     11                if (linkLocation == currentLocation) {
     12                    return true;
     13                }
     14                var linkLocationParts = linkLocation.split("/");
     15                var currentLocationParts = currentLocation.split("/");
     16                var linkLocationPartsLength = linkLocationParts.length;
     17                if (linkLocationPartsLength < currentLocationParts.length) {
     18                    for (var i = 0; i < linkLocationPartsLength; ++i) {
     19                        if (linkLocationParts[i] !== currentLocationParts[i]) {
     20                            return false;
    1721                        }
    1822                    }
     23                    return true;
    1924                }
    20                 return $location.path().toUpperCase() == loc;
     25                return false;
    2126            };
    2227
    23             $scope.logout = function() {
    24                 authService.logout({}, function() {
     28            $scope.logout = function () {
     29                authService.logout({}, function () {
    2530                    $window.location.hash = "";
    2631                    $window.location.reload();
    2732                });
    2833            };
     34
     35            $scope.hideMenu = function () {
     36                $(".navbar-collapse").collapse('hide');
     37            };
    2938        }]
    3039    );
  • stable/HeuristicLab.Services.WebApp/3.3/packages.config

    r12430 r12563  
    11<?xml version="1.0" encoding="utf-8"?>
    22<packages>
    3   <package id="Antlr" version="3.4.1.9004" targetFramework="net45" />
     3  <package id="Antlr" version="3.5.0.2" targetFramework="net45" />
    44  <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" />
    55  <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net45" />
     
    1111  <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net45" />
    1212  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
    13   <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net45" />
    14   <package id="WebGrease" version="1.5.2" targetFramework="net45" />
     13  <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
     14  <package id="WebGrease" version="1.6.0" targetFramework="net45" />
    1515</packages>
Note: See TracChangeset for help on using the changeset viewer.