public JObject Post([FromBody] object request) { //Deserializing the request var eventGridEvent = JsonConvert.DeserializeObject <EventGridEvent[]>(request.ToString()) .FirstOrDefault(); var data = eventGridEvent.Data as JObject; // Validate whether EventType is of "Microsoft.EventGrid.SubscriptionValidationEvent" if (string.Equals(eventGridEvent.EventType, Constants.SubscriptionValidationEvent, StringComparison.OrdinalIgnoreCase)) { var eventData = data.ToObject <SubscriptionValidationEventData>(); var responseData = new SubscriptionValidationResponseData { ValidationResponse = eventData.ValidationCode }; if (responseData.ValidationResponse != null) { return(JObject.FromObject(responseData)); } } else { // Handle your custom event var eventData = data.ToObject <CustomData>(); var customEvent = CustomEvent <CustomData> .CreateCustomEvent(eventData); return(JObject.FromObject(customEvent)); } return(new JObject(new HttpResponseMessage(System.Net.HttpStatusCode.OK))); }
public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage request, TraceWriter log) { log.Info("C# HTTP trigger function processed a request."); var requestMessageContent = await request.Content.ReadAsStringAsync(); var eventGridEvent = JsonConvert.DeserializeObject <EventGridEvent[]>(requestMessageContent) .FirstOrDefault(); var data = eventGridEvent.Data as JObject; // Validate whether EventType is of "Microsoft.EventGrid.SubscriptionValidationEvent" if (string.Equals(eventGridEvent.EventType, Constants.SubscriptionValidationEvent, StringComparison.OrdinalIgnoreCase)) { var eventData = data.ToObject <SubscriptionValidationEventData>(); var responseData = new SubscriptionValidationResponseData { ValidationResponse = eventData.ValidationCode }; if (responseData.ValidationResponse != null) { return(request.CreateResponse(HttpStatusCode.OK, responseData)); } } else { // Handle your custom event var eventData = data.ToObject <CustomData>(); var customEvent = CustomEvent <CustomData> .CreateCustomEvent(eventData); return(request.CreateResponse(HttpStatusCode.OK, customEvent)); } return(request.CreateResponse(HttpStatusCode.OK)); }
public async Task <HttpResponseMessage> Post(HttpRequestMessage request) { var requestMessageContent = await request.Content.ReadAsStringAsync(); var eventGridEvent = JsonConvert.DeserializeObject <EventGridEvent[]>(requestMessageContent) .FirstOrDefault(); var data = eventGridEvent.Data as JObject; // Validate whether EventType is of "Microsoft.EventGrid.SubscriptionValidationEvent" if (string.Equals(eventGridEvent.EventType, Constants.SubscriptionValidationEvent, StringComparison.OrdinalIgnoreCase)) { var eventData = data.ToObject <SubscriptionValidationEventData>(); var responseData = new SubscriptionValidationResponseData { ValidationResponse = eventData.ValidationCode }; if (responseData.ValidationResponse != null) { return(request.CreateResponse(HttpStatusCode.OK, responseData)); } } else { // Handle your custom event var eventData = data.ToObject <CustomData>(); var customEvent = CustomEvent <CustomData> .CreateCustomEvent(eventData); return(request.CreateResponse(HttpStatusCode.OK, customEvent)); } return(request.CreateResponse(HttpStatusCode.OK)); }
public static async Task <object> Run([HttpTrigger(WebHookType = "genericJson")] HttpRequestMessage req, TraceWriter log) { log.Info($"{nameof(PatientDataBulkImportFunc)} triggered on {DateTime.UtcNow}"); using (var patientTelemetry = new PatientTelemetry( Environment.GetEnvironmentVariable(CommonConstants.InstumentationKey, EnvironmentVariableTarget.Process), nameof(PatientDataBulkImportFunc))) { try { string jsonContent = await req.Content.ReadAsStringAsync(); EventGridEvent[] message = JsonConvert.DeserializeObject <EventGridEvent[]>(jsonContent); patientTelemetry.Request(nameof(PatientDataBulkImportFunc)); // If the request is for subscription validation, send back the validation code. if (string.Equals((string)message[0].EventType, CommonConstants.SubscriptionValidationEvent, StringComparison.OrdinalIgnoreCase)) { JObject dataObject = message[0].Data as JObject; var eventData = dataObject.ToObject <SubscriptionValidationEventData>(); var responseData = new SubscriptionValidationResponseData(); responseData.ValidationResponse = eventData.ValidationCode; return(req.CreateResponse(HttpStatusCode.OK, responseData)); } //filter event type if (message[0].EventType != Events.BlobCreatedEvent) { patientTelemetry.Unsupported(); return(req.CreateResponse(HttpStatusCode.OK, new { result = $"cannot process event {message[0].EventType}" })); } JObject blobObject = message[0].Data as JObject; //get resouces from key vault var appResources = await Settings.GetAppResources(); var storageEvent = blobObject.ToObject <BlobData>(); string patientDataBlobUrl = storageEvent.url; new SqlEncryptionHelper(); patientTelemetry.IngestionStarted(); var patientDataIngestion = new PatientDataIngestion(appResources.StorageAccessKey, appResources.PatientDbConnectionString, appResources.PatientDataTableName); var totalRowsProcessed = await patientDataIngestion.Process(patientDataBlobUrl); var totalRecordsStored = await patientDataIngestion.GetTotalPatientRecordsStored(); patientTelemetry.IngestionCompleted(); patientTelemetry.Metrics( new Dictionary <string, double> { { Metrics.RowsProcessed, totalRowsProcessed }, { Metrics.RowsStored, totalRecordsStored } }); patientTelemetry.Success(); return(req.CreateResponse(HttpStatusCode.OK, new { result = "success" })); } catch (Exception ex) { patientTelemetry.Error(ex); return(req.CreateResponse(HttpStatusCode.InternalServerError, new { result = "failed" })); } } }
public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req, TraceWriter log) { log.Info($"C# HTTP trigger function begun"); string response = string.Empty; const string SubscriptionValidationEvent = "Microsoft.EventGrid.SubscriptionValidationEvent"; const string StorageBlobCreatedEvent = "Microsoft.Storage.BlobCreated"; const string ResourceWriteSuccessEvent = "Microsoft.Resources.ResourceWriteSuccess"; var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID"); var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID"); var secret = Environment.GetEnvironmentVariable("AZURE_SECRET"); var subscriptionId = "45f7e5d7-593c-47c4-989c-d4745c4a175c"; string requestContent = await req.Content.ReadAsStringAsync(); EventGridEvent[] eventGridEvents = JsonConvert.DeserializeObject <EventGridEvent[]>(requestContent); foreach (EventGridEvent eventGridEvent in eventGridEvents) { JObject dataObject = eventGridEvent.Data as JObject; // Deserialize the event data into the appropriate type based on event type if (string.Equals(eventGridEvent.EventType, SubscriptionValidationEvent, StringComparison.OrdinalIgnoreCase)) { var eventData = dataObject.ToObject <SubscriptionValidationEventData>(); log.Info($"Got SubscriptionValidation event data, validation code: {eventData.ValidationCode}, topic: {eventGridEvent.Topic}"); // Do any additional validation (as required) and then return back the below response var responseData = new SubscriptionValidationResponseData(); responseData.ValidationResponse = eventData.ValidationCode; return(req.CreateResponse(HttpStatusCode.OK, responseData)); } else if (string.Equals(eventGridEvent.EventType, ResourceWriteSuccessEvent, StringComparison.OrdinalIgnoreCase)) { var eventData = dataObject.ToObject <ResourceWriteSuccessData>(); log.Info($"Got VM event data {eventData}"); var azureServiceTokenProvider = new AzureServiceTokenProvider(); try { var serviceCreds = new TokenCredentials(await azureServiceTokenProvider.GetAccessTokenAsync("https://management.azure.com/").ConfigureAwait(false)); var resourceManagementClient = new ResourceManagementClient(serviceCreds) { SubscriptionId = subscriptionId }; var resourceState = await resourceManagementClient.Resources.GetByIdAsync(eventData.ResourceUri, "2017-12-01"); var properties = resourceState.Properties.ToString() .Replace(Environment.NewLine, String.Empty) .Replace("\\", String.Empty).Replace(" ", String.Empty); log.Info(properties); response = properties; } catch (Exception exp) { log.Info($"Something went wrong: {exp.Message}"); } } } return(req.CreateResponse(HttpStatusCode.OK, response, "application/json")); }