Example #1
0
 /// <summary>
 /// The date rule parser.
 /// </summary>
 /// <param name="cache"></param>
 /// <param name="calendars"></param>
 /// <param name="nameSpace"></param>
 /// <returns></returns>
 public static IDateRuleParser GetDateRuleParser(ICoreCache cache, string[] calendars, string nameSpace)
 {
     if (calendars != null)
     {
         var path         = nameSpace + "." + BusinessCentreDateRulesProp.GenericName;
         var loadedObject = cache.LoadObject <DateRules>(path);
         var dps          = new DateRuleParser(calendars, loadedObject.DateRuleProfile);
         return(dps);
     }
     return(null);
 }
        /// <summary>
        /// Tries to get the algorithm.
        /// </summary>
        /// <param name="nameSpace"></param>
        /// <param name="pricingStructureType"></param>
        /// <param name="algorithmName"></param>
        /// <param name="logger"></param>
        /// <param name="cache">The value</param>
        /// <returns>Whether the property existed or not</returns>
        public Algorithm GetAlgorithm(ILogger logger, ICoreCache cache, String nameSpace, PricingStructureTypeEnum pricingStructureType, string algorithmName)
        {
            Algorithm algorithm = null;

            if (cache != null)
            {
                try
                {
                    algorithm = cache.LoadObject <Algorithm>(nameSpace + "." + AlgorithmsProp.GenericName + "." + pricingStructureType + "." + algorithmName);
                }
                catch (Exception ex)
                {
                    logger.Log(ex);
                }
            }
            return(algorithm);
        }
Example #3
0
        private static void HandleSpecificRequest <R, W>(ILogger logger, ICoreCache cache, string requestItemName)
            where R : RequestBase
            where W : WorkstepBase <RequestBase, HandlerResponse>, IRequestHandler <RequestBase, HandlerResponse>, new()
        {
            R request = cache.LoadObject <R>(requestItemName);

            if (request == null)
            {
                throw new ApplicationException(String.Format("Request not found (type={0},name='{1}')", typeof(R).Name, requestItemName));
            }

            // publish 'initial' status
            HandlerResponse response = new HandlerResponse()
            {
                RequestId    = request.RequestId,
                RequesterId  = request.RequesterId,
                Status       = RequestStatusEnum.Commencing,
                CommenceTime = DateTimeOffset.Now.ToString("o")
            };

            cache.SaveObject <HandlerResponse>(response);
            try
            {
                using (IRequestHandler <RequestBase, HandlerResponse> handler = new W() as IRequestHandler <RequestBase, HandlerResponse>)
                {
                    handler.InitialiseRequest(logger, cache);
                    handler.ProcessRequest(request, response);
                }
            }
            catch (OperationCanceledException cancelExcp)
            {
                response.Status       = RequestStatusEnum.Cancelled;
                response.CancelReason = cancelExcp.Message;
            }
            catch (Exception outerExcp)
            {
                response.Status      = RequestStatusEnum.Faulted;
                response.FaultDetail = new ExceptionDetail(outerExcp);
                logger.Log(outerExcp);
            }
            // publish 'completed' status
            cache.SaveObject <HandlerResponse>(response);
        }
Example #4
0
        /// <summary>
        /// Significant date.
        /// </summary>
        /// <param name="cache">The cache.</param>
        /// <param name="businessCenters">The city names.</param>
        /// <param name="nameSpace">The clients namespace</param>
        /// <returns></returns>
        private static List <SignificantDay> GetBusinessCentreHolidayDates(ICoreCache cache, IEnumerable <string> businessCenters, string nameSpace)
        {
            var dateList = new List <SignificantDay>();
            //The new filter with OR on arrays..
            var path = nameSpace + "." + BusinessCenterCalendarProp.GenericName;

            foreach (var centre in businessCenters)
            {
                var identifier   = path + '.' + centre;
                var loadedObject = cache.LoadObject <BusinessCenterCalendar>(identifier);
                if (loadedObject?.Holidays != null)
                {
                    var dates = loadedObject.Holidays.Select(dr => (DateTime)dr.Item);

                    // Get the dates as one list
                    var significantDates
                        = dates.Select(dr => new SignificantDay {
                        Date = dr, ObservedSignificantDayDate = dr, Name = centre
                    });
                    dateList.AddRange(significantDates);
                }
            }
            return(dateList);
        }
Example #5
0
        public static int HandleRequest(ILogger logger, ICoreCache cache, Guid requestId, string hostInstance)
        {
            int result = 0;

            if (requestId == Guid.Empty)
            {
                throw new ArgumentNullException("requestId");
            }

            string requestItemName = (new AssignedWorkflowRequest()
            {
                RequestId = requestId.ToString(),
                WorkerHostComputer = Environment.MachineName,
                WorkerHostInstance = hostInstance
            }).NetworkKey;
            AssignedWorkflowRequest request = cache.LoadObject <AssignedWorkflowRequest>(requestItemName);

            if (request == null)
            {
                throw new ArgumentException("Cannot find request name: ", requestItemName);
            }

            logger.LogDebug("---------- request header details");
            logger.LogDebug("Id       : {0}", requestId);
            logger.LogDebug("Computer : {0}", request.WorkerHostComputer);
            logger.LogDebug("Instance : {0}", request.WorkerHostInstance);
            logger.LogDebug("Data Type: {0}", request.RequestDataType);
            logger.LogDebug("Item Name: {0}", request.RequestItemName);
            logger.LogDebug("---------- request handler executing");
            try
            {
                if (request.RequestDataType.Equals(typeof(TradeValuationRequest).FullName))
                {
                    HandleSpecificRequest <TradeValuationRequest, WFCalculateTradeValuation>(logger, cache, request.RequestItemName);
                }
                else if (request.RequestDataType.Equals(typeof(PortfolioValuationRequest).FullName))
                {
                    HandleSpecificRequest <PortfolioValuationRequest, WFCalculatePortfolioValuation>(logger, cache, request.RequestItemName);
                }
                else if (request.RequestDataType.Equals(typeof(OrdinaryCurveGenRequest).FullName))
                {
                    HandleSpecificRequest <OrdinaryCurveGenRequest, WFGenerateOrdinaryCurve>(logger, cache, request.RequestItemName);
                }
                else if (request.RequestDataType.Equals(typeof(StressedCurveGenRequest).FullName))
                {
                    HandleSpecificRequest <StressedCurveGenRequest, WFGenerateStressedCurve>(logger, cache, request.RequestItemName);
                }
                // diagnostic
                else if (request.RequestDataType.Equals(typeof(PingHandlerRequest).FullName))
                {
                    HandleSpecificRequest <PingHandlerRequest, WFCalculatePingHandler>(logger, cache, request.RequestItemName);
                }
                else
                {
                    throw new NotSupportedException(String.Format("Unsupported RequestDataType: '{0}'", request.RequestDataType));
                }

                // success
                result = 1;
                logger.LogDebug("---------- request handler completed");
            }
            catch (Exception outerExcp)
            {
                logger.LogDebug("---------- request handler failed");
                logger.Log(outerExcp);
            }
            return(result);
        }