Example #1
0
        public void Report(SpiderStatus status)
        {
            var tmp = new
            {
                Message = new
                {
                    status.Error,
                    status.Left,
                    Status = status.Code,
                    status.Success,
                    Thread = status.ThreadNum,
                    status.Total
                },
                Name = status.Identity,
                status.Machine,
                status.UserId,
                status.TaskGroup,
                status.Timestamp
            };

            _postCounter.Inc();
            var task = _client.PostAsync(_server, new StringContent(JsonConvert.SerializeObject(tmp), Encoding.UTF8, "application/json"));

            task.ContinueWith(t =>
            {
                _postCounter.Dec();
            });
        }
Example #2
0
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            if (Status == SpiderStatus.Running)
            {
                _logger.LogWarning("Spider is running, can not run again!");
                return;
            }
            Status = SpiderStatus.Running;
            await Task.Factory.StartNew(async() =>
            {
                while (!cancellationToken.IsCancellationRequested)
                {
                    await Task.Delay(TimeSpan.FromMilliseconds(10));
                }
                _cancellationTokenSource.Cancel();
            });

            while (Status == SpiderStatus.Running)
            {
                var request = await Scheduler.PollAsync();

                _ = Task.Factory.StartNew(async r =>
                {
                    var oRequest = r as IRequestTask;
                    await FetchService.FetchAsync(oRequest, _cancellationTokenSource.Token);
                }, request);
            }
        }
Example #3
0
 public void Stop()
 {
     if (stat == SpiderStatus.Running)
     {
         stat = SpiderStatus.Stop;
         Debug.WriteLine("Spider " + GetGuid() + " stop success!");
     }
 }
Example #4
0
        private void Form1_Load(object sender, EventArgs e)
        {
            string host = ConfigurationManager.AppSettings["redishost"];
            string pass = ConfigurationManager.AppSettings["redishostpass"];

            if (!string.IsNullOrEmpty(host))
            {
                manager = new RedisSchedulerManager(host, pass);
            }

            Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    if ((!IsDisposed || IsHandleCreated || this.components != null))
                    {
                        Invoke(new Action(RefreshTask));
                    }
                    Thread.Sleep(60000);
                }
            });

            Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    if ((!IsDisposed || IsHandleCreated || this.components != null))
                    {
                        Invoke(new Action(() =>
                        {
                            if (!string.IsNullOrEmpty(_selectedIdentify))
                            {
                                SpiderStatus spiderStatus = manager.GetTaskStatus(_selectedIdentify);

                                this.tbErrorPageCount.Text      = spiderStatus.ErrorPageCount.ToString();
                                this.tbLeftRequestCount.Text    = spiderStatus.LeftPageCount.ToString();
                                this.tbTotalRequestCount.Text   = spiderStatus.TotalPageCount.ToString();
                                this.tbPagePerSecond.Text       = spiderStatus.PagePerSecond.ToString(CultureInfo.InvariantCulture);
                                this.tbRunningProcessCount.Text = spiderStatus.AliveThreadCount.ToString();
                                this.tbProcessCount.Text        = spiderStatus.ThreadCount.ToString();
                                this.tbStartTime.Text           = spiderStatus.StartTime.ToString(CultureInfo.InvariantCulture);
                                this.tbEndTime.Text             = spiderStatus.EndTime.ToString(CultureInfo.InvariantCulture);
                                this.tbTaskStatus.Text          = spiderStatus.Status;
                            }
                            else
                            {
                                SentEmptyInfo();
                            }
                        }));
                    }
                    Thread.Sleep(1000);
                }
            });
        }
Example #5
0
        public Task StopAsync()
        {
            if (Status == SpiderStatus.Stopped)
            {
                _logger.LogWarning("Spider stopped, can not stop again!");
                return(Task.CompletedTask);
            }

            Status = SpiderStatus.Stopped;
            _cancellationTokenSource.Cancel();

            Thread.Sleep(2000);

            return(Task.CompletedTask);
        }
Example #6
0
 private void CheckRunningStat()
 {
     while (true)
     {
         var statNow = stat;
         if (statNow == SpiderStatus.Running)
         {
             throw new Exception("Spider is already running!");
         }
         if (stat == statNow)
         {
             stat = SpiderStatus.Running;
             break;
         }
     }
 }
Example #7
0
 /// <summary>
 ///
 /// </summary>
 public void Run()
 {
     CheckRunningStat();
     InitComponent();
     Debug.WriteLine($"Spider {GetGuid()} started!");
     while (!(stat == SpiderStatus.Running))
     {
         var request = scheduler.Poll(this);
         if (request == null)
         {
             WaitNewUrl();
         }
         else
         {
             Task.Run(() =>
             {
                 try
                 {
                     ProcessRequest(request);
                     OnSuccess(request);
                 }
                 catch (Exception e)
                 {
                     OnError(request);
                     Debug.WriteLine($"process request {request} error : {e.Message}");
                 }
                 finally
                 {
                     pageCount++;
                     SignalNewUrl();
                 }
             });
         }
     }
     stat = SpiderStatus.Stop;
     if (destroyWhenExit == true)
     {
         Close();
     }
     Debug.WriteLine($"Spider {GetGuid()} closed! {pageCount} pages downloaded.");
 }
Example #8
0
        /// <summary>
        /// 运行
        /// </summary>
        public async Task Run(params string[] args)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            _serviceList.ForEach(action =>
            {
                action(services);
            });

            services.AddSingleton(
                new FreeSql.FreeSqlBuilder()
                .UseConnectionString(FreeSql.DataType.MySql, _config.GetSection("mysql").Value)
                .UseAutoSyncStructure(true).Build()
                );
            services.AddScoped <ITask, DbStorage>();
            services.AddScoped <ICrawlerSelector, CrawlerSelector>();
            serviceProvider = services.BuildServiceProvider();
            status          = SpiderStatus.Running;
            Log.Information("爬虫开始启动");
            this.SetSpeed();
            await StartSpider();
            await WaitForExisting();
        }
 public void Report(SpiderStatus spider)
 {
     throw new NotImplementedException();
 }
Example #10
0
 private static void Spider_OnStatusChanged(Spider arg1, SpiderStatus arg2)
 {
     Console.WriteLine("status changed : " + arg2.ToString());
 }