Example #1
0
 public void TestMDSBloomberg()
 {
     // test basic start, request snapshot, and stop functions
     // - create a MDS client with direct connection to provider
     using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true)))
     {
         IModuleInfo clientInfo = new V131ModuleInfo(new V131ClientInfo());
         using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv(BuildConst.BuildEnv).Create())
         {
             const string curveName  = "Orion.V5r3.Configuration.PricingStructures.QR_LIVE.RateCurve.AUD-BBR-BBSW-3M";
             ICoreItem    marketItem = client.LoadItem <Market>(curveName);
             if (marketItem == null)
             {
                 throw new ApplicationException("Market '" + curveName + "' not found!");
             }
             var market = (Market)marketItem.Data;
             //PricingStructure ps = market.Items[0];
             PricingStructureValuation psv            = market.Items1[0];
             QuotedAssetSet            quotedAssetSet = ((YieldCurveValuation)psv).inputs;
             using (IMarketDataClient mdc = new MarketDataRealtimeClient(
                        loggerRef, null, client,
                        MDSProviderId.Bloomberg))//MDSProviderId.GlobalIB
             {
                 QuotedAssetSet data = mdc.GetMarketQuotes(
                     MDSProviderId.Bloomberg, clientInfo, Guid.NewGuid(), true,
                     null,
                     quotedAssetSet).Result;
                 Assert.IsNotNull(data);
             }
         }
     }
 }
Example #2
0
 public void TestMutationDetection()
 {
     // tests the object mutation detector
     using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true)))
     {
         using (CoreServer server = new CoreServer(loggerRef, "UTT", NodeType.Router))
         {
             // start server
             server.Start();
             using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv("UTT").Create())
             {
                 // create reference object
                 TestData data0 = new TestData("Zero", 0);
                 client.SaveObject(data0, "Item0", null);
                 ICoreItem item = client.LoadItem <TestData>("Item0");
                 string    text = item.Text;
                 TestData  data = item.GetData <TestData>(false);
                 // - assert not mutated
                 Assert.AreEqual(text, XmlSerializerHelper.SerializeToString(item.GetData <TestData>(false)));
                 // - mutate the object
                 data.field1 = "One";
                 data.field2 = 1;
                 // - assert mutated
                 Assert.AreNotEqual(text, XmlSerializerHelper.SerializeToString(item.GetData <TestData>(false)));
             }
             // shutdown
             server.Stop();
         }
     }
 }
Example #3
0
        /// <summary>
        /// Application start
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ApplicationStart(object sender, EventArgs e)
        {
            const string fullAppName = "FpML.V5r3.PublisherWebService";

            LoggerRef.Target.LogInfo("Starting up...");
            try
            {
                //var stopwatch = new Stopwatch();
                //stopwatch.Start();
                CoreClientFactory factory = new CoreClientFactory(LoggerRef)
                                            .SetEnv("DEV")
                                            .SetApplication(Assembly.GetExecutingAssembly())
                                            .SetProtocols(WcfConst.AllProtocolsStr);
                _client = factory.SetServers("localhost").Create();
                _cache  = _client.CreateCache();
                //LoadConfigDataHelper.LoadConfigurationData(LogRef.Target, _Cache);//TODO get rid of this
                //stopwatch.Stop();
                //Debug.Print("Initialized test environment, in {0} seconds", stopwatch.Elapsed.TotalSeconds);
                LoggerRef.Target.LogInfo("Loaded..." + fullAppName);
            }
            catch (Exception excp)
            {
                LoggerRef.Target.Log(excp);
            }
        }
 private void StartUp()
 {
     _loggerRef.Target.Clear();
     ClearTree();
     try
     {
         CoreClientFactory factory = new CoreClientFactory(_loggerRef)
                                     .SetEnv(cbEnvId.Text)
                                     .SetApplication(Assembly.GetExecutingAssembly())
                                     .SetProtocols(WcfConst.AllProtocolsStr);
         if (rbDefaultServers.Checked)
         {
             _client = factory.Create();
         }
         else if (rbLocalhost.Checked)
         {
             _client = factory.SetServers("localhost").Create();
         }
         else
         {
             _client = factory.SetServers(txtSpecificServers.Text).Create();
         }
         _syncContext.Post(OnClientStateChange, new CoreStateChange(CoreStateEnum.Initial, _client.CoreState));
         _client.OnStateChange += _Client_OnStateChange;
     }
     catch (Exception excp)
     {
         _loggerRef.Target.Log(excp);
     }
 }
Example #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TradeQuery"/> class.
        /// </summary>
        public TradeQuery(ILogger logger)
        {
            var logRef = Reference <ILogger> .Create(logger);

            try
            {
                CoreClientFactory factory = new CoreClientFactory(logRef)
                                            .SetEnv(BuildEnv.ToString())
                                            .SetApplication(Assembly.GetExecutingAssembly())
                                            .SetProtocols(WcfConst.AllProtocolsStr);
                //if (rbDefaultServers.Checked)
                //    _Client = factory.Create();
                //else if (rbLocalhost.Checked)
                var client = factory.SetServers("localhost").Create();
                _cache = client.CreateCache();
                //else
                //    _Client = factory.SetServers(txtSpecificServers.Text).Create();
                //_SyncContext.Post(OnClientStateChange, new CoreStateChange(CoreStateEnum.Initial, _Client.CoreState));
                //_Client.OnStateChange += new CoreStateHandler(_Client_OnStateChange);
            }
            catch (Exception excp)
            {
                logRef.Target.Log(excp);
            }
        }
Example #6
0
        private void StartUp()
        {
            try
            {
                var factory = new CoreClientFactory(_loggerRef)
                              .SetEnv("Dev")
                              .SetApplication(Assembly.GetExecutingAssembly())
                              .SetProtocols(WcfConst.AllProtocolsStr)
                              .SetServers("localhost");
                var client = factory.Create();
                _clientRef = Reference <ICoreClient> .Create(client);

                _cache = _clientRef.Target.CreateCache();
                // init controls
                // - form title
                var env = _clientRef.Target.ClientInfo.ConfigEnv;
                Text += String.Format(" ({0})", EnvHelper.EnvName(env));
                // - server port
                int defaultPort = EnvHelper.SvcPort(env, SvcId.GridSwitch);
                chkChangePort.Text = String.Format("Change server port from default ({0}) to:", defaultPort);
                _syncContext.Post(OnClientStateChange, new CoreStateChange(CoreStateEnum.Initial, _clientRef.Target.CoreState));
                _clientRef.Target.OnStateChange += _Client_OnStateChange;
            }
            catch (Exception excp)
            {
                _loggerRef.Target.Log(excp);
            }
        }
 /// <summary>
 /// Generic constructor
 /// </summary>
 /// <param name="loggerRef"></param>
 /// <param name="cache"></param>
 /// <param name="nameSpace"></param>
 public PricingStructures(Reference <ILogger> loggerRef, ICoreCache cache, string nameSpace)
 {
     Logger    = loggerRef;
     NameSpace = nameSpace;
     if (cache != null)
     {
         Cache = cache;
     }
     else if (Cache == null)
     {
         try
         {
             CoreClientFactory factory = new CoreClientFactory(Logger)
                                         .SetEnv(BuildEnv.ToString())
                                         .SetApplication(Assembly.GetExecutingAssembly())
                                         .SetProtocols(WcfConst.AllProtocolsStr)
                                         .SetServers("localhost");
             Cache = factory.Create();
         }
         catch (Exception excp)
         {
             Logger.Target.Log(excp);
         }
     }
 }
        // This method used to connect to Core API with creds from current active seesion
        public static ICoreClient GetDefaultCoreClient(CoreConnectionCredentials coreCredentials)
        {
            var coreClientFactory = new CoreClientFactory();

            var coreClient = coreClientFactory.Create(CreateApiUri(coreCredentials.Hostname, coreCredentials.Port));
            coreClient.UseDefaultCredentials();

            return coreClient;
        }
        // This method is used to connect to Core API with specific credentials
        public static ICoreClient GetFullCoreClient(CoreConnectionCredentials coreCredentials)
        {
            var networkCreds = new NetworkCredential(coreCredentials.Username, coreCredentials.Password);
            var factory = new CoreClientFactory();
            var coreClient = factory.Create(CreateApiUri(coreCredentials.Hostname, coreCredentials.Port));
            coreClient.UseSpecificCredentials(networkCreds);

            return coreClient;
        }
