Coder Social home page Coder Social logo

crawler's People

Watchers

 avatar  avatar

crawler's Issues

La etapa de filtrado de errores hace drop de peticiones correctas

En caso de que la etapa sufra un reinicio y su estado vuelva a ser el inicial, si llega una respuesta http correcta desde el Downloader y no está registrada en el estado de la etapa, esta se pierde.

Este es el comportamiento normal si la petición es erronea y no está guardada en el estado de la etapa,: eliminarla del pipeline para que sea reintentada por el proceso master ya que al no estar registrada en la etapa, no puede reintentarse desde este punto.

Refactorizar test

Los test deben de ser independientes. Con akka-testkit todos los test comparten el mismo mailbox. Una posible solución es utilizar una TestProbe diferente para cada test.

Control de profundiddad

Se implementará como una etapa de proceso en las pipelines que filtre las peticiones que superen la profundidad configurada.

Refactorizar el protocolo

Definir correctamente el protocolo de mensajes de forma que sea fácilmente reutilizable y extensible.

Guardar errores permantentes

Manager deberá enviar a Master las tareas con errores que no son recuperables (Ej: la petición HTTP ha superado el máximo de reintentos) para evitar que se vuelvan a enviar.

Mejorar el parseo de HTML

El parser SAX por defecto solo funciona con documentos HTML que sean XMLs bien formados.

Para tratar con HTML "del mundo real", habrá que utilizar otra implementación.

Crear ejecutable

Crear un ejecutable por linea de comandos que muestre la funcionalidad básica del sistema.

Implementar pipelines

Implementar pipelines que permitan añadir etapas de procesado para las peticiones/respuestas así como los resultados del crawler.

Problema de rendimiento

Con la configuración actual, el rendimiento es muy bajo, sin embargo el uso CPU se dispara al 100% en muy poco tiempo.

A veces el crawler se queda bloqueado, pero el uso de CPU continúa al 100%.

No se puede ejecutar la Typesafe Console

El main funciona, pero al ejecutar la consola desde sbt lanza un error.
Esto funcionaba en 5a3ee8b y el error aparece por primera vez en a97dc22.

[error] (run-main) org.jboss.netty.channel.ChannelException: Failed to bind to: /127.0.0.1:2551
org.jboss.netty.channel.ChannelException: Failed to bind to: /127.0.0.1:2551
    at org.jboss.netty.bootstrap.ServerBootstrap.bind(ServerBootstrap.java:272)
    at akka.remote.transport.netty.NettyTransport$$anonfun$listen$1.apply(NettyTransport.scala:391)
    at akka.remote.transport.netty.NettyTransport$$anonfun$listen$1.apply(NettyTransport.scala:388)
    at scala.util.Success$$anonfun$map$1.apply(Try.scala:206)
    at scala.util.Try$.apply(Try.scala:161)
    at scala.util.Success.map(Try.scala:206)
    at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)
    at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)
    at com.typesafe.atmos.trace.FutureCallback.apply(FutureTrace.scala:136)
    at com.typesafe.atmos.trace.FutureCallback.apply(FutureTrace.scala:127)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
    at akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.processBatch$1(BatchingExecutor.scala:67)
    at akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.apply$mcV$sp(BatchingExecutor.scala:82)
    at akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.apply(BatchingExecutor.scala:59)
    at akka.dispatch.BatchingExecutor$Batch$$anonfun$run$1.apply(BatchingExecutor.scala:59)
    at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72)
    at akka.dispatch.BatchingExecutor$Batch.run(BatchingExecutor.scala:58)
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:42)
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.net.BindException: La dirección ya se está usando
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:444)
    at sun.nio.ch.Net.bind(Net.java:436)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at org.jboss.netty.channel.socket.nio.NioServerBoss$RegisterTask.run(NioServerBoss.java:193)
    at org.jboss.netty.channel.socket.nio.AbstractNioSelector.processTaskQueue(AbstractNioSelector.java:366)
    at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:290)
    at org.jboss.netty.channel.socket.nio.NioServerBoss.run(NioServerBoss.java:42)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.