Skip to content

Commit

Permalink
Add Misk metadata for registered backfills (#392)
Browse files Browse the repository at this point in the history
<img width="1108" alt="Screenshot 2024-06-27 at 17 10 37"
src="https://github.com/cashapp/backfila/assets/8827217/48bb8037-1535-4e54-842c-1b0dcfc16ec5">
  • Loading branch information
adrw authored Jun 27, 2024
1 parent 27e31a9 commit 67121fe
Show file tree
Hide file tree
Showing 12 changed files with 95 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@ class EmbeddedBackfilaModule
bind(BackfilaApi::class.java).to(EmbeddedBackfila::class.java)
bind(Backfila::class.java).to(EmbeddedBackfila::class.java)
bind(OnStartup::class.java).toInstance(
if (throwOnStartup) OnStartup.THROW_ON_STARTUP
else OnStartup.CONTINUE_ON_STARTUP
if (throwOnStartup) {
OnStartup.THROW_ON_STARTUP
} else {
OnStartup.CONTINUE_ON_STARTUP
},
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ private fun <E : DbEntity<E>, Pkey : Any> schemaAndTable(backfill: HibernateBack
You are welcome to create a copy of the bounding range strategy limited to your service
if you absolutely cannot have table name annotation on your entity class.
""".trimIndent()
""".trimIndent(),
)
}
return when {
Expand All @@ -214,7 +214,7 @@ private fun <E : DbEntity<E>, Pkey : Any> onlyTable(backfill: HibernateBackfill<
You are welcome to create a copy of the bounding range strategy limited to your service
if you absolutely cannot have table name annotation on your entity class.
""".trimIndent()
""".trimIndent(),
)
}
return "`$table`"
Expand Down
1 change: 1 addition & 0 deletions client-misk/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ dependencies {
implementation(libs.miskInject)
implementation(libs.miskService)
implementation(libs.wispLogging)
implementation(libs.wispMoshi)

testImplementation(libs.assertj)
testImplementation(libs.miskTesting)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package app.cash.backfila.client.misk

import app.cash.backfila.client.spi.BackfillBackend
import app.cash.backfila.client.spi.BackfillRegistration
import jakarta.inject.Inject
import misk.web.metadata.Metadata
import misk.web.metadata.MetadataProvider
import misk.web.metadata.toFormattedJson
import wisp.moshi.adapter
import wisp.moshi.defaultKotlinMoshi

internal data class BackfillMetadata(
val name: String,
val description: String?,
val parametersClass: String?,
)

internal data class BackfillsMetadata(
val backfills: Map<String, List<BackfillMetadata>>,
) : Metadata(
metadata = backfills,
prettyPrint = defaultKotlinMoshi
.adapter<Map<String, List<BackfillMetadata>>>()
.toFormattedJson(backfills),
descriptionString = "Backfill classes registered with Backfila.",
)

internal class BackfillMetadataProvider : MetadataProvider<BackfillsMetadata> {
@Inject lateinit var backends: Set<BackfillBackend>

override val id = "backfila"

override fun get(): BackfillsMetadata {
val backfills = backends.associate { it::class.simpleName!! to it.backfills().map { it.toMetadata() } }
return BackfillsMetadata(backfills)
}

private fun BackfillRegistration.toMetadata() = BackfillMetadata(
name = name,
description = description,
parametersClass = parametersClass.simpleName,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import kotlin.reflect.KClass
import misk.ServiceModule
import misk.inject.KAbstractModule
import misk.inject.toKey
import misk.web.metadata.MetadataModule

/**
* Backfila-using applications install at minimum 3 things.
Expand All @@ -35,5 +36,7 @@ class MiskBackfillModule @JvmOverloads constructor(
dependsOn = dependsOn,
),
)

install(MetadataModule(BackfillMetadataProvider()))
}
}
3 changes: 2 additions & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
jooq = "3.18.1"
ktlint = "0.47.1"
kotlin = "1.9.23"
misk = "2024.05.07.211405-28ee413"
misk = "2024.06.26.052833-88986ac"

[libraries]
apacheCommonsLang3 = { module = "org.apache.commons:commons-lang3", version = "3.12.0" }
Expand Down Expand Up @@ -83,3 +83,4 @@ wispClient = { module = "app.cash.wisp:wisp-client", version.ref = "misk" }
wispConfig = { module = "app.cash.wisp:wisp-config", version.ref = "misk" }
wispDeployment = { module = "app.cash.wisp:wisp-deployment", version.ref = "misk" }
wispLogging = { module = "app.cash.wisp:wisp-logging", version.ref = "misk" }
wispMoshi = { module = "app.cash.wisp:wisp-moshi", version.ref = "misk" }
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package app.cash.backfila.service.selfbackfill

import app.cash.backfila.client.BackfilaCallbackConnectorProvider
import app.cash.backfila.client.BackfilaClientConfig
import app.cash.backfila.client.BackfilaClientLoggingSetupProvider
import app.cash.backfila.client.BackfilaClientNoLoggingSetupProvider
import app.cash.backfila.client.BackfilaCallbackConnectorProvider
import app.cash.backfila.client.ForConnectors
import app.cash.backfila.client.internal.BackfilaClient
import app.cash.backfila.client.misk.hibernate.HibernateBackfillModule
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package app.cash.backfila.service.selfbackfill

import app.cash.backfila.api.ServiceWebActionsModule
import app.cash.backfila.client.BackfilaCallbackConnectorProvider
import app.cash.backfila.client.BackfilaClientLoggingSetupProvider
import app.cash.backfila.client.BackfilaClientNoLoggingSetupProvider
import app.cash.backfila.client.BackfilaCallbackConnectorProvider
import app.cash.backfila.client.BackfilaHttpClientConfig
import app.cash.backfila.client.ForConnectors
import app.cash.backfila.client.misk.MiskBackfillModule
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import app.cash.backfila.service.BackfilaConfig
import app.cash.backfila.service.BackfilaServiceModule
import app.cash.backfila.service.persistence.DbBackfillRun
import misk.MiskApplication
import misk.MiskCaller
import misk.MiskRealServiceModule
import misk.environment.DeploymentModule
import misk.hibernate.Session
Expand All @@ -26,12 +25,10 @@ import misk.jdbc.DataSourceClusterConfig
import misk.jdbc.DataSourceClustersConfig
import misk.jdbc.DataSourceConfig
import misk.jdbc.DataSourceType
import misk.security.authz.DevelopmentOnly
import misk.security.authz.FakeCallerAuthenticator
import misk.security.authz.MiskCallerAuthenticator
import misk.web.MiskWebModule
import misk.web.WebConfig
import misk.web.dashboard.AdminDashboardModule
import okio.ByteString.Companion.encodeUtf8
import wisp.deployment.Deployment

Expand All @@ -54,8 +51,6 @@ fun main(args: Array<String>) {
)
install(MiskWebModule(webConfig))
multibind<MiskCallerAuthenticator>().to<FakeCallerAuthenticator>()
bind<MiskCaller>().annotatedWith<DevelopmentOnly>()
.toInstance(MiskCaller(user = "testfila"))
bind<ViewLogsUrlProvider>().to<DevelopmentViewLogsUrlProvider>()

newMapBinder<String, BackfilaCallbackConnectorProvider>(ForConnectors::class)
Expand Down Expand Up @@ -126,7 +121,7 @@ fun main(args: Array<String>) {
support_button_url = "https://square.enterprise.slack.com/archives/C0151JAREE7",
),
),
AdminDashboardModule(isDevelopment = true),
DevelopmentAdminDashboardModule(),
BackfilaDefaultEndpointConfigModule(),
MiskRealServiceModule(),
).run(args)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package app.cash.backfila.development

import misk.MiskCaller
import misk.inject.KAbstractModule
import misk.security.authz.AccessAnnotationEntry
import misk.security.authz.DevelopmentOnly
import misk.web.dashboard.AdminDashboardAccess
import misk.web.dashboard.AdminDashboardModule
import misk.web.metadata.all.AllMetadataAccess
import misk.web.metadata.all.AllMetadataModule
import misk.web.metadata.config.ConfigMetadataAction

class DevelopmentAdminDashboardModule : KAbstractModule() {
override fun configure() {
install(AdminDashboardModule(isDevelopment = true, configTabMode = ConfigMetadataAction.ConfigTabMode.SHOW_REDACTED_EFFECTIVE_CONFIG))
install(AllMetadataModule())
multibind<AccessAnnotationEntry>().toInstance(
AccessAnnotationEntry<AdminDashboardAccess>(
capabilities = listOf("admin_console"),
),
)
multibind<AccessAnnotationEntry>().toInstance(
AccessAnnotationEntry<AllMetadataAccess>(
capabilities = listOf("admin_console"),
services = listOf(),
),
)
// Setup authentication in the development environment
bind<MiskCaller>().annotatedWith<DevelopmentOnly>()
.toInstance(MiskCaller(user = "testfila", capabilities = setOf("admin_console", "users")))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package app.cash.backfila.development.finedining
import app.cash.backfila.development.BackfilaDevelopmentLogging
import app.cash.backfila.development.DevServiceConstants.Companion.BACKFILA_PORT
import app.cash.backfila.development.DevServiceConstants.Companion.FINE_DINING_PORT
import app.cash.backfila.development.DevelopmentAdminDashboardModule
import app.cash.backfila.development.ServiceHeaderInterceptor
import misk.MiskApplication
import misk.MiskRealServiceModule
Expand All @@ -17,7 +18,6 @@ import misk.security.authz.FakeCallerAuthenticator
import misk.security.authz.MiskCallerAuthenticator
import misk.web.MiskWebModule
import misk.web.WebConfig
import misk.web.dashboard.AdminDashboardModule
import okhttp3.Interceptor
import wisp.deployment.Deployment

Expand Down Expand Up @@ -55,7 +55,7 @@ fun main(args: Array<String>) {
},
DeploymentModule(deployment),
FineDiningServiceModule(),
AdminDashboardModule(isDevelopment = true),
DevelopmentAdminDashboardModule(),
MiskRealServiceModule(),
).run(args)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package app.cash.backfila.development.mcdees

import app.cash.backfila.development.BackfilaDevelopmentLogging
import app.cash.backfila.development.DevServiceConstants.Companion.BACKFILA_PORT
import app.cash.backfila.development.DevelopmentAdminDashboardModule
import app.cash.backfila.development.ServiceHeaderInterceptor
import misk.MiskApplication
import misk.MiskRealServiceModule
Expand All @@ -16,7 +17,6 @@ import misk.security.authz.FakeCallerAuthenticator
import misk.security.authz.MiskCallerAuthenticator
import misk.web.MiskWebModule
import misk.web.WebConfig
import misk.web.dashboard.AdminDashboardModule
import okhttp3.Interceptor
import wisp.deployment.Deployment

Expand Down Expand Up @@ -62,7 +62,7 @@ class McDeesDevelopmentServiceBase {
variant = variant,
port = port,
),
AdminDashboardModule(isDevelopment = true),
DevelopmentAdminDashboardModule(),
MiskRealServiceModule(),
).run(args)
}
Expand Down

0 comments on commit 67121fe

Please sign in to comment.