This commit is contained in:
bskjon 2024-06-30 00:06:47 +02:00
parent ddfd2a0e5d
commit f1de123f9b
12 changed files with 57 additions and 32 deletions

View File

@ -110,6 +110,12 @@ jobs:
username: ${{ secrets.DOCKER_HUB_NAME }} username: ${{ secrets.DOCKER_HUB_NAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }} password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Extract version from build.gradle.kts
id: extract_version
run: |
VERSION=$(grep '^version\s*=\s*\".*\"' .\apps\processer\build.gradle.kts | sed 's/^version\s*=\s*\"\(.*\)\"/\1/')
echo "::set-output name=version::$VERSION
- name: Build and push Docker image - name: Build and push Docker image
uses: docker/build-push-action@v2 uses: docker/build-push-action@v2
with: with:
@ -117,6 +123,7 @@ jobs:
file: ./dockerfiles/DebianJavaFfmpeg file: ./dockerfiles/DebianJavaFfmpeg
build-args: build-args:
MODULE_NAME=processer MODULE_NAME=processer
APP_VERSION=${{ steps.extract_version.outputs.version }}
push: true push: true
tags: | tags: |
bskjon/mediaprocessing-processer:v2 bskjon/mediaprocessing-processer:v2
@ -158,6 +165,12 @@ jobs:
username: ${{ secrets.DOCKER_HUB_NAME }} username: ${{ secrets.DOCKER_HUB_NAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }} password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Extract version from build.gradle.kts
id: extract_version
run: |
VERSION=$(grep '^version\s*=\s*\".*\"' .\apps\converter\build.gradle.kts | sed 's/^version\s*=\s*\"\(.*\)\"/\1/')
echo "::set-output name=version::$VERSION
- name: Build and push Docker image - name: Build and push Docker image
uses: docker/build-push-action@v2 uses: docker/build-push-action@v2
with: with:
@ -165,6 +178,7 @@ jobs:
file: ./dockerfiles/DebianJava file: ./dockerfiles/DebianJava
build-args: build-args:
MODULE_NAME=converter MODULE_NAME=converter
APP_VERSION=${{ steps.extract_version.outputs.version }}
push: true push: true
tags: | tags: |
bskjon/mediaprocessing-converter:v2 bskjon/mediaprocessing-converter:v2
@ -206,6 +220,12 @@ jobs:
username: ${{ secrets.DOCKER_HUB_NAME }} username: ${{ secrets.DOCKER_HUB_NAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }} password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Extract version from build.gradle.kts
id: extract_version
run: |
VERSION=$(grep '^version\s*=\s*\".*\"' .\apps\coordinator\build.gradle.kts | sed 's/^version\s*=\s*\"\(.*\)\"/\1/')
echo "::set-output name=version::$VERSION
- name: Build and push Docker image - name: Build and push Docker image
uses: docker/build-push-action@v2 uses: docker/build-push-action@v2
with: with:
@ -213,6 +233,7 @@ jobs:
file: ./dockerfiles/DebianJavaFfmpeg file: ./dockerfiles/DebianJavaFfmpeg
build-args: build-args:
MODULE_NAME=coordinator MODULE_NAME=coordinator
APP_VERSION=${{ steps.extract_version.outputs.version }}
push: true push: true
tags: | tags: |
bskjon/mediaprocessing-coordinator:v2 bskjon/mediaprocessing-coordinator:v2

View File

