Ejemplo n.º 1
1
 public ActivationDiagnostics()
 {
     Timer = new PerfTimer();
     _log = new LoggingSession(Timer);
 }
Ejemplo n.º 2
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(((State)o).CurrentJobHash, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            StateEnums.Status retval = StateEnums.Status.Success;

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o );

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            string connKey = String.Format("{0}\\{1}", server, catalog);
            DbConnectionDetail dbConnDetail = (DbConnectionDetail)ConfigUtils.GlobalConfig.ConnectionSettings.Connections[connKey];
            DatabaseUtils.Connect(dbConnDetail.DefaultConnectString);

            int numRecsExtracted = 0;
            string sql = String.Empty;

            try
            {
                if (DatabaseUtils.TestConnection())
                {
                    DatabaseUtils.Connect(dbConnDetail.DefaultConnectString);

                    sql = String.Format("SELECT * FROM {0}", table);
                    DataSet dataSet = new DataSet();
                    DatabaseUtils.ExecuteSQL(sql, ref dataSet, table);

                    if ((numRecsExtracted = dataSet.Tables[0].Rows.Count) > 0)
                        AddToOutputs(this.Name, dataSet.Tables[0]);
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat(((State)o).CurrentJobHash, "Error in SQL ({0})", sql);
                log.ErrorFormat(((State)o).CurrentJobHash, "{0}", ex);
                retval = StateEnums.Status.Error;
            }

            hpt.Stop();

            int numrecs = dataTable != null ? dataTable.Rows.Count : 0;
            log.InfoFormat(((State)o).CurrentJobHash, "DataTableLoader {0}:{1}:{2} loaded {3} records in {4} seconds", Name, catalog, table, numRecsExtracted, hpt.Duration);

            return retval;
        }
Ejemplo n.º 3
0
        public void try_it_out()
        {
            var timer = new PerfTimer();
            timer.Start("Watch me go!");

            Thread.Sleep(50);
            timer.Mark("Here, here!");

            var t1 = Task.Factory.StartNew(() => {
                timer.Record("#1", () => {
                    Thread.Sleep(25);
                });
            });

            var t2 = Task.Factory.StartNew(() =>
            {
                timer.Record("#2", () =>
                {
                    Thread.Sleep(80);
                });
            });

            var t3 = Task.Factory.StartNew(() =>
            {
                timer.Record("#3", () =>
                {
                    Thread.Sleep(40);
                });
            });

            var t4 = Task.Factory.StartNew(() =>
            {
                timer.Record("#4", () =>
                {
                    Thread.Sleep(5);
                });
            });

            Task.WaitAll(t1, t2, t3, t4);

            timer.Stop();

            timer.DisplayTimings(x => x.Finished);
        }
Ejemplo n.º 4
0
            public void ApplyToAllTimed(Action <Actor, T> action, string text)
            {
                var longTickThresholdInStopwatchTicks = PerfTimer.LongTickThresholdInStopwatchTicks;
                var start = Stopwatch.GetTimestamp();

                for (var i = 0; i < actors.Count; i++)
                {
                    var actor = actors[i];
                    var trait = traits[i];
                    action(actor, trait);
                    var current = Stopwatch.GetTimestamp();
                    if (current - start > longTickThresholdInStopwatchTicks)
                    {
                        PerfTimer.LogLongTick(start, current, text, trait);
                        start = Stopwatch.GetTimestamp();
                    }
                    else
                    {
                        start = current;
                    }
                }
            }
Ejemplo n.º 5
0
        public static Activity RunActivity(Actor self, Activity act)
        {
            // PERF: If there are no activities we can bail straight away and save ourselves a call to
            // Stopwatch.GetTimestamp.
            if (act == null)
            {
                return(act);
            }

            // PERF: This is a hot path and must run with minimal added overhead.
            // Calling Stopwatch.GetTimestamp is a bit expensive, so we enumerate manually to allow us to call it only
            // once per iteration in the normal case.
            // See also: DoTimed
            var longTickThresholdInStopwatchTicks = PerfTimer.LongTickThresholdInStopwatchTicks;
            var start = Stopwatch.GetTimestamp();

            while (act != null)
            {
                var prev = act;
                act = act.TickOuter(self);
                var current = Stopwatch.GetTimestamp();
                if (current - start > longTickThresholdInStopwatchTicks)
                {
                    PerfTimer.LogLongTick(start, current, "Activity", prev);
                    start = Stopwatch.GetTimestamp();
                }
                else
                {
                    start = current;
                }

                if (act == prev || act == prev.ParentActivity)
                {
                    break;
                }
            }

            return(act);
        }
Ejemplo n.º 6
0
        public static void DoTimed <T>(this IEnumerable <T> e, Action <T> a, string text)
        {
            var longTickThresholdInStopwatchTicks = PerfTimer.LongTickThresholdInStopwatchTicks;

            using (var enumerator = e.GetEnumerator())
            {
                var start = Stopwatch.GetTimestamp();
                while (enumerator.MoveNext())
                {
                    a(enumerator.Current);

                    var current = Stopwatch.GetTimestamp();
                    if (current - start > longTickThresholdInStopwatchTicks)
                    {
                        PerfTimer.LogLongTick(start, current, text, enumerator.Current);
                        start = Stopwatch.GetTimestamp();
                    }
                    else
                    {
                        start = current;
                    }
                }
            }
        }
Ejemplo n.º 7
0
        private JasperRuntime(JasperRegistry registry, IServiceCollection services, PerfTimer timer)
        {
            Bootstrapping = timer;

            services.AddSingleton(this);

            timer.Record("new Container()", () =>
            {
                Container = new Container(services, timer)
                {
                    DisposalLock = DisposalLock.Ignore
                };
            });


            registry.Generation.Sources.Add(new NowTimeVariableSource());

            registry.Generation.Assemblies.Add(GetType().GetTypeInfo().Assembly);
            registry.Generation.Assemblies.Add(registry.ApplicationAssembly);

            Registry = registry;

            _bus = new Lazy <IServiceBus>(Get <IServiceBus>);
        }
Ejemplo n.º 8
0
        public async Task open_generic_scanning_async_with_externally_supplied_timer()
        {
            var timer = new PerfTimer();

            timer.Start("Doing stuff");

            var container = await Container.BuildAsync(i => i.Scan(s =>
            {
                s.AssemblyContainingType <type_scanning>();
                //s.WithDefaultConventions();
                s.AddAllTypesOf(typeof(ISomeInterface <>));
            }), timer);

            timer.Stop();

            timer.TimedSteps().Any().ShouldBeTrue();

            container.GetInstance <ISomeInterface <Base> >()
            .ShouldNotBeNull();

            container.GetInstance <ISomeInterface <Derived> >()
            .ShouldBeOfType <Foo>()
            .ShouldNotBeNull();
        }
