From a4eb4a11386546256cea7cfd034ce0c64f0bd9af Mon Sep 17 00:00:00 2001 From: Namrata Date: Fri, 3 Jul 2020 11:17:54 +0530 Subject: [PATCH 1/3] generic trigger --- fappdeploy/httptrigger/GHubEventDispatch.cs | 103 ++++++++++++-------- 1 file changed, 61 insertions(+), 42 deletions(-) diff --git a/fappdeploy/httptrigger/GHubEventDispatch.cs b/fappdeploy/httptrigger/GHubEventDispatch.cs index 751904d..55e588a 100644 --- a/fappdeploy/httptrigger/GHubEventDispatch.cs +++ b/fappdeploy/httptrigger/GHubEventDispatch.cs @@ -28,31 +28,77 @@ using System.Text; using System.Threading.Tasks; using Microsoft.Azure.WebJobs.Extensions.EventGrid; +using System.Collections.Generic; public static class GridEventHandler{ - [FunctionName("PrettyPoisons")] + + private static string ParseEventGridValidationCode(dynamic requestObject) + { + var webhook_res = string.Empty; + if (requestObject != null && requestObject[0]["data"] != null){ + var validationCode = requestObject[0].data.validationCode; + if(validationCode != null){ + webhook_res = Newtonsoft.Json.JsonConvert.SerializeObject(new Newtonsoft.Json.Linq.JObject {["validationResponse"]= validationCode}); + } + } + return webhook_res; + } + + private static string ParseMachineLearningEvent(dynamic requestObject) + { + return requestObject[0]["data"]; + } + + private static string ParseBlobStorageEvent(dynamic requestObject) + { + return requestObject[0]["data"]; + } + + private static string ParseContainerRegistryEvent(dynamic requestObject) + { + return requestObject[0]["data"]; + } + + [FunctionName("generic_triggers")] public static async Task Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequestMessage req, ILogger log, ExecutionContext context) { log.LogInformation("C# HTTP trigger function processed a request."); string requestBody = await req.Content.ReadAsStringAsync(); dynamic requestObject = JsonConvert.DeserializeObject(requestBody); - var webhook_res = string.Empty; var current_event = requestObject[0]["eventType"].ToString(); if (current_event == "Microsoft.EventGrid.SubscriptionValidationEvent" ){ - if (requestObject != null && requestObject[0]["data"] != null){ - var validationCode = requestObject[0].data.validationCode; - if(validationCode != null){ - webhook_res= Newtonsoft.Json.JsonConvert.SerializeObject(new Newtonsoft.Json.Linq.JObject {["validationResponse"]= validationCode}); + string webhook_res = ParseEventGridValidationCode(requestObject); + if(!string.IsNullOrEmpty(webhook_res)){ return (ActionResult)new OkObjectResult($"{webhook_res}"); - } } } - - if (current_event.Contains("Microsoft.MachineLearningServices")) + var queryParams = System.Web.HttpUtility.ParseQueryString(req.RequestUri.Query); + string repo_name = queryParams.Get("repoName"); + + if(repo_name!="") { + log.LogInformation("fetching repo name from query parameters."+repo_name); + } + + string[] event_data = current_event.Split("."); + string event_source = ""; + string event_type = ""; + + if(event_data.Length>1){ + event_source = event_data[1]; + + if(event_source == "MachineLearningServices"){ + ParseMachineLearningEvent(requestObject); + } + } + + if(event_data.Length>2) + { + event_type = event_data[2].ToLower(); + using (var httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); @@ -60,8 +106,6 @@ public static async Task Run([HttpTrigger(AuthorizationLevel.Func httpClient.DefaultRequestHeaders.Accept.Clear(); var PATTOKEN = Environment.GetEnvironmentVariable("PAT_TOKEN", EnvironmentVariableTarget.Process); - // var repo_name = Environment.GetEnvironmentVariable("REPO_NAME", EnvironmentVariableTarget.Process); - var repo_name = ""; if(requestObject[0]["data"]["runTags"]==null || requestObject[0]["data"]["runTags"]["githuB_REPOSITORY"]==null) { @@ -76,35 +120,10 @@ public static async Task Run([HttpTrigger(AuthorizationLevel.Func httpClient.DefaultRequestHeaders.Add("Authorization", "token "+PATTOKEN); - var client_payload = new Newtonsoft.Json.Linq.JObject { ["unit "] = false, ["integration"] = true, ["data"] = requestObject[0]["data"]}; - var event_types = "unknown"; - - if(current_event == "Microsoft.MachineLearningServices.RunCompleted") - { - event_types = "run-completed"; - } - else if(current_event == "Microsoft.MachineLearningServices.RunStatusChanged") - { - event_types = "run-status-changed"; - } - else if(current_event == "Microsoft.MachineLearningServices.ModelRegistered") - { - event_types = "model-registered"; - } - else if(current_event == "Microsoft.MachineLearningServices.ModelDeployed") - { - event_types = "model-deployed"; - } - else if(current_event == "Microsoft.MachineLearningServices.DatasetDriftDetected") - { - event_types = "data-drift-detected"; - } - else - { - event_types = "unknown"; - } - - var payload = Newtonsoft.Json.JsonConvert.SerializeObject(new Newtonsoft.Json.Linq.JObject { ["event_type"] = event_types, ["client_payload"] = client_payload }); + var client_payload = new Newtonsoft.Json.Linq.JObject { ["unit "] = false, ["integration"] = true, + ["data"] = requestObject[0]["data"], ["event_source"] = event_source}; + + var payload = Newtonsoft.Json.JsonConvert.SerializeObject(new Newtonsoft.Json.Linq.JObject { ["event_type"] = event_type, ["client_payload"] = client_payload }); var content = new StringContent(payload, Encoding.UTF8, "application/json"); HttpResponseMessage response = await httpClient.PostAsync("https://api.github.com/repos/"+repo_name+"/dispatches", content); @@ -113,6 +132,6 @@ public static async Task Run([HttpTrigger(AuthorizationLevel.Func } } - return (ActionResult)new OkObjectResult(current_event); + return (ActionResult)new OkObjectResult(current_event); } -} +} \ No newline at end of file From 8f7090182a0ec34756796156c6dc90f949203eed Mon Sep 17 00:00:00 2001 From: Namrata Date: Fri, 3 Jul 2020 12:43:04 +0530 Subject: [PATCH 2/3] resolving issues --- fappdeploy/httptrigger/GHubEventDispatch.cs | 40 +++++++++------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/fappdeploy/httptrigger/GHubEventDispatch.cs b/fappdeploy/httptrigger/GHubEventDispatch.cs index 55e588a..34c3907 100644 --- a/fappdeploy/httptrigger/GHubEventDispatch.cs +++ b/fappdeploy/httptrigger/GHubEventDispatch.cs @@ -75,28 +75,31 @@ public static async Task Run([HttpTrigger(AuthorizationLevel.Func } } - var queryParams = System.Web.HttpUtility.ParseQueryString(req.RequestUri.Query); - string repo_name = queryParams.Get("repoName"); - - if(repo_name!="") - { - log.LogInformation("fetching repo name from query parameters."+repo_name); - } - string[] event_data = current_event.Split("."); - string event_source = ""; - string event_type = ""; + string event_source = string.Empty; + string event_type = string.Empty; + string req_data = string.Empty; if(event_data.Length>1){ event_source = event_data[1]; if(event_source == "MachineLearningServices"){ - ParseMachineLearningEvent(requestObject); + req_data = ParseMachineLearningEvent(requestObject); + } + if(event_source == "Storage"){ + req_data = ParseBlobStorageEvent(requestObject); + } + if(event_source == "ContainerRegistry"){ + req_data = ParseContainerRegistryEvent(requestObject); } } - if(event_data.Length>2) + var queryParams = System.Web.HttpUtility.ParseQueryString(req.RequestUri.Query); + string repo_name = queryParams.Get("repoName"); + + if(event_data.Length>2 && !string.IsNullOrEmpty(repo_name)) { + log.LogInformation("fetching repo name from query parameters."+repo_name); event_type = event_data[2].ToLower(); using (var httpClient = new HttpClient()) @@ -107,21 +110,10 @@ public static async Task Run([HttpTrigger(AuthorizationLevel.Func var PATTOKEN = Environment.GetEnvironmentVariable("PAT_TOKEN", EnvironmentVariableTarget.Process); - if(requestObject[0]["data"]["runTags"]==null || requestObject[0]["data"]["runTags"]["githuB_REPOSITORY"]==null) - { - repo_name = Environment.GetEnvironmentVariable("REPO_NAME", EnvironmentVariableTarget.Process); - log.LogInformation("Fetching repo name from Environment variables."); - } - else - { - repo_name = requestObject[0]["data"]["runTags"]["githuB_REPOSITORY"].ToString(); - log.LogInformation("Fetching repo name from runTags"); - } - httpClient.DefaultRequestHeaders.Add("Authorization", "token "+PATTOKEN); var client_payload = new Newtonsoft.Json.Linq.JObject { ["unit "] = false, ["integration"] = true, - ["data"] = requestObject[0]["data"], ["event_source"] = event_source}; + ["data"] = req_data, ["event_source"] = event_source}; var payload = Newtonsoft.Json.JsonConvert.SerializeObject(new Newtonsoft.Json.Linq.JObject { ["event_type"] = event_type, ["client_payload"] = client_payload }); From 94a70e722e534f33b1f70d051e8fbca42390ef50 Mon Sep 17 00:00:00 2001 From: cs1170353 <36559702+cs1170353@users.noreply.github.com> Date: Fri, 3 Jul 2020 16:11:26 +0530 Subject: [PATCH 3/3] Update GHubEventDispatch.cs --- fappdeploy/httptrigger/GHubEventDispatch.cs | 30 ++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/fappdeploy/httptrigger/GHubEventDispatch.cs b/fappdeploy/httptrigger/GHubEventDispatch.cs index 34c3907..6f11ec4 100644 --- a/fappdeploy/httptrigger/GHubEventDispatch.cs +++ b/fappdeploy/httptrigger/GHubEventDispatch.cs @@ -44,17 +44,17 @@ private static string ParseEventGridValidationCode(dynamic requestObject) return webhook_res; } - private static string ParseMachineLearningEvent(dynamic requestObject) + private static dynamic ParseMachineLearningEvent(dynamic requestObject) { return requestObject[0]["data"]; } - private static string ParseBlobStorageEvent(dynamic requestObject) + private static dynamic ParseBlobStorageEvent(dynamic requestObject) { return requestObject[0]["data"]; } - private static string ParseContainerRegistryEvent(dynamic requestObject) + private static dynamic ParseContainerRegistryEvent(dynamic requestObject) { return requestObject[0]["data"]; } @@ -78,10 +78,19 @@ public static async Task Run([HttpTrigger(AuthorizationLevel.Func string[] event_data = current_event.Split("."); string event_source = string.Empty; string event_type = string.Empty; - string req_data = string.Empty; - + if(event_data.Length>1){ event_source = event_data[1]; + } + + var queryParams = System.Web.HttpUtility.ParseQueryString(req.RequestUri.Query); + string repo_name = queryParams.Get("repoName"); + + if(event_data.Length>2 && !string.IsNullOrEmpty(repo_name)) + { + log.LogInformation("fetching repo name from query parameters."+repo_name); + event_type = event_data[2].ToLower(); + var req_data = requestObject[0]["data"]; if(event_source == "MachineLearningServices"){ req_data = ParseMachineLearningEvent(requestObject); @@ -92,15 +101,6 @@ public static async Task Run([HttpTrigger(AuthorizationLevel.Func if(event_source == "ContainerRegistry"){ req_data = ParseContainerRegistryEvent(requestObject); } - } - - var queryParams = System.Web.HttpUtility.ParseQueryString(req.RequestUri.Query); - string repo_name = queryParams.Get("repoName"); - - if(event_data.Length>2 && !string.IsNullOrEmpty(repo_name)) - { - log.LogInformation("fetching repo name from query parameters."+repo_name); - event_type = event_data[2].ToLower(); using (var httpClient = new HttpClient()) { @@ -126,4 +126,4 @@ public static async Task Run([HttpTrigger(AuthorizationLevel.Func return (ActionResult)new OkObjectResult(current_event); } -} \ No newline at end of file +}