@ -1,10 +1,12 @@
package no.iktdev.mediaprocessing.converter package no.iktdev.mediaprocessing.converter
import mu.KotlinLogging
import no.iktdev.exfl.coroutines.CoroutinesDefault import no.iktdev.exfl.coroutines.CoroutinesDefault
import no.iktdev.exfl.coroutines.CoroutinesIO import no.iktdev.exfl.coroutines.CoroutinesIO
import no.iktdev.exfl.observable.Observables import no.iktdev.exfl.observable.Observables
import no.iktdev.mediaprocessing.shared.common.DatabaseEnvConfig import no.iktdev.mediaprocessing.shared.common.DatabaseEnvConfig
import no.iktdev.mediaprocessing.shared.common.datasource.MySqlDataSource import no.iktdev.mediaprocessing.shared.common.datasource.MySqlDataSource
import no.iktdev.mediaprocessing.shared.common.getAppVersion
import no.iktdev.mediaprocessing.shared.common.persistance.PersistentEventManager import no.iktdev.mediaprocessing.shared.common.persistance.PersistentEventManager
import no.iktdev.mediaprocessing.shared.common.persistance.TasksManager import no.iktdev.mediaprocessing.shared.common.persistance.TasksManager
import no.iktdev.mediaprocessing.shared.common.persistance.tasks import no.iktdev.mediaprocessing.shared.common.persistance.tasks
@ -27,6 +29,8 @@ fun getContext(): ApplicationContext? {
lateinit var taskManager: TasksManager lateinit var taskManager: TasksManager
private lateinit var eventsDatabase: MySqlDataSource private lateinit var eventsDatabase: MySqlDataSource
private val log = KotlinLogging.logger {}
fun getEventsDatabase(): MySqlDataSource { fun getEventsDatabase(): MySqlDataSource {
return eventsDatabase return eventsDatabase
} }
@ -50,5 +54,6 @@ fun main(args: Array<String>) {
taskManager = TasksManager(eventsDatabase) taskManager = TasksManager(eventsDatabase)
context = runApplication<ConvertApplication>(*args) context = runApplication<ConvertApplication>(*args)
log.info { "App Version: ${getAppVersion()}" }
} }
//private val logger = KotlinLogging.logger {} //private val logger = KotlinLogging.logger {}

View File

@ -15,12 +15,9 @@ class TaskCoordinator(): TaskCoordinatorBase() {
private val log = KotlinLogging.logger {} private val log = KotlinLogging.logger {}
lateinit var runnerManager: RunnerManager lateinit var runnerManager: RunnerManager
@Value("\${appVersion}")
private lateinit var version: String
override fun onCoordinatorReady() { override fun onCoordinatorReady() {
super.onCoordinatorReady() super.onCoordinatorReady()
runnerManager = RunnerManager(dataSource = getEventsDatabase(), name = ConvertApplication::class.java.simpleName, version = version) runnerManager = RunnerManager(dataSource = getEventsDatabase(), name = ConvertApplication::class.java.simpleName)
runnerManager.assignRunner() runnerManager.assignRunner()
} }

View File

@ -5,12 +5,9 @@ import mu.KotlinLogging
import no.iktdev.exfl.coroutines.CoroutinesDefault import no.iktdev.exfl.coroutines.CoroutinesDefault
import no.iktdev.exfl.coroutines.CoroutinesIO import no.iktdev.exfl.coroutines.CoroutinesIO
import no.iktdev.exfl.observable.Observables import no.iktdev.exfl.observable.Observables
import no.iktdev.mediaprocessing.shared.common.DatabaseEnvConfig import no.iktdev.mediaprocessing.shared.common.*
import no.iktdev.mediaprocessing.shared.common.SharedConfig
import no.iktdev.mediaprocessing.shared.common.datasource.MySqlDataSource import no.iktdev.mediaprocessing.shared.common.datasource.MySqlDataSource
import no.iktdev.mediaprocessing.shared.common.persistance.* import no.iktdev.mediaprocessing.shared.common.persistance.*
import no.iktdev.mediaprocessing.shared.common.toEventsDatabase
import no.iktdev.mediaprocessing.shared.common.toStoredDatabase
import no.iktdev.mediaprocessing.shared.kafka.core.KafkaEnv import no.iktdev.mediaprocessing.shared.kafka.core.KafkaEnv
import no.iktdev.streamit.library.db.tables.* import no.iktdev.streamit.library.db.tables.*
import no.iktdev.streamit.library.db.tables.helper.cast_errors import no.iktdev.streamit.library.db.tables.helper.cast_errors
@ -99,6 +96,8 @@ fun main(args: Array<String>) {
eventsDatabase.createTables(*kafkaTables.toTypedArray()) eventsDatabase.createTables(*kafkaTables.toTypedArray())
context = runApplication<CoordinatorApplication>(*args) context = runApplication<CoordinatorApplication>(*args)
log.info { "App Version: ${getAppVersion()}" }
printSharedConfig() printSharedConfig()
} }

