public static async Task <HttpResponseMessage> RunClassificationForQueryCommand(
            [HttpTrigger(AuthorizationLevel.Function, "POST", Route = @"CQRS/RunClassificationForQuery/{queryIdentifier}")] HttpRequestMessage req,
            string queryIdentifier
            )
        {
            #region Tracing telemetry
            Activity.Current.AddTag("Query Identifier", queryIdentifier);
            #endregion

            // 1 - Read the classifierRequestData from the body
            ClassifierRequestedEventGridEventData data = await req.Content.ReadAsAsync <ClassifierRequestedEventGridEventData>();

            if (data != null)
            {
                if (string.IsNullOrWhiteSpace(data.InstanceKey))
                {
                    data.InstanceKey = queryIdentifier;
                }
                await RunClassificationForQuery(data);

                return(req.CreateResponse(System.Net.HttpStatusCode.OK));
            }
            else
            {
                // The classification cannot be run if there is no body supplied
                return(req.CreateResponse(System.Net.HttpStatusCode.BadRequest,
                                          "The classification details were not correctly specified in the request body"));
            }
        }
Example #2
0
 public static async Task OnQueryClassificationHandler([EventGridTrigger] EventGridEvent eventGridEvent)
 {
     if (eventGridEvent != null)
     {
         // Get the data from the event that describes what classification is requested
         ClassifierRequestedEventGridEventData classifierRequestData = eventGridEvent.Data as ClassifierRequestedEventGridEventData;
         await ClassifierHandlerFunctions.RunClassificationForQuery(classifierRequestData);
     }
 }
        public static async Task OnCommandClassificationHandler([EventGridTrigger] EventGridEvent eventGridEvent)
        {
            if (eventGridEvent != null)
            {
                // Get the data from the event that describes what classification is requested
                ClassifierRequestedEventGridEventData classifierRequestData = eventGridEvent.Data.ToObjectFromJson <ClassifierRequestedEventGridEventData>();

                await ClassifierHandlerFunctions.RunClassificationForCommand(classifierRequestData);
            }
        }
        /// <summary>
        /// A classification has been requested in processing a query.
        /// This function will run it and attach the result back to the query
        /// event stream when complete.
        /// </summary>
        public static async Task RunClassificationForQuery(
            ClassifierRequestedEventGridEventData classifierRequestData)
        {
            if (classifierRequestData != null)
            {
                // handle the classifier request
                ClassificationResponse response   = null;
                Classification         classifier = new Classification(
                    new ClassificationAttribute(
                        classifierRequestData.ClassifierRequest.DomainName,
                        classifierRequestData.ClassifierRequest.EntityTypeName,
                        classifierRequestData.ClassifierRequest.InstanceKey,
                        classifierRequestData.ClassifierRequest.ClassifierTypeName
                        ));

                if (classifier != null)
                {
                    if (_classificationMap == null)
                    {
                        _classificationMap = ClassificationMaps.CreateDefaultClassificationMaps();
                    }
                    // get the classifier class - must implement TClassification : IClassification, new()
                    IClassification classificationToRun = _classificationMap.CreateClassificationClass(classifier.ClassifierTypeName);
                    if (classificationToRun != null)
                    {
                        response = await classifier.Classify(classificationToRun, null);
                    }
                }

                if (response != null)
                {
                    // and post the result back to the query that asked for it
                    Query qrySource = new Query(classifierRequestData.DomainName,
                                                classifierRequestData.EntityTypeName,
                                                classifierRequestData.InstanceKey);


                    if (qrySource != null)
                    {
                        await qrySource.PostClassifierResponse(classifierRequestData.ClassifierRequest.DomainName,
                                                               classifierRequestData.ClassifierRequest.EntityTypeName,
                                                               classifierRequestData.ClassifierRequest.InstanceKey,
                                                               classifierRequestData.ClassifierRequest.ClassifierTypeName,
                                                               response.AsOfDate,
                                                               classifierRequestData.ClassifierRequest.CorrelationIdentifier,
                                                               response.AsOfSequence,
                                                               response.Result
                                                               );
                    }
                }
            }
        }
Example #5
0
        public static async Task OnQueryClassificationHandler([EventGridTrigger] EventGridEvent eventGridEvent)
        {
            if (eventGridEvent != null)
            {
                // Get the data from the event that describes what classification is requested
                ClassifierRequestedEventGridEventData classifierRequestData = eventGridEvent.Data as ClassifierRequestedEventGridEventData;
                if (classifierRequestData != null)
                {
                    // handle the classifier request
                    ClassificationResponse response   = null;
                    Classification         classifier = new Classification(
                        new ClassificationAttribute(
                            classifierRequestData.ClassifierRequest.DomainName,
                            classifierRequestData.ClassifierRequest.EntityTypeName,
                            classifierRequestData.ClassifierRequest.InstanceKey,
                            classifierRequestData.ClassifierRequest.ClassifierTypeName
                            ));

                    if (classifier != null)
                    {
                        // get the classifier class - must implement TClassification : IClassification, new()
                        IClassification classificationToRun = Classification.GetClassifierByName(classifier.ClassifierTypeName);
                        if (classificationToRun != null)
                        {
                            response = await classifier.Classify(classificationToRun, null);
                        }
                    }

                    if (response != null)
                    {
                        // and post the result back to the query that asked for it
                        Query qrySource = new Query(classifierRequestData.DomainName,
                                                    classifierRequestData.EntityTypeName,
                                                    classifierRequestData.InstanceKey);


                        if (qrySource != null)
                        {
                            await qrySource.PostClassifierResponse(classifierRequestData.ClassifierRequest.DomainName,
                                                                   classifierRequestData.ClassifierRequest.EntityTypeName,
                                                                   classifierRequestData.ClassifierRequest.InstanceKey,
                                                                   classifierRequestData.ClassifierRequest.ClassifierTypeName,
                                                                   response.AsOfDate,
                                                                   classifierRequestData.ClassifierRequest.CorrelationIdentifier,
                                                                   response.AsOfSequence,
                                                                   response.Result
                                                                   );
                        }
                    }
                }
            }
        }