[5028] | 1 | using System;
|
---|
| 2 | using System.Collections.Generic;
|
---|
| 3 | using System.Linq;
|
---|
| 4 | using System.ServiceModel;
|
---|
[5375] | 5 | using HeuristicLab.Services.Hive.Common;
|
---|
| 6 | using HeuristicLab.Services.Hive.Common.DataTransfer;
|
---|
[5028] | 7 | using HeuristicLab.Services.Hive.Common.ServiceContracts;
|
---|
| 8 |
|
---|
| 9 | namespace HeuristicLab.Services.Hive {
|
---|
| 10 |
|
---|
| 11 | /// <summary>
|
---|
| 12 | /// Implementation of the Hive service (interface <see cref="IHiveService"/>).
|
---|
| 13 | /// </summary>
|
---|
[5106] | 14 | [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
|
---|
[5028] | 15 | public class HiveService : IHiveService {
|
---|
| 16 | private DataAccess.IHiveDao dao {
|
---|
| 17 | get { return ServiceLocator.Instance.HiveDao; }
|
---|
| 18 | }
|
---|
| 19 | private HeuristicLab.Services.Hive.DataAccess.TransactionManager trans {
|
---|
| 20 | get { return ServiceLocator.Instance.TransactionManager; }
|
---|
| 21 | }
|
---|
| 22 | private IAuthorizationManager auth {
|
---|
| 23 | get { return ServiceLocator.Instance.AuthorizationManager; }
|
---|
| 24 | }
|
---|
[5095] | 25 | private ILifecycleManager lifecycleManager {
|
---|
| 26 | get { return ServiceLocator.Instance.LifecycleManager; }
|
---|
[5028] | 27 | }
|
---|
[5405] | 28 | private HeartbeatManager heartbeatManager {
|
---|
| 29 | get { return ServiceLocator.Instance.HeartbeatManager; }
|
---|
| 30 | }
|
---|
[5028] | 31 |
|
---|
| 32 | #region Job Methods
|
---|
[5526] | 33 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 34 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5511] | 35 | public Guid AddJob(Job job, JobData jobData, IEnumerable<Guid> resourceIds) {
|
---|
[5028] | 36 | using (trans.OpenTransaction()) {
|
---|
[5511] | 37 | job.SetState(JobState.Waiting, auth.UserId);
|
---|
[5155] | 38 | job.Id = dao.AddJob(job);
|
---|
| 39 | jobData.JobId = job.Id;
|
---|
[5106] | 40 | jobData.LastUpdate = DateTime.Now;
|
---|
[5511] | 41 | if (resourceIds != null) {
|
---|
| 42 | foreach (Guid slaveGroupId in resourceIds) {
|
---|
[5155] | 43 | dao.AssignJobToResource(job.Id, slaveGroupId);
|
---|
| 44 | }
|
---|
| 45 | } else {
|
---|
| 46 | // todo: use default group
|
---|
| 47 | }
|
---|
[5028] | 48 | dao.AddJobData(jobData);
|
---|
| 49 | return jobData.JobId;
|
---|
| 50 | }
|
---|
| 51 | }
|
---|
| 52 |
|
---|
[5526] | 53 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 54 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5028] | 55 | public Guid AddChildJob(Guid parentJobId, Job job, JobData jobData) {
|
---|
| 56 | using (trans.OpenTransaction()) {
|
---|
| 57 | job.ParentJobId = parentJobId;
|
---|
[5155] | 58 | return AddJob(job, jobData, dao.GetAssignedResources(parentJobId).Select(x => x.Id));
|
---|
[5028] | 59 | }
|
---|
| 60 | }
|
---|
| 61 |
|
---|
[5526] | 62 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 63 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
| 64 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
|
---|
[5028] | 65 | public Job GetJob(Guid jobId) {
|
---|
| 66 | return dao.GetJob(jobId);
|
---|
| 67 | }
|
---|
| 68 |
|
---|
[5526] | 69 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 70 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5028] | 71 | public IEnumerable<Job> GetJobs() {
|
---|
| 72 | return dao.GetJobs(x => true);
|
---|
| 73 | }
|
---|
| 74 |
|
---|
[5526] | 75 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 76 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5028] | 77 | public IEnumerable<LightweightJob> GetLightweightJobs(IEnumerable<Guid> jobIds) {
|
---|
| 78 | return dao.GetJobs(x => jobIds.Contains(x.JobId)).Select(x => new LightweightJob(x)).ToArray();
|
---|
| 79 | }
|
---|
| 80 |
|
---|
[5526] | 81 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 82 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5028] | 83 | public IEnumerable<LightweightJob> GetLightweightChildJobs(Guid? parentJobId, bool recursive, bool includeParent) {
|
---|
| 84 | return GetChildJobs(parentJobId, recursive, includeParent).Select(x => new LightweightJob(x)).ToArray();
|
---|
| 85 | }
|
---|
| 86 |
|
---|
[5526] | 87 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 88 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
| 89 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
|
---|
[5028] | 90 | public JobData GetJobData(Guid jobId) {
|
---|
| 91 | return dao.GetJobData(jobId);
|
---|
| 92 | }
|
---|
| 93 |
|
---|
[5526] | 94 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 95 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
| 96 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
|
---|
[5511] | 97 | public void UpdateJob(Job job) {
|
---|
[5028] | 98 | using (trans.OpenTransaction()) {
|
---|
[5511] | 99 | dao.UpdateJob(job);
|
---|
| 100 | }
|
---|
| 101 | }
|
---|
| 102 |
|
---|
[5526] | 103 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 104 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
| 105 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
|
---|
[5511] | 106 | public void UpdateJobData(Job job, JobData jobData) {
|
---|
| 107 | using (trans.OpenTransaction()) {
|
---|
[5106] | 108 | jobData.LastUpdate = DateTime.Now;
|
---|
| 109 | dao.UpdateJob(job);
|
---|
| 110 | dao.UpdateJobData(jobData);
|
---|
[5028] | 111 | }
|
---|
| 112 | }
|
---|
| 113 |
|
---|
[5526] | 114 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 115 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
| 116 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
|
---|
[5106] | 117 | public void DeleteJob(Guid jobId) {
|
---|
[5028] | 118 | using (trans.OpenTransaction()) {
|
---|
[5106] | 119 | dao.DeleteJob(jobId);
|
---|
[5028] | 120 | }
|
---|
| 121 | }
|
---|
| 122 |
|
---|
[5526] | 123 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 124 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
| 125 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
|
---|
[5106] | 126 | public void DeleteChildJobs(Guid parentJobId) {
|
---|
[5028] | 127 | using (trans.OpenTransaction()) {
|
---|
[5106] | 128 | var jobs = GetChildJobs(parentJobId, true, false);
|
---|
[5028] | 129 | foreach (var job in jobs) {
|
---|
| 130 | dao.DeleteJob(job.Id);
|
---|
| 131 | dao.DeleteJobData(job.Id);
|
---|
| 132 | };
|
---|
| 133 | }
|
---|
| 134 | }
|
---|
[5102] | 135 |
|
---|
[5028] | 136 | #endregion
|
---|
| 137 |
|
---|
| 138 | #region Job Control Methods
|
---|
[5526] | 139 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 140 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
| 141 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
|
---|
[5053] | 142 | public void StopJob(Guid jobId) {
|
---|
[5028] | 143 | using (trans.OpenTransaction()) {
|
---|
| 144 | throw new NotImplementedException();
|
---|
| 145 | }
|
---|
| 146 | }
|
---|
[5526] | 147 |
|
---|
| 148 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 149 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
| 150 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
|
---|
[5062] | 151 | public void PauseJob(Guid jobId) {
|
---|
[5028] | 152 | using (trans.OpenTransaction()) {
|
---|
| 153 | throw new NotImplementedException();
|
---|
| 154 | }
|
---|
| 155 | }
|
---|
| 156 | #endregion
|
---|
| 157 |
|
---|
| 158 | #region HiveExperiment Methods
|
---|
[5526] | 159 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 160 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5028] | 161 | public HiveExperiment GetHiveExperiment(Guid id) {
|
---|
[5511] | 162 | return dao.GetHiveExperiments(x =>
|
---|
| 163 | x.HiveExperimentId == id
|
---|
| 164 | && (x.OwnerUserId == auth.UserId || x.HiveExperimentPermissions.Count(hep => hep.Permission != Permission.NotAllowed && hep.GrantedUserId == auth.UserId) > 0)
|
---|
| 165 | ).FirstOrDefault();
|
---|
[5028] | 166 | }
|
---|
| 167 |
|
---|
[5526] | 168 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 169 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5028] | 170 | public IEnumerable<HiveExperiment> GetHiveExperiments() {
|
---|
[5511] | 171 | return dao.GetHiveExperiments(x => x.OwnerUserId == auth.UserId || x.HiveExperimentPermissions.Count(hep => hep.Permission != Permission.NotAllowed && hep.GrantedUserId == auth.UserId) > 0);
|
---|
[5028] | 172 | }
|
---|
| 173 |
|
---|
[5526] | 174 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 175 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5028] | 176 | public Guid AddHiveExperiment(HiveExperiment hiveExperimentDto) {
|
---|
| 177 | using (trans.OpenTransaction()) {
|
---|
[5511] | 178 | hiveExperimentDto.OwnerUserId = auth.UserId;
|
---|
[5106] | 179 | hiveExperimentDto.DateCreated = DateTime.Now;
|
---|
[5028] | 180 | return dao.AddHiveExperiment(hiveExperimentDto);
|
---|
| 181 | }
|
---|
| 182 | }
|
---|
| 183 |
|
---|
[5526] | 184 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 185 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5028] | 186 | public void UpdateHiveExperiment(HiveExperiment hiveExperimentDto) {
|
---|
| 187 | using (trans.OpenTransaction()) {
|
---|
| 188 | dao.UpdateHiveExperiment(hiveExperimentDto);
|
---|
| 189 | }
|
---|
| 190 | }
|
---|
| 191 |
|
---|
[5526] | 192 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 193 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5028] | 194 | public void DeleteHiveExperiment(Guid hiveExperimentId) {
|
---|
| 195 | using (trans.OpenTransaction()) {
|
---|
| 196 | HiveExperiment he = dao.GetHiveExperiment(hiveExperimentId);
|
---|
[5106] | 197 | dao.DeleteHiveExperiment(hiveExperimentId); // child jobs will be deleted by db-trigger
|
---|
[5028] | 198 | }
|
---|
| 199 | }
|
---|
| 200 | #endregion
|
---|
[5106] | 201 |
|
---|
[5028] | 202 | #region Login Methods
|
---|
[5526] | 203 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
|
---|
[5405] | 204 | public void Hello(Slave slaveInfo) {
|
---|
[5375] | 205 | using (trans.OpenTransaction()) {
|
---|
[5405] | 206 | var slave = dao.GetSlave(slaveInfo.Id);
|
---|
[5375] | 207 |
|
---|
| 208 | if (slave == null) {
|
---|
[5405] | 209 | dao.AddSlave(slaveInfo);
|
---|
[5375] | 210 | } else {
|
---|
[5405] | 211 | dao.UpdateSlave(slaveInfo);
|
---|
[5375] | 212 | }
|
---|
| 213 | }
|
---|
[5053] | 214 | }
|
---|
[5028] | 215 |
|
---|
[5526] | 216 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
|
---|
[5375] | 217 | public void GoodBye(Guid slaveId) {
|
---|
| 218 | using (trans.OpenTransaction()) {
|
---|
| 219 | var slave = dao.GetSlave(slaveId);
|
---|
| 220 | if (slave != null) {
|
---|
| 221 | slave.SlaveState = SlaveState.Offline;
|
---|
| 222 | dao.UpdateSlave(slave);
|
---|
| 223 | }
|
---|
| 224 | }
|
---|
[5053] | 225 | }
|
---|
[5028] | 226 | #endregion
|
---|
| 227 |
|
---|
| 228 | #region Heartbeat Methods
|
---|
[5526] | 229 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
|
---|
[5053] | 230 | public List<MessageContainer> Heartbeat(Heartbeat heartbeat) {
|
---|
[5028] | 231 | using (trans.OpenTransaction()) {
|
---|
[5405] | 232 | return heartbeatManager.ProcessHeartbeat(heartbeat);
|
---|
[5028] | 233 | }
|
---|
| 234 | }
|
---|
| 235 | #endregion
|
---|
| 236 |
|
---|
| 237 | #region Plugin Methods
|
---|
[5526] | 238 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 239 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5028] | 240 | public Guid AddPlugin(Plugin plugin, List<PluginData> pluginDatas) {
|
---|
| 241 | using (trans.OpenTransaction()) {
|
---|
[5402] | 242 | plugin.UserId = auth.UserId;
|
---|
| 243 | plugin.DateCreated = DateTime.Now;
|
---|
[5028] | 244 | Guid pluginId = dao.AddPlugin(plugin);
|
---|
| 245 | foreach (PluginData pluginData in pluginDatas) {
|
---|
| 246 | pluginData.PluginId = pluginId;
|
---|
| 247 | dao.AddPluginData(pluginData);
|
---|
| 248 | }
|
---|
| 249 | return pluginId;
|
---|
| 250 | }
|
---|
| 251 | }
|
---|
[5526] | 252 |
|
---|
| 253 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 254 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
| 255 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
|
---|
[5053] | 256 | public IEnumerable<Plugin> GetPlugins() {
|
---|
| 257 | return dao.GetPlugins(x => true);
|
---|
[5028] | 258 | }
|
---|
[5375] | 259 |
|
---|
[5526] | 260 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 261 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
| 262 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
|
---|
[5053] | 263 | public IEnumerable<PluginData> GetPluginDatas(List<Guid> pluginIds) {
|
---|
[5375] | 264 | List<PluginData> pluginDatas = new List<PluginData>();
|
---|
| 265 |
|
---|
| 266 | using (trans.OpenTransaction()) {
|
---|
| 267 | foreach (Guid guid in pluginIds) {
|
---|
| 268 | List<PluginData> pluginData = dao.GetPluginDatas(x => x.PluginId == guid).ToList();
|
---|
| 269 | if (pluginData != null) {
|
---|
| 270 | pluginDatas.AddRange(pluginData);
|
---|
| 271 | } else {
|
---|
| 272 | //ignore ?
|
---|
| 273 | }
|
---|
| 274 | }
|
---|
| 275 | return pluginDatas;
|
---|
| 276 | }
|
---|
[5028] | 277 | }
|
---|
[5375] | 278 |
|
---|
[5028] | 279 | #endregion
|
---|
[5106] | 280 |
|
---|
[5028] | 281 | #region Slave Methods
|
---|
[5526] | 282 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 283 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5028] | 284 | public Guid AddSlave(Slave slave) {
|
---|
| 285 | using (trans.OpenTransaction()) {
|
---|
| 286 | return dao.AddSlave(slave);
|
---|
| 287 | }
|
---|
| 288 | }
|
---|
| 289 |
|
---|
[5526] | 290 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 291 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5028] | 292 | public Guid AddSlaveGroup(SlaveGroup slaveGroup) {
|
---|
| 293 | using (trans.OpenTransaction()) {
|
---|
| 294 | return dao.AddSlaveGroup(slaveGroup);
|
---|
| 295 | }
|
---|
| 296 | }
|
---|
| 297 |
|
---|
[5526] | 298 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 299 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5106] | 300 | public Slave GetSlave(Guid slaveId) {
|
---|
| 301 | return dao.GetSlave(slaveId);
|
---|
| 302 | }
|
---|
| 303 |
|
---|
| 304 | public SlaveGroup GetSlaveGroup(Guid slaveGroupId) {
|
---|
| 305 | return dao.GetSlaveGroup(slaveGroupId);
|
---|
| 306 | }
|
---|
| 307 |
|
---|
[5526] | 308 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 309 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5028] | 310 | public IEnumerable<Slave> GetSlaves() {
|
---|
| 311 | return dao.GetSlaves(x => true);
|
---|
| 312 | }
|
---|
| 313 |
|
---|
[5526] | 314 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 315 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5028] | 316 | public IEnumerable<SlaveGroup> GetSlaveGroups() {
|
---|
| 317 | return dao.GetSlaveGroups(x => true);
|
---|
| 318 | }
|
---|
| 319 |
|
---|
[5526] | 320 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 321 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5106] | 322 | public void UpdateSlave(Slave slave) {
|
---|
[5028] | 323 | using (trans.OpenTransaction()) {
|
---|
[5106] | 324 | dao.UpdateSlave(slave);
|
---|
[5028] | 325 | }
|
---|
| 326 | }
|
---|
| 327 |
|
---|
[5526] | 328 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 329 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5106] | 330 | public void UpdateSlaveGroup(SlaveGroup slaveGroup) {
|
---|
[5028] | 331 | using (trans.OpenTransaction()) {
|
---|
[5106] | 332 | dao.UpdateSlaveGroup(slaveGroup);
|
---|
[5028] | 333 | }
|
---|
| 334 | }
|
---|
| 335 |
|
---|
[5526] | 336 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 337 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5106] | 338 | public void DeleteSlave(Guid slaveId) {
|
---|
[5028] | 339 | using (trans.OpenTransaction()) {
|
---|
[5106] | 340 | dao.DeleteSlave(slaveId);
|
---|
[5028] | 341 | }
|
---|
| 342 | }
|
---|
| 343 |
|
---|
[5526] | 344 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 345 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5106] | 346 | public void DeleteSlaveGroup(Guid slaveGroupId) {
|
---|
[5028] | 347 | using (trans.OpenTransaction()) {
|
---|
[5106] | 348 | dao.DeleteSlaveGroup(slaveGroupId);
|
---|
[5028] | 349 | }
|
---|
| 350 | }
|
---|
[5106] | 351 |
|
---|
[5526] | 352 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 353 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5106] | 354 | public void AddResourceToGroup(Guid slaveGroupId, Guid resourceId) {
|
---|
| 355 | using (trans.OpenTransaction()) {
|
---|
| 356 | var resource = dao.GetResource(resourceId);
|
---|
| 357 | resource.ParentResourceId = slaveGroupId;
|
---|
| 358 | dao.UpdateResource(resource);
|
---|
| 359 | }
|
---|
| 360 | }
|
---|
| 361 |
|
---|
[5526] | 362 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 363 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5106] | 364 | public void RemoveResourceFromGroup(Guid slaveGroupId, Guid resourceId) {
|
---|
| 365 | using (trans.OpenTransaction()) {
|
---|
| 366 | var resource = dao.GetResource(resourceId);
|
---|
| 367 | resource.ParentResourceId = null;
|
---|
| 368 | dao.UpdateResource(resource);
|
---|
| 369 | }
|
---|
| 370 | }
|
---|
| 371 |
|
---|
[5526] | 372 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
|
---|
| 373 | // [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
|
---|
[5458] | 374 | public Guid GetResourceId(string resourceName) {
|
---|
| 375 | using (trans.OpenTransaction()) {
|
---|
| 376 | var resource = dao.GetResources(x => x.Name == resourceName).FirstOrDefault();
|
---|
| 377 | if (resource != null) {
|
---|
| 378 | return resource.Id;
|
---|
| 379 | } else {
|
---|
| 380 | return Guid.Empty;
|
---|
| 381 | }
|
---|
| 382 | }
|
---|
| 383 | }
|
---|
[5028] | 384 | #endregion
|
---|
| 385 |
|
---|
| 386 | #region Helper Methods
|
---|
| 387 | private IEnumerable<Job> GetChildJobs(Guid? parentJobId, bool recursive, bool includeParent) {
|
---|
| 388 | var jobs = new List<Job>(dao.GetJobs(x => parentJobId == null ? !x.ParentJobId.HasValue : x.ParentJobId.Value == parentJobId));
|
---|
| 389 |
|
---|
| 390 | if (includeParent) {
|
---|
| 391 | jobs.Add(GetJob(parentJobId.Value));
|
---|
| 392 | }
|
---|
| 393 |
|
---|
| 394 | if (recursive) {
|
---|
| 395 | var childs = new List<Job>();
|
---|
| 396 | foreach (var job in jobs) {
|
---|
| 397 | childs.AddRange(GetChildJobs(job.Id, recursive, false));
|
---|
| 398 | }
|
---|
| 399 | jobs.AddRange(childs);
|
---|
| 400 | }
|
---|
| 401 | return jobs;
|
---|
| 402 | }
|
---|
| 403 |
|
---|
| 404 | #endregion
|
---|
| 405 | }
|
---|
| 406 | }
|
---|