This is an automated email from the ASF dual-hosted git repository.
xhsun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push:
new a36105f Redirect modal (#3961)
a36105f is described below
commit a36105fa65fbbc2d3d4ec8502ce94e8e6adba974
Author: Harley Jackson <[email protected]>
AuthorDate: Wed Mar 13 07:35:22 2019 -0700
Redirect modal (#3961)
* [TE] frontend - harleyjj/manage-alert-explore - pin redirect link to
manage/alert/explore route
* [TE] frontend - harleyjj/manage-explore - push folder
---
.../app/pods/manage/explore/controller.js | 9 ++
.../app/pods/manage/explore/route.js | 135 +++++++++++++++++++++
.../app/pods/manage/explore/template.hbs | 37 ++++++
3 files changed, 181 insertions(+)
diff --git a/thirdeye/thirdeye-frontend/app/pods/manage/explore/controller.js
b/thirdeye/thirdeye-frontend/app/pods/manage/explore/controller.js
new file mode 100644
index 0000000..96ef85f
--- /dev/null
+++ b/thirdeye/thirdeye-frontend/app/pods/manage/explore/controller.js
@@ -0,0 +1,9 @@
+/**
+ * Controller for Alert Landing and Details Page
+ * @module manage/alert
+ * @exports manage/alert
+ */
+import Controller from '@ember/controller';
+
+export default Controller.extend({
+});
diff --git a/thirdeye/thirdeye-frontend/app/pods/manage/explore/route.js
b/thirdeye/thirdeye-frontend/app/pods/manage/explore/route.js
new file mode 100644
index 0000000..d219d42
--- /dev/null
+++ b/thirdeye/thirdeye-frontend/app/pods/manage/explore/route.js
@@ -0,0 +1,135 @@
+/**
+ * Handles the 'alert details' route.
+ * @module manage/alert/route
+ * @exports manage alert model
+ */
+import Route from '@ember/routing/route';
+import RSVP from 'rsvp';
+import { set, get } from '@ember/object';
+import { inject as service } from '@ember/service';
+import yamljs from 'yamljs';
+import moment from 'moment';
+
+export default Route.extend({
+ notifications: service('toast'),
+
+ async model(params) {
+ const alertId = params.alert_id;
+ const postProps = {
+ method: 'get',
+ headers: { 'content-type': 'application/json' }
+ };
+ const notifications = get(this, 'notifications');
+ //detection alert fetch
+ const detectionUrl = `/detection/${alertId}`;
+ try {
+ const detection_result = await fetch(detectionUrl, postProps);
+ const detection_status = get(detection_result, 'status');
+ const detection_json = await detection_result.json();
+ if (detection_status !== 200) {
+ notifications.error('Retrieval of alert yaml failed.', 'Error');
+ } else {
+ if (detection_json.yaml) {
+ const detectionInfo = yamljs.parse(detection_json.yaml);
+ const lastDetection = new Date(detection_json.lastTimestamp);
+ Object.assign(detectionInfo, {
+ isActive: detection_json.active,
+ createdBy: detection_json.createdBy,
+ updatedBy: detection_json.updatedBy,
+ exploreDimensions: detection_json.dimensions,
+ filters: this._formatYamlFilter(detectionInfo.filters),
+ dimensionExploration:
this._formatYamlFilter(detectionInfo.dimensionExploration),
+ lastDetectionTime: lastDetection.toDateString() + ", " +
lastDetection.toLocaleTimeString() + " (" + moment.tz.guess() + ")",
+ rawYaml: detection_json.yaml
+ });
+
+ this.setProperties({
+ alertId: alertId,
+ detectionInfo,
+ rawDetectionYaml: get(this, 'detectionInfo') ? get(this,
'detectionInfo').rawYaml : null,
+ metricUrn: detection_json.properties.nested[0].nestedMetricUrns[0],
+ metricUrnList: detection_json.properties.nested[0].nestedMetricUrns
+ });
+
+ }
+ }
+ } catch (error) {
+ notifications.error('Retrieving alert yaml failed.', error);
+ }
+
+ //subscription group fetch
+ const subUrl = `/detection/subscription-groups/${alertId}`;//dropdown of
subscription groups
+ try {
+ const settings_result = await fetch(subUrl, postProps);
+ const settings_status = get(settings_result, 'status');
+ const settings_json = await settings_result.json();
+ if (settings_status !== 200) {
+ notifications.error('Retrieving subscription groups failed.', 'Error');
+ } else {
+ set(this, 'subscriptionGroups', settings_json);
+ }
+ } catch (error) {
+ notifications.error('Retrieving subscription groups failed.', error);
+ }
+
+ let subscribedGroups = "";
+ if (typeof get(this, 'subscriptionGroups') === 'object' && get(this,
'subscriptionGroups').length > 0) {
+ const groups = get(this, 'subscriptionGroups');
+ for (let key in groups) {
+ if (groups.hasOwnProperty(key)) {
+ let group = groups[key];
+ if (subscribedGroups === "") {
+ subscribedGroups = group.name
+ } else {
+ subscribedGroups = subscribedGroups + ", " + group.name;
+ }
+ }
+ }
+ }
+
+ return RSVP.hash({
+ alertId,
+ alertData: get(this, 'detectionInfo'),
+ detectionYaml: get(this, 'rawDetectionYaml'),
+ subscribedGroups,
+ metricUrn: get(this, 'metricUrn'),
+ metricUrnList: get(this, 'metricUrnList') ? get(this, 'metricUrnList') :
[]
+ });
+ },
+
+ /**
+ * The yaml filters formatter. Convert filters in the yaml file in to a
legacy filters string
+ * For example, filters = {
+ * "country": ["us", "cn"],
+ * "browser": ["chrome"]
+ * }
+ * will be convert into "country=us;country=cn;browser=chrome"
+ *
+ * @method _formatYamlFilter
+ * @param {Map} filters multimap of filters
+ * @return {String} - formatted filters string
+ */
+ _formatYamlFilter(filters) {
+ if (filters){
+ const filterStrings = [];
+
+ Object.keys(filters).forEach(
+ function(filterKey) {
+ const filter = filters[filterKey];
+ if (filter && typeof filter === 'object') {
+
+ filter.forEach(
+ function (filterValue) {
+ filterStrings.push(filterKey + '=' + filterValue);
+ }
+ );
+ } else {
+ filterStrings.push(filterKey + '=' + filter);
+ }
+ }
+ );
+ return filterStrings.join(';');
+ }
+ return '';
+ }
+});
diff --git a/thirdeye/thirdeye-frontend/app/pods/manage/explore/template.hbs
b/thirdeye/thirdeye-frontend/app/pods/manage/explore/template.hbs
new file mode 100644
index 0000000..d0f178b
--- /dev/null
+++ b/thirdeye/thirdeye-frontend/app/pods/manage/explore/template.hbs
@@ -0,0 +1,37 @@
+<section class="te-page__top te-search-results {{if isEditModeActive
"te-search-results--slim"}}">
+ <div class="container">
+ {{#self-serve-alert-yaml-details
+ alertData=model.alertData
+ subscribedGroups=model.subscribedGroups
+ isLoadError=isLoadError
+ }}
+ <div class="te-search-results__cta">
+ {{#link-to "manage.yaml" model.alertId}}
+ <button class="te-button te-button--outline">Edit</button>
+ {{/link-to}}
+ </div>
+ {{/self-serve-alert-yaml-details}}
+ </div>
+</section>
+
+<section class="te-page__bottom">
+ <div class="container">
+ {{#if isLoadError}}
+ <div class="te-alert-page-pending">
+ <img src="{{rootURL}}assets/images/te-alert-error.png"
class="te-alert-page-pending__image te-alert-page-pending__image--error"
alt="error">
+ <h2 class="te-alert-page-pending__title">Oops, something went
wrong</h2>
+ <p class="te-alert-page-pending__text">{{errorText}}</p>
+ </div>
+ {{else}}
+ {{alert-details
+ isPreviewMode=false
+ alertYaml=model.detectionYaml
+ showDetails=true
+ dataIsCurrent=true
+ alertId=model.alertId
+ metricUrn=model.metricUrn
+ metricUrnList=model.metricUrnList
+ }}
+ {{/if}}
+ </div>
+</section>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]