You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@eagle.apache.org by ha...@apache.org on 2016/11/09 13:20:14 UTC

incubator-eagle git commit: [EAGLE-759] Policy detail support alert list

Repository: incubator-eagle
Updated Branches:
  refs/heads/master db28ae2b2 -> 1da8dc4f1


[EAGLE-759] Policy detail support alert list

* Policy detail support alert list
* update site application logic

Author: zombieJ <sm...@gmail.com>

Closes #635 from zombieJ/EAGLE-759.


Project: http://git-wip-us.apache.org/repos/asf/incubator-eagle/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-eagle/commit/1da8dc4f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-eagle/tree/1da8dc4f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-eagle/diff/1da8dc4f

Branch: refs/heads/master
Commit: 1da8dc4f1fbb46c5ce76cd3b2af7f680f6f8cc29
Parents: db28ae2
Author: zombieJ <sm...@gmail.com>
Authored: Wed Nov 9 21:20:02 2016 +0800
Committer: Hao Chen <ha...@apache.org>
Committed: Wed Nov 9 21:20:02 2016 +0800

----------------------------------------------------------------------
 .../webapp/app/apps/jpm/ctrl/statisticCtrl.js   |  2 +-
 .../src/main/webapp/app/apps/jpm/index.js       |  6 +-
 .../webapp/app/dev/partials/alert/list.html     | 24 +++++++-
 .../app/dev/partials/alert/policyDetail.html    | 59 +++++++++++++++++---
 .../webapp/app/dev/public/js/ctrls/alertCtrl.js | 18 +++++-
 .../app/dev/public/js/ctrls/integrationCtrl.js  | 25 ++++++---
 6 files changed, 110 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/1da8dc4f/eagle-jpm/eagle-jpm-web/src/main/webapp/app/apps/jpm/ctrl/statisticCtrl.js
----------------------------------------------------------------------
diff --git a/eagle-jpm/eagle-jpm-web/src/main/webapp/app/apps/jpm/ctrl/statisticCtrl.js b/eagle-jpm/eagle-jpm-web/src/main/webapp/app/apps/jpm/ctrl/statisticCtrl.js
index 6dff7a1..e74a22c 100644
--- a/eagle-jpm/eagle-jpm-web/src/main/webapp/app/apps/jpm/ctrl/statisticCtrl.js
+++ b/eagle-jpm/eagle-jpm-web/src/main/webapp/app/apps/jpm/ctrl/statisticCtrl.js
@@ -354,7 +354,7 @@
 					 * @param {[]} res.data.jobTypes
 					 * @param {[]} res.data.jobCounts
 					 */
