示例#1
0
        public void FrameworkMessage(ISchedulerDriver driver, ExecutorID executorId, SlaveID slaveId, byte[] data)
        {
            var message = JsonHelper.Deserialize<Message> (data);
            switch (message.Type) {
            case "CrawlResult":
                var crawlResult = JsonHelper.Deserialize<CrawlResultMessage> (message.Body);
                Console.WriteLine ($"Framework message <CrawlResult>: got {crawlResult.Links.Length} links from url '{crawlResult.Url}'.");

                foreach (var link in crawlResult.Links) {
                    if (_crawled.Contains (link))
                        continue;

                    _crawlQueue.Enqueue (link);
                    _renderQueue.Enqueue (link);
                }

                // update edges: url -> links
                var edges = _crawlResults.GetOrAdd (crawlResult.Url, x => new List<string> ());
                edges.AddRange (crawlResult.Links);

                // empty edge list for links
                foreach (var link in crawlResult.Links)
                    _crawlResults.GetOrAdd (link, x => new List<string> ());
                break;
            case "RenderResult":
                var renderResult = JsonHelper.Deserialize<RenderResultMessage> (message.Body);
                Console.WriteLine ($"Framework message <RenderResult>: saved '{renderResult.FileName}' for url '{renderResult.Url}'.");

                _renderResults [renderResult.Url] = renderResult.FileName;
                break;
            default:
                Console.WriteLine ($"Unrecognized message type: '{message.Type}'");
                break;
            }
        }
示例#2
0
 public void Error(ISchedulerDriver driver, string message)
 {
     Console.WriteLine($"Error: '{message}'.");
 }
示例#3
0
 public void ExecutorLost(ISchedulerDriver driver, ExecutorID executorId, SlaveID slaveId, int status)
 {
 }
示例#4
0
        public void StatusUpdate(ISchedulerDriver driver, TaskStatus status)
        {
            if (status.state.IsTerminal())
            {
                Console.WriteLine($"Status update: task '{status.task_id.value}' has terminated with state '{status.state}'.");
                var finishedTasksCount = Interlocked.Increment(ref _finishedTasksCount);

                if (finishedTasksCount == MaxTasksToRun)
                {
                    Console.WriteLine("Reached the max number of tasks to run. Stopping...");

                    var dotWritePath = Path.Combine(_outputDir, "result.dot");
                    DotHelper.Write(dotWritePath, _crawlResults, _renderResults);
                    driver.Stop();
                }
            }
            else
            {
                Console.WriteLine($"Status update: task '{status.task_id.value}' is in state '{status.state}'.");
            }
        }
示例#5
0
 public void Disconnected(ISchedulerDriver driver)
 {
 }
示例#6
0
 public void SlaveLost(ISchedulerDriver driver, SlaveID slaveId)
 {
 }
示例#7
0
        public void ResourceOffers(ISchedulerDriver driver, IEnumerable<Offer> offers)
        {
            foreach (var offer in offers)
            {
                var tasks = new List<TaskInfo>();
                var resourcesCounter = new ResourcesCounter(offer);
                bool done;
                do
                {
                    done = true;

                    string renderUrl;
                    if (resourcesCounter.HasRenderTaskResources() && _renderQueue.TryDequeue(out renderUrl))
                    {
                        tasks.Add(GetRenderTaskInfo(offer, ++_launchedTasks, renderUrl));
                        resourcesCounter.SubstractRenderResources();
                        done = false;
                    }

                    string crawlUrl;
                    if (resourcesCounter.HasCrawlTaskResources() && _crawlQueue.TryDequeue(out crawlUrl))
                    {
                        tasks.Add(GetCrawlTaskInfo(offer, ++_launchedTasks, crawlUrl));
                        resourcesCounter.SubstractCrawlResources();
                        _crawled.Add(crawlUrl);
                        done = false;
                    }
                } while (!done);

                if (tasks.Any ()) {
                    driver.LaunchTasks (new[] { offer.id }, tasks);
                }
                else
                    driver.DeclineOffer(offer.id);
            }
        }
示例#8
0
 public void Reregistered(ISchedulerDriver driver, MasterInfo masterInfo)
 {
 }
示例#9
0
 public void Registered(ISchedulerDriver driver, FrameworkID frameworkId, MasterInfo masterInfo)
 {
     Console.WriteLine($"Registered with Mesos master. FrameworkId='{frameworkId.value}'.");
 }
示例#10
0
 public void OfferRescinded(ISchedulerDriver driver, OfferID offerId)
 {
 }