@@ -5,7 +5,9 @@ import app.cash.backfila.dashboard.StartBackfillAction
5
5
import app.cash.backfila.dashboard.StopBackfillAction
6
6
import app.cash.backfila.dashboard.UpdateBackfillAction
7
7
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
9
11
import misk.scope.ActionScoped
10
12
import misk.security.authz.Authenticated
11
13
import misk.web.Get
@@ -15,9 +17,9 @@ import misk.web.ResponseBody
15
17
import misk.web.ResponseContentType
16
18
import misk.web.actions.WebAction
17
19
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
21
23
22
24
@Singleton
23
25
class BackfillCreateHandlerAction @Inject constructor(
@@ -48,36 +50,37 @@ class BackfillCreateHandlerAction @Inject constructor(
48
50
val formFieldNames = this .httpCall.get().asOkHttpRequest().url.queryParameterNames
49
51
val formFields = formFieldNames.associateWith { this .httpCall.get().asOkHttpRequest().url.queryParameter(it) }
50
52
51
-
52
53
// 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
+ },
73
62
)
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
+ }
74
75
76
+ val response = createBackfillAction.create(
77
+ service = formFields[BackfillCreateField .SERVICE .fieldId]!! ,
78
+ variant = formFields[BackfillCreateField .VARIANT .fieldId]!! ,
79
+ request = createRequestBuilder.build(),
80
+ )
75
81
76
82
// 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
81
84
82
85
return Response (
83
86
body = " go to /backfills/$id " .toResponseBody(),
@@ -88,5 +91,7 @@ class BackfillCreateHandlerAction @Inject constructor(
88
91
89
92
companion object {
90
93
const val PATH = " /api/backfill/create"
94
+
95
+ private fun <T >String?.ifNotBlank (block : (String ) -> T ) = if (this .isNullOrBlank()) null else block(this )
91
96
}
92
97
}
0 commit comments