Ejemplo n.º 9
0
        public void Update(GameTime time)
        {
            var keyboardState = Keyboard.GetState();

            if (keyboardState.IsKeyDown(Keys.M) && !PrevKeyboardState.IsKeyDown(Keys.M))
            {
                MapViewer.Instance.Init();
            }

            if (keyboardState.IsKeyDown(Keys.H) && !PrevKeyboardState.IsKeyDown(Keys.H))
            {
                MainMenu.ToggleHUD();
            }

            if (keyboardState.IsKeyDown(Keys.L) && !PrevKeyboardState.IsKeyDown(Keys.L))
            {
                ShowLocation();
            }

            if (!keyboardState.IsKeyDown(Keys.LeftControl) && keyboardState.IsKeyDown(Keys.C) && !PrevKeyboardState.IsKeyDown(Keys.C))
            {
                Picker.ClearSelection();
            }

            if (GameView.ViewMode == ViewMode.World && (keyboardState.IsKeyDown(Keys.P) && !PrevKeyboardState.IsKeyDown(Keys.P) || InitPlayerMode))
            {
                if (!PlayerMode)
                {
                    EnterPlayerMode();
                }
                else
                {
                    ExitPlayerMode();
                }

                InitPlayerMode = false;
            }

            if (keyboardState.IsKeyDown(Keys.D1) && !PrevKeyboardState.IsKeyDown(Keys.D1))
            {
                ACViewer.Render.Buffer.drawTerrain = !ACViewer.Render.Buffer.drawTerrain;
            }

            if (keyboardState.IsKeyDown(Keys.D2) && !PrevKeyboardState.IsKeyDown(Keys.D2))
            {
                ACViewer.Render.Buffer.drawEnvCells = !ACViewer.Render.Buffer.drawEnvCells;
            }

            if (keyboardState.IsKeyDown(Keys.D3) && !PrevKeyboardState.IsKeyDown(Keys.D3))
            {
                ACViewer.Render.Buffer.drawStaticObjs = !ACViewer.Render.Buffer.drawStaticObjs;
            }

            if (keyboardState.IsKeyDown(Keys.D4) && !PrevKeyboardState.IsKeyDown(Keys.D4))
            {
                ACViewer.Render.Buffer.drawBuildings = !ACViewer.Render.Buffer.drawBuildings;
            }

            if (keyboardState.IsKeyDown(Keys.D5) && !PrevKeyboardState.IsKeyDown(Keys.D5))
            {
                ACViewer.Render.Buffer.drawScenery = !ACViewer.Render.Buffer.drawScenery;
            }

            if (keyboardState.IsKeyDown(Keys.D6) && !PrevKeyboardState.IsKeyDown(Keys.D6))
            {
                MainMenu.ToggleParticles();
            }

            if (keyboardState.IsKeyDown(Keys.D7) && !PrevKeyboardState.IsKeyDown(Keys.D7))
            {
                ACViewer.Render.Buffer.drawInstances = !ACViewer.Render.Buffer.drawInstances;
            }

            if (keyboardState.IsKeyDown(Keys.D8) && !PrevKeyboardState.IsKeyDown(Keys.D8))
            {
                ACViewer.Render.Buffer.drawEncounters = !ACViewer.Render.Buffer.drawEncounters;
            }

            if (keyboardState.IsKeyDown(Keys.D0) && !PrevKeyboardState.IsKeyDown(Keys.D0))
            {
                ACViewer.Render.Buffer.drawAlpha = !ACViewer.Render.Buffer.drawAlpha;
            }

            if (keyboardState.IsKeyDown(Keys.LeftControl) && keyboardState.IsKeyDown(Keys.V) && !PrevKeyboardState.IsKeyDown(Keys.V))
            {
                Picker.AddVisibleCells();
            }

            if (keyboardState.IsKeyDown(Keys.LeftControl) && keyboardState.IsKeyDown(Keys.C) && !PrevKeyboardState.IsKeyDown(Keys.C))
            {
                Picker.ShowCollision();
            }

            if (GameView.ViewMode == ViewMode.World && PlayerMode && Player != null)
            {
                Player.Update(time);
            }
            else if (Camera != null)
            {
                Camera.Update(time);
            }

            Render.UpdateEmitters();

            Server.Update();

            if (PerfTimer.Update())
            {
                //Console.WriteLine($"NumParticles: {ACViewer.Render.Render.NumParticlesThisFrame}, ParticleTextures: {ACViewer.Render.Render.ParticleTexturesThisFrame.Count}");
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="dataTableOnly"></param>
        /// <param name="sqlQuery"></param>
        /// <param name="tableName"></param>
        /// <param name="columns"></param>
        /// <param name="data"></param>
        /// <param name="dOut"></param>
        /// <returns></returns>
        protected internal bool ExecuteQuery(
            bool dataTableOnly,
            string sqlQuery,
            string tableName,
            string key,
            out Dictionary <string, int> columns,
            out List <List <object> > data,
            out DataTable dOut)
        {
            data    = null;
            columns = null;
            dOut    = null;
            if (this.oracleDA == null ||
                this.oracleDA.Initialized == false)
            {
                return(false);
            }

            var pT          = new PerfTimer(this, "ExecuteQuery");
            var pTQueryOnly = new PerfTimer("- (bound)Query only");
            //Execute query
            DataTable dataTable;
            bool      callSuccess;

            try
            {
                this.log(
                    LogLevel.INFO,
                    "Executing query: {0}", sqlQuery);
                callSuccess =
                    this.oracleDA.issueSqlTextSelectCommand(
                        sqlQuery,
                        tableName,
                        CommandBehavior.SingleResult,
                        key,
                        out dataTable);
            }
            catch (Exception eX)
            {
                //Do something here
                this.log(LogLevel.ERROR, "Could not execute sql statement: " + sqlQuery + ": Exception: " + eX);
                return(false);
            }

            if (callSuccess == false)
            {
                return(false);
            }
            if (this.isloglevel(LogLevel.DEBUG))
            {
                this.log(LogLevel.DEBUG, pTQueryOnly.ToString());
            }


            //Extract the data from the data table
            if (dataTable != null && dataTable.IsInitialized &&
                dataTable.Columns != null && dataTable.Columns.Count > 0 &&
                dataTable.Rows != null && dataTable.Rows.Count > 0)
            {
                if (!dataTableOnly)
                {
                    PerfTimer pTCust = new PerfTimer(this, "- (bound)Custom data set creation");
                    //Get the columns
                    columns = new Dictionary <string, int>(dataTable.Columns.Count);
                    for (var c = 0; c < dataTable.Columns.Count; ++c)
                    {
                        columns.Add(dataTable.Columns[c].ColumnName, c);
                    }

                    //Get the data from each row
                    data = new List <List <object> >(dataTable.Rows.Count);
                    foreach (DataRow curDr in dataTable.Rows)
                    {
                        var objRow = new List <object>(dataTable.Columns.Count);
                        for (var c = 0; c < dataTable.Columns.Count; ++c)
                        {
                            objRow.Add(curDr[c]);
                        }
                        data.Add(objRow);
                    }
                    if (this.isloglevel(LogLevel.DEBUG))
                    {
                        this.log(LogLevel.DEBUG, pTCust.ToString());
                    }
                }
                else
                {
                    PerfTimer pTCust = new PerfTimer(this, "- (bound)Just data table");
                    dOut = dataTable;
                    if (this.isloglevel(LogLevel.DEBUG))
                    {
                        this.log(LogLevel.DEBUG, pTCust.ToString());
                    }
                }
            }
            if (this.isloglevel(LogLevel.DEBUG))
            {
                this.log(LogLevel.DEBUG, pT.ToString());
            }
            return(true);
        }
Ejemplo n.º 11
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(((State)o).CurrentJobHash, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            StateEnums.Status retval = StateEnums.Status.Success;

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o);

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            int numrecs = 0;
            int numrecsFiltered = 0;
            int numrecsNotFiltered = 0;

            string securityDescription = "";
            int firstSpaceIndex = 0;
            int secondSpaceIndex = 0;
            Regex objDatePattern = new Regex(@"\d[0-9]/\d\d/\d\d");
            Regex objPricePattern = new Regex(@"\s(\d+(?:\.(?:[^0]\d|\d[^0]))?)\s");
            Match matchDate;
            Match matchPrice;

            string origFilter = filter; //required to reset Filter member if it gets altered in course of execute

            try
            {
                DataTable dt = new DataTable();
                if (InputToProcess.CompareTo(String.Empty) != 0)
                    dt = inputData[InputToProcess] as DataTable;
                else
                    dt = inputData[0] as DataTable;

                if (dt != null)
                {
                    numrecs += dt.Rows.Count;

                    if (mode.ToUpper().Equals("ROW-WISE"))
                    {
                        #region row-wise filter

                        dtOut = dt.Clone();

                        bool isOptionTypeColumnExists = false;

                        if (dt.Columns.Contains("OptionType"))
                            isOptionTypeColumnExists = true;
                        //if (filter.ToUpper().Contains("IN ("))
						if (filter.ToUpper().Contains("IN (FILE:"))
                            filter = GetFileContents(((State)o).CurrentJobHash, filter);
                        bool isSecurityTypeColumnExists = dt.Columns.Contains("Security Type");

						log.InfoFormat(jobKeyCode,"filter expression {0}",filter);

                        DataRow[] rows = null;
                        if (filter.Equals(String.Empty) == false)
                            //Meta Tag replacement on mudule properties happens at job's launch
                            //rows = dt.Copy().Select(ConfigUtils.MetaTagReplacer(filter));
                            rows = dt.Copy().Select(filter);
                        else
                            rows = dt.Copy().Select();

                        for (int i = 0; i < rows.Length; i++)
                        {
                            if (ifSuppressBlankRows && IsBlankRow(rows[i]))
                                continue;

                            if (ifSuppressBlankRows && IsHeaderRow(rows[i]))
                                continue;

                            #region JP STaARS Custodian Logic

                            if (IfUseJpOptionSymbolParsingLogic)
                            {
                                //OptionType

                                if (isSecurityTypeColumnExists && (rows[i]["Security Type"].ToString().Contains("OPTION") || (isOptionTypeColumnExists && (rows[i]["OptionType"].ToString() == "C" || rows[i]["OptionType"].ToString() == "P"))))
                                {
                                    securityDescription = rows[i]["Security Description"].ToString();
                                    firstSpaceIndex = securityDescription.IndexOf(" ");
                                    secondSpaceIndex = securityDescription.IndexOf(" ", firstSpaceIndex + 2);

                                    if (firstSpaceIndex > 0 && secondSpaceIndex > 0)
                                    {
                                        matchDate = objDatePattern.Match(securityDescription);
                                        matchPrice = objPricePattern.Match(securityDescription);

                                        rows[i]["symbol"] = securityDescription.Substring(firstSpaceIndex,
                                                                                          secondSpaceIndex -
                                                                                          firstSpaceIndex).Trim() + " "
                                                                                          + (matchDate.Success ? matchDate.Value : "").Trim() + " "
                                                                                          + (securityDescription.StartsWith("PUT") ? "P" : (securityDescription.StartsWith("CALL") ? "C" : ""))
                                                                                          + (matchPrice.Success ? matchPrice.Value : "").Trim();
                                    }
                                }
                            }
                            if (IfUseJpCashFlippingLogic)
                            {
                                if (dt.Columns.Contains("Security Description") && rows[i]["Security Description"].ToString() == "CASH")
                                {
                                    rows[i]["Market Value"] = (-1) * Convert.ToDouble(rows[i]["Market Value"]);//flipping sign for CASH JP files
                                }
                            }

                            #endregion

                            dtOut.ImportRow(rows[i]);
                        }
                        dtOut.AcceptChanges();


                        #endregion
                    }
                    else if (mode.ToUpper().Equals("COLUMN-WISE"))
                    {

                        #region column-wise filter

                        dtOut = dt.Copy();
                        List<string> tableColNames = new List<string>();
                        foreach (DataColumn dc in dtOut.Columns)
                            tableColNames.Add(dc.ColumnName);

                        string[] colnames = filter.Split(',');

                        if (colnames.Length > 0)
                        {
                            foreach (string c in tableColNames)
                                if (colnames.Contains(c))
                                    dtOut.Columns.Remove(c);
                        }

                        #endregion
                    }

                    if (ifDistinct)
                    {
                        bool isDupeRecord = false;
                        dtOutDistinct = dtOut.Clone();
                        foreach (DataRow dr1 in dtOut.Rows)
                        {
                            foreach (DataRow dr2 in dtOutDistinct.Rows)
                            {
                                if (DataRowComparer.Default.Equals(dr1, dr2))
                                {
                                    isDupeRecord = true;
                                    break;
                                }
                            }
                            if (isDupeRecord == false)
                                dtOutDistinct.ImportRow(dr1);
                            isDupeRecord = false;
                        }
                        if (dtOutDistinct.Rows.Count > 0 || _ifAddEmptyDataTableToOutput)
                            AddToOutputs(this.Name, dtOutDistinct);
                    }
                    else if (dtOut.Rows.Count > 0 || _ifAddEmptyDataTableToOutput)
                        AddToOutputs(this.Name, dtOut);

                    numrecsFiltered += dtOut.Rows.Count;         
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat(((State)o).CurrentJobHash, "Error : {0}", ex);
                retval = StateEnums.Status.Error;
            }

            hpt.Stop();

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o);
            UpdateRecordCount(activityIdEnding, numrecs, numrecs - numrecsFiltered, numrecsFiltered);

            log.InfoFormat(((State)o).CurrentJobHash, "DataTableFilter {0} filtered {1} of {2} records in {3} seconds.", Name, numrecsFiltered, numrecs, hpt.Duration);
            
            filter = origFilter;

            return retval;
        }
Ejemplo n.º 12
0
        private static async Task <JasperRuntime> bootstrap(JasperRegistry registry)
        {
            var timer = new PerfTimer();

            timer.Start("Bootstrapping");

            timer.Record("Finding and Applying Extensions", () =>
            {
                applyExtensions(registry);
            });

            var buildingServices = Task.Factory.StartNew(() =>
            {
                return(timer.Record("Combining Services and Building Settings", registry.CompileConfigurationAndServicesForIdiomaticBootstrapping));
            });



            var handlerCompilation = registry.Messaging.CompileHandlers(registry, timer);


            var runtime = new JasperRuntime(registry, timer);

            var services = await buildingServices;

            services.AddSingleton(runtime);


            var container = await Lamar.Container.BuildAsync(services, timer);

            container.DisposalLock = DisposalLock.Ignore;
            runtime.Container      = container;


            var routeDiscovery = registry.HttpRoutes.Enabled
                ? registry.HttpRoutes.FindRoutes(runtime, registry, timer)
                : Task.CompletedTask;

            runtime.buildAspNetCoreServer(services);

            await routeDiscovery;

            await Task.WhenAll(runtime.startAspNetCoreServer(), handlerCompilation, runtime.startHostedServices());


            // Run environment checks
            timer.Record("Environment Checks", () =>
            {
                var recorder = EnvironmentChecker.ExecuteAll(runtime);
                if (runtime.Settings.ThrowOnValidationErrors)
                {
                    recorder.AssertAllSuccessful();
                }
            });

            _lifetime = TypeExtensions.As <ApplicationLifetime>(container.GetInstance <IApplicationLifetime>());
            _lifetime.NotifyStarted();

            timer.Stop();

            return(runtime);
        }
Ejemplo n.º 13
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(((State)o).CurrentJobHash, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            StateEnums.Status retval = StateEnums.Status.Success;

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o);
			string reportArgs = String.Empty;

            try
            {
                //runDate is required to evaluate meta tags this module explicitely using
                //derrived from job state or passed from runDateString
                //if (DateTime.TryParse(RunDate, out runDate))
                //    runDateParms = new MetaTagReplacerInputDates(runDate);
                //else
                //    runDateParms = ((State)this.ExecutionEngine.GetJobState(this.job.JobName)).CurrentParameters.ProcessInputDates;

                runDateParms = ((State)o).CurrentParameters.GetModuleInDatesOverride(this.Name);
                if (runDateParms == null)
                    runDateParms = ((State)o).CurrentParameters.ProcessInputDates;

                string mail_subject = string.Format("GENEVA CONNECTION ERROR [{0}])",
                                                                    MetaTagReplacer.GetMetaTagValue("*RUN_INSTANCE*", runDateParms, null));
                string  mail_distribution =  MetaTagReplacer.GetMetaTagValue("*SOAP_ERROR_DISTRIBUTION*", runDateParms, null);

                dtOut = new DataTable(tableName);
                Util.InitializeAsciiLookup();

                ifRetry = true;
                bool isContingency = false;
                string runrepSessionID = String.Empty;
                reportResultsPortfolioStruct results = null;
                Service webServ = null;
                int numtries = 1;

				DateTime runStartTime = DateTime.Now;
                string msgMailer = "";
                string localArgs = ParseArgs(args);

                while (ifRetry)
                {
                    try
                    {
                        webServ = null;

                        log.InfoFormat(((State)o).CurrentJobHash, "Attempting Geneva SOAP RunCallableRunrepRunReport [retry #{3}] on {0} with report args {1} {2}", url, rsl, localArgs, numtries);
                        webServ = new Service();
                        if (webServ == null)
                        {
                            string msg = "Web service not constructed (null value).";
                            throw new ArgumentNullException(msg);
                        }
                        log.InfoFormat(((State)o).CurrentJobHash, "Web service constructed successfully");
                        

                        webServ.Timeout = timeout;
                        log.InfoFormat(((State)o).CurrentJobHash, "Web service timeout assigned: {0}", timeout);

						 /* Old style processing of properties
                        webServ.Url = ConfigUtils.MetaTagReplacer(url);
						*/
						webServ.Url = this.Url;
                        log.InfoFormat(((State)o).CurrentJobHash, "Web url assigned: {0}", webServ.Url);


                        if (runrepSessionID.Equals(String.Empty))
                        {
                            //string flags = String.Format("-n{0} -f empty", DateTime.Now.ToString("mmss"));
                            string flags = String.Format("-f empty");
                            try
                            {
                                runrepSessionID = webServ.StartCallableRunrep(port, host, uid, pwd, flags);
                                //runrepSessionID = webServ.StartPersistentCallableRunrep(port, host, uid, pwd, flags); 
                                log.InfoFormat(((State)o).CurrentJobHash, "Runrep session started successfully with flags \"{0}\" [Runrep ID: {1}]", flags, runrepSessionID);
								log.DebugFormat(((State)o).CurrentJobHash, "Runrep session {0} started successfully for call {1} {2} {3} {4}", runrepSessionID, webServ.Url, rsl, localArgs,  flags );
                            }
                            catch (Exception ex)
                            {
                                log.DebugFormat(((State)o).CurrentJobHash, "Runrep session {0} NOT started successfully for call {1} {2} {3} {4}", runrepSessionID, webServ.Url, rsl, localArgs, flags);
								string msg = String.Format("Runrep session NOT started with flags \"{0}\" [Runrep ID: {1}]<br>Error: {2}", flags, runrepSessionID, ex);
								throw new ApplicationException(msg);
                            }
                        }


                        try
                        {
                            webServ.RunCallableRunrepReadFile(runrepSessionID, rsl);
                            log.InfoFormat(((State)o).CurrentJobHash, "Runrep read report file {0} was successful [Runrep ID: {1}]", rsl, runrepSessionID);
                        }
                        catch (Exception ex)
                        {
                            string msg = String.Format("Runrep read report file {0} was NOT successful [Runrep ID: {1}]<br>Error: {2}", rsl, runrepSessionID, ex);
                            throw new ApplicationException(msg);
                        }

                        try
                        {
                            results = webServ.RunCallableRunrepRunReport(runrepSessionID, rsl, localArgs);
                            log.InfoFormat(((State)o).CurrentJobHash, "Runrep run report {0} {1} was successful [Runrep ID: {2}]", rsl, localArgs, runrepSessionID);
                        }
                        catch (Exception ex)
                        {
                            string msg = String.Format("Runrep run report {0} {1} was successful [Runrep ID: {2}]<br>Error: {3}", rsl, localArgs, runrepSessionID, ex);
                            throw new ApplicationException(msg);
                        }

                        try
                        {
                            webServ.ShutdownCallableSession(runrepSessionID);
                            log.InfoFormat(((State)o).CurrentJobHash, "Shut down SOAP session OK. [Runrep ID: {0}]", runrepSessionID);
                        }
                        catch (Exception ex)
                        {
                            log.WarnFormat(((State)o).CurrentJobHash, "Error shutting down SOAP session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                        }

                        if (isContingency)
                        {
                            string msg = "Geneva SOAP call succeeded.";
                            msgMailer += String.Format("{0}<br><br>", msg);
                        
                            ///TO DO Replace this code with more central approach
							//string subject = ConfigUtils.MetaTagReplacer("GENEVA CONNECTION ERROR [*RUN_INSTANCE*])");
                            //SendMailMessage(((State)o).CurrentJobHash, ConfigUtils.MetaTagReplacer("*SOAP_ERROR_DISTRIBUTION*"), "BITS,[email protected]", subject, msgMailer);
                            SendMailMessage(((State)o).CurrentJobHash, mail_distribution, "BITS,[email protected]", mail_subject, msgMailer);
                        }

                        ifRetry = false;
                        isContingency = false;
                    }
                    catch (Exception ex)
                    {
                        string msg = ex.ToString();
                        log.ErrorFormat(((State)o).CurrentJobHash, "{0}", msg);
                        msgMailer += String.Format("{0}<br><br>", msg);

                        try
                        {
                            webServ.ShutdownCallableSession(runrepSessionID);
                            log.InfoFormat(((State)o).CurrentJobHash, "Shut down SOAP session OK {0}.", runrepSessionID);
                        }
                        catch (Exception exx)
                        {
                            log.WarnFormat(((State)o).CurrentJobHash, "Error shutting down SOAP session: {0} [Runrep ID: {1}]", exx, runrepSessionID);
                        }


                        try
                        {
                            if (isContingency == false)
                            {
                                isContingency = true;
                                runStartTime = DateTime.Now;
                                string m = String.Format("***** Contingency Condition ***** <br>Contingency mode started at: {0}", runStartTime);
                                msgMailer += String.Format("{0}<br><br>", m);
                                log.ErrorFormat(((State)o).CurrentJobHash, m);
                            }

                            ifRetry = ifOverrideSoapErrorRetry ? false : true;
                            ifRetry = ++numtries > numberOfRetryConnection ? false : true;

                            if (ifRetry)
                            {
                                runrepSessionID = String.Empty;

                                string m = "<br><br>Retrying in one minute.<br><br>";
                                msgMailer += String.Format("{0}<br><br>", m);
                                log.ErrorFormat(((State)o).CurrentJobHash, m);
                            }
                            else
                            {
                                string m = "Allowable number of attempts exceeded.  Giving up now.";
                                msgMailer += String.Format("{0}<br><br>", m);
                                log.ErrorFormat(((State)o).CurrentJobHash, m);
                                retval = StateEnums.Status.Warnings;
                            }

							///TO DO Replace this code with more central approach
                            //string subject = ConfigUtils.MetaTagReplacer("GENEVA CONNECTION ERROR [*RUN_INSTANCE*])");
                            //SendMailMessage(((State)o).CurrentJobHash, ConfigUtils.MetaTagReplacer("*SOAP_ERROR_DISTRIBUTION*"), "BITS,[email protected]", subject, msgMailer);
                            SendMailMessage(((State)o).CurrentJobHash, mail_distribution, "BITS,[email protected]", mail_subject, msgMailer);
                            Thread.Sleep(60000);
                        }
                        catch (Exception exfinal)
                        {
                            log.ErrorFormat(((State)o).CurrentJobHash, "Fatal error: {0}", exfinal);
                            retval = StateEnums.Status.Error;
                        }
                    }
                }

                if (results != null)
                {
                    if (!ifUseAddendumErrorsOnly)
                        dtOut = ConvertToDataTable(tableName, results);
                    else
                        dtOut = getAddendumErrors(tableName, results);
                }

                if (dtOut != null && dtOut.Rows.Count > 0)
                    log.InfoFormat(((State)o).CurrentJobHash, "Obtained {0} records from SOAP service call.", dtOut.Rows.Count);
                else
                    log.InfoFormat(((State)o).CurrentJobHash, "Obtained no records from SOAP service call.");

                if (dtOut != null)
                {
                    AddToOutputs(this.Name, dtOut);
                    AddToOutputs("RunDate", RunDate);
                }
            }
            catch (Exception ex)
            {
                log.Error(((State)o).CurrentJobHash, ex);
                retval = StateEnums.Status.Error;
            }            

            hpt.Stop();

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o);
            log.InfoFormat(((State)o).CurrentJobHash, "GenevaSoapReport [{0}] completed in {1} seconds.", Name, hpt.Duration);

            return retval;
        }
Ejemplo n.º 14
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(((State)o).CurrentJobHash, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            StateEnums.Status retval = StateEnums.Status.Success;
            int numrecs = 0;
            bool ifCreateTradeNode = true;
            DataTable dt = new DataTable();
            DataTable dtUnloadable = new DataTable();
            Hashtable expTracker = new Hashtable();
            XmlDocument xdocTradeRecords = new XmlDocument();
            XmlDocument xdocTradeFullDetail = new XmlDocument();
            Bits.Common.Data.PropertyBag pbSchemaTestData = new Bits.Common.Data.PropertyBag();

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o );

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            if (inputData.Count > 0)
            {
                try
                {
                    XmlDocument xdocValidationRules = GetValidationRules("TradeRules");

                    if (InputToProcess.CompareTo(String.Empty) != 0)
                        dt = inputData[InputToProcess] as DataTable;
                    else
                        dt = inputData[0] as DataTable;

                    if (dt != null)
                    {
                        if (dt.TableName.Equals(String.Empty))
                            dt.TableName = "TransactionRecords";

                        Hashtable transforms = null;
                        if (ifMapColumnsToFields)
                            transforms = GetTransformsFromColumns(dt);
                        else
                            transforms = GetTransforms();

                        XmlElement eTradeRecord = xdocTradeRecords.CreateElement(dt.TableName, nsuri);
                        XmlElement eTradeFullDetail = xdocTradeFullDetail.CreateElement(dt.TableName, nsuri);

                        if (ifUseGenevaLoaderNode)
                        {
                            XmlElement eTradeLoader = xdocTradeRecords.CreateElement("GenevaLoader", nsuri);
                            eTradeLoader.AppendChild(eTradeRecord);
                            xdocTradeRecords.AppendChild(eTradeLoader);

                            XmlElement eTradeFullDetailsLoader = xdocTradeFullDetail.CreateElement("GenevaLoader", nsuri);
                            eTradeFullDetailsLoader.AppendChild(eTradeFullDetail);
                            xdocTradeFullDetail.AppendChild(eTradeFullDetailsLoader);
                        }
                        else
                        {
                            xdocTradeRecords.AppendChild(eTradeRecord);
                            xdocTradeFullDetail.AppendChild(eTradeFullDetail);
                        }

                        foreach (DataRow dr in dt.Rows)
                        {
                            try
                            {
                                XmlElement eAttributeTrade = null;
                                XmlElement eAttributeTradeFullDetail = null;

                                if ((LoaderTransactionField != String.Empty) &&
                                     (dr[loaderTransactionField].ToString() != String.Empty))
                                {

                                    if (ifFilterUpdateRecords &&
                                        dr[loaderTransactionField].ToString().ToUpper().Contains("UPDATE"))
                                        throw new GenevaLoaderTypeMissing();

                                    dr[loaderTransactionField] = dr[loaderTransactionField].ToString()
                                            .Replace("NEW", "InsertUpdate")
                                            .Replace("INSERTUPDATE", "InsertUpdate")
                                            .Replace("UPDATE", "InsertUpdate")
                                            .Replace("DELETE", "Delete");

                                    if (ifUseComacLogic)
                                    {
                                        dr[loaderTransactionField] = dr[loaderTransactionField].ToString()
                                            .Replace("SwapOpen", "Buy");
                                        dr[loaderTransactionField] = dr[loaderTransactionField].ToString()
                                            .Replace("SwapClose", "Sell");
                                    }

                                    eAttributeTrade = xdocTradeRecords.CreateElement(dr[loaderTransactionField].ToString().Replace(" ", ""), nsuri);
                                    eAttributeTradeFullDetail = xdocTradeFullDetail.CreateElement(dr[loaderTransactionField].ToString().Replace(" ", ""), nsuri);
                                }
                                else if (
                                    (LoaderTransactionField == String.Empty) &&
                                    (loaderTypeField != String.Empty) &&
                                    (loaderActionField != String.Empty))
                                {
                                    System.Globalization.CultureInfo cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
                                    System.Globalization.TextInfo textInfo = cultureInfo.TextInfo;

                                    if (ifFilterUpdateRecords &&
                                        dr[loaderTypeField].ToString().ToUpper().Contains("UPDATE"))
                                        throw new GenevaLoaderTypeMissing();

                                    //overkill ? should never see this in the type
                                    dr[loaderTypeField] = dr[loaderTypeField].ToString().Replace("NEW", "InsertUpdate")
                                    .Replace("NEW", "InsertUpdate")
                                    .Replace("INSERTUPDATE", "InsertUpdate")
                                    .Replace("UPDATE", "InsertUpdate")
                                    .Replace("DELETE", "Delete");

                                    if (ifUseComacLogic)
                                    {
                                        dr[loaderTypeField] = dr[loaderTypeField].ToString()
                                            .Replace("SwapOpen", "Buy");
                                        dr[loaderTypeField] = dr[loaderTypeField].ToString()
                                            .Replace("SwapClose", "Sell");
                                    }

                                    if (ifModifyCase)
                                        loaderType = textInfo.ToTitleCase(dr[loaderTypeField].ToString().ToLower());
                                    else
                                        loaderType = dr[loaderTypeField].ToString();

                                    loaderAction = dr[loaderActionField].ToString();

                                    eAttributeTrade = xdocTradeRecords.CreateElement(loaderType + "_" + loaderAction, nsuri);
                                    eAttributeTradeFullDetail = xdocTradeFullDetail.CreateElement(loaderType + "_" + loaderAction, nsuri);
                                }
                                else if (!ifUseComacLogic && !loaderType.Equals(String.Empty))
                                {
                                    System.Globalization.CultureInfo cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
                                    System.Globalization.TextInfo textInfo = cultureInfo.TextInfo;

                                    if (!loaderActionField.Equals(String.Empty))
                                        loaderAction = dr[loaderActionField].ToString();

                                    eAttributeTrade = xdocTradeRecords.CreateElement(loaderType + "_" + loaderAction, nsuri);
                                    eAttributeTradeFullDetail = xdocTradeFullDetail.CreateElement(loaderType + "_" + loaderAction, nsuri);
                                }
                                else if (!loaderAction.Equals(String.Empty) && !loaderType.Equals(String.Empty))
                                {
                                    eAttributeTrade = xdocTradeRecords.CreateElement(loaderType + "_" + loaderAction, nsuri);
                                    eAttributeTradeFullDetail = xdocTradeFullDetail.CreateElement(loaderType + "_" + loaderAction, nsuri);
                                }
                                else if (!loaderAction.Equals(String.Empty) && !loaderTypeField.Equals(String.Empty))
                                {
                                    eAttributeTrade = xdocTradeRecords.CreateElement(dr[loaderTypeField] + "_" + loaderAction, nsuri);
                                    eAttributeTradeFullDetail = xdocTradeFullDetail.CreateElement(dr[loaderTypeField] + "_" + loaderAction, nsuri);
                                }
                                else
                                    throw new ApplicationException("Unspecified loaderAction and/or loaderType.");

                                #region ifUseComacLogic

                                if (ifUseComacLogic)
                                {
                                    if (dr[loaderTransactionField].Equals(String.Empty))
                                    {
                                        loaderAction = "InsertUpdate";
                                        switch (dr["Investment_Type"].ToString().ToUpper())
                                        {
                                            case "FXFORWARD":
                                            case "FXNDF":
                                                loaderType = "ForwardFX";
                                                break;
                                            case "FUTUREBOND":
                                                break;
                                            case "SWAP":
                                                loaderType = "SwapOpen";
                                                break;
                                            case "REPO":
                                                if(dr["Investment_Description"].ToString().StartsWith("Reverse"))
                                                    loaderType = "ReverseRepo";
                                                else
                                                    loaderType = "Repo";
                                                break;
                                            default:
                                                loaderType = "Buy";
                                                break;
                                        }

                                        if (!loaderType.Equals(String.Empty) && !loaderAction.Equals(String.Empty))
                                        {
                                            eAttributeTrade = xdocTradeRecords.CreateElement(loaderType + "_" + loaderAction, nsuri);
                                            eAttributeTradeFullDetail = xdocTradeFullDetail.CreateElement(loaderType + "_" + loaderAction, nsuri);
                                        }
                                        else
                                            throw new GenevaLoaderTypeMissing();
                                    }
                                }

                                #endregion

                                #region ifUseBossFuturesLogic

                                int nonCapNumber = 0;
                                string nonCapExpenseCode = String.Empty;
                                string nonCapCurrency = String.Empty;
                                string nonCapPaymentType = String.Empty;
                                string nonCapLiabilityCode = String.Empty;
                                double nonCapAmount = 0.0;

                                if (ifUseBossFuturesLogic)
                                {
                                    foreach (DataColumn dc in dt.Columns)
                                    {
                                        switch (dc.ColumnName.ToUpper())
                                        {
                                            case "NONCAPNUMBER":
                                                nonCapNumber = Convert.ToInt32(dr["NONCAPNUMBER"]);
                                                break;
                                            case "NONCAPAMOUNT":
                                                nonCapAmount = Convert.ToDouble(dr["NONCAPAMOUNT"]);
                                                break;
                                            case "NONCAPCURRENCY":
                                                nonCapCurrency = dr["NONCAPCURRENCY"].ToString();
                                                break;
                                            case "NONCAPEXPENSECODE":
                                                nonCapExpenseCode = dr["NONCAPEXPENSECODE"].ToString();
                                                break;
                                            case "NONCAPPAYMENTTYPE":
                                                nonCapPaymentType = dr["NONCAPPAYMENTTYPE"].ToString();
                                                break;
                                            case "NONCAPLIABILITYCODE":
                                                nonCapLiabilityCode = dr["NONCAPLIABILITYCODE"].ToString();
                                                break;
                                        }
                                    }
                                    expTracker[nonCapNumber] = new Bits.ModulesNS.FutureExpenseRecord(
                                        nonCapNumber,
                                        nonCapCurrency,
                                        nonCapExpenseCode,
                                        nonCapPaymentType,
                                        nonCapLiabilityCode,
                                        nonCapAmount,
                                        dr["LocationAccount"].ToString());

                                    if (nonCapNumber < 2) continue;
                                }

                                #endregion

                                if (!dt.Columns.Contains("Transaction_Type") && dt.Columns.Contains(loaderActionField) && dt.Columns.Contains(loaderTypeField))
                                {
                                    pbSchemaTestData["loaderType"] = dr[loaderTypeField].ToString();
                                    pbSchemaTestData["loaderAction"] = dr[loaderActionField].ToString();
                                }
                                else if (!dt.Columns.Contains("Transaction_Type") && dt.Columns.Contains(loaderActionField))
                                {
                                    pbSchemaTestData["loaderType"] = fxType;
                                    pbSchemaTestData["loaderAction"] = dr[loaderActionField].ToString();
                                }
                                else if (dt.Columns.Contains("Transaction_Type") && !dr["Transaction_Type"].ToString().Equals(""))
                                {
                                    pbSchemaTestData["loaderType"] = ((string[])dr["Transaction_Type"].ToString().Split('_'))[0];
                                    pbSchemaTestData["loaderAction"] = ((string[])dr["Transaction_Type"].ToString().Split('_'))[1];
                                }
                                else if (dt.Columns.Contains(loaderTypeField))
                                {
                                    pbSchemaTestData["loaderType"] = dr[loaderTypeField].ToString();
                                    pbSchemaTestData["loaderAction"] = "InsertUpdate";
                                }
                                else if (!loaderAction.Equals(String.Empty) && !loaderType.Equals(String.Empty))
                                {
                                    pbSchemaTestData["loaderType"] = loaderType;
                                    pbSchemaTestData["loaderAction"] = loaderAction;
                                }

                                pbSchemaTestData["loaderAction"] = pbSchemaTestData["loaderAction"].ToString().Replace("NEW", "InsertUpdate").Replace("INSERTUPDATE", "InsertUpdate");

                                foreach (DataColumn dc in dt.Columns)
                                {
                                    try
                                    {
                                        string colName = dc.ColumnName.Replace("#", "").Replace(" ", "").Replace("/", "").Trim();

                                        switch (dc.ColumnName.ToUpper())
                                        {
                                            case "LOADERTYPE":
                                            case "LOADERTYPEFIELD":
                                            case "LOADERACTION":
                                            case "LOADERACTONFIELD":
                                                ifCreateTradeNode = false;
                                                break;

                                            default:
                                                ifCreateTradeNode = true;
                                                break;
                                        }

                                        if (transforms.ContainsKey(colName.ToUpper()))
                                        {
                                            string[] newTags = transforms[colName.ToUpper()].ToString().Split(',');
                                            foreach (string targetTag in newTags)
                                            {
                                                XmlElement eAttributeTagged = xdocTradeRecords.CreateElement(targetTag, nsuri);
                                                eAttributeTagged.InnerXml = dr[dc.ColumnName].ToString().Replace("&", "");

                                                XmlElement eAttributeFullDetailTagged = xdocTradeFullDetail.CreateElement(targetTag, nsuri);
                                                eAttributeFullDetailTagged.InnerXml = dr[dc.ColumnName].ToString().Replace("&", "");

                                                #region Boss FX data processing

                                                if (ifUseBossFxLogic)
                                                {
                                                    ifFormatDates = true;    //replaces logic for date formatting (see below).  no other fucntionality required.
                                                }

                                                #endregion

                                                #region Boss Futures data processing

                                                if (ifUseBossFuturesLogic)
                                                {
                                                    ifFormatDates = true;    //replaces logic for date formatting (see below).  
                                                                                
                                                    XmlNamespaceManager nsmgrIn = new XmlNamespaceManager(xdocTradeFullDetail.NameTable);
                                                    nsmgrIn.AddNamespace("gv", "http://www.advent.com/SchemaRevLevel371/Geneva");
                                                    if (eTradeFullDetail.SelectSingleNode("//gv:Investment_Type", nsmgrIn) == null)
                                                    {
                                                        XmlElement ityNode = xdocTradeFullDetail.CreateElement("Investment_Type", nsuri);
                                                        ityNode.InnerXml = "Future";
                                                        eTradeFullDetail.AppendChild(ityNode);
                                                    }

                                                    #region column processing
                                                    switch (dc.ColumnName.ToUpper())
                                                    {
                                                        case "PORTFOLIO":
                                                            if (loaderAction.Equals("Delete"))
                                                            {
                                                                ifCreateTradeNode = false;
                                                            }
                                                            break;

                                                        case "USERTRANID1":
                                                        case "LOCATIONACCOUNT":
                                                        case "STRATEGY":
                                                        case "BROKER":
                                                        case "QUANTITY":
                                                        case "PRICE":
                                                        case "INVESTMENT":
                                                        case "NETINVESTMENTAMOUNT":
                                                        case "COUNTERINVESTMENT":
                                                        case "COUNTERFXDENOMINATION":
                                                        case "PRICEDENOMINATION":
                                                        case "CONTRACTFXRATE":
                                                        case "CONTRACTFXRATENUMERATOR":
                                                        case "CONTRACTFXRATEDENOMINATOR":
                                                            if (loaderAction.Equals("Delete"))
                                                            {
                                                                ifCreateTradeNode = false;
                                                            }
                                                            break;

                                                        case "PROCESSTIMESTAMP":
                                                        case "STATUS":
                                                        case "BUYORSELL":
                                                        case "NONCAPAMOUNT":
                                                        case "NONCAPCURRENCY":
                                                        case "NONCAPEXPENSECODE":
                                                        case "NONCAPPAYMENTTYPE":
                                                        case "NONCAPLIABILITYCODE":
                                                        case "COMMISSION":
                                                        case "EXCHANGE_FEE":
                                                        case "OTHER_FEE":
                                                        case "FEEDSYMBOL":
                                                        case "INVESTMENT_TYPE":
                                                            ifCreateTradeNode = false;
                                                            break;

                                                        case "EVENTDATE":
                                                        case "SETTLEDATE":
                                                        case "ACTUALSETTLEDATE":
                                                        case "SPOTDATE":
                                                            if (loaderAction.Equals("Delete"))
                                                                ifCreateTradeNode = false;
                                                            else
                                                                ifCreateTradeNode = true;
                                                            break;

                                                        case "NONCAPNUMBER":
                                                            if (loaderAction.Equals("Delete"))
                                                            {
                                                                ifCreateTradeNode = false;
                                                            }
                                                            else
                                                            {
                                                                for (int i = 1; i < 3; i++)
                                                                {
                                                                    FutureExpenseRecord fer = expTracker[i] as FutureExpenseRecord;
                                                                    if (fer != null)
                                                                    {
                                                                        eAttributeTagged = CreateNonCapExpenseNode(xdocTradeRecords,
                                                                            fer.NonCapNumber,
                                                                            fer.NonCapCurrency,
                                                                            fer.NonCapExpenseCode,
                                                                            fer.NonCapPaymentType,
                                                                            fer.NonCapLiabilityCode,
                                                                            fer.NonCapAmount,
                                                                            fer.LocationAccount);
                                                                        eAttributeFullDetailTagged = CreateNonCapExpenseNode(xdocTradeFullDetail,
                                                                            fer.NonCapNumber,
                                                                            fer.NonCapCurrency,
                                                                            fer.NonCapExpenseCode,
                                                                            fer.NonCapPaymentType,
                                                                            fer.NonCapLiabilityCode,
                                                                            fer.NonCapAmount,
                                                                            fer.LocationAccount);
                                                                    }

                                                                    eAttributeTrade.AppendChild(eAttributeTagged);
                                                                    eAttributeTradeFullDetail.AppendChild(eAttributeFullDetailTagged);
                                                                }
                                                                ifCreateTradeNode = false;
                                                            }

                                                            break;

                                                        default:
                                                            ifCreateTradeNode = true;
                                                            break;
                                                    }
                                                    #endregion
                                                }

                                                #endregion

                                                #region Sub Advisor data processing

                                                if (ifUseSaLogic)
                                                {
                                                    switch (dc.ColumnName.ToUpper())
                                                    {
                                                        case "SECFEE":
                                                            if (dr[loaderTypeField].ToString().ToUpper().Equals("BUY") ||
                                                                dr[loaderTypeField].ToString().ToUpper().Equals("COVERSHORT") ||
                                                                dr[loaderTypeField].ToString().ToUpper().Equals("SELL"))
                                                                ifCreateTradeNode = false;
                                                            break;

                                                        default:
                                                            ifCreateTradeNode = true;
                                                            break;
                                                    }
                                                }

                                                #endregion

                                                #region Comac data processing

                                                if (ifUseComacLogic)
                                                {
                                                    bool isFuture = dr["Investment_Type"].ToString().Equals("FutureBond") ||
                                                                            dr["Investment_Type"].ToString().Equals("FutureCommodity") ||
                                                                            dr["Investment_Type"].ToString().Equals("FutureMM") ||
                                                                            dr["Investment_Type"].ToString().Equals("FutureEquityIndex");
                                                    bool isBond = dr["Investment_Type"].ToString().Equals("Bond");
                                                    bool isFX = dr["Investment_Type"].ToString().Equals("FX");
                                                    bool isFXForward = dr["Investment_Type"].ToString().Equals("FXForward");
                                                    bool isFXNDF = dr["Investment_Type"].ToString().Equals("FXNDF");
                                                    bool isRepo = dr["Investment_Type"].ToString().Equals("Repo");
                                                    bool isSwap = dr["Investment_Type"].ToString().Equals("Swap");
                                                    bool isCDS = dr["Investment_Type"].ToString().Equals("CreditDefaultSwap");
                                                    bool isSpotFX = Convert.ToDateTime(dr["ActualSettleDate"]).Subtract(Convert.ToDateTime(dr["EventDate"])).Days < 3 ? true : false;
                                                    string swapType = isSwap ? dr["Transaction_Type"].ToString().Substring(0,
                                                        dr["Transaction_Type"].ToString().IndexOf('_')) : String.Empty;

                                                    switch (dc.ColumnName.ToUpper())
                                                    {
                                                        case "INVESTMENT":

                                                            if (isBond)
                                                            {
                                                                string investment = dr[dc.ColumnName].ToString();
                                                                if (investment.StartsWith("US"))
                                                                    dr[dc.ColumnName] = investment.Substring(2).Substring(0, investment.Length - 3);
                                                            }

                                                            string denom = dr[dc.ColumnName].ToString().Replace(" Comdty", "").Replace(" Index", "");
                                                            if (denom.Equals(String.Empty) || denom.Equals("NONE"))
                                                            {
                                                                string cntrDenom = dr["CounterInvestment"].ToString();
                                                                string tradeFX = dr["Price"].ToString();

                                                                if (isFXForward || isFXNDF)
                                                                {
                                                                    if (isSpotFX)
                                                                    {
                                                                        denom = dr["PriceDenomination"].ToString();
                                                                        cntrDenom = dr["CounterInvestment"].ToString();
                                                                    }
                                                                    else
                                                                    {
                                                                        denom = String.Format("{0} FWD", dr["PriceDenomination"].ToString());
                                                                        cntrDenom = String.Format("{0} FWD", dr["CounterInvestment"].ToString());
                                                                    }
                                                                }
                                                                else if (isFX)
                                                                    denom = dr["PriceDenomination"].ToString();
                                                                else
                                                                    denom = "NONE";

                                                                if (isFX || isFXForward || isFXNDF)
                                                                    CreateAdditionalFxNodes(denom, cntrDenom, tradeFX, ref eAttributeTrade, ref eAttributeTradeFullDetail, ref xdocTradeRecords, ref xdocTradeFullDetail);
                                                            }
                                                            eAttributeTagged.InnerXml = denom;
                                                            eAttributeFullDetailTagged.InnerXml = denom;
                                                              
                                                            //Convert Forwards from COMAC to Spot trades
                                                            if ((isFXForward || isFXNDF) && isSpotFX)
                                                            {
                                                                eAttributeTrade = ConvertForwardToSpot(xdocTradeRecords, eAttributeTrade);
                                                                eAttributeTradeFullDetail = ConvertForwardToSpot(xdocTradeFullDetail, eAttributeTradeFullDetail);
                                                            }

                                                            break;

                                                        case "COUNTERINVESTMENT":
                                                            if (isFXForward || isFXNDF)
                                                            {
                                                                if (isSpotFX)
                                                                {
                                                                    eAttributeTagged.InnerXml = dr[dc.ColumnName].ToString();
                                                                    eAttributeFullDetailTagged.InnerXml = dr[dc.ColumnName].ToString();
                                                                }
                                                                else
                                                                {
                                                                    eAttributeTagged.InnerXml = String.Format("{0} FWD", dr[dc.ColumnName].ToString());
                                                                    eAttributeFullDetailTagged.InnerXml = String.Format("{0} FWD", dr[dc.ColumnName].ToString());
                                                                }

                                                            }
                                                            break;

                                                        case "NETCOUNTERAMOUNT":

                                                            if (swapType.ToUpper().Equals("SELL") || isFuture)
                                                                ifCreateTradeNode = false;
                                                            //if (swapType.ToUpper().Equals("SWAPCLOSE") || isFuture)
                                                            //    ifCreateTradeNode = false;

                                                            if (isBond)
                                                            {
                                                                double dPrincipal = double.NaN;
                                                                double.TryParse(dr[dc.ColumnName].ToString(), out dPrincipal);
                                                                double dInterest = double.NaN;
                                                                double.TryParse(dr["AccruedInterest"].ToString(), out dInterest);

                                                                if (!dPrincipal.Equals(double.NaN) && !dInterest.Equals(double.NaN))
                                                                {
                                                                    dr[dc.ColumnName] = Math.Abs(dPrincipal + dInterest).ToString();
                                                                    eAttributeTagged.InnerXml = Math.Abs(dPrincipal + dInterest).ToString();
                                                                    eAttributeFullDetailTagged.InnerXml = Math.Abs(dPrincipal + dInterest).ToString();
                                                                }
                                                            }

                                                            break;

                                                        case "LOCATIONACCOUNT":
                                                            eAttributeTagged.InnerXml = GetComacLocationAccount(dr["Investment_Type"].ToString());
                                                            eAttributeFullDetailTagged.InnerXml = GetComacLocationAccount(dr["Investment_Type"].ToString());
                                                            break;

                                                        case "TRANSACTION_TYPE":
                                                        case "BUSINESS_UNIT":
                                                        case "INVESTMENT_TYPE":
                                                        case "INVESTMENT_DESCRIPTION":
                                                        case "INVESTMENT_UNDERLYING":
                                                        case "TOTALFEES":
                                                        case "KEYNAME":
                                                        case "SECFEEAMOUNT":
                                                            ifCreateTradeNode = false;
                                                            break;

                                                        case "NETINVESTMENTAMOUNT":
                                                            if (isFX) { }

                                                            if (isRepo || isSwap || isFuture)
                                                                ifCreateTradeNode = false;

                                                            if (isBond)
                                                            {
                                                                double dPrincipal = double.NaN;
                                                                double.TryParse(dr[dc.ColumnName].ToString(), out dPrincipal);
                                                                double dInterest = double.NaN;
                                                                double.TryParse(dr["AccruedInterest"].ToString(), out dInterest);

                                                                if (!dPrincipal.Equals(double.NaN) && !dInterest.Equals(double.NaN))
                                                                {
                                                                    dr[dc.ColumnName] = Math.Abs(dPrincipal + dInterest).ToString();
                                                                    eAttributeTagged.InnerXml = Math.Abs(dPrincipal + dInterest).ToString();
                                                                    eAttributeFullDetailTagged.InnerXml = Math.Abs(dPrincipal + dInterest).ToString();
                                                                }
                                                            }

                                                            break;

                                                        case "CONTRACTEXPIRATIONDATE":
                                                            if (isFX || isFXNDF || isFXForward || isRepo || isSwap)
                                                                ifCreateTradeNode = false;
                                                            break;

                                                        case "TRADEFX":
                                                            if (isRepo || isSwap)
                                                                ifCreateTradeNode = false;
                                                            break;

                                                        case "QUANTITY":
                                                        case "PRICE":
                                                        case "PRICEDENOMINATION":

                                                            if (isFX || isFXNDF || isFXForward || isRepo)
                                                                ifCreateTradeNode = false;

                                                            else if (isBond || isCDS)
                                                            {
                                                                double d = double.NaN;
                                                                double.TryParse(dr[dc.ColumnName].ToString(), out d);
                                                                if (!d.Equals(double.NaN))
                                                                {
                                                                    dr[dc.ColumnName] = (Math.Abs(d * 100.0)).ToString();
                                                                    eAttributeTagged.InnerXml = (Math.Abs(d * 100.0)).ToString();
                                                                    eAttributeFullDetailTagged.InnerXml = (Math.Abs(d * 100.0)).ToString();
                                                                }
                                                            }
                                                            break;

                                                        case "ORIGINALFACE":
                                                        case "TOTCOMMISSION":
                                                        case "COUNTERTDATEFX":
                                                        case "COUNTERSDATEFX":
                                                        case "INVESTMENTACCRUEDINTEREST":
                                                        case "ACCRUEDINTEREST":
                                                            if (isFX || isFXNDF || isFXForward || isRepo || isSwap)
                                                                ifCreateTradeNode = false;
                                                            break;

                                                        case "KEYVALUE":
                                                            if (!keyName.Equals(String.Empty))
                                                            {
                                                                if (dt.Columns.Contains(keyName))
                                                                {
                                                                    eAttributeTagged.InnerXml = dr[keyName].ToString();
                                                                    eAttributeFullDetailTagged.InnerXml = dr[keyName].ToString();
                                                                    ifCreateTradeNode = true;
                                                                }
                                                            }
                                                            break;

                                                        case "SETTLEDATE":
                                                            if (isFXForward || isFXNDF)
                                                            {
                                                                DateTime ddate = DateTime.MinValue;
                                                                DateTime.TryParse(dr["ActualSettleDate"].ToString().Substring(0, dr["ActualSettleDate"].ToString().IndexOf("T")), out ddate);
                                                                string sdate = ddate.AddDays(-2).ToShortDateString();

                                                                if (!sdate.Equals(DateTime.MinValue))
                                                                {
                                                                    eAttributeTagged.InnerXml = ddate.ToString("yyyy-MM-ddT23:59:00");
                                                                    eAttributeFullDetailTagged.InnerXml = ddate.ToString("yyyy-MM-ddT23:59:5");

                                                                    #region add spot date

                                                                    XmlElement nodeSpotdate1 = xdocTradeFullDetail.CreateElement("SpotDate", nsuri);
                                                                    nodeSpotdate1.InnerXml = Convert.ToDateTime(sdate).ToString("yyyy-MM-ddTHH:mm:ss");
                                                                    eAttributeTradeFullDetail.AppendChild(nodeSpotdate1);

                                                                    XmlElement nodeSpotdate2 = xdocTradeRecords.CreateElement("SpotDate", nsuri);
                                                                    nodeSpotdate2.InnerXml = Convert.ToDateTime(sdate).ToString("yyyy-MM-ddTHH:mm:ss");
                                                                    if (eAttributeTrade.Name.StartsWith("SpotFX") == false)
                                                                        eAttributeTrade.AppendChild(nodeSpotdate2);

                                                                    #endregion
                                                                }
                                                            }
                                                            break;

                                                        default:
                                                            ifCreateTradeNode = true;
                                                            break;
                                                    }
                                                }

                                                #endregion

                                                #region Expiring Options data processing

                                                if (ifUseOptionExpiryLogic)
                                                {
                                                    ifFormatDates = true;    //replaces logic for date formatting (see below).  
                                                }

                                                #endregion

                                                #region Cash Interest data processing

                                                if (ifUseCashEntriesLogic)
                                                {
                                                    ifFormatDates = true;    //replaces logic for date formatting (see below).  
                                                    switch (dc.ColumnName.ToUpper())
                                                    {
                                                        case "LOADERTYPE":
                                                        case "LOADERACTION":
                                                            ifCreateTradeNode = false;
                                                            break;

                                                        default:
                                                            ifCreateTradeNode = true;
                                                            break;
                                                    }
                                                }

                                                #endregion

                                                #region Multiway Pairoff processing

                                                if (ifUseMultiwayPairoffLogic)
                                                {
                                                    ifFormatDates = true;    //replaces logic for date formatting (see below).  
                                                    switch (dc.ColumnName.ToUpper())
                                                    {
                                                        case "INVESTINVTYPE":
                                                        case "INVESTASSETTYPE":
                                                        case "INVESTDESCRIPTION":
                                                        case "LONGQTY":
                                                        case "SHORTQTY":
                                                            ifCreateTradeNode = false;
                                                            break;
                                                    }
                                                }

                                                #endregion

                                                #region date formatting processing

                                                if (ifFormatDates)
                                                {
                                                    if (dc.ColumnName.ToUpper().EndsWith("DATE") && eAttributeTagged.InnerXml.Equals (String.Empty)==false)
                                                    {
                                                        eAttributeTagged.InnerXml = Convert.ToDateTime(eAttributeTagged.InnerXml).ToString("yyyy-MM-ddTHH:mm:ss");
                                                        eAttributeFullDetailTagged.InnerXml = Convert.ToDateTime(eAttributeFullDetailTagged.InnerXml).ToString("yyyy-MM-ddTHH:mm:ss");
                                                        ifCreateTradeNode = true;
                                                    }
                                                }

                                                #endregion

                                                #region Delete logic

                                                if (loaderAction.ToUpper().IndexOf("DELETE") > -1)
                                                {
                                                    if (!eAttributeTagged.Name.Equals("KeyValue"))
                                                        ifCreateTradeNode = false;
                                                }

                                                #endregion

                                                #region New logic

                                                if (loaderAction.ToUpper().IndexOf("NEW") > -1)
                                                {
                                                    if (eAttributeTagged.Name.Equals("KeyValue"))
                                                        ifCreateTradeNode = false;
                                                }

                                                #endregion

                                                if (ifCreateTradeNode && TestIfValidForSchema(eAttributeTagged, pbSchemaTestData, xdocValidationRules))
                                                    eAttributeTrade.AppendChild(eAttributeTagged);

                                                eAttributeTradeFullDetail.AppendChild(eAttributeFullDetailTagged);
                                            }
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        log.Error(((State)o).CurrentJobHash, ex);
                                        retval = StateEnums.Status.Warnings;
                                    }
                                }

                                eTradeRecord.AppendChild(eAttributeTrade);
                                eTradeFullDetail.AppendChild(eAttributeTradeFullDetail);
                                numrecs++;
                            }
                            catch (GenevaLoaderTypeMissing gex)
                            {
                                if (dtUnloadable.Columns.Count == 0)
                                    foreach (DataColumn dc in dr.Table.Columns)
                                        dtUnloadable.Columns.Add(dc.ColumnName);

                                dtUnloadable.ImportRow(dr);
                                retval = StateEnums.Status.Warnings;
                            }
                            catch (Exception ex)
                            {
                                log.Error(((State)o).CurrentJobHash, ex);
                                retval = StateEnums.Status.Warnings;
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    log.ErrorFormat(((State)o).CurrentJobHash, "Error : {0}", ex);
                    retval = StateEnums.Status.Error;
                }
            }

            if (!xdocTradeRecords.InnerXml.Equals(String.Empty))
                xdocTradeRecords.InnerXml = xdocTradeRecords.InnerXml.Replace("http://www.advent.com/SchemaRevLevel248/Geneva", "http://www.advent.com/SchemaRevLevel371/Geneva");

            AddToOutputs(this.Name, xdocTradeRecords);
            AddToOutputs(this.Name + "Unloadable", dtUnloadable);
            AddToOutputs(this.Name + "FullDetail", xdocTradeFullDetail);

            hpt.Stop();

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o );

            log.InfoFormat(((State)o).CurrentJobHash, "DataTableToGenevaXActs {0} converted {1} records in {2} seconds.", Name, numrecs, hpt.Duration);

            return retval;
        }
Ejemplo n.º 15
0
        public override int Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(job.KeyCode, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            int retval = 0;

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o );

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            int numrecs=0;
            bool ifAlreadyProcessed = false;

            try
            {
                lock (s_lock)
                {
                    foreach (Object oIn in inputData)
                    {
                        DataTable dt = oIn as DataTable;

                        if (dt != null)
                        {
                            numrecs += dt.Rows.Count;

                            DataTable dtOut = new DataTable();

                            foreach (DataColumn dc in dt.Columns)
                            {
                                dtOut.Columns.Add(new DataColumn(dc.ColumnName, dc.DataType));
                            }
                            if (colNameToAdd != String.Empty)
                                if (!dtOut.Columns.Contains(colNameToAdd))
                                    dtOut.Columns.Add(new DataColumn(colNameToAdd));
                                else
                                    ifAlreadyProcessed = true;

                            DataRow newrow = dtOut.NewRow();
                            for (int j = 0; j < dtOut.Columns.Count; j++)
                            {
                                newrow[j] = dtOut.Columns[j].ColumnName;
                            }
                            dtOut.Rows.Add(newrow);

                            int rowidx = 0;
                            foreach (DataRow dr in dt.Rows)
                            {
                                newrow = dtOut.NewRow();

                                for (int j = 0; j < dt.Columns.Count; j++)
                                {
                                    newrow[j] = dt.Rows[rowidx][j];
                                }

                                string newValueToAdd = GetPriorDate();
                                if (!newValueToAdd.Equals(String.Empty))
                                    newrow[dtOut.Columns.Count - 1] = newValueToAdd;
                                else if (colNameToAdd != String.Empty)
                                    newrow[dtOut.Columns.Count - 1] = colValueToAdd;

                                dtOut.Rows.Add(newrow);
                                rowidx++;
                            }

                            if (!ifAlreadyProcessed)
                                AddToOutputs(this.Name, dtOut);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat(job.KeyCode, "Error : {0}", ex);
                retval = -1;
            }

            hpt.Stop();

            log.InfoFormat(job.KeyCode, "StaarsConversion {0} processed {1} records in {2} seconds.", Name, numrecs, hpt.Duration);

            return retval;
        }
Ejemplo n.º 16
0
		public override StateEnums.Status Execute ( Object o, Hashtable inputData )
		{
			log.InfoFormat(jobKeyCode, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");					

			StateEnums.Status retval = StateEnums.Status.Success;
			double duration = 0;

			int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o);

			if (IfResetOnEachRun)
				ResetOutput();

			PassAlongOutputs(inputData);

            if (inputData.Count > 0)
            {
                PerfTimer hpt = new PerfTimer();
                hpt.Start();

                try
                {
                    if (InputToProcess.CompareTo(String.Empty) != 0)
                        documentToValidate = inputData[InputToProcess] as XmlDocument;
                    else
                        documentToValidate = inputData[0] as XmlDocument;

                    if (File.Exists(XsdFilePath))
                    {
                        log.InfoFormat("GenevaLoadablesXmlValidator is {0}", ifValidate ? "enabled" : "disabled");
                        if (documentToValidate != null)
                        {

                            #region XML namespace cleanup

                            if (String.IsNullOrEmpty(GenevaXmlNameSpace))
                                log.WarnFormat(jobKeyCode, "No Xml name space was sent in will use default {0}", xns);
                            else
                                xns = GenevaXmlNameSpace;

                            XElement noNamespaceXml = RemoveAllNamespaces(XElement.Parse(documentToValidate.OuterXml));
                            noNamespaceXml.Add(new XAttribute("xmlns", xns.NamespaceName));
                            documentToValidate.Load(noNamespaceXml.CreateReader());

                            #endregion

                            SoapValidator sv = new SoapValidator(XsdFilePath,jobKeyCode);
                            XmlDocument xdBadNodes = sv.ValidateXml(documentToValidate);

							if (xdBadNodes.DocumentElement.ChildNodes.Count > 0) 
                            {
                                log.WarnFormat(jobKeyCode, string.Format("Found {0} nodes violating schema", xdBadNodes.ChildNodes.Count));

                                foreach (XmlNode xdBadNode in xdBadNodes.DocumentElement.ChildNodes)
                                {
                                    XmlNodeList list = documentToValidate.SelectNodes(String.Format("//{0}", xdBadNode.Name));
                                    foreach (XmlNode node in list)
                                    {
                                        try
                                        {
                                            node.ParentNode.RemoveChild(node);
                                            log.InfoFormat(jobKeyCode, "Pruned invalid node: {0}", node.Name);
                                        }
                                        catch (Exception e)
                                        {
                                            log.WarnFormat(jobKeyCode, "Failed to prune invalid node: {0}", node.Name);
                                        }
                                    }
                                }

								AddToOutputs(this.name + "_Kickouts", xdBadNodes);
								
                                //mailEnvelop = string.Format("{0} \n <br><br><b>List of nodes that are invalid or have invalid values</b>", mailEnvelop);
                                //foreach (var mess in nodesViolatedSchema)
                                //    mailEnvelop = string.Format("{0} <br/>&lt;{1}&gt;{2}&lt;/{1}&gt;", mailEnvelop, mess.Value.NodeName, mess.Value.NodeValue);

                                //mailEnvelop = string.Format("{0}<br/><br/>Please search invalid nodes in attached file to locate invalid loadables.", mailEnvelop);

                                //AddToOutputs(this.name + "_Kickouts", notLoadable);
                                //AddToOutputs(this.name + "_MailEnvelope", mailEnvelop);
                            }
                        }
                        else
                        {
                            log.WarnFormat(jobKeyCode, "No data was passed into module {0}. No job was done", this.Name);
                        }
                    }
                    else
                    {
                        log.WarnFormat(jobKeyCode, "File not found: {0}", XsdFilePath);
                    }

                    AddToOutputs(this.name, documentToValidate);
	                
                }
                catch (Exception ex)
                {
                    log.ErrorFormat(jobKeyCode, "{0}", ex);
                    retval = StateEnums.Status.Error;
                }

                hpt.Stop();
                duration = hpt.Duration;
            }

		    int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o);

			return retval;			 
		}
Ejemplo n.º 17
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(((State)o).CurrentJobHash, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            StateEnums.Status retval = StateEnums.Status.Success;
            int numrecs = 0;
            bool ifCreatenode = true;
            Hashtable expTracker = new Hashtable();
            XmlDocument xdoc = new XmlDocument();

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o);

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            if (inputData.Count > 0)
            {
                DataTable dt = new DataTable();
                if (InputToProcess.CompareTo(String.Empty) != 0)
                    dt = inputData[InputToProcess] as DataTable;
                else
                    dt = inputData[0] as DataTable;

                Hashtable transforms = null;
                if (ifMapColumnsToFields)
                    transforms = GetTransformsFromColumns(dt);
                else
                    transforms = GetTransforms();

                try
                {
                    if (dt == null)
                        throw (new ApplicationException("Datatable to convert to Geneva prices is null."));

                    XmlElement elemTransactions = xdoc.CreateElement(dt.TableName, nsuri);

                    if (ifUseGenevaLoaderNode)
                    {
                        XmlElement elemTable = xdoc.CreateElement("GenevaLoader", nsuri);
                        elemTable.AppendChild(elemTransactions);
                        xdoc.AppendChild(elemTable);
                    }
                    else
                        xdoc.AppendChild(elemTransactions);

                    foreach (DataRow dr in dt.Rows)
                    {
                        XmlElement elemRow = null;

                        if (!loaderTypeField.Equals(String.Empty))
                        {
                            System.Globalization.CultureInfo cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
                            System.Globalization.TextInfo textInfo = cultureInfo.TextInfo;

                            if (ifModifyCase)
                                loaderType = textInfo.ToTitleCase(dr[loaderTypeField].ToString().ToLower());
                            else
                                loaderType = dr[loaderTypeField].ToString();
                        }

                        if (!loaderActionField.Equals(String.Empty))
                            loaderAction = dr[loaderActionField].ToString();

                        elemRow = xdoc.CreateElement(loaderType, nsuri); // + "_" + loaderAction, nsuri);

                        foreach (DataColumn dc in dt.Columns)
                        {
                            try
                            {
                                ifCreatenode = true; //default
                                string colName = dc.ColumnName.Replace("#", "").Replace(" ", "").Replace("/", "").Trim();

                                if (colName.ToUpper().Equals("LOADERTYPE"))
                                    continue;

                                if (transforms.ContainsKey(colName.ToUpper()))
                                {
                                    string[] newTags = transforms[colName.ToUpper()].ToString().Split(',');
                                    foreach (string targetTag in newTags)
                                    {

                                        XmlElement elemField = xdoc.CreateElement(targetTag, nsuri);
                                        elemField.InnerXml = dr[dc.ColumnName].ToString().Replace("&", "");


                                        #region date formatting processing

                                        if (ifFormatDates)
                                        {
                                            if (dc.ColumnName.ToUpper().EndsWith("DATE"))
                                            {
                                                elemField.InnerXml = Convert.ToDateTime(elemField.InnerXml).ToString("yyyy-MM-ddTHH:mm:ss");
                                                ifCreatenode = true;
                                            }
                                        }
                                        #endregion

                                        if (ifCreatenode)
                                            elemRow.AppendChild(elemField);
                                    }
                                }

                            }
                            catch (Exception ex)
                            {
                                log.Error(((State)o).CurrentJobHash, ex);
                                retval = StateEnums.Status.Warnings;
                            }
                        }

                        elemTransactions.AppendChild(elemRow);
                        numrecs++;
                    }
                }
                catch (Exception ex)
                {
                    log.ErrorFormat(((State)o).CurrentJobHash, "Error : {0}", ex);
                    retval = StateEnums.Status.Error;
                }
            }

            AddToOutputs(this.Name, xdoc);

            hpt.Stop();

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o);

            log.InfoFormat(((State)o).CurrentJobHash, "DataTableToGenevaPrice {0} converted {1} records in {2} seconds.", Name, numrecs, hpt.Duration);

            return retval;
        }
Ejemplo n.º 18
0
        public override int Execute(Object o, Hashtable inputData)
        {
            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o );

            log.InfoFormat("Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            int retval = 0;

            if (inputData.Count == 0) return 0;

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            DataTable dt = new DataTable();
            DataTable dtOut = new DataTable();

            try
            {
                if (InputToProcess.CompareTo(String.Empty) != 0)
                    dt = (DataTable)((Hashtable)inputData)[InputToProcess];
                else
                    dt = (DataTable)((Hashtable)inputData)[0];

                if (dt != null)
                    recCountTotal = dt.Rows.Count;

                if (IfResetOnEachRun)
                    ResetOutput();

                if (dealFields.CompareTo(String.Empty) != 0)
                {
                    string[] cols = dealFields.Split(',');
                    foreach (string col in cols)
                        dtOut.Columns.Add(col);

                    foreach (DataRow dr in dt.Rows)
                    {
                        if (dr[0].ToString().CompareTo(filter) == 0)
                        {
                            string investment = String.Empty;
                            DataRow drout = dtOut.NewRow();

                            for (int i = 0; i < dtOut.Columns.Count; i++)
                            {
                                if (dtOut.Columns[i].ColumnName.CompareTo("Action")==0)      //Action
                                {
                                    if (dr[i].ToString().CompareTo("Correct") == 0)
                                        dr[i] = "Delete";
                                    else if (dr[i].ToString().ToUpper().CompareTo("NEW") == 0)
                                        dr[i] = "InsertUpdate";
                                    else
                                        drout[i] = dr[i].ToString();
                                }                                    
                                else if (dtOut.Columns[i].ColumnName.CompareTo("BloombergTicker") == 0)      //Action
                                {
                                    investment = dr[i].ToString().Replace(" Equity", "");
                                    investment = investment.Replace(" US", "");
                                }
                                else if (dtOut.Columns[i].ColumnName.CompareTo("TransIndicator") == 0)      //Action
                                {
                                    if (dr[i].ToString().CompareTo("B") == 0)
                                        dr[i] = "Buy";
                                    else if (dr[i].ToString().CompareTo("S") == 0)
                                        dr[i] = "Sell";
                                }
                                else if (dtOut.Columns[i].ColumnName.CompareTo("SubTransIndicator") == 0)      //Action
                                {
                                    switch (dr[i].ToString().ToUpper())
                                    {
                                        case "BUY LONG":
                                            dr[i] = "Buy";
                                            break;
                                        case "BUY COVER":
                                            dr[i] = "CoverShort";
                                            break;
                                        case "SELL LONG":
                                            dr[i] = "Sell";
                                            break;
                                        case "SELL SHORT":
                                            dr[i] = "SellShort";
                                            break;
                                    }
                                    dr[i].ToString().Replace(" Equity", "");
                                }
                                else if (dtOut.Columns[i].ColumnName.CompareTo("Quantity") == 0)
                                {
                                    dr[i] = Math.Abs(Convert.ToDouble(dr[i]));
                                }
                                else if (dtOut.Columns[i].ColumnName.CompareTo("TradeDate") == 0)
                                {
                                    dr[i] = Convert.ToDateTime(dr[i]).ToString("yyyy-MM-ddTHH:mm:ss");
                                }
                                else if (dtOut.Columns[i].ColumnName.CompareTo("SettlementDate") == 0)
                                {
                                    dr[i] = Convert.ToDateTime(dr[i]).ToString("yyyy-MM-ddTHH:mm:ss");
                                }
                                else if (dtOut.Columns[i].ColumnName.CompareTo("SECFee") == 0)
                                {
                                    try
                                    {
                                        double d = Convert.ToDouble(dr[i]);
                                        dr[i] = d;
                                    }
                                    catch
                                    {
                                        dr[i] = "";
                                    }
                                }
                                else if (dtOut.Columns[i].ColumnName.CompareTo("Folder") == 0)
                                {
                                    string broker = String.Empty;
                                    switch (dr["Field7"].ToString())
                                    {
                                        case "DBNY":
                                            broker = "DBNY";
                                            break;
                                        case "MSNY":
                                            broker = "MSCO";
                                            break;
                                        case "GS":
                                            broker = "GSCO";
                                            break;
                                    }
                                    if (dr[i].ToString().Length.Equals(6))
                                        dr[i] = String.Format("{0}-00{1}", broker, dr[i].ToString().Replace("'", ""));
                                    else
                                        dr[i] = String.Format("{0}-{1}", broker, dr[i].ToString().Replace("'", ""));
                                }
                                if (i < dr.Table.Columns.Count)
                                    if (dtOut.Columns[i].ColumnName.CompareTo("Investment") == 0)
                                        drout[i] = investment;
                                    else
                                        drout[i] = dr[i].ToString();
                                else
                                {
                                    //add any additional columns (like Investment);
                                    if (dtOut.Columns[i].ColumnName.CompareTo("Investment") == 0)
                                        drout[i] = investment;
                                }
                            }

                            dtOut.Rows.Add(drout);
                            recCountSuccess++;
                        }
                    }

                    if (dtOut.Rows.Count > 0)
                        AddToOutputs(this.Name, dtOut);
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat("Error : {0}", ex);
                retval = -1;
            }

            hpt.Stop();

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.DoneSuccess, "", (State)o );
            UpdateRecordCount(activityIdEnding, recCountTotal, recCountSuccess, recCountTotal-recCountSuccess);

            return retval;
        }
Ejemplo n.º 19
0
        public override int Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(job.KeyCode, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            int retval = 0;

            XmlDocument xdoc = new XmlDocument();

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o);

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            if (inputData.Count > 0)
            {
                DataTable dt = new DataTable();

                if (InputToProcess.CompareTo(String.Empty) != 0)
                    dt = inputData[InputToProcess] as DataTable;
                else
                {
                    dt = inputData[0] as DataTable;
                }

                if (dt != null && dt.Rows.Count > 0)
                {
                    recCountTotal = dt.Rows.Count;

                    if (dt.TableName.Equals(String.Empty))
                        dt.TableName = "datatable";

                    XmlElement elemTable = xdoc.CreateElement(dt.TableName);
                    xdoc.AppendChild(elemTable);


                    try
                    {
                        double commission = 0;
                        double exchangeFee = 0;
                        double otherFee = 0;

                        if (dt != null && dt.Rows.Count > 0)
                        {
                            foreach (DataRow dr in dt.Rows)
                            {
                                XmlElement elemRow = xdoc.CreateElement("datarow");
                                if (ifUseFuturesProcessingLogic)
                                {
                                    //add new cols for comm and exp
                                    if (!dt.Columns.Contains("COMMISSION"))
                                        dt.Columns.Add("COMMISSION", System.Type.GetType("System.Double"));
                                    if (!dt.Columns.Contains("EXCHANGE_FEE"))
                                        dt.Columns.Add("EXCHANGE_FEE", System.Type.GetType("System.Double"));
                                    if (!dt.Columns.Contains("OTHER_FEE"))
                                        dt.Columns.Add("OTHER_FEE", System.Type.GetType("System.Double"));
                                }

                                #region Pre Process

                                string putCallInd = String.Empty;
                                string broker = String.Empty;
                                string strikePrice = String.Empty;
                                string product = String.Empty;
                                string LE = String.Empty;
                                double tradePrice = 0;
                                double qty = 0;

                                foreach (DataColumn dc in dt.Columns)
                                {
                                    //string colNameR = dc.ColumnName.Replace("#", "").Replace(" ", "").Replace("/", "").Replace("\"", "").Trim();
                                    string colNameR = dc.ColumnName.ToUpper();

                                    switch (colNameR)
                                    {
                                        case "BROKER":
                                            if (dr[colNameR].ToString().Equals("MER"))
                                                colNameR = "MLCO";
                                            else
                                                broker = "MLCO";
                                            break;

                                        case "CALL/PUT IND":
                                            putCallInd = dr[colNameR].ToString();
                                            break;

                                        case "STRIKE PRICE":
                                            strikePrice = dr[colNameR].ToString();
                                            break;
                                    }
                                }

                                #endregion

                                foreach (DataColumn dc in dt.Columns)
                                {
                                    try
                                    {
                                        string colNameR = dc.ColumnName.Replace("#", "").Replace(" ", "").Replace("/", "").Replace("\"", "").Trim();

                                        XmlElement elemField = null;
                                        if (ifUseFuturesProcessingLogic)
                                            elemField = xdoc.CreateElement(colNameR.ToUpper());
                                        else
                                            elemField = xdoc.CreateElement(colNameR);

                                        elemField.InnerXml = dr[dc.ColumnName].ToString().Replace("&", "");

                                        #region ML Futures data processing

                                        if (ifUseFuturesProcessingLogic)
                                        {
                                            #region commission related
                                            try
                                            {
                                                if (dr["Description"].ToString().IndexOf("CBT 10Y TNOTE") > -1)
                                                    product = "CBT 10Y TNOTE";
                                                else if (dr["Description"].ToString().IndexOf("CBT T-BONDS") > -1)
                                                    product = "CBT T-BONDS";
                                                else if (dr["Description"].ToString().IndexOf("EMINI S&P 500") > -1)
                                                    product = "EMINI S&P 500";
                                                else if (dr["Description"].ToString().IndexOf("EMINI NSDQ") > -1)
                                                    product = "EMINI NSDQ";
                                                else if (dr["Description"].ToString().IndexOf("NYM LT CRUDE") > -1)
                                                    product = "NYM LT CRUDE";
                                                else if (dr["Description"].ToString().IndexOf("CMX GOLD") > -1)
                                                    product = "CMX GOLD";
                                                else if (dr["Description"].ToString().IndexOf("CBT SOYBEANS") > -1)
                                                    product = "CBT SOYBEANS";
                                                else if (dr["Description"].ToString().IndexOf("EURO DLR") > -1)
                                                    product = "IMM EURO DLR";

                                                LE = GetCat1CodeFromAccount(dr["ACCOUNT NUMBER"].ToString());
                                                tradePrice = Convert.ToDouble(dr["TRADE PRICE"]);
                                                qty = Convert.ToDouble(dr["QUANTITY"]);

                                            }
                                            catch (Exception ex)
                                            {
                                                log.Warn(job.KeyCode, ex);
                                            }
                                            #endregion

                                            switch (colNameR.ToUpper())
                                            {
                                                case "BLOOMBERGCODE":
                                                    if (!putCallInd.Equals(String.Empty))
                                                        elemField.InnerXml = String.Format("{0}{1} {2}",
                                                            elemField.InnerXml,
                                                            putCallInd,
                                                            strikePrice.Replace(".", "").Trim('0'));
                                                    break;

                                                //case "BROKER":
                                                //    if (elemField.InnerXml.ToUpper().Equals("MER"))
                                                //        elemField.InnerXml = "MLCO";
                                                //    break;

                                                case "STATUS":
                                                    if (elemField.InnerXml.ToUpper().Equals("ADD") || elemField.InnerXml.ToUpper().Equals("INSERTUPDATE"))
                                                        elemField.InnerXml = "InsertUpdate";
                                                    else
                                                        elemField.InnerXml = "Delete";
                                                    break;

                                                case "ACCOUNTNUMBER":
                                                    if (broker.CompareTo(String.Empty) != 0)
                                                        elemField.InnerXml = String.Format("{0}-{1}", broker, elemField.InnerXml);
                                                    break;

                                                case "BUYORSELL":
                                                    if (elemField.InnerXml.ToUpper().Equals("B"))
                                                        elemField.InnerXml = "Buy";
                                                    else
                                                        elemField.InnerXml = "Sell";
                                                    break;

                                                case "CONTRACTYYYYMM":
                                                    try
                                                    {
                                                        string s = elemField.InnerXml.Replace("\"", "");

                                                        if (s.Length == 6)
                                                            s = String.Format("{0}-{1}-01", s.Substring(0, 4), s.Substring(4, 2));

                                                        DateTime dtt = Convert.ToDateTime(s);
                                                        elemField.InnerXml = dtt.ToString("yyyy-MM-ddTHH:mm:ss");
                                                    }
                                                    catch (Exception ex)
                                                    { log.Warn(job.KeyCode, ex); }
                                                    break;

                                                case "TRADEDATE":
                                                case "TRADETIME":
                                                    try
                                                    {
                                                        string s = elemField.InnerXml.Replace("\"", "");

                                                        string dts;
                                                        if (s[1].Equals('/') || s.Length.Equals(10))
                                                            dts = s; //.Replace(" ", "T").Replace("TPM", " PM").Replace("TAM", " AM");
                                                        else
                                                            dts = String.Format("{0}-{1}-{2}", s.Substring(0, 4), s.Substring(4, 2), s.Substring(6, 2));
                                                        DateTime dtt = Convert.ToDateTime(dts);
                                                        elemField.InnerXml = dtt.ToString("yyyy-MM-ddTHH:mm:ss");
                                                    }
                                                    catch (Exception ex)
                                                    { log.Warn(job.KeyCode, ex); }
                                                    break;

                                                case "COMMISSION":
                                                    try
                                                    {
                                                        commission = GetCommAndFees("Commission", "Future", "MLCO", String.Empty, product, LE, "US", String.Empty, String.Empty, tradePrice, qty, 0);
                                                    }
                                                    catch (Exception ex)
                                                    { log.Warn(job.KeyCode, ex); }
                                                    break;

                                                case "EXCHANGE_FEE":
                                                    try
                                                    {
                                                        exchangeFee = GetCommAndFees("Exchange", "Future", "MLCO", String.Empty, product, LE, "US", String.Empty, String.Empty, tradePrice, qty, 0);
                                                    }
                                                    catch (Exception ex)
                                                    { log.Warn(job.KeyCode, ex); }
                                                    break;

                                                case "OTHER_FEE":
                                                    try
                                                    {
                                                        otherFee = GetCommAndFees("Clearing", "Future", "MLCO", String.Empty, product, LE, "US", String.Empty, String.Empty, tradePrice, qty, 0);
                                                    }
                                                    catch (Exception ex)
                                                    { log.Warn(job.KeyCode, ex); }
                                                    break;

                                            }
                                        }

                                        #endregion

                                        if (ifUseFuturesProcessingLogic && colNameR != "COMMISSION" && colNameR != "EXCHANGE_FEE" && colNameR != "OTHER_FEE")
                                            elemRow.AppendChild(elemField);
                                        else
                                            elemRow.AppendChild(elemField);
                                    }
                                    catch (Exception ex)
                                    {
                                        log.Error(job.KeyCode, ex);
                                    }
                                }

                                #region Added for Geneva commission and expense records

                                if (ifUseFuturesProcessingLogic)
                                {
                                    //first record
                                    string nonCapCurrency = String.Empty;
                                    int noncapNumber = 1;
                                    string nonCapExpenseCode = "FuturesCommissionExpense";
                                    string nonCapLocationAccount = String.Empty;
                                    double nonCapAmount = commission;

                                    XmlElement expenseNode = CreateNonCapExpenseNode(xdoc, nonCapCurrency, noncapNumber, nonCapExpenseCode, nonCapLocationAccount, nonCapAmount);
                                    elemRow.AppendChild(expenseNode);

                                    //second record
                                    noncapNumber = 2;
                                    nonCapExpenseCode = "FuturesExchangeFee";
                                    nonCapAmount = exchangeFee + otherFee;

                                    expenseNode = CreateNonCapExpenseNode(xdoc, nonCapCurrency, noncapNumber, nonCapExpenseCode, nonCapLocationAccount, nonCapAmount);
                                    elemRow.AppendChild(expenseNode);
                                }

                                #endregion

                                elemTable.AppendChild(elemRow);
                                recCountSuccess++;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        log.ErrorFormat(job.KeyCode, "Error : {0}", ex);
                        retval = -1;
                        recCountSuccess = 0;
                        recCountFailed = recCountTotal;
                    }
                }
            }

            AddToOutputs(this.Name, xdoc);

            hpt.Stop();

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.DoneSuccess, "", (State)o);
            UpdateRecordCount(activityIdEnding, recCountTotal, recCountSuccess, recCountFailed);

            log.InfoFormat(job.KeyCode, "DataTableToXmlDeprecated {0} converted {1} records in {2} seconds.", Name, recCountTotal, hpt.Duration);

            return retval;
        }
Ejemplo n.º 20
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
		{
			log.InfoFormat(jobKeyCode, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");

            StateEnums.Status retval = 0;
			double duration = 0;

			int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o);

			if (IfResetOnEachRun)
				ResetOutput();

			PassAlongOutputs(inputData);

			
			if (!ColumnToMap.Equals(string.Empty) || ColumnIndexToMap!=0 )
			{
				PerfTimer hpt = new PerfTimer();
				hpt.Start();

				DataTable dt = null ;
				DataTable dtOut;
				if (InputToProcess.CompareTo(String.Empty) != 0)
					dt = inputData[InputToProcess] as DataTable;


				if (dt!=null)
				{
					dtOut = dt.Copy();
					try
					{

						if (string.IsNullOrEmpty(ColumnFromMap))
							ColumnFromMap = ColumnToMap;

						string columnNameFromMap = string.IsNullOrEmpty(ColumnFromMap)
							                           ? (string.IsNullOrEmpty(ColumnToMap)
								                              ? dtOut.Columns[ColumnIndexToMap].ColumnName
								                              : ColumnToMap)
							                           : ColumnFromMap;

						//VJ string columnNameToMap = ValuepairsMapfile.Equals(string.Empty)
						//                            ? dtOut.Columns[ColumnIndexToMap].ColumnName
						//                            : ValuepairsMapfile;
						string columnNameToMap = ColumnToMap.Equals(string.Empty)
							                         ? dtOut.Columns[ColumnIndexToMap].ColumnName
							                         : ColumnToMap;

						//foreach (var map in GetValuesPair())
						//{
						//    DataRow[] rows = dtOut.Select(columnNameToMap+"='"+map.Key+"'");
						//    foreach(DataRow row in rows)
						//    {
						//        row[columnNameToMap]=map.Value;
						//    }
						//}

						//VJ Loop s/b through records to map, looping through map dictionary
						// with select from source table by key can be a big overhead
						//
						//later add whatever type conversion may be necessary? for now use as string...
						Dictionary<string, string> mapTable = GetValuesPair(jobKeyCode);
						if (mapTable.Count > 0)
						{
							if (IfTraverseSourceDataSet)
							{
								foreach (DataRow row in dtOut.Rows)
								{
									string checkKey = row[columnNameFromMap].ToString();
									if (mapTable.ContainsKey(checkKey))
										row[columnNameToMap] = mapTable[checkKey];
								}
							}
							else
							{
								foreach (var map in mapTable)
								{
									DataRow[] rows = dtOut.Select(string.Format("[{0}]='{1}'", columnNameFromMap, map.Key));
									foreach (DataRow row in rows)
										row[columnNameToMap] = map.Value;
								}
							}
						}
						else
						{
							log.WarnFormat(jobKeyCode, string.Format("ValuepairsMapfile {0}  does not contain pairs!", ValuepairsMapfile));
						}
					}
					catch (Exception ex)
					{
						log.ErrorFormat(jobKeyCode, "Error happens during execution module {0} {1}", this.name, ex.Message);
						log.ErrorFormat(jobKeyCode, "{0}", ex);
						retval = StateEnums.Status.Error;
					}
					finally
					{
						if (dtOut != null)
						{
							if (string.IsNullOrEmpty(dtOut.TableName))
								dtOut.TableName = this.Name;

							AddToOutputs(this.Name, dtOut);
						}
						hpt.Stop();
						duration = hpt.Duration;
					}
				}
				else
				{
					log.WarnFormat(jobKeyCode,"No data was paased to {0}",this.Name);
					log.WarnFormat(jobKeyCode, "Nothig was produces and posted to the data bus");
				}
			}

			int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o);

			return retval;
		}
Ejemplo n.º 21
0
 internal void Compile(GenerationRules generation, JasperRuntime runtime, PerfTimer timer)
 {
     _generation = generation;
     _container  = runtime.Container;
 }
Ejemplo n.º 22
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
		{
			log.InfoFormat(jobKeyCode, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString(CultureInfo.InvariantCulture) : "no");

            StateEnums.Status retval = 0;

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o);

			if (IfResetOnEachRun)
				ResetOutput();

			PassAlongOutputs(inputData);
			DataTable dtOut = null;
            _ds.Tables.Clear();
            string errorMsg = string.Empty;

			if (inputData.Count > 0)
			{
				
				if (InputToProcess.CompareTo(String.Empty) == 0)
				{
                   errorMsg = "No inputs was passed to DataTableJoiner module!";
                    log.Error(jobKeyCode, errorMsg);
                    throw new Exception(errorMsg);
				}

				PerfTimer hpt = new PerfTimer();
				hpt.Start();

				try
				{
                    List<string> dataTablesToJoin = DataTablesJoinHelper.GetGenericListFromDelimString(InputToProcess, ',');

                    if (dataTablesToJoin.Count != 2)
					{
                        errorMsg = "Icorrect number of tables to join. Two datatable names must be passed as Inputs to DataTableJoiner module!";
                        log.Error(jobKeyCode, errorMsg);
                        throw new Exception(errorMsg);
					}

                    if (_leftJoinColumns.Count < 1)
                    {
                        errorMsg = "Number of Left table columns to join on must be 1 or more and passed as LeftJoinColumns parameter to DataTableJoiner module!";
                        log.Error(jobKeyCode, errorMsg);
                        throw new Exception(errorMsg);
                    }

                    if (_rightJoinColumns.Count < 1)
                    {
                        errorMsg = "Number of Right table columns to join on must be 1 or more and passed as RightJoinColumns parameter to DataTableJoiner module!";
                        log.Error(jobKeyCode, errorMsg);
                        throw new Exception(errorMsg);
                    }

                    DataTable leftTable = inputData[dataTablesToJoin[0]] as DataTable;
                    if (leftTable == null)
                    {
                        errorMsg = string.Format("Input data {0} is not valid type DataTable!", dataTablesToJoin[0]);
                        log.Error(jobKeyCode, errorMsg);
                        throw new Exception(errorMsg);
                    }

                    DataTable rightTable = inputData[dataTablesToJoin[1]] as DataTable;
                    if (rightTable == null)
                    {
                        errorMsg = string.Format("Input data {0} is not valid type DataTable!", dataTablesToJoin[1]);
                        log.Error(jobKeyCode, errorMsg);
                        throw new Exception(errorMsg);
                    }

                    string logMsg = string.Empty; 
    				mailEnvelop += "<br/> Joined Table stats:";

                    dtOut = DataTablesJoinHelper.JoinTables(_ds,
                                                                                                    leftTable,
                                                                                                    rightTable,
                                                                                                    _leftJoinColumns,
                                                                                                    _rightJoinColumns,
                                                                                                    _outputColumns,
                                                                                                    _joinType,
                                                                                                    _joinDisambiguationType
                                                                                                 );

                    recCountSuccess = +leftTable.Rows.Count;
                    log.InfoFormat(jobKeyCode, "Joined {0} rows from Left table {1}", leftTable.Rows.Count, leftTable.TableName);

                    recCountSuccess = +rightTable.Rows.Count;
                    log.InfoFormat(jobKeyCode, "Joined {0} rows from Right table {1}", rightTable.Rows.Count, rightTable.TableName);

                    recCountSuccess = +dtOut.Rows.Count;
                    mailEnvelop += string.Format("<br/>{0}", "Join operation resulted in {0} rows in table {1}", dtOut.Rows.Count, dtOut.TableName);
                }
                catch (Exception ex)
                {
                    log.ErrorFormat(jobKeyCode, "{0}", ex);
                    retval = StateEnums.Status.Error;
                }
                finally
                {
					if (dtOut != null)
					{
						if (dtOut.Rows.Count > 0 || _ifAddEmptyDataTableToOutput)
						{
							dtOut.TableName = string.IsNullOrEmpty(this.OutputTableName) ? this.name : this.OutputTableName;
							AddToOutputs(this.Name, dtOut);
							AddToOutputs(this.Name + "_MailEnvelop", mailEnvelop);
						}
						else
						{
							AddToOutputs(this.Name + "_MailEnvelop", string.Format("<br/>No data was put on bus as result of joining data tables in {0}", this.Name));
						}
					}
                    hpt.Stop();
                }
            }

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o);
            UpdateRecordCount(activityIdEnding, recCountTotal, recCountSuccess, recCountFailed);

            return retval;
        }
