Skip to content

Commit 13b33ab

Browse files
committed
ui: Add support for concurreny limits
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
1 parent 35663a6 commit 13b33ab

6 files changed

Lines changed: 91 additions & 0 deletions

File tree

ui/src/components/SourceForm.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ interface Props {
1414
}
1515

1616
const SourceForm: FC<Props> = ({ source, onSubmit }) => {
17+
const importLimit = 50;
1718
const [searchParams] = useSearchParams();
1819
const certFingerprint = searchParams.get("fingerprint");
1920
const [showFingerprintModal, setShowFingerprintModal] =
@@ -54,6 +55,7 @@ const SourceForm: FC<Props> = ({ source, onSubmit }) => {
5455
username: "",
5556
password: "",
5657
trustedServerCertificateFingerprint: "",
58+
importLimit: importLimit,
5759
};
5860

5961
if (source) {
@@ -65,6 +67,7 @@ const SourceForm: FC<Props> = ({ source, onSubmit }) => {
6567
password: source.properties.password,
6668
trustedServerCertificateFingerprint:
6769
source.properties.trusted_server_certificate_fingerprint,
70+
importLimit: source.properties.import_limit || importLimit,
6871
};
6972
}
7073

@@ -81,6 +84,7 @@ const SourceForm: FC<Props> = ({ source, onSubmit }) => {
8184
password: values.password,
8285
trusted_server_certificate_fingerprint:
8386
values.trustedServerCertificateFingerprint,
87+
import_limit: values.importLimit,
8488
},
8589
};
8690

