public void Create(string agentTypeGuid, int agentServerArtifactId)
        {
            _agentTypeArtifactId   = _environment.GetArtifactIdFromGuid(agentTypeGuid);
            _agentServerArtifactId = agentServerArtifactId;
            _runInterval           = _environment.GetAgentRunIntervalByType(_agentTypeArtifactId);
            _agentName             = CreateAgentName();
            _agentArtifactTypeId   = _environment.GetAgentArtifactType();
            _systemContainerId     = _environment.GetSystemContainerId();

            RunCreateAgentSql();
        }
        public void Create(string agentTypeGuid, int agentServerArtifactId)
        {
            _agentServerArtifactId = agentServerArtifactId;
            _agentTypeArtifactId   = _environment.GetArtifactIdFromGuid(agentTypeGuid);
            _runInterval           = _environment.GetAgentRunIntervalByType(_agentTypeArtifactId);


            int agentId = ApiCreate().GetAwaiter().GetResult();

            if (agentId < 1)
            {
                throw new Exception(string.Format("API agent create failed. Returned agent ID: {0}", agentId));
            }
        }
        public void Run()
        {
            int agentTypeId;
            int agentToDeleteId;
            int counter;
            List <SpotsPerServer> agentsPerServer = new List <SpotsPerServer>();

            while (_agentsToDelete.Count > 0)
            {
                _logger.LogDebug(string.Format("{0} AgentsDesiredObjects to be deleted", _agentsToDelete.Count));

                counter = _agentsToDelete.Count - 1;
                while (counter >= 0)
                {
                    _agentsToDelete[counter].Count = Math.Abs(_agentsToDelete[counter].Count);
                    agentTypeId     = _environment.GetArtifactIdFromGuid(_agentsToDelete[counter].Guid);
                    agentsPerServer = _environment.GetAgentsPerServerByPool(agentTypeId, _poolId);
                    if (agentsPerServer.Count > 0)
                    {
                        agentsPerServer = agentsPerServer.OrderByDescending(x => x.Spots).ToList();
                        if (agentsPerServer[0].Spots > 0)
                        {
                            agentToDeleteId = _deleteAgent.GetAgentIdToDelete(agentTypeId, agentsPerServer[0].AgentServerArtifactId);
                            _deleteAgent.Delete(agentToDeleteId);
                            _agentsToDelete[counter].Count -= 1;

                            if (_agentsToDelete[counter].Count < 1)
                            {
                                _agentsToDelete.Remove(_agentsToDelete[counter]);
                            }
                        }
                        else
                        {
                            _agentsToDelete.Remove(_agentsToDelete[counter]);
                        }
                    }
                    else
                    {
                        _agentsToDelete.Remove(_agentsToDelete[counter]);
                    }

                    counter -= 1;
                }
            }
        }
        public List <AgentsDesired> Compare()
        {
            List <AgentsDesired> outputList = new List <AgentsDesired>();
            string logString = "";

            int counter = _agentsDesiredList.Count - 1;

            while (counter >= 0)
            {
                //Declaring all of these to variables to make logging easier
                int    currentCount;
                string agentGuid    = _agentsDesiredList[counter].Guid;
                int    agentTypeId  = _environment.GetArtifactIdFromGuid(agentGuid);
                int    desiredCount = _agentsDesiredList[counter].Count;

                //Account for agents Resource Pool policy
                if (_agentsDesiredList[counter].RespectsResourcePool)
                {
                    currentCount = _environment.GetAgentCountByPool(agentTypeId, _poolId);
                }
                else
                {
                    currentCount = _environment.GetAgentCount(agentTypeId);
                }

                int difference = desiredCount - currentCount;

                logString += string.Format("AgentGuid: {0}, AgentTypeID {1}, Current Count: {2}, Desired Count: {3} Difference: {4}\r\n", agentGuid, agentTypeId, currentCount, desiredCount, difference);

                outputList.Add(new AgentsDesired
                {
                    Guid = _agentsDesiredList[counter].Guid,
                    RespectsResourcePool = _agentsDesiredList[counter].RespectsResourcePool,
                    Count = difference
                });

                counter -= 1;
            }
            _logger.LogDebug("Compare output--\r\n" + logString);
            return(outputList);
        }