Exemple #1
0
        public override async Task<ActionResponse> ExecuteActionAsync(ActionRequest request)
        {

            var cognitiveServiceKey = request.DataStore.GetAllValues("CognitiveServiceKey").LastOrDefault();
            
            if (!string.IsNullOrEmpty(cognitiveServiceKey))
            {
                return new ActionResponse(ActionStatus.Success);
            }

            var azureToken = request.DataStore.GetJson("AzureToken")["access_token"].ToString();
            var subscription = request.DataStore.GetJson("SelectedSubscription")["SubscriptionId"].ToString();
            var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup");
            var location = request.DataStore.GetJson("SelectedLocation")["Name"].ToString();
            var cognitiveServiceName = request.DataStore.GetValue("CognitiveServiceName");

            AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup);        

            var response = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, $"providers/Microsoft.CognitiveServices/accounts/{cognitiveServiceName}/listKeys", "2016-02-01-preview", string.Empty);
            if (response.IsSuccessStatusCode)
            {
                var subscriptionKeys = JsonUtility.GetJObjectFromJsonString(await response.Content.ReadAsStringAsync());

                JObject newCognitiveServiceKey = new JObject();
                newCognitiveServiceKey.Add("CognitiveServiceKey", subscriptionKeys["key1"].ToString());  
                return new ActionResponse(ActionStatus.Success, newCognitiveServiceKey, true);
            }

            return new ActionResponse(ActionStatus.Failure);
        }
Exemple #2
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            var azureToken         = request.DataStore.GetJson("AzureToken", "access_token");
            var subscription       = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId");
            var resourceGroup      = request.DataStore.GetValue("SelectedResourceGroup");
            var location           = request.DataStore.GetJson("SelectedLocation", "Name");
            var storageAccountName = request.DataStore.GetValue("StorageAccountName");

            AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup);

            var response = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, $"providers/Microsoft.Storage/storageAccounts/{storageAccountName}/listKeys", "2016-01-01", string.Empty);

            if (response.IsSuccessStatusCode)
            {
                var     subscriptionKeys = JsonUtility.GetJObjectFromJsonString(await response.Content.ReadAsStringAsync());
                string  key = subscriptionKeys["keys"][0]["value"].ToString();
                string  connectionString     = $"DefaultEndpointsProtocol=https;AccountName={storageAccountName};AccountKey={key};EndpointSuffix=core.windows.net";
                JObject newStorageAccountKey = new JObject();
                newStorageAccountKey.Add("StorageAccountKey", key);
                newStorageAccountKey.Add("StorageAccountConnectionString", connectionString);
                request.DataStore.AddToDataStore("StorageAccountKey", key);
                request.DataStore.AddToDataStore("StorageAccountConnectionString", connectionString);
                return(new ActionResponse(ActionStatus.Success, newStorageAccountKey, true));
            }

            return(new ActionResponse(ActionStatus.Failure));
        }
Exemple #3
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            var azureToken    = request.DataStore.GetJson("AzureToken", "access_token");
            var subscription  = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId");
            var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup");
            var logicAppName  = request.DataStore.GetValue("LogicAppName");

            AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup);
            var             runs   = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get, $"providers/Microsoft.Logic/workflows/{logicAppName}/runs", "2016-06-01", string.Empty);

            if (!runs.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure));
            }
            var runsResponse = JObject.Parse(await runs.Content.ReadAsStringAsync());
            var runsArray    = runsResponse["value"] as JArray;

            if (runsArray.Count > 0 && runsArray[0]["properties"]["status"].ToString() == "Running")
            {
                return(new ActionResponse(ActionStatus.Success));
            }

            var triggers = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get, $"providers/Microsoft.Logic/workflows/{logicAppName}/triggers", "2016-06-01", string.Empty);

            if (!triggers.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure));
            }

            var    triggersResponse = JObject.Parse(await triggers.Content.ReadAsStringAsync());
            string triggerToUse     = triggersResponse["value"][0]["name"].ToString();

            var response = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, $"providers/Microsoft.Logic/workflows/{logicAppName}/triggers/{triggerToUse}/run", "2016-06-01", string.Empty);

            if (!response.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure));
            }

            return(new ActionResponse(ActionStatus.Success));
        }
