From b63606e90cdd9d068051161efdf6b3e94bfedb19 Mon Sep 17 00:00:00 2001
From: alalamav <2132122+alalamav@users.noreply.github.com>
Date: Mon, 20 Jul 2020 17:32:29 -0400
Subject: [PATCH] Make data limits a permanent feature (#698)
---
src/server_manager/messages/en.json | 3 +-
.../messages/master_messages.json | 22 +++--
src/server_manager/web_app/app.spec.ts | 2 +-
src/server_manager/web_app/app.ts | 21 +++--
.../web_app/gallery_app/main.ts | 30 ++++---
src/server_manager/web_app/main.ts | 14 ++--
.../web_app/shadowbox_server.ts | 26 ++++--
.../ui_components/outline-server-settings.js | 82 ++++++++++---------
.../ui_components/outline-server-view.js | 9 +-
src/shadowbox/package.json | 2 +-
src/shadowbox/server/manager_service.ts | 18 +++-
11 files changed, 133 insertions(+), 96 deletions(-)
diff --git a/src/server_manager/messages/en.json b/src/server_manager/messages/en.json
index 9c7e4f4a..ea721c79 100644
--- a/src/server_manager/messages/en.json
+++ b/src/server_manager/messages/en.json
@@ -22,9 +22,10 @@
"confirmation-server-remove": "This action removes your server from the Outline Manager, but does not block proxy access to users. You will still need to manually delete the Outline server from your host machine.",
"confirmation-server-remove-title": "Remove Server?",
"data-limits": "Data limits",
- "data-limits-description": "Set a 30 day trailing data transfer limit for access keys on this server. Available at least until {date}.",
+ "data-limits-description": "Set a 30 day trailing data transfer limit for access keys on this server.",
"data-limits-dialog-text": "Go to the Settings tab to set a data transfer limit for access keys on this server.",
"data-limits-dialog-title": "Avoid data overages",
+ "data-limits-disclaimer": "Since you are currently reporting metrics, use of the data limits feature will be included. Please see the {openLink}data collection policy{closeLink} for more details.",
"data-limits-usage": "{used} of {total} used",
"destroy": "Destroy",
"digitalocean-disconnect": "Disconnect",
diff --git a/src/server_manager/messages/master_messages.json b/src/server_manager/messages/master_messages.json
index b9bcc592..e214998f 100644
--- a/src/server_manager/messages/master_messages.json
+++ b/src/server_manager/messages/master_messages.json
@@ -126,14 +126,8 @@
"description": "This string appears as a title in a section to configure access key data transfer limits."
},
"data_limits_description": {
- "message": "Set a 30 day trailing data transfer limit for access keys on this server. Available at least until $DATE$.",
- "description": "This string appears as an explanation to the access key data transfer limits feature.",
- "placeholders": {
- "DATE": {
- "content": "{date}",
- "example": "December 9, 2019"
- }
- }
+ "message": "Set a 30 day trailing data transfer limit for access keys on this server.",
+ "description": "This string appears as an explanation to the access key data transfer limits feature."
},
"data_limits_dialog_text": {
"message": "Go to the Settings tab to set a data transfer limit for access keys on this server.",
@@ -143,6 +137,18 @@
"message": "Avoid data overages",
"description": "This string appears as a title in a dialog to advertise the data limits feature."
},
+ "data_limits_disclaimer": {
+ "message": "Since you are currently reporting metrics, use of the data limits feature will be included. Please see the $START_OF_LINK$data collection policy$END_OF_LINK$ for more details.",
+ "description": "This string provides a data collection disclaimer to opting into the data limits features.",
+ "placeholders": {
+ "END_OF_LINK": {
+ "content": "{closeLink}"
+ },
+ "START_OF_LINK": {
+ "content": "{openLink}"
+ }
+ }
+ },
"data_limits_usage": {
"message": "$USED$ of $TOTAL$ used",
"description": "This string appears in a tooltip when the data limits feature is enabled. It lets the user know how much data an access key has used, relative to the limit.",
diff --git a/src/server_manager/web_app/app.spec.ts b/src/server_manager/web_app/app.spec.ts
index 9524da5b..a3151304 100644
--- a/src/server_manager/web_app/app.spec.ts
+++ b/src/server_manager/web_app/app.spec.ts
@@ -247,7 +247,7 @@ function createTestApp(
return new App(
polymerAppRoot, VERSION, fakeDigitalOceanSessionFactory,
fakeDigitalOceanServerRepositoryFactory, manualServerRepo, displayServerRepository,
- digitalOceanTokenManager, new FakeSurveys());
+ digitalOceanTokenManager);
}
enum AppRootScreen {
diff --git a/src/server_manager/web_app/app.ts b/src/server_manager/web_app/app.ts
index f4ff1abd..52a81a1b 100644
--- a/src/server_manager/web_app/app.ts
+++ b/src/server_manager/web_app/app.ts
@@ -20,7 +20,6 @@ import * as digitalocean_api from '../cloud/digitalocean_api';
import * as errors from '../infrastructure/errors';
import {sleep} from '../infrastructure/sleep';
import * as server from '../model/server';
-import {Surveys} from '../model/survey';
import {TokenManager} from './digitalocean_oauth';
import * as digitalocean_server from './digitalocean_server';
@@ -37,8 +36,6 @@ const UNUSED_DIGITALOCEAN_REFERRAL_CODE = '5ddb4219b716';
const CHANGE_KEYS_PORT_VERSION = '1.0.0';
const DATA_LIMITS_VERSION = '1.1.0';
const CHANGE_HOSTNAME_VERSION = '1.2.0';
-// Date by which the data limits feature experiment will be permanently added or removed.
-export const DATA_LIMITS_AVAILABILITY_DATE = new Date('2020-06-02');
const MAX_ACCESS_KEY_DATA_LIMIT_BYTES = 50 * (10 ** 9); // 50GB
function dataLimitToDisplayDataAmount(limit: server.DataLimit): DisplayDataAmount|null {
@@ -88,6 +85,13 @@ async function computeDefaultAccessKeyDataLimit(
}
}
+// Returns whether the user has seen a notification for the updated feature metrics data collection
+// policy.
+function hasSeenFeatureMetricsNotification(): boolean {
+ return !!window.localStorage.getItem('dataLimitsHelpBubble-dismissed') &&
+ !!window.localStorage.getItem('dataLimits-feature-collection-notification');
+}
+
async function showHelpBubblesOnce(serverView: ServerView) {
if (!window.localStorage.getItem('addAccessKeyHelpBubble-dismissed')) {
await serverView.showAddAccessKeyHelpBubble();
@@ -131,7 +135,7 @@ export class App {
private createDigitalOceanServerRepository: DigitalOceanServerRepositoryFactory,
private manualServerRepository: server.ManualServerRepository,
private displayServerRepository: DisplayServerRepository,
- private digitalOceanTokenManager: TokenManager, private surveys: Surveys) {
+ private digitalOceanTokenManager: TokenManager) {
appRoot.setAttribute('outline-version', this.version);
appRoot.addEventListener('ConnectToDigitalOcean', (event: CustomEvent) => {
@@ -838,10 +842,10 @@ export class App {
view.serverPortForNewAccessKeys = selectedServer.getPortForNewAccessKeys();
view.serverCreationDate = localizeDate(selectedServer.getCreatedDate(), this.appRoot.language);
view.serverVersion = selectedServer.getVersion();
- view.dataLimitsAvailabilityDate =
- localizeDate(DATA_LIMITS_AVAILABILITY_DATE, this.appRoot.language);
view.accessKeyDataLimit = dataLimitToDisplayDataAmount(selectedServer.getAccessKeyDataLimit());
view.isAccessKeyDataLimitEnabled = !!view.accessKeyDataLimit;
+ view.showFeatureMetricsDisclaimer = selectedServer.getMetricsEnabled() &&
+ !selectedServer.getAccessKeyDataLimit() && !hasSeenFeatureMetricsNotification();
const version = this.selectedServer.getVersion();
if (version) {
@@ -1029,7 +1033,9 @@ export class App {
this.appRoot.showNotification(this.appRoot.localize('saved'));
serverView.accessKeyDataLimit = dataLimitToDisplayDataAmount(limit);
this.refreshTransferStats(this.selectedServer, serverView);
- this.surveys.presentDataLimitsEnabledSurvey();
+ // Don't display the feature collection disclaimer anymore.
+ serverView.showFeatureMetricsDisclaimer = false;
+ window.localStorage.setItem('dataLimits-feature-collection-notification', 'true');
} catch (error) {
console.error(`Failed to set access key data limit: ${error}`);
this.appRoot.showError(this.appRoot.localize('error-set-data-limit'));
@@ -1045,7 +1051,6 @@ export class App {
await this.selectedServer.removeAccessKeyDataLimit();
this.appRoot.showNotification(this.appRoot.localize('saved'));
this.refreshTransferStats(this.selectedServer, serverView);
- this.surveys.presentDataLimitsDisabledSurvey();
} catch (error) {
console.error(`Failed to remove access key data limit: ${error}`);
this.appRoot.showError(this.appRoot.localize('error-remove-data-limit'));
diff --git a/src/server_manager/web_app/gallery_app/main.ts b/src/server_manager/web_app/gallery_app/main.ts
index afc4b98a..74024802 100644
--- a/src/server_manager/web_app/gallery_app/main.ts
+++ b/src/server_manager/web_app/gallery_app/main.ts
@@ -12,8 +12,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-import IntlMessageFormat from 'intl-messageformat';
-
import '../ui_components/outline-about-dialog';
import '../ui_components/outline-do-oauth-step';
import '../ui_components/outline-feedback-dialog';
@@ -21,6 +19,7 @@ import '../ui_components/outline-share-dialog';
import '../ui_components/outline-sort-span';
import '../ui_components/outline-survey-dialog';
+import IntlMessageFormat from 'intl-messageformat';
import {css, customElement, html, LitElement, property} from 'lit-element';
async function makeLocalize(language: string) {
@@ -97,7 +96,8 @@ export class TestApp extends LitElement {
outline-about-dialog
-
+
@@ -107,30 +107,34 @@ export class TestApp extends LitElement {