public ActivationDiagnostics() { Timer = new PerfTimer(); _log = new LoggingSession(Timer); }
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; }
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); }
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; } } }
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); }
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; } } } }
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>); }
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(); }
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); }
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; }
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); }
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; }
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; }
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; }
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/><{1}>{2}</{1}>", 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; }
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; }
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; }
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; }
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; }
internal void Compile(GenerationRules generation, JasperRuntime runtime, PerfTimer timer) { _generation = generation; _container = runtime.Container; }
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; }
public LightweightJasperStartup(JasperRuntime runtime, PerfTimer timer, Task handlerCompilation) { _runtime = runtime; _timer = timer; _handlerCompilation = handlerCompilation; }
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); }
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(); } }
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; }
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; }
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; }
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; }
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); }
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; }
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; }
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); }
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); }
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; }
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; }
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(); }
public Container(IServiceCollection services, PerfTimer timer) : base(services, timer) { }
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; }
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; }
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; } } }
internal void Compile(JasperGenerationRules generation, JasperRuntime runtime, PerfTimer timer) { _generation = generation; _container = runtime.Container; var forwarders = runtime.Get <Forwarders>(); AddForwarders(forwarders); }
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; }
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; }
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; }
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; }
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; }
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)); }
//// 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); }