From 13a55508d028bae8917fb6e2462267bf757b9a0f Mon Sep 17 00:00:00 2001 From: Seil0 Date: Sun, 2 Jun 2019 16:55:36 +0200 Subject: [PATCH] run the mensamenu update task every hour --- build.gradle | 2 +- .../mosad/thecitadelofricks/APIController.kt | 36 +++++++++++++------ .../thecitadelofricks/CacheController.kt | 32 ++++++++++------- 3 files changed, 46 insertions(+), 24 deletions(-) diff --git a/build.gradle b/build.gradle index d4d059e..6c12759 100644 --- a/build.gradle +++ b/build.gradle @@ -38,4 +38,4 @@ compileTestKotlin { } group 'org.mosad' -version '1.1.2' +version '1.1.3' diff --git a/src/main/kotlin/org/mosad/thecitadelofricks/APIController.kt b/src/main/kotlin/org/mosad/thecitadelofricks/APIController.kt index d1967af..66359a2 100644 --- a/src/main/kotlin/org/mosad/thecitadelofricks/APIController.kt +++ b/src/main/kotlin/org/mosad/thecitadelofricks/APIController.kt @@ -42,7 +42,7 @@ class APIController { private val logger: Logger = LoggerFactory.getLogger(APIController::class.java) private val cache = CacheController() - private val softwareVersion = "1.1.2" + private val softwareVersion = "1.1.3" private val apiVersion = "1.1.1" private val startTime = System.currentTimeMillis() / 1000 @@ -83,9 +83,31 @@ class APIController { @RequestParam(value = "courseName", defaultValue = "AI4") courseName: String, @RequestParam(value = "week", defaultValue = "0") week: Int ): HashSet { - val lessonSubjectList = ArrayList() logger.info("lessonSubjectList request at ${LocalDateTime.now()}!") requestCount++ + return getLessonSubjectList(courseName, week) + } + + @RequestMapping("/lesson") + fun lesson( + @RequestParam(value = "courseName", defaultValue = "AI4") courseName: String, + @RequestParam(value = "lessonSubject", defaultValue = "Mathematik 4") lessonSubject: String, + @RequestParam(value = "week", defaultValue = "0") week: Int + ): ArrayList { + logger.info("lesson request at ${LocalDateTime.now()}!") + requestCount++ + return getLesson(courseName, lessonSubject, week) + } + + @RequestMapping("/status") + fun status(): Status { + return getStatus() + } + + // non direct api functions + + private fun getLessonSubjectList(courseName: String, week: Int): HashSet { + val lessonSubjectList = ArrayList() // get every lesson subject for the given week val flatMap = cache.getTimetable(courseName, week).timetable.days.flatMap { it.timeslots.asIterable() } @@ -96,12 +118,7 @@ class APIController { return HashSet(lessonSubjectList) } - @RequestMapping("/lesson") - fun lesson( - @RequestParam(value = "courseName", defaultValue = "AI4") courseName: String, - @RequestParam(value = "lessonSubject", defaultValue = "Mathematik 4") lessonSubject: String, - @RequestParam(value = "week", defaultValue = "0") week: Int - ): ArrayList { + private fun getLesson(courseName: String, lessonSubject: String, week: Int): ArrayList { val lessonList = ArrayList() // get all lessons from the weeks timetable @@ -119,8 +136,7 @@ class APIController { return lessonList } - @RequestMapping("/status") - fun status(): Status { + private fun getStatus(): Status { val currentTime = System.currentTimeMillis() / 1000 val minutes = (currentTime - startTime) % 3600 / 60 val hours = (currentTime - startTime) % 86400 / 3600 diff --git a/src/main/kotlin/org/mosad/thecitadelofricks/CacheController.kt b/src/main/kotlin/org/mosad/thecitadelofricks/CacheController.kt index d49f4ea..8534851 100644 --- a/src/main/kotlin/org/mosad/thecitadelofricks/CacheController.kt +++ b/src/main/kotlin/org/mosad/thecitadelofricks/CacheController.kt @@ -84,10 +84,10 @@ class CacheController { } /** - * this function updates the courses list + * this function updates the courseList * during the update process the old data will be returned for a API request */ - private fun asyncUpdateCourses() = GlobalScope.launch { + private fun asyncUpdateCourseList() = GlobalScope.launch { val result = CourseListParser().getCourseLinks(courseListURL) if (result != null) { courseList = CourseList(CourseMeta(System.currentTimeMillis() / 1000, result.size), result) @@ -155,26 +155,32 @@ class CacheController { logger.info("init updates successful") } - // TODO rework! + /** + * doesn't account the change between winter and summer time! + * + */ private fun scheduledUpdates() { val currentTime = System.currentTimeMillis() - val delay24h = (86400000 - ((currentTime + 3600000) % 86400000)) + 60000 - val delay3h = (10800000 - ((currentTime + 3600000) % 10800000)) + 60000 + val initDelay24h = (86400000 - ((currentTime + 3600000) % 86400000)) + 60000 + val initDelay3h = (10800000 - ((currentTime + 3600000) % 10800000)) + 60000 + val initDelay1h = (3600000 - ((currentTime + 3600000) % 10800000)) + 60000 - // update courses every 24 hours (time in ms) - Timer().scheduleAtFixedRate(delay24h, 86400000) { - asyncUpdateCourses() - } + println(initDelay1h / 1000) - // update courses every 3 hours (time in ms) - Timer().scheduleAtFixedRate(delay3h, 10800000) { - asyncUpdateMensa() + // update courseList every 24 hours (time in ms) + Timer().scheduleAtFixedRate(initDelay24h, 86400000) { + asyncUpdateCourseList() } // update all already existing timetables every 3 hours (time in ms) - Timer().scheduleAtFixedRate(delay3h, 10800000) { + Timer().scheduleAtFixedRate(initDelay3h, 10800000) { asyncUpdateTimetables() } + + // update courses every hour (time in ms) + Timer().scheduleAtFixedRate(initDelay1h, 3600000) { + asyncUpdateMensa() + } } } \ No newline at end of file