You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@eagle.apache.org by hd...@apache.org on 2016/02/26 22:26:25 UTC
[7/9] incubator-eagle git commit: EAGLE-139 EAGLE-163 Eagle UI
Modularization and fix bugs in policy extensions
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/resources/eagleSecurity.xml
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/resources/eagleSecurity.xml b/eagle-webservice/src/main/resources/eagleSecurity.xml
index 2b106b3..b8683dc 100644
--- a/eagle-webservice/src/main/resources/eagleSecurity.xml
+++ b/eagle-webservice/src/main/resources/eagleSecurity.xml
@@ -28,6 +28,8 @@
<scr:http-basic entry-point-ref="unauthorisedEntryPoint"/>
<scr:intercept-url pattern="/rest/entities" method="POST" access="hasRole('ROLE_ADMIN')" />
<scr:intercept-url pattern="/rest/entities/delete" method="POST" access="hasRole('ROLE_ADMIN')" />
+ <scr:intercept-url pattern="/rest/module/*" method="DELETE" access="hasRole('ROLE_ADMIN')" />
+ <scr:intercept-url pattern="/rest/module/*" method="POST" access="hasRole('ROLE_ADMIN')" />
<scr:intercept-url pattern="/rest/list" method="POST" access="hasRole('ROLE_ADMIN')" />
<scr:intercept-url pattern="/rest/status" method="GET" access="permitAll" />
<scr:intercept-url pattern="/rest/*" access="isAuthenticated()" />
@@ -82,7 +84,7 @@
<scr:user-service>
<!-- user admin has role ADMIN, user eagle has role USER, both have password "secret" -->
<scr:user name="eagle" password="$2a$10$TwALMRHpSetDaeTurg9rj.DnIdOde4fkQGBSPG3fVqtH.G5ZH8sQK" authorities="ROLE_USER" />
- <scr:user name="admin" password="$2a$10$TwALMRHpSetDaeTurg9rj.DnIdOde4fkQGBSPG3fVqtH.G5ZH8sQK" authorities="ROLE_ADMIN, ROLE_USER" />
+ <scr:user name="admin" password="$2a$10$TwALMRHpSetDaeTurg9rj.DnIdOde4fkQGBSPG3fVqtH.G5ZH8sQK" authorities="ROLE_ADMIN" />
</scr:user-service>
<scr:password-encoder ref="passwordEncoder" />
</scr:authentication-provider>
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/Gruntfile.js
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/Gruntfile.js b/eagle-webservice/src/main/webapp/Gruntfile.js
index a32b1da..d547ad6 100644
--- a/eagle-webservice/src/main/webapp/Gruntfile.js
+++ b/eagle-webservice/src/main/webapp/Gruntfile.js
@@ -45,6 +45,9 @@ module.exports = function (grunt) {
concat: {
app: {
src: [
+ 'app/public/js/srv/main.js',
+ 'app/public/js/srv/**.js',
+
'app/public/js/app.js',
'app/public/js/app.*.js',
@@ -54,7 +57,7 @@ module.exports = function (grunt) {
'app/public/js/components/**.js',
'app/public/js/components/**/**.js',
- 'app/public/js/ctrl/damController.js',
+ 'app/public/js/ctrl/main.js',
'app/public/js/ctrl/*.js',
],
dest: 'tmp/public/js/scripts.js'
@@ -89,14 +92,24 @@ module.exports = function (grunt) {
options: {
mangle: false
},
- src: 'tmp/public/js/scripts.js',
- dest: 'tmp/public/js/scripts.min.js'
- }
+ files: [
+ {
+ src: 'tmp/public/js/scripts.js',
+ dest: 'tmp/public/js/scripts.min.js'
+ },
+ {
+ expand: true,
+ src: '**/*.js',
+ dest: 'tmp/feature',
+ cwd: 'app/public/feature'
+ }
+ ]
+ },
},
cssmin: {
ui: {
files: {
- 'tmp/public/css/styles.css': ['app/public/css/main.css']
+ 'tmp/public/css/styles.css': ['app/public/css/main.css', 'app/public/css/animation.css']
}
}
},
@@ -107,6 +120,11 @@ module.exports = function (grunt) {
}
},
copy: {
+ feature: {
+ files: [
+ {expand: true, cwd: 'app/', src: ['public/feature/**'], dest: 'tmp'}
+ ]
+ },
ui: {
files: [
{expand: true, cwd: 'tmp/', src: ['**'], dest: 'ui'},
@@ -133,6 +151,7 @@ module.exports = function (grunt) {
// Clean Env
'clean:build',
// Compress JS
+ 'copy:feature',
'concat:app',
'regex-replace:strict',
'uglify',
@@ -142,7 +161,7 @@ module.exports = function (grunt) {
'concat:css',
// Pass HTML Resources
'htmlrefs',
- 'copy',
+ 'copy:ui',
// Clean Env
'clean:tmp',
]);
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/index.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/index.html b/eagle-webservice/src/main/webapp/app/index.html
index 82b543f..f3d61a4 100644
--- a/eagle-webservice/src/main/webapp/app/index.html
+++ b/eagle-webservice/src/main/webapp/app/index.html
@@ -30,72 +30,63 @@
<!-- ref:css public/css/styles.min.css -->
<link href="public/css/main.css" rel="stylesheet" type="text/css" media="screen">
- <link href="../node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet" type="text/css" media="screen">
- <link href="../node_modules/zombiej-bootstrap-components/bootstrap-components/css/bootstrap-components.min.css" rel="stylesheet" type="text/css" media="screen">
- <link href="../node_modules/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
- <link href="../node_modules/zombiej-nvd3/build/nv.d3.min.css" rel="stylesheet" type="text/css" />
- <link href="../node_modules/admin-lte/dist/css/AdminLTE.min.css" rel="stylesheet" type="text/css" />
- <link href="../node_modules/admin-lte/dist/css/skins/skin-blue.min.css" rel="stylesheet" type="text/css" />
+ <link href="public/css/animation.css" rel="stylesheet" type="text/css" media="screen">
+ <link href="../node_modules/bootstrap/dist/css/bootstrap.css" rel="stylesheet" type="text/css" media="screen">
+ <link href="../node_modules/zombiej-bootstrap-components/bootstrap-components/css/bootstrap-components.css" rel="stylesheet" type="text/css" media="screen">
+ <link href="../node_modules/zombiej-nvd3/build/nv.d3.css" rel="stylesheet" type="text/css" />
+ <link href="../node_modules/font-awesome/css/font-awesome.css" rel="stylesheet" type="text/css" />
+ <link href="../node_modules/admin-lte/dist/css/AdminLTE.css" rel="stylesheet" type="text/css" />
+ <link href="../node_modules/admin-lte/dist/css/skins/skin-blue.css" rel="stylesheet" type="text/css" />
<!-- endref -->
</head>
- <body class="skin-blue sidebar-mini" ng-class="{'no-sidebar' : globalContent.hideSidebar}">
+ <body class="skin-blue sidebar-mini" ng-class="{'no-sidebar' : PageConfig.hideSidebar}">
<!-- Site wrapper -->
<div class="wrapper">
<header class="main-header">
<a href="#/" class="logo">
- <span class="logo-mini">DAM</span>
- <span class="logo-lg">Eagle <small>Data Activity Monitoring</small></span>
+ <span class="logo-mini"><img src="public/images/favicon_white.png" /></span>
+ <span class="logo-lg">Apache Eagle</span>
</a>
<!-- Header Navbar: style can be found in header.less -->
<nav class="navbar navbar-static-top" role="navigation">
<!-- Sidebar toggle button-->
- <a ng-hide="globalContent.hideSidebar" class="sidebar-toggle" data-toggle="offcanvas" role="button">
+ <a ng-hide="PageConfig.hideSidebar" class="sidebar-toggle" data-toggle="offcanvas" role="button">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
+
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
<!-- Site -->
- <li class="dropdown" ng-show="!globalContent.hideSite && !globalContent.lockSite">
+ <li class="dropdown" ng-show="!PageConfig.hideSite && !PageConfig.lockSite">
<a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-server"></i>
- {{site.current().name}}
+ {{Site.current().tags.site}}
<i class="fa fa-caret-down"></i>
</a>
<ul class="dropdown-menu">
- <li ng-repeat="sites in site.list">
- <a ng-click="site.current(sites);">
- <span class="fa fa-database"></span> {{sites.name}}
+ <li ng-repeat="_site in Site.list" ng-if="_site.enabled">
+ <a ng-click="Site.current(_site);">
+ <span class="fa fa-database"></span> {{_site.tags.site}}
</a>
</li>
- <!--li role="separator" class="divider"></li>
- <li>
- <a href="#/dam/siteList"><span class="fa fa-cog"></span>Config Sites</a>
- </li-->
</ul>
</li>
- <li class="dropdown" ng-show="globalContent.lockSite">
+ <li class="dropdown" ng-show="PageConfig.lockSite">
<a>
<i class="fa fa-server"></i>
- {{site.current().name}}
+ {{Site.current().tags.site}}
</a>
</li>
<!-- User -->
- <li class="dropdown user user-menu" ng-hide="globalContent.hideUser">
+ <li class="dropdown user user-menu" ng-hide="PageConfig.hideUser">
<a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-user"></i>
- {{auth.userProfile.username}}
+ {{Auth.userProfile.username}}
</a>
- <!--ul class="dropdown-menu">
- <li>
- <a ng-click="logout();">
- <span class="fa fa-sign-out"></span> Logout
- </a>
- </li>
- </ul-->
<ul class="dropdown-menu">
<!-- User image -->
<li class="user-header">
@@ -103,14 +94,17 @@
<span class="fa fa-user" alt="User Image"></span>
</span>
<p>
- {{auth.userProfile.username}}
+ {{Auth.userProfile.username}}
<small>
- <span ng-repeat="role in auth.userProfile.authorities">{{role.authority}} </span>
+ <span ng-repeat="role in Auth.userProfile.authorities">{{role.authority}} </span>
</small>
</p>
</li>
<!-- Menu Footer-->
<li class="user-footer">
+ <div class="pull-left" ng-if="Auth.isRole('ROLE_ADMIN')">
+ <a href="#/config/site" class="btn btn-default btn-flat">Configuration</a>
+ </div>
<div class="pull-right">
<a ng-click="logout();" class="btn btn-default btn-flat">Sign out</a>
</div>
@@ -119,16 +113,45 @@
</li>
</ul>
</div>
+
+ <!-- Applications -->
+ <div ng-hide="PageConfig.hideApplication">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#moduleMenu">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="fa fa-map"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="moduleMenu">
+ <ul class="nav navbar-nav">
+ <li ng-repeat="_grp in Site.current().applicationGroupList" ng-if="_grp.enabledList.length"
+ class="dropdown" ng-class="{active: Application.current().groupName === _grp.name}">
+ <a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
+ {{_grp.name}}
+ </a>
+ <ul class="dropdown-menu">
+ <li ng-repeat="_app in _grp.enabledList">
+ <a ng-click="Application.current(_app);">
+ <span class="fa fa-cubes"></span> {{_app.displayName}}
+ </a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ </div>
</nav>
</header>
<!-- =============================================== -->
<!-- Left side column. contains the side bar -->
- <aside class="main-sidebar" ng-hide="globalContent.hideSidebar">
+ <aside class="main-sidebar" ng-hide="PageConfig.hideSidebar">
<!-- side bar: style can be found in sidebar.less -->
<section class="sidebar">
<ul class="sidebar-menu">
- <li ng-repeat="page in globalContent.pageList" ng-class="getNavClass(page)" ng-show="getNavVisible(page)">
+ <li class="header">
+ {{Application.current().groupName || 'Application'}} >
+ {{Application.current().displayName || 'Features'}}
+ </li>
+ <li ng-repeat="page in PageConfig.navConfig.pageList track by $index" ng-class="getNavClass(page)" ng-show="getNavVisible(page)">
<a href="{{page.url}}">
<i class="fa fa-{{page.icon}}"></i> <span>{{page.title}}</span>
</a>
@@ -142,17 +165,18 @@
<!-- Right side column. Contains the navbar and content of the page -->
<div class="content-wrapper">
<!-- Content Header (Page header) -->
- <section class="content-header" ng-hide="globalContent.hideSidebar">
+ <section class="content-header" ng-hide="PageConfig.hideSidebar">
<h1>
- <span class="pageTitle">{{globalContent.pageTitle}}</span>
- <small class="pageSubTitle">{{globalContent.pageSubTitle}}</small>
+ <span class="pageTitle">{{PageConfig.pageTitle}}</span>
+ <small class="pageSubTitle">{{PageConfig.pageSubTitle}}</small>
</h1>
+
<ol class="breadcrumb">
- <li ng-repeat="nav in globalContent.navPath">
- <a ng-href="{{$last ? '' : globalContent.navMapping[nav]}}">
- <span class="fa fa-home" ng-show="$first"></span>
- {{nav}}
+ <li ng-repeat="navPath in PageConfig.navPath">
+ <a ng-href="#{{navPath.path}}">
+ <span class="fa fa-home" ng-if="$first"></span>
+ {{navPath.title || navPath.path}}
</a>
</li>
</ol>
@@ -160,7 +184,9 @@
<!-- Main content -->
<section class="content">
- <div id="content" ng-view></div>
+ <div id="content">
+ <div ui-view></div>
+ </div>
</section><!-- /.content -->
</div><!-- /.content-wrapper -->
</div><!-- ./wrapper -->
@@ -176,12 +202,23 @@
<script src="../node_modules/angular/angular.js"></script>
<script src="../node_modules/angular-resource/angular-resource.js"></script>
<script src="../node_modules/angular-route/angular-route.js"></script>
- <script src="../node_modules/angular-cookies/angular-cookies.js"></script>
+ <script src="../node_modules/angular-animate/angular-animate.js"></script>
<script src="../node_modules/angular-ui-bootstrap/ui-bootstrap-tpls.js"></script>
+ <script src="../node_modules/angular-ui-router/release/angular-ui-router.js"></script>
<script src="../node_modules/d3/d3.js"></script>
<script src="../node_modules/zombiej-nvd3/build/nv.d3.js"></script>
-
+ <!-- Service -->
+ <script src="public/js/srv/main.js" type="text/javascript" charset="utf-8"></script>
+ <script src="public/js/srv/applicationSrv.js" type="text/javascript" charset="utf-8"></script>
+ <script src="public/js/srv/authorizationSrv.js" type="text/javascript" charset="utf-8"></script>
+ <script src="public/js/srv/entitiesSrv.js" type="text/javascript" charset="utf-8"></script>
+ <script src="public/js/srv/siteSrv.js" type="text/javascript" charset="utf-8"></script>
+ <script src="public/js/srv/pageSrv.js" type="text/javascript" charset="utf-8"></script>
+ <script src="public/js/srv/wrapStateSrv.js" type="text/javascript" charset="utf-8"></script>
+ <script src="public/js/srv/uiSrv.js" type="text/javascript" charset="utf-8"></script>
+
+ <!-- Application -->
<script src="public/js/app.js" type="text/javascript" charset="utf-8"></script>
<script src="public/js/app.ui.js" type="text/javascript" charset="utf-8"></script>
<script src="public/js/app.time.js" type="text/javascript" charset="utf-8"></script>
@@ -189,6 +226,7 @@
<script src="public/js/common.js" type="text/javascript" charset="utf-8"></script>
+ <!-- Components -->
<script src="public/js/components/main.js" type="text/javascript" charset="utf-8"></script>
<script src="public/js/components/sortTable.js" type="text/javascript" charset="utf-8"></script>
<script src="public/js/components/tabs.js" type="text/javascript" charset="utf-8"></script>
@@ -196,15 +234,10 @@
<script src="public/js/components/charts/line3d.js" type="text/javascript" charset="utf-8"></script>
<script src="public/js/components/nvd3.js" type="text/javascript" charset="utf-8"></script>
-
- <script src="public/js/ctrl/damController.js" type="text/javascript" charset="utf-8"></script>
- <script src="public/js/ctrl/policyController.js" type="text/javascript" charset="utf-8"></script>
- <script src="public/js/ctrl/siteController.js" type="text/javascript" charset="utf-8"></script>
- <script src="public/js/ctrl/streamController.js" type="text/javascript" charset="utf-8"></script>
- <script src="public/js/ctrl/alertController.js" type="text/javascript" charset="utf-8"></script>
- <script src="public/js/ctrl/sensitivityController.js" type="text/javascript" charset="utf-8"></script>
- <script src="public/js/ctrl/userProfileController.js" type="text/javascript" charset="utf-8"></script>
+ <!-- Controllers -->
+ <script src="public/js/ctrl/main.js" type="text/javascript" charset="utf-8"></script>
<script src="public/js/ctrl/authController.js" type="text/javascript" charset="utf-8"></script>
+ <script src="public/js/ctrl/configurationController.js" type="text/javascript" charset="utf-8"></script>
<!-- endref -->
</body>
</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/config/application.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/config/application.html b/eagle-webservice/src/main/webapp/app/partials/config/application.html
new file mode 100644
index 0000000..5c5b09e
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/partials/config/application.html
@@ -0,0 +1,103 @@
+<div class="box box-info">
+ <div class="box-header with-border">
+ <h3 class="box-title">
+ <span class="fa fa-cogs"></span>
+ Configuration
+ </h3>
+ </div><!-- /.box-header -->
+
+ <div class="box-body">
+ <div class="row">
+ <div class="col-md-3">
+ <ul class="nav nav-pills nav-stacked">
+ <li class="disabled"><a>Application</a></li>
+ <li role="presentation" ng-repeat="_application in Application.list track by $index" ng-class="{active: application === _application}">
+ <a ng-click="setApplication(_application)">
+ <span class="fa fa-server"></span>
+ {{_application.tags.application}}
+ <span ng-if="_application.alias">({{_application.alias}})</span>
+ </a>
+ </li>
+
+ <li>
+ <a class="text-light-blue" ng-click="newApplication()" ng-disabled="_pageLock">
+ <span class="fa fa-plus-square"></span>
+ New Application
+ </a>
+ </li>
+ </ul>
+ </div>
+
+ <div class="col-md-9">
+ <a class="pull-right btn btn-danger btn-xs" ng-click="deleteApplication(application)" ng-disabled="_pageLock">
+ <span class="fa fa-trash-o"></span>
+ Delete Application
+ </a>
+
+ <!-- Title -->
+ <h3 class="guideline">
+ Application
+ <small>{{application.tags.application}}</small>
+ </h3>
+ <hr/>
+
+ <!-- Config -->
+ <div class="form-group">
+ <label for="displayName">Display Name</label>
+ <input type="text" class="form-control" id="displayName" placeholder="(Optional) Display name." ng-model="applications[application.tags.application].alias">
+ </div>
+ <div class="form-group">
+ <label for="applicationGroup">Group</label>
+ <input type="text" class="form-control" id="applicationGroup" placeholder="(Optional) Group name" ng-model="applications[application.tags.application].group">
+ </div>
+ <div class="form-group">
+ <label for="applicationDescription">Description</label>
+ <textarea id="applicationDescription" class="form-control" placeholder="(Optional) Application description" rows="2" ng-model="applications[application.tags.application].desc"></textarea>
+ </div>
+ <div class="form-group">
+ <label for="applicationConfiguration">Configuration</label>
+ <span class="text-danger">{{configCheck(applications[application.tags.application].config)}}</span>
+ <textarea id="applicationConfiguration" class="form-control" placeholder="Application configuration. Feature can read this " rows="5" ng-model="applications[application.tags.application].config"></textarea>
+ </div>
+
+ <!-- Feature -->
+ <label>* Feature</label>
+ <div class="row">
+ <div class="col-sm-6">
+ <h1 class="text-muted text-center" ng-show="applications[application.tags.application].features.length === 0">No feature in using</h1>
+ <ul class="products-list product-list-in-box fixed-height" ng-show="applications[application.tags.application].features.length !== 0">
+ <li class="item" ng-repeat="feature in applications[application.tags.application].features track by $index" ng-class="{active: _feature === feature}">
+ <div class="product-operation">
+ <a class="fa fa-chevron-up" ng-click="moveFeature(feature, applications[application.tags.application].features, -1)"></a>
+ <a class="fa fa-chevron-down" ng-click="moveFeature(feature, applications[application.tags.application].features, 1)"></a>
+ </div>
+ <div class="product-info">
+ <a class="fa fa-times pull-right" ng-click="removeFeature(feature, applications[application.tags.application])"></a>
+ <span class="product-title">{{feature}}</span>
+ <span class="product-description">{{Application.featureList.set[feature].desc}}</span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div class="col-sm-6">
+ <ul class="products-list product-list-in-box fixed-height">
+ <li class="item" ng-repeat="feature in applications[application.tags.application].optionalFeatures track by $index">
+ <button class="btn btn-lg btn-primary pull-left" ng-click="addFeature(feature, applications[application.tags.application])" ng-disabled="_pageLock">
+ <span class="fa fa-star-o"></span>
+ </button>
+ <div class="product-info">
+ <span class="product-title">{{feature}}</span>
+ <span class="product-description">{{Application.featureList.set[feature].desc}}</span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div><!-- /.box-body -->
+
+ <div class="box-footer clearfix">
+ <button class="btn btn-primary" ng-click="saveAll()" ng-disabled="_pageLock">Save All</button>
+ </div>
+</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/config/feature.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/config/feature.html b/eagle-webservice/src/main/webapp/app/partials/config/feature.html
new file mode 100644
index 0000000..3088883
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/partials/config/feature.html
@@ -0,0 +1,64 @@
+<div class="box box-info">
+ <div class="box-header with-border">
+ <h3 class="box-title">
+ <span class="fa fa-cogs"></span>
+ Configuration
+ </h3>
+ </div><!-- /.box-header -->
+
+ <div class="box-body">
+ <div class="row">
+ <div class="col-md-3">
+ <ul class="nav nav-pills nav-stacked">
+ <li class="disabled">
+ <a>Feature</a>
+ </li>
+ <li role="presentation" ng-repeat="_feature in Application.featureList" ng-class="{active: feature === _feature}">
+ <a ng-click="setFeature(_feature)">
+ <span class="fa fa-leaf" ng-class="{'text-danger': _feature._loaded === false}" uib-tooltip="Module load failed!" tooltip-enable="_feature._loaded === false"></span>
+ {{_feature.tags.feature}}
+ </a>
+ </li>
+ <li>
+ <a class="text-light-blue" ng-click="newFeature()" ng-disabled="_pageLock">
+ <span class="fa fa-plus-square"></span>
+ New Feature
+ </a>
+ </li>
+ </ul>
+ </div>
+
+ <div class="col-md-9">
+ <a class="pull-right btn btn-danger btn-xs" ng-click="deleteFeature(feature)" ng-disabled="_pageLock">
+ <span class="fa fa-trash-o"></span>
+ Delete Feature
+ </a>
+
+ <h3 class="guideline">
+ <span class="fa fa-exclamation-triangle text-danger" uib-tooltip="Module load failed!" ng-show="feature._loaded === false"></span>
+ {{feature.tags.feature}}
+ </h3>
+ <hr/>
+
+ <p class="text text-muted">
+ Will load the start up file <code>controller.js</code> from <code>public/feature/{{feature.tags.feature}}</code>.
+ If you are developing customized feature, please reference provided feature.
+ </p>
+
+ <!-- Config -->
+ <div class="form-group">
+ <label for="featureVersion">Version</label>
+ <input id="featureVersion" type="text" class="form-control" placeholder="(Optional) Feature version." ng-model="features[feature.tags.feature].version">
+ </div>
+ <div class="form-group">
+ <label for="featureDescription">Description</label>
+ <textarea id="featureDescription" class="form-control" placeholder="(Optional) Feature description." rows="10" ng-model="features[feature.tags.feature].desc"></textarea>
+ </div>
+ </div>
+ </div>
+ </div><!-- /.box-body -->
+
+ <div class="box-footer clearfix">
+ <button class="btn btn-primary" ng-click="saveAll()" ng-disabled="_pageLock">Save All</button>
+ </div>
+</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/config/site.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/config/site.html b/eagle-webservice/src/main/webapp/app/partials/config/site.html
new file mode 100644
index 0000000..1d792d9
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/partials/config/site.html
@@ -0,0 +1,94 @@
+<div class="box box-info">
+ <div class="box-header with-border">
+ <h3 class="box-title">
+ <span class="fa fa-cogs"></span>
+ Configuration
+ </h3>
+ </div><!-- /.box-header -->
+
+ <div class="box-body">
+ <div class="row">
+ <div class="col-md-3">
+ <ul class="nav nav-pills nav-stacked">
+ <li class="disabled"><a>Site</a></li>
+ <li role="presentation" ng-repeat="_site in Site.list track by $index" ng-class="{active: site === _site}">
+ <a ng-click="setSite(_site)">
+ <span class="fa fa-server"></span>
+ {{_site.tags.site}}
+ </a>
+ </li>
+
+ <li>
+ <a class="text-light-blue" ng-click="newSite()" ng-disabled="_pageLock">
+ <span class="fa fa-plus-square"></span>
+ New Site
+ </a>
+ </li>
+ </ul>
+ </div>
+
+ <div class="col-md-9">
+ <a class="pull-right btn btn-danger btn-xs" ng-click="deleteSite(site)" ng-disabled="_pageLock">
+ <span class="fa fa-trash-o"></span>
+ Delete Site
+ </a>
+
+ <!-- Title -->
+ <h3 class="guideline">
+ Site
+ <small>{{site.tags.site}}</small>
+ </h3>
+ <hr/>
+
+ <!-- Config -->
+ <div class="checkbox">
+ <label>
+ <input type="checkbox" ng-checked="sites[site.tags.site].enabled" ng-click="sites[site.tags.site].enabled = !sites[site.tags.site].enabled">
+ <strong>Enabled</strong>
+ </label>
+ </div>
+ <hr/>
+
+ <!-- Application -->
+ <label>* Application</label>
+ <div class="row">
+ <div class="col-sm-6">
+ <h1 class="text-muted text-center" ng-show="sites[site.tags.site].applications.length === 0">No application in using</h1>
+ <ul class="products-list product-list-in-box fixed-height" ng-show="sites[site.tags.site].applications.length !== 0">
+ <li class="item" ng-repeat="application in sites[site.tags.site].applications track by $index" ng-class="{active: _application === application}">
+ <div class="product-operation single">
+ <span class="fa fa-cubes"></span>
+ </div>
+ <div class="product-info">
+ <a class="fa fa-times pull-right" ng-click="removeApplication(application, sites[site.tags.site])"></a>
+ <span class="product-title">
+ <a class="fa fa-cog" ng-click="setApplication(application)"></a>
+ {{application.tags.application}}
+ </span>
+ <span class="product-description">{{Application.list.set[application.tags.application].desc}}</span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div class="col-sm-6">
+ <ul class="products-list product-list-in-box fixed-height">
+ <li class="item" ng-repeat="application in sites[site.tags.site].optionalApplications track by $index">
+ <button class="btn btn-lg btn-primary pull-left" ng-click="addApplication(application, sites[site.tags.site])" ng-disabled="_pageLock">
+ <span class="fa fa-star-o"></span>
+ </button>
+ <div class="product-info">
+ <span class="product-title">{{application.tags.application}}</span>
+ <span class="product-description">{{Application.list.set[application.tags.application].desc}}</span>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div><!-- /.box-body -->
+
+ <div class="box-footer clearfix">
+ <button class="btn btn-primary" ng-click="saveAll()" ng-disabled="_pageLock">Save All</button>
+ </div>
+</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/alertDetail.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/alertDetail.html b/eagle-webservice/src/main/webapp/app/partials/dam/alertDetail.html
deleted file mode 100644
index 9b0ec01..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/alertDetail.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-<div class="box box-info">
- <div class="box-header with-border">
- <h3 class="box-title" id="policyId">
- {{alert.tags.policyId}}
- <small>{{common.format.date(alert.timestamp)}}</small>
- </h3>
- </div><!-- /.box-header -->
-
- <div class="box-body">
- <a class="btn btn-primary pull-right" href="#/dam/policyDetail/?policy={{alert.tags.policyId}}&site={{alert.tags.site}}&executor={{alert.tags.alertExecutorId}}">View Policy</a>
-
- <div class="inline-group">
- <dl><dt>Site</dt><dd>{{alert.tags.site}}</dd></dl>
- <dl><dt>Data Source</dt><dd>{{alert.tags.dataSource}}</dd></dl>
- </div>
- <div class="inline-group">
- <dl><dt>Alert Time</dt><dd>{{common.format.date(alert.timestamp)}}</dd></dl>
- <dl><dt>Message Time</dt><dd>{{common.format.date(alert.alertContext.properties.timestamp)}}</dd></dl>
- </div>
- <!--div class="inline-group">
- <dl><dt>Severity</dt><dd>{{alert.alertContext.properties.severity}}</dd></dl>
- </div-->
- <div class="inline-group">
- <dl><dt>Stream Name</dt><dd>{{alert.tags.sourceStreams}}</dd></dl>
- </div>
- <div class="inline-group">
- <dl><dt>Alert Source</dt><dd>{{alert.tags.alertSource}}</dd></dl>
- </div>
- <div class="inline-group">
- <dl><dt>User</dt><dd>{{alert.alertContext.properties.user}}</dd></dl>
- <dl><dt>Host</dt><dd>{{alert.alertContext.properties.host}}</dd></dl>
- </div>
- <div class="inline-group">
- <dl><dt>Event</dt><dd>{{alert.alertContext.properties.alertEvent}}</dd></dl>
- </div>
- <div class="inline-group">
- <dl><dt>Message</dt><dd>{{alert.alertContext.properties.alertMessage}}</dd></dl>
- </div>
- </div><!-- /.box-body -->
-
- <div class="overlay" ng-hide="alertList._promise.$$state.status === 1;">
- <i class="fa fa-refresh fa-spin"></i>
- </div>
-</div>
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/alertList.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/alertList.html b/eagle-webservice/src/main/webapp/app/partials/dam/alertList.html
deleted file mode 100644
index d5492ca..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/alertList.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-<div class="box box-primary">
- <div class="box-header with-border">
- <i class="fa fa-list-alt"> </i>
- <h3 class="box-title">
- {{dataSource || "All Alerts"}}
- <div class="btn-group">
- <button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
- <i class="fa fa-caret-down"></i>
- </button>
- <ul id="programList" class="dropdown-menu" role="menu">
- <li ng-repeat="dataSrc in site.current().dataSrcList">
- <a href="#/dam/alertList/{{dataSrc.tags.dataSource}}">{{dataSrc.tags.dataSource}}</a>
- </li>
- <li class="divider"></li>
- <li>
- <a href="#/dam/alertList">All Policy List</a>
- </li>
- </ul>
- </div>
- </h3>
- </div>
- <div class="box-body">
- <p ng-show="!alertList.ready">
- <span class="fa fa-refresh fa-spin"> </span>
- Loading...
- </p>
-
- <div sorttable source="alertList" sort="-timestamp">
- <table class="table table-bordered" ng-non-bindable>
- <thead>
- <tr>
- <th width="170" sortpath="timestamp">Alert Time</th>
- <th width="170" sortpath="alertContext.properties.timestamp">Message Time</th>
- <th width="105" sortpath="tags.dataSource">Data Source</th>
- <!--th width="70" sortpath="severity">Type</th-->
- <th width="150" sortpath="tags.policyId">Policy Name</th>
- <th width="60" sortpath="alertContext.properties.user">User</th>
- <th width="150" sortpath="alertContext.properties.host">Host</th>
- <th sortpath="alertContext.properties.emailMessage">Description</th>
- <th width="50"> </th>
- </tr>
- </thead>
- <tbody>
- <tr ng-class="{info : item.__new}">
- <td>{{common.format.date(item.timestamp)}}</td>
- <td>{{common.format.date(item.alertContext.properties.timestamp)}}</td>
- <td>{{item.tags.dataSource}}</td>
- <!--td>{{item.severity}}</td-->
- <td class="text-nowrap">
- <a class="fa fa-share-square-o" ng-show="item.tags.policyId"
- href="#/dam/policyDetail/?policy={{item.tags.policyId}}&site={{item.tags.site}}&executor={{item.tags.alertExecutorId}}"> </a>
- {{item.tags.policyId}}
- </td>
- <td>{{item.alertContext.properties.user}}</td>
- <td>{{item.alertContext.properties.host}}</td>
- <td>{{item.alertContext.properties.alertMessage}}</td>
- <td><a href="#/dam/alertDetail/{{item.encodedRowkey}}">Detail</a></td>
- </tr>
- </tbody>
- </table>
- </div>
-
- </div>
- <!--div class="box-footer clearfix">
- </div-->
-</div>
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/login.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/login.html b/eagle-webservice/src/main/webapp/app/partials/dam/login.html
deleted file mode 100644
index 0e2287c..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/login.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<div class="login-box">
- <div class="login-logo">
- <a href="#/"> Data Activity Monitoring </a>
- </div>
- <!-- /.login-logo -->
- <div class="login-box-body">
- <p class="login-box-msg">Sign in to start your session</p>
- <div class="form-group has-feedback">
- <input type="text" class="form-control" placeholder="User Name" ng-model="username" ng-keypress="login($event)" autocomplete="off" id="username">
- <span class="glyphicon glyphicon-user form-control-feedback"></span>
- </div>
- <div class="form-group has-feedback">
- <input type="password" class="form-control" placeholder="Password" ng-model="password" ng-keypress="login($event)">
- <span class="glyphicon glyphicon-lock form-control-feedback"></span>
- </div>
- <div class="row">
- <div class="col-xs-8">
- <!--div class="checkbox">
- <label> <input type="checkbox" /> Remember Me
- </label>
- </div-->
- </div>
- <!-- /.col -->
- <div class="col-xs-4">
- <button class="btn btn-primary btn-block btn-flat" ng-click="login($event, true)" ng-disabled="lock">Sign In</button>
- </div>
- <!-- /.col -->
- </div>
- </div>
- <!-- /.login-box-body -->
-</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/nvd3.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/nvd3.html b/eagle-webservice/src/main/webapp/app/partials/dam/nvd3.html
deleted file mode 100644
index 1a0196d..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/nvd3.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<style>
- .nvd3-chart-cntr > h3 {
- text-align: center;
- }
-
- .nvd3-chart-cntr > svg {
- height: 300px;
- }
-</style>
-
-<button class="btn btn-primary" ng-click="randomChartData()">Random</button>
-<button class="btn btn-primary" ng-click="chart = 'column'">To Column</button>
-<button class="btn btn-primary" ng-click="chart = 'line'">To Line</button>
-<button class="btn btn-primary" ng-click="chart = 'area'">To Area</button>
-<button class="btn btn-primary" ng-click="chart = 'pie'">To Pie</button>
-<button class="btn btn-warning" ng-click="chartConfig.xType = 'number'">Number</button>
-<button class="btn btn-warning" ng-click="chartConfig.xType = 'time'">Time</button>
-
-<div nvd3="data" data-title="Test" data-chart="{{chart}}" data-watching="true" data-config="chartConfig" class="nvd3-chart-cntr"></div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/policyDetail.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/policyDetail.html b/eagle-webservice/src/main/webapp/app/partials/dam/policyDetail.html
deleted file mode 100644
index 9540ac6..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/policyDetail.html
+++ /dev/null
@@ -1,171 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-<div class="box box-info">
- <div class="box-header with-border">
- <h3 class="box-title">
- {{policy.tags.policyId}}
- <small>{{policy.tags.site}}</small>
- </h3>
- </div><!-- /.box-header -->
-
- <div class="box-body">
- <div class="row">
- <div class="col-xs-8">
- <div class="inline-group">
- <dl><dt>Data Source</dt><dd>{{policy.tags.dataSource}}</dd></dl>
- <dl><dt>Status</dt><dd>
- <span ng-show="policy.enabled" class="text-muted"><i class="fa fa-square text-green"></i> Enabled</span>
- <span ng-show="!policy.enabled" class="text-muted"><i class="fa fa-square text-muted"></i> Disabled</span>
- </dd></dl>
- </div>
- <div class="inline-group">
- <dl><dt>Description</dt><dd>{{policy.desc}}</dd></dl>
- </div>
- <div class="inline-group">
- <dl><dt>Alert</dt><dd>
- <a href="mailto:{{mail}}" ng-repeat="mail in policy.__mailList track by $index" style="margin-right: 10px;">{{mail}}</a>
- </dd></dl>
- </div>
- </div>
- <div class="col-xs-4 text-right" ng-show="auth.isRole('ROLE_ADMIN')">
- <a class="btn btn-primary" href="#/dam/policyEdit/{{policy.encodedRowkey}}">Edit</a>
- <button class="btn btn-warning" ng-show="!policy.enabled" ng-click="updatePolicyStatus(policy, true)">Enable</button>
- <button class="btn btn-warning" ng-show="policy.enabled" ng-click="updatePolicyStatus(policy, false)">Disable</button>
- <button class="btn btn-danger" ng-click="deletePolicy(policy)">Delete</button>
- </div>
- </div>
- </div><!-- /.box-body -->
-
- <div class="overlay" ng-hide="policyList._promise.$$state.status === 1;">
- <i class="fa fa-refresh fa-spin"></i>
- </div>
-
- <div class="box-footer clearfix">
- <a data-toggle="collapse" href="[data-id='query']">
- View Query
- </a>
- <div data-id="query" class="collapse in">
- <pre>{{policy.__expression}}</pre>
- </div>
- </div>
-</div>
-
-<div class="nav-tabs-custom">
- <ul class="nav nav-tabs">
- <li class="active">
- <a href="[data-id='visualization']" data-toggle="tab">Visualization</a>
- </li>
- <li>
- <a href="[data-id='statistics']" data-toggle="tab">Statistics</a>
- </li>
- <li>
- <a href="[data-id='alerts']" data-toggle="tab">Alerts</a>
- </li>
- </ul>
- <div class="tab-content">
- <div class="tab-pane active" data-id="visualization">
- <div class="row">
- <div class="col-xs-6">
- <div nvd3="policyEvalSeries" data-title="Policy Eval Count" data-config="chartConfig" class="nvd3-chart-cntr"></div>
- </div>
- <div class="col-xs-6">
- <div nvd3="policyEvalFailSeries" data-title="Policy Eval Fail Count" data-config="chartConfig" class="nvd3-chart-cntr"></div>
- </div>
- <div class="col-xs-6">
- <div nvd3="alertSeries" data-title="Alert Count" data-config="chartConfig" class="nvd3-chart-cntr"></div>
- </div>
- <div class="col-xs-6">
- <div nvd3="alertFailSeries" data-title="Alert Fail Count" data-config="chartConfig" class="nvd3-chart-cntr"></div>
- </div>
- </div>
- </div><!-- /.tab-pane -->
-
- <div class="tab-pane" data-id="statistics">
- <div class="row">
- <div class="col-xs-3">
- <div class="info-box bg-aqua">
- <span class="info-box-icon"><i class="fa fa-bookmark-o"></i></span>
- <div class="info-box-content">
- <span class="info-box-text">Policy Eval Count</span>
- <span class="info-box-number">{{common.array.sum(policyEvalSeries, "1")}} <small>(Monthly)</small></span>
- <span class="info-box-number">{{policyEvalSeries[policyEvalSeries.length - 1][1]}} <small>(Daily)</small></span>
- </div><!-- /.info-box-content -->
- </div>
- </div>
- <div class="col-xs-3">
- <div class="info-box bg-red">
- <span class="info-box-icon"><i class="fa fa-bookmark-o"></i></span>
- <div class="info-box-content">
- <span class="info-box-text">Policy Eval Fail Count</span>
- <span class="info-box-number">{{common.array.sum(policyEvalFailSeries, "1")}} <small>(Monthly)</small></span>
- <span class="info-box-number">{{policyEvalFailSeries[policyEvalFailSeries.length - 1][1]}} <small>(Daily)</small></span>
- </div><!-- /.info-box-content -->
- </div>
- </div>
- <div class="col-xs-3">
- <div class="info-box bg-aqua">
- <span class="info-box-icon"><i class="fa fa-bookmark-o"></i></span>
- <div class="info-box-content">
- <span class="info-box-text">Alert Count</span>
- <span class="info-box-number">{{common.array.sum(alertSeries, "1")}} <small>(Monthly)</small></span>
- <span class="info-box-number">{{alertSeries[alertSeries.length - 1][1]}} <small>(Daily)</small></span>
- </div><!-- /.info-box-content -->
- </div>
- </div>
- <div class="col-xs-3">
- <div class="info-box bg-red">
- <span class="info-box-icon"><i class="fa fa-bookmark-o"></i></span>
- <div class="info-box-content">
- <span class="info-box-text">Alert Fail Count</span>
- <span class="info-box-number">{{common.array.sum(alertFailSeries, "1")}} <small>(Monthly)</small></span>
- <span class="info-box-number">{{alertFailSeries[alertFailSeries.length - 1][1]}} <small>(Daily)</small></span>
- </div><!-- /.info-box-content -->
- </div>
- </div>
- </div>
- </div><!-- /.tab-pane -->
-
- <div class="tab-pane" data-id="alerts">
- <div sorttable source="alertList" sort="-timestamp">
- <table class="table table-bordered" ng-non-bindable>
- <thead>
- <tr>
- <th width="170" sortpath="timestamp">Alert Time</th>
- <th width="170" sortpath="alertContext.properties.timestamp">Message Time</th>
- <th width="60" sortpath="alertContext.properties.user">User</th>
- <th width="150" sortpath="alertContext.properties.host">Host</th>
- <th sortpath="alertContext.properties.emailMessage">Description</th>
- <th width="50"> </th>
- </tr>
- </thead>
- <tbody>
- <tr ng-class="{info : item.__new}">
- <td>{{common.format.date(item.timestamp)}}</td>
- <td>{{common.format.date(item.alertContext.properties.timestamp)}}</td>
- <td>{{item.alertContext.properties.user}}</td>
- <td>{{item.alertContext.properties.host}}</td>
- <td>{{item.alertContext.properties.alertMessage}}</td>
- <td><a href="#/dam/alertDetail/{{item.encodedRowkey}}">Detail</a></td>
- </tr>
- </tbody>
- </table>
- </div>
- </div><!-- /.tab-pane -->
-
- </div><!-- /.tab-content -->
-</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/policyEdit.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/policyEdit.html b/eagle-webservice/src/main/webapp/app/partials/dam/policyEdit.html
deleted file mode 100644
index 038a590..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/policyEdit.html
+++ /dev/null
@@ -1,359 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-<div class="progress active" ng-show="!streamReady">
- <div class="progress-bar progress-bar-primary progress-bar-striped" style="width: 100%">
- </div>
-</div>
-
-<!-- Step navigation -->
-<div ng-show="streamReady">
- <div class="row step-cntr">
- <div class="col-md-3" ng-repeat="step in steps">
- <div class="step" ng-class="stepSelect($index + 1)">
- <h1>{{$index + 1}}</h1>
- <h2>Step {{$index + 1}}</h2>
- <p title="{{step.title}}">{{step.title}}</p>
- </div>
- </div>
- </div>
-
- <!-- Step container -->
- <div class="box box-info">
- <div class="box-header with-border">
- <h3 class="box-title">Step {{step}} - {{steps[step - 1].title}}</h3>
- </div><!-- /.box-header -->
-
- <div class="box-body">
- <!-- ---------------------- Step Body Start ---------------------- -->
-
- <!-- Step 1: Data Source -->
- <div ng-show="step === 1">
- <div class="form-group">
- <label>Select Data Source</label>
- <select class="form-control" ng-model="policy.tags.dataSource">
- <option ng-repeat="dataSource in site.current().dataSrcList" ng-hide="dataSource.hide" value="{{dataSource.tags.dataSource}}">{{dataSource.desc || dataSource.tags.dataSource}}</option>
- </select>
- </div>
- </div>
-
- <!-- Step 2: Stream -->
- <div ng-show="step === 2">
- <div class="pull-right" ng-show="policy.__.advanced === undefined">
- <span class="text-muted">or</span>
- <a ng-click="policy.__.advanced = true;">Advanced</a>
- </div>
-
- <div class="form-group">
- <label>Select Stream</label>
- <select class="form-control" ng-model="policy.__.streamName" ng-show="!policy.__.advanced">
- <option ng-repeat="stream in dataSources[policy.tags.dataSource]">{{stream.tags.streamName}}</option>
- </select>
- <select class="form-control" ng-show="policy.__.advanced" disabled="disabled">
- <option>[Advanced Mode]</option>
- </select>
- </div>
-
- <div class="checkbox" ng-show="policy.__.advanced !== undefined">
- <label>
- <input type="checkbox" ng-model="policy.__.advanced">
- Advanced Mode
- </label>
- </div>
- </div>
-
- <!-- Step 3: Define Alert Policy -->
- <div ng-show="step === 3 && !policy.__.advanced">
- <!-- Criteria -->
- <div>
- <label>Match Criteria</label>
- <a ng-click="collapse('.panel-group')">expand / collapse all</a>
-
- <div class="panel-group panel-group-sm" role="tablist">
- <div class="panel panel-default"
- ng-repeat="meta in _stream.metas"
- ng-init="op = '=='; val = null; type = (meta.attrType || '').toLowerCase();">
- <div class="panel-heading" role="tab">
- <h4 class="panel-title">
- <span class="bg-navy disabled color-palette pull-right">
- {{parseConditionDesc(meta.tags.attrName)}}
- </span>
-
- <a role="button" data-toggle="collapse" href="[data-name='{{meta.tags.attrName}}']" class="collapsed">
- <span class="fa fa-square" ng-class="hasCondition(meta.tags.attrName, type) ? 'text-green' : 'text-muted'"> </span>
- {{meta.attrDisplayName || meta.tags.attrName}}
- <span class="fa fa-question-circle" ng-show="meta.attrDescription"
- uib-tooltip="{{meta.attrDescription}}" tooltip-placement="right" tooltip-animation="false"> </span>
- </a>
- </h4>
- </div>
- <div data-name="{{meta.tags.attrName}}" data-type="{{meta.attrType}}" role="tabpanel" class="collapse">
- <div class="panel-body">
- <ul ng-show="type !== 'bool'">
- <li ng-repeat="cond in policy.__.conditions[meta.tags.attrName]">
- [<a ng-click="policy.__.conditions[meta.tags.attrName].splice($index, 1)">X</a>]
- {{cond.toString()}}
- </li>
- </ul>
-
- <!-- String -->
- <div ng-if="type == 'string'">
- <div class="input-group" style="max-width: 450px;">
- <div class="input-group-btn">
- <select class="form-control" ng-model="op">
- <option ng-repeat="mark in ['==','!=','contains','regex']">{{mark}}</option>
- </select>
- </div>
-
- <!-- With resolver -->
- <input type="text" class="form-control" autocomplete="off" ng-model="val" ng-show="meta.attrValueResolver"
- ng-keypress="conditionPress($event, meta.tags.attrName, op, val, type)"
- uib-typeahead="item for item in resolverTypeahead($viewValue, meta.attrValueResolver)">
- <!-- Without resolver -->
- <input type="text" class="form-control" autocomplete="off" ng-model="val" ng-show="!meta.attrValueResolver"
- ng-keypress="conditionPress($event, meta.tags.attrName, op, val, type)">
-
- <span class="input-group-btn">
- <button class="btn btn-info btn-flat" type="button" ng-click="addCondition(meta.tags.attrName, op, val, type);val=null;">Add</button>
- </span>
- </div>
- </div>
-
- <!-- Number -->
- <div ng-if="type == 'long' || type == 'integer' || type == 'number' || type == 'double' || type == 'float'">
- <div class="input-group" style="max-width: 450px;">
- <div class="input-group-btn">
- <select class="form-control" ng-model="op">
- <option ng-repeat="mark in ['==','!=','>','>=','<','<=']">{{mark}}</option>
- </select>
- </div>
-
- <input type="number" class="form-control" autocomplete="off" placeholder="Number Only..." ng-model="val" ng-keypress="conditionPress($event, meta.tags.attrName, op, val, type)">
- <span class="input-group-btn">
- <button class="btn btn-info btn-flat" type="button" ng-click="addCondition(meta.tags.attrName, op, val, type) ? val=null : void(0);">Add</button>
- </span>
- </div>
- </div>
-
- <!-- Boolean -->
- <div ng-if="type == 'bool'" ng-init="policy.__.conditions[meta.tags.attrName] = policy.__.conditions[meta.tags.attrName] || [_CondUnit(meta.tags.attrName, '==', 'none', 'bool')]">
- <select class="form-control" ng-model="policy.__.conditions[meta.tags.attrName][0].val" style="max-width: 100px;">
- <option ng-repeat="bool in ['none','true','false']">{{bool}}</option>
- </select>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <!-- Window -->
- <div class="checkbox">
- <label>
- <input type="checkbox" ng-checked="policy.__.windowConfig" ng-click="policy.__.windowConfig = !policy.__.windowConfig"> Slide Window
- </label>
- </div>
- <div ng-show="policy.__.windowConfig">
- <div class="row">
- <div class="col-md-4">
- <div class="form-group">
- <label for="window">Window</label>
- <select class="form-control" ng-model="policy.__.window"
- uib-tooltip="{{getWindow().description}}" tooltip-animation="false">
- <option ng-repeat="item in config.window" value="{{item.type}}">{{item.title}}</option>
- </select>
- </div>
- </div>
-
- <!-- fields -->
- <div class="col-md-4" ng-repeat="field in getWindow().fields" ng-init="field.val = field.val || (field.defaultValue || '');" ng-hide="field.hide">
- <div class="form-group" ng-class="{'has-warning' : !field.val || !field.val.match(field.regex)}">
- <label for="window">Window - {{field.title}}</label>
- <input type="text" class="form-control" autocomplete="off" placeholder="{{field.description}}" ng-model="field.val" title="{{field.description}}">
- </div>
- </div>
- </div>
-
- <!-- Aggregation -->
- <div class="row">
- <div class="col-md-4">
- <div class="form-group" ng-class="{'text-yellow' : (policy.__.groupAgg && !policy.__.groupAggPath)}">
- <label for="window">Aggregation</label>
- <div class="input-group">
- <div class="input-group-btn">
- <select class="form-control" ng-model="policy.__.groupAgg" ng-change="updateGroupAgg()">
- <option ng-repeat="op in ['max','min','avg','count', 'sum']">{{op}}</option>
- </select>
- </div>
- <select class="form-control" ng-model="policy.__.groupAggPath" ng-class="{'has-warning' : !policy.__.groupAggPath}" id="groupAggPath"
- ng-show="policy.__.groupAgg" ng-disabled="policy.__.groupAgg === 'count'">
- <option ng-repeat="meta in groupAggPathList()">{{meta.tags.attrName}}</option>
- </select>
- </div>
- </div>
- </div>
-
- <div class="col-md-4">
- <div class="form-group" ng-class="{'text-yellow' : (!policy.__.groupCondOp || !policy.__.groupCondVal)}">
- <label for="window">Condition</label>
- <div class="input-group">
- <div class="input-group-btn">
- <select class="form-control" ng-model="policy.__.groupCondOp" ng-class="{'has-warning' : !policy.__.groupCondOp}">
- <option ng-repeat="op in ['>','<','>=','<=','==']">{{op}}</option>
- </select>
- </div>
- <input type="text" class="form-control" ng-model="policy.__.groupCondVal" ng-class="{'has-warning' : !policy.__.groupCondVal}" />
- </div>
- </div>
- </div>
-
- <div class="col-md-4">
- <div class="form-group">
- <label for="window">Alias (Optional)</label>
- <input type="text" class="form-control" ng-model="policy.__.groupAggAlias" placeholder="Default: aggValue" />
- </div>
- </div>
- </div>
-
- <!-- Group -->
- <div class="row">
- <div class="col-md-4">
- <div class="form-group">
- <label for="window">Group By</label>
- <select class="form-control" ng-model="policy.__.group">
- <option value="">None</option>
- <option ng-repeat="meta in _stream.metas">{{meta.tags.attrName}}</option>
- </select>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <!-- Step 3: Define Alert Policy -->
- <div ng-show="step === 3 && policy.__.advanced">
- <div class="form-group">
- <label>Query Expression</label>
- <textarea class="form-control" ng-model="policy.__._expression"
- placeholder="Query expression. e.g. from hdfsAuditLogEventStream[(cmd=='open') and (host=='localhost' or host=='127.0.0.1')]#window.time(2 sec) select * insert into outputStream;" rows="5"></textarea>
- </div>
- </div>
-
- <!-- Step 4: Email Notification -->
- <div ng-show="step === 4">
- <div class="row">
- <div class="col-xs-4">
- <div class="form-group" ng-class="{'has-warning' : !policy.tags.policyId}">
- <label>Policy Name</label>
- <input type="text" class="form-control" placeholder="" ng-model="policy.tags.policyId" ng-disabled="!create">
- </div>
- </div>
- <div class="col-xs-3">
- <div class="form-group">
- <label>
- Alert De-Dup Interval(min)
- <span class="fa fa-question-circle" uib-tooltip="Same type alert will be De-dup in configured interval"> </span>
- </label>
- <input type="number" class="form-control" ng-model="policy.__.dedupe.alertDedupIntervalMin" placeholder="[Minute] Number only. Suggestion: 720">
- </div>
- </div>
- <div class="col-xs-3">
- <div class="form-group">
- <label>
- Email De-Dup Interval(min)
- <span class="fa fa-question-circle" uib-tooltip="The minimun time interval of email"> </span>
- </label>
- <input type="number" class="form-control" ng-model="policy.__.dedupe.emailDedupIntervalMin" placeholder="[Minute] Number only. Suggestion: 1440">
- </div>
- </div>
- <div class="col-xs-2">
- <div class="form-group">
- <label>
- Enabled
- </label>
- <p>
- <input type="checkbox" checked="checked" ng-model="policy.enabled">
- </p>
- </div>
- </div>
- </div>
-
- <div>
- <a data-toggle="collapse" href="[data-id='advancedDeDup']">Advanced De-Dup</a>
- <div data-id='advancedDeDup' class="collapse">
- <label>
- De-Dup Key
- <span class="fa fa-question-circle" uib-tooltip="Type of grouping alerts. If you don't know how to config, leave it default."> </span>
- </label>
- <div class="form-group">
- <div class="checkbox" ng-repeat="meta in _stream.metas" ng-init="create ? policy.__._dedupTags[meta.tags.attrName] = !!meta.usedAsTag : void(0);">
- <label>
- <input type="checkbox" ng-model="policy.__._dedupTags[meta.tags.attrName]">
- {{meta.tags.attrName}}
- </label>
- </div>
- </div>
- </div>
- </div>
-
- <hr/>
-
- <div class="form-group">
- <label>Sender</label>
- <input type="text" class="form-control" value="noreply-hadoop-eagle@company1.com" placeholder="Enter Sender. e.g. sender@eaxmple.com" ng-model="policy.__.notification[0].sender">
- </div>
- <div class="form-group">
- <label>Recipients</label>
- <input type="text" class="form-control" placeholder="Enter Recipients. Split with ','. e.g. usera@example.com, userb@example.com" ng-model="policy.__.notification[0].recipients">
- </div>
- <div class="form-group">
- <label>Subject</label>
- <input type="text" class="form-control" placeholder="Enter Subject" ng-model="policy.__.notification[0].subject">
- </div>
- <div class="form-group">
- <label>Description</label>
- <textarea class="form-control" placeholder="Policy description" ng-model="policy.desc"></textarea>
- </div>
-
- <a data-toggle="collapse" href="[data-id='policyQuery']">
- View Query
- </a>
- <div class="collapse in" data-id="policyQuery">
- <pre>{{toQuery()}}</pre>
- </div>
- </div>
-
- <!-- ----------------------- Step Body End ----------------------- -->
- </div><!-- /.box-body -->
-
- <div class="overlay" ng-hide="stepReady(step)">
- <span class="fa fa-refresh fa-spin"> </span>
- </div>
-
- <div class="box-footer text-right">
- <button class="btn btn-info" ng-show="step > 1" ng-click="changeStep(step, step - 1, false)" ng-disabled="lock">
- Prev <span class="fa fa-arrow-circle-o-left"> </span>
- </button>
- <button class="btn btn-info" ng-show="step < steps.length" ng-click="changeStep(step, step + 1)" ng-disabled="checkNextable(step) || lock">
- Next <span class="fa fa-arrow-circle-o-right"> </span>
- </button>
- <button class="btn btn-info" ng-show="step === steps.length" ng-click="finishPolicy()" ng-disabled="checkNextable(step) || lock">
- Done <span class="fa fa-check-circle-o"> </span>
- </button>
- </div>
- </div>
-</div>
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/policyList.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/policyList.html b/eagle-webservice/src/main/webapp/app/partials/dam/policyList.html
deleted file mode 100644
index 376a513..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/policyList.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-<div class="box box-primary">
- <div class="box-header with-border">
- <i class="fa fa-list-alt"> </i>
- <h3 class="box-title">
- {{dataSource.desc || dataSource.tags.dataSource || "All Policies"}}
- <div class="btn-group">
- <button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
- <i class="fa fa-caret-down"></i>
- </button>
- <ul id="programList" class="dropdown-menu" role="menu">
- <li ng-repeat="dataSrc in site.current().dataSrcList" ng-hide="dataSrc.hide">
- <a href="#/dam/policyList/{{dataSrc.tags.dataSource}}">{{dataSrc.desc || dataSrc.tags.dataSource}}</a>
- </li>
- <li class="divider"></li>
- <li>
- <a href="#/dam/policyList">All Policy List</a>
- </li>
- </ul>
- </div>
- </h3>
- </div>
- <div class="box-body">
- <div class="row">
- <div class="col-xs-3">
- <div class="search-box">
- <input type="search" class="form-control input-sm" placeholder="Search" ng-model="search" />
- <span class="fa fa-search"> </span>
- </div>
- </div>
- <div class="col-xs-6">
- <div class="inline-group form-inline text-muted">
- <dl><dt><i class="fa fa-square text-green"> </i></dt><dd>Enabled</dd></dl>
- <dl><dt><i class="fa fa-square text-muted"> </i></dt><dd>Disabled</dd></dl>
- </div>
- </div>
- <div class="col-xs-3 text-right">
- <a class="btn btn-primary" href="#/dam/policyCreate/{{!dataSource ? '' : '?dataSrc=' + dataSource.tags.dataSource}}" ng-show="auth.isRole('ROLE_ADMIN')">
- New Policy
- <i class="fa fa-plus-circle"> </i>
- </a>
- </div>
- </div>
-
- <p ng-show="policyList._promise.$$state.status !== 1">
- <span class="fa fa-refresh fa-spin"> </span>
- Loading...
- </p>
-
- <div sorttable source="policyList" ng-show="policyList._promise.$$state.status === 1" search="false" searchfunc="searchFunc">
- <table class="table table-bordered" ng-non-bindable>
- <thead>
- <tr>
- <th width="30" sortpath="enabled"> </th>
- <th width="200" sortpath="tags.policyId">Policy Name</th>
- <th sortpath="desc">Description</th>
- <th width="150" sortpath="owner">Owner</th>
- <th width="170" sortpath="lastModifiedDate">Last Modified</th>
- <th width="95" ng-show="_parent.auth.isRole('ROLE_ADMIN')">Action</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><span class='fa fa-square' ng-class="item.enabled ? 'text-green' : 'text-muted'"> </span></td>
- <td><a href="#/dam/policyDetail/{{item.encodedRowkey}}">{{item.tags.policyId}}</a></td>
- <td>{{item.desc}}</td>
- <td>{{item.owner}}</td>
- <td>{{common.format.date(item.lastModifiedDate) || "-"}}</td>
- <td ng-show="_parent.auth.isRole('ROLE_ADMIN')">
- <a class="fa fa-pencil btn btn-default btn-xs" uib-tooltip="Edit" tooltip-animation="false" href="#/dam/policyEdit/{{item.encodedRowkey}}"> </a>
- <button class="fa fa-play sm btn btn-default btn-xs" uib-tooltip="Enable" tooltip-animation="false" ng-show="!item.enabled" ng-click="_parent.updatePolicyStatus(item, true)"> </button>
- <button class="fa fa-pause sm btn btn-default btn-xs" uib-tooltip="Disable" tooltip-animation="false" ng-show="item.enabled" ng-click="_parent.updatePolicyStatus(item, false)"> </button>
- <button class="rm fa fa-trash-o btn btn-danger btn-xs" uib-tooltip="Delete" tooltip-animation="false" ng-click="_parent.deletePolicy(item)"> </button>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- <!--div class="box-footer clearfix">
- </div-->
-</div>
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity.html b/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity.html
deleted file mode 100644
index b00bbaf..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-<div class="nav-tabs-custom">
- <!-- Tabs within a box -->
- <ul class="nav nav-tabs pull-right ui-sortable-handle">
- <li ng-repeat="entity in config.list" ng-class="{active: dataSrc.name === entity.name}">
- <a ng-click="site.url('/dam/sensitivity/' + entity.name)">{{entity.name}}</a>
- </li>
- <li class="pull-left header"><i class="fa fa-folder-open"></i> Sensitivity Broswer</li>
- </ul>
- <div class="tab-content">
- <!-- Morris chart - Sales -->
- <div class="tab-pane active">
- <ng-include src="'partials/dam/sensitivity/' + dataSrc.type + '.html?_=' + ajaxId"></ng-include>
- </div>
- </div>
-</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/folder.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/folder.html b/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/folder.html
deleted file mode 100644
index 1827eac..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/folder.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-<div ng-controller="sensitivityViewFolderCtrl">
- <ul class="list-inline path">
- <li>Path:</li>
- <li ng-repeat="unit in pathUnitList">
- <a ng-click="updateItems(unit.path)" class="label bg-black">{{unit.name}}</a>
- </li>
- </ul>
-
- <table class="table table-bordered">
- <thead>
- <tr>
- <th width="15%">File Name</th>
- <th width="10%">Owner</th>
- <th width="10%">Group</th>
- <th>Sensitivity Type</th>
- <th width="10" ng-show="auth.isRole('ROLE_ADMIN')"> </th>
- </tr>
- </thead>
- <tbody>
- <tr ng-show="items._promise.$$state.status !== 1">
- <td colspan="5">
- <span class="fa fa-refresh fa-spin"> </span>
- Loading...
- </td>
- </tr>
- <tr ng-show="items._promise.$$state.status === 1 && !items.length">
- <td colspan="5">
- <span class="fa fa-exclamation-triangle"> </span>
- Empty Folder
- </td>
- </tr>
- <tr ng-repeat="item in items" ng-class="{warning : item.sensitiveType}">
- <td>
- <span ng-show="!item.isdir">
- <span class="fa fa-file"> </span>
- {{getFileName(item)}}
- </span>
- <a ng-show="item.isdir" ng-click="updateItems(item.resource)">
- <span class="fa fa-folder"> </span>
- {{getFileName(item)}}
- </a>
-
- <span class="pull-right" ng-show="item.childSensitiveTypes.length">
- <span class="fa fa-dot-circle-o text-muted" uib-tooltip="Contain child sensitivity defination"> </span>
- </span>
- </td>
- <td>{{item.owner}}</td>
- <td>{{item.group}}</td>
- <td>{{item.sensitiveType}}</td>
- <td ng-show="auth.isRole('ROLE_ADMIN')">
- <button class="fa fa-eye btn btn-primary btn-xs" ng-click="markSensitivity(item)" ng-show="!item.sensitiveType"
- uib-tooltip="Mark as sensitivity data" tooltip-animation="false" tooltip-placement="left"> </button>
- <button class="fa fa-eye-slash btn btn-warning btn-xs" ng-click="unmarkSensitivity(item)" ng-show="item.sensitiveType"
- uib-tooltip="Remove the sensitivity mark" tooltip-animation="false" tooltip-placement="left"> </button>
- </td>
- </tr>
- </tbody>
- </table>
-
-
- <!-- Modal: Create / Edit site -->
- <div class="modal fade" id="sensitivityMDL" tabindex="-1" role="dialog">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
- <span aria-hidden="true">×</span>
- </button>
- <h4 class="modal-title">Mark Sensitivity Data</h4>
- </div>
- <div class="modal-body">
- <div class="form-group">
- <label>Resource</label>
- <input type="text" readonly="readonly" class="form-control" ng-model="_markItem.tags.filedir" />
- </div>
- <div class="form-group">
- <label>* Sensitivity Type</label>
- <input type="text" class="form-control" ng-model="_markItem.sensitivityType" id="sensitiveType" />
- </div>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">
- Close
- </button>
- <button type="button" class="btn btn-primary" ng-click="confirmUpateSensitivity()" ng-disabled="!_markItem.sensitivityType">
- Update
- </button>
- </div>
- </div>
- </div>
- </div>
-
-</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/table.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/table.html b/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/table.html
deleted file mode 100644
index baa824c..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/table.html
+++ /dev/null
@@ -1,150 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-<div ng-controller="sensitivityViewTableCtrl">
- <p ng-show="databases._promise.$$state.status !== 1">
- <span class="fa fa-refresh fa-spin"> </span>
- Loading...
- </p>
-
- <div ng-show="databases._promise.$$state.status === 1" class="row">
- <div class="col-md-4">
- <label>
- Databases
- ({{databases.length}})
- </label>
- <ul class="tree tree-bordered" style="max-height: 500px; overflow-y: auto;">
- <li ng-repeat="db in databases">
- <span class="tree-item box-clickable text-primary" ng-click="db.show = !db.show; loadTables(db);">
- <span ng-class="{'text-warning' : db.sensitiveType}">
- <span class="fa fa-database"> </span>
- {{db.database}}
- <span ng-show="db.tables._promise.$$state.status === 1">({{db.tables.length}})</span>
-
- <span ng-show="auth.isRole('ROLE_ADMIN')">
- <a class="fa fa-eye text-muted hover" ng-click="markSensitivity(db, $event)" ng-show="!db.sensitiveType"
- uib-tooltip="Mark as sensitivity data" tooltip-animation="false" tooltip-placement="right"></a>
- <a class="fa fa-eye-slash text-muted hover" ng-click="unmarkSensitivity(db, $event)" ng-show="db.sensitiveType"
- uib-tooltip="Remove the sensitivity mark" tooltip-animation="false" tooltip-placement="right"></a>
- </span>
-
- <span class="pull-right" ng-show="db.childSensitiveTypes.length">
- <span class="fa fa-dot-circle-o" uib-tooltip="Contain child sensitivity defination" tooltip-placement="right" tooltip-append-to-body="true"> </span>
- </span>
- <span ng-show="db.sensitiveType" class="pull-right">[{{db.sensitiveType}}]</span>
- </span>
- </span>
- <ul ng-show="db.show">
- <li ng-show="db.tables._promise.$$state.status !== 1">
- <span>
- <span class="fa fa-refresh fa-spin"> </span>
- Loading...
- </span>
- </li>
- <li ng-repeat="tb in db.tables" ng-class="{active : tb === table}">
- <span class="tree-item box-clickable text-primary" ng-click="loadColumns(db, tb)">
- <span ng-class="{'text-warning' : tb.sensitiveType}">
- <span class="fa fa-table"> </span>
- {{tb.table}}
-
- <span ng-show="auth.isRole('ROLE_ADMIN')">
- <a class="fa fa-eye text-muted hover" ng-click="markSensitivity(tb, $event)" ng-show="!tb.sensitiveType"
- uib-tooltip="Mark as sensitivity data" tooltip-animation="false" tooltip-placement="right"></a>
- <a class="fa fa-eye-slash text-muted hover" ng-click="unmarkSensitivity(tb, $event)" ng-show="tb.sensitiveType"
- uib-tooltip="Remove the sensitivity mark" tooltip-animation="false" tooltip-placement="right"></a>
- </span>
-
- <span class="pull-right" ng-show="tb.childSensitiveTypes.length">
- <span class="fa fa-dot-circle-o" uib-tooltip="Contain child sensitivity defination" tooltip-placement="right" tooltip-append-to-body="true"> </span>
- </span>
- <span ng-show="tb.sensitiveType" class="pull-right">[{{tb.sensitiveType}}]</span>
- </span>
- </span>
- </li>
- </ul>
- </li>
- </ul>
- </div>
- <div class="col-md-8">
- <label ng-show="table">Route: {{table.database}} > {{table.table}}</label>
- <p ng-show="table && table.columns._promise.$$state.status !== 1">
- <span class="fa fa-refresh fa-spin"> </span>
- Loading...
- </p>
- <div ng-show="table && table.columns._promise.$$state.status === 1">
- <table class="table table-bordered">
- <thead>
- <tr>
- <th width="40%">Column Name</th>
- <th>Sensitivity Type</th>
- <th width="10" ng-show="auth.isRole('ROLE_ADMIN')"> </th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat="col in table.columns" ng-class="{warning : col.sensitiveType}">
- <td>{{col.column}}</td>
- <td>{{col.sensitiveType}}</td>
- <td ng-show="auth.isRole('ROLE_ADMIN')">
- <button class="fa fa-eye btn btn-primary btn-xs" ng-click="markSensitivity(col)" ng-show="!col.sensitiveType"
- uib-tooltip="Mark as sensitivity data" tooltip-animation="false" tooltip-placement="left"> </button>
- <button class="fa fa-eye-slash btn btn-warning btn-xs" ng-click="unmarkSensitivity(col)" ng-show="col.sensitiveType"
- uib-tooltip="Remove the sensitivity mark" tooltip-animation="false" tooltip-placement="left"> </button>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </div>
-
-
-
-
-
-
- <!-- Modal: Create / Edit site -->
- <div class="modal fade" id="sensitivityMDL" tabindex="-1" role="dialog">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
- <span aria-hidden="true">×</span>
- </button>
- <h4 class="modal-title">Mark Sensitivity Data</h4>
- </div>
- <div class="modal-body">
- <div class="form-group">
- <label>Resource</label>
- <input type="text" readonly="readonly" class="form-control" ng-model="_markItem.tags[dataSrc.keys[0]]" />
- </div>
- <div class="form-group">
- <label>* Sensitivity Type</label>
- <input type="text" class="form-control" ng-model="_markItem.sensitivityType" id="sensitiveType" />
- </div>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">
- Close
- </button>
- <button type="button" class="btn btn-primary" ng-click="confirmUpateSensitivity()" ng-disabled="!_markItem.sensitivityType">
- Update
- </button>
- </div>
- </div>
- </div>
- </div>
-</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/sensitivitySummary.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivitySummary.html b/eagle-webservice/src/main/webapp/app/partials/dam/sensitivitySummary.html
deleted file mode 100644
index 3dfe103..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivitySummary.html
+++ /dev/null
@@ -1,143 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-<div class="row">
- <div class="col-md-4" ng-repeat="entity in config.list">
- <div class="info-box bg-aqua box-clickable">
- <span class="info-box-icon" ng-click="site.url('/dam/sensitivity/' + entity.name)"><i class="fa fa-suitcase"></i></span>
- <div class="info-box-content">
- <div class="pull-right btn-group" ng-show="auth.isRole('ROLE_ADMIN')">
- <a class="fa fa-cog config" data-toggle="dropdown"></a>
- <ul class="dropdown-menu" role="menu">
- <li>
- <a ng-click="showImportEditor(entity);"><span class="fa fa-cloud-upload"></span>Import</a>
- </li>
- <li class="divider"></li>
- <li>
- <a ng-click="showManagementEditor(entity);"><span class="fa fa-list"></span>Management</a>
- </li>
- </ul>
- </div>
-
- <div ng-click="site.url('/dam/sensitivity/' + entity.name)">
- <span class="info-box-text text-large">{{entity.name}}</span>
- <!--span class="info-box-number">
- <small>Connected</small>
- </span-->
- <div class="progress">
- <div class="progress-bar"></div>
- </div>
- <span class="progress-description">
- <span class="fa fa-refresh fa-spin" ng-hide="entity.statisitc._promise.$$state.status === 1"></span>
- <span ng-show="entity.statisitc._promise.$$state.status === 1">{{entity.statisitc[0].value[0] || 0}}</span>
- sensitivity items
- </span>
- </div>
- </div><!-- /.info-box-content -->
- </div>
- </div>
-</div>
-
-<!-- Modal: Create sensitivity -->
-<div class="modal fade" id="sensitivityMDL" tabindex="-1" role="dialog">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-label="Close" ng-disabled="_sensitivityLock">
- <span aria-hidden="true">×</span>
- </button>
- <h4 class="modal-title">Import Sensitivity Data</h4>
- </div>
- <div class="modal-body">
- <div tabs data-inner="true" selected="_sensitivityImportType">
- <div pane data-title="By Text">
- <div class="form-group">
- <label>* Sensitivity Data</label>
- <textarea class="form-control" placeholder="Json format here..." rows="10" id="sensitivityData" ng-model="_parent._sensitivityData" ng-disabled="_parent._sensitivityLock"></textarea>
- </div>
- </div>
- <div pane data-title="By File">
- <input type="file" file filepath="_parent._sensitivityFile" id="sensitivityFile" ng-disabled="_parent._sensitivityLock" />
- </div>
- </div>
-
- </div>
- <div class="modal-footer">
- <p class="text-danger pull-left">{{_sensitivityError}}</p>
-
- <button type="button" class="btn btn-default" data-dismiss="modal" ng-disabled="_sensitivityLock">
- Close
- </button>
- <button type="button" class="btn btn-primary" ng-click="confirmImport()"
- ng-disabled="!importCheck()">
- Import
- </button>
- </div>
- </div>
- </div>
-</div>
-
-<!-- Modal: Manage sensitivity -->
-<div class="modal fade" id="sensitivityListMDL" tabindex="-1" role="dialog">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-label="Close" ng-disabled="_sensitivityLock">
- <span aria-hidden="true">×</span>
- </button>
- <h4 class="modal-title">Sensitivity List</h4>
- </div>
- <div class="modal-body">
- <p ng-show="_sensitivitySource.list._promise.$$state.status !== 1">
- <span class="fa fa-refresh fa-spin"> </span>
- Loading...
- </p>
-
- <div sorttable source="_sensitivitySource.list" ng-show="_sensitivitySource.list._promise.$$state.status === 1">
- <table class="table table-bordered" ng-non-bindable>
- <thead>
- <tr>
- <!--th width="10"></th-->
- <th ng-repeat="key in _parent._sensitivitySource.keys">{{key}}</th>
- <th width="10"> </th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <!--td>
- <input type="checkbox" ng-checked="item.selected" ng-click="item.selected = !item.selected">
- </td-->
- <td ng-repeat="key in _parent._sensitivitySource.keys">{{item.tags[key] || item[key]}}</td>
- <td>
- <a ng-click="_parent.deleteItem(item)">Delete</a>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-danger pull-left" ng-click="deleteAll(_sensitivitySource)">
- Delete All
- </button>
- <button type="button" class="btn btn-default" data-dismiss="modal">
- Close
- </button>
- </div>
- </div>
- </div>
-</div>
\ No newline at end of file