Ejemplo n.º 23
0
 public LightweightJasperStartup(JasperRuntime runtime, PerfTimer timer, Task handlerCompilation)
 {
     _runtime            = runtime;
     _timer              = timer;
     _handlerCompilation = handlerCompilation;
 }
Ejemplo n.º 24
0
        public async override Task <long> SendChunkAsync(TransferConnection transfer, long filePos, int bytesRequired)
        {
            var startTime = DateTime.UtcNow;

            if (IsSegmentNeededAttached)
            {
                var ea = new UploadItemSegmentEventArgs
                {
                    UploadItem = this,
                    Magnet     = Content.Magnet,
                    Position   = filePos,
                    Length     = bytesRequired
                };

                OnSegmentNeeded(ea);

                if (ea.FromCache)
                {
                    await transfer.SendAsync(ea.Stream).ConfigureAwait(false);

                    Interlocked.Add(ref _uploadedBytes, ea.Length);
                    return(bytesRequired);
                }
            }

            long bytesCopied = 0;

            if (UploadDelay != 0)
            {
                await Task.Delay(UploadDelay).ConfigureAwait(false);
            }

            var sw = PerfTimer.StartNew();

            using (new PerfLimit(() =>
                                 $"Slow http request {SystemPath} pos: {filePos} len: {bytesRequired} filelen: {Content.Magnet.Size}", 4000))
            {
                try
                {
                    // custom http connections pool
                    await Manager.CopyChunkToTransferAsync(transfer, SystemPath, filePos, bytesRequired).ConfigureAwait(false);

                    // default http connections pool
                    //var responseStream = await HttpHelper.GetHttpChunkAsync(SystemPath, filePos, bytesRequired).ConfigureAwait(false);
                    //await transfer.SendAsync(responseStream).ConfigureAwait(false);

                    bytesCopied = bytesRequired;

                    Interlocked.Add(ref _uploadedBytes, bytesCopied);
                }
                catch (Exception x)
                {
                    Logger.Error("DownloadChunk error: {0}", x.Message);
                }
            }
            sw.Stop();

            HttpHelper.RegisterDownloadTime((int)sw.ElapsedMilliseconds);

            if (IsSegmentDownloadedAttached)
            {
                OnSegmentDownloaded(new UploadItemSegmentEventArgs
                {
                    UploadItem      = this,
                    Magnet          = Content.Magnet,
                    Position        = filePos,
                    Length          = bytesRequired,
                    RequestedAt     = startTime,
                    DownloadingTime = sw.Elapsed
                });
            }

            return(bytesCopied);
        }
