Skip to content

Commit 3e99a46

Browse files
author
Artem
committed
#RI-4530 Make cloud default autodiscovery connection, change text, add fixed subs\dbs support
1 parent 2e49430 commit 3e99a46

File tree

13 files changed

+120
-57
lines changed

13 files changed

+120
-57
lines changed

redisinsight/ui/src/constants/api.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ enum ApiEndpoints {
1313
REDIS_CLUSTER_GET_DATABASES = 'redis-enterprise/cluster/get-databases',
1414
REDIS_CLUSTER_DATABASES = 'redis-enterprise/cluster/databases',
1515

16-
REDIS_CLOUD_ACCOUNT = 'redis-enterprise/cloud/get-account',
17-
REDIS_CLOUD_SUBSCRIPTIONS = 'redis-enterprise/cloud/get-subscriptions',
18-
REDIS_CLOUD_GET_DATABASES = 'redis-enterprise/cloud/get-databases',
19-
REDIS_CLOUD_DATABASES = 'redis-enterprise/cloud/databases',
16+
REDIS_CLOUD_ACCOUNT = 'cloud/autodiscovery/account',
17+
REDIS_CLOUD_SUBSCRIPTIONS = 'cloud/autodiscovery/subscriptions',
18+
REDIS_CLOUD_GET_DATABASES = 'cloud/autodiscovery/get-databases',
19+
REDIS_CLOUD_DATABASES = 'cloud/autodiscovery/databases',
2020

2121
SENTINEL_GET_DATABASES = 'redis-sentinel/get-databases',
2222
SENTINEL_DATABASES = 'redis-sentinel/databases',

redisinsight/ui/src/pages/home/components/AddDatabases/AddDatabasesContainer.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ const AddDatabasesContainer = React.memo((props: Props) => {
5050
} = props
5151

5252
const [typeSelected, setTypeSelected] = useState<InstanceType>(
53-
InstanceType.RedisEnterpriseCluster
53+
InstanceType.RedisCloudPro
5454
)
5555
const [connectionType, setConnectionType] = useState<AddDbType>(
5656
AddDbType.manual
@@ -113,16 +113,16 @@ const AddDatabasesContainer = React.memo((props: Props) => {
113113
}, [isFullWidthProp])
114114

115115
const typesFormStage: EuiRadioGroupOption[] = [
116-
{
117-
id: InstanceType.RedisEnterpriseCluster,
118-
label: InstanceType.RedisEnterpriseCluster,
119-
'data-test-subj': 'radio-btn-enterprise-cluster',
120-
},
121116
{
122117
id: InstanceType.RedisCloudPro,
123118
label: InstanceType.RedisCloudPro,
124119
'data-test-subj': 'radio-btn-cloud-pro',
125120
},
121+
{
122+
id: InstanceType.RedisEnterpriseCluster,
123+
label: InstanceType.RedisEnterpriseCluster,
124+
'data-test-subj': 'radio-btn-enterprise-cluster',
125+
},
126126
{
127127
id: InstanceType.Sentinel,
128128
label: InstanceType.Sentinel,

redisinsight/ui/src/pages/home/components/CloudConnection/CloudConnectionForm/CloudConnectionForm.tsx

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import {
1616
keys,
1717
} from '@elastic/eui'
1818

19-
import RESOURCES from 'uiSrc/resourses/en-EN'
2019
import { validateField } from 'uiSrc/utils/validations'
2120
import validationErrors from 'uiSrc/constants/validationErrors'
2221
import { ICloudConnectionSubmit } from '../CloudConnectionFormWrapper'
@@ -62,16 +61,6 @@ const Message = () => (
6261
>
6362
documentation.
6463
</EuiLink>
65-
{` If you want to add databases that belong to a ${RESOURCES.Fixed} subscription, please follow `}
66-
<EuiLink
67-
color="text"
68-
className={styles.link}
69-
external={false}
70-
target="_blank"
71-
href="https://docs.redis.com/latest/ri/using-redisinsight/add-instance/#add-a-standalone-redis-database"
72-
>
73-
these steps.
74-
</EuiLink>
7564
</EuiText>
7665
)
7766

redisinsight/ui/src/pages/redisCloudDatabases/RedisCloudDatabases/RedisCloudDatabases.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export interface Props {
3232
onClose: () => void;
3333
onBack: () => void;
3434
onSubmit: (
35-
databases: Pick<InstanceRedisCloud, 'subscriptionId' | 'databaseId'>[]
35+
databases: Pick<InstanceRedisCloud, 'subscriptionId' | 'subscriptionType' | 'databaseId'>[]
3636
) => void;
3737
}
3838

@@ -84,7 +84,7 @@ const RedisCloudDatabasesPage = ({
8484
}
8585

8686
const handleSubmit = () => {
87-
onSubmit(map(selection, (i) => pick(i, 'subscriptionId', 'databaseId')))
87+
onSubmit(map(selection, (i) => pick(i, 'subscriptionId', 'subscriptionType', 'databaseId')))
8888
}
8989

9090
const showPopover = () => {

redisinsight/ui/src/pages/redisCloudDatabases/RedisCloudDatabasesPage.tsx

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,12 @@ import {
2121
replaceSpaces,
2222
setTitle,
2323
} from 'uiSrc/utils'
24-
import { InstanceRedisCloud, LoadedCloud } from 'uiSrc/slices/interfaces'
24+
import {
25+
InstanceRedisCloud,
26+
LoadedCloud,
27+
RedisCloudSubscriptionType,
28+
RedisCloudSubscriptionTypeText,
29+
} from 'uiSrc/slices/interfaces'
2530
import { DatabaseListModules, DatabaseListOptions } from 'uiSrc/components'
2631
import { sendEventTelemetry, TelemetryEvent } from 'uiSrc/telemetry'
2732

@@ -143,6 +148,16 @@ const RedisCloudDatabasesPage = () => {
143148
)
144149
},
145150
},
151+
{
152+
field: 'subscriptionType',
153+
className: 'column_subscriptionType',
154+
name: 'Type',
155+
width: '95px',
156+
dataType: 'string',
157+
sortable: true,
158+
truncateText: true,
159+
render: (type: RedisCloudSubscriptionType) => RedisCloudSubscriptionTypeText[type] ?? '-',
160+
},
146161
{
147162
field: 'status',
148163
className: 'column_status',

redisinsight/ui/src/pages/redisCloudDatabasesResult/RedisCloudDatabasesResultPage.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import {
2121
InstanceRedisCloud,
2222
AddRedisDatabaseStatus,
2323
LoadedCloud,
24+
RedisCloudSubscriptionType,
25+
RedisCloudSubscriptionTypeText,
2426
} from 'uiSrc/slices/interfaces'
2527
import {
2628
formatLongName,
@@ -119,6 +121,16 @@ const RedisCloudDatabasesResultPage = () => {
119121
)
120122
},
121123
},
124+
{
125+
field: 'subscriptionType',
126+
className: 'column_subscriptionType',
127+
name: 'Type',
128+
width: '95px',
129+
dataType: 'string',
130+
sortable: true,
131+
truncateText: true,
132+
render: (type: RedisCloudSubscriptionType) => RedisCloudSubscriptionTypeText[type] ?? '-',
133+
},
122134
{
123135
field: 'status',
124136
className: 'column_status',
@@ -167,7 +179,7 @@ const RedisCloudDatabasesResultPage = () => {
167179
width: '200px',
168180
sortable: true,
169181
render: function Modules(modules: any[], instance: InstanceRedisCloud) {
170-
return <DatabaseListModules modules={instance.modules.map((name) => ({ name }))} />
182+
return <DatabaseListModules modules={instance.modules?.map((name) => ({ name }))} />
171183
},
172184
},
173185
{

redisinsight/ui/src/pages/redisCloudSubscriptions/RedisCloudSubscriptions/RedisCloudSubscriptions.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
} from '@elastic/eui'
1919
import cx from 'classnames'
2020
import {
21+
InstanceRedisCloud,
2122
RedisCloudAccount,
2223
RedisCloudSubscription,
2324
RedisCloudSubscriptionStatus,
@@ -37,7 +38,7 @@ export interface Props {
3738
error: string;
3839
onClose: () => void;
3940
onBack: () => void;
40-
onSubmit: (uids: Maybe<number>[]) => void;
41+
onSubmit: (subscriptions: Maybe<Pick<InstanceRedisCloud, 'subscriptionId' | 'subscriptionType'>>[]) => void;
4142
}
4243

4344
interface IPopoverProps {
@@ -87,7 +88,7 @@ const RedisCloudSubscriptions = ({
8788
}
8889

8990
const handleSubmit = () => {
90-
onSubmit(map(selection, 'id'))
91+
onSubmit(map(selection, ({ id, type }) => ({ subscriptionId: id, subscriptionType: type })))
9192
}
9293

9394
const showPopover = () => {

redisinsight/ui/src/pages/redisCloudSubscriptions/RedisCloudSubscriptionsPage.tsx

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@ import {
1111

1212
import { Pages } from 'uiSrc/constants'
1313
import {
14+
InstanceRedisCloud,
1415
LoadedCloud,
1516
RedisCloudSubscription,
1617
RedisCloudSubscriptionStatus,
1718
RedisCloudSubscriptionStatusText,
19+
RedisCloudSubscriptionType,
20+
RedisCloudSubscriptionTypeText,
1821
} from 'uiSrc/slices/interfaces'
1922
import {
2023
cloudSelector,
@@ -73,8 +76,10 @@ const RedisCloudSubscriptionsPage = () => {
7376
history.push(Pages.home)
7477
}
7578

76-
const handleLoadInstances = (ids: Maybe<number>[]) => {
77-
dispatch(fetchInstancesRedisCloud({ ids, credentials }))
79+
const handleLoadInstances = (
80+
subscriptions: Maybe<Pick<InstanceRedisCloud, 'subscriptionId' | 'subscriptionType'>>[]
81+
) => {
82+
dispatch(fetchInstancesRedisCloud({ subscriptions, credentials }))
7883
}
7984

8085
const AlertStatusContent = () => (
@@ -159,6 +164,15 @@ const RedisCloudSubscriptionsPage = () => {
159164
)
160165
},
161166
},
167+
{
168+
field: 'type',
169+
className: 'column_type',
170+
name: 'Type',
171+
width: '120px',
172+
dataType: 'string',
173+
sortable: true,
174+
render: (type: RedisCloudSubscriptionType) => RedisCloudSubscriptionTypeText[type] ?? '-',
175+
},
162176
{
163177
field: 'provider',
164178
className: 'column_provider',

redisinsight/ui/src/slices/instances/cloud.ts

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ const cloudSlice = createSlice({
114114
state.loaded[LoadedCloud.InstancesAdded] = true
115115

116116
state.dataAdded = payload?.map((instance: InstanceRedisCloud) => ({
117-
...instance.databaseDetails,
117+
...instance.databaseDetails || {},
118118
databaseIdAdded: instance.databaseId,
119119
subscriptionIdAdded: instance.subscriptionId,
120120
statusAdded: instance.status,
@@ -172,32 +172,40 @@ export const cloudSelector = (state: RootState) => state.connections.cloud
172172
// The reducer
173173
export default cloudSlice.reducer
174174

175+
const generateAuthHeaders = (credentials: Nullable<ICredentialsRedisCloud>) => {
176+
return {
177+
'x-cloud-api-key': credentials?.accessKey || '',
178+
'x-cloud-api-secret': credentials?.secretKey || '',
179+
}
180+
}
181+
175182
// Asynchronous thunk action
176183
export function fetchSubscriptionsRedisCloud(
177-
{ accessKey, secretKey }: ICredentialsRedisCloud,
184+
credentials: ICredentialsRedisCloud,
178185
onSuccessAction?: () => void
179186
) {
180187
return async (dispatch: AppDispatch) => {
181188
dispatch(loadSubscriptionsRedisCloud())
182189

183190
try {
184-
const { data, status } = await apiService.post(
191+
const { data, status } = await apiService.get(
185192
`${ApiEndpoints.REDIS_CLOUD_SUBSCRIPTIONS}`,
186193
{
187-
apiKey: accessKey,
188-
apiSecretKey: secretKey,
194+
headers: {
195+
...generateAuthHeaders(credentials),
196+
}
189197
}
190198
)
191199

192200
if (isStatusSuccessful(status)) {
193201
dispatch(
194202
loadSubscriptionsRedisCloudSuccess({
195203
data,
196-
credentials: { accessKey, secretKey },
204+
credentials,
197205
})
198206
)
199207
onSuccessAction?.()
200-
dispatch<any>(fetchAccountRedisCloud({ accessKey, secretKey }))
208+
dispatch<any>(fetchAccountRedisCloud(credentials))
201209
}
202210
} catch (error) {
203211
const errorMessage = getApiErrorMessage(error)
@@ -208,16 +216,17 @@ export function fetchSubscriptionsRedisCloud(
208216
}
209217

210218
// Asynchronous thunk action
211-
export function fetchAccountRedisCloud(payload: ICredentialsRedisCloud) {
219+
export function fetchAccountRedisCloud(credentials: ICredentialsRedisCloud) {
212220
return async (dispatch: AppDispatch) => {
213221
dispatch(loadAccountRedisCloud())
214222

215223
try {
216-
const { data, status } = await apiService.post(
224+
const { data, status } = await apiService.get(
217225
`${ApiEndpoints.REDIS_CLOUD_ACCOUNT}`,
218226
{
219-
apiKey: payload?.accessKey,
220-
apiSecretKey: payload?.secretKey,
227+
headers: {
228+
...generateAuthHeaders(credentials),
229+
}
221230
}
222231
)
223232

@@ -234,7 +243,7 @@ export function fetchAccountRedisCloud(payload: ICredentialsRedisCloud) {
234243

235244
// Asynchronous thunk action
236245
export function fetchInstancesRedisCloud(payload: {
237-
ids: Maybe<number>[];
246+
subscriptions: Maybe<Pick<InstanceRedisCloud, 'subscriptionId' | 'subscriptionType'>>[];
238247
credentials: Nullable<ICredentialsRedisCloud>;
239248
}) {
240249
return async (dispatch: AppDispatch) => {
@@ -244,9 +253,12 @@ export function fetchInstancesRedisCloud(payload: {
244253
const { data, status } = await apiService.post(
245254
`${ApiEndpoints.REDIS_CLOUD_GET_DATABASES}`,
246255
{
247-
apiKey: payload.credentials?.accessKey,
248-
apiSecretKey: payload.credentials?.secretKey,
249-
subscriptionIds: payload.ids,
256+
subscriptions: payload.subscriptions,
257+
},
258+
{
259+
headers: {
260+
...generateAuthHeaders(payload.credentials),
261+
}
250262
}
251263
)
252264

@@ -275,10 +287,13 @@ export function addInstancesRedisCloud(payload: {
275287
const { data, status } = await apiService.post(
276288
`${ApiEndpoints.REDIS_CLOUD_DATABASES}`,
277289
{
278-
apiKey: payload.credentials?.accessKey,
279-
apiSecretKey: payload.credentials?.secretKey,
280290
databases: payload.databases,
281291
},
292+
{
293+
headers: {
294+
...generateAuthHeaders(payload.credentials),
295+
}
296+
}
282297
)
283298

284299
if (isStatusSuccessful(status)) {

redisinsight/ui/src/slices/instances/cluster.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ const clusterSlice = createSlice({
5454
state.loading = false
5555

5656
state.dataAdded = payload?.map((instance: InstanceRedisCluster) => ({
57-
...instance.databaseDetails,
57+
...instance.databaseDetails || {},
5858
uidAdded: instance.uid,
5959
statusAdded: instance.status,
6060
messageAdded: instance.message,

0 commit comments

Comments
 (0)