Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion redisinsight/ui/src/pages/browser/BrowserPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,9 @@ const BrowserPage = () => {
const sendPageView = (instanceId: string) => {
sendPageViewTelemetry({
name: TelemetryPageView.BROWSER_PAGE,
databaseId: instanceId
eventData: {
databaseId: instanceId
}
})
setIsPageViewSent(true)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ const KeyDetails = (props: Props) => {
const { viewType } = useSelector(keysSelector)
const { loading, error = '', data } = useSelector(selectedKeySelector)
const isKeySelected = !isNull(useSelector(selectedKeyDataSelector))
const { type: keyType, name: keyName, length: keyLength } = useSelector(selectedKeyDataSelector) ?? {
const { type: keyType, length: keyLength } = useSelector(selectedKeyDataSelector) ?? {
type: KeyTypes.String,
}

Expand All @@ -55,14 +55,7 @@ const KeyDetails = (props: Props) => {
if (keyProp === null) {
return
}
// Restore key details from context in future
// (selectedKey.data?.name !== keyProp)
dispatch(fetchKeyInfo(keyProp))
dispatch(setSelectedKeyRefreshDisabled(false))
}, [keyProp])

useEffect(() => {
if (!isUndefined(keyName)) {
if (keyProp?.data) {
sendEventTelemetry({
event: getBasedOnViewTypeEvent(
viewType,
Expand All @@ -76,7 +69,11 @@ const KeyDetails = (props: Props) => {
}
})
}
}, [keyName])
// Restore key details from context in future
// (selectedKey.data?.name !== keyProp)
dispatch(fetchKeyInfo(keyProp))
dispatch(setSelectedKeyRefreshDisabled(false))
}, [keyProp])

const onCloseAddItemPanel = () => {
sendEventTelemetry({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,9 @@ const ClusterDetailsPage = () => {
const sendPageView = (instanceId: string) => {
sendPageViewTelemetry({
name: TelemetryPageView.CLUSTER_DETAILS_PAGE,
databaseId: instanceId
eventData: {
databaseId: instanceId
}
})
setIsPageViewSent(true)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,9 @@ const DatabaseAnalysisPage = () => {
const sendPageView = (instanceId: string) => {
sendPageViewTelemetry({
name: TelemetryPageView.DATABASE_ANALYSIS,
databaseId: instanceId
eventData: {
databaseId: instanceId
}
})
setIsPageViewSent(true)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,14 +145,15 @@ const DatabasesListWrapper = ({ width, onEditInstance, editedInstance, onDeleteI
...modulesSummary,
}
})
dispatch(checkConnectToInstanceAction(id, connectToInstance))
dispatch(checkConnectToInstanceAction(id, connectToInstance, undefined, contextInstanceId !== id))
}

const handleClickDeleteInstance = (id: string) => {
const handleClickDeleteInstance = ({ id, provider }: Instance) => {
sendEventTelemetry({
event: TelemetryEvent.CONFIG_DATABASES_SINGLE_DATABASE_DELETE_CLICKED,
eventData: {
databaseId: id
databaseId: id,
provider
}
})
showPopover(id)
Expand All @@ -162,7 +163,8 @@ const DatabasesListWrapper = ({ width, onEditInstance, editedInstance, onDeleteI
sendEventTelemetry({
event: TelemetryEvent.CONFIG_DATABASES_DATABASE_EDIT_CLICKED,
eventData: {
databaseId: instance.id
databaseId: instance.id,
provider: instance.provider,
}
})
onEditInstance(instance)
Expand Down Expand Up @@ -394,7 +396,7 @@ const DatabasesListWrapper = ({ width, onEditInstance, editedInstance, onDeleteI
updateLoading={false}
showPopover={showPopover}
handleDeleteItem={() => handleDeleteInstance(instance)}
handleButtonClick={() => handleClickDeleteInstance(instance.id)}
handleButtonClick={() => handleClickDeleteInstance(instance)}
testid={`delete-instance-${instance.id}`}
/>
</>
Expand Down
4 changes: 3 additions & 1 deletion redisinsight/ui/src/pages/pub-sub/PubSubPage.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@ describe('PubSubPage', () => {

expect(sendPageViewTelemetry).toBeCalledWith({
name: TelemetryPageView.PUBSUB_PAGE,
databaseId: 'instanceId'
eventData: {
databaseId: 'instanceId'
}
})
})
})
4 changes: 3 additions & 1 deletion redisinsight/ui/src/pages/pub-sub/PubSubPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@ const PubSubPage = () => {
const sendPageView = (instanceId: string) => {
sendPageViewTelemetry({
name: TelemetryPageView.PUBSUB_PAGE,
databaseId: instanceId
eventData: {
databaseId: instanceId
}
})
setIsPageViewSent(true)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ describe('Config', () => {

expect(sendPageViewTelemetry).toBeCalledWith({
name: TelemetryPageView.RDI_CONFIG,
eventData: {
rdiInstanceId: 'rdiInstanceId',
}
})
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ const Config = () => {
useEffect(() => {
sendPageViewTelemetry({
name: TelemetryPageView.RDI_CONFIG,
eventData: {
rdiInstanceId
}
})

return () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ const JobWrapper = () => {
useEffect(() => {
sendPageViewTelemetry({
name: TelemetryPageView.RDI_JOBS,
eventData: {
rdiInstanceId
}
})
}, [])

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ describe('JobWrapper', () => {

expect(sendPageViewTelemetry).toBeCalledWith({
name: TelemetryPageView.RDI_JOBS,
eventData: {
rdiInstanceId: 'rdiInstanceId',
}
})
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,10 @@ describe('StatisticsPage', () => {
render(<StatisticsPage />)

expect(sendPageViewTelemetry).toBeCalledWith({
name: TelemetryPageView.RDI_STATUS
name: TelemetryPageView.RDI_STATUS,
eventData: {
rdiInstanceId: 'rdiInstanceId',
}
})
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,10 @@ const StatisticsPage = () => {
dispatch(fetchRdiStatistics(rdiInstanceId))

sendPageViewTelemetry({
name: TelemetryPageView.RDI_STATUS
name: TelemetryPageView.RDI_STATUS,
eventData: {
rdiInstanceId
}
})
}, [])

Expand Down
4 changes: 3 additions & 1 deletion redisinsight/ui/src/pages/slow-log/SlowLogPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,9 @@ const SlowLogPage = () => {
const sendPageView = (instanceId: string) => {
sendPageViewTelemetry({
name: TelemetryPageView.SLOWLOG_PAGE,
databaseId: instanceId
eventData: {
databaseId: instanceId
}
})
setIsPageViewSent(true)
}
Expand Down
4 changes: 3 additions & 1 deletion redisinsight/ui/src/pages/workbench/WorkbenchPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@ const WorkbenchPage = () => {
const sendPageView = (instanceId: string) => {
sendPageViewTelemetry({
name: TelemetryPageView.WORKBENCH_PAGE,
databaseId: instanceId
eventData: {
databaseId: instanceId
}
})
setIsPageViewSent(true)
}
Expand Down
11 changes: 8 additions & 3 deletions redisinsight/ui/src/telemetry/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,22 @@ export interface ITelemetryIdentify {
sessionId: number
}

export type EventData = {
[key: string]: any
databaseId?: string
provider?: string
}

export interface ITelemetrySendEvent {
event: TelemetryEvent
eventData?: Object
eventData?: EventData
nonTracking?: boolean
traits?: Object
}

export interface ITelemetrySendPageView {
name: string
eventData?: Object
databaseId?: string
eventData?: EventData
nonTracking?: boolean
}

Expand Down
25 changes: 20 additions & 5 deletions redisinsight/ui/src/telemetry/telemetryUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
* This module abstracts the exact service/framework used for tracking usage.
*/
import isGlob from 'is-glob'
import { cloneDeep } from 'lodash'
import { cloneDeep, get } from 'lodash'
import jsonpath from 'jsonpath'
import { isRedisearchAvailable } from 'uiSrc/utils'
import { Maybe, isRedisearchAvailable } from 'uiSrc/utils'
import { ApiEndpoints, KeyTypes } from 'uiSrc/constants'
import { KeyViewType } from 'uiSrc/slices/interfaces/keys'
import { IModuleSummary, ITelemetrySendEvent, ITelemetrySendPageView, RedisModulesKeyType } from 'uiSrc/telemetry/interfaces'
import { apiService } from 'uiSrc/services'
import { store } from 'uiSrc/slices/store'
import { AdditionalRedisModule } from 'apiSrc/modules/database/models/additional.redis.module'
import {
IRedisModulesSummary,
Expand All @@ -19,6 +20,11 @@ import {
import { TelemetryEvent } from './events'
import { checkIsAnalyticsGranted } from './checkAnalytics'

export const getProvider = (dbId: string): Maybe<string> => {
const instance = get(store.getState(), 'connections.instances.connectedInstance')
return (instance.id === dbId) ? instance.provider : undefined
}

const TELEMETRY_EMPTY_VALUE = 'none'

const sendEventTelemetry = async ({ event, eventData = {}, traits = {} }: ITelemetrySendEvent) => {
Expand All @@ -27,19 +33,28 @@ const sendEventTelemetry = async ({ event, eventData = {}, traits = {} }: ITelem
if (!isAnalyticsGranted) {
return
}
await apiService.post(`${ApiEndpoints.ANALYTICS_SEND_EVENT}`, { event, eventData, traits })

if (!eventData.provider && eventData.databaseId) {
eventData.provider = getProvider(eventData.databaseId)
}
await apiService.post(`${ApiEndpoints.ANALYTICS_SEND_EVENT}`,
{ event, eventData, traits })
} catch (e) {
// continue regardless of error
}
}

const sendPageViewTelemetry = async ({ name, eventData }: ITelemetrySendPageView) => {
const sendPageViewTelemetry = async ({ name, eventData = {} }: ITelemetrySendPageView) => {
try {
const isAnalyticsGranted = checkIsAnalyticsGranted()
if (!isAnalyticsGranted) {
return
}
await apiService.post(`${ApiEndpoints.ANALYTICS_SEND_PAGE}`, { event: name, eventData, })
if (!eventData.provider && eventData.databaseId) {
eventData.provider = getProvider(eventData.databaseId)
}
await apiService.post(`${ApiEndpoints.ANALYTICS_SEND_PAGE}`,
{ event: name, eventData })
} catch (e) {
// continue regardless of error
}
Expand Down