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/12/07 15:29:07 UTC

incubator-eagle git commit: [MINOR] Refactor alert list and detail pages

Repository: incubator-eagle
Updated Branches:
  refs/heads/master 3914e39dd -> 269ff147f


[MINOR] Refactor alert list and detail pages

# Changes

* Refactor alert list and detail pages
* Add "storage.hbase.autoCreateTable" (boolean) config to improve server startup speed with hbase

Author: Hao Chen <ha...@apache.org>

Closes #721 from haoch/RefactorAlertPage.


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

Branch: refs/heads/master
Commit: 269ff147f29cde959af50b1b9a4e528112ec4799
Parents: 3914e39
Author: Hao Chen <ha...@apache.org>
Authored: Wed Dec 7 23:28:45 2016 +0800
Committer: Hao Chen <ha...@apache.org>
Committed: Wed Dec 7 23:28:45 2016 +0800

----------------------------------------------------------------------
 .../apache/eagle/common/config/EagleConfig.java |  2 +
 .../common/config/EagleConfigConstants.java     |  1 +
 .../eagle/common/config/EagleConfigFactory.java | 11 +++++
 .../storage/hbase/HBaseEntitySchemaManager.java |  6 ++-
 .../src/main/resources/application.conf         |  2 +
 .../webapp/app/dev/partials/alert/detail.html   | 46 ++++++++------------
 .../webapp/app/dev/partials/alert/list.html     | 35 +++++++--------
 7 files changed, 57 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/269ff147/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/config/EagleConfig.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/config/EagleConfig.java b/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/config/EagleConfig.java
