Skip to content

Commit 291aafb

Browse files
authored
Merge pull request #2295 from RedisInsight/fe/feature/RI-4586_triggered_and_functions_icon
#RI-4586 - add redisgears 2 icon and text
2 parents a26987b + 9b7c6c9 commit 291aafb

File tree

11 files changed

+133
-23
lines changed

11 files changed

+133
-23
lines changed

redisinsight/api/src/constants/redis-modules.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export enum AdditionalRedisModuleName {
66
RedisJSON = 'ReJSON',
77
RediSearch = 'search',
88
RedisTimeSeries = 'timeseries',
9+
'Triggers & Functions' = 'redisgears'
910
}
1011

1112
export enum AdditionalSearchModuleName {
@@ -14,6 +15,11 @@ export enum AdditionalSearchModuleName {
1415
FTL = 'ftl',
1516
}
1617

18+
export enum AdditionalTriggersAndFunctionsModuleName {
19+
TriggersAndFunctions = 'redisgears',
20+
TriggersAndFunctions2 = 'redisgears_2',
21+
}
22+
1723
export const SUPPORTED_REDIS_MODULES = Object.freeze({
1824
ai: AdditionalRedisModuleName.RedisAI,
1925
graph: AdditionalRedisModuleName.RedisGraph,
@@ -60,3 +66,8 @@ export const REDISEARCH_MODULES: string[] = [
6066
AdditionalSearchModuleName.FT,
6167
AdditionalSearchModuleName.FTL,
6268
]
69+
70+
export const TRIGGERED_AND_FUNCTIONS_MODULES: string[] = [
71+
AdditionalTriggersAndFunctionsModuleName.TriggersAndFunctions,
72+
AdditionalTriggersAndFunctionsModuleName.TriggersAndFunctions2,
73+
]

redisinsight/api/src/utils/redis-modules-summary.spec.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const DEFAULT_SUMMARY = Object.freeze(
99
RedisBloom: { loaded: false },
1010
RedisJSON: { loaded: false },
1111
RedisTimeSeries: { loaded: false },
12+
'Triggers & Functions': { loaded: false },
1213
customModules: [],
1314
},
1415
);
@@ -43,6 +44,7 @@ const getRedisModulesSummaryTests = [
4344
{ name: 'ReJSON', version: 10000, semanticVersion: '1.0.0' },
4445
{ name: 'search', version: 10000, semanticVersion: '1.0.0' },
4546
{ name: 'timeseries', version: 10000, semanticVersion: '1.0.0' },
47+
{ name: 'redisgears_2', version: 10000, semanticVersion: '1.0.0' },
4648
],
4749
expected: {
4850
RedisAI: { loaded: true, version: 10000, semanticVersion: '1.0.0' },
@@ -52,6 +54,7 @@ const getRedisModulesSummaryTests = [
5254
RedisJSON: { loaded: true, version: 10000, semanticVersion: '1.0.0' },
5355
RediSearch: { loaded: true, version: 10000, semanticVersion: '1.0.0' },
5456
RedisTimeSeries: { loaded: true, version: 10000, semanticVersion: '1.0.0' },
57+
'Triggers & Functions': { loaded: true, version: 10000, semanticVersion: '1.0.0' },
5558
customModules: [],
5659
},
5760
},

redisinsight/api/src/utils/redis-modules-summary.ts

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import { cloneDeep } from 'lodash';
2-
import { AdditionalRedisModuleName, SUPPORTED_REDIS_MODULES } from 'src/constants';
2+
import {
3+
AdditionalRedisModuleName,
4+
SUPPORTED_REDIS_MODULES,
5+
REDISEARCH_MODULES,
6+
TRIGGERED_AND_FUNCTIONS_MODULES,
7+
} from 'src/constants';
38
import { AdditionalRedisModule } from 'src/modules/database/models/additional.redis.module';
49

510
interface IModuleSummary {
@@ -19,30 +24,58 @@ export const DEFAULT_SUMMARY: IRedisModulesSummary = Object.freeze(
1924
RedisBloom: { loaded: false },
2025
RedisJSON: { loaded: false },
2126
RedisTimeSeries: { loaded: false },
27+
'Triggers & Functions': { loaded: false },
2228
customModules: [],
2329
},
2430
);
2531

32+
export const isRedisearchAvailable = (modules: AdditionalRedisModule[]): boolean => (
33+
modules?.some(({ name }) => REDISEARCH_MODULES.some((search) => name === search))
34+
);
35+
36+
export const isTriggeredAndFunctionsAvailable = (modules: AdditionalRedisModule[]): boolean => (
37+
modules?.some(({ name }) => TRIGGERED_AND_FUNCTIONS_MODULES.some((value) => name === value))
38+
);
39+
2640
const getEnumKeyBValue = (myEnum: any, enumValue: number | string): string => {
2741
const keys = Object.keys(myEnum);
2842
const index = keys.findIndex((x) => myEnum[x] === enumValue);
2943
return index > -1 ? keys[index] : '';
3044
};
3145

46+
const getModuleSummaryToSent = (module: AdditionalRedisModule) => ({
47+
loaded: true,
48+
version: module.version,
49+
semanticVersion: module.semanticVersion,
50+
});
51+
52+
// same function as in FE
3253
export const getRedisModulesSummary = (modules: AdditionalRedisModule[] = []): IRedisModulesSummary => {
3354
const summary = cloneDeep(DEFAULT_SUMMARY);
3455
try {
3556
modules.forEach(((module) => {
3657
if (SUPPORTED_REDIS_MODULES[module.name]) {
3758
const moduleName = getEnumKeyBValue(AdditionalRedisModuleName, module.name);
38-
summary[moduleName] = {
39-
loaded: true,
40-
version: module.version,
41-
semanticVersion: module.semanticVersion,
42-
};
43-
} else {
44-
summary.customModules.push(module);
59+
summary[moduleName] = getModuleSummaryToSent(module);
60+
return;
4561
}
62+
63+
if (isRedisearchAvailable([module])) {
64+
const redisearchName = getEnumKeyBValue(AdditionalRedisModuleName, AdditionalRedisModuleName.RediSearch);
65+
summary[redisearchName] = getModuleSummaryToSent(module);
66+
return;
67+
}
68+
69+
if (isTriggeredAndFunctionsAvailable([module])) {
70+
const triggeredAndFunctionsName = getEnumKeyBValue(
71+
AdditionalRedisModuleName,
72+
AdditionalRedisModuleName['Triggers & Functions'],
73+
);
74+
summary[triggeredAndFunctionsName] = getModuleSummaryToSent(module);
75+
return;
76+
}
77+
78+
summary.customModules.push(module);
4679
}));
4780
} catch (e) {
4881
// continue regardless of error
Lines changed: 14 additions & 0 deletions
Loading
Lines changed: 14 additions & 0 deletions
Loading

redisinsight/ui/src/components/database-list-modules/DatabaseListModules.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import RedisBloomLight from 'uiSrc/assets/img/modules/RedisBloomLight.svg'
1818
import RedisBloomDark from 'uiSrc/assets/img/modules/RedisBloomDark.svg'
1919
import RedisGearsLight from 'uiSrc/assets/img/modules/RedisGearsLight.svg'
2020
import RedisGearsDark from 'uiSrc/assets/img/modules/RedisGearsDark.svg'
21+
import RedisGears2Light from 'uiSrc/assets/img/modules/RedisGears2Light.svg'
22+
import RedisGears2Dark from 'uiSrc/assets/img/modules/RedisGears2Dark.svg'
2123
import RedisGraphLight from 'uiSrc/assets/img/modules/RedisGraphLight.svg'
2224
import RedisGraphDark from 'uiSrc/assets/img/modules/RedisGraphDark.svg'
2325
import RedisJSONLight from 'uiSrc/assets/img/modules/RedisJSONLight.svg'
@@ -69,6 +71,16 @@ export const modulesDefaultInit = {
6971
iconLight: RedisGraphLight,
7072
text: DATABASE_LIST_MODULES_TEXT[RedisDefaultModules.Graph],
7173
},
74+
[RedisDefaultModules.RedisGears]: {
75+
iconDark: RedisGearsDark,
76+
iconLight: RedisGearsLight,
77+
text: DATABASE_LIST_MODULES_TEXT[RedisDefaultModules.RedisGears],
78+
},
79+
[RedisDefaultModules.RedisGears2]: {
80+
iconDark: RedisGears2Dark,
81+
iconLight: RedisGears2Light,
82+
text: DATABASE_LIST_MODULES_TEXT[RedisDefaultModules.RedisGears2],
83+
},
7284
[RedisDefaultModules.ReJSON]: {
7385
iconDark: RedisJSONDark,
7486
iconLight: RedisJSONLight,

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,11 @@ export const REDISEARCH_MODULES: string[] = [
179179
RedisDefaultModules.FTL,
180180
]
181181

182+
export const TRIGGERED_AND_FUNCTIONS_MODULES: string[] = [
183+
RedisDefaultModules.RedisGears,
184+
RedisDefaultModules.RedisGears2,
185+
]
186+
182187
export const COMMAND_MODULES = {
183188
[RedisDefaultModules.Search]: REDISEARCH_MODULES,
184189
[RedisDefaultModules.ReJSON]: [RedisDefaultModules.ReJSON],
@@ -187,6 +192,7 @@ export const COMMAND_MODULES = {
187192
}
188193

189194
const RediSearchModulesText = [...REDISEARCH_MODULES].reduce((prev, next) => ({ ...prev, [next]: 'RediSearch' }), {})
195+
const TriggeredAndFunctionsModulesText = [...TRIGGERED_AND_FUNCTIONS_MODULES].reduce((prev, next) => ({ ...prev, [next]: 'Triggers & Functions' }), {})
190196

191197
// Enums don't allow to use dynamic key
192198
export const DATABASE_LIST_MODULES_TEXT = Object.freeze({
@@ -198,7 +204,8 @@ export const DATABASE_LIST_MODULES_TEXT = Object.freeze({
198204
[RedisDefaultModules.TimeSeries]: 'RedisTimeSeries',
199205
[RedisCustomModulesName.Proto]: 'redis-protobuf',
200206
[RedisCustomModulesName.IpTables]: 'RedisPushIpTables',
201-
...RediSearchModulesText
207+
...RediSearchModulesText,
208+
...TriggeredAndFunctionsModulesText,
202209
})
203210

204211
export enum AddRedisClusterDatabaseOptions {

redisinsight/ui/src/telemetry/interfaces.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,16 @@ export enum RedisModules {
5252
RedisJSON = 'ReJSON',
5353
RediSearch = 'search',
5454
RedisTimeSeries = 'timeseries',
55+
'Triggers & Functions' = 'redisgears'
5556
}
5657

57-
interface IModuleSummary {
58+
export interface IModuleSummary {
5859
loaded: boolean
5960
version?: number
60-
semanticVersion?: number
61+
semanticVersion?: string
6162
}
63+
64+
export type RedisModulesKeyType = keyof typeof RedisModules
6265
export interface IRedisModulesSummary extends Record<keyof typeof RedisModules, IModuleSummary> {
6366
customModules: AdditionalRedisModule[]
6467
}

redisinsight/ui/src/telemetry/telemetryUtils.spec.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const DEFAULT_SUMMARY = Object.freeze(
99
RedisBloom: { loaded: false },
1010
RedisJSON: { loaded: false },
1111
RedisTimeSeries: { loaded: false },
12+
'Triggers & Functions': { loaded: false },
1213
customModules: [],
1314
},
1415
)
@@ -43,6 +44,7 @@ const getRedisModulesSummaryTests = [
4344
{ name: 'ReJSON', version: 10000, semanticVersion: '1.0.0' },
4445
{ name: 'search', version: 10000, semanticVersion: '1.0.0' },
4546
{ name: 'timeseries', version: 10000, semanticVersion: '1.0.0' },
47+
{ name: 'redisgears_2', version: 10000, semanticVersion: '1.0.0' },
4648
],
4749
expected: {
4850
RedisAI: { loaded: true, version: 10000, semanticVersion: '1.0.0' },
@@ -52,6 +54,7 @@ const getRedisModulesSummaryTests = [
5254
RedisJSON: { loaded: true, version: 10000, semanticVersion: '1.0.0' },
5355
RediSearch: { loaded: true, version: 10000, semanticVersion: '1.0.0' },
5456
RedisTimeSeries: { loaded: true, version: 10000, semanticVersion: '1.0.0' },
57+
'Triggers & Functions': { loaded: true, version: 10000, semanticVersion: '1.0.0' },
5558
customModules: [],
5659
},
5760
},

redisinsight/ui/src/telemetry/telemetryUtils.ts

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55
import isGlob from 'is-glob'
66
import { cloneDeep } from 'lodash'
77
import * as jsonpath from 'jsonpath'
8-
import { isRedisearchAvailable, Nullable } from 'uiSrc/utils'
8+
import { isRedisearchAvailable, isTriggeredAndFunctionsAvailable, Nullable } from 'uiSrc/utils'
99
import { localStorageService } from 'uiSrc/services'
1010
import { ApiEndpoints, BrowserStorageItem, KeyTypes, StreamViews } from 'uiSrc/constants'
1111
import { KeyViewType } from 'uiSrc/slices/interfaces/keys'
1212
import { StreamViewType } from 'uiSrc/slices/interfaces/stream'
1313
import { checkIsAnalyticsGranted, getInfoServer } from 'uiSrc/telemetry/checkAnalytics'
14+
import { IModuleSummary, RedisModulesKeyType } from 'uiSrc/telemetry/interfaces'
1415
import { AdditionalRedisModule } from 'apiSrc/modules/database/models/additional.redis.module'
1516
import {
1617
ITelemetrySendEvent,
@@ -219,6 +220,7 @@ const DEFAULT_SUMMARY: IRedisModulesSummary = Object.freeze(
219220
RedisBloom: { loaded: false },
220221
RedisJSON: { loaded: false },
221222
RedisTimeSeries: { loaded: false },
223+
'Triggers & Functions': { loaded: false },
222224
customModules: [],
223225
},
224226
)
@@ -229,27 +231,31 @@ const getEnumKeyBValue = (myEnum: any, enumValue: number | string): string => {
229231
return index > -1 ? keys[index] : ''
230232
}
231233

234+
const getModuleSummaryToSent = (module: AdditionalRedisModule): IModuleSummary => ({
235+
loaded: true,
236+
version: module.version,
237+
semanticVersion: module.semanticVersion,
238+
})
239+
232240
const getRedisModulesSummary = (modules: AdditionalRedisModule[] = []): IRedisModulesSummary => {
233241
const summary = cloneDeep(DEFAULT_SUMMARY)
234242
try {
235243
modules.forEach(((module) => {
236244
if (SUPPORTED_REDIS_MODULES[module.name]) {
237245
const moduleName = getEnumKeyBValue(RedisModules, module.name)
238-
summary[moduleName] = {
239-
loaded: true,
240-
version: module.version,
241-
semanticVersion: module.semanticVersion,
242-
}
246+
summary[moduleName as RedisModulesKeyType] = getModuleSummaryToSent(module)
243247
return
244248
}
245249

246250
if (isRedisearchAvailable([module])) {
247251
const redisearchName = getEnumKeyBValue(RedisModules, RedisModules.RediSearch)
248-
summary[redisearchName] = {
249-
loaded: true,
250-
version: module.version,
251-
semanticVersion: module.semanticVersion,
252-
}
252+
summary[redisearchName as RedisModulesKeyType] = getModuleSummaryToSent(module)
253+
return
254+
}
255+
256+
if (isTriggeredAndFunctionsAvailable([module])) {
257+
const triggeredAndFunctionsName = getEnumKeyBValue(RedisModules, RedisModules['Triggers & Functions'])
258+
summary[triggeredAndFunctionsName as RedisModulesKeyType] = getModuleSummaryToSent(module)
253259
return
254260
}
255261

0 commit comments

Comments
 (0)