app/App.scala (47 lines of code) (raw):

import com.gu.contentapi.sanity._ import com.gu.contentapi.sanity.support.{CloudWatchReporter, ElkFriendlyReporter, FrequentScheduledTestFailureHandler, InfrequentScheduledTestsFailureHandler} import com.gu.contentapi.sanity.utils.QuartzScheduler import org.joda.time.DateTime import org.scalatest.Args import org.slf4j.LoggerFactory import scala.concurrent.Future import scala.concurrent.duration._ import scala.language.postfixOps import play.api._ import play.api.inject.ApplicationLifecycle import play.api.libs.ws.WSClient class App( appLifecycle: ApplicationLifecycle, cloudWatchReporter: CloudWatchReporter, wsClient: WSClient) { private val logger = LoggerFactory.getLogger(getClass) private val reporter = new ElkFriendlyReporter() def start = { logger.info("Application has started") QuartzScheduler.start() QuartzScheduler schedule("Frequent Tests", runFrequentTests(cloudWatchReporter)) every (30 seconds) QuartzScheduler schedule("Infrequent Tests", runInfrequentTests(cloudWatchReporter)) at "0 0 9 ? * MON-FRI *" appLifecycle.addStopHook { () => logger.info("Application shutdown...") QuartzScheduler.stop() wsClient.close() Future.successful(()) } } def runFrequentTests(cloudWatchReporter: CloudWatchReporter): Unit = { logger.info(s"=== Starting frequent tests at ${new DateTime()} ===") val context = Context(testFailureHandler = new FrequentScheduledTestFailureHandler(wsClient), cloudWatchReporter = cloudWatchReporter) val suites = MetaSuites.prodFrequent(context, wsClient) suites.foreach(_.run(None, Args(reporter))) logger.info(s"=== Frequent tests finished at ${new DateTime()} ===") cloudWatchReporter.reportTestRunComplete() } def runInfrequentTests(cloudWatchReporter: CloudWatchReporter): Unit = { logger.info(s"=== Starting infrequent tests at ${new DateTime()} ===") val context = Context(testFailureHandler = new InfrequentScheduledTestsFailureHandler(wsClient), cloudWatchReporter = cloudWatchReporter) val suites = MetaSuites.prodInfrequent(context, wsClient) suites.foreach(_.run(None, Args(reporter))) logger.info(s"=== Infrequent tests finished at ${new DateTime()} ===") cloudWatchReporter.reportTestRunComplete() } }