Skip to content

Commit 549d852

Browse files
committed
working clone/copy
1 parent 2ebba57 commit 549d852

File tree

4 files changed

+265
-228
lines changed

4 files changed

+265
-228
lines changed

service/src/main/kotlin/app/cash/backfila/ui/actions/BackfillCreateHandlerAction.kt

Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import app.cash.backfila.dashboard.StartBackfillAction
55
import app.cash.backfila.dashboard.StopBackfillAction
66
import app.cash.backfila.dashboard.UpdateBackfillAction
77
import app.cash.backfila.protos.service.CreateBackfillRequest
8-
import com.squareup.wire.internal.immutableCopyOf
8+
import app.cash.backfila.ui.pages.BackfillCreateAction.BackfillCreateField
9+
import javax.inject.Inject
10+
import javax.inject.Singleton
911
import misk.scope.ActionScoped
1012
import misk.security.authz.Authenticated
1113
import misk.web.Get
@@ -15,9 +17,9 @@ import misk.web.ResponseBody
1517
import misk.web.ResponseContentType
1618
import misk.web.actions.WebAction
1719
import misk.web.mediatype.MediaTypes
18-
import okio.ByteString
19-
import javax.inject.Inject
20-
import javax.inject.Singleton
20+
import misk.web.toResponseBody
21+
import okhttp3.Headers
22+
import okio.ByteString.Companion.encodeUtf8
2123

2224
@Singleton
2325
class BackfillCreateHandlerAction @Inject constructor(
@@ -48,36 +50,37 @@ class BackfillCreateHandlerAction @Inject constructor(
4850
val formFieldNames = this.httpCall.get().asOkHttpRequest().url.queryParameterNames
4951
val formFields = formFieldNames.associateWith { this.httpCall.get().asOkHttpRequest().url.queryParameter(it) }
5052

51-
5253
// Submit create call
53-
createBackfillAction.create(
54-
service = TODO(),
55-
variant = TODO(),
56-
request = CreateBackfillRequest.Builder()
57-
.backfill_name(TODO())
58-
.dry_run(TODO())
59-
.range_start(TODO())
60-
.range_end(TODO())
61-
.batch_size(TODO())
62-
.scan_size(TODO())
63-
.extra_sleep_ms(TODO())
64-
.backoff_schedule(TODO())
65-
.custom_parameters(
66-
mapOf(
67-
"mealDelayMs" to ByteString.encodeUtf8(TODO())
68-
)
69-
)
70-
.build()
71-
72-
54+
val createRequestBuilder = CreateBackfillRequest.Builder()
55+
formFields[BackfillCreateField.BACKFILL_NAME.fieldId]?.ifNotBlank { createRequestBuilder.backfill_name(it) }
56+
createRequestBuilder.dry_run(
57+
when (formFields[BackfillCreateField.DRY_RUN.fieldId]) {
58+
// Unchecked box in UI will not send a value
59+
"off", null -> false
60+
else -> true
61+
},
7362
)
63+
formFields[BackfillCreateField.RANGE_START.fieldId]?.ifNotBlank { createRequestBuilder.pkey_range_start(it.encodeUtf8()) }
64+
formFields[BackfillCreateField.RANGE_END.fieldId]?.ifNotBlank { createRequestBuilder.pkey_range_end(it.encodeUtf8()) }
65+
formFields[BackfillCreateField.BATCH_SIZE.fieldId]?.ifNotBlank { createRequestBuilder.batch_size(it.toLongOrNull()) }
66+
formFields[BackfillCreateField.SCAN_SIZE.fieldId]?.ifNotBlank { createRequestBuilder.scan_size(it.toLongOrNull()) }
67+
formFields[BackfillCreateField.THREADS_PER_PARTITION.fieldId]?.ifNotBlank { createRequestBuilder.num_threads(it.toIntOrNull()) }
68+
formFields[BackfillCreateField.EXTRA_SLEEP_MS.fieldId]?.ifNotBlank { createRequestBuilder.extra_sleep_ms(it.toLongOrNull()) }
69+
formFields[BackfillCreateField.BACKOFF_SCHEDULE.fieldId]?.ifNotBlank { createRequestBuilder.backoff_schedule(it) }
70+
val customParameters = formFields.filter { it.key.startsWith(BackfillCreateField.CUSTOM_PARAMETER_PREFIX.fieldId) }
71+
.mapValues { it.value?.encodeUtf8() }
72+
if (customParameters.isNotEmpty()) {
73+
createRequestBuilder.parameter_map(customParameters)
74+
}
7475

76+
val response = createBackfillAction.create(
77+
service = formFields[BackfillCreateField.SERVICE.fieldId]!!,
78+
variant = formFields[BackfillCreateField.VARIANT.fieldId]!!,
79+
request = createRequestBuilder.build(),
80+
)
7581

7682
// TODO get created backfill id and redirect to that page on create/clone
77-
val id = 2
78-
79-
80-
83+
val id = response.backfill_run_id
8184

8285
return Response(
8386
body = "go to /backfills/$id".toResponseBody(),
@@ -88,5 +91,7 @@ class BackfillCreateHandlerAction @Inject constructor(
8891

8992
companion object {
9093
const val PATH = "/api/backfill/create"
94+
95+
private fun <T>String?.ifNotBlank(block: (String) -> T) = if (this.isNullOrBlank()) null else block(this)
9196
}
9297
}

service/src/main/kotlin/app/cash/backfila/ui/components/AutoReload.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import kotlinx.html.div
99
// (ie. update form for backfill show page)
1010
fun TagConsumer<*>.AutoReload(block: TagConsumer<*>.() -> Unit) {
1111
div {
12-
// attributes["data-controller"] = "auto-reload"
12+
attributes["data-controller"] = "auto-reload"
1313
attributes["data-auto-reload-target"] = "frame"
1414

1515
block()

0 commit comments

Comments
 (0)