Ejemplo n.º 25
0
        private async void OnMessageAdcget(ADCGETMessage adcgetMessage)
        {
            var reqItem = new ContentItem();

            if (adcgetMessage.Type == ADCGETType.Tthl)
            {
                SendMessageAsync(new ErrorMessage {
                    Error = "File Not Available"
                }.Raw);
                return;
            }

            if (adcgetMessage.Type == ADCGETType.File)
            {
                if (adcgetMessage.Request.StartsWith("TTH/"))
                {
                    reqItem.Magnet = new Magnet {
                        TTH = adcgetMessage.Request.Remove(0, 4)
                    };
                }
                else
                {
                    reqItem.Magnet = new Magnet {
                        FileName = adcgetMessage.Request
                    };
                }
            }

            _requests.Update(1);
            _isResponding = true;

            if (!SlotUsed)
            {
                var ea = new CancelEventArgs();
                OnSlotRequest(ea);

                if (ea.Cancel)
                {
                    Logger.Info("Can't start upload to {0}, no slots available", Source);
                    SendMessageAsync(new MaxedOutMessage().Raw);
                    return;
                }

                SlotUsed = true;
            }

            if (UploadItem == null || UploadItem.Content.Magnet.TTH != reqItem.Magnet.TTH)
            {
                var ea = new UploadItemEventArgs {
                    Transfer = this, Content = reqItem
                };
                OnUploadItemNeeded(ea);

                if (UploadItem != null)
                {
                    var uea = new UploadItemEventArgs();
                    OnUploadItemDispose(uea);
                    if (!uea.Handled)
                    {
                        UploadItem.Dispose();
                    }
                }

                UploadItem = ea.UploadItem;
                if (ea.UploadItem == null)
                {
                    SendMessageAsync(new ErrorMessage {
                        Error = "File Not Available"
                    }.Raw);
                    return;
                }
            }

            if (adcgetMessage.Start >= UploadItem.Content.Magnet.Size)
            {
                SendMessageAsync(new ErrorMessage {
                    Error = "File Not Available"
                }.Raw);
                return;
            }

            if (adcgetMessage.Start + adcgetMessage.Length > UploadItem.Content.Magnet.Size)
            {
                Logger.Warn("Trim ADCGET length to file actual length {0}/{1}",
                            adcgetMessage.Start + adcgetMessage.Length, UploadItem.Content.Magnet.Size);
                adcgetMessage.Length = UploadItem.Content.Magnet.Size - adcgetMessage.Start;
            }


            var uploadItem = UploadItem;

            if (_disposed || uploadItem == null)
            {
                return;
            }

            var sw = PerfTimer.StartNew();

            await SendAsync(new ADCSNDMessage
            {
                Type    = ADCGETType.File,
                Request = adcgetMessage.Request,
                Start   = adcgetMessage.Start,
                Length  = adcgetMessage.Length
            }.Raw + "|").ConfigureAwait(false);

            try
            {
                if (_disposed)
                {
                    return;
                }

                await uploadItem.SendChunkAsync(this, adcgetMessage.Start, (int)adcgetMessage.Length).ConfigureAwait(false);

                Stream.Flush();
                sw.Stop();
                _isResponding = false;
                ServiceTime.Update((int)sw.ElapsedMilliseconds);
            }
            catch (Exception x)
            {
                Logger.Error("Upload read error {0} (L:{1}) {2} {3} ms",
                             x.Message,
                             adcgetMessage.Length,
                             uploadItem.Content.SystemPath,
                             sw.ElapsedMilliseconds);
                Dispose();
            }
        }