Exemple #4
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            var azureToken    = request.DataStore.GetJson("AzureToken", "access_token");
            var subscription  = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId");
            var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup");
            var location      = request.DataStore.GetJson("SelectedLocation", "Name");
            var sitename      = request.DataStore.GetValue("FunctionName");

            AzureHttpClient client           = new AzureHttpClient(azureToken, subscription, resourceGroup);
            var             existingResponse = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, $"/providers/Microsoft.Web/sites/{sitename}/config/appSettings/list", "2016-03-01", "{}");

            if (!existingResponse.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure));
            }

            var     appSettingsPayload = JObject.Parse(await existingResponse.Content.ReadAsStringAsync());
            JObject properties         = appSettingsPayload["properties"] as JObject;

            if (request.DataStore.GetJson("AppSettingKeys") != null)
            {
                foreach (var item in request.DataStore.GetJson("AppSettingKeys"))
                {
                    string key   = item.Path.Split('.').Last();
                    string value = (string)item;
                    properties.Add(key, value);
                }
            }

            var appSettingCreated = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Put, $"/providers/Microsoft.Web/sites/{sitename}/config/appSettings", "2016-03-01", appSettingsPayload.ToString());

            var response = await appSettingCreated.Content.ReadAsStringAsync();

            if (!appSettingCreated.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response),
                                          null, DefaultErrorCodes.DefaultErrorCode, "Error creating appsetting"));
            }

            return(new ActionResponse(ActionStatus.Success));
        }
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            string keyNumber       = request.DataStore.GetValue("KeyNumber") ?? "0";
            int    keyNumberParsed = int.Parse(keyNumber);

            var cognitiveServiceKeys = request.DataStore.GetAllValues("CognitiveServiceKey");

            if (cognitiveServiceKeys.Count - 1 >= keyNumberParsed)
            {
                string key = cognitiveServiceKeys[keyNumberParsed];

                if (!string.IsNullOrEmpty(key))
                {
                    return(new ActionResponse(ActionStatus.Success));
                }
            }

            var azureToken           = request.DataStore.GetJson("AzureToken")["access_token"].ToString();
            var subscription         = request.DataStore.GetJson("SelectedSubscription")["SubscriptionId"].ToString();
            var resourceGroup        = request.DataStore.GetValue("SelectedResourceGroup");
            var location             = request.DataStore.GetJson("SelectedLocation")["Name"].ToString();
            var cognitiveServiceName = request.DataStore.GetValue("CognitiveServiceName");
            var cognitiveServiceType = request.DataStore.GetValue("CognitiveServiceType");

            AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup);

            var response = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, $"providers/Microsoft.CognitiveServices/accounts/{cognitiveServiceName}/listKeys", "2016-02-01-preview", string.Empty);

            if (response.IsSuccessStatusCode)
            {
                var subscriptionKeys = JsonUtility.GetJObjectFromJsonString(await response.Content.ReadAsStringAsync());

                JObject newCognitiveServiceKey = new JObject();
                newCognitiveServiceKey.Add("CognitiveServiceKey", subscriptionKeys["key1"].ToString());
                string cognitiveKey = subscriptionKeys["key1"].ToString();

                var itemsInDataStore = request.DataStore.GetAllDataStoreItems("CognitiveServiceKey");
                if (itemsInDataStore.Count - 1 >= keyNumberParsed)
                {
                    request.DataStore.UpdateValue(itemsInDataStore[keyNumberParsed].DataStoreType, itemsInDataStore[keyNumberParsed].Route, itemsInDataStore[keyNumberParsed].Key, cognitiveKey);
                }
                else
                {
                    request.DataStore.AddToDataStore("CognitiveServiceKey", cognitiveKey);
                }

                return(new ActionResponse(ActionStatus.Success, newCognitiveServiceKey, true));
            }

            return(new ActionResponse(ActionStatus.Failure));
        }
