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:
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