Skip to content

Commit c0a42de

Browse files
authored
RI-7151: Collect more data in the CONFIG_DATABASES_OPEN_DATABASE (#292)
* add required interfaces; add databaseService.ts; add getRedisInfoSummary; use getRedisInfoSummary; * update backend build to 2.70.0
1 parent f2d1f81 commit c0a42de

File tree

5 files changed

+69
-3
lines changed

5 files changed

+69
-3
lines changed

.env

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ RI_APP_PORT=5541
88
RI_APP_VERSION='1.2.0'
99
RI_APP_PREFIX='api'
1010
RI_APP_FOLDER_NAME='.redis-for-vscode'
11-
RI_CDN_PATH='https://s3.amazonaws.com/redisinsight.test/public/pre-release/2.66.0/web-mini'
11+
RI_CDN_PATH='https://s3.amazonaws.com/redisinsight.test/public/pre-release/2.70.0/web-mini'
1212
RI_WITHOUT_BACKEND=false
1313
# RI_WITHOUT_BACKEND=true
1414
RI_STDOUT_LOGGER=false
@@ -22,4 +22,3 @@ RI_ENCRYPTION_KEYTAR_SERVICE="redis-for-vscode"
2222
RI_SOCKETS_CORS=true
2323
RI_FEATURES_CLOUD_ADS_DEFAULT_FLAG=true
2424
# RI_SEGMENT_WRITE_KEY='SEGMENT_WRITE_KEY'
25-

src/webviews/src/interfaces/database/databases.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,3 +508,26 @@ export interface AdditionalRedisModule {
508508
version?: number
509509
semanticVersion?: string
510510
}
511+
512+
interface RedisDatabaseStatsDto {
513+
instantaneous_input_kbps: string | undefined
514+
instantaneous_ops_per_sec: string | undefined
515+
instantaneous_output_kbps: string | undefined
516+
maxmemory_policy: string | undefined
517+
numberOfKeysRange: string | undefined
518+
uptime_in_days: string | undefined
519+
}
520+
521+
export interface RedisNodeInfoResponseInterface {
522+
version: string
523+
role?: 'master' | 'slave'
524+
server?: any
525+
stats?: RedisDatabaseStatsDto
526+
databases?: number
527+
usedMemory?: number
528+
totalKeys?: number
529+
connectedClients?: number
530+
uptimeInSeconds?: number
531+
hitRatio?: number
532+
cashedScripts?: number
533+
}

src/webviews/src/modules/keys-tree/components/database-wrapper/DatabaseWrapper.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
formatLongName,
1111
getRedisModulesSummary,
1212
sendEventTelemetry,
13+
getRedisInfoSummary,
1314
} from 'uiSrc/utils'
1415
import { ContextStoreProvider, Database, DatabaseOverview, checkConnectToDatabase, deleteDatabases, fetchDatabaseOverviewById } from 'uiSrc/store'
1516
import { Chevron, DatabaseIcon, Tooltip } from 'uiSrc/ui'
@@ -62,7 +63,7 @@ export const DatabaseWrapper = React.memo(({ database }: Props) => {
6263
}
6364
}, [])
6465

65-
const handleCheckConnectToDatabase = ({ id, provider, modules }: Database) => {
66+
const handleCheckConnectToDatabase = async ({ id, provider, modules }: Database) => {
6667
const newShowTree = !showTree
6768
sessionStorageService.set(`${StorageItem.openTreeDatabase + id}`, newShowTree)
6869

@@ -71,12 +72,15 @@ export const DatabaseWrapper = React.memo(({ database }: Props) => {
7172
return
7273
}
7374
const modulesSummary = getRedisModulesSummary(modules)
75+
const infoData = await getRedisInfoSummary(id)
76+
7477
sendEventTelemetry({
7578
event: TelemetryEvent.CONFIG_DATABASES_OPEN_DATABASE,
7679
eventData: {
7780
databaseId: id,
7881
provider,
7982
...modulesSummary,
83+
...infoData,
8084
},
8185
})
8286

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import apiService from 'uiSrc/services/apiService'
2+
import { ApiEndpoints } from 'uiSrc/constants'
3+
import { isStatusSuccessful } from 'uiSrc/utils'
4+
import { RedisNodeInfoResponseInterface } from 'uiSrc/interfaces'
5+
6+
const endpoint = ApiEndpoints.DATABASES
7+
8+
export async function getInstanceInfo(id: string) {
9+
const {
10+
data,
11+
status,
12+
} = await apiService.get<RedisNodeInfoResponseInterface>(
13+
`${endpoint}/${id}/info`,
14+
)
15+
return isStatusSuccessful(status) ? data : null
16+
}

src/webviews/src/utils/telemetry/telemetryUtils.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { AdditionalRedisModule } from 'uiSrc/store'
66
import { apiService } from 'uiSrc/services'
77
import { ApiEndpoints, DEFAULT_SUMMARY, KeyTypes, SUPPORTED_REDIS_MODULES } from 'uiSrc/constants'
88
import { useAppInfoStore } from 'uiSrc/store/hooks/use-app-info-store/useAppInfoStore'
9+
import { getInstanceInfo } from 'uiSrc/services/databaseService'
910
import { IModuleSummary, IRedisModulesSummary, ITelemetrySendEvent, MatchType, RedisModules, RedisModulesKeyType } from './interfaces'
1011
import { isRedisearchAvailable, isTriggeredAndFunctionsAvailable } from '../database'
1112

@@ -43,6 +44,29 @@ const getModuleSummaryToSent = (module: AdditionalRedisModule): IModuleSummary =
4344
semanticVersion: module.semanticVersion,
4445
})
4546

47+
export const getRedisInfoSummary = async (id: string) => {
48+
let infoData: any = {}
49+
try {
50+
const info = await getInstanceInfo(id)
51+
infoData = {
52+
redis_version: info?.version,
53+
uptime_in_days: info?.stats?.uptime_in_days,
54+
used_memory: info?.usedMemory,
55+
connected_clients: info?.connectedClients,
56+
maxmemory_policy: info?.stats?.maxmemory_policy,
57+
instantaneous_ops_per_sec: info?.stats?.instantaneous_ops_per_sec,
58+
instantaneous_input_kbps: info?.stats?.instantaneous_input_kbps,
59+
instantaneous_output_kbps: info?.stats?.instantaneous_output_kbps,
60+
numberOfKeysRange: info?.stats?.numberOfKeysRange,
61+
totalKeys: info?.totalKeys,
62+
}
63+
} catch (e) {
64+
// continue regardless of error
65+
}
66+
67+
return infoData
68+
}
69+
4670
export const getRedisModulesSummary = (modules: AdditionalRedisModule[] = []): IRedisModulesSummary => {
4771
const summary = cloneDeep(DEFAULT_SUMMARY)
4872
try {

0 commit comments

Comments
 (0)