Exemple #6
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            string azureToken    = request.DataStore.GetJson("AzureToken", "access_token");
            string subscription  = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId");
            string resourceGroup = request.DataStore.GetValue("SelectedResourceGroup");

            string serverName = request.DataStore.GetValue("ASServerName") ?? "analysisserver-" + RandomGenerator.GetRandomLowerCaseCharacters(5);
            string location   = request.DataStore.GetValue("ASLocation") ?? "westus";
            string sku        = request.DataStore.GetValue("ASSku") ?? "D1";
            string admin      = AzureUtility.GetEmailFromToken(request.DataStore.GetJson("AzureToken"));

            SubscriptionCloudCredentials creds = new TokenCloudCredentials(subscription, azureToken);
            AzureArmParameterGenerator   param = new AzureArmParameterGenerator();

            param.AddStringParam("name", serverName);
            param.AddStringParam("location", location);
            param.AddStringParam("sku", sku);
            param.AddStringParam("admin", admin);

            string armTemplatefilePath = File.ReadAllText(request.ControllerModel.SiteCommonFilePath + "/service/arm/NewAzureAS.json");
            string template            = AzureUtility.GetAzureArmParameters(armTemplatefilePath, param);
            await AzureUtility.ValidateAndDeployArm(creds, resourceGroup, "ASDeployment", template);

            await AzureUtility.WaitForArmDeployment(creds, resourceGroup, "ASDeployment");

            AzureHttpClient client   = new AzureHttpClient(azureToken, subscription, resourceGroup);
            var             response = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get
                                                                                                 , $"/providers/Microsoft.AnalysisServices/servers/{serverName}/"
                                                                                                 , "2016-05-16"
                                                                                                 , string.Empty
                                                                                                 , new Dictionary <string, string>());

            string responseBody = await response.Content.ReadAsStringAsync();

            if (!response.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure));
            }

            JObject responseObj = JsonUtility.GetJObjectFromJsonString(responseBody);

            request.DataStore.AddToDataStore("ASServerUrl", responseObj["properties"]["serverFullName"], DataStoreType.Public);

            request.Logger.LogResource(request.DataStore, responseObj["properties"]["serverFullName"].ToString(),
                                       DeployedResourceType.AzureAnalysisServices, CreatedBy.BPST, DateTime.UtcNow.ToString("o"), string.Empty, sku);

            return(new ActionResponse(ActionStatus.Success, responseObj));
        }
Exemple #7
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            var azureToken    = request.DataStore.GetJson("AzureToken", "access_token");
            var subscription  = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId");
            var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup");
            var location      = request.DataStore.GetJson("SelectedLocation", "Name");
            var sitename      = request.DataStore.GetValue("FunctionName");

            AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup);

            // Force sync
            dynamic obj = new ExpandoObject();

            obj.subscriptionId       = subscription;
            obj.SiteId               = new ExpandoObject();
            obj.SiteId.Name          = sitename;
            obj.SiteId.ResourceGroup = resourceGroup;
            HttpResponseMessage result = await client.ExecuteGenericRequestWithHeaderAsync(HttpMethod.Post, "https://web1.appsvcux.ext.azure.com/websites/api/Websites/KuduSync", JsonUtility.GetJsonStringFromObject(obj));

            var resultBody = await result.Content.ReadAsStringAsync();


            while (true)
            {
                result = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get, $"/providers/Microsoft.Web/sites/{sitename}/deployments", "2016-08-01", "");

                resultBody = await result.Content.ReadAsStringAsync();

                if (result.IsSuccessStatusCode)
                {
                    var jobj = JsonUtility.GetJObjectFromJsonString(resultBody);
                    if (jobj["value"] != null && (jobj["value"] as JArray).Count > 0)
                    {
                        if (bool.Parse(jobj["value"][0]["properties"]["complete"].ToString()) == true)
                        {
                            break;
                        }
                    }
                }

                await Task.Delay(5000);
            }

            return(new ActionResponse(ActionStatus.Success));
        }
        private async Task <string> GetStorageAccountConnectionStringAsync(string azureToken, string subscriptionId, string storageAccountName, string storageAccountId)
        {
            var matches       = resourceGroupEx.Match(storageAccountId);
            var resourceGroup = matches.Success ? matches.Groups[1].Value : string.Empty;

            AzureHttpClient client = new AzureHttpClient(azureToken, subscriptionId, resourceGroup);

            var response = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, $"providers/Microsoft.Storage/storageAccounts/{storageAccountName}/listKeys", "2016-01-01", string.Empty);

            if (response.IsSuccessStatusCode)
            {
                var    subscriptionKeys = JsonUtility.GetJObjectFromJsonString(await response.Content.ReadAsStringAsync());
                string key = subscriptionKeys["keys"][0]["value"].ToString();
                return($"DefaultEndpointsProtocol=https;AccountName={storageAccountName};AccountKey={key};EndpointSuffix=core.windows.net");
            }

            return(string.Empty);
        }
