diff --git a/front50-sql-mariadb/front50-sql-mariadb.gradle b/front50-sql-mariadb/front50-sql-mariadb.gradle deleted file mode 100644 index d78f6ade0..000000000 --- a/front50-sql-mariadb/front50-sql-mariadb.gradle +++ /dev/null @@ -1,11 +0,0 @@ -apply from: "$rootDir/gradle/kotlin.gradle" - -tasks.compileGroovy.enabled = false - -dependencies { - implementation "org.mariadb.jdbc:mariadb-java-client:2.4.0" - implementation "com.netflix.spinnaker.kork:kork-sql" - implementation("org.jooq:jooq:3.9.6"){ - force = true - } -} diff --git a/front50-sql-mariadb/src/main/kotlin/com/netflix/spinnaker/config/MariaDbDataSourceConfiguration.kt b/front50-sql-mariadb/src/main/kotlin/com/netflix/spinnaker/config/MariaDbDataSourceConfiguration.kt deleted file mode 100644 index 3f2d2e862..000000000 --- a/front50-sql-mariadb/src/main/kotlin/com/netflix/spinnaker/config/MariaDbDataSourceConfiguration.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.netflix.spinnaker.config - -import com.netflix.spectator.api.Registry -import com.netflix.spinnaker.sql.MariaDbConnectionPoolMetricsExporter -import com.netflix.spinnaker.sql.MariaDbDataSourceFactory -import com.netflix.spinnaker.kork.sql.config.DataSourceFactory -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.ComponentScan -import org.springframework.context.annotation.Configuration - -@Configuration -@ConditionalOnProperty("sql.enabled") -@ComponentScan("com.netflix.spinnaker.sql") -class MariaDbDataSourceConfiguration { - - @Bean - fun connectionPoolMetricsExporter(registry: Registry): MariaDbConnectionPoolMetricsExporter { - return MariaDbConnectionPoolMetricsExporter(registry) - } - - @Bean - fun dataSourceFactory(connectionPoolMetricsExporter: MariaDbConnectionPoolMetricsExporter): DataSourceFactory = - MariaDbDataSourceFactory(connectionPoolMetricsExporter) -} diff --git a/front50-sql-mariadb/src/main/kotlin/com/netflix/spinnaker/sql/MariaDbConnectionPoolMetricsExporter.kt b/front50-sql-mariadb/src/main/kotlin/com/netflix/spinnaker/sql/MariaDbConnectionPoolMetricsExporter.kt deleted file mode 100644 index 8b42ede3e..000000000 --- a/front50-sql-mariadb/src/main/kotlin/com/netflix/spinnaker/sql/MariaDbConnectionPoolMetricsExporter.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.netflix.spinnaker.sql - -import com.netflix.spectator.api.Registry -import com.netflix.spectator.api.patterns.PolledMeter -import org.mariadb.jdbc.MariaDbPoolDataSource -import org.springframework.scheduling.annotation.Scheduled -import java.util.concurrent.atomic.AtomicLong - -class MariaDbConnectionPoolMetricsExporter( - private val registry: Registry -) { - - private val dataSourceMetrics: MutableList = mutableListOf() - - fun track(dataSource: MariaDbPoolDataSource) { - dataSourceMetrics.add( - DataSourceMetrics(dataSource).apply { - registerMeters(registry) - } - ) - } - - @Scheduled(fixedRate = 5_000) - fun record() { - dataSourceMetrics.forEach { - // They tell me not to use test methods, but yolo. Way better than dealing with MBeans. - it.dataSource.testGetPool()?.let { pool -> - it.activeConnections.set(pool.activeConnections) - it.totalConnections.set(pool.totalConnections) - it.idleConnections.set(pool.idleConnections) - it.blockedConnections.set(pool.connectionRequests) - } - } - } -} - -private data class DataSourceMetrics( - val dataSource: MariaDbPoolDataSource, - val activeConnections: AtomicLong = AtomicLong(), - val totalConnections: AtomicLong = AtomicLong(), - val idleConnections: AtomicLong = AtomicLong(), - val blockedConnections: AtomicLong = AtomicLong() -) { - - fun registerMeters(registry: Registry) { - monitorValue(registry, "active", activeConnections) - monitorValue(registry, "total", totalConnections) - monitorValue(registry, "idle", idleConnections) - monitorValue(registry, "blocked", blockedConnections) - } - - private fun monitorValue(registry: Registry, name: String, value: AtomicLong) { - PolledMeter - .using(registry) - .withName("sql.pool.${dataSource.poolName}.$name") - .monitorValue(value) - } -} diff --git a/front50-sql-mariadb/src/main/kotlin/com/netflix/spinnaker/sql/MariaDbDataSourceFactory.kt b/front50-sql-mariadb/src/main/kotlin/com/netflix/spinnaker/sql/MariaDbDataSourceFactory.kt deleted file mode 100644 index b6c9f8b6b..000000000 --- a/front50-sql-mariadb/src/main/kotlin/com/netflix/spinnaker/sql/MariaDbDataSourceFactory.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2019 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.netflix.spinnaker.sql - -import com.netflix.spinnaker.kork.sql.config.ConnectionPoolProperties -import com.netflix.spinnaker.kork.sql.config.DataSourceFactory -import org.mariadb.jdbc.MariaDbPoolDataSource -import org.springframework.beans.factory.BeanCreationException -import java.sql.SQLException -import javax.sql.DataSource - -class MariaDbDataSourceFactory( - private val metricsExporter: MariaDbConnectionPoolMetricsExporter -) : DataSourceFactory { - - override fun build(poolName: String, connectionPoolProperties: ConnectionPoolProperties): DataSource { - try { - val dataSource = MariaDbPoolDataSource(connectionPoolProperties.jdbcUrl) - dataSource.poolName = poolName - dataSource.user = connectionPoolProperties.user - dataSource.setPassword(connectionPoolProperties.password) - - metricsExporter.track(dataSource) - - return dataSource - } catch (e: SQLException) { - throw BeanCreationException("Failed creating pooled data source", e) - } - } -} diff --git a/front50-sql-mysql/front50-sql-mysql.gradle b/front50-sql-mysql/front50-sql-mysql.gradle new file mode 100644 index 000000000..e22c78e43 --- /dev/null +++ b/front50-sql-mysql/front50-sql-mysql.gradle @@ -0,0 +1,3 @@ +dependencies { + implementation "mysql:mysql-connector-java:8.0.12" +} diff --git a/front50-sql/front50-sql.gradle b/front50-sql/front50-sql.gradle index a3a21311a..899ce9373 100644 --- a/front50-sql/front50-sql.gradle +++ b/front50-sql/front50-sql.gradle @@ -1,7 +1,7 @@ apply from: "$rootDir/gradle/kotlin.gradle" dependencies { - implementation project(":front50-sql-mariadb") + implementation project(":front50-sql-mysql") implementation "com.netflix.spinnaker.front50:front50-core" @@ -14,6 +14,10 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core" + implementation("org.jooq:jooq:3.9.6"){ + force = true + } + testImplementation "io.mockk:mockk" testImplementation "mysql:mysql-connector-java" testImplementation "dev.minutest:minutest"