From 30a067bb9029a41f9db081783c915cb0356c8509 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Brage=20Skj=C3=B8nborg?= Date: Wed, 21 Jan 2026 20:11:52 +0100 Subject: [PATCH] Added missing task poller in coordinator --- .../coordinator/EventPoller.kt | 2 +- .../mediaprocessing/coordinator/TaskPoller.kt | 66 +++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/TaskPoller.kt diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/EventPoller.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/EventPoller.kt index f857d4c4..5cef9009 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/EventPoller.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/EventPoller.kt @@ -14,7 +14,7 @@ import org.springframework.stereotype.Component @Component -class PollerAdministrator( +class EventPollerAdministrator( private val eventPoller: EventPoller ) : SmartLifecycle { diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/TaskPoller.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/TaskPoller.kt new file mode 100644 index 00000000..953521f0 --- /dev/null +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/TaskPoller.kt @@ -0,0 +1,66 @@ +package no.iktdev.mediaprocessing.coordinator + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import no.iktdev.eventi.models.Event +import no.iktdev.eventi.models.store.TaskStatus +import no.iktdev.eventi.tasks.TaskPollerImplementation +import no.iktdev.eventi.tasks.TaskReporter +import no.iktdev.mediaprocessing.shared.database.stores.EventStore +import no.iktdev.mediaprocessing.shared.database.stores.TaskStore +import org.springframework.boot.ApplicationArguments +import org.springframework.boot.ApplicationRunner +import org.springframework.stereotype.Component +import org.springframework.stereotype.Service +import java.util.* + +@Component +class TaskPollerAdministrator( + private val taskPoller: TaskPoller, +): ApplicationRunner { + override fun run(args: ApplicationArguments?) { + CoroutineScope(Dispatchers.Default).launch { + taskPoller.start() + } + } +} + + +@Service +class TaskPoller( + private val reporter: TaskReporter, +) : TaskPollerImplementation( + taskStore = TaskStore, + reporterFactory = { reporter } // én reporter brukes for alle tasks +) { + +} + + +@Component +class DefaultTaskReporter() : TaskReporter { + override fun markClaimed(taskId: UUID, workerId: String) { + TaskStore.claim(taskId, workerId) + } + + override fun updateLastSeen(taskId: UUID) { + TaskStore.heartbeat(taskId) + } + + override fun markConsumed(taskId: UUID) { + TaskStore.markConsumed(taskId, TaskStatus.Completed) + } + + override fun updateProgress(taskId: UUID, progress: Int) { + // Not to be implemented for this application + } + + override fun log(taskId: UUID, message: String) { + // Not to be implemented for this application + } + + override fun publishEvent(event: Event) { + EventStore.persist(event) + } +} \ No newline at end of file