Merge pull request #4078 from matrix-org/jryans/report-experimental-envs
Report installed PWA, touch input status in rageshakes, analytics
This commit is contained in:
commit
4e2887ded6
4 changed files with 53 additions and 19 deletions
|
@ -57,6 +57,8 @@ function getRedactedUrl() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const customVariables = {
|
const customVariables = {
|
||||||
|
// The Matomo installation at https://matomo.riot.im is currently configured
|
||||||
|
// with a limit of 10 custom variables.
|
||||||
'App Platform': {
|
'App Platform': {
|
||||||
id: 1,
|
id: 1,
|
||||||
expl: _td('The platform you\'re on'),
|
expl: _td('The platform you\'re on'),
|
||||||
|
@ -64,7 +66,7 @@ const customVariables = {
|
||||||
},
|
},
|
||||||
'App Version': {
|
'App Version': {
|
||||||
id: 2,
|
id: 2,
|
||||||
expl: _td('The version of Riot.im'),
|
expl: _td('The version of Riot'),
|
||||||
example: '15.0.0',
|
example: '15.0.0',
|
||||||
},
|
},
|
||||||
'User Type': {
|
'User Type': {
|
||||||
|
@ -87,20 +89,25 @@ const customVariables = {
|
||||||
expl: _td('Whether or not you\'re using the Richtext mode of the Rich Text Editor'),
|
expl: _td('Whether or not you\'re using the Richtext mode of the Rich Text Editor'),
|
||||||
example: 'off',
|
example: 'off',
|
||||||
},
|
},
|
||||||
'Breadcrumbs': {
|
|
||||||
id: 9,
|
|
||||||
expl: _td("Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)"),
|
|
||||||
example: 'disabled',
|
|
||||||
},
|
|
||||||
'Homeserver URL': {
|
'Homeserver URL': {
|
||||||
id: 7,
|
id: 7,
|
||||||
expl: _td('Your homeserver\'s URL'),
|
expl: _td('Your homeserver\'s URL'),
|
||||||
example: 'https://matrix.org',
|
example: 'https://matrix.org',
|
||||||
},
|
},
|
||||||
'Identity Server URL': {
|
'Touch Input': {
|
||||||
id: 8,
|
id: 8,
|
||||||
expl: _td('Your identity server\'s URL'),
|
expl: _td("Whether you're using Riot on a device where touch is the primary input mechanism"),
|
||||||
example: 'https://vector.im',
|
example: 'false',
|
||||||
|
},
|
||||||
|
'Breadcrumbs': {
|
||||||
|
id: 9,
|
||||||
|
expl: _td("Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)"),
|
||||||
|
example: 'disabled',
|
||||||
|
},
|
||||||
|
'Installed PWA': {
|
||||||
|
id: 10,
|
||||||
|
expl: _td("Whether you're using Riot as an installed Progressive Web App"),
|
||||||
|
example: 'false',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -190,6 +197,20 @@ class Analytics {
|
||||||
this._setVisitVariable('Instance', window.location.pathname);
|
this._setVisitVariable('Instance', window.location.pathname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let installedPWA = "unknown";
|
||||||
|
try {
|
||||||
|
// Known to work at least for desktop Chrome
|
||||||
|
installedPWA = window.matchMedia('(display-mode: standalone)').matches;
|
||||||
|
} catch (e) { }
|
||||||
|
this._setVisitVariable('Installed PWA', installedPWA);
|
||||||
|
|
||||||
|
let touchInput = "unknown";
|
||||||
|
try {
|
||||||
|
// MDN claims broad support across browsers
|
||||||
|
touchInput = window.matchMedia('(pointer: coarse)').matches;
|
||||||
|
} catch (e) { }
|
||||||
|
this._setVisitVariable('Touch Input', touchInput);
|
||||||
|
|
||||||
// start heartbeat
|
// start heartbeat
|
||||||
this._heartbeatIntervalID = window.setInterval(this.ping.bind(this), HEARTBEAT_INTERVAL);
|
this._heartbeatIntervalID = window.setInterval(this.ping.bind(this), HEARTBEAT_INTERVAL);
|
||||||
}
|
}
|
||||||
|
@ -291,11 +312,9 @@ class Analytics {
|
||||||
if (!config.piwik) return;
|
if (!config.piwik) return;
|
||||||
|
|
||||||
const whitelistedHSUrls = config.piwik.whitelistedHSUrls || [];
|
const whitelistedHSUrls = config.piwik.whitelistedHSUrls || [];
|
||||||
const whitelistedISUrls = config.piwik.whitelistedISUrls || [];
|
|
||||||
|
|
||||||
this._setVisitVariable('User Type', isGuest ? 'Guest' : 'Logged In');
|
this._setVisitVariable('User Type', isGuest ? 'Guest' : 'Logged In');
|
||||||
this._setVisitVariable('Homeserver URL', whitelistRedact(whitelistedHSUrls, homeserverUrl));
|
this._setVisitVariable('Homeserver URL', whitelistRedact(whitelistedHSUrls, homeserverUrl));
|
||||||
this._setVisitVariable('Identity Server URL', whitelistRedact(whitelistedISUrls, identityServerUrl));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setBreadcrumbs(state) {
|
setBreadcrumbs(state) {
|
||||||
|
@ -328,7 +347,7 @@ class Analytics {
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
{ expl: _td('Your User Agent'), value: navigator.userAgent },
|
{ expl: _td('Your user agent'), value: navigator.userAgent },
|
||||||
{ expl: _td('Your device resolution'), value: resolution },
|
{ expl: _td('Your device resolution'), value: resolution },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -337,7 +356,7 @@ class Analytics {
|
||||||
title: _t('Analytics'),
|
title: _t('Analytics'),
|
||||||
description: <div className="mx_AnalyticsModal">
|
description: <div className="mx_AnalyticsModal">
|
||||||
<div>
|
<div>
|
||||||
{ _t('The information being sent to us to help make Riot.im better includes:') }
|
{ _t('The information being sent to us to help make Riot better includes:') }
|
||||||
</div>
|
</div>
|
||||||
<table>
|
<table>
|
||||||
{ rows.map((row) => <tr key={row[0]}>
|
{ rows.map((row) => <tr key={row[0]}>
|
||||||
|
|
|
@ -435,7 +435,7 @@ async function _doSetLoggedIn(credentials, clearStorage) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Analytics.setLoggedIn(credentials.guest, credentials.homeserverUrl, credentials.identityServerUrl);
|
Analytics.setLoggedIn(credentials.guest, credentials.homeserverUrl);
|
||||||
|
|
||||||
if (localStorage) {
|
if (localStorage) {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -5,21 +5,22 @@
|
||||||
"Failed to verify email address: make sure you clicked the link in the email": "Failed to verify email address: make sure you clicked the link in the email",
|
"Failed to verify email address: make sure you clicked the link in the email": "Failed to verify email address: make sure you clicked the link in the email",
|
||||||
"Add Phone Number": "Add Phone Number",
|
"Add Phone Number": "Add Phone Number",
|
||||||
"The platform you're on": "The platform you're on",
|
"The platform you're on": "The platform you're on",
|
||||||
"The version of Riot.im": "The version of Riot.im",
|
"The version of Riot": "The version of Riot",
|
||||||
"Whether or not you're logged in (we don't record your username)": "Whether or not you're logged in (we don't record your username)",
|
"Whether or not you're logged in (we don't record your username)": "Whether or not you're logged in (we don't record your username)",
|
||||||
"Your language of choice": "Your language of choice",
|
"Your language of choice": "Your language of choice",
|
||||||
"Which officially provided instance you are using, if any": "Which officially provided instance you are using, if any",
|
"Which officially provided instance you are using, if any": "Which officially provided instance you are using, if any",
|
||||||
"Whether or not you're using the Richtext mode of the Rich Text Editor": "Whether or not you're using the Richtext mode of the Rich Text Editor",
|
"Whether or not you're using the Richtext mode of the Rich Text Editor": "Whether or not you're using the Richtext mode of the Rich Text Editor",
|
||||||
"Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)",
|
|
||||||
"Your homeserver's URL": "Your homeserver's URL",
|
"Your homeserver's URL": "Your homeserver's URL",
|
||||||
"Your identity server's URL": "Your identity server's URL",
|
"Whether you're using Riot on a device where touch is the primary input mechanism": "Whether you're using Riot on a device where touch is the primary input mechanism",
|
||||||
|
"Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)",
|
||||||
|
"Whether you're using Riot as an installed Progressive Web App": "Whether you're using Riot as an installed Progressive Web App",
|
||||||
"e.g. %(exampleValue)s": "e.g. %(exampleValue)s",
|
"e.g. %(exampleValue)s": "e.g. %(exampleValue)s",
|
||||||
"Every page you use in the app": "Every page you use in the app",
|
"Every page you use in the app": "Every page you use in the app",
|
||||||
"e.g. <CurrentPageURL>": "e.g. <CurrentPageURL>",
|
"e.g. <CurrentPageURL>": "e.g. <CurrentPageURL>",
|
||||||
"Your User Agent": "Your User Agent",
|
"Your user agent": "Your user agent",
|
||||||
"Your device resolution": "Your device resolution",
|
"Your device resolution": "Your device resolution",
|
||||||
"Analytics": "Analytics",
|
"Analytics": "Analytics",
|
||||||
"The information being sent to us to help make Riot.im better includes:": "The information being sent to us to help make Riot.im better includes:",
|
"The information being sent to us to help make Riot better includes:": "The information being sent to us to help make Riot better includes:",
|
||||||
"Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.",
|
"Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.",
|
||||||
"Error": "Error",
|
"Error": "Error",
|
||||||
"Unable to load! Check your network connectivity and try again.": "Unable to load! Check your network connectivity and try again.",
|
"Unable to load! Check your network connectivity and try again.": "Unable to load! Check your network connectivity and try again.",
|
||||||
|
|
|
@ -67,6 +67,18 @@ export default async function sendBugReport(bugReportEndpoint, opts) {
|
||||||
userAgent = window.navigator.userAgent;
|
userAgent = window.navigator.userAgent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let installedPWA = "UNKNOWN";
|
||||||
|
try {
|
||||||
|
// Known to work at least for desktop Chrome
|
||||||
|
installedPWA = window.matchMedia('(display-mode: standalone)').matches;
|
||||||
|
} catch (e) { }
|
||||||
|
|
||||||
|
let touchInput = "UNKNOWN";
|
||||||
|
try {
|
||||||
|
// MDN claims broad support across browsers
|
||||||
|
touchInput = window.matchMedia('(pointer: coarse)').matches;
|
||||||
|
} catch (e) { }
|
||||||
|
|
||||||
const client = MatrixClientPeg.get();
|
const client = MatrixClientPeg.get();
|
||||||
|
|
||||||
console.log("Sending bug report.");
|
console.log("Sending bug report.");
|
||||||
|
@ -76,6 +88,8 @@ export default async function sendBugReport(bugReportEndpoint, opts) {
|
||||||
body.append('app', 'riot-web');
|
body.append('app', 'riot-web');
|
||||||
body.append('version', version);
|
body.append('version', version);
|
||||||
body.append('user_agent', userAgent);
|
body.append('user_agent', userAgent);
|
||||||
|
body.append('installed_pwa', installedPWA);
|
||||||
|
body.append('touch_input', touchInput);
|
||||||
|
|
||||||
if (client) {
|
if (client) {
|
||||||
body.append('user_id', client.credentials.userId);
|
body.append('user_id', client.credentials.userId);
|
||||||
|
|
Loading…
Reference in a new issue