@@ -202,6 +206,23 @@ const SourceForm: FC<Props> = ({ source, onSubmit }) => {
202206
{formik.errors.trustedServerCertificateFingerprint}
203207
</Form.Control.Feedback>
204208
</Form.Group>
209+
<Form.Group className="mb-3" controlId="importLimit">
210+
<Form.Label>Import limit</Form.Label>
211+
<Form.Control
212+
type="number"
213+
name="importLimit"
214+
value={formik.values.importLimit}
215+
disabled={formik.isSubmitting}
216+
onChange={formik.handleChange}
217+
onBlur={formik.handleBlur}
218+
isInvalid={
219+
!!formik.errors.importLimit && formik.touched.importLimit
220+
}
221+
/>
222+
<Form.Control.Feedback type="invalid">
223+
{formik.errors.importLimit}
224+
</Form.Control.Feedback>
225+
</Form.Group>
205226
</Form>
206227
</div>
207228
<div className="fixed-footer p-3">

ui/src/components/TargetForm.tsx

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ interface Props {
1313
}
1414

1515
const TargetForm: FC<Props> = ({ target, onSubmit }) => {
16+
const importLimit = 50;
17+
const createLimit = 10;
1618
const [searchParams] = useSearchParams();
1719
const certFingerprint = searchParams.get("fingerprint");
1820
const [showFingerprintModal, setShowFingerprintModal] =
@@ -50,6 +52,8 @@ const TargetForm: FC<Props> = ({ target, onSubmit }) => {
5052
tlsClientCert: "",
5153
tlsClientKey: "",
5254
trustedServerCertificateFingerprint: "",
55+
importLimit: importLimit,
56+
createLimit: createLimit,
5357
};
5458

5559
if (target) {
@@ -62,6 +66,8 @@ const TargetForm: FC<Props> = ({ target, onSubmit }) => {
6266
tlsClientKey: target.properties.tls_client_key,
6367
trustedServerCertificateFingerprint:
6468
target.properties.trusted_server_certificate_fingerprint,
69+
importLimit: target.properties.import_limit || importLimit,
70+
createLimit: target.properties.create_limit || createLimit,
6571
};
6672
}
6773

@@ -78,6 +84,8 @@ const TargetForm: FC<Props> = ({ target, onSubmit }) => {
7884
tls_client_key: values.tlsClientKey,
7985
trusted_server_certificate_fingerprint:
8086
values.trustedServerCertificateFingerprint,
87+
import_limit: values.importLimit,
88+
create_limit: values.createLimit,
8189
},
8290
};
8391

@@ -233,6 +241,40 @@ const TargetForm: FC<Props> = ({ target, onSubmit }) => {
233241
{formik.errors.trustedServerCertificateFingerprint}
234242
</Form.Control.Feedback>
235243
</Form.Group>
244+
<Form.Group className="mb-3" controlId="importLimit">
245+
<Form.Label>Import limit</Form.Label>
246+
<Form.Control
247+
type="number"
248+
name="importLimit"
249+
value={formik.values.importLimit}
250+
disabled={formik.isSubmitting}
251+
onChange={formik.handleChange}
252+
onBlur={formik.handleBlur}
253+
isInvalid={
254+
!!formik.errors.importLimit && formik.touched.importLimit
255+
}
256+
/>
257+
<Form.Control.Feedback type="invalid">
258+
{formik.errors.importLimit}
259+
</Form.Control.Feedback>
260+
</Form.Group>
261+
<Form.Group className="mb-3" controlId="createLimit">
262+
<Form.Label>Create limit</Form.Label>
263+
<Form.Control
264+
type="number"
265+
name="createLimit"
266+
value={formik.values.createLimit}
267+
disabled={formik.isSubmitting}
268+
onChange={formik.handleChange}
269+
onBlur={formik.handleBlur}
270+
isInvalid={
271+
!!formik.errors.createLimit && formik.touched.createLimit
272+
}
273+
/>
274+
<Form.Control.Feedback type="invalid">
275+
{formik.errors.createLimit}
276+
</Form.Control.Feedback>
277+
</Form.Group>
236278
</Form>
237279
</div>
238280
<div className="fixed-footer p-3">

ui/src/pages/SourceOverview.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,13 @@ const SourceOverview = () => {
5858
{source?.properties.trusted_server_certificate_fingerprint}
5959
</div>
6060
</div>
61+
<div className="row">
62+
<div className="col-2 detail-table-header">Import limit</div>
63+
<div className="col-10 detail-table-cell">
64+
{" "}
65+
{source?.properties.import_limit}
66+
</div>
67+
</div>
6168
</div>
6269
);
6370
};

ui/src/pages/TargetOverview.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,20 @@ const TargetOverview = () => {
5252
{target?.properties.trusted_server_certificate_fingerprint}
5353
</div>
5454
</div>
55+
<div className="row">
56+
<div className="col-2 detail-table-header">Import limit</div>
57+
<div className="col-10 detail-table-cell">
58+
{" "}
59+
{target?.properties.import_limit}
60+
</div>
61+
</div>
62+
<div className="row">
63+
<div className="col-2 detail-table-header">Create limit</div>
64+
<div className="col-10 detail-table-cell">
65+
{" "}
66+
{target?.properties.create_limit}
67+
</div>
68+
</div>
5569
</div>
5670
);
5771
};

ui/src/types/source.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export interface VMwareProperties {
66
password: string;
77
trusted_server_certificate_fingerprint: string;
88
connectivity_status?: ExternalConnectivityStatus;
9+
import_limit: number;
910
}
1011

1112
export interface NSXProperties {
@@ -14,6 +15,7 @@ export interface NSXProperties {
1415
password: string;
1516
trusted_server_certificate_fingerprint: string;
1617
connectivity_status?: ExternalConnectivityStatus;
18+
import_limit: number;
1719
}
1820

1921
export interface Source {
@@ -29,4 +31,5 @@ export interface SourceFormValues {
2931
username: string;
3032
password: string;
3133
trustedServerCertificateFingerprint: string;
34+
importLimit: number;
3235
}

ui/src/types/target.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ export interface IncusProperties {
66
tls_client_cert: string;
77
trusted_server_certificate_fingerprint: string;
88
connectivity_status?: ExternalConnectivityStatus;
9+
import_limit: number;
10+
create_limit: number;
911
}
1012

1113
export interface Target {
@@ -22,4 +24,6 @@ export interface TargetFormValues {
2224
tlsClientKey: string;
2325
tlsClientCert: string;
2426
trustedServerCertificateFingerprint: string;
27+
importLimit: number;
28+
createLimit: number;
2529
}

0 commit comments

Comments
 (0)