Exemple #1
0
        public async Task StartNewSpeedTest(SpeedTestJob speedTest)
        {
            var mgr = await Authenticate(speedTest.SubscriptionId);

            var account     = CloudStorageAccount.Parse(Environment.GetEnvironmentVariable("AzureWebJobsStorage")).Credentials;
            var accountName = account.AccountName;
            var pass        = account.ExportBase64EncodedKey();

            await new AzureResourceService().EnsureResourceGroup(speedTest.SubscriptionId, speedTest.ResourceGroupName, speedTest.Region);

            var containerGroup = await mgr.ContainerGroups.Define(speedTest.Id).WithRegion(speedTest.Region).WithExistingResourceGroup(speedTest.ResourceGroupName)
                                 .WithLinux().WithPublicImageRegistryOnly()
                                 //.WithoutVolume()
                                 .WithEmptyDirectoryVolume("azurefiles")
                                 .DefineContainerInstance("minio").WithImage("minio/minio")
                                 .WithInternalTcpPort(9000).WithStartingCommandLine("minio", "gateway", "azure")
                                 .WithEnvironmentVariables(new Dictionary <string, string>
            {
                { "MINIO_ACCESS_KEY", accountName },
                { "MINIO_SECRET_KEY", pass }
            })
                                 .WithCpuCoreCount(0.5)
                                 .WithMemorySizeInGB(0.5)
                                 .Attach()
                                 .DefineContainerInstance("speedtest").WithImage("sjkp/sitespeedtest")
                                 .WithoutPorts()
                                 .WithVolumeMountSetting("azurefiles", "/sitespeed.io")
                                 .WithEnvironmentVariables(new Dictionary <string, string>()
            {
                { "SITESPEEDIO_OUTPUT", "test" },
                { "SITESPEEDIO_MINIO_HOST", "http://127.0.0.1:9000" },
                { "SITESPEEDIO_MINIO_LOGIN", accountName },
                { "SITESPEEDIO_MINIO_PASS", pass }
            })
                                 .WithStartingCommandLine("/start.sh", speedTest.Uri.ToString()).Attach()
                                 .WithRestartPolicy(ContainerGroupRestartPolicy.Never).CreateAsync();
        }
Exemple #2
0
        public static async Task <IActionResult> StartTest(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestMessage req,
            [OrchestrationClient] DurableOrchestrationClient starter,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            var body = await req.Content.ReadAsAsync <StartSpeedTest>();

            var region = Region.Create(body.Region);

            if (!Region.Values.Contains(region))
            {
                return(new BadRequestObjectResult($"Invalid region, valid values are {string.Join(",", Region.Values)}"));
            }

            if (!Uri.TryCreate(body.WebSite, UriKind.Absolute, out var url))
            {
                return(new BadRequestObjectResult("Url invalid"));
            }
            var    id   = Guid.NewGuid();
            string name = MakeName(region, url, id);

            var job = new SpeedTestJob()
            {
                Id                = id.ToString(),
                Region            = region,
                ResourceGroupName = name,
                SubscriptionId    = subscriptionId,
                Uri               = url
            };

            await new AciService().StartNewSpeedTest(job);

            return(new OkObjectResult(job));
        }