public void ProcessRequest(HttpContext context) { var connector = WebManager.GetService<IRemoteServiceConnector<IOverlayStateService>>("overlayStateServiceWcfConnector"); Srv = connector.Connect(); try { var info = Srv.Receive(); if (info.Length > 0) { context.Response.Write( new JavaScriptSerializer().Serialize(info) ); } context.Response.Flush(); } finally { connector.Close(Srv); } context.Response.End(); }
public void Start() { if (LocalStorage is IOverlayNodeAware) { (LocalStorage as IOverlayNodeAware).Node = Node; } MainOverlaySrv.OverlayMessageSent += ProcessOverlayServiceMessageSentEvent; if (OverlayParams.StatisticsEnabled) { OverlayStateSrv = OverlayStateSrvConnector.Connect(); } CommunicationMgr.Start(this, Node); }
public static void Main(string[] args) { Rnd = new Random(); // log4net init NReco.Logging.LogManager.Configure(new NReco.Log4Net.Logger()); // winter service provider init IComponentsConfig config = ConfigurationManager.GetSection("components") as IComponentsConfig; SrvPrv = new NReco.Winter.ServiceProvider(config); // overlay params Params = (NService.Chord.OverlayParams)SrvPrv.GetService("chordOverlayParams"); Params.FillFromConsoleArgs(args); // hack for quick services disposal Params.TreatRejoinRequestedAsExit = true; var stateSrvConnector = (IRemoteServiceConnector<IOverlayStateService>)SrvPrv.GetService("overlayStateServiceWcfConnector"); StateSrv = stateSrvConnector.Connect(); DbMgr = (IDbManager)SrvPrv.GetService("mongoDbManager"); DbMgr.Clear(); var statResults = new StringBuilder(); if (args.Length == 2) { NodesQuantity = new int[] { Convert.ToInt32(args[0]) }; ServicesPerNodeQuantity = new int[] { Convert.ToInt32(args[1]) }; } try { statResults.Append("{"); foreach (var snq in ServicesPerNodeQuantity) { statResults.AppendFormat("{0}: [ ", snq); foreach (var nq in NodesQuantity) { var alreadyJoinedNodesPorts = new List<int>(); var serviceDescriptions = new List<ServiceDescription>(); var testObjects = new List<TestObjects>(); for (var i = 0; i < nq; ++i) { try { TestObjects testObj = null; testObj = InitNode(ref alreadyJoinedNodesPorts); testObjects.Add(testObj); for (var j = 0; j < snq; ++j) { var srvD = TestHelper.GetRandomServiceDescription(testObj.StorageSrv.Node, Rnd); serviceDescriptions.Add(srvD); testObj.StorageSrv.PutService(srvD); } } catch { } } Thread.Sleep(1000); // obtain statistics for (var i = 0; i < 10; ++i) { var storSrv = testObjects[Rnd.Next(0, testObjects.Count)].StorageSrv; var queryData = i < 5 ? TestHelper.GetRandomServiceDescription(storSrv.Node, Rnd) : serviceDescriptions[Rnd.Next(0, serviceDescriptions.Count)]; var pos = Rnd.Next(0, queryData.Data.Count); try { storSrv.GetServices( Query.FromRelex( String.Format( "{0} = \"{1}\"", queryData.Data[pos].AttrValue.Key, queryData.Data[pos].AttrValue.Value ) ), false ); } catch { } } var stats = StateSrv.CollectStatistics("Query", true); statResults.AppendFormat("[{0},{1}], ", nq, stats.Data.Average(st => st.TimeElapsed.TotalMilliseconds)); //System.Console.WriteLine("\r\n******************************************\r\n"); //System.Console.ReadLine(); System.Console.WriteLine("Previous session cleanup started..."); foreach (var t in testObjects) { t.StorageSrv.Stop(); } foreach (var t in testObjects) { ((ChordOverlayNodeService)t.NodeSrv).MaintenanceSrv.Stop(); } foreach (var t in testObjects) { t.NodeSrv.SendMessage(new OverlayNodeServiceMessage { MsgType = OverlayNodeServiceMessage.MessageType.ExitRequested, WaitForProcessing = true }); } DbMgr.Clear(); System.Console.WriteLine("Previous session cleanup finished!"); } statResults.Remove(statResults.Length - 2, 2); // remove 'hanging comma & space' statResults.Append("], "); } statResults.Remove(statResults.Length - 2, 2); // remove 'hanging comma & space' statResults.Append("}"); } finally { stateSrvConnector.Close(StateSrv); var resDirName = "..\\..\\..\\..\\results\\" + Guid.NewGuid().ToString(); Directory.CreateDirectory(resDirName); using (var sw = new StreamWriter(new FileStream(resDirName + "\\statresults_" + Guid.NewGuid().ToString() + ".json", FileMode.Create, FileAccess.Write, FileShare.None))) { sw.WriteLine(statResults.ToString()); } } }