From 746736a356f6b40eaff3e4efc68e409570f8a44f Mon Sep 17 00:00:00 2001 From: "Roman.Sergeenko" Date: Fri, 4 Nov 2022 13:23:24 +0400 Subject: [PATCH] #RI-3716 - add telemetry for search --- .../browser-right-panel/BrowserRightPanel.tsx | 12 +++- .../components/keys-header/KeysHeader.tsx | 62 +++++++++---------- .../RediSearchIndexesList.tsx | 20 +++++- redisinsight/ui/src/telemetry/events.ts | 5 ++ 4 files changed, 63 insertions(+), 36 deletions(-) diff --git a/redisinsight/ui/src/pages/browser/components/browser-right-panel/BrowserRightPanel.tsx b/redisinsight/ui/src/pages/browser/components/browser-right-panel/BrowserRightPanel.tsx index e10f056b1c..be5b498528 100644 --- a/redisinsight/ui/src/pages/browser/components/browser-right-panel/BrowserRightPanel.tsx +++ b/redisinsight/ui/src/pages/browser/components/browser-right-panel/BrowserRightPanel.tsx @@ -64,6 +64,16 @@ const BrowserRightPanel = (props: Props) => { closeRightPanels() } + const onCloseRedisearchPanel = () => { + closePanel() + sendEventTelemetry({ + event: TelemetryEvent.SEARCH_INDEX_ADD_CANCELLED, + eventData: { + databaseId: instanceId + } + }) + } + const handleToggleFullScreen = () => { dispatch(toggleBrowserFullScreen()) @@ -130,7 +140,7 @@ const BrowserRightPanel = (props: Props) => { /> )} {isCreateIndexPanelOpen && every([!isAddKeyPanelOpen, !isBulkActionsPanelOpen], Boolean) && ( - + )} ) diff --git a/redisinsight/ui/src/pages/browser/components/keys-header/KeysHeader.tsx b/redisinsight/ui/src/pages/browser/components/keys-header/KeysHeader.tsx index baadb6c82c..74ed005e53 100644 --- a/redisinsight/ui/src/pages/browser/components/keys-header/KeysHeader.tsx +++ b/redisinsight/ui/src/pages/browser/components/keys-header/KeysHeader.tsx @@ -1,47 +1,30 @@ /* eslint-disable react/destructuring-assignment */ +import { EuiButton, EuiButtonIcon, EuiIcon, EuiLink, EuiPopover, EuiText, EuiToolTip, } from '@elastic/eui' +import cx from 'classnames' /* eslint-disable react/no-this-in-sfc */ -import React, { Ref, useRef, FC, SVGProps, useState, useCallback } from 'react' +import React, { FC, Ref, SVGProps, useCallback, useRef, useState } from 'react' import { useDispatch, useSelector } from 'react-redux' -import cx from 'classnames' import AutoSizer from 'react-virtualized-auto-sizer' -import { - EuiButton, - EuiButtonIcon, - EuiIcon, - EuiLink, - EuiPopover, - EuiText, - EuiToolTip, -} from '@elastic/eui' - -import { - changeKeyViewType, - changeSearchMode, - fetchKeys, - keysSelector, - resetKeysData, -} from 'uiSrc/slices/browser/keys' -import { - resetBrowserTree, - setBrowserKeyListDataLoaded, -} from 'uiSrc/slices/app/context' -import { connectedInstanceSelector } from 'uiSrc/slices/instances/instances' -import { sendEventTelemetry, TelemetryEvent, getBasedOnViewTypeEvent } from 'uiSrc/telemetry' -import { SCAN_COUNT_DEFAULT, SCAN_TREE_COUNT_DEFAULT } from 'uiSrc/constants/api' -import { KeysStoreData, KeyViewType, SearchMode } from 'uiSrc/slices/interfaces/keys' -import KeysSummary from 'uiSrc/components/keys-summary' -import { localStorageService } from 'uiSrc/services' -import { BrowserStorageItem } from 'uiSrc/constants' -import { REDISEARCH_MODULES } from 'uiSrc/slices/interfaces' -import { ReactComponent as TreeViewIcon } from 'uiSrc/assets/img/icons/treeview.svg' import { ReactComponent as BulkActionsIcon } from 'uiSrc/assets/img/icons/bulk_actions.svg' +import { ReactComponent as TreeViewIcon } from 'uiSrc/assets/img/icons/treeview.svg' import { ReactComponent as VectorIcon } from 'uiSrc/assets/img/icons/vector.svg' import { ReactComponent as RediSearchIcon } from 'uiSrc/assets/img/modules/RedisSearchLight.svg' +import KeysSummary from 'uiSrc/components/keys-summary' +import { BrowserStorageItem } from 'uiSrc/constants' +import { SCAN_COUNT_DEFAULT, SCAN_TREE_COUNT_DEFAULT } from 'uiSrc/constants/api' +import { localStorageService } from 'uiSrc/services' +import { resetBrowserTree, setBrowserKeyListDataLoaded, } from 'uiSrc/slices/app/context' -import FilterKeyType from '../filter-key-type' -import SearchKeyList from '../search-key-list' +import { changeKeyViewType, changeSearchMode, fetchKeys, keysSelector, resetKeysData, } from 'uiSrc/slices/browser/keys' +import { connectedInstanceSelector } from 'uiSrc/slices/instances/instances' +import { REDISEARCH_MODULES } from 'uiSrc/slices/interfaces' +import { KeysStoreData, KeyViewType, SearchMode } from 'uiSrc/slices/interfaces/keys' +import { getBasedOnViewTypeEvent, sendEventTelemetry, TelemetryEvent } from 'uiSrc/telemetry' import AutoRefresh from '../auto-refresh' + +import FilterKeyType from '../filter-key-type' import RediSearchIndexesList from '../redisearch-key-list' +import SearchKeyList from '../search-key-list' import styles from './styles.module.scss' @@ -260,6 +243,17 @@ const KeysHeader = (props: Props) => { } const handleSwitchSearchMode = (mode: SearchMode) => { + if (searchMode !== mode) { + sendEventTelemetry({ + event: TelemetryEvent.SEARCH_MODE_CHANGED, + eventData: { + databaseId: instanceId, + previous: searchMode, + current: mode + } + }) + } + dispatch(changeSearchMode(mode)) } diff --git a/redisinsight/ui/src/pages/browser/components/redisearch-key-list/RediSearchIndexesList.tsx b/redisinsight/ui/src/pages/browser/components/redisearch-key-list/RediSearchIndexesList.tsx index 9d200b3fb7..3fe56a1b9c 100644 --- a/redisinsight/ui/src/pages/browser/components/redisearch-key-list/RediSearchIndexesList.tsx +++ b/redisinsight/ui/src/pages/browser/components/redisearch-key-list/RediSearchIndexesList.tsx @@ -1,5 +1,4 @@ import { - EuiButton, EuiButtonEmpty, EuiOutsideClickDetector, EuiSuperSelect, @@ -16,8 +15,10 @@ import { redisearchListSelector, fetchRedisearchListAction, } from 'uiSrc/slices/browser/redisearch' +import { connectedInstanceSelector } from 'uiSrc/slices/instances/instances' import { KeyViewType } from 'uiSrc/slices/interfaces/keys' import { fetchKeys, keysSelector } from 'uiSrc/slices/browser/keys' +import { sendEventTelemetry, TelemetryEvent } from 'uiSrc/telemetry' import { bufferToString, formatLongName, Nullable } from 'uiSrc/utils' import { SCAN_COUNT_DEFAULT, SCAN_TREE_COUNT_DEFAULT } from 'uiSrc/constants/api' @@ -35,6 +36,7 @@ const RediSearchIndexesList = (props: Props) => { const { viewType, searchMode } = useSelector(keysSelector) const { selectedIndex = '' } = useSelector(redisearchSelector) const { data: list = [], loading } = useSelector(redisearchListSelector) + const { id: instanceId } = useSelector(connectedInstanceSelector) const [isSelectOpen, setIsSelectOpen] = useState(false) const [index, setIndex] = useState>(JSON.stringify(selectedIndex)) @@ -76,6 +78,14 @@ const RediSearchIndexesList = (props: Props) => { if (isString(value) && value === CREATE) { onCreateIndex(true) setIsSelectOpen(false) + + sendEventTelemetry({ + event: TelemetryEvent.SEARCH_INDEX_ADD_BUTTON_CLICKED, + eventData: { + databaseId: instanceId + } + }) + return } @@ -88,6 +98,14 @@ const RediSearchIndexesList = (props: Props) => { '0', viewType === KeyViewType.Browser ? SCAN_COUNT_DEFAULT : SCAN_TREE_COUNT_DEFAULT, )) + + sendEventTelemetry({ + event: TelemetryEvent.SEARCH_INDEX_ADD_BUTTON_CLICKED, + eventData: { + databaseId: instanceId, + totalNumberOfIndexes: list.length + } + }) } return ( diff --git a/redisinsight/ui/src/telemetry/events.ts b/redisinsight/ui/src/telemetry/events.ts index 96c66005ea..56436755a5 100644 --- a/redisinsight/ui/src/telemetry/events.ts +++ b/redisinsight/ui/src/telemetry/events.ts @@ -187,4 +187,9 @@ export enum TelemetryEvent { DATABASE_ANALYSIS_EXTRAPOLATION_CHANGED = 'DATABASE_ANALYSIS_EXTRAPOLATION_CHANGED', USER_SURVEY_LINK_CLICKED = 'USER_SURVEY_LINK_CLICKED', + + SEARCH_MODE_CHANGED = 'SEARCH_MODE_CHANGED', + SEARCH_INDEX_CHANGED = 'SEARCH_INDEX_CHANGED', + SEARCH_INDEX_ADD_BUTTON_CLICKED = 'SEARCH_INDEX_ADD_BUTTON_CLICKED', + SEARCH_INDEX_ADD_CANCELLED = 'SEARCH_INDEX_ADD_CANCELLED', }