Beispiel #1
0
        public static async Task <FarmSetup> AssignAccounts(IFarmContext context, FarmSettings settings)
        {
            var possibleMules = await context.Accounts
                                .Include(a => a.Proxy)
                                .Where(a => a.Mule)
                                .Where(IsUsable)
                                .Take(settings.MaxActiveMules).ToListAsync();

            if (possibleMules.Count < settings.MinActiveMules)
            {
                return(new FarmSetup());
            }

            var possibleBots = await context.Accounts
                               .Include(a => a.Proxy)
                               .Where(a => !a.Mule)
                               .Where(IsUsable)
                               .Take(settings.MaxActiveBots)
                               .ToListAsync();

            if (possibleBots.Count == 0)
            {
                return(new FarmSetup());
            }

            return(new FarmSetup(possibleBots, possibleMules));
        }
Beispiel #2
0
        public async void LaunchInstance(bool startClient, bool mule)
        {
            Instance instance;

            if (mule)
            {
                instance = BogusData.Mules.Generate();
            }
            else
            {
                instance = BogusData.Bots.Generate();
            }

            var settings = new FarmSettings
            {
                ID             = 2,
                BotScriptName  = "BotScript",
                MuleScriptName = "MuleScrip",
                ApiKey         = "JFDKSLFDSJKL7u894312709jfdksl"
            };

            using (var context = NewContext)
            {
                context.FarmSettingsTable.Update(settings);
                await context.SaveChangesAsync();
            }

            var state = new FarmState
            {
                SocketAddress = Guid.NewGuid()
            };

            var dateTime = new Mock <IDateTime>();

            var stateService = new Mock <IStateService>();

            stateService.Setup(s => s.GetFarmState()).ReturnsAsync(state);

            var clientHandler = new Mock <IClientHandler>();

            clientHandler.Setup(c => c.StartClient(It.IsAny <Guid>(), It.IsAny <ClientStartArgs>(), It.IsAny <string>()))
            .ReturnsAsync(startClient);

            var instanceService = new FORFarm.Application.Farm.InstanceService(dateTime.Object, clientHandler.Object, stateService.Object, Mapper, NewContext);

            var result = await instanceService.LaunchInstance(instance);

            result.Should().Be(startClient);

            clientHandler.Verify(c => c.StartClient(
                                     It.Is <Guid>(s => s == state.SocketAddress),
                                     It.Is <ClientStartArgs>(
                                         args => args.Username == instance.Account.Username &&
                                         args.Password == instance.Account.Password &&
                                         args.ScriptName == (mule ? settings.MuleScriptName : settings.BotScriptName)
                                         ), It.Is <string>(s => s == settings.ApiKey)));
        }
Beispiel #3
0
        public async void AreSettingsReady_NotReady(FarmSettings farmSettings)
        {
            using (var context = NewContext)
            {
                farmSettings.ID = 1;
                context.Update(farmSettings);
                await context.SaveChangesAsync();
            }

            var settingsManager = new FORFarm.Application.Farm.SettingsService(NewContext);
            var result          = await settingsManager.AreSettingsReady();

            result.Should().BeFalse();
        }
        public void PatchFarm()
        {
            var response = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(ExpectedResults.FarmGetResponse)
            };

            var handler = new RecordedDelegatingHandler(response)
            {
                StatusCodeToReturn = HttpStatusCode.OK
            };

            var subscriptionId = Guid.NewGuid().ToString();

            var token  = new TokenCloudCredentials(subscriptionId, Constants.TokenString);
            var client = GetClient(handler, token);

            var settings = new FarmSettings
            {
                SettingsPollingIntervalInSecond = 100
            };

            var farmReq = new FarmUpdateParameters
            {
                Farm = new FarmBase
                {
                    Settings = settings
                }
            };

            var result = client.Farms.Update(
                Constants.ResourceGroupName,
                Constants.FarmId,
                farmReq);

            // validate requestor
            Assert.Equal(handler.Method.Method, "PATCH", StringComparer.OrdinalIgnoreCase);

            var expectedUri = string.Format(
                GetUriTemplate,
                Constants.BaseUri,
                subscriptionId,
                Constants.ResourceGroupName,
                Constants.FarmId);

            Assert.Equal(handler.Uri.AbsoluteUri, expectedUri);

            CompareExpectedResult(result.Farm);
        }
Beispiel #5
0
    public static void GetStarted()
    {
        FarmSettings.RootPath();

        CopyAddDirectoryImage();
        GetNetworkPoolInfo();


        Job.ClearJsonsDirectory();

        var timer = new System.Threading.Timer(
            e => HardwareInfoStartUp(),
            null,
            TimeSpan.Zero,
            TimeSpan.FromMinutes(5));
    }
Beispiel #6
0
        protected override void Execute()
        {
            string       confirmString;
            FarmSettings settings = Tools.ToSettingsObject <SetAdminFarm, FarmSettings>(this, out confirmString);

            if (ShouldProcess(
                    Resources.SetFarmDescription.FormatInvariantCulture(FarmName, confirmString),
                    Resources.SetFarmWarning.FormatInvariantCulture(FarmName, confirmString),
                    Resources.ShouldProcessCaption))
            {
                FarmUpdateParameters parameters = new FarmUpdateParameters
                {
                    Farm = new FarmBase {
                        Settings = settings
                    }
                };

                FarmGetResponse response = Client.Farms.Update(ResourceGroupName, FarmName, parameters);

                WriteObject(new FarmResponse(response.Farm));
            }
        }