Example #10
0
        // This method used to connect to Core API with creds from current active seesion
        public static ICoreClient GetDefaultCoreClient(string host, int port)
        {
            var coreClientFactory = new CoreClientFactory();

            var coreClient = coreClientFactory.Create(CreateApiUri(host, port));
            coreClient.UseDefaultCredentials();

            return coreClient;
        }
Example #11
0
        // This method is used to connect to Core API with specific credentials
        public static ICoreClient GetFullCoreClient(string host, int port, string username, string password)
        {
            var networkCreds = new NetworkCredential(username, password);
            var factory = new CoreClientFactory();
            var coreClient = factory.Create(CreateApiUri(host, port));
            coreClient.UseSpecificCredentials(networkCreds);

            return coreClient;
        }
Example #12
0
        public void TestBasicEncryption()
        {
            // tests key creation and exchange
            // - between 2 clients
            using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true)))
            {
                using (CoreServer server = new CoreServer(loggerRef, "UTT", NodeType.Router))
                {
                    server.Start();

                    using (ICoreClient sender = new CoreClientFactory(loggerRef).SetEnv("UTT").Create())
                        using (ICoreClient recver = new CoreClientFactory(loggerRef).SetEnv("UTT").Create())
                        {
                            // check un-encrypted traffic
                            Guid evtId1 = sender.SaveObject <TestData>(new TestData("1", 1), "test", null, TimeSpan.MaxValue);

                            List <ICoreItem> recdList1 = recver.LoadItems <TestData>(Expr.ALL);
                            Assert.AreEqual <int>(1, recdList1.Count);
                            ICoreItem recdItem1 = recdList1[0];
                            Assert.AreEqual <Guid>(evtId1, recdItem1.Id);
                            Assert.IsNull(recdItem1.TranspKeyId);
                            Assert.IsNull(recdItem1.SenderKeyId);
                            Assert.IsNull(recdItem1.RecverKeyId);

                            // generate keys
                            string senderKeyId = sender.CryptoManager.GenerateNewKeys();
                            string recverKeyId = recver.CryptoManager.GenerateNewKeys();

                            // send encrypted message and check receiver fails to decrypt
                            ICoreItem sentItem2 = sender.MakeObject <TestData>(new TestData("2", 2), "test", null);
                            sentItem2.TranspKeyId = senderKeyId;
                            sentItem2.SenderKeyId = senderKeyId;
                            Guid             evtId2    = sender.SaveItem(sentItem2);
                            List <ICoreItem> recdList2 = recver.LoadItems <TestData>(Expr.ALL);
                            Assert.AreEqual <int>(1, recdList2.Count);
                            ICoreItem recdItem2 = recdList2[0];
                            Assert.AreEqual <Guid>(evtId2, recdItem2.Id);
                            Assert.AreEqual <Guid>(evtId2, recdItem2.Id);
                            Assert.AreEqual <string>(senderKeyId, recdItem2.TranspKeyId);
                            Assert.AreEqual <string>(senderKeyId, recdItem2.SenderKeyId);
                            Assert.IsNull(recver.CryptoManager.GetTranspKey(senderKeyId));
                            // set public key at receiver and check authentication
                            recver.CryptoManager.SetPublicKey(senderKeyId, sender.CryptoManager.GetPublicKey(senderKeyId));
                            Assert.IsTrue(recdItem2.IsSigned);
                            Assert.IsFalse(recdItem2.IsSecret);
                            // set transport key at receiver and recheck decryption
                            recver.CryptoManager.SetTranspKey(senderKeyId, sender.CryptoManager.GetTranspKey(senderKeyId));
                            object data2 = recdItem2.Data;
                            Assert.IsNotNull(data2);
                            Assert.AreEqual <Type>(typeof(TestData), data2.GetType());
                        }

                    server.Stop();
                }
            }
        }
Example #13
0
 public void TestSerialisingInterfaceTypes()
 {
     // tests control of the serialisation type
     // - interface types
     using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true)))
     {
         using (CoreServer server = new CoreServer(loggerRef, "UTT", NodeType.Router))
         {
             // start server
             server.Start();
             using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv("UTT").Create())
             {
                 AssetMeasureValue codeValueInstance = new AssetMeasureValue()
                 {
                     Code        = "Test",
                     Description = "This is a test",
                     Source      = "UnitTest"
                 };
                 IFpMLCodeValue codeValueInterface = codeValueInstance;
                 // save reference item
                 client.SaveObject(codeValueInstance, "Test0", null, TimeSpan.MaxValue);
                 ICoreItem itemA = client.LoadItem("Test0");
                 Assert.AreEqual(typeof(AssetMeasureValue).FullName, itemA.DataTypeName);
                 // test interface and instance both serialise identically
                 {
                     client.SaveUntypedObject(codeValueInterface, "Test1", null);
                     ICoreItem itemB = client.LoadItem("Test1");
                     Assert.AreEqual(typeof(AssetMeasureValue).FullName, itemB.DataTypeName);
                     Assert.AreEqual(itemA.Text, itemB.Text);
                 }
                 {
                     client.SaveObject((AssetMeasureValue)codeValueInterface, "Test2", null, TimeSpan.MaxValue);
                     ICoreItem itemB = client.LoadItem("Test2");
                     Assert.AreEqual(typeof(AssetMeasureValue).FullName, itemB.DataTypeName);
                     Assert.AreEqual(itemA.Text, itemB.Text);
                 }
                 {
                     // this should fail because interfaces cant be serialised
                     UnitTestHelper.AssertThrows <ArgumentException>("Cannot be an interface type!\r\nParameter name: dataType", () =>
                     {
                         client.SaveObject(codeValueInterface, "Test3", null, TimeSpan.MaxValue);
                     });
                 }
                 {
                     // note: this silently binds to SaveObject<IFpMLCodeValue>(...) which should fail
                     UnitTestHelper.AssertThrows <ArgumentException>("Cannot be an interface type!\r\nParameter name: dataType", () =>
                     {
                         client.SaveObject(codeValueInterface, "Test4", null, TimeSpan.MaxValue);
                     });
                 }
             }
             // shutdown
             server.Stop();
         }
     }
 }
Example #14
0
        private void Form1Load(object sender, EventArgs e)
        {
            _logRef = Reference <ILogger> .Create(new TextBoxLogger(txtLog));

            _factory = new CoreClientFactory(_logRef)
                       .SetEnv("DEV")
                       .SetApplication(Assembly.GetExecutingAssembly())
                       .SetProtocols(WcfConst.AllProtocolsStr)
                       .SetServers("localhost");
        }
Example #15
0
        // This method is used to connect to Core API with specific credentials
        private static ICoreClient GetFullCoreClient(CoreConnectionCredentials coreCredentials)
        {
            var networkCreds = new NetworkCredential(coreCredentials.Username, coreCredentials.Password);
            var factory      = new CoreClientFactory();
            var coreClient   = factory.Create(CreateApiUri(coreCredentials.Hostname, coreCredentials.Port));

            coreClient.UseSpecificCredentials(networkCreds);

            return(coreClient);
        }
Example #16
0
        // This method used to connect to Core API with creds from current active seesion
        public static ICoreClient GetDefaultCoreClient(CoreConnectionCredentials coreCredentials)
        {
            var coreClientFactory = new CoreClientFactory();

            var coreClient = coreClientFactory.Create(CreateApiUri(coreCredentials.Hostname, coreCredentials.Port));

            coreClient.UseDefaultCredentials();

            return(coreClient);
        }