Exemple #9
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            var azureToken    = request.DataStore.GetJson("AzureToken")["access_token"].ToString();
            var subscription  = request.DataStore.GetJson("SelectedSubscription")["SubscriptionId"].ToString();
            var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup");

            var functionName = request.DataStore.GetValue("FunctionName");


            AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup);

            HttpResponseMessage publishxml = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, "/providers/Microsoft.Web/sites/" +
                                                                                                       functionName + "/publishxml", "2015-02-01", string.Empty);

            var publishxmlfile = publishxml.Content.ReadAsStringAsync().Result;

            XDocument doc      = XDocument.Parse(publishxmlfile);
            XElement  xElement = doc.Element("publishData");

            if (xElement == null)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromStringValue(publishxmlfile), null, DefaultErrorCodes.DefaultErrorCode,
                                          "Unable to get publisher profile"));
            }

            var publishProfiles = xElement.Elements("publishProfile");
            var profile         = publishProfiles.SingleOrDefault(p => p.Attribute("publishMethod").Value == "FTP");

            if (profile == null)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromStringValue(publishxmlfile), null, DefaultErrorCodes.DefaultErrorCode,
                                          "Unable to find FTP profile"));
            }

            var ftpServer = profile.Attribute("publishUrl").Value;
            var username  = profile.Attribute("userName").Value;
            var password  = profile.Attribute("userPWD").Value;

            FtpUtilityTest.UploadFileToServer(ftpServer, username, password, "/ArticleExtractor/bin/Microsoft.KnowledgeMining.MainArticleExtractor.dll",
                                              request.ControllerModel.SiteCommonFilePath + "/Assemblies/Microsoft.KnowledgeMining.MainArticleExtractor.dll");

            return(new ActionResponse(ActionStatus.Success, JsonUtility.GetEmptyJObject()));
        }
Exemple #10
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            var azureToken    = request.DataStore.GetJson("AzureToken")["access_token"].ToString();
            var subscription  = request.DataStore.GetJson("SelectedSubscription")["SubscriptionId"].ToString();
            var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup");
            var logicAppName  = request.DataStore.GetValue("LogicAppNameHistorical");

            AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup);

            var response = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, $"providers/Microsoft.Logic/workflows/{logicAppName}/triggers/manual/listCallbackUrl", "2016-06-01", string.Empty);

            if (!response.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure));
            }

            var postUrl = JsonUtility.GetJObjectFromJsonString(await response.Content.ReadAsStringAsync());

            response = await client.ExecuteGenericRequestNoHeaderAsync(HttpMethod.Post, postUrl["value"].ToString(), string.Empty);

            return(new ActionResponse(ActionStatus.Success));
        }