index f85d161..14e2451 100755
--- a/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/config/EagleConfig.java
+++ b/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/config/EagleConfig.java
@@ -57,4 +57,6 @@ public interface EagleConfig {
      * @return root config.
      */
     Config getConfig();
+
+    boolean isAutoCreateTable();
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/269ff147/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/config/EagleConfigConstants.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/config/EagleConfigConstants.java b/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/config/EagleConfigConstants.java
index c700c61..504174c 100644
--- a/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/config/EagleConfigConstants.java
+++ b/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/config/EagleConfigConstants.java
@@ -32,6 +32,7 @@ public final class EagleConfigConstants {
     public static final String SERVICE_THREADPOOL_MAX_SIZE = "storage.hbase.threadpoolMaxSize";
     public static final String SERVICE_THREADPOOL_SHRINK_SIZE = "storage.hbase.threadpoolShrinkSize";
     public static final String SERVICE_AUDITING_ENABLED = "storage.hbase.auditEnabled";
+    public static final String AUTO_CREATE_TABLE = "storage.hbase.autoCreateTable";
 
     public static final String EAGLE_TIME_ZONE = "service.timezone";
     public static final String DEFAULT_EAGLE_TIME_ZONE = "UTC";

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/269ff147/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/config/EagleConfigFactory.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/config/EagleConfigFactory.java b/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/config/EagleConfigFactory.java
index 65d93e9..e95e65c 100755
--- a/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/config/EagleConfigFactory.java
+++ b/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/config/EagleConfigFactory.java
@@ -43,6 +43,7 @@ public class EagleConfigFactory implements EagleConfig {
     private String storageType;
     private Config config;
     private TimeZone timeZone;
+    private boolean autoCreateTable = true;
 
     public boolean isCoprocessorEnabled() {
         return isCoprocessorEnabled;
@@ -102,6 +103,7 @@ public class EagleConfigFactory implements EagleConfig {
         final String zkZnodeParent = config.hasPath(EagleConfigConstants.SERVICE_ZOOKEEPER_ZNODE_PARENT)
             ? config.getString(EagleConfigConstants.SERVICE_ZOOKEEPER_ZNODE_PARENT) : EagleConfigConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT;
         String clientIPCPoolSize = getString(config, EagleConfigConstants.SERVICE_HBASE_CLIENT_IPC_POOL_SIZE, "10");
+        this.autoCreateTable = !config.hasPath(EagleConfigConstants.AUTO_CREATE_TABLE) || config.getBoolean(EagleConfigConstants.AUTO_CREATE_TABLE);
         this.hbaseConf = HBaseConfiguration.create();
         this.hbaseConf.set("hbase.client.ipc.pool.size", clientIPCPoolSize);
 
@@ -207,4 +209,13 @@ public class EagleConfigFactory implements EagleConfig {
     public boolean isServiceAuditingEnabled() {
         return isServiceAuditingEnabled;
     }
+
+    @Override
+    public boolean isAutoCreateTable() {
+        return autoCreateTable;
+    }
+
+    public void setAutoCreateTable(boolean autoCreateTable) {
+        this.autoCreateTable = autoCreateTable;
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/269ff147/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseEntitySchemaManager.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseEntitySchemaManager.java b/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseEntitySchemaManager.java
index d7483f5..354d641 100644
--- a/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseEntitySchemaManager.java
+++ b/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseEntitySchemaManager.java
@@ -26,7 +26,6 @@ import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
-import org.apache.hadoop.hbase.io.compress.Compression;
 import org.apache.hadoop.hbase.regionserver.BloomType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -57,7 +56,12 @@ public class HBaseEntitySchemaManager {
     }
 
     public void init() {
+        if (!EagleConfigFactory.load().isAutoCreateTable()) {
+            LOG.debug("Auto create table disabled, skip creating table");
+            return;
+        }
         Configuration conf = EagleConfigFactory.load().getHbaseConf();
+
         try {
             admin = new HBaseAdmin(conf);
             Map<String, EntityDefinition> entityServiceMap = EntityDefinitionManager.entities();

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/269ff147/eagle-server/src/main/resources/application.conf
----------------------------------------------------------------------
diff --git a/eagle-server/src/main/resources/application.conf b/eagle-server/src/main/resources/application.conf
index b9f4ac0..84b467c 100644
--- a/eagle-server/src/main/resources/application.conf
+++ b/eagle-server/src/main/resources/application.conf
@@ -44,6 +44,8 @@ storage {
   type = "hbase"
 
   hbase {
+    autoCreateTable = true
+    
     # hbase configuration: hbase.zookeeper.quorum
     # default is "localhost"
     zookeeperQuorum = "localhost"

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/269ff147/eagle-server/src/main/webapp/app/dev/partials/alert/detail.html
----------------------------------------------------------------------
diff --git a/eagle-server/src/main/webapp/app/dev/partials/alert/detail.html b/eagle-server/src/main/webapp/app/dev/partials/alert/detail.html
index 96f7bd5..5f63ccf 100644
--- a/eagle-server/src/main/webapp/app/dev/partials/alert/detail.html
+++ b/eagle-server/src/main/webapp/app/dev/partials/alert/detail.html
@@ -20,7 +20,7 @@
 	<div class="box-header with-border">
 		<span class="fa fa-bell"></span>
 		<h3 class="box-title">
-			ID: {{alert.tags.alertId}}
+			<strong>[{{alert.tags.category}}]</strong> {{alert.alertSubject}}
 			<span class="fa fa-refresh fa-spin no-animate" ng-show="!alertList._done"></span>
 		</h3>
 	</div>
@@ -28,53 +28,43 @@
 		<table class="table">
 			<tbody>
 				<tr>
-					<th width="15%">severity</th>
-					<td width="35%">
-						<span class="label label-{{Policy.getSeverityClass(alert.tags.severity)}}">
-							{{alert.tags.severity}}
-						</span>
-					</td>
+					<th>Severity</th>
+					<td><span class="label label-{{Policy.getSeverityClass(alert.tags.severity)}}">{{alert.tags.severity}}</span></td>
 					<th width="15%">Time</th>
 					<td width="35%">{{Time.format(alert.timestamp)}}</td>
 				</tr>
 				<tr>
-					<th>Policy</th>
-					<td><a ui-sref="policyDetail({name: item.policyId})">{{alert.tags.policyId}}</a></td>
 					<th>Category</th>
 					<td>{{alert.tags.category}}</td>
-				</tr>
-				<tr>
 					<th>Site</th>
 					<td>{{alert.tags.siteId}}</td>
-					<th>Applications</th>
-					<td>
-						<ul class="list-unstyled">
-							<li ng-repeat="app in alert.appIds track by $index" class="label label-sm label-primary">
-								{{Application.findProvider(app).type || app}}
-							</li>
-						</ul>
-					</td>
 				</tr>
 				<tr>
-					<th>Policy</th>
+					<th>Message</th>
 					<td colspan="3">
-						<pre class="inline">{{alert.policyValue}}</pre>
+						<div ng-bind-html="alertBody"></div>
 					</td>
 				</tr>
 				<tr>
-					<th>Alert Data</th>
+					<th>Alert Policy</th>
+					<td colspan="3"><a ui-sref="policyDetail({name: item.policyId})">{{alert.tags.policyId}}</a></td>
+				</tr>
+				<tr>
+					<th>Alert Event</th>
 					<td colspan="3">
 						<pre>{{alert.alertData | json}}</pre>
 					</td>
 				</tr>
 				<tr>
-					<th>Alert Subject</th>
-					<td colspan="3">{{alert.alertSubject}}</td>
-				</tr>
-				<tr>
-					<th>Alert Body</th>
+					<th>Related Apps</th>
 					<td colspan="3">
-						<div ng-bind-html="alertBody"></div>
+						<ul>
+							<ul class="list-unstyled">
+								<li ng-repeat="app in alert.appIds track by $index" class="label label-sm label-default">
+									{{Application.findProvider(app).type || app}}
+								</li>
+							</ul>
+						</ul>
 					</td>
 				</tr>
 			</tbody>

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/269ff147/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 e326e47..806234d 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
@@ -44,35 +44,34 @@
 							Time
 							<span class="fa fa-refresh fa-spin no-animate" ng-show="!alertList._done || isSorting"></span>
 						</th>
-						<th sortpath="tags.siteId" width="75">Site</th>
-						<th sortpath="tags.policyId" width="75">Policy</th>
 						<th sortpath="tags.severity" width="85">Severity</th>
+						<th sortpath="tags.siteId" width="75">Site</th>
 						<!--th sortpath="streamId" width="75">Stream</th-->
-						<th width="100">Application</th>
-						<th>Alert Subject</th>
+						<th width="100" sortpath="tags.category" >Category</th>
+						<th>Subject</th>
+						<th sortpath="tags.policyId" width="75">Policy</th>
 						<th width="10"></th>
 					</tr>
 				</thead>
 				<tbody>
 					<tr>
 						<td>{{Time.format(item.timestamp)}}</td>
-						<td>{{item.tags.siteId}}</td>
-						<td>
-							<a ui-sref="policyDetail({name: item.tags.policyId})">{{item.tags.policyId}}</a>
-						</td>
 						<td>
 							<span class="label label-{{Policy.getSeverityClass(item.tags.severity)}}">
 								{{item.tags.severity}}
 							</span>
 						</td>
+						<td>{{item.tags.siteId}}</td>
+						<!--<td>-->
+							<!--<ul class="list-unstyled">-->
+								<!--<li ng-repeat="app in item.appIds track by $index" class="label label-sm label-primary">-->
+									<!--{{Application.findProvider(app).type || app}}-->
+								<!--</li>-->
+							<!--</ul>-->
+						<!--</td>-->
+						<td>{{item.tags.category || "N/A"}}</td>
+						<td><a ui-sref="alertDetail({alertId: item.tags.alertId})" title="{{item.alertBody}}">{{item.alertSubject}}</a></td>
 						<!--td>{{item.streamId}}</td-->
-						<td>
-							<ul class="list-unstyled">
-								<li ng-repeat="app in item.appIds track by $index" class="label label-sm label-primary">
-									{{Application.findProvider(app).type || app}}
-								</li>
-							</ul>
-						</td>
 						<!--td class="text-break">
 							<span ng-if="displayType === 'raw'" na-block="item.alertData"></span>
 							<div ng-if="displayType === 'format'" na-block="!!item.alertData">
@@ -84,9 +83,11 @@
 								</ul>
 							</div>
 						</td-->
-						<td>{{item.alertSubject}}</td>
 						<td>
-							<a ui-sref="alertDetail({alertId: item.tags.alertId})">Detail</a>
+							<a ui-sref="policyDetail({name: item.tags.policyId})">{{item.tags.policyId}}</a>
+						</td>
+						<td>
+							<a ui-sref="alertDetail({alertId: item.tags.alertId})">detail</a>
 						</td>
 					</tr>
 				</tbody>