Example #17
0
 private void button1_Click(object sender, EventArgs e)
 {
     using (ICoreClient client = new CoreClientFactory(_Logger).Create())
     {
         ServiceHostRulesLoader.Load(_Logger, client);
         FileImportRuleLoader.Load(_Logger, client);
         MarketDataConfigHelper.LoadProviderRules(_Logger, client);
         AlertRulesLoader.Load(_Logger, client);
         TradeImportRuleLoader.Load(_Logger, client);
     }
 }
        /// <summary>
        /// Simplest constructor
        /// </summary>
        public PricingStructures()
        {
            Logger = Reference <ILogger> .Create(new TraceLogger(true));

            NameSpace = EnvironmentProp.DefaultNameSpace;
            CoreClientFactory factory = new CoreClientFactory(Logger)
                                        .SetEnv(BuildEnv.ToString())
                                        .SetApplication(Assembly.GetExecutingAssembly())
                                        .SetProtocols(WcfConst.AllProtocolsStr)
                                        .SetServers("localhost");

            Cache = factory.Create();
        }
Example #19
0
        private void BtnDebugLoadAlertRulesClick(object sender, EventArgs e)
        {
            using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TextBoxLogger(txtDebugLog)))
            {
                loggerRef.Target.LogDebug("Loading alert rules...");

                using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv(BuildConst.BuildEnv).Create())
                {
                    // load test user details
                    //client.SaveObject<UserDetail>(MakeUserDetail(User_MLim2, "Mark Lim", "*****@*****.**"));
                    //client.SaveObject<UserDetail>(MakeUserDetail(User_SDudley, "Simon Dudley", "*****@*****.**"));
                    client.SaveObject(MakeUserDetail(AlertRule.UserDefaultReplyTo, "Default ReplyTo User", "*****@*****.**"));
                    client.SaveObject(MakeUserGroup(AlertRule.GroupDefaultMailTo, "Default MailTo Group", new[] { AlertRule.UserDefaultReplyTo }, null));
                    //client.SaveObject<UserGroup>(MakeUserGroup(Group_QDS_Developers, "QDS Developers Group", new string[] { User_SDudley, User_MLim2 }, null));
                    //client.SaveObject<UserGroup>(MakeUserGroup(Group_QDS_Developers, "QDS Developers Group", new string[] { User_SDudley }, null));

                    // defaults
                    // - check constraint: time of day is between 4:30am and 8:30pm 7 days a week
                    IExpression defaultCheckConstraint = Expr.BoolAND(
                        Expr.IsGEQ(Expr.DayOfWeek(Expr.FuncToday()), Expr.Const(DayOfWeek.Monday)),
                        Expr.IsLEQ(Expr.DayOfWeek(Expr.FuncToday()), Expr.Const(DayOfWeek.Friday)),
                        Expr.IsGEQ(Expr.FuncTimeOfDay(), Expr.Const(new TimeSpan(4, 30, 0))),
                        Expr.IsLEQ(Expr.FuncTimeOfDay(), Expr.Const(new TimeSpan(20, 30, 0))));
                    // - monitor period: every minute
                    TimeSpan defaultMonitorPeriod = TimeSpan.FromMinutes(1);
                    // - publish period: hourly
                    TimeSpan defaultPublishPeriod = TimeSpan.FromHours(1);

                    // build rules
                    var alertRules = new List <AlertRule>();

                    alertRules.AddRange(CreateDevRules(defaultCheckConstraint, defaultMonitorPeriod, defaultPublishPeriod));
                    //alertRules.AddRange(CreateSitRules(defaultCheckConstraint, defaultMonitorPeriod, defaultPublishPeriod));
                    //alertRules.AddRange(CreateStgRules(defaultCheckConstraint, defaultMonitorPeriod, defaultPublishPeriod));
                    //alertRules.AddRange(CreateLegacyRules(defaultCheckConstraint, defaultMonitorPeriod, defaultPublishPeriod));

                    // save Import rules
                    foreach (AlertRule rule in alertRules)
                    {
                        loggerRef.Target.LogDebug("  Loading AlertRule: {0}.{1}.{2} ({3})...", rule.HostEnvAbbr, rule.HostInstance, rule.RuleUniqueId, rule.Disabled ? "Disabled" : "Enabled");
                        TimeSpan lifetime = rule.Disabled ? TimeSpan.FromDays(30) : TimeSpan.MaxValue;
                        client.SaveObject(rule, lifetime);
                    }
                    loggerRef.Target.LogDebug("Loaded {0} alert rules.", alertRules.Count);
                }
            }
        }
Example #20
0
 public void TestSaveLoadPrivateCacheItems()
 {
     using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true)))
         using (CoreServer server = new CoreServer(loggerRef, "UTT", NodeType.Router))
         {
             server.Start();
             using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv("UTT").Create())
                 using (ICoreCache cacheA = client.CreateCache())
                 {
                     Guid id = cacheA.SavePrivateObject("data", "name1", null);
                     //ICoreItem item = cacheA.LoadPrivateItem<string>("name1");
                     ICoreItem item = cacheA.LoadItem <string>("name1");
                     string    data = (string)item.Data;
                     Assert.AreEqual <string>("data", data);
                 }
         }
 }
Example #21
0
        private void StartUp()
        {
            try
            {
                var factory = new CoreClientFactory(_loggerRef)
                              .SetEnv("Dev")
                              .SetApplication(Assembly.GetExecutingAssembly())
                              .SetProtocols(WcfConst.AllProtocolsStr)
                              .SetServers("localhost");
                var client = factory.Create();
                _clientRef = Reference <ICoreClient> .Create(client);

                _cache = _clientRef.Target.CreateCache();
                // init controls
                // - form title
                EnvId env = _clientRef.Target.ClientInfo.ConfigEnv;
                Text += String.Format(" ({0})", EnvHelper.EnvName(env));
                // - server port
                int defaultPort = EnvHelper.SvcPort(env, SvcId.GridSwitch);
                _qasDefViewHelper = new QASDefViewHelper();
                _qasDefDataHelper = new QASDefDataHelper();
                _qasDefFilters    = new ComboxBoxFilterGroup(panelQASDef, _qasDefViewHelper, QASDefSelectionChanged);
                _qasDefSelecter   = new QASDefSelecter(
                    _qasDefFilters, _qasDefViewHelper, _qasDefDataHelper);
                _qasDefView = new ListViewManager <RatesObj>(
                    _loggerRef.Target, lvQASDef, _qasDefViewHelper,
                    _qasDefSelecter, _qasDefFilters, new QASDefSorter(), _qasDefDataHelper);
                //Get the starting configuration
                //
                chkChangePort.Text = String.Format("Change server port from default ({0}) to:", defaultPort);
                //Set up the timer and the random number generator.
                //
                _timer = new System.Timers.Timer(10000);
                _rand  = new Random();
            }
            catch (Exception excp)
            {
                _loggerRef.Target.Log(excp);
            }
        }
Example #22
0
        static void Main(string[] args)
        {
            using (Reference <ILogger> logRef = Reference <ILogger> .Create(new ConsoleLogger("FpML.V5r3.ConfigDataLoader: ")))
            {
                logRef.Target.LogInfo("Running...");
                int exitCode = 0;
                try
                {
                    using (ICoreClient client = new CoreClientFactory(logRef).SetEnv("DEV").Create())
                    {
                        // delete 'old' configuration data in all environments greater than DEV
                        if (client.ClientInfo.ConfigEnv >= EnvId.SIT_SystemTest)
                        {
                            client.DeleteUntypedObjects(null, Expr.StartsWith(Expr.SysPropItemName, "Orion.FpML.V5r3.Configuration."));
                        }

                        // load configuration data
                        //AppSettingsLoader.Load(logRef.Target, client);
                        LoadConfigDataHelper.LoadConfigurationData(logRef.Target, client);
                        // done
                        logRef.Target.LogInfo("Success");
                    }
                }
                catch (Exception e)
                {
                    logRef.Target.Log(e);
                    for (int i = 0; i < args.Length; i++)
                    {
                        logRef.Target.LogDebug("  args[{0}]='{1}'", i, args[i]);
                    }
                    logRef.Target.LogInfo("FAILED");
                    exitCode = 2;
                }
                finally
                {
                    Environment.ExitCode = exitCode;
                }
            }
        }