Exemple #11
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            var azureToken       = request.DataStore.GetJson("AzureToken", "access_token");
            var subscription     = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId");
            var resourceGroup    = request.DataStore.GetValue("SelectedResourceGroup");
            var location         = request.DataStore.GetJson("SelectedLocation", "Name");
            var functionFileName = request.DataStore.GetValue("FunctionFileName");
            var functionName     = request.DataStore.GetValue("FunctionName");

            var sitename = request.DataStore.GetValue("SiteName");

            List <string> appSettings = new List <string>();

            if (request.DataStore.GetJson("AppSettingKeys") != null && !string.IsNullOrEmpty(request.DataStore.GetJson("AppSettingKeys")[0].ToString()))
            {
                foreach (var item in request.DataStore.GetJson("AppSettingKeys"))
                {
                    string key = (string)item;
                    appSettings.Add(key);
                }
            }

            AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup);

            var function = System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, $"Service/Data/{functionFileName}"));
            var jsonBody =
                "{\"files\":{\"run.csx\":\"test\"},\"config\":" +
                "{\"" +
                "bindings\":" +
                "[" +
                "{\"name\":\"req\"," +
                "\"type\":\"httpTrigger\"," +
                "\"direction\":\"in\"," +
                "\"webHookType\":\"genericJson\"," +
                "\"scriptFile\":\"run.csx\"" +
                "}" +
                "]," +
                "\"disabled\":false}}";

            JObject jsonRequest = JsonUtility.GetJObjectFromJsonString(jsonBody);

            jsonRequest["files"]["run.csx"] = function;
            string stringRequest = JsonUtility.GetJsonStringFromObject(jsonRequest);

            var functionCreated = await client.ExecuteWebsiteAsync(HttpMethod.Put, sitename, $"/api/functions/{functionName}",
                                                                   stringRequest);

            string response = await functionCreated.Content.ReadAsStringAsync();

            if (!functionCreated.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response),
                                          null, DefaultErrorCodes.DefaultErrorCode, "Error creating function"));
            }

            dynamic obj = new ExpandoObject();

            obj.subscriptionId       = subscription;
            obj.siteId               = new ExpandoObject();
            obj.siteId.Name          = sitename;
            obj.siteId.ResourceGroup = resourceGroup;
            obj.connectionStrings    = new ExpandoObject[appSettings.Count];
            if (appSettings.Count != 0)
            {
                for (int i = 0; i < appSettings.Count; i++)
                {
                    obj.connectionStrings[i] = new ExpandoObject();
                    obj.connectionStrings[i].ConnectionString = appSettings[i];
                    obj.connectionStrings[i].Name             = "connectionString" + i.ToString();
                    obj.connectionStrings[i].Type             = 2;
                }
            }
            obj.location = location;

            var appSettingCreated = await client.ExecuteGenericRequestWithHeaderAsync(HttpMethod.Post, @"https://web1.appsvcux.ext.azure.com/websites/api/Websites/UpdateConfigConnectionStrings",
                                                                                      JsonUtility.GetJsonStringFromObject(obj));

            response = await appSettingCreated.Content.ReadAsStringAsync();

            if (!appSettingCreated.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response),
                                          null, DefaultErrorCodes.DefaultErrorCode, "Error creating appsetting"));
            }

            var getFunction = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get,
                                                                                        $"/providers/Microsoft.Web/sites/{sitename}", "2015-08-01", string.Empty);

            response = await getFunction.Content.ReadAsStringAsync();

            if (!getFunction.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response),
                                          null, DefaultErrorCodes.DefaultErrorCode, "Error creating appsetting"));
            }

            return(new ActionResponse(ActionStatus.Success, JsonUtility.GetEmptyJObject()));
        }
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            var token         = request.DataStore.GetJson("AzureToken", "access_token");
            var subscription  = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId");
            var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup");
            var dataFactory   = resourceGroup + "SalesforceCopyFactory";

            var url = string.Format(getDatasetRelativeUrl, dataFactory);


            DataTable table = new DataTable();

            table.Columns.Add("Dataset");
            table.Columns.Add("Start");
            table.Columns.Add("End");
            table.Columns.Add("Status");

            var client = new AzureHttpClient(token, subscription, resourceGroup);

            var connection = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get,
                                                                                       url, apiVersion, string.Empty);

            if (!connection.IsSuccessStatusCode)
            {
                var result = connection.Content.ReadAsStringAsync().Result;
                return(new ActionResponse(ActionStatus.FailureExpected,
                                          JsonUtility.GetJObjectFromJsonString(result), null, DefaultErrorCodes.DefaultErrorCode,
                                          result));
            }

            var connectionData = JsonUtility.GetJObjectFromJsonString(connection.Content.ReadAsStringAsync().Result);

            if (connectionData != null)
            {
                foreach (var dataset in connectionData["value"])
                {
                    var nameParts = dataset["name"].ToString().Split('_');
                    if (nameParts[0] == "PreDeployment" && nameParts[2] == "Output")
                    {
                        Dictionary <string, string> queryParameters = new Dictionary <string, string>();
                        queryParameters.Add("start", DateTime.UtcNow.AddYears(-3).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture));
                        queryParameters.Add("end", DateTime.UtcNow.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture));
                        var sliceRelativeUrl = string.Concat(url, '/', dataset["name"].ToString());
                        sliceRelativeUrl.Remove(0, 1);
                        var sliceConnection = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get,
                                                                                                        sliceRelativeUrl + "/slices/",
                                                                                                        apiVersion,
                                                                                                        string.Empty,
                                                                                                        queryParameters
                                                                                                        );

                        if (!sliceConnection.IsSuccessStatusCode)
                        {
                            var result = connection.Content.ReadAsStringAsync().Result;
                            return(new ActionResponse(ActionStatus.FailureExpected,
                                                      JsonUtility.GetJObjectFromJsonString(result), null, DefaultErrorCodes.DefaultErrorCode,
                                                      result));
                        }

                        var data = JsonUtility.GetJObjectFromJsonString(sliceConnection.Content.ReadAsStringAsync().Result);

                        if (data["value"].Count() > 2)
                        {
                            int numberOfSlices = data["value"].Count() - 2;

                            var lastSlice = data["value"][numberOfSlices];

                            table.Rows.Add(new[] { dataset["name"].ToString().Split('_')[1], lastSlice["start"].ToString(), lastSlice["end"].ToString(), lastSlice["status"].ToString() });
                        }
                        else
                        {
                            table.Rows.Add(new[] { dataset["name"].ToString().Split('_')[1], string.Empty, string.Empty, data["value"][0]["status"].ToString() });
                        }
                    }
                }
            }

            var ready = from DataRow row in table.Rows
                        where (string)row["Status"] != "Ready"
                        select(string) row["Dataset"];

            var response = JsonUtility.CreateJObjectWithValueFromObject(table);

            if (ready.Count() > 0)
            {
                return(new ActionResponse(ActionStatus.BatchNoState, response));
            }
            else
            {
                return(new ActionResponse(ActionStatus.Success, response));
            }
        }
