Esempio n. 1
0
    def frameworkMessage(self, driver, executorId, slaveId, message):
        """
          Invoked when an executor sends a message. These messages are best
          effort; do not expect a framework message to be retransmitted in any
          reliable fashion.
        """
        o = json.loads(message)

        if executorId.value == crawlExecutor.executor_id.value:
            result = results.CrawlResult(o['taskId'], o['url'], o['links'])
            #
            # TODO
            #

        elif executorId.value == renderExecutor.executor_id.value:
            result = results.RenderResult(o['taskId'], o['url'], o['imageUrl'])
Esempio n. 2
0
        def run_task():
            print "Running render task %s" % task.task_id.value
            update = mesos_pb2.TaskStatus()
            update.task_id.value = task.task_id.value
            update.state = mesos_pb2.TASK_RUNNING
            driver.sendStatusUpdate(update)

            url = task.data

            # 1) Render picture to hash file name.
            destination = uuid.uuid4().hex + ".png"
            if call(["phantomjs", "render.js", url, destination]) != 0:
                print "Could not render " + url
                return

            if not self.local:
              # 2) Upload to s3.
              remote_destination = "s3://downloads.mesosphere.io/demo/artifacts/" + destination
              print "Uploading image to " + remote_destination
              if call(["s3cmd", "put", destination, remote_destination]) != 0:
                  print "Could not upload " + destination + " to " + remote_destination
                  return
            else:
              remote_destination = "file:///" + os.getcwd() + "/" + destination


            # 3) Announce render result to framework.
            print "Announcing render result"
            res = results.RenderResult(
                task.task_id.value,
                url,
                remote_destination
            )
            message = repr(res)
            driver.sendFrameworkMessage(message)

            print "Sending status update for task %s" % task.task_id.value
            update = mesos_pb2.TaskStatus()
            update.task_id.value = task.task_id.value
            update.state = mesos_pb2.TASK_FINISHED
            driver.sendStatusUpdate(update)
            print "Sent status update for task %s" % task.task_id.value
            return
Esempio n. 3
0
    def frameworkMessage(self, driver, executorId, slaveId, message):
        o = json.loads(message)

        if executorId.value == crawlExecutor.executor_id.value:
            result = results.CrawlResult(o['taskId'], o['url'], o['links'])
            for link in result.links:
                edge = (result.url, link)
                print "Appending [%s] to crawl results" % repr(edge)
                self.crawlResults.add(edge)
                if not link in self.processedURLs:
                    print "Enqueueing [%s]" % link
                    self.crawlQueue.append(link)
                    self.renderQueue.append(link)
                    self.processedURLs.add(link)

        elif executorId.value == renderExecutor.executor_id.value:
            result = results.RenderResult(o['taskId'], o['url'], o['imageUrl'])
            print "Appending [%s] to render results" % repr(
                (result.url, result.imageUrl))
            self.renderResults[result.url] = result.imageUrl
Esempio n. 4
0
    def frameworkMessage(self, driver, executorId, slaveId, message):
        o = json.loads(message)

        if executorId.value == crawlExecutor.executor_id.value:
            result = results.CrawlResult(o['taskId'], o['url'], o['links'])
            for link in result.links:
                edge = (result.url, link)
                print "Appending [%s] to crawl results" % repr(edge)
                self.crawlResults.add(edge)
                if not self.renderLimitReached and self.maxRenderTasks > 0 and \
                  self.maxRenderTasks <= len(self.processedURLs):
                    print "Render task limit (%d) reached" % self.maxRenderTasks
                    self.renderLimitReached = True
                if not link in self.processedURLs and not self.renderLimitReached:
                    print "Enqueueing [%s]" % link
                    self.crawlQueue.append(link)
                    self.renderQueue.append(link)
                    self.processedURLs.add(link)

        elif executorId.value == renderExecutor.executor_id.value:
            result = results.RenderResult(o['taskId'], o['url'], o['imageUrl'])
            print "Appending [%s] to render results" % repr(
                (result.url, result.imageUrl))
            self.renderResults[result.url] = result.imageUrl