socialnetworknews

This will basicly get a paper.li OpenSource clone at some point - DEPRECATED NOT USED ANYMORE
git clone git://archive.git.mtrnord.blog/SocialNetworkNews/socialnetworknews.git
Log | Files | Refs | README | LICENSE

commit 96239b634565ff4d0431512a567d63039e4ae407
parent 9585e7f5dd135703518ed91be41ed85a27d8b96a
Author: MTRNord <mtrnord1@gmail.com>
Date:   Mon,  5 Feb 2018 22:18:35 +0100

Prepare News Generator

Signed-off-by: MTRNord <mtrnord1@gmail.com>

Diffstat:
Mbuild.sbt | 5++++-
Msrc/main/resources/application_example.conf | 6++++++
Msrc/main/scala/Main.scala | 2++
Asrc/main/scala/generator/GenerateNewsPaper.scala | 10++++++++++
Asrc/main/scala/generator/Scheduler.scala | 37+++++++++++++++++++++++++++++++++++++
Msrc/main/scala/webServer/WebServer.scala | 6++----
6 files changed, 61 insertions(+), 5 deletions(-)

diff --git a/build.sbt b/build.sbt @@ -22,13 +22,16 @@ mainClass in (Compile, packageBin) := Some("Main") mainClass in (Compile, run) := Some("Main") resolvers += Resolver.sonatypeRepo("snapshots") +resolvers += DefaultMavenRepository libraryDependencies ++= Seq( "com.danielasfregola" %% "twitter4s" % "5.5-SNAPSHOT", "com.typesafe" % "config" % "1.3.2", "ch.qos.logback" % "logback-classic" % "1.1.9", "com.typesafe.slick" %% "slick" % "3.2.1", "com.typesafe.slick" %% "slick-hikaricp" % "3.2.1", - "com.github.tototoshi" %% "scala-csv" % "1.3.5" + "com.github.tototoshi" %% "scala-csv" % "1.3.5", + "org.quartz-scheduler" % "quartz" % "2.3.0", + "org.quartz-scheduler" % "quartz-jobs" % "2.3.0", ) enablePlugins(JavaAppPackaging) scalacOptions in (Compile,doc) := Seq("-groups", "-implicits") diff --git a/src/main/resources/application_example.conf b/src/main/resources/application_example.conf @@ -14,6 +14,12 @@ twitter { "MTRNord/freifunknews" ] } + +generator { + # use www.cronmaker.com + cronString = "0 0 4 1/1 * ? *" +} + akka { } \ No newline at end of file diff --git a/src/main/scala/Main.scala b/src/main/scala/Main.scala @@ -75,6 +75,8 @@ object Main extends App { stream.fetchTweets webServer.WebServer.main() + + generator.Scheduler.main() case Failure(err) => println(err.toString) } diff --git a/src/main/scala/generator/GenerateNewsPaper.scala b/src/main/scala/generator/GenerateNewsPaper.scala @@ -0,0 +1,10 @@ +package generator + +import org.quartz.{Job, JobExecutionContext} + +class GenerateNewsPaper extends Job { + override def execute(context: JobExecutionContext): Unit = { + //TODO parse CSV from yesterday and generate Feed + println("unimplemented") + } +} diff --git a/src/main/scala/generator/Scheduler.scala b/src/main/scala/generator/Scheduler.scala @@ -0,0 +1,37 @@ +package generator + +import com.typesafe.config.{Config, ConfigFactory} +import org.quartz.CronScheduleBuilder.cronSchedule +import org.quartz.{CronTrigger, SchedulerException} +import org.quartz.JobBuilder.newJob +import org.quartz.TriggerBuilder.newTrigger +import org.quartz.impl.StdSchedulerFactory + + +object Scheduler { + val conf: Config = ConfigFactory.load() + + def main(): Unit = { + val cronString = conf.getString("generator.cronString") + try { // Grab the Scheduler instance from the Factory + val sf = new StdSchedulerFactory + val scheduler = sf.getScheduler + // and start it off + scheduler.start() + + val job = newJob(classOf[GenerateNewsPaper]).withIdentity("generateNewsPaper", "generator").build + + // Trigger the job to run now, and then repeat every 40 seconds + val trigger: CronTrigger = newTrigger.withIdentity("daily", "generator").withSchedule(cronSchedule(cronString)).build + + // Tell quartz to schedule the job using our trigger + scheduler.scheduleJob(job, trigger) + + scheduler.shutdown() + } catch { + case se: SchedulerException => + se.printStackTrace() + } + } + +} diff --git a/src/main/scala/webServer/WebServer.scala b/src/main/scala/webServer/WebServer.scala @@ -2,12 +2,11 @@ package webServer import akka.actor.ActorSystem import akka.http.scaladsl.Http -import akka.http.scaladsl.model._ import akka.http.scaladsl.model.HttpMethods._ +import akka.http.scaladsl.model._ import akka.stream.ActorMaterializer import scala.concurrent.ExecutionContextExecutor -import scala.io.StdIn object WebServer { def main() { @@ -40,8 +39,7 @@ object WebServer { val bindingFuture = Http().bindAndHandleSync(requestHandler, "localhost", 8080) - println(s"Server online at http://localhost:8080/\nPress RETURN to stop...") - StdIn.readLine() // let it run until user presses return + println(s"Server online at http://localhost:8080/") bindingFuture .flatMap(_.unbind()) // trigger unbinding from the port .onComplete(_ => system.terminate()) // and shutdown when done