/// <summary> /// This looks at the tasks type and starts or get the update of the task and updates the database /// </summary> /// <param name="task"></param> /// <param name="org"></param> /// <param name="taskList"></param> private void ExecuteTask(TaskEntity task, OrgEntity org, List <TaskEntity> taskList) { if (task == null) { return; } try { if (org == null) { throw new Exception($"Org {org.Id} not found"); } switch ((TaskType)task.TaskType) { case TaskType.CreateOrg: { var orgInfo = Mapper.Map <OrgInfo>(org); DB.UpdateTaskStatus(org.Id, (int)TaskType.CreateOrg, "Running"); var cloud_tenantId = this.CloudService.CreateOrg(orgInfo); //update the org with the tenant id created in cloud org.Cloud_TenantId = cloud_tenantId; DB.UpdateOrg(org); DB.UpdateTaskStatus(org.Id, (int)TaskType.CreateOrg, "Completed"); break; } case TaskType.EnableOrg: { DB.UpdateTaskStatus(org.Id, (int)TaskType.EnableOrg, "Running"); CloudService.EnableOrg(org.Cloud_TenantId); DB.UpdateTaskStatus(org.Id, (int)TaskType.EnableOrg, "Completed"); break; } case TaskType.CreateAdmin: { if (CanStartTask(task, taskList)) { DB.UpdateTaskStatus(org.Id, (int)TaskType.CreateAdmin, "Running"); var adminUserHref = CloudService.CreateAdminUser(org.Cloud_TenantId, org.EmailAddress, org.AdminName, org.AdminPassword); DB.UpdateTaskStatus(org.Id, (int)TaskType.CreateAdmin, "Completed"); } break; } case TaskType.CreateVDC: { //This is a long running task //Hence start the task only if it is not started. //Check for the status if it is not completed if (CanStartTask(task, taskList)) { var taskStatusUrl = CloudService.CreateVDC(org.Cloud_TenantId); task.StatusUrl = taskStatusUrl; task.Status = "Running"; DB.UpdateTask(task); } else if (task.Status != "Completed") { UpdateStatus(task); } break; } case TaskType.CreateCatalog: { if (CanStartTask(task, taskList)) { DB.UpdateTaskStatus(org.Id, (int)TaskType.CreateCatalog, "Running"); var adminUserHref = CloudService.CreateCatalog(org.Cloud_TenantId); DB.UpdateTaskStatus(org.Id, (int)TaskType.CreateCatalog, "Completed"); } break; } case TaskType.UpgradeGateWay: { //This is a long running task //Hence start the task only if it is not started. //Check for the status if it is not completed if (CanStartTask(task, taskList)) { var taskStatusUrl = CloudService.UpdateEdgeGateWayToAdvanced(org.Cloud_TenantId); task.StatusUrl = taskStatusUrl.Result; task.Status = "Running"; DB.UpdateTask(task); } else if (task.Status != "Completed") { UpdateStatus(task); } break; } case TaskType.SendNotification: { if (CanStartTask(task, taskList)) { DB.UpdateTaskStatus(org.Id, (int)TaskType.SendNotification, "Completed"); this.SendSuccessNotification(new SummaryInfo { Url = CloudService.GetServerUrl() + "/tenant/" + org.CompanyShortName, UserName = org.AdminName, SupportEmail = "*****@*****.**", SupportPhone = "817.590.9650" }, org.EmailAddress); } break; } default: break; } } catch (HttpException hex) { WriteError(hex); //This is mostly error from api , flag the status as error task.Status = "Error"; task.Notes = hex.Message; DB.UpdateTask(task); } catch (Exception ex) { WriteError(ex); throw; } }