Skip to content

Commit 0065138

Browse files
add telemetry events for all pages
1 parent 310dc04 commit 0065138

File tree

9 files changed

+182
-15
lines changed

9 files changed

+182
-15
lines changed

tests/e2e/tests/electron/critical-path/analysis-tools/recommendations.e2e.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
} from '../../../../helpers/conf';
99
import { DatabaseAPIRequests } from '../../../../helpers/api/api-database';
1010
import { RecommendationsActions } from '../../../../common-actions/recommendations-actions';
11+
import { Telemetry } from '../../../../helpers';
1112

1213
const memoryEfficiencyPage = new MemoryEfficiencyPage();
1314
const myRedisDatabasePage = new MyRedisDatabasePage();
@@ -16,6 +17,17 @@ const recommendationsActions = new RecommendationsActions();
1617
const databaseHelper = new DatabaseHelper();
1718
const databaseAPIRequests = new DatabaseAPIRequests();
1819

20+
const telemetry = new Telemetry();
21+
22+
const logger = telemetry.createLogger();
23+
24+
const telemetryEvent = 'DATABASE_ANALYSIS_TIPS_EXPANDED';
25+
const expectedProperties = [
26+
'databaseId',
27+
'provider',
28+
'recommendation'
29+
];
30+
1931
const luaScriptRecommendation = RecommendationIds.luaScript;
2032
const useSmallerKeysRecommendation = RecommendationIds.useSmallerKeys;
2133
const redisVersionRecommendation = RecommendationIds.redisVersion;
@@ -34,6 +46,7 @@ test
3446
// Go to Recommendations tab
3547
await t.click(memoryEfficiencyPage.recommendationsTab);
3648
})
49+
.requestHooks(logger)
3750
.after(async() => {
3851
await browserPage.Cli.sendCommandInCli('SCRIPT FLUSH');
3952
await databaseAPIRequests.deleteStandaloneDatabaseApi(ossStandaloneBigConfig);
@@ -60,6 +73,10 @@ test
6073
// Verify that user can expand/collapse recommendation
6174
const expandedTextContaiterSize = await memoryEfficiencyPage.getRecommendationByName(luaScriptRecommendation).offsetHeight;
6275
await t.click(memoryEfficiencyPage.getRecommendationButtonByName(luaScriptRecommendation));
76+
77+
//Verify telemetry event
78+
await telemetry.verifyEventHasProperties(telemetryEvent, expectedProperties, logger);
79+
6380
await t.expect(memoryEfficiencyPage.getRecommendationByName(luaScriptRecommendation).offsetHeight)
6481
.lt(expandedTextContaiterSize, 'Lua script recommendation not collapsed');
6582
await t.click(memoryEfficiencyPage.getRecommendationButtonByName(luaScriptRecommendation));

tests/e2e/tests/web/critical-path/pub-sub/subscribe-unsubscribe.e2e.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,24 @@ import { commonUrl, ossStandaloneConfig, ossStandaloneV5Config } from '../../../
44
import { rte } from '../../../../helpers/constants';
55
import { verifyMessageDisplayingInPubSub } from '../../../../helpers/pub-sub';
66
import { DatabaseAPIRequests } from '../../../../helpers/api/api-database';
7+
import { Telemetry } from '../../../../helpers';
78

89
const myRedisDatabasePage = new MyRedisDatabasePage();
910
const pubSubPage = new PubSubPage();
1011
const workbenchPage = new WorkbenchPage();
1112
const databaseHelper = new DatabaseHelper();
1213
const databaseAPIRequests = new DatabaseAPIRequests();
1314
const browserPage = new BrowserPage();
15+
const telemetry = new Telemetry();
16+
17+
const logger = telemetry.createLogger();
18+
19+
const telemetryEvent = 'PUBSUB_MESSAGES_CLEARED';
20+
const expectedProperties = [
21+
'databaseId',
22+
'messages',
23+
'provider'
24+
];
1425

1526
fixture `Subscribe/Unsubscribe from a channel`
1627
.meta({ rte: rte.standalone, type: 'critical_path' })
@@ -152,6 +163,10 @@ test('Verify that user can clear all the messages from the pubsub window', async
152163
await t.hover(pubSubPage.clearPubSubButton);
153164
await t.expect(pubSubPage.clearButtonTooltip.textContent).contains('Clear Messages', 'Clear Messages tooltip not displayed');
154165
await t.click(pubSubPage.clearPubSubButton);
166+
167+
//Verify telemetry event
168+
await telemetry.verifyEventHasProperties(telemetryEvent, expectedProperties, logger);
169+
155170
// Verify that the clear of the messages does not affect the subscription state
156171
await t.expect(pubSubPage.subscribeStatus.textContent).eql('You are subscribed', 'User is not subscribed', { timeout: 10000 });
157172
// Verify that the Messages counter is reset after clear messages

tests/e2e/tests/web/critical-path/rdi/add-rdi-instance.e2e.ts

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { RdiInstancePage } from '../../../../pageObjects/rdi-instance-page';
77
import { commonUrl } from '../../../../helpers/conf';
88
import { RdiPopoverOptions, RedisOverviewPage } from '../../../../helpers/constants';
99
import { MyRedisDatabasePage } from '../../../../pageObjects';
10-
import { Common, DatabaseHelper } from '../../../../helpers';
10+
import { Common, DatabaseHelper, Telemetry } from '../../../../helpers';
1111
import { RdiApiRequests } from '../../../../helpers/api/api-rdi';
1212
import { goBackHistory } from '../../../../helpers/utils';
1313

@@ -18,6 +18,22 @@ const myRedisDatabasePage = new MyRedisDatabasePage();
1818
const databaseHelper = new DatabaseHelper();
1919
const rdiApiRequests = new RdiApiRequests();
2020

21+
const telemetry = new Telemetry();
22+
23+
const logger = telemetry.createLogger();
24+
25+
const telemetryEvents = ['RDI_INSTANCE_LIST_SEARCHED','RDI_START_OPTION_SELECTED'];
26+
27+
const instanceExpectedProperties = [
28+
'instancesFullCount',
29+
'instancesSearchedCount'
30+
];
31+
32+
const pipelineExpectedProperties = [
33+
'id',
34+
'option'
35+
];
36+
2137
const rdiInstance: RdiInstance = {
2238
alias: 'Alias',
2339
url: 'https://11.111.111.111',
@@ -104,19 +120,24 @@ test('Verify that user can add and remove RDI', async() => {
104120

105121
await t.expect(rdiInstancesListPage.emptyRdiList.textContent).contains('Redis Data Integration', 'The instance is not removed');
106122
});
107-
test
123+
test.requestHooks(logger)
108124
.after(async() => {
109125
await rdiInstancesListPage.deleteAllInstance();
110126
})('Verify that user can search by RDI', async() => {
111127
await rdiInstancesListPage.addRdi(rdiInstance);
112128
await rdiInstancesListPage.addRdi(rdiInstance2);
113129
await t.typeText(rdiInstancesListPage.searchInput, rdiInstance2.alias);
130+
131+
//Verify telemetry event
132+
await telemetry.verifyEventHasProperties(telemetryEvents[0], instanceExpectedProperties, logger);
133+
114134
const addedRdiInstance = await rdiInstancesListPage.getRdiInstanceValuesByIndex(0);
115135
await t.expect(addedRdiInstance.alias).eql(rdiInstance2.alias, 'correct item is displayed');
116136

117137
await t.expect(await rdiInstancesListPage.rdiInstanceRow.count).eql(1, 'search works incorrectly');
118138
});
119-
test('Verify that sorting on the list of rdi saved when rdi opened', async t => {
139+
test.requestHooks(logger)
140+
('Verify that sorting on the list of rdi saved when rdi opened', async t => {
120141
// Sort by Connection Type
121142
await rdiInstancesListPage.addRdi(rdiInstance);
122143
await rdiInstancesListPage.addRdi(rdiInstance3);
@@ -128,6 +149,10 @@ test('Verify that sorting on the list of rdi saved when rdi opened', async t =>
128149
await rdiInstancesListPage.compareInstances(actualDatabaseList, sortedByAlias);
129150
await rdiInstancesListPage.clickRdiByName(rdiInstance.alias);
130151
await rdiInstancePage.selectStartPipelineOption(RdiPopoverOptions.Pipeline);
152+
153+
//verify telemetry event
154+
await telemetry.verifyEventHasProperties(telemetryEvents[1], pipelineExpectedProperties, logger);
155+
131156
await t.click(rdiInstancePage.RdiHeader.breadcrumbsLink);
132157
actualDatabaseList = await rdiInstancesListPage.getAllRdiNames();
133158
await rdiInstancesListPage.compareInstances(actualDatabaseList, sortedByAlias);

tests/e2e/tests/web/critical-path/settings/settings.e2e.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,21 @@ import { MyRedisDatabasePage, SettingsPage } from '../../../../pageObjects';
22
import { rte } from '../../../../helpers/constants';
33
import { DatabaseHelper } from '../../../../helpers/database';
44
import { commonUrl } from '../../../../helpers/conf';
5+
import { Common, Telemetry } from '../../../../helpers';
56

67
const myRedisDatabasePage = new MyRedisDatabasePage();
78
const settingsPage = new SettingsPage();
89
const databaseHelper = new DatabaseHelper();
10+
const telemetry = new Telemetry();
11+
12+
const logger = telemetry.createLogger();
13+
14+
const telemetryEvent = 'SETTINGS_WORKBENCH_EDITOR_CLEAR_CHANGED';
15+
16+
const expectedProperties = [
17+
'currentValue',
18+
'newValue'
19+
];
920

1021
const explicitErrorHandler = (): void => {
1122
window.addEventListener('error', e => {
@@ -52,5 +63,19 @@ test('Verify that user can turn on/off Analytics in Settings in the application'
5263
await myRedisDatabasePage.reloadPage();
5364
await t.click(settingsPage.accordionPrivacySettings);
5465
await t.expect(await settingsPage.getAnalyticsSwitcherValue()).eql(value, 'Analytics was switched properly');
66+
// Verify that telemetry is turned off
67+
if(value === false){
68+
await t.click(settingsPage.accordionWorkbenchSettings);
69+
//turn on and turn off option
70+
await t.click(settingsPage.switchEditorCleanupOption);
71+
await t.click(settingsPage.switchEditorCleanupOption);
72+
73+
try {
74+
await telemetry.verifyEventHasProperties(telemetryEvent, expectedProperties, logger);
75+
await t.expect(true).eql(false, 'telemetry is sent when analytics is disabled');
76+
} catch (error) {
77+
await t.expect(true).eql(true, 'telemetry is not sent when analytics is disabled');
78+
}
79+
}
5580
}
5681
});

tests/e2e/tests/web/critical-path/slow-log/slow-log.e2e.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,29 @@ import { rte } from '../../../../helpers/constants';
33
import { DatabaseHelper } from '../../../../helpers/database';
44
import { commonUrl, ossStandaloneBigConfig } from '../../../../helpers/conf';
55
import { DatabaseAPIRequests } from '../../../../helpers/api/api-database';
6+
import { Telemetry } from '../../../../helpers';
67

78
const slowLogPage = new SlowLogPage();
89
const myRedisDatabasePage = new MyRedisDatabasePage();
910
const browserPage = new BrowserPage();
1011
const overviewPage = new ClusterDetailsPage();
1112
const databaseHelper = new DatabaseHelper();
1213
const databaseAPIRequests = new DatabaseAPIRequests();
14+
const telemetry = new Telemetry();
15+
16+
const logger = telemetry.createLogger();
17+
18+
const telemetryEvents = ['SLOWLOG_CLEARED','SLOWLOG_LOADED'];
19+
const clearExpectedProperties = [
20+
'databaseId',
21+
'provider'
22+
];
23+
24+
const loadExpectedProperties = [
25+
'databaseId',
26+
'numberOfCommands',
27+
'provider'
28+
];
1329

1430
const slowerThanParameter = 1;
1531
let maxCommandLength = 50;
@@ -108,7 +124,8 @@ test('Verify that user can set slowlog-log-slower-than value in milliseconds and
108124
await t.expect(parseFloat(microsecondsDuration.replace(' ', '')) / 1000).eql(parseFloat(millisecondsDuration));
109125
await t.expect(parseFloat(microsecondsDuration.replace(' ', ''))).eql(parseFloat(millisecondsDuration) * 1000);
110126
});
111-
test('Verify that user can reset settings to default on Slow Log page', async t => {
127+
test.requestHooks(logger)
128+
('Verify that user can reset settings to default on Slow Log page', async t => {
112129
// Set slowlog-max-len=0
113130
command = 'info';
114131
await slowLogPage.changeSlowerThanParameter(slowerThanParameter, slowLogPage.slowLogConfigureMicroSecondsUnit);
@@ -117,12 +134,20 @@ test('Verify that user can reset settings to default on Slow Log page', async t
117134
await t.expect(slowLogPage.slowLogCommandValue.withExactText(command).exists).ok('Logged command not found');
118135
await t.click(slowLogPage.slowLogClearButton);
119136
await t.click(slowLogPage.slowLogConfirmClearButton);
137+
138+
//Verify telemetry event
139+
await telemetry.verifyEventHasProperties(telemetryEvents[0], clearExpectedProperties, logger);
140+
120141
// Verify that user can clear Slow Log
121142
await t.expect(slowLogPage.slowLogEmptyResult.exists).ok('Slow log is not cleared');
122143

123144
// Set slower than parameter and max length
124145
await slowLogPage.changeSlowerThanParameter(slowerThanParameter, slowLogPage.slowLogConfigureMicroSecondsUnit);
125146
await slowLogPage.changeMaxLengthParameter(maxCommandLength);
147+
148+
//Verify telemetry event
149+
await telemetry.verifyEventHasProperties(telemetryEvents[1], loadExpectedProperties, logger);
150+
126151
// Reset settings to default
127152
await slowLogPage.resetToDefaultConfig();
128153
// Compare configuration after re-setting

tests/e2e/tests/web/critical-path/workbench/default-scripts-area.e2e.ts

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,28 @@ const telemetry = new Telemetry();
1818
let indexName = chance.word({ length: 5 });
1919
let keyName = chance.word({ length: 5 });
2020
const logger = telemetry.createLogger();
21-
const telemetryEvent = 'EXPLORE_PANEL_TUTORIAL_OPENED';
21+
const tutorialTelemetryEvent = 'EXPLORE_PANEL_TUTORIAL_OPENED';
22+
const workbenchTelemetryEvents = ['WORKBENCH_COMMAND_SUBMITTED','WORKBENCH_MODE_CHANGED']
2223
const telemetryPath = 'static/tutorials/ds/hashes.md';
23-
const expectedProperties = [
24+
const tutorialExpectedProperties = [
2425
'databaseId',
2526
'path'
2627
];
28+
const workbenchExpectedProperties = [
29+
'command',
30+
'databaseId',
31+
'multiple',
32+
'pipeline',
33+
'provider',
34+
'rawMode',
35+
'results'
36+
];
37+
const rawModeExpectedProperties = [
38+
'changedFromMode',
39+
'changedToMode',
40+
'databaseId',
41+
'provider',
42+
];
2743

2844
fixture `Default scripts area at Workbench`
2945
.meta({ type: 'critical_path', rte: rte.standalone })
@@ -53,20 +69,24 @@ test
5369
`FT.INFO "${indexName}"`;
5470
// Send commands
5571
await workbenchPage.sendCommandInWorkbench(commandsForSend.join('\n'));
72+
await telemetry.verifyEventHasProperties(workbenchTelemetryEvents[0], workbenchExpectedProperties, logger);
5673
// Run automatically added "FT._LIST" and "FT.INFO {index}" scripts
5774
await workbenchPage.NavigationHeader.togglePanel(true);
5875
const tutorials = await workbenchPage.InsightsPanel.setActiveTab(ExploreTabs.Tutorials);
5976
await t.click(tutorials.dataStructureAccordionTutorialButton);
6077
await t.click(tutorials.internalLinkWorkingWithHashes);
6178

6279
// Verify that telemetry event 'WORKBENCH_ENABLEMENT_AREA_GUIDE_OPENED' sent and has all expected properties
63-
await telemetry.verifyEventHasProperties(telemetryEvent, expectedProperties, logger);
64-
await telemetry.verifyEventPropertyValue(telemetryEvent, 'path', telemetryPath, logger);
80+
await telemetry.verifyEventHasProperties(tutorialTelemetryEvent, tutorialExpectedProperties, logger);
81+
await telemetry.verifyEventPropertyValue(tutorialTelemetryEvent, 'path', telemetryPath, logger);
6582

6683
await workbenchPage.sendCommandInWorkbench(addedScript);
6784

6885
// Check the FT._LIST result
6986
await t.expect(workbenchPage.queryTextResult.textContent).contains(indexName, 'The result of the FT._LIST command not found');
87+
// Verify telemetry event
88+
await t.click(workbenchPage.rawModeBtn);
89+
await telemetry.verifyEventHasProperties(workbenchTelemetryEvents[1], rawModeExpectedProperties, logger);
7090
// Check the FT.INFO result
7191
await t.switchToIframe(workbenchPage.iframe);
7292
await t.expect(workbenchPage.queryColumns.textContent).contains('name', 'The result of the FT.INFO command not found');

tests/e2e/tests/web/regression/settings/settings.e2e.ts

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,29 @@ import {
44
commonUrl, ossClusterConfig,
55
} from '../../../../helpers/conf';
66
import { DatabaseAPIRequests } from '../../../../helpers/api/api-database';
7-
import { Common, DatabaseHelper } from '../../../../helpers';
7+
import { Common, DatabaseHelper, Telemetry } from '../../../../helpers';
88

99
const browserPage = new BrowserPage();
1010
const databaseAPIRequests = new DatabaseAPIRequests();
1111
const workbenchPage = new WorkbenchPage();
1212
const settingsPage = new SettingsPage();
1313
const memoryEfficiencyPage = new MemoryEfficiencyPage();
1414
const databaseHelper = new DatabaseHelper();
15+
const telemetry = new Telemetry();
16+
17+
const logger = telemetry.createLogger();
1518

1619
let keyName = Common.generateWord(20);
1720

21+
const telemetryEvents = ['SETTINGS_DATE_TIME_FORMAT_CHANGED','DATABASE_ANALYSIS_STARTED'];
22+
const settingsExpectedProperties = [
23+
'currentFormat'
24+
];
25+
const databaseAnalysisExpectedProperties = [
26+
'databaseId',
27+
'provider'
28+
];
29+
1830
fixture `DataTime format setting`
1931
.meta({
2032
type: 'regression',
@@ -33,7 +45,9 @@ fixture `DataTime format setting`
3345
await databaseAPIRequests.deleteAllDatabasesApi();
3446
await settingsPage.selectTimeZoneDropdown('local');
3547
});
36-
test('Verify that user can select date time format', async t => {
48+
test
49+
.requestHooks(logger)
50+
('Verify that user can select date time format', async t => {
3751
const defaultDateRegExp = /^([01]\d|2[0-3]):[0-5]\d:[0-5]\d \d{1,2} (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{4}$/;
3852
const selectedDateReqExp = /^(0[1-9]|[12]\d|3[01])\.(0[1-9]|1[0-2])\.\d{4} ([01]\d|2[0-3]):[0-5]\d:[0-5]\d$/;
3953
keyName = `DateTimeTestKey-${Common.generateWord(5)}`;
@@ -51,6 +65,9 @@ test('Verify that user can select date time format', async t => {
5165
await t.click(workbenchPage.NavigationPanel.settingsButton);
5266
await t.click(settingsPage.accordionAppearance);
5367
await settingsPage.selectDataFormatDropdown(selectorForOption);
68+
//Verify telemetry event
69+
await telemetry.verifyEventHasProperties(telemetryEvents[0], settingsExpectedProperties, logger);
70+
5471
await t.expect(settingsPage.selectFormatDropdown.textContent).eql(selectedOption, 'option is not selected');
5572
await t.expect(selectedDateReqExp.test(await settingsPage.dataPreview.textContent)).ok(`preview is not valid for ${selectedOption}`);
5673

@@ -70,7 +87,8 @@ test('Verify that user can select date time format', async t => {
7087
await t.expect(selectedDateReqExp.test(dateTime)).ok('date is not in default format HH:mm:ss.SSS d MMM yyyy');
7188
});
7289

73-
test('Verify that user can set custom date time format', async t => {
90+
test .requestHooks(logger)
91+
('Verify that user can set custom date time format', async t => {
7492
const enteredFormat = 'MMM dd yyyy/ HH.mm.ss';
7593
const enteredDateReqExp = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (0[1-9]|[12]\d|3[01]) \d{4}\/ ([01]\d|2[0-3])\.[0-5]\d\.[0-5]\d$/;
7694

@@ -84,5 +102,9 @@ test('Verify that user can set custom date time format', async t => {
84102
await t.click(settingsPage.NavigationPanel.analysisPageButton);
85103
await t.click(memoryEfficiencyPage.databaseAnalysisTab);
86104
await t.click(memoryEfficiencyPage.newReportBtn);
105+
106+
//Verify telemetry event
107+
await telemetry.verifyEventHasProperties(telemetryEvents[1], databaseAnalysisExpectedProperties, logger);
108+
87109
await t.expect(enteredDateReqExp.test((await memoryEfficiencyPage.selectedReport.textContent).trim())).ok(`custom format is not working ${enteredFormat}`);
88110
});

0 commit comments

Comments
 (0)