예제 #1
0
        static void Main(string[] args)
        {
            try
            {
                string serverIp   = ConfigurationManager.AppSettings["serverIp"];
                int    serverPort = int.Parse(ConfigurationManager.AppSettings["serverPort"]);

                TcpClient connectionSocket = new SocketService(IPAddress.Parse(serverIp), serverPort).EstablishConnection();

                ListenerTask listenerTask = new ListenerTask(connectionSocket);
                DiskTask     diskTask     = new DiskTask("sqlservr");
                MemoryTask   memoryTask   = new MemoryTask("sqlservr");

                EventWaitHandle waitHandle = new AutoResetEvent(false);

                TaskPool taskPool = new TaskPoolBuilder()
                                    .SubmitCompositeTask(listenerTask)
                                    .SubmitCompositeTask(diskTask).Observe(listenerTask)
                                    //.SubmitCompositeTask(memoryTask).Observe(listenerTask)
                                    .OnReturn(delegate(List <IDataSet> dataSets, State state)
                {
                    lock (dataSets)
                    {
                        if (state == State.FAILED)
                        {
                            Console.WriteLine("Query failed");
                            return;
                        }
                        else if (state == State.DEAD)
                        {
                            waitHandle.Set();
                            return;
                        }


                        string jsonReport = new TimeDataReportBuilder(GetTimeDataSets(dataSets)).GenerateJsonReport();

                        if (jsonReport.Length > 0)
                        {
                            jsonReport += "}";
                        }

                        string jsonData      = "{\"data\":[{},{" + jsonReport + "}]}";
                        NetworkStream stream = connectionSocket.GetStream();
                        stream.Write(Encoding.ASCII.GetBytes("lets get this thing started|" + jsonData));

                        if (state == State.RESET)
                        {
                            Console.WriteLine("Resetting monitor...");
                        }
                    }
                })
                                    .Build();

                waitHandle.WaitOne();
                Console.WriteLine("Recieved shutdown signal! shutting down...");
                connectionSocket.Close();
            }
            catch (Exception exception)
            {
                Console.WriteLine("Exception thrown when communicating with the server: " + exception.StackTrace);
            }
        }
예제 #2
0
        public void Start()
        {
            OnInit("\r\n");
            OnInit("\r\n");
            OnInit("----------------------" + DateTime.Now + ":初始化节点开始-----------------------------------------");
            try
            {
                OnInit("**开始请求节点配置信息**");
                if (System.Configuration.ConfigurationSettings.AppSettings.AllKeys.Contains("NodeID"))
                {
                    GlobalNodeConfig.NodeID = Convert.ToInt32(System.Configuration.ConfigurationSettings.AppSettings["NodeID"]);
                }
                // if (GlobalNodeConfig.NodeID <= 0)//string.IsNullOrWhiteSpace(GlobalNodeConfig.TaskDataBaseConnectString) ||
                // {
                string url = GlobalNodeConfig.TaskManagerWebUrl.TrimEnd('/') + "/node/" + "loadnodeconfig/";
                ResponseBase <LoadNodeConfigResponse> r = HttpClientHelper.PostResponse <ResponseBase <LoadNodeConfigResponse> >(url, JsonConvert.SerializeObject(new LoadNodeConfigRequest()
                {
                    NodeId = GlobalNodeConfig.NodeID.ToString(), Source = Source.Node
                }));
                if (r.Status != ResponesStatus.Success)
                {
                    //记录日志,并抛出异常
                    throw new Exception("请求" + url + "获取节点配置失败,服务端返回信息:" + JsonConvert.SerializeObject(r));
                }
                //string connectstring = DESHelper.Decrypt(r.Data.ConnctionString, "ND.FluentTaskScheduling.", "1");
                //if (string.IsNullOrWhiteSpace(GlobalNodeConfig.TaskDataBaseConnectString))
                //    GlobalNodeConfig.TaskDataBaseConnectString = connectstring;
                if (GlobalNodeConfig.NodeID <= 0)
                {
                    GlobalNodeConfig.NodeID = r.Data.Node.id;
                }
                //初始化配置信息
                OnInit("**请求节点配置信息完成,请求结果:" + JsonConvert.SerializeObject(r) + "**");
                // }



                //初始化命令池
                OnInit("**开启初始化节点命令池**");
                ICommandPoolBuilder builder = new CommandPoolBuilder();
                builder.BuildCommandPool();
                builder.OnInitEvent += builder_OnInitEvent;
                OnInit("**初始化节点命令池完成:本地节点命令池数量:" + CommandPoolManager.CreateInstance().GetList().Count + "**");

                OnInit("**开启异步请求命令队列初始化任务池线程**");
                //初始化任务池
                TaskPoolBuilder.RunBuildAsync();//异步初始化任务池
                OnInit("**异步初始化任务池线程已开启**");

                TaskPoolBuilder.OnInitTaskPoolEvent += TaskPoolBuilder_OnInitTaskPoolEvent;//记录初始化任务池事件
                OnInit("**开始初始化监控线程**");
                //初始化监控信息
                OnInit("**监控线程已开启**");
                OnInit("节点启动成功");
            }
            catch (Exception ex)
            {
                OnInit("节点启动失败:" + JsonConvert.SerializeObject(ex));
            }
            finally
            {
                OnInit("----------------------" + DateTime.Now + ":初始化节点结束-----------------------------------------");
            }
        }