Пример #1
0
        public DtoActionResult Add(EntityComServerCluster cluster)
        {
            var actionResult     = new DtoActionResult();
            var validationResult = Validate(cluster, true);

            if (validationResult.Success)
            {
                if (cluster.IsDefault)
                {
                    var clusters = _uow.ComServerClusterRepository.Get(x => x.IsDefault);
                    foreach (var clust in clusters)
                    {
                        clust.IsDefault = false;
                        _uow.ComServerClusterRepository.Update(clust, clust.Id);
                    }
                }

                _uow.ComServerClusterRepository.Insert(cluster);
                _uow.Save();
                actionResult.Success = true;
                actionResult.Id      = cluster.Id;
            }
            else
            {
                return(new DtoActionResult()
                {
                    ErrorMessage = validationResult.ErrorMessage
                });
            }

            return(actionResult);
        }
Пример #2
0
        protected void buttonAdd_OnClick(object sender, EventArgs e)
        {
            var comServerCluster = new EntityComServerCluster();

            comServerCluster.Name        = txtName.Text;
            comServerCluster.Description = txtDescription.Text;
            comServerCluster.IsDefault   = chkDefault.Checked;

            var result = Call.ComServerClusterApi.Post(comServerCluster);

            if (result.Success)
            {
                var listOfServers = new List <EntityComServerClusterServer>();
                foreach (GridViewRow row in gvServers.Rows)
                {
                    var cb = (CheckBox)row.FindControl("chkSelector");
                    if (!cb.Checked)
                    {
                        continue;
                    }
                    var role    = (DropDownList)row.FindControl("ddlRole");
                    var dataKey = gvServers.DataKeys[row.RowIndex];
                    if (dataKey == null)
                    {
                        continue;
                    }

                    var clusterServer = new EntityComServerClusterServer();
                    clusterServer.ComServerClusterId = result.Id;
                    clusterServer.ComServerId        = Convert.ToInt32(dataKey.Value);
                    clusterServer.Role = role.Text;
                    listOfServers.Add(clusterServer);
                }

                if (listOfServers.Count == 0)
                {
                    EndUserMessage = "Successfully Added Cluster";
                    Response.Redirect("~/views/admin/comservers/editcomservercluster.aspx?level=2&clusterId=" + result.Id);
                }

                var finalResult = Call.ComClusterServerApi.Post(listOfServers);
                if (finalResult.Success)
                {
                    EndUserMessage = "Successfully Added Cluster";
                    Response.Redirect("~/views/admin/comservers/editcomservercluster.aspx?level=2&clusterId=" + result.Id);
                }
                else
                {
                    EndUserMessage = "Could Not Add Cluster";
                }
            }
            else
            {
                EndUserMessage = result.ErrorMessage;
            }
        }
Пример #3
0
        public DtoActionResult Post(EntityComServerCluster cluster)
        {
            var result = _comServerClusterService.Add(cluster);

            if (result.Success)
            {
                var auditLog = new EntityAuditLog();
                auditLog.ObjectType = "ComServerCluster";
                auditLog.ObjectId   = result.Id;
                auditLog.ObjectName = cluster.Name;
                auditLog.ObjectJson = JsonConvert.SerializeObject(cluster);
                auditLog.UserId     = _userId;
                auditLog.AuditType  = EnumAuditEntry.AuditType.Create;
                _auditLogService.AddAuditLog(auditLog);
            }
            return(result);
        }
Пример #4
0
        public DtoActionResult Update(EntityComServerCluster cluster)
        {
            var u = GetCluster(cluster.Id);

            if (u == null)
            {
                return new DtoActionResult {
                           ErrorMessage = "Cluster Not Found", Id = 0
                }
            }
            ;
            var actionResult = new DtoActionResult();

            var validationResult = Validate(cluster, false);

            if (validationResult.Success)
            {
                if (cluster.IsDefault)
                {
                    var clusters = _uow.ComServerClusterRepository.Get(x => x.IsDefault);
                    foreach (var clust in clusters)
                    {
                        clust.IsDefault = false;
                        _uow.ComServerClusterRepository.Update(clust, clust.Id);
                    }
                }

                _uow.ComServerClusterRepository.Update(cluster, u.Id);

                _uow.Save();
                actionResult.Success = true;
                actionResult.Id      = cluster.Id;
            }
            else
            {
                return(new DtoActionResult()
                {
                    ErrorMessage = validationResult.ErrorMessage
                });
            }
            return(actionResult);
        }