Exemple #13
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            var azureToken    = request.DataStore.GetJson("AzureToken")["access_token"].ToString();
            var subscription  = request.DataStore.GetJson("SelectedSubscription")["SubscriptionId"].ToString();
            var resourceGroup = request.DataStore.GetValue("SelectedResourceGroup");
            var location      = request.DataStore.GetJson("SelectedLocation")["Name"].ToString();

            var sitename            = request.DataStore.GetValue("SiteName");
            var sqlConnectionString = request.DataStore.GetValue("SqlConnectionString");
            var cognitiveServiceKey = request.DataStore.GetValue("CognitiveServiceKey");

            AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup);

            var functionCSharp = System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, "Service/Data/TweetFunctionCSharp.cs"));
            var jsonBody       =
                "{\"files\":{\"run.csx\":\"test\"},\"config\":" +
                "{\"" +
                "bindings\":" +
                "[" +
                "{\"name\":\"req\"," +
                "\"type\":\"httpTrigger\"," +
                "\"direction\":\"in\"," +
                "\"webHookType\":\"genericJson\"," +
                "\"scriptFile\":\"run.csx\"" +
                "}" +
                "]," +
                "\"disabled\":false}}";

            JObject jsonRequest = JsonUtility.GetJObjectFromJsonString(jsonBody);

            jsonRequest["files"]["run.csx"] = functionCSharp;
            string stringRequest = JsonUtility.GetJsonStringFromObject(jsonRequest);

            var functionCreated = await client.ExecuteWebsiteAsync(HttpMethod.Put, sitename, "/api/functions/TweetProcessingFunction",
                                                                   stringRequest);

            string response = await functionCreated.Content.ReadAsStringAsync();

            if (!functionCreated.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response),
                                          null, DefaultErrorCodes.DefaultErrorCode, "Error creating function"));
            }

            dynamic obj = new ExpandoObject();

            obj.subscriptionId       = subscription;
            obj.siteId               = new ExpandoObject();
            obj.siteId.Name          = sitename;
            obj.siteId.ResourceGroup = resourceGroup;
            obj.connectionStrings    = new ExpandoObject[2];
            obj.connectionStrings[0] = new ExpandoObject();
            obj.connectionStrings[0].ConnectionString = sqlConnectionString;
            obj.connectionStrings[0].Name             = "connectionString";
            obj.connectionStrings[0].Type             = 2;
            obj.connectionStrings[1] = new ExpandoObject();
            obj.connectionStrings[1].ConnectionString = cognitiveServiceKey;
            obj.connectionStrings[1].Name             = "subscriptionKey";
            obj.connectionStrings[1].Type             = 2;
            obj.location = location;

            var appSettingCreated = await client.ExecuteGenericRequestWithHeaderAsync(HttpMethod.Post, @"https://web1.appsvcux.ext.azure.com/websites/api/Websites/UpdateConfigConnectionStrings",
                                                                                      JsonUtility.GetJsonStringFromObject(obj));

            response = await appSettingCreated.Content.ReadAsStringAsync();

            if (!appSettingCreated.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response),
                                          null, DefaultErrorCodes.DefaultErrorCode, "Error creating appsetting"));
            }

            var getFunction = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get,
                                                                                        $"/providers/Microsoft.Web/sites/{sitename}", "2015-08-01", string.Empty);

            response = await getFunction.Content.ReadAsStringAsync();

            if (!getFunction.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response),
                                          null, DefaultErrorCodes.DefaultErrorCode, "Error creating appsetting"));
            }

            return(new ActionResponse(ActionStatus.Success, JsonUtility.GetEmptyJObject()));
        }
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            string azureToken    = request.DataStore.GetJson("AzureToken", "access_token");
            string subscription  = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId");
            string resourceGroup = request.DataStore.GetValue("SelectedResourceGroup");

            string deploymentName    = request.DataStore.GetValue("DeploymentName");
            string logicAppTrigger   = string.Empty;
            string logicAppName      = request.DataStore.GetValue("logicAppName");
            string sqlConnectionName = request.DataStore.GetValue("sqlConnectionName");

            // Read from file
            var logicAppJsonLocation = "Service/Notifier/notifierLogicApp.json";

            if (deploymentName == null)
            {
                deploymentName = request.DataStore.CurrentRoute;
            }

            var param = new AzureArmParameterGenerator();

            param.AddStringParam("logicAppTrigger", string.Empty);
            param.AddStringParam("logicAppName", logicAppName);
            param.AddStringParam("sqlConnectionName", request.DataStore.GetValue("sqlConnectionName"));
            param.AddStringParam("resourceGroup", resourceGroup);
            param.AddStringParam("subscription", subscription);

            var armTemplate      = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, logicAppJsonLocation)));
            var armParamTemplate = JsonUtility.GetJObjectFromObject(param.GetDynamicObject());

            armTemplate.Remove("parameters");
            armTemplate.Add("parameters", armParamTemplate["parameters"]);

            //Deploy logic app
            var helper             = new DeploymentHelper();
            var deploymentResponse = await helper.DeployLogicApp(subscription, azureToken, resourceGroup, armTemplate, deploymentName);

            if (!deploymentResponse.IsSuccess)
            {
                return(deploymentResponse);
            }

            //Get logic app trigger Url
            AzureHttpClient azureClient = new AzureHttpClient(azureToken, subscription, resourceGroup);
            var             response    = await azureClient.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Post, $"providers/Microsoft.Logic/workflows/{logicAppName}/triggers/manual/listCallbackUrl", "2016-06-01", string.Empty);

            if (!response.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure));
            }

            var postUrl = JsonUtility.GetJObjectFromJsonString(await response.Content.ReadAsStringAsync());

            // Deploy logic app with updated trigger URL for last action
            var newParam = new AzureArmParameterGenerator();

            newParam.AddStringParam("logicAppTrigger", postUrl["value"].ToString());
            newParam.AddStringParam("logicAppName", logicAppName);
            newParam.AddStringParam("sqlConnectionName", request.DataStore.GetValue("sqlConnectionName"));
            newParam.AddStringParam("resourceGroup", resourceGroup);
            newParam.AddStringParam("subscription", subscription);

            armParamTemplate = JsonUtility.GetJObjectFromObject(newParam.GetDynamicObject());
            armTemplate.Remove("parameters");
            armTemplate.Add("parameters", armParamTemplate["parameters"]);

            deploymentResponse = await helper.DeployLogicApp(subscription, azureToken, resourceGroup, armTemplate, deploymentName);

            if (!deploymentResponse.IsSuccess)
            {
                return(deploymentResponse);
            }

            request.DataStore.AddToDataStore("NotifierTriggerUrl", postUrl["value"].ToString());

            //Log logic app
            request.Logger.LogResource(request.DataStore, logicAppName,
                                       DeployedResourceType.LogicApp, CreatedBy.BPST, DateTime.UtcNow.ToString("o"));

            return(new ActionResponse(ActionStatus.Success));
        }
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            var    azureToken       = request.DataStore.GetJson("AzureToken", "access_token");
            var    subscription     = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId");
            var    resourceGroup    = request.DataStore.GetValue("SelectedResourceGroup");
            var    location         = request.DataStore.GetJson("SelectedLocation", "Name");
            var    apiKey           = request.DataStore.GetValue("apiKey");
            var    subscriptionKey  = request.DataStore.GetValue("subscriptionKey");
            string connectionString = request.DataStore.GetValueAtIndex("SqlConnectionString", "SqlServerIndex");
            var    sitename         = request.DataStore.GetValue("FunctionName");

            List <string> appSettings = new List <string>();

            if (request.DataStore.GetJson("AppSettingKeys") != null && !string.IsNullOrEmpty(request.DataStore.GetJson("AppSettingKeys")[0].ToString()))
            {
                foreach (var item in request.DataStore.GetJson("AppSettingKeys"))
                {
                    string key = (string)item;
                    appSettings.Add(key);
                }
            }

            AzureHttpClient client = new AzureHttpClient(azureToken, subscription, resourceGroup);

            dynamic obj = new ExpandoObject();

            obj.subscriptionId       = subscription;
            obj.siteId               = new ExpandoObject();
            obj.siteId.Name          = sitename;
            obj.siteId.ResourceGroup = resourceGroup;
            obj.connectionStrings    = new ExpandoObject[3];
            obj.connectionStrings[0] = new ExpandoObject();
            obj.connectionStrings[0].ConnectionString = apiKey;
            obj.connectionStrings[0].Name             = "apiKey";
            obj.connectionStrings[0].Type             = 2;
            obj.connectionStrings[1] = new ExpandoObject();
            obj.connectionStrings[1].ConnectionString = subscriptionKey;
            obj.connectionStrings[1].Name             = "subscriptionKey";
            obj.connectionStrings[1].Type             = 2;

            obj.connectionStrings[2] = new ExpandoObject();
            obj.connectionStrings[2].ConnectionString = connectionString;
            obj.connectionStrings[2].Name             = "ConnectionString";
            obj.connectionStrings[2].Type             = 2;
            obj.location = location;


            var appSettingCreated = await client.ExecuteGenericRequestWithHeaderAsync(HttpMethod.Post, @"https://web1.appsvcux.ext.azure.com/websites/api/Websites/UpdateConfigConnectionStrings",
                                                                                      JsonUtility.GetJsonStringFromObject(obj));

            string response = await appSettingCreated.Content.ReadAsStringAsync();

            if (!appSettingCreated.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response),
                                          null, DefaultErrorCodes.DefaultErrorCode, "Error creating appsetting"));
            }

            var getFunction = await client.ExecuteWithSubscriptionAndResourceGroupAsync(HttpMethod.Get,
                                                                                        $"/providers/Microsoft.Web/sites/{sitename}", "2015-08-01", string.Empty);

            response = await getFunction.Content.ReadAsStringAsync();

            if (!getFunction.IsSuccessStatusCode)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromJsonString(response),
                                          null, DefaultErrorCodes.DefaultErrorCode, "Error creating appsetting"));
            }

            return(new ActionResponse(ActionStatus.Success));
        }
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            string idSubscription    = request.DataStore.GetJson("SelectedSubscription", "SubscriptionId");
            string nameResourceGroup = request.DataStore.GetValue("SelectedResourceGroup");
            string tokenAzure        = request.DataStore.GetJson("AzureToken", "access_token");

            string databaseConnectionString = request.DataStore.GetValue("SqlConnectionString");
            string dataFactoryName          = request.DataStore.GetValue("dataFactoryName");

            string deploymentName = request.DataStore.GetValue("DeploymentName") ?? request.DataStore.CurrentRoute;

            var payload       = new AzureArmParameterGenerator();
            var armParameters = request.DataStore.GetJson("AzureArmParameters");

            if (armParameters != null)
            {
                foreach (var prop in armParameters.Children())
                {
                    string key   = prop.Path.Split('.').Last();
                    string value = prop.First().ToString();

                    payload.AddStringParam(key, value);
                }
            }

            payload.AddStringParam("databaseConnectionString", databaseConnectionString);
            payload.AddStringParam("factoryName", dataFactoryName);
            payload.AddStringParam("startTime", DateTime.UtcNow.ToString());

            var armTemplate      = JsonUtility.GetJObjectFromJsonString(System.IO.File.ReadAllText(Path.Combine(request.Info.App.AppFilePath, request.DataStore.GetValue("AzureArmFile"))));
            var armParamTemplate = JsonUtility.GetJObjectFromObject(payload.GetDynamicObject());

            armTemplate.Remove("parameters");
            armTemplate.Add("parameters", armParamTemplate["parameters"]);

            var deployment = new Microsoft.Azure.Management.Resources.Models.Deployment()
            {
                Properties = new DeploymentPropertiesExtended()
                {
                    Template   = armTemplate.ToString(),
                    Parameters = JsonUtility.GetEmptyJObject().ToString()
                }
            };

            ResourceManagementClient client = new ResourceManagementClient(new TokenCloudCredentials(idSubscription, tokenAzure));
            var validate = await client.Deployments.ValidateAsync(nameResourceGroup, deploymentName, deployment, new CancellationToken());

            if (!validate.IsValid)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetJObjectFromObject(validate), null, DefaultErrorCodes.DefaultErrorCode,
                                          $"Azure:{validate.Error.Message} Details:{validate.Error.Details}"));
            }

            var deploymentItem = await client.Deployments.CreateOrUpdateAsync(nameResourceGroup, deploymentName, deployment, new CancellationToken());

            ActionResponse r = await WaitForAction(client, nameResourceGroup, deploymentName);

            request.DataStore.AddToDataStore("ArmOutput", r.DataStore.GetValue("ArmOutput"), DataStoreType.Public);

            if (!r.IsSuccess)
            {
                return(r);
            }

            // Active the function trigger
            AzureHttpClient httpClient = new AzureHttpClient(tokenAzure, idSubscription, nameResourceGroup);
            var             response   = await httpClient.ExecuteWithSubscriptionAndResourceGroupAsync(
                HttpMethod.Post,
                $"providers/Microsoft.DataFactory/factories/{dataFactoryName}/triggers/DefaultTrigger/start",
                "2017-09-01-preview",
                string.Empty);

            if (!response.IsSuccessStatusCode)
            {
                var error = await response.Content.ReadAsStringAsync();

                return(new ActionResponse(ActionStatus.Failure, error, null, DefaultErrorCodes.DefaultErrorCode, "Active trigger"));
            }

            return(r);
        }