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();
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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());
                }
            }
        }