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)));
        }
Example #2
0
        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));
        }
Example #3
0
        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));
        }
Example #4
0
        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"
                    }));
                }
            }
        }
Example #5
0
    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"));
    }