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 <h...@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 <h...@apache.org>
Authored: Wed Dec 7 23:28:45 2016 +0800
Committer: Hao Chen <h...@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>

Reply via email to