Beispiel #7
0
        public void PatchFarm()
        {
            var response = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(ExpectedResults.FarmGetResponse)
            };

            var handler = new RecordedDelegatingHandler(response)
            {
                StatusCodeToReturn = HttpStatusCode.OK
            };

            var subscriptionId = Guid.NewGuid().ToString();

            var token = new TokenCloudCredentials(subscriptionId, Constants.TokenString);
            var client = GetClient(handler, token);

            var settings = new FarmSettings
            {
                SettingsPollingIntervalInSecond = 100
            };

            var farmReq = new FarmUpdateParameters
            {
                Farm = new FarmBase
                {
                    Settings = settings
                }
            };

            var result = client.Farms.Update(
                Constants.ResourceGroupName,
                Constants.FarmId,
                farmReq);

            // validate requestor
            Assert.Equal(handler.Method.Method, "PATCH", StringComparer.OrdinalIgnoreCase);

            var expectedUri = string.Format(
                GetUriTemplate,
                Constants.BaseUri,
                subscriptionId,
                Constants.ResourceGroupName,
                Constants.FarmId);

            Assert.Equal(handler.Uri.AbsoluteUri, expectedUri);

            CompareExpectedResult(result.Farm);
        }
Beispiel #8
0
        public static async Task <bool> AssignProxies(IFarmContext context, FarmSetup farmSetup, FarmSettings settings)
        {
            var neededBotProxySpots  = farmSetup.Bots.Count(a => a.Proxy == null);
            var neededMuleProxySpots = farmSetup.Mules.Count(a => a.Proxy == null);

            var neededSpots = neededBotProxySpots + neededMuleProxySpots;

            if (neededSpots == 0)
            {
                return(true);
            }

            var candidateBotProxies = await context.Proxies
                                      .Include(p => p.ActiveAccounts)
                                      .Where(HasNoMules)
                                      .Where(p => p.ActiveAccounts.Count < settings.ConcurrentAccountsPerProxy)
                                      .Where(p => p.BannedMules + p.BannedBots + p.ActiveAccounts.Count < settings.MaxAccountsPerProxy)
                                      .Take(neededBotProxySpots).ToListAsync();

            var remainingSpotsToAssign = neededBotProxySpots;
            var takenProxyIds          = new HashSet <int>();

            foreach (var proxy in candidateBotProxies)
            {
                if (remainingSpotsToAssign == 0)
                {
                    break;
                }

                remainingSpotsToAssign -= GetRemainingSpots(proxy, settings.ConcurrentAccountsPerProxy, settings.MaxActiveBots);
                takenProxyIds.Add(proxy.ID);
            }

            if (remainingSpotsToAssign > 0)
            {
                return(false);
            }

            var remainingProxies = candidateBotProxies
                                   .Where(p => !takenProxyIds.Contains(p.ID))
                                   .Where(HasNoBots.Compile())
                                   .Where(HasSpotRemaining(settings.ConcurrentAccountsPerProxy, settings.MaxAccountsPerProxy).Compile())
                                   .ToList();

            var remainingSpots = GetRemainingSpots(remainingProxies, settings.ConcurrentAccountsPerProxy,
                                                   settings.MaxAccountsPerProxy);

            var candidateMuleProxies = await context.Proxies
                                       .Include(p => p.ActiveAccounts)
                                       .Where(HasNoBots)
                                       .Where(p => !takenProxyIds.Contains(p.ID))
                                       .Take(neededMuleProxySpots - remainingSpots).ToListAsync();

            candidateBotProxies.RemoveAll(p => !takenProxyIds.Contains(p.ID));
            candidateMuleProxies.AddRange(remainingProxies);

            remainingSpotsToAssign = neededMuleProxySpots;

            foreach (var proxy in candidateMuleProxies)
            {
                if (remainingSpotsToAssign == 0)
                {
                    break;
                }

                remainingSpotsToAssign -= GetRemainingSpots(proxy, settings.ConcurrentAccountsPerProxy,
                                                            settings.MaxAccountsPerProxy);
            }

            if (remainingSpotsToAssign > 0)
            {
                return(false);
            }

            foreach (var acc in farmSetup.Bots.Where(a => a.Proxy == null))
            {
                var proxy = candidateBotProxies.First(
                    HasSpotRemaining(settings.ConcurrentAccountsPerProxy, settings.MaxAccountsPerProxy).Compile());

                acc.Proxy = proxy;
                proxy.ActiveAccounts.Add(acc);
            }

            foreach (var acc in farmSetup.Mules.Where(a => a.Proxy == null))
            {
                var proxy = candidateMuleProxies.First(
                    HasSpotRemaining(settings.ConcurrentAccountsPerProxy, settings.MaxAccountsPerProxy).Compile());

                acc.Proxy = proxy;
                proxy.ActiveAccounts.Add(acc);
            }

            await context.SaveChangesAsync();

            return(true);
        }