Example #23
0
        public void TestRequestThrottling()
        {
            const int numberOfAsyncRequests = 1000;
            const int serverPort            = 9001;
            string    hostAddress           = $"localhost:{serverPort}";

            using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true)))
            {
                NamedValueSet serverSettings = new NamedValueSet();
                serverSettings.Set(CfgPropName.EnvName, "UTT");
                serverSettings.Set(CfgPropName.Port, serverPort);
                serverSettings.Set(CfgPropName.Endpoints, WcfConst.NetTcp);
                using (CoreServer server = new CoreServer(loggerRef, serverSettings))
                {
                    server.Start();
                    using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv("UTT").SetServers(hostAddress).Create())
                    {
                        List <IAsyncResult> completions = new List <IAsyncResult>();
                        try
                        {
                            for (int i = 0; i < numberOfAsyncRequests; i++)
                            {
                                completions.Add(client.SaveObjectBegin(new TestData("Test", i), "Test", null, false, TimeSpan.MaxValue));
                                //loggerRef.Target.LogDebug("[{0}] save begun...", i.ToString("0000"));
                            }
                        }
                        finally
                        {
                            for (int i = 0; i < numberOfAsyncRequests; i++)
                            {
                                client.SaveEnd(completions[i]);
                                //loggerRef.Target.LogDebug("[{0}] save done.", i.ToString("0000"));
                            }
                        }
                    }
                }
            }
        }
        public RuntimeEnvironment(string nameSpace)
        {
            NameSpace = nameSpace;
            string fullAppName = $"ExcelAPI-{ApplicationHelper.Diagnostics("FileVersion")}";

            try
            {
                //var stopwatch = new Stopwatch();
                LogRef = Reference <ILogger> .Create(new TraceLogger(true));

                //stopwatch.Start();
                CoreClientFactory factory = new CoreClientFactory(LogRef)
                                            .SetEnv("DEV")
                                            .SetApplication(Assembly.GetExecutingAssembly())
                                            .SetProtocols(WcfConst.AllProtocolsStr);
                _client = factory.SetServers("localhost").Create();
                Cache   = _client.CreateCache();
                Log(LogRef.Target, "Starting...", fullAppName, "StartUp");
            }
            catch (System.Exception excp)
            {
                LogRef.Target.Log(excp);
            }
        }
Example #25
0
        static void Main(string[] args)
        {
            Reference <ILogger> loggerRef = Reference <ILogger> .Create(new ConsoleLogger("TestWebMdc: "));

            loggerRef.Target.LogInfo("Running...");
            try
            {
                // get some market quotes from for a Highlander FX curve
                // and get a Highlander volatility matrix
                const string   curveName = "Orion.V5r3.Configuration.PricingStructures.QR_LIVE.FxCurve.AUD-USD";
                QuotedAssetSet quotedAssetSet;
                using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv(BuildConst.BuildEnv).Create())
                {
                    ICoreItem marketItem = client.LoadItem <Market>(curveName);
                    if (marketItem == null)
                    {
                        throw new ApplicationException("Market '" + curveName + "' not found!");
                    }
                    var market = (Market)marketItem.Data;
                    //PricingStructure ps = market.Items[0];
                    PricingStructureValuation psv = market.Items1[0];
                    var valuation = psv as YieldCurveValuation;
                    if (valuation != null)
                    {
                        quotedAssetSet = valuation.inputs;
                    }
                    else
                    {
                        var curveValuation = psv as FxCurveValuation;
                        if (curveValuation != null)
                        {
                            quotedAssetSet = new QuotedAssetSet
                            {
                                instrumentSet = curveValuation.spotRate.instrumentSet,
                                assetQuote    = curveValuation.spotRate.assetQuote
                            }
                        }
                        ;
                        else
                        {
                            throw new NotSupportedException("Unsupported PricingStructureValuation type: " + psv.GetType().Name);
                        }
                    }
                }
                //Copied from the working version
                const int port = 9123;
                // create MDS client
                using (IMarketDataClient mdc = MarketDataFactory.Create(loggerRef, null, "localhost:" + port.ToString(CultureInfo.InvariantCulture)))//This was null in the 3rd parameter.
                {
                    {
                        const MDSProviderId providerId = MDSProviderId.Bloomberg;
                        loggerRef.Target.LogInfo("----- {0} Market Quotes -----", providerId);
                        QuotedAssetSet quotes = mdc.GetMarketQuotes(
                            providerId, null, Guid.NewGuid(), true, null,
                            quotedAssetSet).Result;
                        LogResults(loggerRef.Target, quotes);
                    }
                    {
                        const MDSProviderId providerId = MDSProviderId.GlobalIB;
                        loggerRef.Target.LogInfo("----- {0} Volatility Matrix -----", providerId);
                        var matrixProps = new NamedValueSet();
                        matrixProps.Set("Function", "MarketData");
                        matrixProps.Set("Market", "EOD");
                        matrixProps.Set("CurveName", "AUD-Swap");
                        matrixProps.Set("PricingStructureType", "RateATMVolatilityMatrix");
                        QuotedAssetSet matrix = mdc.GetPricingStructure(
                            providerId, null, Guid.NewGuid(), true, null,
                            matrixProps).Result;
                        LogResults(loggerRef.Target, matrix);
                    }
                }
            }
            catch (Exception e)
            {
                loggerRef.Target.Log(e);
            }
            loggerRef.Target.LogInfo("Completed.");
            loggerRef.Target.LogInfo("Press ENTER to exit.");
            Console.ReadLine();
        }
Example #26
0
 public void TestManualRecovery()
 {
     // demonstrates how an application should use the client in its simplest (transient) mode:
     // - exceptions should be handled by the application;
     // - client must be disposed and recreated after an exception has occurred;
     // - subscriptions are not supported.
     //TimeSpan outageDuration = TimeSpan.FromMinutes(1);
     //TimeSpan requestTimeout = TimeSpan.FromSeconds(30);
     using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true)))
     {
         loggerRef.Target.LogDebug("----------> test commenced");
         // create unit test storage
         IStoreEngine unitTestStore = new UnitTestStoreEngine(loggerRef.Target);
         CoreServer   server        = null;
         try
         {
             var serverSettings = new NamedValueSet();
             serverSettings.Set(CfgPropName.NodeType, (int)NodeType.Server);
             serverSettings.Set(CfgPropName.EnvName, "UTT");
             server = new CoreServer(loggerRef, serverSettings)
             {
                 StoreEngine = unitTestStore
             };
             loggerRef.Target.LogDebug("----------> starting server");
             server.Start();
             // create 1st client and save object - should succeed
             Guid id1;
             using (ICoreClient client1 = new CoreClientFactory(loggerRef)
                                          .SetEnv("UTT")
                                          .Create())
             {
                 id1 = client1.SaveObject(new TestData("Test1", 1), "Test1", null, TimeSpan.MaxValue);
                 // stop server and begin save - should fail with timeout
                 loggerRef.Target.LogDebug("----------> stopping server");
                 server.Stop();
                 DisposeHelper.SafeDispose(ref server);
                 client1.RequestTimeout = TimeSpan.FromSeconds(10);
                 UnitTestHelper.AssertThrows <TimeoutException>(() =>
                 {
                     client1.SaveObject(new TestData("Test2a", 2), "Test2", null, TimeSpan.MaxValue);
                 });
                 // further use of client throws more timeout errors
                 UnitTestHelper.AssertThrows <TimeoutException>(() => { client1.LoadObject <TestData>("Test2a"); });
             }
             // create 2nd client - should fail to connect
             UnitTestHelper.AssertThrows <EndpointNotFoundException>("No server in list 'localhost:8113' found!", () =>
             {
                 using (ICoreClient client2 = new CoreClientFactory(loggerRef)
                                              .SetEnv("UTT")
                                              .Create())
                 {
                     client2.SaveObject <TestData>(new TestData("Test2b", 2), "Test2", null, TimeSpan.MaxValue);
                 }
             });
             // restart server
             server = new CoreServer(loggerRef, serverSettings)
             {
                 StoreEngine = unitTestStore
             };
             loggerRef.Target.LogDebug("----------> restarting server");
             server.Start();
             // load 1st object - should succeed
             ICoreItem item1;
             ICoreItem item2;
             using (ICoreClient client3 = new CoreClientFactory(loggerRef)
                                          .SetEnv("UTT")
                                          .Create())
             {
                 item1 = client3.LoadItem <TestData>("Test1");
                 item2 = client3.LoadItem <TestData>("Test2");
             }
             Assert.IsNotNull(item1);
             Assert.AreEqual(id1, item1.Id);
             Assert.IsNull(item2);
             // done
             loggerRef.Target.LogDebug("----------> test completed");
             server.Stop();
             DisposeHelper.SafeDispose(ref server);
         }
         finally
         {
             DisposeHelper.SafeDispose(ref server);
         }
     }
 }
