Example #1
0
        /// <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;
            }
        }