View File

@ -9,12 +9,6 @@ plugins {
group = "no.iktdev.mediaprocessing.apps" group = "no.iktdev.mediaprocessing.apps"
version = "1.0-SNAPSHOT" version = "1.0-SNAPSHOT"
val appVersion= "1.0.0"
tasks.processResources {
expand(mapOf("appVersion" to appVersion))
}
repositories { repositories {
mavenCentral() mavenCentral()

View File

@ -6,6 +6,7 @@ import no.iktdev.exfl.coroutines.CoroutinesIO
import no.iktdev.exfl.observable.Observables import no.iktdev.exfl.observable.Observables
import no.iktdev.mediaprocessing.shared.common.DatabaseEnvConfig import no.iktdev.mediaprocessing.shared.common.DatabaseEnvConfig
import no.iktdev.mediaprocessing.shared.common.datasource.MySqlDataSource import no.iktdev.mediaprocessing.shared.common.datasource.MySqlDataSource
import no.iktdev.mediaprocessing.shared.common.getAppVersion
import no.iktdev.mediaprocessing.shared.common.persistance.* import no.iktdev.mediaprocessing.shared.common.persistance.*
import no.iktdev.mediaprocessing.shared.common.toEventsDatabase import no.iktdev.mediaprocessing.shared.common.toEventsDatabase
import org.jetbrains.exposed.sql.transactions.TransactionManager import org.jetbrains.exposed.sql.transactions.TransactionManager
@ -20,8 +21,6 @@ private val logger = KotlinLogging.logger {}
val ioCoroutine = CoroutinesIO() val ioCoroutine = CoroutinesIO()
val defaultCoroutine = CoroutinesDefault() val defaultCoroutine = CoroutinesDefault()
var taskMode: ActiveMode = ActiveMode.Active
@SpringBootApplication @SpringBootApplication
class ProcesserApplication { class ProcesserApplication {
@ -33,6 +32,7 @@ fun getEventsDatabase(): MySqlDataSource {
} }
lateinit var taskManager: TasksManager lateinit var taskManager: TasksManager
private val log = KotlinLogging.logger {}
fun main(args: Array<String>) { fun main(args: Array<String>) {
@ -54,8 +54,9 @@ fun main(args: Array<String>) {
taskManager = TasksManager(eventsDatabase) taskManager = TasksManager(eventsDatabase)
val context = runApplication<ProcesserApplication>(*args) val context = runApplication<ProcesserApplication>(*args)
log.info { "App Version: ${getAppVersion()}" }
} }
@EnableScheduling @EnableScheduling

View File

@ -15,12 +15,9 @@ class TaskCoordinator(): TaskCoordinatorBase() {
private val log = KotlinLogging.logger {} private val log = KotlinLogging.logger {}
lateinit var runnerManager: RunnerManager lateinit var runnerManager: RunnerManager
@Value("\${appVersion}")
private lateinit var version: String
override fun onCoordinatorReady() { override fun onCoordinatorReady() {
super.onCoordinatorReady() super.onCoordinatorReady()
runnerManager = RunnerManager(dataSource = getEventsDatabase(), name = ProcesserApplication::class.java.simpleName, version = version) runnerManager = RunnerManager(dataSource = getEventsDatabase(), name = ProcesserApplication::class.java.simpleName)
runnerManager.assignRunner() runnerManager.assignRunner()
} }

View File

@ -3,3 +3,5 @@ EXPOSE 8080
ARG MODULE_NAME ARG MODULE_NAME
COPY ./apps/${MODULE_NAME}/build/libs/app.jar /usr/share/app/app.jar COPY ./apps/${MODULE_NAME}/build/libs/app.jar /usr/share/app/app.jar
ENV APP_VERSION

View File

@ -3,3 +3,5 @@ EXPOSE 8080
ARG MODULE_NAME ARG MODULE_NAME
COPY ./apps/${MODULE_NAME}/build/libs/app.jar /usr/share/app/app.jar COPY ./apps/${MODULE_NAME}/build/libs/app.jar /usr/share/app/app.jar
ENV APP_VERSION

View File

@ -25,6 +25,13 @@ fun isFileAvailable(file: File): Boolean {
return false return false
} }
fun getAppVersion(): Int {
val parsed = System.getenv("APP_VERSION")?.let {
Regex("\\d+").replace(it, "")
} ?: "100"
return Integer.parseInt(parsed)
}
fun List<PersistentMessage>.lastOrSuccess(): PersistentMessage? { fun List<PersistentMessage>.lastOrSuccess(): PersistentMessage? {
return this.lastOrNull { it.data.isSuccess() } ?: this.lastOrNull() return this.lastOrNull { it.data.isSuccess() } ?: this.lastOrNull()
} }

View File

@ -4,12 +4,13 @@ import mu.KotlinLogging
import no.iktdev.mediaprocessing.shared.common.datasource.DataSource import no.iktdev.mediaprocessing.shared.common.datasource.DataSource
import no.iktdev.mediaprocessing.shared.common.datasource.executeOrException import no.iktdev.mediaprocessing.shared.common.datasource.executeOrException
import no.iktdev.mediaprocessing.shared.common.datasource.withDirtyRead import no.iktdev.mediaprocessing.shared.common.datasource.withDirtyRead
import no.iktdev.mediaprocessing.shared.common.getAppVersion
import org.jetbrains.exposed.sql.and import org.jetbrains.exposed.sql.and
import org.jetbrains.exposed.sql.insert import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.select import org.jetbrains.exposed.sql.select
import java.util.UUID import java.util.UUID
class RunnerManager(private val dataSource: DataSource, val startId: String = UUID.randomUUID().toString(), val name: String, val version: String) { class RunnerManager(private val dataSource: DataSource, private val startId: String = UUID.randomUUID().toString(), val name: String) {
private val log = KotlinLogging.logger {} private val log = KotlinLogging.logger {}
fun assignRunner(): Boolean { fun assignRunner(): Boolean {
@ -17,23 +18,22 @@ class RunnerManager(private val dataSource: DataSource, val startId: String = UU
runners.insert { runners.insert {
it[runners.startId] = this@RunnerManager.startId it[runners.startId] = this@RunnerManager.startId
it[runners.application] = this@RunnerManager.name it[runners.application] = this@RunnerManager.name
it[runners.version] = this@RunnerManager.version it[runners.version] = getAppVersion()
} }
} == null } == null
} }
private fun versionToVersionCode(version: String?): Int? {
return version?.replace(".", "")?.toIntOrNull()
}
fun iAmSuperseded(): Boolean { fun iAmSuperseded(): Boolean {
return withDirtyRead(dataSource.database) { return withDirtyRead(dataSource.database) {
val runnerVersionCodes = runners.select { val runnerVersionCodes = runners.select {
(runners.application eq this@RunnerManager.version) and (runners.application eq this@RunnerManager.name) and
(runners.startId neq this@RunnerManager.startId) (runners.startId neq this@RunnerManager.startId)
}.map { it[runners.version] }.mapNotNull { versionToVersionCode(it) }
val myVersion = versionToVersionCode(this.version) }.map { it[runners.version] }
myVersion?.let {
val myVersion = getAppVersion()
myVersion.let {
(runnerVersionCodes.any { rv -> rv > it }) (runnerVersionCodes.any { rv -> rv > it })
} ?: true } ?: true
} ?: true } ?: true

View File

@ -10,6 +10,6 @@ import java.time.LocalDateTime
object runners: IntIdTable() { object runners: IntIdTable() {
val startId: Column<String> = varchar("startId", 50) val startId: Column<String> = varchar("startId", 50)
val application: Column<String> = varchar("application", 50) val application: Column<String> = varchar("application", 50)
val version: Column<String> = varchar("version", 8) val version: Column<Int> = integer("version")
val created: Column<LocalDateTime> = datetime("created").defaultExpression(CurrentDateTime) val created: Column<LocalDateTime> = datetime("created").defaultExpression(CurrentDateTime)
} }