Example #27
0
        public void TestServerBridge()
        {
            // required environment:
            // - local env (eg. DEV) server
            // - lower env (eg. UTT) server
            // creates the bridge, and check all messages published
            //   in local env are re-published correctly in lower env
            EnvId  localEnvId   = EnvId.Dev_Development;
            string localEnvName = EnvHelper.EnvName(localEnvId);
            EnvId  lowerEnvId   = (localEnvId - 1);
            string lowerEnvName = EnvHelper.EnvName(lowerEnvId);
            int    localPort    = 9214;
            int    lowerPort    = 9114;

            using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true)))
            {
                CoreClientFactory clientfactory = new CoreClientFactory(loggerRef);
                using (CoreServer localServer =
                           new CoreServer(loggerRef, localEnvName, NodeType.Router, localPort))
                    using (CoreServer lowerServer =
                               new CoreServer(loggerRef, lowerEnvName, NodeType.Router, lowerPort))
                    {
                        // start servers
                        localServer.Start();
                        lowerServer.Start();
                        // create clients
                        using (Reference <ICoreClient> localClientRef = Reference <ICoreClient> .Create(clientfactory.SetEnv(localEnvName).SetServers("localhost:" + localPort).Create()))
                            using (ICoreClient lowerClient = clientfactory.SetEnv(lowerEnvName).SetServers("localhost:" + lowerPort).Create())
                            {
                                using (ServerBridge bridge = new ServerBridge())
                                {
                                    bridge.LoggerRef    = loggerRef;
                                    bridge.Client       = localClientRef;
                                    bridge.TargetClient = lowerClient;
                                    // test begins here
                                    // - start the bridge
                                    bridge.Start();
                                    const int sendCount      = 500;
                                    const int maxWaitSeconds = 5;
                                    long      excpCount      = 0;
                                    long      recdCount      = 0;
                                    // subscribe to objects on downstream server
                                    ISubscription subs = lowerClient.Subscribe <TestData>(Expr.ALL,
                                                                                          delegate(ISubscription subscription, ICoreItem item)
                                    {
                                        // receiver
                                        long count = Interlocked.Increment(ref recdCount);
                                        try
                                        {
                                            TestData data = (TestData)item.Data;
                                            //loggerRef.Target.LogDebug("Recd[{0}]", data.field2);
                                            Assert.AreEqual <long>(count, data.field2);
                                        }
                                        catch (Exception)
                                        {
                                            Interlocked.Increment(ref excpCount);
                                        }
                                    }, null);

                                    long sentCount = 0;
                                    // publish n Server events
                                    for (int i = 1; i <= sendCount; i++)
                                    {
                                        Interlocked.Increment(ref sentCount);
                                        localClientRef.Target.SaveObject <TestData>(new TestData("Test", i), "Test", null, TimeSpan.MaxValue);
                                    }
                                    // wait for a short period
                                    DateTimeOffset waitStart  = DateTimeOffset.Now;
                                    DateTimeOffset waitExpiry = waitStart.AddSeconds(maxWaitSeconds);
                                    while ((Interlocked.Add(ref recdCount, 0) < Interlocked.Add(ref sentCount, 0)) &&
                                           (DateTimeOffset.Now < waitExpiry) &&
                                           (Interlocked.Add(ref excpCount, 0) == 0))
                                    {
                                        Thread.Sleep(TimeSpan.FromSeconds(1.0));
                                        loggerRef.Target.LogDebug("Recd/Sent: {0}/{1} items...", Interlocked.Add(ref recdCount, 0), Interlocked.Add(ref sentCount, 0));
                                    }
                                    loggerRef.Target.LogDebug("Duration: {0}", (DateTimeOffset.Now - waitStart));
                                    Assert.AreEqual <long>(0, excpCount);
                                    Assert.AreEqual <long>(sendCount, recdCount);
                                    // done
                                    Assert.IsTrue(true);
                                }
                            }
                    }
            }
        }
        public void TestFileImportServer()
        {
            // start the server, connect a client1, and shutdown
            using (ILogger logger = new TraceLogger(true))
            {
                const EnvId env    = EnvId.Utt_UnitTest;
                var         logRef = Reference <ILogger> .Create(logger);

                var random = new Random(Environment.TickCount);
                int port   = random.Next(8000, 8099);
                using (var server = new CoreServer(logRef, env.ToString(), NodeType.Router, port, WcfConst.NetTcp))
                {
                    // start server
                    server.Start();
                    // connect client
                    using (ICoreClient client = new CoreClientFactory(logRef).SetEnv(env.ToString()).Create())
                    {
                        // create test import rule
                        var rule = new FileImportRule
                        {
                            RuleName         = "UnitTest",
                            SourceLocation   = @"C:\windows\system32",
                            TargetLocation   = @"c:\temp",
                            CopyFilePatterns = "notep*.exe"
                        };
                        var name = rule.RuleName;
                        // start the file import server
                        //DateTimeOffset waitCompleted;
                        var target = new FileImportServer {
                            Client = Reference <ICoreClient> .Create(client)
                        };
                        client.SaveObject(rule, "UnitTest", null, true, TimeSpan.MaxValue);
                        using (target)//logger, env
                        {
                            target.Start();
                            Thread.Sleep(TimeSpan.FromSeconds(5));
                            //waitCompleted = DateTimeOffset.Now;
                            target.Stop();
                        }
                        {
                            var results1 = client.LoadItem <FileImportRule>(name);
                            Assert.IsNotNull(results1);
                            //List<ImportRuleResult> results = client.LoadObjects<ImportRuleResult>(Expr.ALL);//IRuleObject ImportRuleResult
                            //Assert.AreEqual(1, results.Count);
                            //ImportRuleResult result = results[0];
                            //Assert.AreEqual("UnitTest", result.RuleName);
                            //Assert.AreEqual("Completed", result.ImportResult);
                            //Assert.AreEqual(1, result.FileNames.Length);
                            //Assert.AreEqual("notepad.exe", result.FileNames[0].ToLower());
                        }
                        //{
                        //    List<ImportFileResult> results = client.LoadObjects<ImportFileResult>(Expr.ALL);
                        //    Assert.AreEqual(1, results.Count);
                        //    ImportFileResult result = results[0];
                        //    Assert.AreEqual("UnitTest", result.RuleName);
                        //    Assert.AreEqual("Completed", result.ImportResult);
                        //    Assert.AreEqual("notepad.exe", result.FileName.ToLower());
                        //}
                    }
                    // explicit shutdown
                    // - not necessary in a "using" block but run it anyway
                    server.Stop();
                }
            }
        }