-					JPM.jobDistribution($scope.site, $scope.type, DURATION_BUCKETS.join(","), startTime, endTime).then(function (res) {
+					JPM.jobDistribution($scope.site, DURATION_BUCKETS.join(","), startTime, endTime).then(function (res) {
 						var data = res.data;
 						var jobTypes = {};
 						$.each(data.jobTypes, function (i, type) {

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/1da8dc4f/eagle-jpm/eagle-jpm-web/src/main/webapp/app/apps/jpm/index.js
----------------------------------------------------------------------
diff --git a/eagle-jpm/eagle-jpm-web/src/main/webapp/app/apps/jpm/index.js b/eagle-jpm/eagle-jpm-web/src/main/webapp/app/apps/jpm/index.js
index fafe699..7348853 100644
--- a/eagle-jpm/eagle-jpm-web/src/main/webapp/app/apps/jpm/index.js
+++ b/eagle-jpm/eagle-jpm-web/src/main/webapp/app/apps/jpm/index.js
@@ -75,7 +75,7 @@
 		JPM.QUERY_METRICS_INTERVAL = '${baseURL}/rest/entities?query=GenericMetricService[${condition}]<${groups}>{${field}}${order}${top}&metricName=${metric}&pageSize=${limit}&startTime=${startTime}&endTime=${endTime}&intervalmin=${intervalMin}&timeSeries=true';
 		JPM.QUERY_MR_JOBS = '${baseURL}/rest/mrJobs/search';
 		JPM.QUERY_JOB_LIST = '${baseURL}/rest/mrJobs?query=%s[${condition}]{${fields}}&pageSize=${limit}&startTime=${startTime}&endTime=${endTime}';
-		JPM.QUERY_JOB_STATISTIC = '${baseURL}/rest/mrJobs/jobCountsByDuration?site=${site}&timeDistInSecs=${times}&startTime=${startTime}&endTime=${endTime}&jobType=${jobType}';
+		JPM.QUERY_JOB_STATISTIC = '${baseURL}/rest/mrJobs/jobCountsByDuration?site=${site}&timeDistInSecs=${times}&startTime=${startTime}&endTime=${endTime}';
 		JPM.QUERY_TASK_STATISTIC = '${baseURL}/rest/mrTasks/taskCountsByDuration?jobId=${jobId}&site=${site}&timeDistInSecs=${times}&top=${top}';
 
 		JPM.QUERY_MR_JOB_COUNT = '${baseURL}/rest/mrJobs/runningJobCounts';
@@ -354,15 +354,13 @@
 		/**
 		 * Fetch job duration distribution
 		 * @param {string} site
-		 * @param {string} jobType
 		 * @param {string} times
 		 * @param {{}} startTime
 		 * @param {{}} endTime
 		 */
-		JPM.jobDistribution = function (site, jobType, times, startTime, endTime) {
+		JPM.jobDistribution = function (site, times, startTime, endTime) {
 			var url = common.template(getQuery("JOB_STATISTIC"), {
 				site: site,
-				jobType: jobType,
 				times: times,
 				startTime: Time.format(startTime),
 				endTime: Time.format(endTime)

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/1da8dc4f/eagle-server/src/main/webapp/app/dev/partials/alert/list.html
----------------------------------------------------------------------
diff --git a/eagle-server/src/main/webapp/app/dev/partials/alert/list.html b/eagle-server/src/main/webapp/app/dev/partials/alert/list.html
index 395e24b..e518fa7 100644
--- a/eagle-server/src/main/webapp/app/dev/partials/alert/list.html
+++ b/eagle-server/src/main/webapp/app/dev/partials/alert/list.html
@@ -22,6 +22,18 @@
 		<h3 class="box-title">
 			Alert List
 		</h3>
+		<div class="box-tools pull-right" >
+			<div class="btn-group">
+				<button class="btn btn-default btn-sm" ng-class="{active: displayType === 'raw'}"
+						tooltip-append-to-body="true" uib-tooltip="raw data" ng-click="displayType = 'raw'">
+					<i class="fa fa-keyboard-o"></i>
+				</button>
+				<button class="btn btn-default btn-sm" ng-class="{active: displayType === 'format'}"
+						tooltip-append-to-body="true" uib-tooltip="format data" ng-click="displayType = 'format'">
+					<i class="fa fa-list"></i>
+				</button>
+			</div>
+		</div>
 	</div>
 	<div class="box-body">
 		<div sort-table="alertList" is-sorting="isSorting">
@@ -55,7 +67,17 @@
 								</li>
 							</ul>
 						</td>
-						<td class="text-break">{{item.alertData}}</td>
+						<td class="text-break">
+							<span ng-if="displayType === 'raw'" na-block="item.alertData"></span>
+							<div ng-if="displayType === 'format'" na-block="!!item.alertData">
+								<ul>
+									<li ng-repeat="(key, value) in item.alertData track by $index">
+										<strong>{{key}}:</strong>
+										{{value}}
+									</li>
+								</ul>
+							</div>
+						</td>
 						<td>
 							<a ui-sref="alertDetail({alertId: item.alertId})">Detail</a>
 						</td>

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/1da8dc4f/eagle-server/src/main/webapp/app/dev/partials/alert/policyDetail.html
----------------------------------------------------------------------
diff --git a/eagle-server/src/main/webapp/app/dev/partials/alert/policyDetail.html b/eagle-server/src/main/webapp/app/dev/partials/alert/policyDetail.html
index fb7be0c..65721ac 100644
--- a/eagle-server/src/main/webapp/app/dev/partials/alert/policyDetail.html
+++ b/eagle-server/src/main/webapp/app/dev/partials/alert/policyDetail.html
@@ -54,10 +54,22 @@
 
 <div class="nav-tabs-custom">
 	<ul class="nav nav-tabs">
-		<!--li><a href="#statistic" data-toggle="tab">Statistic</a></li>
-		<li><a href="#alerts" data-toggle="tab">Alerts</a></li-->
-		<li class="active"><a href="#setting" data-toggle="tab">Setting</a></li>
-		<li><a href="#assignments" data-toggle="tab">Assignments</a></li>
+		<!--li><a href="#statistic" data-toggle="tab">Statistic</a></li-->
+		<li class="active"><a href="#setting" data-toggle="tab" ng-click="setTab('setting')">Setting</a></li>
+		<li><a href="#assignments" data-toggle="tab" ng-click="setTab('assignments')">Assignments</a></li>
+		<li><a href="#alerts" data-toggle="tab" ng-click="setTab('alerts')">Alerts</a></li>
+		<li class="pull-right box-tools" ng-show="tab === 'alerts'">
+			<div class="btn-group">
+				<button class="btn btn-default btn-sm" ng-class="{active: displayType === 'raw'}"
+						tooltip-append-to-body="true" uib-tooltip="raw data" ng-click="displayType = 'raw'">
+					<i class="fa fa-keyboard-o"></i>
+				</button>
+				<button class="btn btn-default btn-sm" ng-class="{active: displayType === 'format'}"
+						tooltip-append-to-body="true" uib-tooltip="format data" ng-click="displayType = 'format'">
+					<i class="fa fa-list"></i>
+				</button>
+			</div>
+		</li>
 	</ul>
 	<div class="tab-content">
 		<div class="tab-pane active" id="setting">
@@ -133,8 +145,6 @@
 		</div>
 		<div class="tab-pane" id="statistic">statistic
 		</div>
-		<div class="tab-pane" id="alerts">alerts
-		</div>
 		<div class="tab-pane" id="assignments">
 			<table class="table">
 				<tbody>
@@ -147,7 +157,7 @@
 						<td>{{assignment.queueId}}</td>
 					</tr>
 					<tr>
-						<th class="text-no-break">working Slots</th>
+						<th class="text-no-break" width="120">working Slots</th>
 						<td>
 							<div na-block="queue.workingSlots.length > 0">
 								<ul class="no-margin">
@@ -162,5 +172,40 @@
 				</tbody>
 			</table>
 		</div>
+		<div class="tab-pane" id="alerts">
+			<div sort-table="alertList">
+				<table class="table table-bordered">
+					<thead>
+					<tr>
+						<th sortpath="alertTimestamp" width="135">
+							Alert Time
+							<span class="fa fa-refresh fa-spin no-animate" ng-show="!alertList._done || isSorting"></span>
+						</th>
+						<th>Alert Data</th>
+						<th width="10"></th>
+					</tr>
+					</thead>
+					<tbody>
+					<tr>
+						<td>{{Time.format(item.alertTimestamp)}}</td>
+						<td class="text-break">
+							<span ng-if="displayType === 'raw'" na-block="item.alertData"></span>
+							<div ng-if="displayType === 'format'" na-block="!!item.alertData">
+								<ul>
+									<li ng-repeat="(key, value) in item.alertData track by $index">
+										<strong>{{key}}:</strong>
+										{{value}}
+									</li>
+								</ul>
+							</div>
+						</td>
+						<td>
+							<a ui-sref="alertDetail({alertId: item.alertId})">Detail</a>
+						</td>
+					</tr>
+					</tbody>
+				</table>
+			</div>
+		</div>
 	</div>
 </div>

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/1da8dc4f/eagle-server/src/main/webapp/app/dev/public/js/ctrls/alertCtrl.js
----------------------------------------------------------------------
diff --git a/eagle-server/src/main/webapp/app/dev/public/js/ctrls/alertCtrl.js b/eagle-server/src/main/webapp/app/dev/public/js/ctrls/alertCtrl.js
index 5d20960..b82f88e 100644
--- a/eagle-server/src/main/webapp/app/dev/public/js/ctrls/alertCtrl.js
+++ b/eagle-server/src/main/webapp/app/dev/public/js/ctrls/alertCtrl.js
@@ -27,6 +27,7 @@
 	eagleControllers.controller('alertListCtrl', function ($scope, $wrapState, $interval, PageConfig, Entity) {
 		PageConfig.title = "Alerts";
 
+		$scope.displayType = "raw";
 		$scope.alertList = Entity.queryMetadata("alerts", {size: 10000});
 
 		// ================================================================
@@ -76,7 +77,6 @@
 
 		$scope.showDataSource = function (stream) {
 			var dataSource = $scope.dataSources[stream.dataSource];
-			console.log(">>>", dataSource);
 			$.dialog({
 				title: dataSource.name,
 				content: $("<pre class='text-break'>").html(JSON.stringify(dataSource, null, "\t")),
@@ -114,7 +114,7 @@
 		};
 	});
 
-	eagleControllers.controller('policyDetailCtrl', function ($scope, $wrapState, PageConfig, Entity, Policy) {
+	eagleControllers.controller('policyDetailCtrl', function ($scope, $wrapState, $interval, PageConfig, Entity, Policy) {
 		PageConfig.title = "Policy";
 		PageConfig.subTitle = "Detail";
 		PageConfig.navPath = [
@@ -122,6 +122,13 @@
 			{title: "Detail"}
 		];
 
+		$scope.tab = "setting";
+		$scope.displayType = "raw";
+
+		$scope.setTab = function (tab) {
+			$scope.tab = tab;
+		};
+
 		function updatePolicy() {
 			var policyName = $wrapState.param.name;
 			var encodePolicyName = encodeURIComponent(policyName);
@@ -159,6 +166,8 @@
 		}
 		updatePolicy();
 
+		$scope.alertList = Entity.queryMetadata("policies/" + encodeURIComponent($wrapState.param.name) + "/alerts", {size: 1000});
+
 		$scope.deletePolicy = function() {
 			Policy.delete($scope.policy).then(function () {
 				$wrapState.go("policyList");
@@ -172,5 +181,10 @@
 		$scope.stopPolicy = function() {
 			Policy.stop($scope.policy).then(updatePolicy);
 		};
+
+		var refreshInterval = $interval($scope.alertList._refresh, 1000 * 60);
+		$scope.$on('$destroy', function() {
+			$interval.cancel(refreshInterval);
+		});
 	});
 }());

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/1da8dc4f/eagle-server/src/main/webapp/app/dev/public/js/ctrls/integrationCtrl.js
----------------------------------------------------------------------
diff --git a/eagle-server/src/main/webapp/app/dev/public/js/ctrls/integrationCtrl.js b/eagle-server/src/main/webapp/app/dev/public/js/ctrls/integrationCtrl.js
index a16c889..95e4584 100644
--- a/eagle-server/src/main/webapp/app/dev/public/js/ctrls/integrationCtrl.js
+++ b/eagle-server/src/main/webapp/app/dev/public/js/ctrls/integrationCtrl.js
@@ -92,12 +92,18 @@
 			Site.getPromise().then(function () {
 				$scope.site = Site.find($wrapState.param.id);
 				var uninstalledApplicationList = common.array.minus(Application.providerList, $scope.site.applicationList, "type", "descriptor.type");
-				$scope.applicationList = $.map($scope.site.applicationList, function (app) {
-					app.installed = true;
-					return app;
-				}).concat($.map(uninstalledApplicationList, function (oriApp) {
-					return { origin: oriApp };
-				}));
+				$scope.applicationList = common.array.doSort(
+					$.map($scope.site.applicationList, function (app) {
+						app.installed = true;
+						return app;
+					}), ["origin", "name"]
+				).concat(
+					common.array.doSort(
+						$.map(uninstalledApplicationList, function (oriApp) {
+							return {origin: oriApp};
+						}), ["origin", "name"]
+					)
+				);
 			});
 		}
 		mapApplications();
@@ -261,10 +267,11 @@
 			$scope.installLock = true;
 
 			var uuid = $scope.tmpApp.uuid;
-			delete $scope.tmpApp.uuid;
+			var app = $.extend({}, $scope.tmpApp);
+			delete app.uuid;
 
 			if(uuid) {
-				Entity.create("apps/" + uuid, $scope.tmpApp)._then(function () {
+				Entity.create("apps/" + uuid, app)._then(function () {
 					refreshApplications();
 					$("#installMDL").modal("hide");
 				}, function (res) {
@@ -275,7 +282,7 @@
 					$scope.installLock = false;
 				});
 			} else {
-				Entity.create("apps/install", $scope.tmpApp)._then(function () {
+				Entity.create("apps/install", app)._then(function () {
 					refreshApplications();
 					$("#installMDL").modal("hide");
 				}, function (res) {