Ejemplo n.º 26
0
        public override int Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(job.KeyCode, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            
            State state = (State)o;            
            int retval = 0;
            int runId = 0;
            double duration = 0;
            config = new ConfigHelper(job.Config);

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o);
            XmlDocument sourceXdoc = new XmlDocument();

            if (inputData.Count > 0)
            {
                PerfTimer hpt = new PerfTimer();
                hpt.Start();

                DataTable dtOut = new DataTable();
                string flags = "-x";

                try
                {
                    string runrepSessionID = String.Empty;
                    loaderResultsStruct loaderReturn = null;
                    Service webServ = null;

                    if (InputToProcess.CompareTo(String.Empty) != 0)
                        sourceXdoc = (XmlDocument)((Hashtable)inputData)[InputToProcess];
                    else
                        sourceXdoc = (XmlDocument)((Hashtable)inputData)[0];

                    if (sourceXdoc != null && sourceXdoc.InnerXml != null && !sourceXdoc.InnerXml.Equals(String.Empty) && sourceXdoc.DocumentElement.FirstChild.ChildNodes.Count > 0)
                    {
                        sourceXdoc.InnerXml = sourceXdoc.InnerXml.Replace("http://www.advent.com/SchemaRevLevel248/Geneva", "http://www.advent.com/SchemaRevLevel371/Geneva");

                        if (nsuri.Equals(String.Empty))
                            nsuri = ((sourceXdoc).DocumentElement).NamespaceURI;
                        int i = 0;

                        Hashtable htXmlData = new Hashtable();
                        Hashtable htUserTranId1Ref = new Hashtable();
                        Hashtable htIdentifierRef = new Hashtable();
                        Hashtable htTypeIndicatorRef = new Hashtable();
                        Hashtable htSubTypeIndicatorRef = new Hashtable();

                        XmlNodeList nodeList = null;

                        if (sourceXdoc.DocumentElement.FirstChild.Name.Equals("GenevaLoader"))
                            nodeList = sourceXdoc.DocumentElement.FirstChild.ChildNodes;
                        else
                            nodeList = sourceXdoc.DocumentElement.ChildNodes;

                        string dataType = sourceXdoc.DocumentElement.FirstChild.Name;

                        foreach (XmlNode node in nodeList)
                        {
                            string loaderType = String.Empty;
                            string loaderAction = String.Empty;
                            string userTranId1 = String.Empty;
                            string identifier = String.Empty;
                            foreach (XmlNode subNode in node.ChildNodes)
                            {
                                XmlDocument xdocXmlData = new XmlDocument();
                                XmlNode rootXmlData = xdocXmlData.CreateElement(recordType);
                                xdocXmlData.AppendChild(rootXmlData);

                                string[] loaderKeys = subNode.Name.Split('_');
                                loaderType = loaderKeys[0];
                                if (loaderKeys.Length > 1)
                                    loaderAction = loaderKeys[1];
                                else
                                    loaderAction = "InsertUpdate";

                                recCountTotal = subNode.ChildNodes.Count;

                                GetGenevaTransactionKeys(htUserTranId1Ref, htTypeIndicatorRef, ref loaderType, ref loaderAction, ref userTranId1, ref identifier, subNode, loaderKeys);

                                XmlNode subNodeCopy = xdocXmlData.CreateElement(subNode.Name);
                                subNodeCopy.InnerXml = subNode.InnerXml;
                                xdocXmlData.FirstChild.AppendChild(subNodeCopy);

                                if (!htSubTypeIndicatorRef.Contains(identifier))
                                    htSubTypeIndicatorRef.Add(identifier, loaderAction + "Type");

                                htXmlData.Add(i, ConvertXmlData(xdocXmlData));
                                htIdentifierRef.Add(i, identifier);

                                i++;
                            }
                        }

                        try
                        {
                            ifRetry = true;
                            int numtries = 1;
                            bool isContingency = false;
                            DateTime runStartTime = DateTime.Now;

                            GetSubAdvisorActivityName(state, ref activityName);
                            runId = AddActivityRun(activityName, state.SourceFileName, sourceXdoc.DocumentElement.FirstChild.ChildNodes.Count);

                            while (ifRetry)
                            {
                                try
                                {
                                    webServ = null;
                                    while (webServ == null && numtries < 12)
                                    {
                                        log.InfoFormat(job.KeyCode, "Attempting Geneva SOAP RunCallableLoader [retry #{3}] on {0}:{1} with flags {2}", host, port, flags, numtries);
                                        webServ = new Service();
                                        if (webServ == null)
                                            Thread.Sleep(5000);
                                        numtries++;
                                    }

                                    if (webServ == null)
                                    {
                                        log.ErrorFormat(job.KeyCode, "Web service not constructed (null value)");
                                        retval = -1;
                                        throw new System.Web.Services.Protocols.SoapException();
                                    }
                                    else
                                    {
                                        log.InfoFormat(job.KeyCode, "Web service constructed successfully");

                                        webServ.Timeout = timeout;
                                        log.InfoFormat(job.KeyCode, "Web service timeout assigned: {0}", timeout);

                                        webServ.Url = ConfigUtils.MetaTagReplacer(url);
                                        log.InfoFormat(job.KeyCode, "Web url assigned: {0}", webServ.Url);

                                        if (runrepSessionID.Equals(String.Empty))
                                            try
                                            {
                                                runrepSessionID = webServ.StartCallableLoader(port, host, uid, pwd);
                                                log.InfoFormat(job.KeyCode, "Runrep session started successfully [Runrep ID: {0}]", runrepSessionID);
                                            }
                                            catch (Exception ex)
                                            {
                                                log.WarnFormat(job.KeyCode, "Failed to start runrep session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                                retval = -1;
                                                throw new System.Web.Services.Protocols.SoapException();
                                            }
                                    }

                                    try
                                    {
                                        loaderReturn = webServ.RunCallableLoader(runrepSessionID, sourceXdoc.InnerXml, flags);
                                        log.InfoFormat(job.KeyCode, "Callable Loader session was successful [Runrep ID: {0}]", runrepSessionID);

                                        DataTable dtResults = new DataTable();
                                        dtResults.Columns.Add("Status");
                                        dtResults.Columns.Add("Message");
                                        dtResults.Columns.Add("KeyValue");

                                        for (int j = 0; j < loaderReturn.results.Length; j++)
                                        {
                                            DataRow dr = dtResults.NewRow();
                                            dr["Status"] = loaderReturn.results[j].status.ToString();
                                            dr["Message"] = loaderReturn.results[j].message.ToString();
                                            dr["KeyValue"] = loaderReturn.results[j].keyValue.ToString();
                                            dtResults.Rows.Add(dr);
                                        }
                                        dtResults.DefaultView.Sort = "Status,Message,KeyValue";
                                        mailEnvelop = String.Empty;
                                        string lastStatus = "";
                                        string lastmsgg = "";
                                        foreach (DataRowView dr in dtResults.DefaultView)
                                        {
                                            if (!dr["Status"].ToString().Equals(lastStatus))
                                            {
                                                mailEnvelop += String.Format("Status: {0}<br>", dr["Status"].ToString());
                                                lastStatus = dr["Status"].ToString();
                                            }

                                            if (!dr["Message"].ToString().Equals(lastmsgg))
                                            {
                                                mailEnvelop += String.Format("&nspc;&nspc;&nspc;Message: {0}<br>", dr["Message"].ToString());
                                                lastmsgg = dr["Message"].ToString();
                                            }

                                            mailEnvelop += String.Format("&nspc;&nspc;&nspc;&nspc;&nspc;&nspc;ID: {0}<br>", dr["KeyValue"].ToString());
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        log.ErrorFormat(job.KeyCode, "Failed to run Callable Loader session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                        retval = -1;
                                        throw new System.Web.Services.Protocols.SoapException();
                                    }

                                    if (isContingency)
                                        SendMailMessage(job.KeyCode, ListTo, ListFrom, Subject, "Geneva SOAP call succeeded.");

                                    try
                                    {
                                        webServ.ShutdownCallableSession(runrepSessionID);
                                        retval = -1;
                                        log.InfoFormat(job.KeyCode, "Shut down SOAP session OK {0}.", runrepSessionID);
                                    }
                                    catch (Exception ex)
                                    {
                                        log.WarnFormat(job.KeyCode, "Error shutting down SOAP session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                    }

                                    recCountSuccess++;
                                    ifRetry = false;
                                }

                                catch (Exception wex)
                                {
                                    try
                                    {
                                        webServ.ShutdownCallableSession(runrepSessionID);
                                        retval = -1;
                                        log.InfoFormat(job.KeyCode, "Shut down SOAP session OK {0}.", runrepSessionID);
                                    }
                                    catch (Exception ex)
                                    {
                                        log.WarnFormat(job.KeyCode, "Error shutting down SOAP session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                    }

                                    if (wex.Message.IndexOf("Unknown element") > -1)
                                        throw (new ApplicationException(wex.Message));

                                    if (DateTime.Now.CompareTo(runStartTime.AddMinutes(minutesSoapRetry)) < 0)
                                    {
                                        isContingency = true;
                                        runrepSessionID = String.Empty;
                                        ifRetry = ifOverrideSoapErrorRetry ? false : true;
                                        if (!ListTo.Equals(String.Empty))
                                            SendMailMessage(job.KeyCode, ListTo, ListFrom, Subject, wex.ToString());
                                        retval = -1;

                                        Thread.Sleep(60000);
                                    }
                                    else
                                    {
                                        log.ErrorFormat(job.KeyCode, "Geneva SOAP call timed out. Giving up now.");
                                        SendMailMessage(job.KeyCode, ListTo, ListFrom, Subject, "Geneva SOAP call timed out. Giving up now.");
                                        ifRetry = false;
                                        retval = -99;
                                    }
                                }
                            }
                        }
                        catch (Exception exl)
                        {
                            log.Warn(job.KeyCode, exl);
                            retval = -1;
                        }
                        finally
                        {
                            if (loaderReturn != null)
                            {
                                UpdateActivityRun(runId, activityName, dataType, state.SourceFileName, sourceXdoc.DocumentElement.FirstChild.ChildNodes.Count,
                                    loaderReturn, htIdentifierRef, htUserTranId1Ref, htTypeIndicatorRef, htXmlData);
                            }
                            else
                                log.WarnFormat(job.KeyCode, "{0} is not set up in Geneva as valid Activity.", activityName);
                        }
                    }
                }
                catch (Exception ex)
                {
                    log.ErrorFormat(job.KeyCode, "Error : {0}", ex);
                    retval = -99;
                }

                hpt.Stop();
                duration = hpt.Duration;
            }

            AddToOutputs(this.Name, sourceXdoc);
            AddToOutputs(this.Name + "MailEnvelop", mailEnvelop);

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o );
            UpdateRecordCount(activityIdEnding, recCountTotal, recCountSuccess, recCountFailed);

            log.InfoFormat(job.KeyCode, "GenevaSoapSelect {0} processed {1} of {2} records in {1} seconds.", Name, recCountSuccess, recCountTotal, duration);

            return retval;
        }
Ejemplo n.º 27
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(jobKeyCode, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            StateEnums.Status retval = StateEnums.Status.Success;

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            try
            {
                if (inputData.Count > 0)
                {
                    DataTable dt = new DataTable();
                    if (InputToProcess.CompareTo(String.Empty) != 0)
                        dt = inputData[InputToProcess] as DataTable;
                    else
                        dt = inputData[0] as DataTable;

                    if (dt != null && dt.Rows.Count > 0)
                    {
                        recCountTotal = dt.Rows.Count;

                        try
                        {
                           
							var xmlDocument = new XmlDocument();

                            if (dt.Columns.Contains(assetTypeField))
                            {
								if (dt.Columns[0].ColumnName.Equals("BOSSTradeID"))
								{								
									if (dt.Rows[0][assetTypeField].ToString() == "IRS" 
										|| dt.Rows[0][assetTypeField].ToString() == "OIS" 
										|| dt.Rows[0][assetTypeField].ToString() == "FRA" 
										|| dt.Rows[0][assetTypeField].ToString() == "BAS")
										xmlDocument = ProcessBossIrs(dt);
									else 
										if(dt.Rows[0][assetTypeField].ToString() == "FXO")
											xmlDocument = ProcessBossFxo(dt, ref retval);
									
								}else
								if (dt.Rows[0][assetTypeField].ToString() == "SWAPS" || dt.Rows[0][assetTypeField].ToString() == "FRA")
                                    xmlDocument = ProcessIRS_FRA(jobKeyCode, dt);
                                else if (dt.Rows[0][assetTypeField].ToString() == "CDS")
                                    xmlDocument = ProcessCDS(dt);
                                else if (dt.Rows[0][assetTypeField].ToString() == "Bonds")
                                    xmlDocument = ProcessBonds(dt);
                                else if (dt.Rows[0][assetTypeField].ToString() == "Swaptions")
                                    xmlDocument = ProcessSwaptions(jobKeyCode,dt);
                                else if (dt.Rows[0][assetTypeField].ToString() == "FXO")
                                    xmlDocument = ProcessFXO(dt);
                                else if (dt.Rows[0][assetTypeField].ToString() == "CDX")
                                    xmlDocument = ProcessCDX(dt);
                                else if (dt.Rows[0][assetTypeField].ToString() == "ABX")
                                    xmlDocument = ProcessABX(dt);
                                else if (dt.Rows[0][assetTypeField].ToString() == "Future")
                                    xmlDocument = ProcessBOSSFutures(dt);
							}

                            AddToOutputs(this.Name, xmlDocument);
                                        
                        }
                        catch (Exception ex)
                        {
                            log.ErrorFormat(jobKeyCode, "Error happens during transformation datatable transfromation to Xml {0}", ex.Message);
							log.Error(jobKeyCode, ex);
                            retval = StateEnums.Status.Warnings;
                            recCountSuccess = 0;
                            recCountFailed = recCountTotal;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
				log.Error(jobKeyCode, ex);
                retval = StateEnums.Status.Error;
            }


            hpt.Stop();

            log.InfoFormat(jobKeyCode, "DataTableToXml {0} converted {1} records in {2} seconds.", Name, recCountTotal, hpt.Duration);

            return retval;
        }
Ejemplo n.º 28
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(((State)o).CurrentJobHash, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            StateEnums.Status retval = StateEnums.Status.Success;

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            try
            {
                if (String.IsNullOrEmpty(RequestSource) == false && inputData[RequestSource] != null)
                    xdocSourceData = inputData[RequestSource] as XmlDocument;
                if (propertiesLite.ContainsKey("MarketDate"))
                    //Meta Tag replacement on mudule properties happens at job's launch                    
                    //marketDate = Convert.ToDateTime(ConfigUtils.MetaTagReplacer(propertiesLite["MarketDate"]));
                    marketDate = Convert.ToDateTime(propertiesLite["MarketDate"]);

                int retryCounter = 2;
                while (retryCounter-- > 0)
                {
                    try
                    {
                        // Right now, usage of the BITS WCF client is MDA-specific.  In the future, BITS should implement
                        // a WCF client factory which are capable of handling other service-specific wcf interfaces.
                        ICallableMdaClient wcf = executionEngine.MdaProxy as ICallableMdaClient;

                        switch (wcfFactoryType)
                        {
                            case "MDA":

                                MdaRequestLite req = new MdaRequestLite();

                                req.MarketDate = marketDate;
                                req.RequestName = requestName;
                                req.RequestType = requestType; 
                                req.SourceData = xdocSourceData != null && xdocSourceData.FirstChild != null ?
                                    xdocSourceData.FirstChild as XmlElement : null;
                                req.PropertiesLite = propertiesLite;

                                #region unused

                                //XmlNode xmlnodeValuationDate = null;
                                //string marketDate = GetParameterString("MarketDate");
                                //PricingRequestType reqTypeEnum = (PricingRequestType)Enum.Parse(typeof(PricingRequestType), RequestType, true);
                                //if (reqTypeEnum != PricingRequestType.Download && xdoc == null)
                                //    throw new ApplicationException("There is no position file to upload to MarkIt.");
                                //string requestName = "MarkItValuation_" + reqTypeEnum;
                                //req.RequestName = ""; //requestName;

                                //if (requestType.Equals(PricingRequestType.Download))
                                //{
                                //    string marketDate = GetParameterString("MarketDate");
                                //    if (marketDate != "")
                                //        req.MarketDate = DateTime.ParseExact(marketDate, "yyyyMMdd", CultureInfo.InvariantCulture);
                                //    else
                                //    {
                                //        req.MarketDate = DateTime.Parse(inputData["RunDate"].ToString());
                                //    }
                                //}


                                //req.MarketDate = DateTime.Parse(xmlnodeValuationDate.InnerText);
                                //      ...Testing only...     req.MarketDate = (DateTime)inputData["RunDate"];

                                //req.SourceName = "XmlSource";
                                //req.FeedName = "MarkitValuationFeed";
                                //req.TemplateName = "MarkitValuationTemplate";
                                //req.Properties["PricingRequestType"] = requestType;

                                //if (xdocSourceData != null)
                                //{
                                //    xmlnodeValuationDate = xdocSourceData.SelectSingleNode("//valuationdate");
                                //    if (xmlnodeValuationDate != null)
                                //        req.MarketDate = DateTime.Parse(xmlnodeValuationDate.InnerText);
                                //}


                                #endregion

                                wcf.SubmitRequest(req);
                                retryCounter = 0;
                                break;
                        }
                    }
                    catch (Exception ex)
                    {
                        log.Warn(ex);
                        log.WarnFormat(((State)o).CurrentJobHash, "Request failed.  Retrying wcf proxy [{0} tries left.]", retryCounter);

                        executionEngine.ResetMdaProxy();
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(((State)o).CurrentJobHash, ex);
                retval = StateEnums.Status.Error;
            }

            hpt.Stop();

            log.InfoFormat(((State)o).CurrentJobHash, "WcfClient [{0}] completed in {1} seconds.", Name, hpt.Duration);

            return retval;
        }
Ejemplo n.º 29
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(((State)o).CurrentJobHash, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            StateEnums.Status retval = StateEnums.Status.Success;

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o);

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            string filename = ((State)o).SourceFileName;
            DataTable dt = new DataTable();
            DataTable dtOut = new DataTable("TransactionRecords");

            if (InputToProcess.CompareTo(String.Empty) != 0)
                dt = (DataTable)((Hashtable)inputData)[InputToProcess];
            else
                dt = (DataTable)((Hashtable)inputData)[0];

            try
            {
                //build datatable off fields from file
                foreach (DataColumn dc in dt.Columns)
                    dtOut.Columns.Add(dc.ColumnName);

                if(!dtOut.Columns.Contains("KeyValue")) dtOut.Columns.Add("KeyValue");
                if (!dtOut.Columns.Contains("KeyName")) dtOut.Columns.Add("KeyName");
                if (!dtOut.Columns.Contains("UserTranId1")) dtOut.Columns.Add("UserTranId1");
                if (!dtOut.Columns.Contains("Strategy")) dtOut.Columns.Add("Strategy");
                if (!dtOut.Columns.Contains("LocationAccount")) dtOut.Columns.Add("LocationAccount");
                if (!dtOut.Columns.Contains("NetCounterAmount")) dtOut.Columns.Add("NetCounterAmount");
                if (!dtOut.Columns.Contains("NetInvestmentAmount")) dtOut.Columns.Add("NetInvestmentAmount");

                //prepare deal type filter                    
                string[] dealfilters = filter.Split(',');

                for (int i = 0; i < dealfilters.Length; i++)
                    dealfilters[i] = dealfilters[i].ToUpper();

                //process row from file
                foreach (DataRow dr in dt.Rows)
                {
                    string dealtype = dr[0].ToString();
                    string keyValue = String.Empty;
                    string userTranId1 = String.Empty;
                    string portfolio = "AMF";
                    string investment = String.Empty;
                    string strategy = String.Empty;
                    string locationAccount = String.Empty;
                    string broker = String.Empty;
                    string netCounterAmount = "CALC";
                    string netInvestmentAmount = "CALC";

                    try
                    {
                        if (filename.IndexOf("Luxor") > -1)
                            strategy = "SADV-LUXOR";
                        else if (filename.IndexOf("Sequence") > -1)
                            strategy = "SADV-SEQUENCE";
                        else if (filename.IndexOf("Shannon") > -1)
                            strategy = "SADV-SHANNON";

                        if (filter.Equals("*") || dealfilters.Contains<string>(dealtype.ToUpper()))
                        {
                            //create new datarow
                            DataRow drout = dtOut.NewRow();

                            //process fields
                            foreach (DataColumn dc in dtOut.Columns)
                            {
                                string columnName = dc.ColumnName;

                                switch (columnName)
                                {
                                    case "DealType":
                                        dr[columnName] = dealtype;
                                        break;

                                    case "DealId":
                                        keyValue = "SADV_" + dr[columnName].ToString();
                                        userTranId1 = keyValue;
                                        break;

                                    case "Action":
                                        if (dr[columnName].ToString().ToUpper().Equals("CORRECT"))
                                            dr[columnName] = "Delete";
                                        else if (dr[columnName].ToString().ToUpper().Equals("NEW"))
                                            dr[columnName] = "InsertUpdate";
                                        else
                                            drout[columnName] = dr[columnName].ToString();
                                        break;

                                    case "BloombergTicker":
                                        switch (dealtype.ToUpper())
                                        {
                                            case "EQUITYDEAL":
                                                investment = dr[columnName].ToString().Replace(" Equity", "");
                                                investment = investment.Replace(" US", "");
                                                break;
                                            case "OPTIONDEAL":
                                                investment = dr[columnName].ToString().Trim().Replace(" ", "+");
                                                break;
                                        }
                                        dr[columnName] = investment;
                                        break;

                                    case "CUSIP":
                                        if (dealtype.ToUpper().Equals("BONDDEAL"))
                                            investment = dr[columnName].ToString().Trim();
                                        break;

                                    case "TransIndicator":
                                        if (dr[columnName].ToString().Equals("B"))
                                            dr[columnName] = "Buy";
                                        else if (dr[columnName].ToString().Equals("S"))
                                            dr[columnName] = "Sell";
                                        break;

                                    case "SubTransIndicator":
                                        switch (dr[columnName].ToString().ToUpper())
                                        {
                                            case "BUY LONG":
                                                dr[columnName] = "Buy";
                                                break;
                                            case "BUY COVER":
                                                dr[columnName] = "CoverShort";
                                                break;
                                            case "SELL LONG":
                                                dr[columnName] = "Sell";
                                                break;
                                            case "SELL SHORT":
                                                dr[columnName] = "SellShort";
                                                break;
                                        }
                                        dr[columnName].ToString().Replace(" Equity", "");
                                        break;

                                    case "ExchangeRate":
                                        dr[columnName] = 1.0;
                                        break;

                                    case "Quantity":
                                        double val = 0;

                                        if (dealtype.ToUpper().Equals("BONDDEAL") && strategy.Equals("SADV-LUXOR"))
                                            double.TryParse(dr["Reserved5"].ToString(), out val);
                                        else
                                            double.TryParse(dr[columnName].ToString(), out val);

                                        dr[columnName] = Math.Abs(val);
                                        break;

                                    case "TradeDate":
                                    case "SettlementDate":
                                        dr[columnName] = Convert.ToDateTime(dr[columnName]).ToString("yyyy-MM-ddTHH:mm:ss");
                                        break;

                                    case "SECFee":
                                        double valSECFee = 0;
                                        double.TryParse(dr[columnName].ToString(), out valSECFee);
                                        dr[columnName] = valSECFee;
                                        break;

                                    case "Folder":
                                        dr[columnName] = dr[columnName].ToString().Replace("'", "");

                                        switch (dr["Custodian"].ToString())
                                        {
                                            case "DBNY":
                                                broker = "DBNY";
                                                break;
                                            case "MSNY":
                                                broker = "MSCO";
                                                break;
                                            case "GS":
                                                broker = "GSCO";
                                                break;
                                        }

                                        if (dr[columnName].ToString().Length.Equals(6))
                                            locationAccount = String.Format("{0}-00{1}", broker, dr[columnName].ToString().Replace("'", ""));
                                        else
                                            locationAccount = String.Format("{0}-{1}", broker, dr[columnName].ToString().Replace("'", ""));

                                        break;
                                }

                                if (dr.Table.Columns.Contains(columnName))
                                    drout[columnName] = dr[columnName].ToString();
                            }

                            drout["KeyValue"] = keyValue;
                            drout["KeyName"] = "UserTranId1";
                            drout["UserTranId1"] = userTranId1;
                            drout["Portfolio"] = portfolio;
                            drout["Strategy"] = strategy;
                            drout["LocationAccount"] = locationAccount;
                            drout["NetCounterAmount"] = netCounterAmount;
                            drout["NetInvestmentAmount"] = netInvestmentAmount;

                            dtOut.Rows.Add(drout);
                            recCountSuccess++;
                        }
                    }

                    catch (Exception ex)
                    {
                        log.Error(((State)o).CurrentJobHash, ex);
                        retval = StateEnums.Status.Error;
                    }
                }

                if (dtOut.Rows.Count > 0)
                    AddToOutputs(this.Name, dtOut);

            }
            catch (Exception ex)
            {
                log.ErrorFormat(((State)o).CurrentJobHash, "Error : {0}", ex);
                retval = StateEnums.Status.Warnings;
            }

            hpt.Stop();

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o );
            UpdateRecordCount(activityIdEnding, dt.Rows.Count, recCountSuccess, recCountTotal-recCountSuccess);

            return retval;
        }
Ejemplo n.º 30
0
        public async override Task <long> SendChunkAsync(TransferConnection transfer, long filePos, int bytesRequired)
        {
            var startTime = DateTime.UtcNow;

            if (IsSegmentNeededAttached)
            {
                var ea = new UploadItemSegmentEventArgs
                {
                    UploadItem = this,
                    Magnet     = Content.Magnet,
                    Position   = filePos,
                    Length     = (int)bytesRequired
                };

                OnSegmentNeeded(ea);

                if (ea.FromCache)
                {
                    await transfer.SendAsync(ea.Stream).ConfigureAwait(false);

                    Interlocked.Add(ref _uploadedBytes, ea.Length);
                    return(bytesRequired);
                }
            }

            long bytesCopied = 0;

            var sw = PerfTimer.StartNew();

            try
            {
                if (UploadDelay != 0)
                {
                    await Task.Delay(UploadDelay);
                }

                using (new PerfLimit(() => $"Slow HYPER request {SystemPath} pos: {filePos} len: {bytesRequired} filelen: {Content.Magnet.Size}", 4000))
                    using (var buffer = await Manager.DownloadSegment(SystemPath, filePos, (int)bytesRequired))
                    {
                        if (buffer.Object != null)
                        {
                            await transfer.SendAsync(buffer.Object, 0, buffer.Object.Length).ConfigureAwait(false);
                        }
                    }
                bytesCopied = bytesRequired;

                Interlocked.Add(ref _uploadedBytes, bytesCopied);
            }
            catch (Exception x)
            {
                Logger.Error("DownloadChunk error: {0}", x.Message);
            }

            sw.Stop();

            //HttpHelper.RegisterDownloadTime((int)sw.ElapsedMilliseconds);

            if (IsSegmentDownloadedAttached)
            {
                OnSegmentDownloaded(new UploadItemSegmentEventArgs
                {
                    UploadItem      = this,
                    Magnet          = Content.Magnet,
                    Position        = filePos,
                    Length          = bytesRequired,
                    RequestedAt     = startTime,
                    DownloadingTime = sw.Elapsed
                });
            }

            return(bytesCopied);
        }
Ejemplo n.º 31
0
        public override int Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat("Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            int retval = 0;

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o );

            int numrecs=0;
            //string[] outputFields = DisplayFields.Split(';');
            //string[] outputFields = new string[] {
            //    "STATUS", "TRANSORIGIN", "ACCOUNTNUMBER","TRADEDATE","BUYORSELL","BLOOMBERGCODE","DESCRIPTION","CURRENCYCODE","BROKER",
            //    "QUANTITY", "TRADEPRICE", "EXCHANGE", "YELLOWKEY",
            //    "PROMPTDATE","MULTIPLIER", "STRIKEPRICE", "CALLPUTIND","EXECUTIONBROKER","CONTRACTYYYYMM", "TRADETIME", "SETTLENETAMOUNT"};
            string[] outputFields = new string[] {
                "STATUS", "TRANS ORIGIN #", "ACCOUNT NUMBER","TRADE DATE","BUY OR SELL","BLOOMBERG CODE","DESCRIPTION","CURRENCY CODE","BROKER",
                "QUANTITY", "TRADE PRICE", "EXCHANGE", "YELLOW KEY",
                "PROMPT DATE","MULTIPLIER", "STRIKE PRICE", "CALL/PUT IND","EXECUTION BROKER","CONTRACT YYYYMM", "TRADE TIME", "SETTLENETAMOUNT"};

            try
            {
                if (InputToProcess.CompareTo(String.Empty) != 0)
                    dt = (DataTable)((Hashtable)inputData)[InputToProcess];
                else
                    dt = (DataTable)((Hashtable)inputData)[0];

                if (dt != null)
                {
                    numrecs += dt.Rows.Count;

                    var query =
                        from dr in dt.AsEnumerable()
                        group dr by new
                        {
                            Status = dr.Field<string>("STATUS").ToString(),
                            AccountNumber = dr.Field<string>("ACCOUNT NUMBER").ToString(),
                            TradeDate = dr.Field<string>("TRADE DATE").ToString(),
                            BUYORSELL = dr.Field<string>("BUY OR SELL").ToString(),
                            BloombergCode = dr.Field<string>("BLOOMBERG CODE").ToString(),
                            Description = dr.Field<string>("DESCRIPTION").ToString(),
                            CurrencyCode = dr.Field<string>("CURRENCY CODE").ToString(),
                            Broker = dr.Field<string>("BROKER").ToString(),
                            Exchange = dr.Field<string>("EXCHANGE").ToString(),
                            YellowKey = dr.Field<string>("YELLOW KEY").ToString(),
                            PromptDate = dr.Field<string>("PROMPT DATE").ToString(),
                            Multiplier = dr.Field<string>("MULTIPLIER").ToString(),
                            StrikePrice = dr.Field<string>("STRIKE PRICE").ToString(),
                            CallPutInd = dr.Field<string>("CALL/PUT IND").ToString(),
                            ExecutionBroker = dr.Field<string>("EXECUTION BROKER").ToString(),
                            ContractYYYYMM = dr.Field<string>("CONTRACT YYYYMM").ToString(),
                            TradeTime = dr.Field<string>("TRADE TIME").ToString(),
                        } into d
                        let transOrigin = d.Select(dr => dr.Field<string>("TRANS ORIGIN #")).First<string>()
                        let sumQuantity = d.Sum(dr => Convert.ToDouble(dr.Field<string>("QUANTITY")))
                        let avgPrice = d.Average(dr => Convert.ToDouble(dr.Field<string>("TRADE PRICE")))
                        //let newAccountNumber = d.Select(dr => String.Format("MLCO-{0}", dr.Field<string>("ACCOUNT NUMBER"))).First<string>()
                        let newBroker = d.Select(dr => dr.Field<string>("BROKER").Equals("??") ? "VOLT" : dr.Field<string>("BROKER")).First<string>()
                        let newSettleNetAmount = d.Sum(dr => dr.Field<string>("CALL/PUT IND").Equals(String.Empty) ? 
                            0.00 : 
                            (Convert.ToDouble(dr.Field<string>("QUANTITY")) * Convert.ToDouble(dr.Field<string>("TRADE PRICE"))))
                        select new
                        {
                            d,
                            transOrigin,
                            sumQuantity,
                            avgPrice,
                            newBroker,
                            newSettleNetAmount
                        };

                    DataTable dtOut = new DataTable();


                    foreach (string ss in outputFields)
                        dtOut.Columns.Add(new DataColumn(ss));

                    foreach (var v in query)
                    {
                        DataRow dr = dtOut.NewRow();

                        dr["STATUS"] = v.d.Key.Status.ToString();
                        dr["TRANS ORIGIN #"] = v.transOrigin.ToString();
                        dr["ACCOUNT NUMBER"] = v.d.Key.AccountNumber.ToString();
                        dr["TRADE DATE"] = v.d.Key.TradeDate.ToString();
                        dr["BUY OR SELL"] = v.d.Key.BUYORSELL.ToString();
                        dr["BLOOMBERG CODE"] = v.d.Key.BloombergCode.ToString();
                        dr["DESCRIPTION"] = v.d.Key.Description.ToString();
                        dr["CURRENCY CODE"] = v.d.Key.CurrencyCode.ToString();
                        dr["BROKER"] = v.newBroker;
                        dr["QUANTITY"] = v.sumQuantity.ToString();
                        dr["TRADE PRICE"] = v.avgPrice.ToString();
                        dr["EXCHANGE"] = v.d.Key.Exchange.ToString();
                        dr["YELLOW KEY"] = v.d.Key.YellowKey.ToString();
                        dr["PROMPT DATE"] = v.d.Key.PromptDate.ToString();
                        dr["MULTIPLIER"] = v.d.Key.Multiplier.ToString();
                        dr["STRIKE PRICE"] = v.d.Key.StrikePrice.ToString();
                        dr["CALL/PUT IND"] = v.d.Key.CallPutInd.ToString();
                        dr["EXECUTION BROKER"] = v.d.Key.ExecutionBroker.ToString();
                        dr["CONTRACT YYYYMM"] = v.d.Key.ContractYYYYMM.ToString();
                        dr["TRADE TIME"] = v.d.Key.TradeTime.ToString();
                        dr["SETTLENETAMOUNT"] = v.newSettleNetAmount;

                        //dr["STATUS"] = v.d.Key.Status.ToString();
                        //dr["TRANSORIGIN"] = v.transOrigin.ToString();
                        //dr["ACCOUNTNUMBER"] = v.d.Key.AccountNumber.ToString();
                        //dr["TRADEDATE"] = v.d.Key.TradeDate.ToString();
                        //dr["BUYORSELL"] = v.d.Key.BUYORSELL.ToString();
                        //dr["BLOOMBERGCODE"] = v.d.Key.BloombergCode.ToString();
                        //dr["DESCRIPTION"] = v.d.Key.Description.ToString();
                        //dr["CURRENCYCODE"] = v.d.Key.CurrencyCode.ToString();
                        //dr["BROKER"] = v.newBroker;
                        //dr["QUANTITY"] = v.sumQuantity.ToString();
                        //dr["TRADEPRICE"] = v.avgPrice.ToString();
                        //dr["EXCHANGE"] = v.d.Key.Exchange.ToString();
                        //dr["YELLOWKEY"] = v.d.Key.YellowKey.ToString();
                        //dr["PROMPTDATE"] = v.d.Key.PromptDate.ToString();
                        //dr["MULTIPLIER"] = v.d.Key.Multiplier.ToString();
                        //dr["STRIKEPRICE"] = v.d.Key.StrikePrice.ToString();
                        //dr["CALLPUTIND"] = v.d.Key.CallPutInd.ToString();
                        //dr["EXECUTIONBROKER"] = v.d.Key.ExecutionBroker.ToString();
                        //dr["CONTRACTYYYYMM"] = v.d.Key.ContractYYYYMM.ToString();
                        //dr["TRADETIME"] = v.d.Key.TradeTime.ToString();
                        //dr["SETTLENETAMOUNT"] = v.newSettleNetAmount;

                        dtOut.Rows.Add(dr);
                        dtOut.AcceptChanges();
                    }

                    AddToOutputs(this.Name, dtOut);

                    recCount = dtOut.Rows.Count;
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat("Error : {0}", ex);
                retval = -1;
            }

            hpt.Stop();

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.DoneSuccess, "", (State)o );
            UpdateRecordCount(activityIdEnding, recCount, recCount, 0);

            log.InfoFormat("DataTableAggregate {0} aggregated {1} records in {2} seconds.", Name, numrecs, hpt.Duration);

            return retval;
        }
Ejemplo n.º 32
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(((State)o).CurrentJobHash, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            StateEnums.Status retval = StateEnums.Status.Success;
            State state = o as State;

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o );

            try
            {
                string  mailDistribution =  MetaTagReplacer.GetMetaTagValue("*SOAP_ERROR_DISTRIBUTION*",
                                                                                                                    ((State)this.ExecutionEngine.GetJobState(this.job.JobName)).CurrentParameters.ProcessInputDates,
                                                                                                                    null);

                dtOut = new DataTable(tableName);
                //Meta Tag replacement on mudule properties happens at job's launch
                //string _query = ConfigUtils.MetaTagReplacer(query);
                string _query = query;

                ifRetry = true;
                bool isContingency = false;
                string runrepSessionID = "";
                runrepResultsPortfolioStruct selectReturn = null;
                Service webServ = null;

                if (inputData[InputToProcess] != null)
                    //Meta Tag replacement on mudule properties happens at job's launch
                    //_query = ConfigUtils.MetaTagReplacer(inputData[InputToProcess].ToString());
                    _query = inputData[InputToProcess].ToString();
                
                if(_query.Equals(String.Empty))
                    ifRetry = false;

                int numtries = 1;
                DateTime runStartTime = DateTime.Now;
                while (ifRetry)
                {
                    try
                    {
                        webServ = null;
                        while (webServ == null && numtries < 12)
                        {
                            log.InfoFormat(((State)o).CurrentJobHash, "Attempting Geneva SOAP RunCallableRunrepRunSelect [retry #{1}]: {0}", _query, numtries);
                            webServ = new Service();
                            if (webServ == null)
                                Thread.Sleep(5000);
                            numtries++;
                        }

                        if (webServ == null)
                        {
                            log.WarnFormat(((State)o).CurrentJobHash, "Web service not constructed (null value)");
                            retval = StateEnums.Status.Warnings;
                            throw new System.Web.Services.Protocols.SoapException("Web service not constructed (null value)",System.Xml.XmlQualifiedName.Empty);
                        }
                        else
                        {
                            log.InfoFormat(((State)o).CurrentJobHash, "Web service constructed successfully");

                            webServ.Timeout = timeout;
                            log.InfoFormat(((State)o).CurrentJobHash, "Web service timeout assigned: {0}", timeout);

                            //Meta Tag replacement on mudule properties happens at job's launch
                            //webServ.Url = ConfigUtils.MetaTagReplacer(url);
                            webServ.Url = url;
                            log.InfoFormat(((State)o).CurrentJobHash, "Web url assigned: {0}", webServ.Url);

                            if (runrepSessionID.Equals(String.Empty))
                            {
                                try
                                {
                                    runrepSessionID = webServ.StartCallableRunrep(port, host, uid, pwd, "-f empty");
                                    log.InfoFormat(((State)o).CurrentJobHash, "Runrep session started successfully [Runrep ID: {0}]", runrepSessionID);
                                }
                                catch (Exception ex)
                                {
                                    log.WarnFormat(((State)o).CurrentJobHash, "Failed to start runrep session: {0}", ex);
                                    throw new System.Web.Services.Protocols.SoapException("Failed to start runrep session", System.Xml.XmlQualifiedName.Empty);
                                }
                            }

                            try
                            {
                                    
                                DateTime rundate = DateTime.MinValue;
                                if(inputData.ContainsKey("RunDate")) 
                                    DateTime.TryParse(inputData["RunDate"].ToString(), out rundate);

                                _query = _query.Replace("\r\n", "").Replace("\n", "");
                                _query = _query.Replace("FROM", " FROM").Replace("GIVEN", " GIVEN").Replace("WHERE", " WHERE").Replace("TYPE", " TYPE").Replace("ORDER", " ORDER");
                                _query = _query.TrimEnd(';');

                                //Meta Tag replacement on mudule properties happens at job's launch
                                //if (rundate.Equals(DateTime.MinValue))
                                //    rundate = ((State)this.ExecutionEngine.GetJobState(this.job.JobName)).CurrentParameters.ProcessInputDates.InDate;
                                //    _query = ConfigUtils.MetaTagReplacer(_query);
                                //else
                                //    _query = ConfigUtils.MetaTagReplacer(_query,rundate);
                                if (!rundate.Equals(DateTime.MinValue))
                                    _query = MetaTagReplacer.InlineMetatagSubstitution(_query, rundate);

                                selectReturn = webServ.RunCallableRunrepRunSelect(runrepSessionID, _query, "") as runrepResultsPortfolioStruct;
                                log.InfoFormat(((State)o).CurrentJobHash, "Runrep select was successful [Runrep ID: {0}]: {1}", runrepSessionID, _query);
                            }
                            catch (Exception ex)
                            {
                                log.ErrorFormat(((State)o).CurrentJobHash, "Failed to select from runrep session: {0}", ex);
                                errors += "<br>" + ex.Message;
                                throw new System.Web.Services.Protocols.SoapException("Failed to select from runrep session", System.Xml.XmlQualifiedName.Empty);
                            }

                            if (isContingency)
                                //SendMailMessage(((State)o).CurrentJobHash, ConfigUtils.MetaTagReplacer("*SOAP_ERROR_DISTRIBUTION*"), "BITS,[email protected]", Subject, "Geneva SOAP call succeeded.");
                                SendMailMessage(((State)o).CurrentJobHash, mailDistribution, "BITS,[email protected]", Subject, "Geneva SOAP call succeeded.");


                            try
                            {
                                webServ.ShutdownCallableSession(runrepSessionID);
                                log.Info(((State)o).CurrentJobHash, "Shut down SOAP session OK.");
                            }
                            catch (Exception ex)
                            {
                                log.WarnFormat(((State)o).CurrentJobHash, "Error shutting down SOAP session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                retval = StateEnums.Status.Warnings;
                            }

                            ifRetry = false;
                        }
                    }
                    catch (Exception ex)
                    {
                        try
                        {
                            webServ.ShutdownCallableSession(runrepSessionID);
                            retval = StateEnums.Status.Warnings;
                            log.InfoFormat(((State)o).CurrentJobHash, "Shut down SOAP session OK {0}.", runrepSessionID);
                        }
                        catch (Exception exx)
                        {
                            log.WarnFormat(((State)o).CurrentJobHash, "Error shutting down SOAP session: {0} [Runrep ID: {1}]", exx, runrepSessionID);
                        }

                        log.ErrorFormat(((State)o).CurrentJobHash, "Error encountered in SOAP select: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                        errors += "<br>" + ex.Message;

                        if (DateTime.Now.CompareTo(runStartTime.AddMinutes(minutesSoapRetry)) < 0)
                        {
                            isContingency = true;
                            runrepSessionID = String.Empty;
                            ifRetry = ifOverrideSoapErrorRetry ? false : true;
                            SendMailMessage(((State)o).CurrentJobHash, ListTo, ListFrom, Subject, ex.ToString());
                            Thread.Sleep(60000);
                            retval = StateEnums.Status.Warnings;
                        }
                        else
                        {
                            log.ErrorFormat(((State)o).CurrentJobHash, "Geneva SOAP call timed out. Giving up now. [Runrep ID: {0}]", runrepSessionID);
                            //SendMailMessage(((State)o).CurrentJobHash, ConfigUtils.MetaTagReplacer("*SOAP_ERROR_DISTRIBUTION*"), "BITS,[email protected]", Subject, "Geneva SOAP call timed out. Giving up now.");
                            SendMailMessage(((State)o).CurrentJobHash, mailDistribution, "BITS,[email protected]", Subject, "Geneva SOAP call timed out. Giving up now.");
                            ifRetry = false;
                            retval = StateEnums.Status.Error;
                        }
                    }
                }

                if (selectReturn != null && selectReturn.results != null && selectReturn.results[0] != null)
                {
                    log.InfoFormat(((State)o).CurrentJobHash, "Obtained {0} records from SOAP service call.", selectReturn.results[0].record.Length);
                    if (errors.Equals(String.Empty))
                        errors += "<br>" + String.Format("Obtained {0} records from SOAP service call.", selectReturn.results[0].record.Length);

                    if (selectReturn != null)
                        dtOut = ConvertToDataTable(tableName, selectReturn);

                    if (dtOut != null)
                        AddToOutputs(this.Name, dtOut);
                }

                String mailEnvelop = String.Format("Geneva extract summary:\r\n<br>");
                mailEnvelop += errors;
                AddToOutputs(this.Name + "_MailEnvelope", dtOut);
            }
            catch (Exception ex)
            {
                log.ErrorFormat(((State)o).CurrentJobHash, "Error in SOAP Select module: {0}", ex);
                retval = StateEnums.Status.Error;
            }

            hpt.Stop();

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o );

            log.InfoFormat(((State)o).CurrentJobHash, "GenevaSoapSelect completed in {0} seconds.",  hpt.Duration);

            return retval;
        }
Ejemplo n.º 33
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(((State)o).CurrentJobHash, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");

            StateEnums.Status retval = StateEnums.Status.Success;
            double duration = 0;

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o);

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            if (inputData.Count > 0)
            {
                PerfTimer hpt = new PerfTimer();
                hpt.Start();

                DataTable dtOut = new DataTable();

                try
                {
                    log.InfoFormat(((State)o).CurrentJobHash, "Preparing CDS investments for automated load.");

                    Hashtable transforms = GetTransforms();

                    XmlDocument sourceXdoc = new XmlDocument();
                    XmlDocument targetXdoc = new XmlDocument();

                    if (InputToProcess.CompareTo(String.Empty) != 0)
                        sourceXdoc = (XmlDocument)((Hashtable)inputData)[InputToProcess];
                    else
                        sourceXdoc = (XmlDocument)((Hashtable)inputData)[0];


                    if (sourceXdoc != null && sourceXdoc.DocumentElement != null && sourceXdoc.DocumentElement.FirstChild != null)
                    {
                        if (sourceXdoc.DocumentElement.FirstChild.Name.Equals("TransactionRecords"))
                            sourceXdoc.InnerXml = sourceXdoc.InnerXml.Replace("http://www.advent.com/SchemaRevLevel248/Geneva", "http://www.advent.com/SchemaRevLevel371/Geneva");

                        XmlNode targetFC = sourceXdoc.FirstChild.CloneNode(false);
                        XmlNode newFC = targetXdoc.ImportNode(targetFC, false);
                        targetXdoc.AppendChild(newFC);

                        string nsuri = targetXdoc.DocumentElement.NamespaceURI;
                        XmlNode newInvestmentNodes = targetXdoc.CreateElement("InvestmentRecords", nsuri);
                        targetXdoc.FirstChild.AppendChild(newInvestmentNodes);

                        recCountTotal = sourceXdoc.FirstChild.FirstChild.ChildNodes.Count;
                        recCountSuccess = 0;
                        recCountFailed = 0;

                        foreach (XmlNode investmentNode in sourceXdoc.FirstChild.FirstChild.ChildNodes)
                        {
                            string ticker = String.Empty;
                            string desc = String.Empty;
                            string exchCode = String.Empty;

                            string loaderAction = String.Empty;
                            string assetType = String.Empty;
                            foreach (XmlNode node in investmentNode.ChildNodes)
                            {
                                if (node.Name.Equals("AssetType"))
                                {
                                    loaderAction = String.Format("{0}_New", node.InnerXml);
                                    assetType = node.InnerXml;
                                    break;
                                }
                            }

                            //bail on null asset type
                            if (assetType.Equals(String.Empty) || !assetType.ToUpper().Equals("CDS")) continue;

                            XmlNode newInvestmentNode = targetXdoc.CreateElement(loaderAction, nsuri);

                            foreach (XmlNode node in investmentNode.ChildNodes)
                            {
                                if (transforms.ContainsKey(node.Name))
                                {
                                    string[] newTags = transforms[node.Name].ToString().Split(',');
                                    foreach (string targetTag in newTags)
                                    {
                                        //reassignments
                                        if (node.Name.CompareTo("TICKER") == 0)
                                                ticker = node.InnerXml;
                                        else if (node.Name.CompareTo("NAME") == 0 && assetType.ToUpper().CompareTo("EQUITY") == 0)
                                            desc = node.InnerXml;
                                        else if (node.Name.CompareTo("EXCH_CODE") == 0)
                                            exchCode = node.InnerXml;
                                        else if (node.Name.CompareTo("SECURITY_DES") == 0 && assetType.ToUpper().CompareTo("OPTION") == 0)
                                            desc = node.InnerXml;
                                        else if (node.Name.CompareTo("OPT_MULTIPLIER") == 0 && assetType.ToUpper().CompareTo("EQUITY") == 0)
                                            node.InnerXml = "1";
                                        else if (node.Name.CompareTo("OPT_PUT_CALL") == 0 && node.InnerXml.CompareTo(String.Empty) != 0)
                                        {
                                            if (node.InnerXml.Equals("Call"))
                                                node.InnerXml = "0";
                                            else if (node.InnerXml.Equals("Put"))
                                                node.InnerXml = "1";
                                        }
                                        else if (node.Name.CompareTo("OPT_UNDL_TICKER") == 0 && assetType.ToUpper().CompareTo("OPTION") == 0)
                                            node.InnerXml = node.InnerXml.Replace(" US", "");
                                        else if (node.Name.CompareTo("OPT_UNDL_TICKER") == 0 && assetType.ToUpper().CompareTo("EQUITY") == 0)
                                            continue;
                                        else if (node.Name.CompareTo("OPT_EXPIRE_DT") == 0)
                                        {
                                            DateTime dt = DateTime.MinValue;
                                            DateTime.TryParse(node.InnerXml, out dt);

                                            if (!dt.Equals(DateTime.MinValue))
                                                node.InnerXml = dt.ToString("yyyy-MM-ddTHH:mm:ss");
                                        }

                                        //nodes
                                        if (!node.InnerXml.Equals(String.Empty))
                                        {
                                            XmlNode newNode = targetXdoc.CreateElement(targetTag, nsuri);

                                            switch (node.Name)
                                            {
                                                case "NAME":
                                                case "SECURITY_DES":
                                                    newNode.InnerXml = desc;
                                                    break;
                                                default:
                                                    newNode.InnerXml = node.InnerXml;
                                                    break;
                                            }

                                            newInvestmentNode.AppendChild(newNode);
                                        }
                                    }
                                }
                            }

                            #region Calculated/Assigned Geneva Fields

                            switch (assetType.ToUpper())
                            {
                                case "EQUITY":

                                    XmlNode settleDaysNodeEQ = targetXdoc.CreateElement("SettleDays", nsuri);
                                    settleDaysNodeEQ.InnerXml = "3";
                                    newInvestmentNode.AppendChild(settleDaysNodeEQ);

                                    XmlNode quantityPrecisionNodeEQ = targetXdoc.CreateElement("QuantityPrecision", nsuri);
                                    quantityPrecisionNodeEQ.InnerXml = "2";
                                    newInvestmentNode.AppendChild(quantityPrecisionNodeEQ);

                                    XmlNode pricingPrecisionNodeEQ = targetXdoc.CreateElement("PricingPrecision", nsuri);
                                    pricingPrecisionNodeEQ.InnerXml = "2";
                                    newInvestmentNode.AppendChild(pricingPrecisionNodeEQ);

                                    XmlNode altKey1NodeEQ = targetXdoc.CreateElement("AltKey1", nsuri);
                                    altKey1NodeEQ.InnerXml = String.Format("{0} {1} Equity", ticker, exchCode);
                                    newInvestmentNode.AppendChild(altKey1NodeEQ);

                                    XmlNode pricingFactorNodeForEquity = targetXdoc.CreateElement("PricingFactor", nsuri);
                                    pricingFactorNodeForEquity.InnerXml = "1";
                                    newInvestmentNode.AppendChild(pricingFactorNodeForEquity);

                                    XmlNode secEligibleFlagNodeForEquity = targetXdoc.CreateElement("SecEligibleFlag", nsuri);
                                    secEligibleFlagNodeForEquity.InnerXml = "1";
                                    newInvestmentNode.AppendChild(secEligibleFlagNodeForEquity);

                                    XmlNode secFeeScheduleNodeForEquity = targetXdoc.CreateElement("SecFeeSchedule", nsuri);
                                    secFeeScheduleNodeForEquity.InnerXml = "Default";
                                    newInvestmentNode.AppendChild(secFeeScheduleNodeForEquity);

                                    break;

                                case "OPTION":

                                    XmlNode settleDaysNodeOP = targetXdoc.CreateElement("SettleDays", nsuri);
                                    settleDaysNodeOP.InnerXml = "1";
                                    newInvestmentNode.AppendChild(settleDaysNodeOP);

                                    XmlNode quantityPrecisionNodeOP = targetXdoc.CreateElement("QuantityPrecision", nsuri);
                                    quantityPrecisionNodeOP.InnerXml = "3";
                                    newInvestmentNode.AppendChild(quantityPrecisionNodeOP);

                                    XmlNode pricingPrecisionNodeOP = targetXdoc.CreateElement("PricingPrecision", nsuri);
                                    pricingPrecisionNodeOP.InnerXml = "3";
                                    newInvestmentNode.AppendChild(pricingPrecisionNodeOP);

                                    XmlNode altKey1NodeOP = targetXdoc.CreateElement("AltKey1", nsuri);
                                    altKey1NodeOP.InnerXml = String.Format("{0} Equity", ticker);
                                    newInvestmentNode.AppendChild(altKey1NodeOP);

                                    XmlNode pricingFactorNodeForOption = targetXdoc.CreateElement("PricingFactor", nsuri);
                                    pricingFactorNodeForOption.InnerXml = "1";
                                    newInvestmentNode.AppendChild(pricingFactorNodeForOption);

                                    XmlNode secEligibleFlagNodeForOption = targetXdoc.CreateElement("SecEligibleFlag", nsuri);
                                    secEligibleFlagNodeForOption.InnerXml = "1";
                                    newInvestmentNode.AppendChild(secEligibleFlagNodeForOption);

                                    XmlNode secFeeScheduleNodeForOption = targetXdoc.CreateElement("SecFeeSchedule", nsuri);
                                    secFeeScheduleNodeForOption.InnerXml = "Default";
                                    newInvestmentNode.AppendChild(secFeeScheduleNodeForOption);

                                    break;

                                case "BOND":

                                    XmlNode altKey1NodeBND = targetXdoc.CreateElement("AltKey1", nsuri);
                                    altKey1NodeBND.InnerXml = String.Format("{0} Bond", ticker);
                                    newInvestmentNode.AppendChild(altKey1NodeBND);

                                    break;

                                default:

                                    break;
                            }

                            XmlNode codeNode = targetXdoc.CreateElement("Code", nsuri);
                            codeNode.InnerXml = ticker;
                            newInvestmentNode.AppendChild(codeNode);

                            #endregion

                            targetXdoc.DocumentElement.FirstChild.AppendChild(newInvestmentNode);
                            recCountSuccess++;
                        }

                        AddToOutputs(this.Name, targetXdoc);
                    }
                }
                catch (Exception ex)
                {
                    log.ErrorFormat(((State)o).CurrentJobHash, "Error : {0}", ex);
                    retval = StateEnums.Status.Warnings;
                }

                if (dtOut.Rows.Count > 0)
                    AddToOutputs(this.Name, dtOut);

                hpt.Stop();
                duration = hpt.Duration;
            }

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o);
            UpdateRecordCount(activityIdEnding, recCountTotal, recCountSuccess, recCountFailed);

            log.InfoFormat(((State)o).CurrentJobHash, "GenevaSoapSelect {0} processed {1} of {2} records in {1} seconds.", Name, recCountSuccess, recCountTotal, duration);

            return retval;
        }
        public override int Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(job.KeyCode, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            int retval = 0;
            string flagIdInUse = "";

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o);
            string reportArgs = String.Empty;

            try
            {
                dtOut = new DataTable(tableName);
                Util.InitializeAsciiLookup();

                ifRetry = true;
                bool isContingency = false;
                string runrepSessionID = String.Empty;
                reportResultsPortfolioStruct results = null;
                Service webServ = null;
                int numtries = 1;

                if (!job.JobName.StartsWith("ADHOC_")) PrepareDates();
                ParseArgs(args, ref reportArgs);
                DateTime runStartTime = DateTime.Now;
                while (ifRetry)
                {
                    try
                    {
                        webServ = null;
                        while (webServ == null && numtries < 12)
                        {
                            log.InfoFormat(job.KeyCode, "Attempting Geneva SOAP RunCallableRunrepRunReport [retry #{3}] on {0} with report args {1} {2}", url, rsl, reportArgs, numtries);
                            webServ = new Service();
                            if (webServ == null)
                                Thread.Sleep(5000);
                            numtries++;
                        }

                        if (webServ == null)
                        {
                            log.ErrorFormat(job.KeyCode, "Web service not constructed (null value)");
                            retval = -1;
                            throw new ArgumentNullException("Web service not constructed (null value)") ;
                        }
                        else
                        {
                            log.InfoFormat(job.KeyCode, "Web service constructed successfully");

                            webServ.Timeout = timeout;
                            log.InfoFormat(job.KeyCode, "Web service timeout assigned: {0}", timeout);

                            webServ.Url = ConfigUtils.MetaTagReplacer(url);
                            log.InfoFormat(job.KeyCode, "Web url assigned: {0}", webServ.Url);

                            if (runrepSessionID.Equals(String.Empty))
                            {
                                try
                                {

                                    string flags = "-f empty";
                                    flagIdInUse = safeFlags.Next();
                                    //flags = String.Format("-n{0} -f empty", flagIdInUse);
                                    flags = String.Format("-n{0}", flagIdInUse);

                                    log.DebugFormat(job.KeyCode, "flags={0}", flags);


                                    string login = webServ.MonitorLogin("SysReports", "reports1");
                                    webServ.MonitorAddUser(login, "SysReports");
                                    Console.Write(webServ.GetGenevaIniInfo(runrepSessionID, "/usr/advent/geneva-qa"));

                                    Console.Write(webServ.GetAgaFileUtilityInfo(runrepSessionID, 0, "", "", "agb-geneva"));
                                    Console.Write(webServ.GetAllAgaFileUtilitiesForNewAgaInfo(runrepSessionID,0,"","","agb-geneva"));
                                    Console.Write(webServ.GetAllChildrenForMotherInfo(runrepSessionID, 0, "", "", "agb-geneva"));
                                    Console.Write(webServ.GetRepEngineInfo(runrepSessionID, 0, "", "", "agb-geneva"));
                                    Console.Write(webServ.GetRepQueueInfo(runrepSessionID, 0, "", "", "agb-geneva"));
                                    Console.Write(webServ.GetRunrepInfo(runrepSessionID, 0, "", "", "agb-geneva"));


                                    //runrepSessionID = webServ.StartPersistentCallableRunrep(port, host, uid, pwd, flags);  // StartCallableRunrep(port, host, uid, pwd, flags);
                                    runrepSessionID = webServ.StartCallableRunrep(port, host, uid, pwd, flags);  // StartCallableRunrep(port, host, uid, pwd, flags);
                                    log.InfoFormat(job.KeyCode, "Runrep session started successfully [Runrep ID: {0}]", runrepSessionID);
                                }
                                catch (Exception ex)
                                {
                                    log.ErrorFormat(job.KeyCode, "Failed to start runrep session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                    retval = -99;
                                    throw new ApplicationException(ex.ToString());
                                }
                            }

                            try
                            {
                                webServ.RunCallableRunrepReadFile(runrepSessionID, rsl);
                                log.InfoFormat(job.KeyCode, "Runrep read report file was successful [Runrep ID: {0}]", runrepSessionID);
                            }
                            catch (Exception ex)
                            {
                                log.WarnFormat(job.KeyCode, "Failed to read rsl file from runrep session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                retval = -99;
                                throw new ApplicationException(ex.ToString());
                            }

                            try
                            {
                                results = webServ.RunCallableRunrepRunReport(runrepSessionID, rsl, reportArgs);
                                log.InfoFormat(job.KeyCode, "Runrep run report was successful [Runrep ID: {0}]", runrepSessionID);
                            }
                            catch (Exception ex)
                            {
                                log.WarnFormat(job.KeyCode, "Runrep run report was NOT successful: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                retval = -99;
                                throw new ApplicationException(ex.ToString());
                            }

                            if (isContingency)
                                SendMailMessage(job.KeyCode, job.Config.SoapErrorEmailDistribution, ListFrom, Subject, "Geneva SOAP call succeeded.");

                            try
                            {
                                safeFlags[flagIdInUse]= false;

                                webServ.ShutdownCallableSession(runrepSessionID);
                                log.InfoFormat(job.KeyCode, "Shut down SOAP session OK. [Runrep ID: {0}]", runrepSessionID);
                            }
                            catch (Exception ex)
                            {
                                retval = -1;
                                log.WarnFormat(job.KeyCode, "Error shutting down SOAP session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                            }

                            ifRetry = false;
                        }
                    }
                    catch (Exception ex)
                    {
                        try
                        {
                            webServ.ShutdownCallableSession(runrepSessionID);
                            retval = -1;
                            log.InfoFormat(job.KeyCode, "Shut down SOAP session OK {0}.", runrepSessionID);
                        }
                        catch (Exception exx)
                        {
                            log.WarnFormat(job.KeyCode, "Error shutting down SOAP session: {0} [Runrep ID: {1}]", exx, runrepSessionID);
                        }

                        log.ErrorFormat(job.KeyCode, "Error encountered in SOAP connection: {0}", ex);

                        try
                        {
                            if (DateTime.Now.CompareTo(runStartTime.AddMinutes(minutesSoapRetry)) < 0)
                            {
                                isContingency = true;
                                runrepSessionID = String.Empty;
                                ifRetry = ifOverrideSoapErrorRetry ? false : true;
                                log.ErrorFormat(job.KeyCode, "*** Contingency Condition *** ");
                                if(ifRetry)
                                    log.ErrorFormat(job.KeyCode, "Retrying in {0} minutes.", 1);
                                else
                                    log.ErrorFormat(job.KeyCode, "Retrying cancelled.");

                                if (!ListTo.Equals(String.Empty))
                                    SendMailMessage(job.KeyCode, ListTo, ListFrom, Subject, ex.ToString());
                                retval = -1;
                                Thread.Sleep(60000);
                            }
                            else
                            {
                                log.ErrorFormat(job.KeyCode, "Geneva SOAP call timed out. Giving up now.");
                                SendMailMessage(job.KeyCode, job.Config.SoapErrorEmailDistribution, ListFrom, Subject, "Geneva SOAP call timed out. Giving up now.");
                                retval = -99;
                                ifRetry = false;
                            }
                        }
                        catch (Exception exfinal)
                        {
                            log.ErrorFormat(job.KeyCode, "Fatal error: {0}", exfinal);
                        }
                    }
                }

                if (results != null)
                {
                    if (!ifUseAddendumErrorsOnly)
                        dtOut = ConvertToDataTable(tableName, results);
                    else
                        dtOut = getAddendumErrors(tableName, results);
                }

                if (dtOut != null && dtOut.Rows.Count > 0)
                    log.InfoFormat(job.KeyCode, "Obtained {0} records from SOAP service call.", dtOut.Rows.Count);
                else
                    log.InfoFormat(job.KeyCode, "Obtained no records from SOAP service call.");

                if (dtOut != null)
                {
                    AddToOutputs(this.Name, dtOut);
                    AddToOutputs("RunDate", RunDate);
                }
            }
            catch (Exception ex)
            {
                log.Error(job.KeyCode, ex);
                retval = -99;
            }            

            hpt.Stop();

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o);
            log.InfoFormat(job.KeyCode, "GenevaSoapReport [{0}] completed in {1} seconds.", Name, hpt.Duration);

            return retval;
        }
        protected internal bool Initialize(Credentials cred,
                                           ConnectMode cMode, string key)
        {
            //Set properties
            this.currentCredentials = cred;
            this.connectionMode     = cMode;
            //this.loggerMode = logMode;

            var pT = new PerfTimer(this, "Initialize");

            if (cMode == ConnectMode.SINGLE)
            {
                if (GlobalDataAccessor.Instance == null ||
                    GlobalDataAccessor.Instance.OracleDA == null ||
                    GlobalDataAccessor.Instance.OracleDA.Initialized == false)
                {
                    //Initialize data accessor
                    this.oracleDA = new OracleDataAccessor(
                        this.currentCredentials.UserName,
                        this.currentCredentials.PassWord,
                        this.currentCredentials.DBHost,
                        this.currentCredentials.DBPort,
                        this.currentCredentials.DBService,
                        this.currentCredentials.DBSchema,
                        65535, cMode == ConnectMode.MULTIPLE,
                        !string.IsNullOrEmpty(key), key);

                    GlobalDataAccessor.Instance.OracleDA = this.oracleDA;
                }
                else
                {
                    this.oracleDA = GlobalDataAccessor.Instance.OracleDA;
                }
            }
            else if (cMode == ConnectMode.MULTIPLE)
            {
                if (this.oracleDA == null)
                {
                    this.oracleDA = new OracleDataAccessor(
                        this.currentCredentials.UserName,
                        this.currentCredentials.PassWord,
                        this.currentCredentials.DBHost,
                        this.currentCredentials.DBPort,
                        this.currentCredentials.DBService,
                        this.currentCredentials.DBSchema,
                        65535, cMode == ConnectMode.MULTIPLE,
                        !string.IsNullOrEmpty(key), key);

                    if (GlobalDataAccessor.Instance == null ||
                        GlobalDataAccessor.Instance.OracleDA == null ||
                        GlobalDataAccessor.Instance.OracleDA.Initialized == false)
                    {
                        GlobalDataAccessor.Instance.OracleDA = this.oracleDA;
                    }
                }
            }
            if (this.isloglevel(LogLevel.DEBUG))
            {
                this.log(LogLevel.DEBUG, pT.ToString());
            }


            return(true);
        }
Ejemplo n.º 36
0
        public static Task <Container> BuildAsync(Action <ServiceRegistry> configure, PerfTimer timer = null)
        {
            var services = new ServiceRegistry();

            configure(services);

            return(BuildAsync(services, timer));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="procSchema"></param>
        /// <param name="procPackage"></param>
        /// <param name="procName"></param>
        /// <param name="inputParameters"></param>
        /// <param name="outputParameters"></param>
        /// <param name="refCursorParamNames"></param>
        /// <param name="errorNumberParamName"></param>
        /// <param name="errorDescParamName"></param>
        /// <param name="errorNumber"></param>
        /// <param name="errorDesc"></param>
        /// <param name="dOut"></param>
        /// <returns></returns>
        protected internal bool ExecuteStoredProc(
            string procSchema,
            string procPackage,
            string procName,
            List <OracleProcParam> inputParameters,
            List <TupleType <string, DataTypeConstants.PawnDataType, int> > outputParameters,
            List <PairType <string, string> > refCursorParamNames,
            string errorNumberParamName,
            string errorDescParamName,
            string key,
            out string errorNumber,
            out string errorDesc,
            out DataSet dOut)
        {
            errorNumber = null;
            errorDesc   = null;
            dOut        = null;
            if (this.oracleDA == null ||
                this.oracleDA.Initialized == false)
            {
                return(false);
            }
            var storedProcId = procSchema + "." + procPackage + "." + procName;

            //Formulate output OracleProcParam objects if necessary
            if (outputParameters != null && outputParameters.Count > 0)
            {
                foreach (var oP in outputParameters)
                {
                    inputParameters.Add(
                        new OracleProcParam(
                            oP.Left, (OracleDbType)oP.Mid, DBNull.Value,
                            ParameterDirection.Output, oP.Right));
                }
            }

            var pT          = new PerfTimer(this, "ExecuteStoredProc");
            var pTQueryOnly = new PerfTimer("- (bound)Stored Proc only");

            //Execute stored proc
            bool callSuccess;

            try
            {
                this.log(
                    LogLevel.INFO,
                    "Executing stored proc: {0}", storedProcId);
                if (string.IsNullOrEmpty(key))
                {
                    callSuccess =
                        this.oracleDA.issueSqlStoredProcCommand(
                            procSchema,
                            procPackage,
                            procName,
                            inputParameters,
                            refCursorParamNames,
                            errorNumberParamName,
                            errorDescParamName,
                            out dOut
                            );
                }
                else
                {
                    callSuccess =
                        this.oracleDA.issueSqlStoredProcCommand(
                            procSchema,
                            procPackage,
                            procName,
                            inputParameters,
                            refCursorParamNames,
                            errorNumberParamName,
                            errorDescParamName,
                            key,
                            out dOut
                            );
                }
            }
            catch (Exception eX)
            {
                this.log(LogLevel.ERROR,
                         "Could not execute stored proc: " + storedProcId + ": Exception: " + eX);
                errorNumber = this.oracleDA.ErrorCode ?? "Failure";
                errorDesc   = this.oracleDA.ErrorDescription ?? "Could not execute stored proc " + storedProcId;
                return(false);
            }

            if (callSuccess == false)
            {
                errorNumber = this.oracleDA.ErrorCode ?? "0";
                errorDesc   = this.oracleDA.ErrorDescription ?? "Could not execute stored proc " + storedProcId;
                return(false);
            }
            if (this.isloglevel(LogLevel.DEBUG))
            {
                this.log(LogLevel.DEBUG, pTQueryOnly.ToString());
            }

            //Set default success output
            errorNumber = "1";
            errorDesc   = "Success";

            if (this.isloglevel(LogLevel.DEBUG))
            {
                this.log(LogLevel.DEBUG, pT.ToString());
            }
            return(true);
        }
Ejemplo n.º 38
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(((State)o).CurrentJobHash, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            StateEnums.Status retval = StateEnums.Status.Success;

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o );

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            string connKeySource = String.Format("{0}\\{1}", serverSource, dbSource);
            DbConnectionDetail dbConnDetailSource = (DbConnectionDetail)ConfigUtils.GlobalConfig.ConnectionSettings.Connections[connKeySource];
            DatabaseUtils.Connect(dbConnDetailSource.DefaultConnectString);

            int numRecsExtracted = 0;

            try
            {
                if (DatabaseUtils.TestConnection())
                {
                    DatabaseUtils.Connect(dbConnDetailSource.DefaultConnectString);

                    DataSet dataSet = new DataSet();
                    DatabaseUtils.ExecuteSQL(selectSql, ref dataSet, "xfer");

                    dataTable = dataSet.Tables[0];

                    if ((numRecsExtracted = dataTable.Rows.Count) > 0)
                        AddToOutputs(this.Name, dataTable);
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat(((State)o).CurrentJobHash, "Error in SQL ({0})", selectSql);
                log.ErrorFormat(((State)o).CurrentJobHash, "{0}", ex);
                retval = StateEnums.Status.Error;
            }

            log.InfoFormat(((State)o).CurrentJobHash, "DataTableXfer processing {0} records.", numRecsExtracted);

            string connKeyTarget = String.Format("{0}\\{1}", serverTarget, dbTarget);
            DbConnectionDetail dbConnDetailTarget = (DbConnectionDetail)ConfigUtils.GlobalConfig.ConnectionSettings.Connections[connKeyTarget];
            DatabaseUtils.Connect(dbConnDetailTarget.DefaultConnectString);

            try
            {
                if (DatabaseUtils.TestConnection())
                {
                    DatabaseUtils.Connect(dbConnDetailTarget.DefaultConnectString);

                    DataSet dataSet = new DataSet();

                    if (ifTruncateFirst)
                    {
                        string sql = "TRUNCATE TABLE " + tblTarget;
                        DatabaseUtils.ExecuteSQLNonQuery(sql);
                    }

                    foreach (DataRow dr in dataTable.Rows)
                    {
                        insertSql = "INSERT INTO " + tblTarget + " (";
                        foreach (DataColumn dc in dataTable.Columns)
                            insertSql += "[" + dc.ColumnName + "],";
                        insertSql = insertSql.TrimEnd(',');
                        insertSql += ") VALUES (";
                        foreach (DataColumn dc in dataTable.Columns)
                            insertSql += "'" + dr[dc.ColumnName] + "',";
                        insertSql = insertSql.TrimEnd(',');
                        insertSql += ") ";

                        DatabaseUtils.ExecuteSQLNonQuery(insertSql);
                    }
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat(((State)o).CurrentJobHash, "Error in SQL ({0})", selectSql);
                log.ErrorFormat(((State)o).CurrentJobHash, "{0}", ex);
                retval = StateEnums.Status.Error;
            }

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o );

            log.InfoFormat(((State)o).CurrentJobHash, "DataTableXfer processing {0} records.", numRecsExtracted);

            return retval;
        }
Ejemplo n.º 39
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(((State)o).CurrentJobHash, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            StateEnums.Status retval = StateEnums.Status.Success;

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            int numrecs = 0;

            try
            {
                foreach (Object oIn in inputData)
                {
                    DataTable dt = oIn as DataTable;
                    DataTable dtOut = new DataTable();

                    if (dt != null)
                    {
                        numrecs += dt.Rows.Count;

                        foreach (DataColumn dc in dt.Columns)
                        {
                            dtOut.Columns.Add(new DataColumn(dc.ColumnName, dc.DataType));
                        }

                        var query =
                                from dr in dt.AsEnumerable()
                                group dr by new
                                {
                                    RecordID = dr.Field<string>("RecordID"),
                                    Exchange = dr.Field<string>("Exchange"),
                                    TradeDate = dr.Field<string>("TradeDate"),
                                    Account = dr.Field<string>("Account"),
                                    ProductCurrency = dr.Field<string>("ProductCurrency"),
                                    BloombergCode = dr.Field<string>("BloombergCode"),
                                    GMICode = dr.Field<string>("GMICode"),
                                    ContractYearMonth = dr.Field<string>("ContractYearMonth"),
                                    Description = dr.Field<string>("Description"),
                                    Side = dr.Field<string>("Side"),
                                    AccountCurrency = dr.Field<string>("AccountCurrency"),
                                    //Quantity = dr.Field<string>("Quantity"),
                                    //Price = dr.Field<string>("Price"),
                                    Multiplier = dr.Field<string>("Multiplier"),
                                    ClosedPrice = dr.Field<string>("ClosedPrice"),
                                    //Amount = dr.Field<string>("Amount"),
                                    //TotalFees = dr.Field<string>("TotalFees"),
                                    GMIDate = dr.Field<string>("GMIDate"),
                                    FuturesCallsPuts = dr.Field<string>("FuturesCallsPuts"),
                                    StrikePrice = dr.Field<string>("StrikePrice"),
                                    ExecutingBroker = dr.Field<string>("ExecutingBroker"),
                                    //UniqueTracer = dr.Field<string>("UniqueTracer"),
                                    Flag = dr.Field<string>("Flag"),
                                    CostPrice = dr.Field<string>("CostPrice"),
                                    NFAFee = dr.Field<string>("NFAFee")
                                } into d
                                let sumQuantity = d.Sum(dr => Convert.ToDouble(dr.Field<string>("Quantity")))  //need to account for side
                                let avgPrice = d.Average(dr => Convert.ToDouble(dr.Field<string>("Price")))
                                let sumAmount = d.Sum(dr => Convert.ToDouble(dr.Field<string>("Amount")))
                                let sumFees = d.Sum(dr => Convert.ToDouble(dr.Field<string>("TotalFees")))
                                //let sumNFAFees = d.Sum(dr => Convert.ToDouble(dr.Field<decimal>("NFAFee").Equals(DBNull.Value) ? 0 : dr.Field<decimal>("NFAFee")))
                                //let avgFxRate = d.Average(dr => Convert.ToDouble(dr.Field<decimal>("FxRate").Equals(DBNull.Value) ? 0 : dr.Field<decimal>("FxRate")))
                                select new
                                {
                                    d,
                                    sumQuantity,
                                    avgPrice,
                                    sumAmount,
                                    sumFees
                                };

                        foreach (var v in query)
                        {
                            DataRow dr = dtOut.NewRow();

                            dr["RecordID"] = v.d.Key.RecordID;
                            dr["Exchange"] = v.d.Key.Exchange;
                            dr["TradeDate"] = v.d.Key.TradeDate;
                            dr["Account"] = v.d.Key.Account;
                            dr["ProductCurrency"] = v.d.Key.ProductCurrency;
                            dr["BloombergCode"] = v.d.Key.BloombergCode;
                            dr["GMICode"] = v.d.Key.GMICode;
                            dr["ContractYearMonth"] = v.d.Key.ContractYearMonth;
                            dr["Description"] = v.d.Key.Description;
                            dr["Side"] = v.d.Key.Side;
                            dr["AccountCurrency"] = v.d.Key.AccountCurrency;
                            dr["Quantity"] = v.sumQuantity;
                            dr["Price"] = v.avgPrice;
                            dr["Multiplier"] = v.d.Key.Multiplier;
                            dr["ClosedPrice"] = v.d.Key.ClosedPrice;
                            dr["Amount"] = v.sumAmount;
                            dr["TotalFees"] = v.sumFees;
                            dr["GMIDate"] = v.d.Key.GMIDate;
                            dr["FuturesCallsPuts"] = v.d.Key.FuturesCallsPuts;
                            dr["StrikePrice"] = v.d.Key.StrikePrice;
                            dr["ExecutingBroker"] = v.d.Key.ExecutingBroker;
                            //dr["UniqueTracer"] = v.d.Key.UniqueTracer;
                            dr["Flag"] = v.d.Key.Flag;
                            dr["NFAFee"] = v.d.Key.NFAFee;

                            if (dr["TradeDate"] != DBNull.Value && dr["TradeDate"].ToString() != String.Empty)
                            {
                                dtOut.Rows.Add(dr);
                                dtOut.AcceptChanges();
                            }
                        }

                        AddToOutputs(this.Name, dtOut);
                    }
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat(((State)o).CurrentJobHash, "Error : {0}", ex);
                retval = StateEnums.Status.Warnings;
            }

            hpt.Stop();

            log.InfoFormat(((State)o).CurrentJobHash, "TradesAdvantage {0} processed {1} records in {2} seconds.", Name, numrecs, hpt.Duration);

            return retval;
        }
Ejemplo n.º 40
0
        public FubuRuntime(FubuRegistry registry)
        {
            _registry = registry;

            _appFunc = new Lazy <AppFunc>(() => FubuOwinHost.ToAppFunc(this));

            RouteTable.Routes.Clear();

            _diagnostics = new ActivationDiagnostics();

            _perfTimer = _diagnostics.Timer;
            _perfTimer.Start("FubuRuntime Bootstrapping");


            var packageAssemblies = AssemblyFinder.FindModuleAssemblies(_diagnostics);

            var applicationPath = registry.RootPath ?? DefaultApplicationPath();

            _files = new FubuApplicationFiles(applicationPath);

            _perfTimer.Record("Applying IFubuRegistryExtension's",
                              () => applyFubuExtensionsFromPackages(_diagnostics, packageAssemblies, registry));

            _container = registry.ToContainer();

            var graph = _perfTimer.Record("Building the BehaviorGraph",
                                          () => BehaviorGraphBuilder.Build(registry, _perfTimer, packageAssemblies, _diagnostics, _files));

            _perfTimer.Record("Registering services into the IoC Container",
                              () => registry.Config.RegisterServices(Mode, _container, graph));

            _factory = new StructureMapServiceFactory(_container);

            var routeTask = _perfTimer.RecordTask("Building Routes", () =>
            {
                var routes = buildRoutes(_factory, graph);
                routes.Each(r => RouteTable.Routes.Add(r));

                return(routes);
            });

            var library = HtmlConventionCollator.BuildHtmlConventions(graph);

            _container.Configure(_ =>
            {
                _.Policies.OnMissingFamily <SettingPolicy>();

                _.For <IFubuApplicationFiles>().Use(_files);
                _.For <IServiceLocator>().Use <StructureMapServiceLocator>();
                _.For <FubuRuntime>().Use(this);
                _.For <IServiceFactory>().Use(_factory);
                _.For <HtmlConventionLibrary>().Use(library);
            });


            Activate();

            _routes = routeTask.Result();



            if (registry.Host != null)
            {
                startHosting();
            }

            _perfTimer.Stop();
            Restarted = DateTime.Now;

            _diagnostics.AssertNoFailures();
        }
Ejemplo n.º 41
0
 public Container(IServiceCollection services, PerfTimer timer) : base(services, timer)
 {
 }
Ejemplo n.º 42
0
        public override int Execute(Object o, Hashtable inputData)
        {
            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o );

            log.InfoFormat("Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            int retval = 0;

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            int numrecs = 0;
            int numrecsFiltered = 0;

            try
            {
                DateTime entryDate = DateTime.Today;
                string dataSource = "Hayground";
                DateTime tradeDate = DateTime.MinValue;
                string symbol = String.Empty;
                string side = String.Empty;
                int quantity = 0;
                double price = 0;

                foreach (Object oIn in inputData)
                {
                    DataTable dt = oIn as DataTable;
                    DataTable dtOut = new DataTable();

                    PrepareDataTable(ref dtOut);

                    if (dt != null && dt.Rows.Count > 0)
                    {
                        foreach (DataRow dr in dt.Rows)
                        {
                            if (dr[0] != DBNull.Value) tradeDate = (DateTime)dr[0];

                            if (dr[1].ToString().Equals(String.Empty) && dr[3].ToString().Equals(String.Empty))
                                continue;

                            if (dr[1] != DBNull.Value) symbol = dr[1].ToString();
                            if (dr[3] != DBNull.Value) side = dr[3].ToString();
                            if (dr[5] != DBNull.Value) quantity = Convert.ToInt32(dr[5]);
                            price = 0;

                            DataRow drout = dtOut.NewRow();

                            //drout.BeginEdit();
                            drout[0] = entryDate;
                            drout[1] = dataSource;
                            drout[2] = tradeDate;
                            drout[3] = symbol;
                            drout[4] = side;
                            drout[5] = quantity;
                            drout[6] = price;
                            //drout.EndEdit();

                            dtOut.Rows.Add(drout);
                        }
                    
                        if (dtOut.Rows.Count > 0)
                            AddToOutputs(this.Name, dtOut);

                        numrecs += dtOut.Rows.Count;
                    }
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat("Error : {0}", ex);
                retval = -1;
            }

            hpt.Stop();

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.DoneSuccess, "", (State)o );

            log.InfoFormat("DataTableFilter {0} filtered {1} of {2} records in {1} seconds.", Name, numrecsFiltered, numrecs, hpt.Duration);

            return retval;
        }
Ejemplo n.º 43
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(jobKeyCode, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");

            State state = (State)o;
            StateEnums.Status retval = StateEnums.Status.Success;
            int runId = 0;
            double duration = 0;

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o);
            XmlDocument sourceXdoc = new XmlDocument();

            if (inputData.Count > 0)
            {
                PerfTimer hpt = new PerfTimer();
                hpt.Start();

                string flags = "-x";

	            if (!ConfigUtils.GlobalConfig.WfmConnectonString.Equals(String.Empty))
	            {
		            WfmConnectonString = ConfigUtils.GlobalConfig.WfmConnectonString;
		            log.InfoFormat(jobKeyCode, "WfmConnectionString recieved from GlobalConfig. {0}", WfmConnectonString);
	            }
	            else
	            {
					log.WarnFormat(jobKeyCode, "WfmConnectionString was NOT recieved from GlobalConfig");
					log.WarnFormat(jobKeyCode, "WfmConnectionString will be assigned from job spec {0}",wfmConnectonString);

		            if (wfmConnectonString.Equals(String.Empty) ||
		                ConfigUtils.GlobalConfig.ConnectionSettings.Connections.ContainsKey(wfmConnectonString) == false)
		            {
			            retval = StateEnums.Status.Error;
			            log.ErrorFormat(jobKeyCode,
			                            "WFM Connection {0} is not defined.  Please add to config file and restart the service.",
			                            wfmConnectonString);
			            return retval;
		            }
				}

				DbConnectionDetail dbConnDetail =
			        (DbConnectionDetail) ConfigUtils.GlobalConfig.ConnectionSettings.Connections[wfmConnectonString];
		        if (!DatabaseUtils.Connect(dbConnDetail.DefaultConnectString))
		        {
			        retval = StateEnums.Status.Error;
			        log.ErrorFormat(jobKeyCode, "Could not establish connection to WFM. {0}", wfmConnectonString);
			        throw new ApplicationException("WFM Database connection could not be established.");
			        return retval;
		        }
	            

	            try
                {
					loaderResultsStruct loaderReturn = null;
                    string mail_distribution = MetaTagReplacer.GetMetaTagValue("*SOAP_ERROR_DISTRIBUTION*",
                                                                                state.CurrentParameters.ProcessInputDates,
                                                                                null);

                    string runrepSessionID = String.Empty;
                     Service webServ = null;

                    if (InputToProcess.CompareTo(String.Empty) != 0)
                        sourceXdoc = (XmlDocument)inputData[InputToProcess];
                    else
                        sourceXdoc = (XmlDocument)inputData[0];

                    if (inputData.ContainsKey("ActivityName"))
                        activityName = inputData["ActivityName"].ToString();

                    if (sourceXdoc != null && sourceXdoc.InnerXml != null && !sourceXdoc.InnerXml.Equals(String.Empty) && sourceXdoc.DocumentElement.FirstChild.ChildNodes.Count > 0)
                    {
                        sourceXdoc.InnerXml = sourceXdoc.InnerXml.Replace("http://www.advent.com/SchemaRevLevel248/Geneva", "http://www.advent.com/SchemaRevLevel371/Geneva");

                        if (nsuri.Equals(String.Empty))
                            nsuri = ((sourceXdoc).DocumentElement).NamespaceURI;
                        int i = 0;

                        Hashtable htXmlData = new Hashtable();
                        Hashtable htUserTranId1Ref = new Hashtable();
                        Hashtable htIdentifierRef = new Hashtable();
                        Hashtable htTypeIndicatorRef = new Hashtable();
                        Hashtable htSubTypeIndicatorRef = new Hashtable();

                        XmlNodeList nodeList = null;

                        if (sourceXdoc.DocumentElement.FirstChild.Name.Equals("GenevaLoader"))
                            nodeList = sourceXdoc.DocumentElement.FirstChild.ChildNodes;
                        else
                            nodeList = sourceXdoc.DocumentElement.ChildNodes;

                        string dataType = sourceXdoc.DocumentElement.FirstChild.Name;

                        foreach (XmlNode node in nodeList)
                        {
                            string loaderType = String.Empty;
                            string loaderAction = String.Empty;
                            string userTranId1 = String.Empty;
                            string identifier = String.Empty;
                            foreach (XmlNode subNode in node.ChildNodes)
                            {
                                XmlDocument xdocXmlData = new XmlDocument();
                                XmlNode rootXmlData = xdocXmlData.CreateElement(recordType);
                                xdocXmlData.AppendChild(rootXmlData);

                                string[] loaderKeys = subNode.Name.Split('_');
                                loaderType = loaderKeys[0];
                                if (loaderKeys.Length > 1)
                                    loaderAction = loaderKeys[1];
                                else
                                    loaderAction = "InsertUpdate";

                                recCountTotal = subNode.ChildNodes.Count;

                                GetGenevaTransactionKeys(htUserTranId1Ref, htTypeIndicatorRef, ref loaderType, ref loaderAction, ref userTranId1, ref identifier, subNode, loaderKeys);

                                XmlNode subNodeCopy = xdocXmlData.CreateElement(subNode.Name);
                                subNodeCopy.InnerXml = subNode.InnerXml;
                                xdocXmlData.FirstChild.AppendChild(subNodeCopy);

                                if (!htSubTypeIndicatorRef.Contains(identifier))
                                    htSubTypeIndicatorRef.Add(identifier, loaderAction + "Type");

                                htXmlData.Add(i, ConvertXmlData(jobKeyCode, xdocXmlData));
                                htIdentifierRef.Add(i, identifier);

                                i++;
                            }
                        }

                        try
                        {
                            ifRetry = true;
                            int numtries = 1;
                            bool isContingency = false;
                            DateTime runStartTime = DateTime.Now;

                            GetSubAdvisorActivityName(state, ref activityName);
                            runId = AddActivityRun(activityName, state.SourceFileName, sourceXdoc.DocumentElement.FirstChild.ChildNodes.Count);

                            while (ifRetry)
                            {
                                try
                                {
                                    webServ = null;
                                    while (webServ == null && numtries < 12)
                                    {
                                        log.InfoFormat(jobKeyCode, "Attempting Geneva SOAP RunCallableLoader [retry #{3}] on {0}:{1} with flags {2}", host, port, flags, numtries);
                                        webServ = new Service();
                                        if (webServ == null)
                                            Thread.Sleep(5000);
                                        numtries++;
                                    }

                                    if (webServ == null)
                                    {
                                        log.ErrorFormat(jobKeyCode, "Web service not constructed (null value)");
                                        retval = StateEnums.Status.Warnings;
                                        throw new System.Web.Services.Protocols.SoapException();
                                    }
                                    else
                                    {
                                        log.InfoFormat(jobKeyCode, "Web service constructed successfully");

                                        webServ.Timeout = timeout;
                                        log.InfoFormat(jobKeyCode, "Web service timeout assigned: {0}", timeout);

                                        webServ.Url = this.Url;
                                        log.InfoFormat(jobKeyCode, "Web url assigned: {0}", webServ.Url);

                                        if (runrepSessionID.Equals(String.Empty))
                                            try
                                            {
                                                runrepSessionID = webServ.StartCallableLoader(port, host, uid, pwd);
                                                log.InfoFormat(jobKeyCode, "Runrep session started successfully [Runrep ID: {0}]", runrepSessionID);
                                            }
                                            catch (Exception ex)
                                            {
                                                log.WarnFormat(jobKeyCode, "Failed to start runrep session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                                retval = StateEnums.Status.Warnings;
                                                throw new System.Web.Services.Protocols.SoapException();
                                            }
                                    }

                                    try
                                    {
                                        try
                                        {
                                            loaderReturn = webServ.RunCallableLoader(runrepSessionID, sourceXdoc.InnerXml, flags);
                                        }
                                        catch(Exception ex)
                                        {
                                            if(ex.Message.Contains("Unknown element"))
                                                throw new ApplicationException(ex.Message);
                                            else
                                                throw new Exception(ex.Message);
                                        }
                                        log.InfoFormat(jobKeyCode, "Callable Loader session was successful [Runrep ID: {0}]", runrepSessionID);

                                        DataTable dtResults = new DataTable();
                                        dtResults.Columns.Add("Status");
                                        dtResults.Columns.Add("Message");
                                        dtResults.Columns.Add("KeyValue");

                                        for (int j = 0; j < loaderReturn.results.Length; j++)
                                        {
                                            DataRow dr = dtResults.NewRow();
                                            dr["Status"] = loaderReturn.results[j].status.ToString();
                                            dr["Message"] = loaderReturn.results[j].message.ToString();
                                            dr["KeyValue"] = loaderReturn.results[j].keyValue.ToString();
                                            dtResults.Rows.Add(dr);
                                        }
                                        dtResults.DefaultView.Sort = "Status,Message,KeyValue";
                                        mailEnvelop = String.Empty;
                                        string lastStatus = "";
                                        string lastmsgg = "";
                                        foreach (DataRowView dr in dtResults.DefaultView)
                                        {
                                            if (!dr["Status"].ToString().Equals(lastStatus))
                                            {
                                                mailEnvelop += String.Format("Status: {0}<br>", dr["Status"].ToString());
                                                lastStatus = dr["Status"].ToString();
                                            }

                                            if (!dr["Message"].ToString().Equals(lastmsgg))
                                            {
                                                mailEnvelop += String.Format("Message: {0}<br>", dr["Message"].ToString());
                                                lastmsgg = dr["Message"].ToString();
                                            }

                                            mailEnvelop += String.Format("Trade Id: {0}<br>", dr["KeyValue"].ToString());
                                        }
                                    }
                                    catch (ApplicationException aex)
                                    {
                                        //bubble up application exception.  this difference here is that we'll avoid the web service retry loop
                                        throw new ApplicationException(aex.Message);
                                    }
                                    catch (Exception ex)
                                    {
                                        log.ErrorFormat(jobKeyCode, "Failed to run Callable Loader session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                        retval = StateEnums.Status.Warnings;
                                        throw new System.Web.Services.Protocols.SoapException();
                                    }

                                    if (isContingency)
                                        SendMailMessage(jobKeyCode, mail_distribution, "BITS,[email protected]", Subject, "Geneva SOAP call succeeded.");

                                    try
                                    {
                                        webServ.ShutdownCallableSession(runrepSessionID);
                                        retval = StateEnums.Status.Warnings;
                                        log.InfoFormat(jobKeyCode, "Shut down SOAP session OK {0}.", runrepSessionID);
                                    }
                                    catch (Exception ex)
                                    {
                                        log.WarnFormat(jobKeyCode, "Error shutting down SOAP session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                    }

                                    recCountSuccess++;
                                    ifRetry = false;
                                }

                                catch (ApplicationException aex)
                                {
                                    //use this type of exception to avoid the web service retry loop
                                    try
                                    {
                                        webServ.ShutdownCallableSession(runrepSessionID);
                                        ifRetry = false;
                                        retval = StateEnums.Status.Warnings;
                                        log.InfoFormat(jobKeyCode, "Shut down SOAP session OK {0}.", runrepSessionID);
                                        log.WarnFormat(jobKeyCode, "Bailing out of Geneva Update because of application error [{0}]", aex.Message);
                                    }
                                    catch (Exception ex)
                                    {
                                        log.WarnFormat(jobKeyCode, "Error shutting down SOAP session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                    }
                                }
                                catch (Exception wex)
                                {
                                    try
                                    {
                                        webServ.ShutdownCallableSession(runrepSessionID);
                                        retval = StateEnums.Status.Warnings;
                                        log.InfoFormat(jobKeyCode, "Shut down SOAP session OK {0}.", runrepSessionID);
                                    }
                                    catch (Exception ex)
                                    {
                                        log.WarnFormat(jobKeyCode, "Error shutting down SOAP session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                    }

                                    if (wex.Message.IndexOf("Unknown element") > -1)
                                        throw (new ApplicationException(wex.Message));

                                    if (DateTime.Now.CompareTo(runStartTime.AddMinutes(minutesSoapRetry)) < 0)
                                    {
                                        isContingency = true;
                                        runrepSessionID = String.Empty;
                                        ifRetry = ifOverrideSoapErrorRetry ? false : true;
                                        SendMailMessage(jobKeyCode, mail_distribution, "BITS,[email protected]", Subject, wex.ToString());
                                        retval = StateEnums.Status.Warnings;

                                        Thread.Sleep(60000);
                                    }
                                    else
                                    {
                                        log.ErrorFormat(jobKeyCode, "Geneva SOAP call timed out. Giving up now.");
                                        SendMailMessage(jobKeyCode, mail_distribution, "BITS,[email protected]", Subject, "Geneva SOAP call timed out. Giving up now.");
                                        ifRetry = false;
                                        //retval = StateEnums.Status.Error;
                                        retval = StateEnums.Status.Warnings;
                                    }
                                }
                            }
                        }
                        catch (Exception exl)
                        {
                            log.Warn(jobKeyCode, exl);
                            retval = StateEnums.Status.Warnings;
                        }
                        finally
                        {
                            if (loaderReturn == null)
                            {
                                loaderReturn = new loaderResultsStruct();
                            }

                            UpdateActivityRun(jobKeyCode,runId, activityName, dataType, state.SourceFileName, sourceXdoc.DocumentElement.FirstChild.ChildNodes.Count,                            
                                loaderReturn, htIdentifierRef, htUserTranId1Ref, htTypeIndicatorRef, htXmlData, GetSubtypes_Keys(sourceXdoc,nsuri));
							

							AddToOutputs(this.Name + "_ActivityLog", GetActivityLog(jobKeyCode, runId, loaderReturn));
							AddToOutputs(this.Name + "_DataTable_TranIdPair", GetTranIdUserTranIdPairTable(sourceXdoc, nsuri, loaderReturn, this.Name + "_DataTable_TranIdPair"));
							//else
                            //    log.WarnFormat(((State)o).CurrentJobHash, "{0} is not set up in Geneva as valid Activity.", activityName);
                        }
                    }
                }
                catch (Exception ex)
                {
                    log.ErrorFormat(jobKeyCode, "Error : {0}", ex);
                    //retval = StateEnums.Status.Error;
                    retval = StateEnums.Status.Warnings;
                }

                hpt.Stop();
                duration = hpt.Duration;
            }

            AddToOutputs(this.Name, sourceXdoc);
            AddToOutputs(this.Name + "_MailEnvelop", mailEnvelop);

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o);
            UpdateRecordCount(activityIdEnding, recCountTotal, recCountSuccess, recCountFailed);

            log.InfoFormat(jobKeyCode, "GenevaSoapSelect {0} processed {1} of {2} records in {1} seconds.", Name, recCountSuccess, recCountTotal, duration);

            return retval;
        }
Ejemplo n.º 44
0
        private void DownloadCacheFiles()
        {
            lock (_downloadLock)
            {
                while (_downloadQueue.Count > 0)
                {
                    Tuple <string, CachedItem> tuple;
                    lock (_downloadQueue)
                    {
                        tuple = _downloadQueue.Dequeue();
                    }

                    var httpUri = tuple.Item1;
                    var item    = tuple.Item2;

                    try
                    {
                        var point = _points.First(p => item.CachePath.StartsWith(p.SystemPath));

                        var driveInfo = new DriveInfo(Path.GetPathRoot(point.SystemPath));

                        Logger.Info("Downloading file to the cache {0} Estimated free space {1} Real free space {2} {3}", httpUri, point.FreeSpace, driveInfo.AvailableFreeSpace, point.SystemPath);

                        if (File.Exists(item.CachePath))
                        {
                            File.Delete(item.CachePath);
                        }

                        var timer = PerfTimer.StartNew();

                        if (httpUri.StartsWith("http"))
                        {
                            HttpHelper.DownloadFile(httpUri, item.CachePath, true);
                        }
                        else if (httpUri.StartsWith("hyp"))
                        {
                            HyperUploadItem.Manager.DownloadFile(httpUri, item.CachePath, true).Wait();
                        }

                        timer.Stop();
                        Logger.Info("Download finished at {0}/s", Utils.FormatBytes(item.Magnet.Size / timer.Elapsed.TotalSeconds));

                        if (CacheVerification)
                        {
                            Logger.Info("Verifying the data");
                            var hasher = new ThexThreaded <TigerNative>();
                            hasher.LowPriority            = true;
                            hasher.FileStreamBufferLength = 1024 * 1024;
                            var tth = Base32Encoding.ToString(hasher.GetTTHRoot(item.CachePath));

                            if (tth == item.Magnet.TTH)
                            {
                                Logger.Info("File cache match {0}", tth);
                                item.Complete = true;
                                item.CachedSegments.SetAll(true);
                                WriteBitfieldFile(item);
                            }
                            else
                            {
                                Logger.Info("Error! File cache mismatch {0}, expected {1} repeating the download", tth,
                                            item.Magnet.TTH);
                                File.Delete(item.CachePath);
                                lock (_downloadQueue)
                                {
                                    _downloadQueue.Enqueue(tuple);
                                }
                                Thread.Sleep(TimeSpan.FromSeconds(1));
                            }
                        }
                        else
                        {
                            Logger.Info("Adding file without verification");
                            item.Complete = true;
                            item.CachedSegments.SetAll(true);
                            WriteBitfieldFile(item);
                        }
                    }
                    catch (Exception ex)
                    {
                        while (ex != null)
                        {
                            Logger.Error("Error occured when processing download of cache item {0} {1}", tuple.Item1,
                                         ex.Message);
                            ex = ex.InnerException;
                        }

                        RemoveItemFromCache(item);

                        Thread.Sleep(TimeSpan.FromSeconds(1));
                    }
                }

                lock (_downloadQueue)
                {
                    _downloadThreadAlive = false;
                }
            }
        }
Ejemplo n.º 45
0
        internal void Compile(JasperGenerationRules generation, JasperRuntime runtime, PerfTimer timer)
        {
            _generation = generation;
            _container  = runtime.Container;

            var forwarders = runtime.Get <Forwarders>();

            AddForwarders(forwarders);
        }
Ejemplo n.º 46
0
        public override StateEnums.Status Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(((State)o).CurrentJobHash, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            StateEnums.Status retval = StateEnums.Status.Success;

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o );

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            int numrecs=0;
            string[] outputFields = new string[0];
            string[] outputSumFields = new string[0];
            string[] outputConstantFields = new string[0];

            if (displayFields != null)
                outputFields = DisplayFields.Split(';');
            if (sumFields != null)
                outputSumFields = SumFields.Split(';');
            if (constantFields != null)
                outputConstantFields = ConstantFields.Split(';');

            try
            {
                DataTable dt = new DataTable();
                if (InputToProcess.CompareTo(String.Empty) != 0)
                    dt = inputData[InputToProcess] as DataTable;
                else
                {
                    dt = inputData[0] as DataTable;
                }

                DataTable dtAgg = new DataTable();
                DataColumn[] dcKey = new DataColumn[outputFields.Length];
                int i = 0;
                if (ifLimitColsToDisplay)
                    foreach (DataColumn dc in dt.Columns)
                    {
                        if (outputFields.Contains(dc.ColumnName) ||
                            outputSumFields.Contains(dc.ColumnName) ||
                            outputConstantFields.Contains(dc.ColumnName))
                        {
                            dtAgg.Columns.Add(dc.ColumnName);
                            if (outputFields.Contains(dc.ColumnName))
                                dcKey[i++] = dtAgg.Columns[dc.ColumnName];
                        }
                    }
                else
                    foreach (DataColumn dc in dt.Columns)
                    {
                        dtAgg.Columns.Add(dc.ColumnName);
                        if (outputFields.Contains(dc.ColumnName))
                            dcKey[i++] = dtAgg.Columns[dc.ColumnName];
                    }

                string[] constants = null;
                if (outputConstantFields != null && outputConstantFields.Length > 0)
                {
                    constants = outputConstantFields[0].Split('=');
                    if (constants.Length == 2 && dt.Columns.Contains(constants[0]) && !dtAgg.Columns.Contains(constants[0]))
                        dtAgg.Columns.Add(constants[0]);
                }


                foreach (DataRow dr in dt.Rows)
                {
                    StringBuilder filterExpression = new StringBuilder();
                    foreach (string s in outputFields)
                        filterExpression.AppendFormat("{0}='{1}' AND ", s, dr[s]);
                    string filter = filterExpression.ToString();
                    filter = filter.Substring(0, filter.LastIndexOf(" AND"));

                    DataRow[] drs = null;
                    if (filter != null)
                        drs = dtAgg.Select(filter);
                    else
                        drs = dtAgg.Select();

                    DataRow drEdit;
                    bool isNewRow = false;
                    if (drs.Length == 0)
                    {
                        drEdit = dtAgg.NewRow();
                        isNewRow = true;
                    }
                    else
                        drEdit = drs[0];


                    drEdit.BeginEdit();

                    if (isNewRow)
                    {
                        foreach (string s in outputFields)
                            drEdit[s] = dr[s];
                        if (constants != null)
                            drEdit[constants[0]] = constants[1];
                    }

                    foreach (string agg in outputSumFields)
                    {
                        double val = double.NaN;
                        double.TryParse(drEdit[agg].ToString(), out val);

                        double newval = double.NaN;
                        double.TryParse(dr[agg].ToString(), out newval);

                        if (double.IsNaN(val) && double.IsNaN(newval) == false)
                            val = newval;
                        else if (double.IsNaN(val) == false && double.IsNaN(newval) == false)
                            val += newval;

                        if (double.IsNaN(val) == false)
                            drEdit[agg] = val;
                    }

                    drEdit.EndEdit();

                    if (isNewRow)
                        dtAgg.Rows.Add(drEdit);
                }

                #region deprc
                //if (dt != null)
                //{
                //    numrecs += dt.Rows.Count;

                //    var query = 
                //        from dr in dt.AsEnumerable()
                //        group dr by new {
                //            tradeDate = dr.Field<DateTime>("TradeDate"),
                //            dataSource = dr.Field<string>("DataSource"),
                //            tradeType = dr.Field<string>("TradeType"),
                //            tradeStatus = dr.Field<string>("TradeStatus"),
                //            symbol = dr.Field<string>("Symbol"),
                //            portfolioName = dr.Field<string>("PortfolioName"),
                //            accountId = dr.Field<int>("AccountId"),
                //            broker = dr.Field<string>("Broker"),
                //            brokerAccount = dr.Field<string>("BrokerAccount"),
                //            currency = dr.Field<string>("Currency"),
                //            side = dr.Field<string>("Side")
                //        } into d
                //        let sumSignedQuantity = d.Sum(dr => dr.Field<decimal>("SignedQuantity"))
                //        let avgPrice = d.Average(dr => dr.Field<decimal>("Price"))
                //        let sumAmount = d.Sum(dr => dr.Field<decimal>("Amount"))
                //        let sumCommission1 = d.Sum(dr => dr.Field<decimal>("Commission1"))
                //        let sumCommission2 = d.Sum(dr => dr.Field<decimal>("Commission2"))
                //        let sumFee1 = d.Sum(dr => dr.Field<decimal>("Fee1"))
                //        let sumFee2 = d.Sum(dr => dr.Field<decimal>("Fee2"))
                //        let sumNetAmount = d.Sum(dr => dr.Field<decimal>("NetAmount"))
                //        let avgFxRate = d.Average(dr => dr.Field<decimal>("FxRate"))
                //        let sumNetAmountUSD = d.Sum(dr => dr.Field<decimal>("NetAmountUSd"))
                //        select new { d, 
                //            sumSignedQuantity,
                //            avgPrice,
                //            sumAmount,
                //            sumCommission1,
                //            sumCommission2,
                //            sumFee1,
                //            sumFee2,
                //            sumNetAmount,
                //            avgFxRate,
                //            sumNetAmountUSD 
                //        };

                //    DataTable dtOut = new DataTable();

                //    foreach (string ss in outputFields)
                //        dtOut.Columns.Add(new DataColumn(ss));
                //    foreach (string ss in outputSumFields)
                //        dtOut.Columns.Add(new DataColumn(ss));

                //    foreach (var v in query)
                //    {
                //        DataRow dr = dtOut.NewRow();

                //        dr["TradeDate"] = v.d.Key.tradeDate ;
                //        dr["DataSource"] = v.d.Key.dataSource ;
                //        dr["TradeType"] = v.d.Key.tradeType ;
                //        dr["TradeStatus"] = v.d.Key.tradeStatus ;
                //        dr["Symbol"] = v.d.Key.symbol ;
                //        dr["PortfolioName"] = v.d.Key.portfolioName ;
                //        dr["AccountId"] = v.d.Key.accountId ;
                //        dr["Broker"] = v.d.Key.broker ;
                //        dr["brokerAccount"] = v.d.Key.brokerAccount ;
                //        dr["Currency"] = v.d.Key.currency ;
                //        dr["Side"] = v.d.Key.side ;

                //        dr["SignedQuantity"] = v.sumSignedQuantity;
                //        dr["Price"] = v.sumSignedQuantity;
                //        dr["Amount"] = v.sumSignedQuantity;
                //        dr["Commission1"] = v.sumSignedQuantity;
                //        dr["Commission2"] = v.sumSignedQuantity;
                //        dr["Fee1"] = v.sumSignedQuantity;
                //        dr["Fee2"] = v.sumSignedQuantity;
                //        dr["NetAmount"] = v.sumSignedQuantity;
                //        dr["FxRate"] = v.sumSignedQuantity;
                //        dr["NetAmountUSd"] = v.sumSignedQuantity;

                //        dtOut.Rows.Add(dr);
                //        dtOut.AcceptChanges();
                //    }
                #endregion

                AddToOutputs(this.Name, dtAgg);
                recCount = dtAgg.Rows.Count;
            }
            catch (Exception ex)
            {
                log.ErrorFormat(((State)o).CurrentJobHash, "Error : {0}", ex);
                retval = StateEnums.Status.Error;
            }

            hpt.Stop();

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o );
            UpdateRecordCount(activityIdEnding, recCount, recCount, 0);

            log.InfoFormat(((State)o).CurrentJobHash, "DataTableAggregate {0} aggregated {1} records in {2} seconds.", Name, numrecs, hpt.Duration);

            return retval;
        }
Ejemplo n.º 47
0
        public override int Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(job.KeyCode, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            int retval = 0;

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o);
            string reportArgs = String.Empty;

            try
            {
                dtOut = new DataTable(tableName);
                Util.InitializeAsciiLookup();

                ifRetry = true;
                bool isContingency = false;
                string runrepSessionID = String.Empty;
                reportResultsPortfolioStruct results = null;
                Service webServ = null;
                int numtries = 1;

                if (!job.JobName.StartsWith("ADHOC_")) PrepareDates();
                ParseArgs(args, ref reportArgs);
                DateTime runStartTime = DateTime.Now;
                while (ifRetry)
                {
                    try
                    {
                        webServ = null;
                        while (webServ == null && numtries < 12)
                        {
                            log.InfoFormat(job.KeyCode, "Attempting Geneva SOAP RunCallableRunrepRunReport [retry #{3}] on {0} with report args {1} {2}", url, rsl, reportArgs, numtries);
                            webServ = new Service();
                            if (webServ == null)
                                Thread.Sleep(5000);
                            numtries++;
                        }

                        if (webServ == null)
                        {
                            log.WarnFormat(job.KeyCode, "Web service not constructed (null value)");
                            retval = -1;
                            throw new System.Web.Services.Protocols.SoapException();
                        }
                        else
                        {
                            log.InfoFormat(job.KeyCode, "Web service constructed successfully");

                            webServ.Timeout = timeout;
                            log.InfoFormat(job.KeyCode, "Web service timeout assigned: {0}", timeout);

                            webServ.Url = ConfigUtils.MetaTagReplacer(url);
                            log.WarnFormat(job.KeyCode, "Web url assigned: {0}", webServ.Url);

                            if (runrepSessionID.Equals(String.Empty))
                            {
                                try
                                {
                                    runrepSessionID = webServ.StartCallableRunrep(port, host, uid, pwd, "-f empty");
                                    log.InfoFormat(job.KeyCode, "Runrep session started successfully [Runrep ID: {0}]", runrepSessionID);
                                }
                                catch (Exception ex)
                                {
                                    log.ErrorFormat(job.KeyCode, "Failed to start runrep session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                    retval = -99;
                                    throw new System.Web.Services.Protocols.SoapException();
                                }
                            }

                            try
                            {
                                webServ.RunCallableRunrepReadFile(runrepSessionID, rsl);
                                log.InfoFormat(job.KeyCode, "Runrep read report file was successful [Runrep ID: {0}]", runrepSessionID);
                            }
                            catch (Exception ex)
                            {
                                log.WarnFormat(job.KeyCode, "Failed to read rsl file from runrep session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                retval = -99;
                                throw new System.Web.Services.Protocols.SoapException();
                            }

                            try
                            {
                                throw new ApplicationException(); //TESTING!!!!!!!!!!!!!!
                                results = webServ.RunCallableRunrepRunReport(runrepSessionID, rsl, reportArgs);
                                log.InfoFormat(job.KeyCode, "Runrep run report was successful [Runrep ID: {0}]", runrepSessionID);
                            }
                            catch (Exception ex)
                            {
                                log.WarnFormat(job.KeyCode, "Runrep run report was NOT successful: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                                retval = -99;
                                throw new System.Web.Services.Protocols.SoapException();
                            }

                            if (isContingency)
                                SendMailMessage(job.KeyCode, ListTo, ListFrom, Subject, "Geneva SOAP call succeeded.");

                            try
                            {
                                webServ.ShutdownCallableSession(runrepSessionID);
                                log.InfoFormat(job.KeyCode, "Shut down SOAP session OK. [Runrep ID: {0}]", runrepSessionID);
                            }
                            catch (Exception ex)
                            {
                                retval = -1;
                                log.ErrorFormat(job.KeyCode, "Error shutting down SOAP session: {0} [Runrep ID: {1}]", ex, runrepSessionID);
                            }

                            ifRetry = false;
                        }
                    }
                    catch (Exception ex)
                    {
                        try
                        {
                            webServ.ShutdownCallableSession(runrepSessionID);
                            retval = -1;
                            log.InfoFormat(job.KeyCode, "Shut down SOAP session OK {0}.", runrepSessionID);
                        }
                        catch (Exception exx)
                        {
                            log.WarnFormat(job.KeyCode, "Error shutting down SOAP session: {0} [Runrep ID: {1}]", exx, runrepSessionID);
                        }

                        log.ErrorFormat(job.KeyCode, "Error encountered in SOAP report: {0}", ex);

                        if (DateTime.Now.CompareTo(runStartTime.AddMinutes(minutesSoapRetry)) < 0)
                        {
                            isContingency = true;
                            runrepSessionID = String.Empty;
                            ifRetry = ifOverrideSoapErrorRetry ? false : true;
                            if (!ListTo.Equals(String.Empty))
                                SendMailMessage(job.KeyCode, ListTo, ListFrom, Subject, ex.ToString());
                            retval = -1;
                            Thread.Sleep(60000);
                        }
                        else
                        {
                            log.ErrorFormat(job.KeyCode, "Geneva SOAP call timed out. Giving up now.");
                            SendMailMessage(job.KeyCode, ListTo, ListFrom, Subject, "Geneva SOAP call timed out. Giving up now.");
                            retval = -99;
                            ifRetry = false;
                        }
                    }
                }

                if (results != null)
                {
                    if (!ifUseAddendumErrorsOnly)
                        dtOut = ConvertToDataTable(tableName, results);
                    else
                        dtOut = getAddendumErrors(tableName, results);
                }

                if (dtOut != null && dtOut.Rows.Count > 0)
                    log.InfoFormat(job.KeyCode, "Obtained {0} records from SOAP service call.", dtOut.Rows.Count);
                else
                    log.InfoFormat(job.KeyCode, "Obtained no records from SOAP service call.");

                if (dtOut != null)
                {
                    AddToOutputs(this.Name, dtOut);
                    AddToOutputs("RunDate", RunDate);
                }
            }
            catch (Exception ex)
            {
                log.Error(job.KeyCode, ex);
                retval = -99;
            }            

            hpt.Stop();

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o);
            log.InfoFormat(job.KeyCode, "GenevaSoapReport [{0}] completed in {1} seconds.", Name, hpt.Duration);

            return retval;
        }
Ejemplo n.º 48
0
        public override int Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat("Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            
            int retval = 0;
            double duration = 0;

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o);

            if (inputData.Count > 0)
            {
                PerfTimer hpt = new PerfTimer();
                hpt.Start();

                if (IfResetOnEachRun)
                    ResetOutput();

                DataTable dtOut = new DataTable();

                try
                {
                    log.InfoFormat("Setting up Geneva SOAP service call.");

                    string runrepSessionID = "";
                    Service webServ = new Service();
                    webServ.Url = Settings.Default.GenevaSoapUpdate_GenevaSoap_Service;

                    try
                    {
                        runrepSessionID = webServ.StartCallableLoader(
                            Settings.Default.Geneva_Port,
                            Settings.Default.Geneva_HostName,
                            Settings.Default.Geneva_Uid,
                            Settings.Default.Geneva_Password
                            );
                    }
                    catch (Exception ex)
                    {
                        log.Error(ex);
                    }

                    Hashtable transforms = GetTransforms();

                    XmlDocument sourceXdoc = new XmlDocument();
                    XmlDocument targetXdoc = new XmlDocument();

                    if (InputToProcess.CompareTo(String.Empty) != 0)
                        sourceXdoc = (XmlDocument)((Hashtable)inputData)[InputToProcess];
                    else
                        sourceXdoc = (XmlDocument)((Hashtable)inputData)[0];

                    if (sourceXdoc.DocumentElement.FirstChild.Name.CompareTo("InvestmentRecords") == 0)
                        sourceXdoc.InnerXml = sourceXdoc.InnerXml.Replace("http://www.advent.com/SchemaRevLevel248/Geneva", "http://www.advent.com/SchemaRevLevel371/Geneva");

                    XmlNode targetFC = sourceXdoc.FirstChild.CloneNode(true);
                    XmlNode newFC = targetXdoc.ImportNode(targetFC, true);
                    targetXdoc.AppendChild(newFC);
                    targetXdoc.DocumentElement.FirstChild.RemoveAll();

                    recCountTotal = sourceXdoc.FirstChild.FirstChild.ChildNodes.Count;

                    foreach (XmlNode investmentNode in sourceXdoc.FirstChild.FirstChild.ChildNodes)
                    {
                        string ticker = String.Empty;
                        string desc = String.Empty;
                        string exchCode = String.Empty;

                        string loaderAction = String.Empty;
                        string assetType = String.Empty;
                        foreach (XmlNode node in investmentNode.ChildNodes)
                        {
                            if (node.Name.CompareTo("AssetType") == 0)
                            {
                                loaderAction = String.Format("{0}_InsertUpdate", node.InnerXml);
                                assetType = node.InnerXml;
                                break;
                            }
                        }

                        //bail on null asset type
                        if (assetType.CompareTo(String.Empty) == 0) continue;

                        XmlNode newInvestmentNode = targetXdoc.CreateElement(loaderAction);

                        foreach (XmlNode node in investmentNode.ChildNodes)
                        {
                            if (transforms.ContainsKey(node.Name))
                            {
                                string[] newTags = transforms[node.Name].ToString().Split(',');
                                foreach (string targetTag in newTags)
                                {
                                    //reassignments
                                    if (node.Name.CompareTo("TICKER") == 0)
                                        ticker = node.InnerXml;
                                    else if (node.Name.CompareTo("NAME") == 0 && assetType.ToUpper().CompareTo("EQUITY") == 0)
                                        desc = node.InnerXml;
                                    else if (node.Name.CompareTo("EXCH_CODE") == 0)
                                        exchCode = node.InnerXml;
                                    else if (node.Name.CompareTo("SECURITY_DES") == 0 && assetType.ToUpper().CompareTo("OPTION") == 0)
                                        desc = node.InnerXml;
                                    else if (node.Name.CompareTo("OPT_MULTIPLIER") == 0 && assetType.ToUpper().CompareTo("EQUITY") == 0)
                                        node.InnerXml = "1";
                                    else if (node.Name.CompareTo("OPT_PUT_CALL") == 0 && node.InnerXml.CompareTo(String.Empty) != 0)
                                        node.InnerXml = node.InnerXml.CompareTo("Call") == 0 ? "0" : "1";
                                    else if (node.Name.CompareTo("OPT_UNDL_TICKER") == 0 && assetType.ToUpper().CompareTo("OPTION") == 0)
                                        node.InnerXml = node.InnerXml.Replace(" US", "");
                                    else if (node.Name.CompareTo("OPT_UNDL_TICKER") == 0 && assetType.ToUpper().CompareTo("EQUITY") == 0)
                                        continue;
                                    else if (node.Name.CompareTo("OPT_EXPIRE_DT") == 0)
                                    {
                                        try
                                        {
                                            DateTime dt = Convert.ToDateTime(node.InnerXml);
                                            node.InnerXml = dt.ToString("yyyy-MM-ddTHH:mm:ss");
                                        }
                                        catch (Exception ex)
                                        {
                                            log.Warn(ex);
                                        }
                                    }

                                    //nodes
                                    if (node.InnerXml.CompareTo(String.Empty) != 0)
                                    {
                                        XmlNode newNode = targetXdoc.CreateElement(targetTag);

                                        switch (node.Name)
                                        {
                                            case "NAME":
                                            case "SECURITY_DES":
                                                newNode.InnerXml = desc;
                                                break;
                                            default:
                                                newNode.InnerXml = node.InnerXml;
                                                break;
                                        }

                                        newInvestmentNode.AppendChild(newNode);
                                    }
                                }
                            }
                        }

                        #region Calculated/Assigned Geneva Fields

                        switch (assetType.ToUpper())
                        {
                            case "EQUITY":

                                XmlNode settleDaysNodeEQ = targetXdoc.CreateElement("SettleDays");
                                settleDaysNodeEQ.InnerXml = "3";
                                newInvestmentNode.AppendChild(settleDaysNodeEQ);

                                XmlNode quantityPrecisionNodeEQ = targetXdoc.CreateElement("QuantityPrecision");
                                quantityPrecisionNodeEQ.InnerXml = "2";
                                newInvestmentNode.AppendChild(quantityPrecisionNodeEQ);

                                XmlNode pricingPrecisionNodeEQ = targetXdoc.CreateElement("PricingPrecision");
                                pricingPrecisionNodeEQ.InnerXml = "2";
                                newInvestmentNode.AppendChild(pricingPrecisionNodeEQ);

                                XmlNode altKey1NodeEQ = targetXdoc.CreateElement("AltKey1");
                                altKey1NodeEQ.InnerXml = String.Format("{0} {1} Equity", ticker, exchCode);
                                newInvestmentNode.AppendChild(altKey1NodeEQ);

                                break;

                            case "OPTION":

                                XmlNode settleDaysNodeOP = targetXdoc.CreateElement("SettleDays");
                                settleDaysNodeOP.InnerXml = "1";
                                newInvestmentNode.AppendChild(settleDaysNodeOP);

                                XmlNode quantityPrecisionNodeOP = targetXdoc.CreateElement("QuantityPrecision");
                                quantityPrecisionNodeOP.InnerXml = "3";
                                newInvestmentNode.AppendChild(quantityPrecisionNodeOP);

                                XmlNode pricingPrecisionNodeOP = targetXdoc.CreateElement("PricingPrecision");
                                pricingPrecisionNodeOP.InnerXml = "3";
                                newInvestmentNode.AppendChild(pricingPrecisionNodeOP);

                                XmlNode altKey1NodeOP = targetXdoc.CreateElement("AltKey1");
                                altKey1NodeOP.InnerXml = String.Format("{0} Equity", ticker);
                                newInvestmentNode.AppendChild(altKey1NodeOP);

                                break;

                            default:

                                break;
                        }

                        XmlNode codeNode = targetXdoc.CreateElement("Code");
                        codeNode.InnerXml = ticker;
                        newInvestmentNode.AppendChild(codeNode);

                        XmlNode pricingFactorNode = targetXdoc.CreateElement("PricingFactor");
                        pricingFactorNode.InnerXml = "1";
                        newInvestmentNode.AppendChild(pricingFactorNode);

                        XmlNode secEligibleFlagNode = targetXdoc.CreateElement("SecEligibleFlag");
                        secEligibleFlagNode.InnerXml = "1";
                        newInvestmentNode.AppendChild(secEligibleFlagNode);

                        XmlNode secFeeScheduleNode = targetXdoc.CreateElement("SecFeeSchedule");
                        secFeeScheduleNode.InnerXml = "Default";
                        newInvestmentNode.AppendChild(secFeeScheduleNode);

                        #endregion

                        targetXdoc.DocumentElement.FirstChild.AppendChild(newInvestmentNode);
                        recCountSuccess++;
                    }

                    string flags = "-x";

                    try
                    {
                        //loaderResultsStruct loaderReturn = webServ.RunCallableLoader(runrepSessionID, targetXdoc.InnerXml.ToString(), flags);                    
                    }
                    catch (Exception ex)
                    {
                        log.Warn(ex);
                    }

                    try
                    {
                        webServ.ShutdownCallableSession(runrepSessionID);
                    }
                    catch (Exception ex)
                    {
                        log.Warn(ex);
                    }

                    AddToOutputs(this.Name, targetXdoc);
                }
                catch (Exception ex)
                {
                    log.ErrorFormat("Error : {0}", ex);
                    retval = -1;
                }

                if (dtOut.Rows.Count > 0)
                    AddToOutputs(this.Name, dtOut);

                hpt.Stop();
                duration = hpt.Duration;
            }

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.DoneSuccess, "", (State)o );
            UpdateRecordCount(activityIdEnding, recCountTotal, recCountSuccess, recCountFailed);

            log.InfoFormat("GenevaSoapSelect {0} processed {1} of {2} records in {1} seconds.", Name, recCountSuccess, recCountTotal, duration);

            return retval;
        }
Ejemplo n.º 49
0
        public override int Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat(job.KeyCode, "Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            int retval = 0;

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            int activityIdStarting = UpdateProcessStatus(Enums.ProcessStatus.Starting, "", (State)o );

            if (IfResetOnEachRun)
                ResetOutput();

            PassAlongOutputs(inputData);


            try
            {
                DataService dataService = GetDataService(job.KeyCode);
            }
            catch (Exception ex)
            {
                log.ErrorFormat(job.KeyCode, "Error : {0}", ex);
                retval = -99;
            }

            hpt.Stop();

            int activityIdEnding = UpdateProcessStatus(Enums.ProcessStatus.Success, "", (State)o );

            //log.InfoFormat(job.KeyCode, "DataTableAggregate {0} aggregated {1} records in {2} seconds.", Name, numrecs, hpt.Duration);

            return retval;
        }
Ejemplo n.º 50
0
        public override int Execute(Object o, Hashtable inputData)
        {
            log.InfoFormat("Module {0} received {1} inputs.", name, inputData != null ? inputData.Count.ToString() : "no");
            int retval = 0;

            PerfTimer hpt = new PerfTimer();
            hpt.Start();

            if (IfResetOnEachRun)
                ResetOutput();

            int numrecs=0;
            string[] outputFields = DisplayFields.Split(';');
            string[] outputSumFields = SumFields.Split(';');

            try
            {
                foreach (Object oIn in inputData)
                {
                    DataTable dt = oIn as DataTable;
        
                    if (dt != null)
                    {
                        numrecs += dt.Rows.Count;

                        var query = 
                            from dr in dt.AsEnumerable()
                            group dr by new {
                                tradeDate = dr.Field<DateTime>("TradeDate"),
                                dataSource = dr.Field<string>("DataSource"),
                                tradeType = dr.Field<string>("TradeType"),
                                tradeStatus = dr.Field<string>("TradeStatus"),
                                symbol = dr.Field<string>("Symbol"),
                                portfolioName = dr.Field<string>("PortfolioName"),
                                accountId = dr.Field<int>("AccountId"),
                                broker = dr.Field<string>("Broker"),
                                brokerAccount = dr.Field<string>("BrokerAccount"),
                                currency = dr.Field<string>("Currency"),
                                side = dr.Field<string>("Side")
                            } into d
                            let sumSignedQuantity = d.Sum(dr => dr.Field<decimal>("SignedQuantity"))
                            let avgPrice = d.Average(dr => dr.Field<decimal>("Price"))
                            let sumAmount = d.Sum(dr => dr.Field<decimal>("Amount"))
                            let sumCommission1 = d.Sum(dr => dr.Field<decimal>("Commission1"))
                            let sumCommission2 = d.Sum(dr => dr.Field<decimal>("Commission2"))
                            let sumFee1 = d.Sum(dr => dr.Field<decimal>("Fee1"))
                            let sumFee2 = d.Sum(dr => dr.Field<decimal>("Fee2"))
                            let sumNetAmount = d.Sum(dr => dr.Field<decimal>("NetAmount"))
                            let avgFxRate = d.Average(dr => dr.Field<decimal>("FxRate"))
                            let sumNetAmountUSD = d.Sum(dr => dr.Field<decimal>("NetAmountUSd"))
                            select new { d, 
                                sumSignedQuantity,
                                avgPrice,
                                sumAmount,
                                sumCommission1,
                                sumCommission2,
                                sumFee1,
                                sumFee2,
                                sumNetAmount,
                                avgFxRate,
                                sumNetAmountUSD 
                            };

                        DataTable dtOut = new DataTable();

                        foreach (string ss in outputFields)
                            dtOut.Columns.Add(new DataColumn(ss));
                        foreach (string ss in outputSumFields)
                            dtOut.Columns.Add(new DataColumn(ss));

                        foreach (var v in query)
                        {
                            DataRow dr = dtOut.NewRow();

                            dr["TradeDate"] = v.d.Key.tradeDate ;
                            dr["DataSource"] = v.d.Key.dataSource ;
                            dr["TradeType"] = v.d.Key.tradeType ;
                            dr["TradeStatus"] = v.d.Key.tradeStatus ;
                            dr["Symbol"] = v.d.Key.symbol ;
                            dr["PortfolioName"] = v.d.Key.portfolioName ;
                            dr["AccountId"] = v.d.Key.accountId ;
                            dr["Broker"] = v.d.Key.broker ;
                            dr["brokerAccount"] = v.d.Key.brokerAccount ;
                            dr["Currency"] = v.d.Key.currency ;
                            dr["Side"] = v.d.Key.side ;

                            dr["SignedQuantity"] = v.sumSignedQuantity;
                            dr["Price"] = v.sumSignedQuantity;
                            dr["Amount"] = v.sumSignedQuantity;
                            dr["Commission1"] = v.sumSignedQuantity;
                            dr["Commission2"] = v.sumSignedQuantity;
                            dr["Fee1"] = v.sumSignedQuantity;
                            dr["Fee2"] = v.sumSignedQuantity;
                            dr["NetAmount"] = v.sumSignedQuantity;
                            dr["FxRate"] = v.sumSignedQuantity;
                            dr["NetAmountUSd"] = v.sumSignedQuantity;

                            dtOut.Rows.Add(dr);
                            dtOut.AcceptChanges();
                        }

                        AddToOutputs(this.Name, dtOut);
                    }
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat("Error : {0}", ex);
                retval = -1;
            }

            hpt.Stop();

            log.InfoFormat("DataTableAggregate {0} aggregated {1} records in {2} seconds.", Name, numrecs, hpt.Duration);

            return retval;
        }
Ejemplo n.º 51
0
        internal Task Activate(JasperRuntime runtime, GenerationRules generation, PerfTimer timer)
        {
            var activator = timer.Record("Building ServiceBusActivator", runtime.Get <MessagingRoot>);

            return(activator.Activate(LocalWorker, Capabilities, runtime, generation, timer));
        }
Ejemplo n.º 52
0
    //// Main Logic for each boids movement
    float2 BoidLogic(int i, ref Boid boid)
    {
        float SenseCosTheta = math.cos(math.radians(SenseAngle));

        float radius       = SenseRadius * boid.size;
        float avoidfalloff = 1f / boid.size;

        float2 avoidAvg = 0;

        float2 alignAvg   = 0;
        int    alignCount = 0;

        float2 centerAvg   = 0;
        int    centerCount = 0;

        var timer = PerfTimer.Start();

        for (int j = 0; j < boids.Count; ++j)
        {
            if (i == j)
            {
                continue;
            }
            var other = boids[j];

                        #if false
            float2 offs = other.pos - boid.pos;
            float  dist = length(offs);
            float2 dir  = dist != 0 ? offs / dist : 0;

            if (dist > radius || dot(boid.forward, dir) < SenseCosTheta)
            {
                continue;
            }
                        #else
            // perf optimization (filter out other boids while avoiding sqrt

            float2 offs = other.pos - boid.pos;

            float distsq = lengthsq(offs);
            if (distsq > radius * radius)
            {
                continue;
            }

            float  dist = sqrt(distsq);
            float2 dir  = dist != 0 ? offs / dist : 0;

            if (dot(boid.forward, dir) < SenseCosTheta)
            {
                continue;
            }
                        #endif

            float sensitivity = (1 - dist / radius);             // inverse square falloff of sensitivity
            sensitivity *= sensitivity;

                        #if false
            if (dist <= avoidradius)
            {
                float d = dist / avoidradius;                 // strong falloff

                float stren = 1f / (d + 0.2f) - 0.83f;

                avoidAvg += -dir * stren;
            }
                        #else
            float d  = avoidfalloff * dist + 0.5f;
            float d2 = d * d;
            float d4 = d2 * d2;

            float stren = AvoidStrength / d4;

            avoidAvg += dir * stren;
                        #endif

            alignAvg += (other.vel - boid.vel) * sensitivity;
            alignCount++;

            centerAvg += offs * sensitivity;
            centerCount++;
        }

        innerloop_time += timer.End() / boids.Count;

        if (alignCount != 0)
        {
            alignAvg /= alignCount;
        }
        if (centerCount != 0)
        {
            centerAvg /= centerCount;
        }

        float accelBudget = BoidManeuverBudget;

        float2 avoid  = -avoidAvg * BoidManeuverBudget;
        float2 align  = alignAvg * AlignStrength * BoidManeuverBudget;
        float2 center = centerAvg * CenterStrength * BoidManeuverBudget;

        float avoidMag = min(length(avoid), accelBudget);
        accelBudget -= avoidMag;

        float alignMag = min(length(align), accelBudget);
        accelBudget -= alignMag;

        float centerMag = min(length(center), accelBudget);
        accelBudget -= centerMag;

        avoid  = normalizesafe(avoid) * avoidMag;
        align  = normalizesafe(align) * alignMag;
        center = normalizesafe(center) * centerMag;

        boid.avoid  = avoid;
        boid.align  = align;
        boid.center = center;

        return(avoid + align + center);
    }