Example #29
0
        public void TestPagingTechniques()
        {
            const bool debugRequests = true;
            // loads/saves a very large number of objects
            const int maxLoopCount = 5;
            const int itemsPerLoop = 400;
            const int itemsPerPage = 154;
            const int totalItems   = maxLoopCount * itemsPerLoop;

            using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true)))
            {
                NamedValueSet serverSettings = new NamedValueSet();
                serverSettings.Set(CfgPropName.NodeType, (int)NodeType.Router);
                serverSettings.Set(CfgPropName.EnvName, "UTT");
                using (CoreServer server = new CoreServer(loggerRef, serverSettings))
                {
                    server.Start();
                    // save
                    using (ICoreClient client1 = new CoreClientFactory(loggerRef).SetEnv("UTT").Create())
                    {
                        for (int loop = 0; loop < maxLoopCount; loop++)
                        {
                            ICoreItem[] items = new ICoreItem[itemsPerLoop];
                            for (int i = 0; i < itemsPerLoop; i++)
                            {
                                client1.DebugRequests = i == 0;
                                int           n     = loop * itemsPerLoop + i;
                                TestData      data  = new TestData(n.ToString(), n);
                                NamedValueSet props = new NamedValueSet(new NamedValue("n", n));
                                items[i] = client1.MakeObject(data, "Test." + n, props);
                            }
                            client1.SaveItems(items);
                        }
                    }
                    // load (using original paging technique)
                    loggerRef.Target.LogDebug("---------- multi page load");
                    // - slow because it scans and sort the entire data set for each page
                    using (ICoreClient client3 = new CoreClientFactory(loggerRef).SetEnv("UTT").Create())
                    {
                        // count the items
                        int itemCount1 = client3.CountObjects <TestData>(null);
                        // now get the items in pages
                        IExpression orderExpr = Expr.Prop("n");
                        client3.DebugRequests = debugRequests;
                        int itemCount2 = 0;
                        int startRow   = 0;
                        List <ICoreItem> page;
                        do
                        {
                            page        = client3.LoadItems <TestData>(null, orderExpr, startRow, itemsPerPage);
                            itemCount2 += page.Count;
                            startRow   += page.Count;
                        }while (page.Count == itemsPerPage);
                        Assert.AreEqual(totalItems, itemCount1);
                        Assert.AreEqual(totalItems, itemCount2);
                    }
                    // paged load (using pre-load of item header info)
                    loggerRef.Target.LogDebug("---------- header pre-load");
                    // - faster because it only scans sorts the entire data set once and sorting
                    //   can use local compiled methods instead of server-side expression evaluation.
                    using (ICoreClient client4 = new CoreClientFactory(loggerRef).SetEnv("UTT").Create())
                    {
                        // get all the items (without data)
                        List <ICoreItemInfo> itemInfoList = client4.LoadItemInfos <TestData>(null);
                        int itemCount1 = itemInfoList.Count;
                        // optionally sort the list here
                        //IExpression orderExpr = Expr.Prop("n");
                        // now get the items in pages
                        client4.DebugRequests = debugRequests;
                        int itemCount2 = 0;
                        int maxPages   = ((itemCount1 / itemsPerPage) + 1);
                        for (int pageNum = 0; pageNum < maxPages; pageNum++)
                        {
                            // get the item names/ids for the current page
                            int           startRow  = itemsPerPage * pageNum;
                            List <string> itemNames = new List <string>();
                            for (int i = 0; i < itemsPerPage; i++)
                            {
                                int n = startRow + i;
                                if (n < itemCount1)
                                {
                                    itemNames.Add(itemInfoList[n].Name);
                                }
                            }
                            // now get the objects (with data)
                            var page = client4.LoadItems <TestData>(itemNames);
                            itemCount2 += page.Count;
                        }
                        Assert.AreEqual(totalItems, itemCount1);
                        Assert.AreEqual(totalItems, itemCount2);
                    }
                }
            }
        }
Example #30
0
        [Ignore] // this is an integration test
        public void StressUttServerLoadAndSubscribe()
        {
            // return an increasing number of trades until failure
            // on a 4GB workstation, the limit is about 13,000 trades.
            Trade trade = XmlSerializerHelper.DeserializeFromString <Trade>(
                ResourceHelper.GetResourceWithPartialName(Assembly.GetExecutingAssembly(), "SampleSwap.xml"));
            NamedValueSet tradeProps = new NamedValueSet(
                ResourceHelper.GetResourceWithPartialName(Assembly.GetExecutingAssembly(), "SampleSwap.nvs"));

            using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true)))
            {
                //NamedValueSet serverSettings = new NamedValueSet();
                //serverSettings.Set(CfgPropName.NodeType, (int)NodeType.Router);
                //serverSettings.Set(CfgPropName.EnvName, "UTT");
                //using (CoreServer server = new CoreServer(logger, serverSettings))
                {
                    //server.Start();
                    //using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv("UTT").SetHosts("localhost:8113").Create())
                    using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv("UTT").Create())
                    {
                        // delete the test trades
                        IExpression deleteExpr = Expr.ALL;
                        client.DeleteObjects <Trade>(deleteExpr);
                        const int maxLoops         = 3;
                        const int loopRepeat       = 3;
                        const int incrementPerLoop = 1024;
                        int       itemsPerLoop     = 1024;
                        int       itemsSaved       = 0;
                        for (int loop = 0; loop < maxLoops; loop++)
                        {
                            string loopName = $"Test.{loop}.";
                            for (int repeat = 0; repeat < loopRepeat; repeat++)
                            {
                                // create trades
                                loggerRef.Target.LogDebug("[{0}-{1}] Creating {2} trades...", loop, repeat, itemsPerLoop);
                                ICoreItem[] items = new ICoreItem[itemsPerLoop];
                                for (int i = 0; i < itemsPerLoop; i++)
                                {
                                    string tradeName = $"Test.{loop}.{i}";
                                    items[i] = client.MakeObject <Trade>(trade, tradeName, tradeProps);
                                    itemsSaved++;
                                }
                                client.SaveItems(items);
                                // start subscription
                                loggerRef.Target.LogDebug("[{0}-{1}] Receiving {2} trades...", loop, repeat, itemsPerLoop);
                                long          itemsReceived   = 0;
                                DateTime      testStartedTime = DateTime.Now;
                                DateTime      lastReceiveTime = testStartedTime;
                                ISubscription subscription    = client.CreateSubscription <Trade>(Expr.StartsWith(Expr.SysPropItemName, loopName));
                                subscription.UserCallback = delegate
                                {
                                    Interlocked.Increment(ref itemsReceived);
                                    lastReceiveTime = DateTime.Now;
                                };
                                //subscription.ExcludeDataBody = true;
                                subscription.Start();
                                // wait a bit to ensure subscription is up to date
                                while ((Interlocked.Add(ref itemsReceived, 0) < itemsPerLoop) && ((DateTime.Now - testStartedTime) < TimeSpan.FromSeconds(10)))
                                {
                                    Thread.Sleep(100);
                                }
                                Thread.Sleep(100);
                                subscription.Cancel();
                                // load all that have been saved
                                loggerRef.Target.LogDebug("[{0}-{1}] Received {2} trades in {3} seconds.", loop, repeat, itemsReceived, (lastReceiveTime - testStartedTime).TotalSeconds);
                                Assert.AreEqual(itemsPerLoop, Interlocked.Add(ref itemsReceived, 0));
                                // delete the test trades
                                //client.DeleteObjects<Trade>(deleteExpr);
                                //GC.Collect();
                            }

                            // next loop
                            itemsPerLoop += incrementPerLoop;
                        } // for loop
                    }
                }
            }
        }
