Changeset 12563
- Timestamp:
- 07/01/15 14:59:47 (8 years ago)
- Location:
- stable
- Files:
-
- 5 deleted
- 47 edited
- 7 copied
Legend:
- Unmodified
- Added
- Removed
-
stable
- Property svn:mergeinfo changed
/trunk/sources merged: 12146,12428-12430,12435,12442-12443,12445,12457,12514,12517,12519-12521,12523,12532,12542,12546,12552-12553,12556-12557,12559,12561 -
Property
svn:global-ignores
set to
*.nuget
packages
- Property svn:mergeinfo changed
-
stable/.nuget/NuGet.targets
r12532 r12563 14 14 15 15 <!-- Download NuGet.exe if it does not already exist --> 16 <DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' "> false</DownloadNuGetExe>16 <DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe> 17 17 </PropertyGroup> 18 18 -
stable/HeuristicLab 3.3 Services.sln
r11920 r12563 59 59 Project("{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}" 60 60 EndProject 61 Project("{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}" 62 EndProject 63 Project("{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}" 64 EndProject 65 Project("{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 71 EndProject 61 72 Global 62 73 GlobalSection(SolutionConfigurationPlatforms) = preSolution … … 71 82 {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 72 83 {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|Any CPU.Build.0 = Debug|Any CPU 73 {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|x64.ActiveCfg = Debug|x6474 {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|x64.Build.0 = Debug|x6475 {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|x86.ActiveCfg = Debug|x8676 {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Debug|x86.Build.0 = Debug|x8684 {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 77 88 {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Release|Any CPU.ActiveCfg = Release|Any CPU 78 89 {30D8C5F1-CD3A-4EC1-907F-430177A03FBE}.Release|Any CPU.Build.0 = Release|Any CPU … … 83 94 {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 84 95 {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|Any CPU.Build.0 = Debug|Any CPU 85 {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|x64.ActiveCfg = Debug|x6486 {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|x64.Build.0 = Debug|x6487 {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|x86.ActiveCfg = Debug|x8688 {EBEBA863-DD05-4331-BE25-5758B15F7407}.Debug|x86.Build.0 = Debug|x8696 {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 89 100 {EBEBA863-DD05-4331-BE25-5758B15F7407}.Release|Any CPU.ActiveCfg = Release|Any CPU 90 101 {EBEBA863-DD05-4331-BE25-5758B15F7407}.Release|Any CPU.Build.0 = Release|Any CPU … … 95 106 {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 96 107 {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|Any CPU.Build.0 = Debug|Any CPU 97 {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|x64.ActiveCfg = Debug|x6498 {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|x64.Build.0 = Debug|x6499 {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|x86.ActiveCfg = Debug|x86100 {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Debug|x86.Build.0 = Debug|x86108 {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 101 112 {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Release|Any CPU.ActiveCfg = Release|Any CPU 102 113 {421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Release|Any CPU.Build.0 = Release|Any CPU … … 107 118 {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 108 119 {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|Any CPU.Build.0 = Debug|Any CPU 109 {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x64.ActiveCfg = Debug|x64110 {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x64.Build.0 = Debug|x64111 {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x86.ActiveCfg = Debug|x86112 {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|x86.Build.0 = Debug|x86120 {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 113 124 {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Release|Any CPU.ActiveCfg = Release|Any CPU 114 125 {EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Release|Any CPU.Build.0 = Release|Any CPU … … 119 130 {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 120 131 {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|Any CPU.Build.0 = Debug|Any CPU 121 {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x64.ActiveCfg = Debug|x64122 {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x64.Build.0 = Debug|x64123 {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x86.ActiveCfg = Debug|x86124 {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Debug|x86.Build.0 = Debug|x86132 {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 125 136 {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Release|Any CPU.ActiveCfg = Release|Any CPU 126 137 {CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}.Release|Any CPU.Build.0 = Release|Any CPU … … 138 149 {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 139 150 {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|Any CPU.Build.0 = Debug|Any CPU 140 {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|x64.ActiveCfg = Debug|x64141 {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|x64.Build.0 = Debug|x64142 {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|x86.ActiveCfg = Debug|x86143 {F685556B-F6EB-4143-8E7E-662D00FDD299}.Debug|x86.Build.0 = Debug|x86151 {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 144 155 {F685556B-F6EB-4143-8E7E-662D00FDD299}.Release|Any CPU.ActiveCfg = Release|Any CPU 145 156 {F685556B-F6EB-4143-8E7E-662D00FDD299}.Release|Any CPU.Build.0 = Release|Any CPU … … 150 161 {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 151 162 {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|Any CPU.Build.0 = Debug|Any CPU 152 {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|x64.ActiveCfg = Debug|x64153 {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|x64.Build.0 = Debug|x64154 {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|x86.ActiveCfg = Debug|x86155 {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Debug|x86.Build.0 = Debug|x86163 {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 156 167 {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Release|Any CPU.ActiveCfg = Release|Any CPU 157 168 {BE9B0229-9150-49A4-AEA6-BB58E055992F}.Release|Any CPU.Build.0 = Release|Any CPU … … 162 173 {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 163 174 {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|Any CPU.Build.0 = Debug|Any CPU 164 {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|x64.ActiveCfg = Debug|x64165 {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|x64.Build.0 = Debug|x64166 {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|x86.ActiveCfg = Debug|x86167 {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|x86.Build.0 = Debug|x86175 {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 168 179 {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Release|Any CPU.ActiveCfg = Release|Any CPU 169 180 {0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Release|Any CPU.Build.0 = Release|Any CPU … … 174 185 {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 175 186 {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|Any CPU.Build.0 = Debug|Any CPU 176 {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|x64.ActiveCfg = Debug|x64177 {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|x64.Build.0 = Debug|x64178 {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|x86.ActiveCfg = Debug|x86179 {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|x86.Build.0 = Debug|x86187 {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 180 191 {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Release|Any CPU.ActiveCfg = Release|Any CPU 181 192 {9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Release|Any CPU.Build.0 = Release|Any CPU … … 186 197 {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 187 198 {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|Any CPU.Build.0 = Debug|Any CPU 188 {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x64.ActiveCfg = Debug|x64189 {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x64.Build.0 = Debug|x64190 {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x86.ActiveCfg = Debug|x86191 {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x86.Build.0 = Debug|x86199 {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 192 203 {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Release|Any CPU.ActiveCfg = Release|Any CPU 193 204 {E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Release|Any CPU.Build.0 = Release|Any CPU … … 198 209 {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 199 210 {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|Any CPU.Build.0 = Debug|Any CPU 200 {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x64.ActiveCfg = Debug|x64201 {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x64.Build.0 = Debug|x64202 {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x86.ActiveCfg = Debug|x86203 {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x86.Build.0 = Debug|x86211 {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 204 215 {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|Any CPU.ActiveCfg = Release|Any CPU 205 216 {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|Any CPU.Build.0 = Release|Any CPU … … 208 219 {766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|x86.ActiveCfg = Release|x86 209 220 {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 210 245 EndGlobalSection 211 246 GlobalSection(SolutionProperties) = preSolution -
stable/HeuristicLab.Services.Hive
- Property svn:mergeinfo changed
/trunk/sources/HeuristicLab.Services.Hive merged: 12146
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Services.Hive/3.3/HiveDao.cs
r12541 r12563 869 869 } 870 870 871 public Dictionary<Guid, int> GetWaitingTasksByUser() {872 using (var db = CreateContext()) {873 var waitingTasksByUser = from task in db.Tasks874 where task.State == TaskState.Waiting875 group task by task.Job.OwnerUserId into g876 select new { UserId = g.Key, UsedCores = g.Count() };877 return waitingTasksByUser.ToDictionary(x => x.UserId, x => x.UsedCores);878 }879 }880 881 871 public Dictionary<Guid, int> GetWaitingTasksByUserForResources(List<Guid> resourceIds) { 882 872 using (var db = CreateContext()) { … … 886 876 select new { UserId = g.Key, UsedCores = g.Count() }; 887 877 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.Tasks894 where task.State == TaskState.Calculating895 group task by task.Job.OwnerUserId into g896 select new { UserId = g.Key, UsedCores = g.Count() };897 return calculatingTasksByUser.ToDictionary(x => x.UserId, x => x.UsedCores);898 878 } 899 879 } -
stable/HeuristicLab.Services.Hive/3.3/Interfaces/IHiveDao.cs
r12009 r12563 150 150 151 151 #region Statistics Methods 152 Dictionary<Guid, int> GetWaitingTasksByUser();153 152 Dictionary<Guid, int> GetWaitingTasksByUserForResources(List<Guid> resourceIds); 154 Dictionary<Guid, int> GetCalculatingTasksByUser();155 153 Dictionary<Guid, int> GetCalculatingTasksByUserForResources(List<Guid> resourceIds); 156 154 DT.Statistics GetStatistic(Guid id); -
stable/HeuristicLab.Services.Hive/3.3/Interfaces/IOptimizedHiveDao.cs
r12009 r12563 65 65 IEnumerable<Guid> GetAssignedResourceIds(Guid jobId); 66 66 #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 67 79 } 68 80 } -
stable/HeuristicLab.Services.Hive/3.3/OptimizedHiveDao.cs
r12009 r12563 245 245 ); 246 246 #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 247 297 } 248 298 } -
stable/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj
r12428 r12563 73 73 </PropertyGroup> 74 74 <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> 78 78 </Reference> 79 79 <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 22 using System; 2 23 using System.Collections.Generic; 24 using System.Data.Linq; 3 25 using System.Linq; 4 26 using System.Web.Http; … … 25 47 FROM UserTasks ut;"; 26 48 27 28 49 private class UserTaskStatus { 29 50 public Guid UserId { get; set; } … … 41 62 CalculatingTasks = uts.CalculatingTasks, 42 63 WaitingTasks = uts.WaitingTasks 43 }) ;64 }).OrderBy(x => x.User.Name); 44 65 } 45 66 // end temporary quickfix … … 50 71 where slave.SlaveState == SlaveState.Calculating || slave.SlaveState == SlaveState.Idle 51 72 select slave).ToList(); 73 var activeSlaves = onlineSlaves.Where(s => s.IsAllowedToCalculate).ToList(); 74 var calculatingSlaves = activeSlaves.Where(s => s.SlaveState == SlaveState.Calculating).ToList(); 75 int calculatingMemory = calculatingSlaves.Any() ? (int)calculatingSlaves.Sum(s => s.Memory) : 0; 76 int freeCalculatingMemory = calculatingSlaves.Any() ? (int)calculatingSlaves.Sum(s => s.FreeMemory) : 0; 77 52 78 return new DTO.Status { 53 79 CoreStatus = new DTO.CoreStatus { 54 80 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) 57 84 }, 58 85 CpuUtilizationStatus = new DTO.CpuUtilizationStatus { … … 60 87 ? Math.Round(onlineSlaves.Average(s => s.CpuUtilization), 2) 61 88 : 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 65 95 }, 66 96 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 69 101 }, 70 102 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 { 73 104 Slave = new DTO.Slave { 74 105 Id = x.ResourceId.ToString(), 75 106 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), 78 116 Timestamp = JavascriptUtils.ToTimestamp(DateTime.Now) 79 117 }; … … 82 120 83 121 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 } 84 129 using (var db = new HiveDataContext()) { 130 DataLoadOptions loadOptions = new DataLoadOptions(); 131 loadOptions.LoadWith<Statistics>(o => o.SlaveStatistics); 132 db.LoadOptions = loadOptions; 133 db.DeferredLoadingEnabled = false; 85 134 var statistics = db.Statistics.Where(s => s.Timestamp >= start && s.Timestamp <= end) 86 .OrderBy( x => x.Timestamp)135 .OrderBy(s => s.Timestamp) 87 136 .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; 88 145 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 } 105 178 } 106 179 } -
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 22 namespace HeuristicLab.Services.WebApp.Status.WebApi.DataTransfer { 2 23 public class Slave { 3 24 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 22 using System.Collections.Generic; 2 23 3 24 namespace HeuristicLab.Services.WebApp.Status.WebApi.DataTransfer { … … 5 26 public class CoreStatus { 6 27 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; } 9 31 } 10 32 11 33 public class CpuUtilizationStatus { 12 34 public double TotalCpuUtilization { get; set; } 13 public double UsedCpuUtilization { get; set; } 35 public double ActiveCpuUtilization { get; set; } 36 public double CalculatingCpuUtilization { get; set; } 14 37 } 15 38 16 39 public class MemoryStatus { 17 40 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; } 19 44 } 20 45 … … 25 50 } 26 51 27 public class Slave CpuStatus {52 public class SlaveStatus { 28 53 public Slave Slave { get; set; } 29 54 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; } 30 61 } 31 62 … … 35 66 public MemoryStatus MemoryStatus { get; set; } 36 67 public IEnumerable<TaskStatus> TasksStatus { get; set; } 37 public IEnumerable<Slave CpuStatus> SlavesCpuStatus { get; set; }68 public IEnumerable<SlaveStatus> SlavesStatus { get; set; } 38 69 public long Timestamp { get; set; } 39 70 } -
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 2 22 namespace HeuristicLab.Services.WebApp.Status.WebApi.DataTransfer { 3 23 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 22 using System; 2 23 3 24 namespace HeuristicLab.Services.WebApp.Status.WebApi { … … 6 27 var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 7 28 var time = input.Subtract(new TimeSpan(epoch.Ticks)); 8 return (long)(time.Ticks / 10000);29 return time.Ticks / 10000; 9 30 } 10 31 } -
stable/HeuristicLab.Services.WebApp.Status/3.3/WebApp/history/history.cshtml
r12428 r12563 12 12 <div id="history-header"> 13 13 <form class="form-inline"> 14 <div class="form-group" >14 <div class="form-group" style="margin-left: 5px; margin-right: 5px;"> 15 15 <label for="fromDate">From: </label> 16 16 <div class="input-group"> … … 21 21 </div> 22 22 </div> 23 <div class="form-group" >24 <label for="fromDate"> To: </label>23 <div class="form-group" style="margin-left: 5px; margin-right: 5px;"> 24 <label for="fromDate">To: </label> 25 25 <div class="input-group"> 26 26 <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" /> … … 29 29 </span> 30 30 </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> 31 36 </div> 32 37 </form> -
stable/HeuristicLab.Services.WebApp.Status/3.3/WebApp/history/historyCtrl.js
r12428 r12563 4 4 ['$scope', '$interval', 'app.status.data.service', 5 5 function ($scope, $interval, dataService) { 6 7 6 $scope.chartOptions = { 8 7 grid: { … … 15 14 yaxis: { 16 15 min: 0, 17 max: 100, 18 zoomRange: false, 19 panRange: false 16 max: 100 20 17 }, 21 18 xaxis: { 22 19 mode: "time", 23 20 twelveHourClock: false 24 },25 zoom: {26 interactive: true27 },28 pan: {29 interactive: true30 21 } 31 22 }; … … 43 34 } 44 35 }, 45 yaxis: {46 zoomRange: false,47 panRange: false48 },49 36 xaxis: { 50 37 mode: "time", 51 38 twelveHourClock: false 52 },53 zoom: {54 interactive: true55 },56 pan: {57 interactive: true58 39 } 59 40 }; 41 60 42 61 43 $scope.fromDate = new Date(); … … 88 70 $scope.memorySeries = [[]]; 89 71 90 varupdateCharts = 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) { 92 74 var noOfStatus = status.length; 93 75 var cpuSeries = []; … … 96 78 for (var i = 0; i < noOfStatus; ++i) { 97 79 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); 101 81 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)]); 106 86 } 107 87 $scope.cpuSeries = [{ data: cpuSeries, label: " CPU Utilization", color: "#f7921d" }]; … … 117 97 }); 118 98 }; 119 120 $scope.$watch('fromDate', function (newValue, oldValue) { 121 updateCharts(); 122 }); 123 $scope.$watch('toDate', function (newValue, oldValue) { 124 updateCharts(); 125 }); 99 $scope.updateCharts(); 126 100 }] 127 101 ); -
stable/HeuristicLab.Services.WebApp.Status/3.3/WebApp/status/status.cshtml
r12428 r12563 11 11 12 12 <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"> 19 207 <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> 120 209 <thead> 121 210 <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> 125 215 </tr> 126 216 </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> 131 262 </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> 132 281 </table> 133 282 </div> … … 135 284 </div> 136 285 </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"> 144 301 <div class="panel-body"> 145 <table class="table table-hover" >302 <table class="table table-hover" ts-wrapper> 146 303 <thead> 147 304 <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> 150 309 </tr> 151 310 </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> 156 325 </table> 157 326 </div> … … 160 329 </div> 161 330 </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 53 53 mode: "time", 54 54 twelveHourClock: false 55 }, 56 yaxis: { 57 min: 0 55 58 } 56 59 }; … … 85 88 // update status data 86 89 dataService.getStatus({}, function (status) { 90 var oneDayInMs = 24 * 60 * 60 * 1000; 91 var today = new Date().getTime() - oneDayInMs; 87 92 // raw status data 88 93 $scope.status = status; … … 96 101 } 97 102 // 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); 103 106 // chart series 104 107 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 } 107 126 } 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 123 134 coreSeries[0].push([$scope.status.Timestamp, status.CoreStatus.TotalCores]); 124 135 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)]); 127 138 $scope.cpu.series = [{ data: cpuSeries, label: " CPU Utilization", color: "#f7921d" }]; 128 139 $scope.core.series = [ … … 145 156 var noOfStatus = status.length; 146 157 var cpuSeries = []; 147 var coreSeries = [[], []];148 var memorySeries = [[], []];158 var coreSeries = [[], []]; 159 var memorySeries = [[], []]; 149 160 for (var i = 0; i < noOfStatus; ++i) { 150 161 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); 154 163 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)]); 159 168 } 160 169 $scope.cpu.series = [{ data: cpuSeries, label: " CPU Utilization", color: "#f7921d" }]; -
stable/HeuristicLab.Services.WebApp.Status/3.3/packages.config
r12429 r12563 5 5 <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" /> 6 6 <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" /> 8 8 </packages> -
stable/HeuristicLab.Services.WebApp.Status/3.3/status.js
r12428 r12563 2 2 (function () { 3 3 var plugin = appStatusPlugin; 4 plugin.dependencies = ['ngResource', 'ui.knob', 'ui.bootstrap' ];4 plugin.dependencies = ['ngResource', 'ui.knob', 'ui.bootstrap', 'tableSort']; 5 5 plugin.files = [ 6 6 'WebApp/status.css', … … 15 15 ]; 16 16 var menu = app.getMenu(); 17 var section = menu.getSection('Men ü', 1);17 var section = menu.getSection('Menu', 1); 18 18 section.addEntry({ 19 19 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 22 using System.Collections.Generic; 2 23 using System.IO; 3 using System.Linq;4 using System.Web;5 24 using System.Web.Optimization; 6 25 7 26 namespace HeuristicLab.Services.WebApp.Configs { 8 27 public class BundleConfig { 28 9 29 public static void RegisterBundles(BundleCollection bundles) { 10 30 bundles.IgnoreList.Clear(); … … 21 41 "~/WebApp/libs/bootstrap/css/bootstrap-theme.min.css", 22 42 "~/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" 24 45 )); 25 46 … … 50 71 "~/WebApp/libs/angularjs/angular-ui-router.min.js", 51 72 "~/WebApp/libs/angularjs/angular-knob/angular-knob.js", 73 "~/WebApp/libs/angularjs/angular-tablesort/angular-tablesort.js", 52 74 "~/WebApp/libs/angularjs/angular-ui/ui-bootstrap-tpls-0.13.0.min.js", 53 75 "~/WebApp/libs/angularjs/loading-bar/loading-bar.js", … … 61 83 "~/WebApp/app.css" 62 84 )); 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 ); 64 96 } 65 97 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 } 70 108 } 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; 82 111 } 83 112 } -
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 22 using System.Web.Mvc; 2 23 3 24 namespace 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 22 using System.Web.Mvc; 2 23 using System.Web.Routing; 3 24 -
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 2 22 using System.Net.Http.Formatting; 3 23 using System.Web.Http; -
stable/HeuristicLab.Services.WebApp/3.3/Controllers/AppController.cs
r12428 r12563 21 21 22 22 using System.Web.Mvc; 23 using HeuristicLab.Services.WebApp.Configs;24 23 25 24 namespace HeuristicLab.Services.WebApp.Controllers { … … 31 30 return RedirectPermanent(Request.Url + "/"); 32 31 } 33 BundleConfig.AddOrUpdateWebAppBundle();34 32 return View("~/WebApp/shared/layout/layout.cshtml"); 35 33 } … … 49 47 } 50 48 49 public ActionResult RedirectUrl(string url) { 50 return RedirectPermanent(url); 51 } 51 52 } 52 53 } -
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 22 using System.Web.Http; 2 23 using System.Web.Security; 3 24 using 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 22 using System; 2 23 3 24 namespace HeuristicLab.Services.WebApp.Controllers.DataTransfer { … … 7 28 public DateTime? LastReload { get; set; } 8 29 public int Reloads { get; set; } 30 public string Exception { get; set; } 9 31 } 10 32 } -
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 22 namespace HeuristicLab.Services.WebApp.Controllers.DataTransfer { 2 23 public class User { 3 24 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 22 using System.Collections.Generic; 2 23 using System.Linq; 3 24 using System.Web.Http; 25 using HeuristicLab.Services.Hive; 4 26 using DTO = HeuristicLab.Services.WebApp.Controllers.DataTransfer; 5 27 6 28 namespace HeuristicLab.Services.WebApp.Controllers { 7 29 8 [Authorize(Roles = "Hive Administrator")]30 [Authorize(Roles = HiveRoles.Administrator)] 9 31 public class PluginController : ApiController { 10 32 … … 12 34 13 35 public IEnumerable<DTO.Plugin> GetPlugins() { 14 var plugins = pluginManager. GetPlugins();36 var plugins = pluginManager.Plugins; 15 37 return plugins.Select(plugin => new DTO.Plugin { 16 38 Name = plugin.Name, 17 39 AssemblyName = plugin.AssemblyName, 18 LastReload = plugin.LastReload 40 LastReload = plugin.LastReload, 41 Exception = plugin.Exception 19 42 }); 20 43 } 21 44 22 45 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; 24 49 plugin.ReloadControllers(); 25 50 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 22 using System; 2 23 using System.Collections.Concurrent; 3 24 using System.Collections.Generic; … … 18 39 : base(configuration) { 19 40 this.configuration = configuration; 20 pluginManager.Configuration = configuration;21 41 controllers = new ConcurrentDictionary<string, HttpControllerDescriptor>(); 22 42 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 22 using System.Web.Http; 2 23 using System.Web.Mvc; 3 24 using System.Web.Optimization; … … 6 27 7 28 namespace HeuristicLab.Services.WebApp { 8 public class MvcApplication: System.Web.HttpApplication {29 public class HeuristicLabWebApp : System.Web.HttpApplication { 9 30 protected void Application_Start() { 31 var pluginManager = PluginManager.Instance; 32 pluginManager.Configuration = GlobalConfiguration.Configuration; 33 pluginManager.DiscoverPlugins(); 10 34 AreaRegistration.RegisterAllAreas(); 11 35 GlobalConfiguration.Configure(WebApiConfig.Register); -
stable/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj
r12428 r12563 23 23 <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> 24 24 <RestorePackages>true</RestorePackages> 25 <WebGreaseLibPath>..\..\packages\WebGrease.1.5.2\lib</WebGreaseLibPath>26 25 </PropertyGroup> 27 26 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> … … 44 43 </PropertyGroup> 45 44 <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> 49 48 </Reference> 50 49 <Reference Include="Microsoft.CSharp" /> … … 53 52 <Private>True</Private> 54 53 </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> 58 57 </Reference> 59 58 <Reference Include="System" /> … … 119 118 <Reference Include="System.Net.Http.WebRequest"> 120 119 </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> 124 123 </Reference> 125 124 </ItemGroup> … … 145 144 <Content Include="WebApp\app.css" /> 146 145 <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" /> 147 148 <Content Include="WebApp\main.js" /> 148 149 <Content Include="WebApp\helper.js" /> … … 169 170 <Content Include="WebApp\libs\smoothScroll\smoothScroll.js" /> 170 171 <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" /> 186 180 <Content Include="WebApp\plugins\plugins\pluginsService.js" /> 187 181 <Content Include="WebApp\shared\directives\flot.js" /> … … 225 219 <Content Include="WebApp\libs\bootstrap\fonts\glyphicons-halflings-regular.woff" /> 226 220 <Content Include="WebApp\libs\bootstrap\fonts\glyphicons-halflings-regular.woff2" /> 221 <Content Include="WebApp\shared\filter\filters.js" /> 227 222 <Content Include="WebApp\shared\images\HeuristicLab-Logo.png" /> 228 223 <Content Include="WebApp\shared\layout\layout.cshtml" /> … … 232 227 <Content Include="WebApp\shared\menu\menu.cshtml" /> 233 228 <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" /> 243 232 </ItemGroup> 244 233 <ItemGroup> … … 258 247 <Name>HeuristicLab.Services.Hive-3.3</Name> 259 248 </ProjectReference> 249 </ItemGroup> 250 <ItemGroup> 251 <Content Include="WebApp\plugins\about\about.cshtml" /> 260 252 </ItemGroup> 261 253 <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 22 using System; 2 23 using System.Collections.Concurrent; 3 24 using System.Collections.Generic; … … 5 26 using System.Linq; 6 27 using System.Reflection; 7 using System.Text;8 28 using System.Web.Http; 9 29 using System.Web.Http.Controllers; … … 11 31 namespace HeuristicLab.Services.WebApp { 12 32 public class Plugin { 13 private HttpConfiguration configuration;14 33 public string Name { get; set; } 15 34 public string Directory { get; set; } 16 35 public string AssemblyName { get; set; } 36 public string Exception { get; set; } 17 37 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 } 18 49 19 50 private IDictionary<string, HttpControllerDescriptor> controllers; … … 22 53 } 23 54 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; 29 59 } 30 60 … … 37 67 public void ReloadControllers() { 38 68 AssemblyName = null; 69 Exception = null; 39 70 Controllers.Clear(); 40 71 LastReload = DateTime.Now; … … 47 78 return; 48 79 var assemblyPath = assemblies.First(); 80 AssemblyName = Path.GetFileName(assemblyPath); 49 81 var assembly = Assembly.Load(File.ReadAllBytes(assemblyPath)); 50 82 var assemblyTypes = assembly.GetTypes(); … … 54 86 Controllers.Add(controllerName, new HttpControllerDescriptor(configuration, controllerName, apiController)); 55 87 } 56 AssemblyName = Path.GetFileName(assemblyPath);57 88 } 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(); 72 91 Controllers.Clear(); 73 92 } -
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 22 using System.Collections.Concurrent; 2 23 using System.Collections.Generic; 3 24 using System.IO; … … 17 38 public HttpConfiguration Configuration { get; set; } 18 39 19 private string PluginsDirectory { 40 public IEnumerable<Plugin> Plugins { 41 get { return plugins.Values; } 42 } 43 44 public static string PluginsDirectory { 20 45 get { return string.Format(@"{0}WebApp\plugins", HttpRuntime.AppDomainAppPath); } 21 46 } … … 23 48 public PluginManager() { 24 49 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 } 25 91 } 26 92 27 93 public Plugin GetPlugin(string name) { 28 Plugin plugin; 29 plugins.TryGetValue(name, out plugin); 94 Plugin plugin = LookupPlugin(name); 30 95 if (plugin == null) { 31 96 string directory = string.Format(@"{0}\{1}", PluginsDirectory, name); 32 97 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); 38 99 plugins.Add(name, plugin); 39 100 } … … 43 104 44 105 public IEnumerable<Plugin> GetPlugins() { 45 DiscoverPlugins();46 106 return plugins.Values; 47 107 } 48 108 49 p rivatevoid DiscoverPlugins() {109 public void DiscoverPlugins() { 50 110 var pluginDirectories = Directory.GetDirectories(PluginsDirectory); 51 111 foreach (var directory in pluginDirectories) { 52 112 string pluginName = Path.GetFileName(directory); 53 Plugin plugin; 54 plugins.TryGetValue(pluginName, out plugin); 113 Plugin plugin = LookupPlugin(pluginName); 55 114 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); 61 116 plugins.Add(pluginName, plugin); 62 117 } 63 118 } 64 119 } 120 121 private Plugin LookupPlugin(string name) { 122 Plugin plugin; 123 plugins.TryGetValue(name, out plugin); 124 return plugin; 125 } 65 126 } 66 127 } -
stable/HeuristicLab.Services.WebApp/3.3/Web.config
r12428 r12563 31 31 </providers> 32 32 </roleManager> 33 <compilation debug=" true" targetFramework="4.5" />33 <compilation debug="false" targetFramework="4.5" /> 34 34 <httpRuntime targetFramework="4.5" /> 35 35 </system.web> … … 59 59 <dependentAssembly> 60 60 <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" /> 62 62 </dependentAssembly> 63 63 <dependentAssembly> … … 67 67 <dependentAssembly> 68 68 <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" /> 70 70 </dependentAssembly> 71 71 <dependentAssembly> … … 81 81 <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" /> 82 82 </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> 83 87 </assemblyBinding> 84 88 </runtime> -
stable/HeuristicLab.Services.WebApp/3.3/WebApp/app.css
r12428 r12563 3 3 -moz-border-radius: 0 !important; 4 4 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;*/9 5 font-family: "Open Sans", Helvetica, Arial, sans-serif; 10 6 } … … 79 75 80 76 #menu { 81 position: absolute; 82 min-height: inherit; 83 width: 250px; 77 position: relative; 84 78 background: #FAFAFA; 85 79 display: block; 86 80 overflow: hidden; 87 border-right: 1px solid #D3D3D3; 81 z-index: 10000; 82 width: 100%; 88 83 } 89 84 … … 101 96 #view { 102 97 position: relative; 103 left: 0 px;104 margin-left: 250px;98 left: 0; 99 margin-left: 0px; 105 100 display: block; 106 101 overflow: hidden; 107 102 } 103 108 104 109 105 .view-header { … … 124 120 } 125 121 126 .navbar-header {127 width: 250px;122 .navbar-header { 123 width: 100%; 128 124 background: #3c3a39; 129 125 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; 130 173 } 131 174 … … 140 183 .nav-sidebar { 141 184 font-size: 12px; 185 padding-bottom: 30px; 142 186 } 143 187 … … 279 323 } 280 324 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 } 281 349 282 350 #top-navbar { … … 311 379 312 380 .navbar-default .navbar-text { 381 display: block; 313 382 color: #ffffff; 314 383 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 } 317 418 318 419 .default-view-container { 319 420 padding: 30px; 320 421 } 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 8 8 <div class="panel-body"> 9 9 <p> 10 Heuristic and Evolutionary Algorithms Laboratory (HEAL)<br />10 <strong>Heuristic and Evolutionary Algorithms Laboratory (HEAL)</strong><br /> 11 11 School of Informatics, Communications and Media<br /> 12 12 University of Applied Sciences Upper Austria<br /> … … 27 27 </div> 28 28 <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> 31 32 <p> 32 <strong>Head of HeuristicLab</strong>: <br />33 <strong>Head of HeuristicLab</strong>: <br /> 33 34 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 /> 37 38 </p> 38 39 </div> … … 45 46 <div class="panel panel-default"> 46 47 <div class="panel-heading"> 47 <h3 class="panel-title">Disclaimer of Liability and Endorsement</h3>48 <h3 class="panel-title">Disclaimer</h3> 48 49 </div> 49 50 <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> 51 52 </div> 52 53 </div> -
stable/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/about/about.js
r12546 r12563 9 9 10 10 var menu = app.getMenu(); 11 var section = menu.getSection('Men ü', -1);11 var section = menu.getSection('Menu', -1); 12 12 section.addEntry({ 13 13 index: 10000, -
stable/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/login/loginCtrl.js
r12428 r12563 9 9 $window.location.reload(); 10 10 } else { 11 $scope.result = " error logging in";11 $scope.result = "Invalid username or password. Please try again."; 12 12 } 13 13 }); -
stable/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/plugins/plugins.cshtml
r12428 r12563 1 1 <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">×</span></button> 5 <h4 class="modal-title">Plugin {{pluginName}}</h4> 6 </div> 7 <div class="modal-body"> 8 {{exception}} 9 </div> 10 </script> 2 11 <div class="row"> 3 12 <div class="col-lg-12"> … … 7 16 </div> 8 17 <div class="panel-body"> 9 <table class="table table-hover table-condensed" >18 <table class="table table-hover table-condensed" ts-wrapper> 10 19 <thead> 11 20 <tr> 12 21 <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> 16 26 <th></th> 17 27 </tr> 18 28 </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> 28 45 </table> 29 46 </div> -
stable/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/plugins/plugins.js
r12428 r12563 2 2 (function () { 3 3 var plugin = appPluginsPlugin; 4 plugin.dependencies = ['ngResource', 'ui.bootstrap' ];4 plugin.dependencies = ['ngResource', 'ui.bootstrap', 'tableSort']; 5 5 plugin.files = [ 6 6 'pluginsService.js', 7 'pluginsCtrl.js' 7 'pluginsCtrl.js', 8 'pluginsExceptionCtrl.js' 8 9 ]; 9 10 plugin.view = 'plugins.cshtml'; -
stable/HeuristicLab.Services.WebApp/3.3/WebApp/plugins/plugins/pluginsCtrl.js
r12428 r12563 2 2 var module = appPluginsPlugin.getAngularModule(); 3 3 module.controller('app.plugins.ctrl', 4 ['$scope', ' app.plugins.service', function ($scope, pluginService) {4 ['$scope', '$modal', 'app.plugins.service', function ($scope, $modal, pluginService) { 5 5 var getPlugins = function () { 6 6 pluginService.getPlugins({}, function (plugins) { … … 22 22 23 23 $scope.reloadPlugin = function (name) { 24 pluginService.reloadPlugin({ name: name }, function () {24 pluginService.reloadPlugin({ name: name }, function () { 25 25 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 } 26 44 }); 27 45 }; -
stable/HeuristicLab.Services.WebApp/3.3/WebApp/shared/directives/flot.js
r12428 r12563 6 6 link: function (scope, element, attrs) { 7 7 var chart = null, opts = scope[attrs.options]; 8 var div = null; 8 9 9 10 scope.$watchCollection(attrs.dataset, function (newData, oldData) { 10 11 if (!chart) { 11 vardiv = element.append("<div>");12 div = element.append("<div>"); 12 13 div.bind("plotselected", function (event, ranges) { 13 14 $.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 2 21 <!DOCTYPE html> 3 22 <html lang="en" ng-app="app"> … … 15 34 <![endif]--> 16 35 @Scripts.Render("~/Bundles/Vendors/js") 17 @ {18 BundleTable.EnableOptimizations = false;36 @foreach (var script in BundleConfig.GetWebAppScripts()) { 37 <script src="@script"></script> 19 38 } 20 @Scripts.Render("~/Bundles/WebApp/js") 21 @{ 22 BundleTable.EnableOptimizations = true; 23 } 39 40 @Scripts.Render("~/Bundles/WebApp/Shared") 24 41 </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"> 33 55 <span class="sr-only">Toggle navigation</span> 34 56 <span class="icon-bar"></span> … … 36 58 <span class="icon-bar"></span> 37 59 </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>59 60 </div> 60 61 </div> 61 </nav>62 </header>63 62 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"> 65 88 <ul class="nav nav-sidebar" 66 89 ng-include="'App/LoadSharedView?directory=menu&view=menu.cshtml&dateTime=@DateTime.Now'" 67 90 ng-init="entries = menuEntries;"></ul> 68 </aside> 91 </div> 92 </aside> 69 93 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> 74 103 </body> 75 104 </html> -
stable/HeuristicLab.Services.WebApp/3.3/WebApp/shared/menu/menuCtrl.js
r12428 r12563 7 7 $scope.menuEntries = app.getMenu().getMenuEntries(); 8 8 $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; 17 21 } 18 22 } 23 return true; 19 24 } 20 return $location.path().toUpperCase() == loc;25 return false; 21 26 }; 22 27 23 $scope.logout = function () {24 authService.logout({}, function () {28 $scope.logout = function () { 29 authService.logout({}, function () { 25 30 $window.location.hash = ""; 26 31 $window.location.reload(); 27 32 }); 28 33 }; 34 35 $scope.hideMenu = function () { 36 $(".navbar-collapse").collapse('hide'); 37 }; 29 38 }] 30 39 ); -
stable/HeuristicLab.Services.WebApp/3.3/packages.config
r12430 r12563 1 1 <?xml version="1.0" encoding="utf-8"?> 2 2 <packages> 3 <package id="Antlr" version="3. 4.1.9004" targetFramework="net45" />3 <package id="Antlr" version="3.5.0.2" targetFramework="net45" /> 4 4 <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" /> 5 5 <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net45" /> … … 11 11 <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net45" /> 12 12 <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" /> 15 15 </packages>
Note: See TracChangeset
for help on using the changeset viewer.