Пример #5
0
        public DtoActionResult Put(int id, EntityComServerCluster cluster)
        {
            cluster.Id = id;
            var result = _comServerClusterService.Update(cluster);

            if (result == null)
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
            }
            if (result.Success)
            {
                var auditLog = new EntityAuditLog();
                auditLog.ObjectType = "ComServerCluster";
                auditLog.ObjectId   = result.Id;
                auditLog.ObjectName = cluster.Name;
                auditLog.ObjectJson = JsonConvert.SerializeObject(cluster);
                auditLog.UserId     = _userId;
                auditLog.AuditType  = EnumAuditEntry.AuditType.Update;
                _auditLogService.AddAuditLog(auditLog);
            }
            return(result);
        }
Пример #6
0
        public DtoValidationResult Validate(EntityComServerCluster comServerCluster, bool isNew)
        {
            var validationResult = new DtoValidationResult {
                Success = true
            };

            if (string.IsNullOrEmpty(comServerCluster.Name) || !comServerCluster.Name.All(c => char.IsLetterOrDigit(c) || c == '_' || c == '-' || c == ' '))
            {
                validationResult.Success      = false;
                validationResult.ErrorMessage = "Com Server Cluster Name Is Not Valid";
                return(validationResult);
            }

            if (isNew)
            {
                if (_uow.ComServerClusterRepository.Exists(h => h.Name == comServerCluster.Name))
                {
                    validationResult.Success      = false;
                    validationResult.ErrorMessage = "A Com Server Cluster With This Name Already Exists";
                    return(validationResult);
                }
            }
            else
            {
                var original = _uow.ComServerClusterRepository.GetById(comServerCluster.Id);
                if (original.Name != comServerCluster.Name)
                {
                    if (_uow.ComServerClusterRepository.Exists(h => h.Name == comServerCluster.Name))
                    {
                        validationResult.Success      = false;
                        validationResult.ErrorMessage = "A Com Server Cluster With This Name Already Exists";
                        return(validationResult);
                    }
                }
            }

            return(validationResult);
        }
Пример #7
0
        public int?Run()
        {
            //Find the best multicast server to use

            var serverId = -1;


            if (_group.ClusterId == -1) //-1 is default cluster
            {
                _cluster = _uow.ComServerClusterRepository.GetFirstOrDefault(x => x.IsDefault);
                if (_cluster == null)
                {
                    return(null);
                }
            }
            else
            {
                _cluster = _uow.ComServerClusterRepository.GetById(_group.ClusterId);
                if (_cluster == null)
                {
                    return(null);
                }
            }


            var availableMulticastServers = _uow.ComServerClusterServerRepository.GetMulticastClusterServers(_cluster.Id);

            if (!availableMulticastServers.Any())
            {
                return(null);
            }

            var taskInUseDict = new Dictionary <int, int>();

            foreach (var mServer in availableMulticastServers)
            {
                var counter =
                    new ServiceActiveMulticastSession().GetAll()
                    .Count(x => x.ComServerId == mServer.ComServerId);

                taskInUseDict.Add(mServer.ComServerId, counter);
            }

            if (taskInUseDict.Count == 1)
            {
                serverId = taskInUseDict.Keys.First();
            }

            else if (taskInUseDict.Count > 1)
            {
                var orderedInUse = taskInUseDict.OrderBy(x => x.Value);

                if (taskInUseDict.Values.Distinct().Count() == 1)
                {
                    //all multicast server have equal tasks - randomly choose one.

                    var index = _random.Next(0, taskInUseDict.Count);
                    serverId = taskInUseDict[index];
                }
                else
                {
                    //Just grab the first one with the smallest queue, could be a duplicate but will eventually even out on it's own
                    serverId = orderedInUse.First().Key;
                }
            }
            return(serverId);
        }