Example #31
0
        public void TestStressServerLoadAndRetrieve()
        {
            // return an increasing number of trades until failure
            Trade trade = XmlSerializerHelper.DeserializeFromString <Trade>(
                ResourceHelper.GetResourceWithPartialName(Assembly.GetExecutingAssembly(), "SampleSwap.xml"));
            NamedValueSet tradeProps = new NamedValueSet(
                ResourceHelper.GetResourceWithPartialName(Assembly.GetExecutingAssembly(), "SampleSwap.nvs"));

            using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true)))
            {
                NamedValueSet serverSettings = new NamedValueSet();
                serverSettings.Set(CfgPropName.NodeType, (int)NodeType.Router);
                serverSettings.Set(CfgPropName.EnvName, "UTT");
                using (CoreServer server = new CoreServer(loggerRef, serverSettings))
                {
                    server.Start();
                    using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv("UTT").SetServers("localhost:8113").Create())
                    //using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv(EnvId.DEV_Development).Create())
                    {
                        // delete the test trades
                        IExpression deleteExpr = Expr.StartsWith(Expr.SysPropItemName, "Test.");
                        client.DeleteObjects <Trade>(deleteExpr);
                        const int maxLoops         = 1;
                        const int loopRepeat       = 1;
                        const int incrementPerLoop = 1024;
                        int       itemsPerLoop     = 8192 - 1024;
                        int       itemsSaved       = 0;
                        for (int loop = 0; loop < maxLoops; loop++)
                        {
                            for (int repeat = 0; repeat < loopRepeat; repeat++)
                            {
                                // create trades
                                loggerRef.Target.LogDebug("[{0}-{1}] Making {2} trades...", loop, repeat, itemsPerLoop);
                                List <IAsyncResult> completions = new List <IAsyncResult>();
                                ICoreItem[]         items       = new ICoreItem[itemsPerLoop];
                                for (int i = 0; i < itemsPerLoop; i++)
                                {
                                    string    tradeName = $"Test.{loop}.{i}";
                                    ICoreItem item      = client.MakeObject(trade, tradeName, tradeProps);
                                    item.Freeze(); // serialises
                                    items[i] = item;
                                }
                                loggerRef.Target.LogDebug("[{0}-{1}] Commencing save of {2} trades...", loop, repeat, itemsPerLoop);
                                for (int i = 0; i < itemsPerLoop; i++)
                                {
                                    completions.Add(client.SaveItemBegin(items[i]));
                                    itemsSaved++;
                                }
                                loggerRef.Target.LogDebug("[{0}-{1}] Completing save of {2} trades...", loop, repeat, itemsPerLoop);
                                foreach (IAsyncResult ar in completions)
                                {
                                    client.SaveEnd(ar);
                                }
                                // load all that have been saved
                                string loopName = $"Test.{loop}.";
                                loggerRef.Target.LogDebug("[{0}-{1}] Loading {2} trades...", loop, repeat, itemsPerLoop);
                                List <ICoreItem> tradeItems = client.LoadItems <Trade>(Expr.StartsWith(Expr.SysPropItemName, loopName));
                                Assert.AreEqual(itemsPerLoop, tradeItems.Count);
                                loggerRef.Target.LogDebug("[{0}-{1}] Unpacking {2} trades...", loop, repeat, itemsPerLoop);
                                List <Trade> trades = new List <Trade>();
                                foreach (ICoreItem item in tradeItems)
                                {
                                    trades.Add((Trade)item.Data);
                                }
                                loggerRef.Target.LogDebug("[{0}-{1}] Retrieved {2} trades.", loop, repeat, itemsPerLoop);
                                // delete the test trades
                                client.DeleteObjects <Trade>(deleteExpr);
                                GC.Collect();
                            }
                            // next loop
                            itemsPerLoop += incrementPerLoop;
                        } // for loop
                    }
                }
            }
        }
Example #32
0
        public void TestFailingExpressions()
        {
            // tests expressions that fail to evaluate on the server
            using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true)))
            {
                NamedValueSet serverSettings = new NamedValueSet();
                serverSettings.Set(CfgPropName.NodeType, (int)NodeType.Router);
                serverSettings.Set(CfgPropName.EnvName, "UTT");
                using (CoreServer server = new CoreServer(loggerRef, serverSettings))
                {
                    server.Start();
                    // save
                    using (ICoreClient client1 = new CoreClientFactory(loggerRef).SetEnv("UTT").Create())
                    {
                        client1.SaveObject(new TestData(), "AllValuesNotNull", new NamedValueSet("StrValue/String=A|NumValue/Int32=0"), TimeSpan.MaxValue);
                        client1.SaveObject(new TestData(), "NumValueIsNull", new NamedValueSet("StrValue/String=A"), TimeSpan.MaxValue);
                        client1.SaveObject(new TestData(), "StrValueIsNull", new NamedValueSet("NumValue/Int32=0"), TimeSpan.MaxValue);
                        client1.SaveObject(new TestData(), "AllValuesAreNull", null, TimeSpan.MaxValue);
                    }

                    // load using expression
                    using (ICoreClient client2 = new CoreClientFactory(loggerRef).SetEnv("UTT").Create())
                    {
                        client2.DebugRequests = true;
                        {
                            var items = client2.LoadObjects <TestData>(Expr.BoolAND(Expr.IsEQU("StrValue", "A"), Expr.IsEQU("NumValue", 0)));
                            Assert.AreEqual(1, items.Count);
                        }
                        {
                            var items = client2.LoadObjects <TestData>(Expr.BoolOR(Expr.IsEQU("StrValue", "A"), Expr.IsEQU("NumValue", 0)));
                            Assert.AreEqual(3, items.Count);
                        }
                        {
                            // unknown/missing string property
                            var items = client2.LoadObjects <TestData>(Expr.BoolOR(Expr.IsEQU("StrValue", "A"), Expr.IsEQU("XValue", "X")));
                            Assert.AreEqual(2, items.Count);
                        }
                        {
                            // unknown/missing non-string property
                            var items = client2.LoadObjects <TestData>(Expr.BoolOR(Expr.IsEQU("StrValue", "A"), Expr.IsEQU("YValue", 1)));
                            Assert.AreEqual(2, items.Count);
                        }
                        {
                            // property missing
                            var items = client2.LoadObjects <TestData>(Expr.IsNull("StrValue"));
                            Assert.AreEqual(2, items.Count);
                        }
                        {
                            // property has value
                            var items = client2.LoadObjects <TestData>(Expr.IsNotNull("StrValue"));
                            Assert.AreEqual(2, items.Count);
                        }
                        {
                            var items = client2.LoadObjects <TestData>(Expr.StartsWith("StrValue", "A"));
                            Assert.AreEqual(2, items.Count);
                        }
                        {
                            var items = client2.LoadObjects <TestData>(Expr.BoolOR(Expr.StartsWith("StrValue", "A"), Expr.IsEQU("NumValue", 0)));
                            Assert.AreEqual(3, items.Count);
                        }
                    }
                }
            }
        }
Example #33
0
        static void Main(string[] args)
        {
            // exit codes:
            //   1  success
            //   0  failed (exception logged to network)
            //  -1  catastrophic failure (logged to local file)
            //  -2  catastrophic failure (logged to console only)
            using (ILogger logger = new ConsoleLogger("RequestHandler: "))
            {
                // argument defaults
                bool   attended     = false;
                Guid   requestId    = Guid.Empty;
                EnvId  env          = EnvId.Undefined;
                string hostInstance = null;
                // note: project debugging guid is: {6B70756E-16D8-4E9D-B104-3BE5830F229A}

                try
                {
                    // process arguments
                    logger.LogDebug("Arguments:");
                    for (int i = 0; i < args.Length; i++)
                    {
                        logger.LogDebug("  Argument[{0}]='{1}'", i, args[i]);
                        string[] argParts = args[i].Split(':');
                        string   argName  = argParts[0];
                        switch (argName.ToLower())
                        {
                        case "/debug": attended = true; break;

                        case "/reqid": requestId = Guid.Parse(argParts[1]); break;

                        case "/hiid":
                        {
                            hostInstance = argParts[1];
                            if (hostInstance.Equals("Default", StringComparison.OrdinalIgnoreCase))
                            {
                                hostInstance = null;
                            }
                        }
                        break;

                        case "/env": env = EnvHelper.ParseEnvName(argParts[1]); break;

                        default: break;
                        }
                    }

                    using (ICoreClient client = new CoreClientFactory(logger).SetEnv(env).Create())
                        //using (ILogger netLogger = new NetworkLogger(client, null))
                        using (ICoreCache cache = client.CreateCache())
                        {
                            //Environment.ExitCode = HandleRequest(new MultiLogger(logger, netLogger), cache, requestId);
                            Environment.ExitCode = RequestHandler.HandleRequest(logger, cache, requestId, hostInstance);
                        }
                }
                catch (Exception e1)
                {
                    // catastrophic failure
                    // - try to log to local file
                    try
                    {
                        Environment.ExitCode = -2;
                        using (ILogger errorLog = new MultiLogger(logger,
                                                                  new FileLogger(String.Format(@".\RequestHandler.Error.{0}.log", requestId))))
                        {
                            errorLog.LogDebug("Arguments:");
                            for (int i = 0; i < args.Length; i++)
                            {
                                errorLog.LogDebug("  Argument[{0}]='{1}'", i, args[i]);
                            }
                            errorLog.LogError(e1);
                        }
                    }
                    catch (Exception e2)
                    {
                        // I/O failure creating error log?
                        Environment.ExitCode = -3;
                        logger.LogDebug("Arguments ({0}):", args.Length);
                        for (int i = 0; i < args.Length; i++)
                        {
                            logger.LogDebug("  Argument[{0}]='{1}'", i, args[i]);
                        }
                        logger.LogError(e2);
                    }
                }
                if (attended)
                {
                    Console.WriteLine("Press ENTER to exit.");
                    Console.ReadLine();
                }
            }
        }
Example #34
0
        private void Form1Load(object sender, EventArgs e)
        {
            // create loggers
            _loggerRef = Reference <ILogger> .Create(new TextBoxLogger(txtMainLog));

            // create client factory and client
            _clientFactory = new CoreClientFactory(_loggerRef);
            _clientFactory.SetEnv(BuildConst.BuildEnv);
            _clientFactory.SetApplication(Assembly.GetExecutingAssembly());
            _client = _clientFactory.Create();
            // - form title
            WinFormHelper.SetAppFormTitle(this, EnvHelper.EnvName(BuildEnv));
            // setup the AlertRule view
            _alertRuleViewHelper = new AlertRuleViewHelper();
            _alertRuleDataHelper = new AlertRuleDataHelper();
            _alertRuleFilters    = new ComboxBoxFilterGroup(
                panelAlertRule, _alertRuleViewHelper, AlertRuleSelectionChanged);
            _alertRuleSelecter = new AlertRuleSelecter(
                _alertRuleFilters, _alertRuleViewHelper, _alertRuleDataHelper);
            _alertRuleView = new ListViewManager <AlertRule>(
                _loggerRef.Target, lvAlertRule, _alertRuleViewHelper,
                _alertRuleSelecter, _alertRuleFilters, new AlertRuleSorter(), _alertRuleDataHelper);

            ICoreCache alertRuleCache = _client.CreateCache(
                update => _alertRuleView.UpdateData(new ViewChangeNotification <AlertRule>
            {
                Change  = update.Change,
                OldData =
                    (AlertRule)update.OldItem?.Data,
                NewData =
                    (AlertRule)update.NewItem?.Data
            }), SynchronizationContext.Current);

            alertRuleCache.SubscribeNoWait <AlertRule>(Expr.ALL, null, null);
            // setup the AlertSignal view
            _alertSignalViewHelper = new AlertSignalViewHelper();
            _alertSignalDataHelper = new AlertSignalDataHelper();
            _alertSignalFilters    = new ComboxBoxFilterGroup(
                panelAlertSignal, _alertSignalViewHelper, AlertSignalSelectionChanged);
            _alertSignalSelecter = new AlertSignalSelecter(
                _alertSignalFilters, _alertSignalViewHelper, _alertSignalDataHelper);
            _alertSignalView = new ListViewManager <AlertSignal>(
                _loggerRef.Target, lvAlertSignal, _alertSignalViewHelper,
                _alertSignalSelecter, _alertSignalFilters, new AlertSignalSorter(), _alertSignalDataHelper);
            ICoreCache alertSignalCache = _client.CreateCache(
                update => _alertSignalView.UpdateData(new ViewChangeNotification <AlertSignal>
            {
                Change  = update.Change,
                OldData =
                    (AlertSignal)update.OldItem?.Data,
                NewData =
                    (AlertSignal)update.NewItem?.Data
            }), SynchronizationContext.Current);

            alertSignalCache.SubscribeNoWait <AlertSignal>(Expr.ALL, null, null);
            // setup the LogEvent view
            _logEventViewHelper = new LogEventViewHelper();
            _logEventDataHelper = new LogEventDataHelper();
            _logEventFilters    = new ComboxBoxFilterGroup(
                panelLogEvent, _logEventViewHelper, LogEventSelectionChanged);
            _logEventSelecter = new LogEventSelecter(
                _logEventFilters, _logEventViewHelper, _logEventDataHelper);
            _logEventView = new ListViewManager <DebugLogEvent>(
                _loggerRef.Target, lvLogEvent, _logEventViewHelper,
                _logEventSelecter, _logEventFilters, new LogEventSorter(), _logEventDataHelper);
            ICoreCache logEventCache = _client.CreateCache(
                update => _logEventView.UpdateData(new ViewChangeNotification <DebugLogEvent>
            {
                Change  = update.Change,
                OldData =
                    (DebugLogEvent)update.OldItem?.Data,
                NewData =
                    (DebugLogEvent)update.NewItem?.Data
            }), SynchronizationContext.Current);

            logEventCache.SubscribeNoWait <DebugLogEvent>(Expr.ALL, null, null);
            // init controls
            // server 0
            _serverAddress[0] = txtServer0Address;
            _ping[0]          = chkServer0Ping;
            _lastChecked[0]   = txtServer0LastChecked;
            _lastReplied[0]   = txtServer0LastReplied;
            _serverStatus[0]  = txtServer0Status;
            _serverReason[0]  = txtServer0OtherInfo;
            // server 1
            _serverAddress[1] = txtServer1Address;
            _ping[1]          = chkServer1Ping;
            _lastChecked[1]   = txtServer1LastChecked;
            _lastReplied[1]   = txtServer1LastReplied;
            _serverStatus[1]  = txtServer1Status;
            _serverReason[1]  = txtServer1OtherInfo;
            // server 2
            _serverAddress[2] = txtServer2Address;
            _ping[2]          = chkServer2Ping;
            _lastChecked[2]   = txtServer2LastChecked;
            _lastReplied[2]   = txtServer2LastReplied;
            _serverStatus[2]  = txtServer2Status;
            _serverReason[2]  = txtServer2OtherInfo;
            // server 3
            _serverAddress[3] = txtServer3Address;
            _ping[3]          = chkServer3Ping;
            _lastChecked[3]   = txtServer3LastChecked;
            _lastReplied[3]   = txtServer3LastReplied;
            _serverStatus[3]  = txtServer3Status;
            _serverReason[3]  = txtServer3OtherInfo;
            // server 4
            _serverAddress[4] = txtServer4Address;
            _ping[4]          = chkServer4Ping;
            _lastChecked[4]   = txtServer4LastChecked;
            _lastReplied[4]   = txtServer4LastReplied;
            _serverStatus[4]  = txtServer4Status;
            _serverReason[4]  = txtServer4OtherInfo;
            // server 5
            _serverAddress[5] = txtServer5Address;
            _ping[5]          = chkServer5Ping;
            _lastChecked[5]   = txtServer5LastChecked;
            _lastReplied[5]   = txtServer5LastReplied;
            _serverStatus[5]  = txtServer5Status;
            _serverReason[5]  = txtServer5OtherInfo;
            for (int i = 0; i < NServers; i++)
            {
                _lastChecked[i].BackColor  = Color.FromKnownColor(KnownColor.Window);
                _lastReplied[i].BackColor  = Color.FromKnownColor(KnownColor.Window);
                _serverStatus[i].BackColor = Color.FromKnownColor(KnownColor.Window);
                _serverReason[i].BackColor = Color.FromKnownColor(KnownColor.Window);
            }
        }