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

[65/84] eagle git commit: Merge site source code from https://github.com/geteagle/eaglemonitoring.github.io

http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/_site/js/jquery.singlePageNav.js
----------------------------------------------------------------------
diff --git a/eagle-site/_site/js/jquery.singlePageNav.js b/eagle-site/_site/js/jquery.singlePageNav.js
new file mode 100755
index 0000000..f779ad0
--- /dev/null
+++ b/eagle-site/_site/js/jquery.singlePageNav.js
@@ -0,0 +1,183 @@
+/**
+ * Single Page Nav Plugin
+ * Copyright (c) 2013 Chris Wojcik <he...@chriswojcik.net>
+ * Dual licensed under MIT and GPL.
+ * @author Chris Wojcik
+ * @version 1.1.0
+ */
+
+// Utility
+if (typeof Object.create !== 'function') {
+    Object.create = function(obj) {
+        function F() {}
+        F.prototype = obj;
+        return new F();
+    };
+}
+
+(function($, window, document, undefined) {
+    "use strict";
+    
+    var SinglePageNav = {
+        
+        init: function(options, container) {
+            
+            this.options = $.extend({}, $.fn.singlePageNav.defaults, options);
+            
+            this.container = container;            
+            this.$container = $(container);
+            this.$links = this.$container.find('a');
+
+            if (this.options.filter !== '') {
+                this.$links = this.$links.filter(this.options.filter);
+            }
+
+            this.$window = $(window);
+            this.$htmlbody = $('html, body');
+            
+            this.$links.on('click.singlePageNav', $.proxy(this.handleClick, this));
+
+            this.didScroll = false;
+            this.checkPosition();
+            this.setTimer();
+        },
+
+        handleClick: function(e) {
+            var self  = this,
+                link  = e.currentTarget,
+                $elem = $(link.hash);  
+
+            e.preventDefault();             
+
+            if ($elem.length) { // Make sure the target elem exists
+
+                
+                // Prevent active link from cycling during the scroll
+                self.clearTimer();
+
+                // Before scrolling starts
+                if (typeof self.options.beforeStart === 'function') {
+                    self.options.beforeStart();
+                }
+
+                self.setActiveLink(link.hash);
+                
+                self.scrollTo($elem, function() { 
+                 
+                    if (self.options.updateHash) {
+                        document.location.hash = link.hash;
+                    }
+
+                    self.setTimer();
+
+                    // After scrolling ends
+                    if (typeof self.options.onComplete === 'function') {
+                        self.options.onComplete();
+                    }
+                });                            
+            }     
+        },
+        
+        scrollTo: function($elem, callback) {
+            var self = this;
+            var target = self.getCoords($elem).top;
+            var called = false;
+
+            self.$htmlbody.stop().animate(
+                {scrollTop: target}, 
+                { 
+                    duration: self.options.speed,
+                    easing: self.options.easing, 
+                    complete: function() {
+                        if (typeof callback === 'function' && !called) {
+                            callback();
+                        }
+                        called = true;
+                    }
+                }
+            );
+        },
+        
+        setTimer: function() {
+            var self = this;
+            
+            self.$window.on('scroll.singlePageNav', function() {
+                self.didScroll = true;
+            });
+            
+            self.timer = setInterval(function() {
+                if (self.didScroll) {
+                    self.didScroll = false;
+                    self.checkPosition();
+                }
+            }, 250);
+        },        
+        
+        clearTimer: function() {
+            clearInterval(this.timer);
+            this.$window.off('scroll.singlePageNav');
+            this.didScroll = false;
+        },
+        
+        // Check the scroll position and set the active section
+        checkPosition: function() {
+            var scrollPos = this.$window.scrollTop();
+            var currentSection = this.getCurrentSection(scrollPos);
+            this.setActiveLink(currentSection);
+        },        
+        
+        getCoords: function($elem) {
+            return {
+                top: Math.round($elem.offset().top) - this.options.offset
+            };
+        },
+        
+        setActiveLink: function(href) {
+            var $activeLink = this.$container.find("a[href='" + href + "']");
+                            
+            if (!$activeLink.hasClass(this.options.currentClass)) {
+                this.$links.removeClass(this.options.currentClass);
+                $activeLink.addClass(this.options.currentClass);
+            }
+        },        
+        
+        getCurrentSection: function(scrollPos) {
+            var i, hash, coords, section;
+            
+            for (i = 0; i < this.$links.length; i++) {
+                hash = this.$links[i].hash;
+                
+                if ($(hash).length) {
+                    coords = this.getCoords($(hash));
+                    
+                    if (scrollPos >= coords.top - this.options.threshold) {
+                        section = hash;
+                    }
+                }
+            }
+            
+            // The current section or the first link
+            return section || this.$links[0].hash;
+        }
+    };
+    
+    $.fn.singlePageNav = function(options) {
+        return this.each(function() {
+            var singlePageNav = Object.create(SinglePageNav);
+            singlePageNav.init(options, this);
+        });
+    };
+    
+    $.fn.singlePageNav.defaults = {
+        offset: 0,
+        threshold: 120,
+        speed: 400,
+        currentClass: 'current',
+        easing: 'swing',
+        updateHash: false,
+        filter: '',
+        onComplete: false,
+        beforeStart: false
+    };
+    
+})(jQuery, window, document);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/_site/js/modernizr.min.js
----------------------------------------------------------------------
diff --git a/eagle-site/_site/js/modernizr.min.js b/eagle-site/_site/js/modernizr.min.js
new file mode 100755
index 0000000..f54037e
--- /dev/null
+++ b/eagle-site/_site/js/modernizr.min.js
@@ -0,0 +1 @@
+window.Modernizr=function(e,t,n){function r(e,t){var n=e.charAt(0).toUpperCase()+e.substr(1),r=(e+" "+C.join(n+" ")+n).split(" ");return o(r,t)}function o(e,t){for(var r in e)if(v[e[r]]!==n)return"pfx"==t?e[r]:!0;return!1}function i(e,t){return!!~(""+e).indexOf(t)}function a(e,t){return typeof e===t}function s(e,t){return c(x.join(e+";")+(t||""))}function c(e){v.cssText=e}var l,u,f,d="2.0.6",p={},m=!0,h=t.documentElement,g=(t.head||t.getElementsByTagName("head")[0],"modernizr"),y=t.createElement(g),v=y.style,b=":)",x=(Object.prototype.toString," -webkit- -moz- -o- -ms- -khtml- ".split(" ")),C="Webkit Moz O ms Khtml".split(" "),E={},S=[],T=function(e,n,r,o){var i,a,s,c=t.createElement("div");if(parseInt(r,10))for(;r--;)s=t.createElement("div"),s.id=o?o[r]:g+(r+1),c.appendChild(s);return i=["&shy;","<style>",e,"</style>"].join(""),c.id=g,c.innerHTML+=i,h.appendChild(c),a=n(c,e),c.parentNode.removeChild(c),!!a},w={}.hasOwnProperty;f=a(w,n)||a(w.call,n)?function(e,t){return t in e&&a(e.
 constructor.prototype[t],n)}:function(e,t){return w.call(e,t)};!function(e,n){var r=e.join(""),o=n.length;T(r,function(e,n){for(var r=t.styleSheets[t.styleSheets.length-1],i=r.cssRules&&r.cssRules[0]?r.cssRules[0].cssText:r.cssText||"",a=e.childNodes,s={};o--;)s[a[o].id]=a[o];p.csstransforms3d=9===s.csstransforms3d.offsetLeft,p.generatedcontent=s.generatedcontent.offsetHeight>=1,p.fontface=/src/i.test(i)&&0===i.indexOf(n.split(" ")[0])},o,n)}(['@font-face {font-family:"font";src:url("https://")}',["@media (",x.join("transform-3d),("),g,")","{#csstransforms3d{left:9px;position:absolute}}"].join(""),['#generatedcontent:after{content:"',b,'";visibility:hidden}'].join("")],["fontface","csstransforms3d","generatedcontent"]);E.flexbox=function(){function e(e,t,n,r){e.style.cssText=x.join(t+":"+n+";")+(r||"")}function n(e,t,n,r){t+=":",e.style.cssText=(t+x.join(n+";"+t)).slice(0,-t.length)+(r||"")}var r=t.createElement("div"),o=t.createElement("div");n(r,"display","box","width:42px;padding
 :0;"),e(o,"box-flex","1","width:10px;"),r.appendChild(o),h.appendChild(r);var i=42===o.offsetWidth;return r.removeChild(o),h.removeChild(r),i},E.rgba=function(){return c("background-color:rgba(150,255,150,.5)"),i(v.backgroundColor,"rgba")},E.hsla=function(){return c("background-color:hsla(120,40%,100%,.5)"),i(v.backgroundColor,"rgba")||i(v.backgroundColor,"hsla")},E.multiplebgs=function(){return c("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(v.background)},E.backgroundsize=function(){return r("backgroundSize")},E.borderimage=function(){return r("borderImage")},E.borderradius=function(){return r("borderRadius")},E.boxshadow=function(){return r("boxShadow")},E.textshadow=function(){return""===t.createElement("div").style.textShadow},E.opacity=function(){return s("opacity:.55"),/^0.55$/.test(v.opacity)},E.cssanimations=function(){return r("animationName")},E.csscolumns=function(){return r("columnCount")},E.cssgradients=function(){var e="background
 -image:",t="gradient(linear,left top,right bottom,from(#9f9),to(white));",n="linear-gradient(left top,#9f9, white);";return c((e+x.join(t+e)+x.join(n+e)).slice(0,-e.length)),i(v.backgroundImage,"gradient")},E.cssreflections=function(){return r("boxReflect")},E.csstransforms=function(){return!!o(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},E.csstransforms3d=function(){var e=!!o(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);return e&&"webkitPerspective"in h.style&&(e=p.csstransforms3d),e},E.csstransitions=function(){return r("transitionProperty")},E.fontface=function(){return p.fontface},E.generatedcontent=function(){return p.generatedcontent};for(var j in E)f(E,j)&&(u=j.toLowerCase(),p[u]=E[j](),S.push((p[u]?"":"no-")+u));return c(""),y=l=null,e.attachEvent&&function(){var e=t.createElement("div");return e.innerHTML="<elem></elem>",1!==e.childNodes.length}()&&function(e,t){function r(e){for(var t=-1
 ;++t<c;)e.createElement(s[t])}e.iepp=e.iepp||{};var o,i=e.iepp,a=i.html5elements||"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",s=a.split("|"),c=s.length,l=new RegExp("(^|\\s)("+a+")","gi"),u=new RegExp("<(/*)("+a+")","gi"),f=/^\s*[\{\}]\s*$/,d=new RegExp("(^|[^\\n]*?\\s)("+a+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),p=t.createDocumentFragment(),m=t.documentElement,h=m.firstChild,g=t.createElement("body"),y=t.createElement("style"),v=/print|all/;i.getCSS=function(e,t){if(e+""===n)return"";for(var r,o=-1,a=e.length,s=[];++o<a;)r=e[o],r.disabled||(t=r.media||t,v.test(t)&&s.push(i.getCSS(r.imports,t),r.cssText),t="all");return s.join("")},i.parseCSS=function(e){for(var t,n=[];null!=(t=d.exec(e));)n.push(((f.exec(t[1])?"\n":t[1])+t[2]+t[3]).replace(l,"$1.iepp_$2")+t[4]);return n.join("\n")},i.writeHTML=function(){var e=-1;for(o=o||t.body;++e<c;)for(var n=t.getElementsByTagName(s[e]),r=n.lengt
 h,i=-1;++i<r;)n[i].className.indexOf("iepp_")<0&&(n[i].className+=" iepp_"+s[e]);p.appendChild(o),m.appendChild(g),g.className=o.className,g.id=o.id,g.innerHTML=o.innerHTML.replace(u,"<$1font")},i._beforePrint=function(){y.styleSheet.cssText=i.parseCSS(i.getCSS(t.styleSheets,"all")),i.writeHTML()},i.restoreHTML=function(){g.innerHTML="",m.removeChild(g),m.appendChild(o)},i._afterPrint=function(){i.restoreHTML(),y.styleSheet.cssText=""},r(t),r(p),i.disablePP||(h.insertBefore(y,h.firstChild),y.media="print",y.className="iepp-printshim",e.attachEvent("onbeforeprint",i._beforePrint),e.attachEvent("onafterprint",i._afterPrint))}(e,t),p._version=d,p._prefixes=x,p._domPrefixes=C,p.testProp=function(e){return o([e])},p.testAllProps=r,p.testStyles=T,h.className=h.className.replace(/\bno-js\b/,"")+(m?" js "+S.join(" "):""),p}(this,this.document),function(e,t,n){function r(e){return!e||"loaded"==e||"complete"==e}function o(){for(var e=1,t=-1;y.length-++t&&(!y[t].s||(e=y[t].r)););e&&s()}functio
 n i(e){var n,i=t.createElement("script");i.src=e.s,i.onreadystatechange=i.onload=function(){!n&&r(i.readyState)&&(n=1,o(),i.onload=i.onreadystatechange=null)},m(function(){n||(n=1,o())},d.errorTimeout),e.e?i.onload():h.parentNode.insertBefore(i,h)}function a(e){var n,r=t.createElement("link");if(r.href=e.s,r.rel="stylesheet",r.type="text/css",e.e||!S&&!b)r.onload=function(){n||(n=1,m(function(){o()},0))},e.e&&r.onload();else{var i=function(e){m(function(){if(!n)try{e.sheet.cssRules.length?(n=1,o()):i(e)}catch(t){1e3==t.code||"security"==t.message||"denied"==t.message?(n=1,m(function(){o()},0)):i(e)}},0)};i(r)}m(function(){n||(n=1,o())},d.errorTimeout),!e.e&&h.parentNode.insertBefore(r,h)}function s(){var e=y.shift();v=1,e?e.t?m(function(){"c"==e.t?a(e):i(e)},0):(e(),o()):v=0}function c(e,n,i,a,c,l){function u(){!p&&r(f.readyState)&&(g.r=p=1,!v&&o(),f.onload=f.onreadystatechange=null,m(function(){C.removeChild(f)},0))}var f=t.createElement(e),p=0,g={t:i,s:n,e:l};f.src=f.data=n,!x&&(f
 .style.display="none"),f.width=f.height="0","object"!=e&&(f.type=i),f.onload=f.onreadystatechange=u,"img"==e?f.onerror=u:"script"==e&&(f.onerror=function(){g.e=g.r=1,s()}),y.splice(a,0,g),C.insertBefore(f,x?null:h),m(function(){p||(C.removeChild(f),g.r=g.e=p=1,o())},d.errorTimeout)}function l(e,t,n){var r="c"==t?j:w;return v=0,t=t||"j",N(e)?c(r,e,t,this.i++,p,n):(y.splice(this.i++,0,e),1==y.length&&s()),this}function u(){var e=d;return e.loader={load:l,i:0},e}var f,d,p=t.documentElement,m=e.setTimeout,h=t.getElementsByTagName("script")[0],g={}.toString,y=[],v=0,b="MozAppearance"in p.style,x=b&&!!t.createRange().compareNode,C=x?p:h.parentNode,E=e.opera&&"[object Opera]"==g.call(e.opera),S="webkitAppearance"in p.style,T=S&&"async"in t.createElement("script"),w=b?"object":E||T?"img":"script",j=S?"img":w,k=Array.isArray||function(e){return"[object Array]"==g.call(e)},P=function(e){return Object(e)===e},N=function(e){return"string"==typeof e},M=function(e){return"[object Function]"==g.ca
 ll(e)},L=[],O={};d=function(e){function t(e){var t,n,r=e.split("!"),o=L.length,i=r.pop(),a=r.length,s={url:i,origUrl:i,prefixes:r};for(n=0;a>n;n++)t=O[r[n]],t&&(s=t(s));for(n=0;o>n;n++)s=L[n](s);return s}function r(e,r,o,i,a){var s=t(e),c=s.autoCallback;if(!s.bypass){if(r&&(r=M(r)?r:r[e]||r[i]||r[e.split("/").pop().split("?")[0]]),s.instead)return s.instead(e,r,o,i,a);o.load(s.url,s.forceCSS||!s.forceJS&&/css$/.test(s.url)?"c":n,s.noexec),(M(r)||M(c))&&o.load(function(){u(),r&&r(s.origUrl,a,i),c&&c(s.origUrl,a,i)})}}function o(e,t){function n(e){if(N(e))r(e,c,t,0,i);else if(P(e))for(o in e)e.hasOwnProperty(o)&&r(e[o],c,t,o,i)}var o,i=!!e.test,a=i?e.yep:e.nope,s=e.load||e.both,c=e.callback;n(a),n(s),e.complete&&t.load(e.complete)}var i,a,s=this.yepnope.loader;if(N(e))r(e,0,s,0);else if(k(e))for(i=0;i<e.length;i++)a=e[i],N(a)?r(a,0,s,0):k(a)?d(a):P(a)&&o(a,s);else P(e)&&o(e,s)},d.addPrefix=function(e,t){O[e]=t},d.addFilter=function(e){L.push(e)},d.errorTimeout=1e4,null==t.readyState&&
 t.addEventListener&&(t.readyState="loading",t.addEventListener("DOMContentLoaded",f=function(){t.removeEventListener("DOMContentLoaded",f,0),t.readyState="complete"},0)),e.yepnope=u()}(this,this.document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/_site/js/responsiveCarousel.min.js
----------------------------------------------------------------------
diff --git a/eagle-site/_site/js/responsiveCarousel.min.js b/eagle-site/_site/js/responsiveCarousel.min.js
new file mode 100755
index 0000000..e42631b
--- /dev/null
+++ b/eagle-site/_site/js/responsiveCarousel.min.js
@@ -0,0 +1,7 @@
+/*! responsiveCarousel.JS - v1.2.0
+ * http://basilio.github.com/responsiveCarousel
+ *
+ * Copyright (c) 2013 Basilio C\ufffdceres <ba...@gmail.com>;
+ * Licensed under the MIT license */
+
+(function(e){"use strict";e.fn.carousel=function(t){var n,r;n={infinite:true,visible:1,speed:"fast",overflow:false,autoRotate:false,navigation:e(this).data("navigation"),itemMinWidth:0,itemEqualHeight:false,itemMargin:0,itemClassActive:"crsl-active",imageWideClass:"wide-image",carousel:true};return e(this).each(function(){r=e(this);if(e.isEmptyObject(t)===false)e.extend(n,t);if(e.isEmptyObject(e(r).data("crsl"))===false)e.extend(n,e(r).data("crsl"));n.isTouch="ontouchstart"in document.documentElement||navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile/i)?true:false;r.init=function(){n.total=e(r).find(".crsl-item").length;n.itemWidth=e(r).outerWidth();n.visibleDefault=n.visible;n.swipeDistance=null;n.swipeMinDistance=100;n.startCoords={};n.endCoords={};e(r).css({width:"100%"});e(r).find(".crsl-item").css({position:"relative","float":"left",overflow:"hidden",height:"auto"});e(r).find("."+n.imageWideClass).each(function(){e(this).css({display:"block",wid
 th:"100%",height:"auto"})});e(r).find(".crsl-item iframe").attr({width:"100%"});if(n.carousel)e(r).find(".crsl-item:first-child").addClass(n.itemClassActive);if(n.carousel&&n.infinite&&n.visible<n.total)e(r).find(".crsl-item:first-child").before(e(".crsl-item:last-child",r));if(n.overflow===false){e(r).css({overflow:"hidden"})}else{e("html, body").css({"overflow-x":"hidden"})}e(r).trigger("initCarousel",[n,r]);r.testPreload();r.config();r.initRotate();r.triggerNavs()};r.testPreload=function(){if(e(r).find("img").length>0){var t=e(r).find("img").length,i=1;e(r).find("img").each(function(){r.preloadImage(this,i,t);i++})}else{e(r).trigger("loadedCarousel",[n,r])}};r.preloadImage=function(t,i,s){var o=new Image,u={};u.src=e(t).attr("src")!==undefined?t.src:"";u.alt=e(t).attr("alt")!==undefined?t.alt:"";e(o).attr(u);e(o).on("load",function(){if(i===1)e(r).trigger("loadingImagesCarousel",[n,r]);if(i===s)e(r).trigger("loadedImagesCarousel",[n,r])})};r.config=function(){n.itemWidth=Math.flo
 or((e(r).outerWidth()-n.itemMargin*(n.visibleDefault-1))/n.visibleDefault);if(n.itemWidth<=n.itemMinWidth){n.visible=Math.floor((e(r).outerWidth()-n.itemMargin*(n.visible-1))/n.itemMinWidth)===1?Math.floor(e(r).outerWidth()/n.itemMinWidth):Math.floor((e(r).outerWidth()-n.itemMargin)/n.itemMinWidth);n.visible=n.visible<1?1:n.visible;n.itemWidth=n.visible===1?Math.floor(e(r).outerWidth()):Math.floor((e(r).outerWidth()-n.itemMargin*(n.visible-1))/n.visible)}else{n.visible=n.visibleDefault}if(n.carousel){r.wrapWidth=Math.floor((n.itemWidth+n.itemMargin)*n.total);r.wrapMargin=r.wrapMarginDefault=n.infinite&&n.visible<n.total?parseInt((n.itemWidth+n.itemMargin)*-1,10):0;if(n.infinite&&n.visible<n.total&&e(r).find(".crsl-item."+n.itemClassActive).index()===0){e(r).find(".crsl-item:first-child").before(e(".crsl-item:last-child",r));r.wrapMargin=r.wrapMarginDefault=parseInt((n.itemWidth+n.itemMargin)*-1,10)}e(r).find(".crsl-wrap").css({width:r.wrapWidth+"px",marginLeft:r.wrapMargin})}else{r.
 wrapWidth=e(r).outerWidth();e(r).find(".crsl-wrap").css({width:r.wrapWidth+n.itemMargin+"px"});e("#"+n.navigation).hide()}e(r).find(".crsl-item").css({width:n.itemWidth+"px",marginRight:n.itemMargin+"px"});r.equalHeights();if(n.carousel){if(n.visible>=n.total){n.autoRotate=false;e("#"+n.navigation).hide()}else{e("#"+n.navigation).show()}}};r.equalHeights=function(){if(n.itemEqualHeight!==false){var t=0;e(r).find(".crsl-item").each(function(){e(this).css({height:"auto"});if(e(this).outerHeight()>t){t=e(this).outerHeight()}});e(r).find(".crsl-item").css({height:t+"px"})}return true};r.initRotate=function(){if(n.autoRotate!==false){r.rotateTime=window.setInterval(function(){r.rotate()},n.autoRotate)}};r.triggerNavs=function(){e("#"+n.navigation).delegate(".previous, .next","click",function(t){t.preventDefault();r.prepareExecute();if(e(this).hasClass("previous")&&r.testPrevious(r.itemActive)){r.previous()}else if(e(this).hasClass("next")&&r.testNext()){r.next()}else{return}})};r.prepare
 Execute=function(){if(n.autoRotate){clearInterval(r.rotateTime)}r.preventAnimateEvent();r.itemActive=e(r).find(".crsl-item."+n.itemClassActive);return true};r.preventAnimateEvent=function(){if(e(r).find(".crsl-wrap:animated").length>0){return false}};r.rotate=function(){r.preventAnimateEvent();r.itemActive=e(r).find(".crsl-item."+n.itemClassActive);r.next();return true};r.testPrevious=function(t){return e(".crsl-wrap",r).find(".crsl-item").index(t)>0};r.testNext=function(){return!n.infinite&&r.wrapWidth>=(n.itemWidth+n.itemMargin)*(n.visible+1)-r.wrapMargin||n.infinite};r.previous=function(){r.wrapMargin=n.infinite?r.wrapMarginDefault+e(r.itemActive).outerWidth(true):r.wrapMargin+e(r.itemActive).outerWidth(true);var t=e(r.itemActive).index();var i=e(r.itemActive).prev(".crsl-item");var s="previous";e(r).trigger("beginCarousel",[n,r,s]);e(r).find(".crsl-wrap").animate({marginLeft:r.wrapMargin+"px"},n.speed,function(){e(r.itemActive).removeClass(n.itemClassActive);e(i).addClass(n.item
 ClassActive);if(n.infinite){e(this).css({marginLeft:r.wrapMarginDefault}).find(".crsl-item:first-child").before(e(".crsl-item:last-child",r))}else{if(r.testPrevious(i)===false)e("#"+n.navigation).find(".previous").addClass("previous-inactive");if(r.testNext())e("#"+n.navigation).find(".next").removeClass("next-inactive")}e(this).trigger("endCarousel",[n,r,s])})};r.next=function(){r.wrapMargin=n.infinite?r.wrapMarginDefault-e(r.itemActive).outerWidth(true):r.wrapMargin-e(r.itemActive).outerWidth(true);var t=e(r.itemActive).index();var i=e(r.itemActive).next(".crsl-item");var s="next";e(r).trigger("beginCarousel",[n,r,s]);e(r).find(".crsl-wrap").animate({marginLeft:r.wrapMargin+"px"},n.speed,function(){e(r.itemActive).removeClass(n.itemClassActive);e(i).addClass(n.itemClassActive);if(n.infinite){e(this).css({marginLeft:r.wrapMarginDefault}).find(".crsl-item:last-child").after(e(".crsl-item:first-child",r))}else{if(r.testPrevious(i))e("#"+n.navigation).find(".previous").removeClass("pr
 evious-inactive");if(r.testNext()===false)e("#"+n.navigation).find(".next").addClass("next-inactive")}e(this).trigger("endCarousel",[n,r,s])})};var i=false,s;e(window).on("mouseleave",function(t){if(t.target)s=t.target;else if(t.srcElement)s=t.srcElement;if(e(r).attr("id")&&e(s).parents(".crsl-items").attr("id")===e(r).attr("id")||e(s).parents(".crsl-items").data("navigation")===e(r).data("navigation")){i=true}else{i=false}return false});e(window).on("keydown",function(e){if(i===true){if(e.keyCode===37){r.prepareExecute();r.previous()}else if(e.keyCode===39){r.prepareExecute();r.next()}}return});if(n.isTouch){e(r).on("touchstart",function(t){e(r).addClass("touching");n.startCoords=t.originalEvent.targetTouches[0];n.endCoords=t.originalEvent.targetTouches[0];e(".touching").on("touchmove",function(e){n.endCoords=e.originalEvent.targetTouches[0];if(Math.abs(parseInt(n.endCoords.pageX-n.startCoords.pageX,10))>Math.abs(parseInt(n.endCoords.pageY-n.startCoords.pageY,10))){e.preventDefault
 ();e.stopPropagation()}})}).on("touchend",function(t){t.preventDefault();t.stopPropagation();n.swipeDistance=n.endCoords.pageX-n.startCoords.pageX;if(n.swipeDistance>=n.swipeMinDistance){r.previous()}else if(n.swipeDistance<=-n.swipeMinDistance){r.next()}e(".touching").off("touchmove").removeClass("touching")})}e(r).on("loadedCarousel loadedImagesCarousel",function(){r.equalHeights()});e(window).on("carouselResizeEnd",function(){if(n.itemWidth!==e(r).outerWidth())r.config()});e(window).ready(function(){e(r).trigger("prepareCarousel",[n,r]);r.init();e(window).on("resize",function(){if(this.carouselResizeTo)clearTimeout(this.carouselResizeTo);this.carouselResizeTo=setTimeout(function(){e(this).trigger("carouselResizeEnd")},10)})});e(window).load(function(){r.testPreload();r.config()})})}})(jQuery)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/_site/js/svg.js
----------------------------------------------------------------------
diff --git a/eagle-site/_site/js/svg.js b/eagle-site/_site/js/svg.js
new file mode 100755
index 0000000..939f301
--- /dev/null
+++ b/eagle-site/_site/js/svg.js
@@ -0,0 +1,24 @@
+!function(a){function b(b,d){function e(){if(w){$canvas=a('<canvas class="pg-canvas"></canvas>'),v.prepend($canvas),p=$canvas[0],q=p.getContext("2d"),f();for(var b=Math.round(p.width*p.height/d.density),c=0;b>c;c++){var e=new l;e.setStackPos(c),x.push(e)}a(window).on("resize",function(){h()}),a(document).on("mousemove",function(a){y=a.pageX,z=a.pageY}),B&&!A&&window.addEventListener("deviceorientation",function(){D=Math.min(Math.max(-event.beta,-30),30),C=Math.min(Math.max(-event.gamma,-30),30)},!0),g(),o("onInit")}}function f(){p.width=v.width(),p.height=v.height(),q.fillStyle=d.dotColor,q.strokeStyle=d.lineColor,q.lineWidth=d.lineWidth}function g(){if(w){s=a(window).width(),t=a(window).height(),q.clearRect(0,0,p.width,p.height);for(var b=0;b<x.length;b++)x[b].updatePosition();for(var b=0;b<x.length;b++)x[b].draw();E||(r=requestAnimationFrame(g))}}function h(){for(f(),i=x.length-1;i>=0;i--)(x[i].position.x>v.width()||x[i].position.y>v.height())&&x.splice(i,1);var a=Math.round(p.wid
 th*p.height/d.density);if(a>x.length)for(;a>x.length;){var b=new l;x.push(b)}else a<x.length&&x.splice(a);for(i=x.length-1;i>=0;i--)x[i].setStackPos(i)}function j(){E=!0}function k(){E=!1,g()}function l(){switch(this.stackPos,this.active=!0,this.layer=Math.ceil(3*Math.random()),this.parallaxOffsetX=0,this.parallaxOffsetY=0,this.position={x:Math.ceil(Math.random()*p.width),y:Math.ceil(Math.random()*p.height)},this.speed={},d.directionX){case"left":this.speed.x=+(-d.maxSpeedX+Math.random()*d.maxSpeedX-d.minSpeedX).toFixed(2);break;case"right":this.speed.x=+(Math.random()*d.maxSpeedX+d.minSpeedX).toFixed(2);break;default:this.speed.x=+(-d.maxSpeedX/2+Math.random()*d.maxSpeedX).toFixed(2),this.speed.x+=this.speed.x>0?d.minSpeedX:-d.minSpeedX}switch(d.directionY){case"up":this.speed.y=+(-d.maxSpeedY+Math.random()*d.maxSpeedY-d.minSpeedY).toFixed(2);break;case"down":this.speed.y=+(Math.random()*d.maxSpeedY+d.minSpeedY).toFixed(2);break;default:this.speed.y=+(-d.maxSpeedY/2+Math.random()*d
 .maxSpeedY).toFixed(2),this.speed.x+=this.speed.y>0?d.minSpeedY:-d.minSpeedY}}function m(a,b){return b?void(d[a]=b):d[a]}function n(){v.find(".pg-canvas").remove(),o("onDestroy"),v.removeData("plugin_"+c)}function o(a){void 0!==d[a]&&d[a].call(u)}var p,q,r,s,t,u=b,v=a(b),w=!!document.createElement("canvas").getContext,x=[],y=0,z=0,A=!navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|BB10|mobi|tablet|opera mini|nexus 7)/i),B=!!window.DeviceOrientationEvent,C=0,D=0,E=!1;return d=a.extend({},a.fn[c].defaults,d),l.prototype.draw=function(){q.beginPath(),q.arc(this.position.x+this.parallaxOffsetX,this.position.y+this.parallaxOffsetY,d.particleRadius/2,0,2*Math.PI,!0),q.closePath(),q.fill(),q.beginPath();for(var a=x.length-1;a>this.stackPos;a--){var b=x[a],c=this.position.x-b.position.x,e=this.position.y-b.position.y,f=Math.sqrt(c*c+e*e).toFixed(2);f<d.proximity&&(q.moveTo(this.position.x+this.parallaxOffsetX,this.position.y+this.parallaxOffsetY),d.curvedLines?q.quadraticCur
 veTo(Math.max(b.position.x,b.position.x),Math.min(b.position.y,b.position.y),b.position.x+b.parallaxOffsetX,b.position.y+b.parallaxOffsetY):q.lineTo(b.position.x+b.parallaxOffsetX,b.position.y+b.parallaxOffsetY))}q.stroke(),q.closePath()},l.prototype.updatePosition=function(){if(d.parallax){if(B&&!A){var a=(s-0)/60;pointerX=(C- -30)*a+0;var b=(t-0)/60;pointerY=(D- -30)*b+0}else pointerX=y,pointerY=z;this.parallaxTargX=(pointerX-s/2)/(d.parallaxMultiplier*this.layer),this.parallaxOffsetX+=(this.parallaxTargX-this.parallaxOffsetX)/10,this.parallaxTargY=(pointerY-t/2)/(d.parallaxMultiplier*this.layer),this.parallaxOffsetY+=(this.parallaxTargY-this.parallaxOffsetY)/10}switch(d.directionX){case"left":this.position.x+this.speed.x+this.parallaxOffsetX<0&&(this.position.x=v.width()-this.parallaxOffsetX);break;case"right":this.position.x+this.speed.x+this.parallaxOffsetX>v.width()&&(this.position.x=0-this.parallaxOffsetX);break;default:(this.position.x+this.speed.x+this.parallaxOffsetX>v.wid
 th()||this.position.x+this.speed.x+this.parallaxOffsetX<0)&&(this.speed.x=-this.speed.x)}switch(d.directionY){case"up":this.position.y+this.speed.y+this.parallaxOffsetY<0&&(this.position.y=v.height()-this.parallaxOffsetY);break;case"down":this.position.y+this.speed.y+this.parallaxOffsetY>v.height()&&(this.position.y=0-this.parallaxOffsetY);break;default:(this.position.y+this.speed.y+this.parallaxOffsetY>v.height()||this.position.y+this.speed.y+this.parallaxOffsetY<0)&&(this.speed.y=-this.speed.y)}this.position.x+=this.speed.x,this.position.y+=this.speed.y},l.prototype.setStackPos=function(a){this.stackPos=a},e(),{option:m,destroy:n,start:k,pause:j}}var c="particleground";a.fn[c]=function(d){if("string"==typeof arguments[0]){var e,f=arguments[0],g=Array.prototype.slice.call(arguments,1);return this.each(function(){a.data(this,"plugin_"+c)&&"function"==typeof a.data(this,"plugin_"+c)[f]&&(e=a.data(this,"plugin_"+c)[f].apply(this,g))}),void 0!==e?e:this}return"object"!=typeof d&&d?void
  0:this.each(function(){a.data(this,"plugin_"+c)||a.data(this,"plugin_"+c,new b(this,d))})},a.fn[c].defaults={minSpeedX:.1,maxSpeedX:.7,minSpeedY:.1,maxSpeedY:.7,directionX:"center",directionY:"center",density:1e4,dotColor:"#666666",lineColor:"#666666",particleRadius:7,lineWidth:1,curvedLines:!1,proximity:100,parallax:!0,parallaxMultiplier:5,onInit:function(){},onDestroy:function(){}}}(jQuery),
+
+function(){for(var a=0,b=["ms","moz","webkit","o"],c=0;c<b.length&&!window.requestAnimationFrame;++c)window.requestAnimationFrame=window[b[c]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[b[c]+"CancelAnimationFrame"]||window[b[c]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(b){var c=(new Date).getTime(),d=Math.max(0,16-(c-a)),e=window.setTimeout(function(){b(c+d)},d);return a=c+d,e}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(a){clearTimeout(a)})}();
+
+$(function(){
+            
+    $('.particles').particleground({
+        minSpeedX: 0.1,
+        maxSpeedX: 0.7,
+        minSpeedY: 0.1,
+        maxSpeedY: 0.7,
+        directionX: 'center', // 'center', 'left' or 'right'. 'center' = dots bounce off edges
+        directionY: 'center', // 'center', 'up' or 'down'. 'center' = dots bounce off edges
+        density: 10000, // How many particles will be generated: one particle every n pixels
+        dotColor: '#eee',
+        lineColor: '#eee',
+        particleRadius: 7, // Dot size
+        lineWidth: 1,
+        curvedLines: true,
+        proximity: 100, // How close two dots need to be before they join
+        parallax: false
+    });
+
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/_site/post/2015/10/27/apache-eagle-announce-cn.html
----------------------------------------------------------------------
diff --git a/eagle-site/_site/post/2015/10/27/apache-eagle-announce-cn.html b/eagle-site/_site/post/2015/10/27/apache-eagle-announce-cn.html
new file mode 100644
index 0000000..5d87315
--- /dev/null
+++ b/eagle-site/_site/post/2015/10/27/apache-eagle-announce-cn.html
@@ -0,0 +1,352 @@
+<!DOCTYPE html>
+<html>
+
+  <head>
+  	<meta charset="utf-8">
+  	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+
+ 	<title>Eagle - Apache Eagle \u6b63\u5f0f\u53d1\u5e03\uff1a\u5206\u5e03\u5f0f\u5b9e\u65f6Hadoop\u6570\u636e\u5b89\u5168\u65b9\u6848</title>
+ 	<meta name="description" content="  \u6458\u8981\uff1a\u65e5\u524d\uff0ceBay\u516c\u53f8\u9686\u91cd\u5ba3\u5e03\u6b63\u5f0f\u5411\u5f00\u6e90\u4e1a\u754c\u63a8\u51fa\u5b9e\u65f6\u5206\u5e03\u5f0fHadoop\u6570\u636e\u5b89\u5168\u65b9\u6848 - Apache Eagle\uff0c\u4f5c\u4e3a\u4e00\u5957\u65e8\u5728\u63d0\u4f9b\u9ad8\u6548\u5206\u5e03\u5f0f\u7684\u6d41\u5f0f\u7b56\u7565\u5f15\u64ce\uff0c\u5e76\u96c6\u6210\u673a\u5668\u5b66\u4e60\u5bf9\u7528\u6237\u884c\u4e3a\u5efa\u7acbProfile\u4ee5\u5b9e\u65f6\u667a\u80fd\u5730\u4fdd\u62a4Hadoop\u751f\u6001\u7cfb\u7edf\u4e2d\u5927\u6570\u636e\u5b89\u5168\u7684\u89e3\u51b3\u65b9\u6848\u3002">
+
+	<meta name="keywords" content="Eagle, Hadoop, Security, Real Time">
+	<meta name="author" content="eBay Inc.">
+
+	<meta charset="utf-8">
+	<meta name="viewport" content="initial-scale=1">
+
+	<link rel="stylesheet" href="/css/animate.css">
+	<link rel="stylesheet" href="/css/bootstrap.min.css">
+
+	<link rel="stylesheet" href="/css/font-awesome.min.css">
+	
+	<link rel="stylesheet" href="/css/misc.css">
+	<link rel="stylesheet" href="/css/style.css">
+	<link rel="stylesheet" href="/css/styles.css">
+  	<link rel="stylesheet" href="/css/main.css">
+  	<link rel="alternate" type="application/rss+xml" title="Eagle" href="http://goeagle.io/feed.xml" />
+  	<link rel="shortcut icon" href="/images/favicon.png">
+
+  	<!-- Baidu Analytics Tracking-->
+	<script>
+	var _hmt = _hmt || [];
+	(function() {
+	  var hm = document.createElement("script");
+	  hm.src = "//hm.baidu.com/hm.js?fedc55df2ea52777a679192e8f849ece";
+	  var s = document.getElementsByTagName("script")[0]; 
+	  s.parentNode.insertBefore(hm, s);
+	})();
+	</script>
+	
+	<!-- Google Analytics Tracking -->
+	<script>
+	  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+	  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+	  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+	  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+	  ga('create', 'UA-68929805-1', 'auto');
+	  ga('send', 'pageview');
+	</script>
+</head>
+  <body>
+    <div class="topbar">
+    <div class="container">
+      <div class="row" >
+        <nav class="navbar navbar-default">
+          <div class="container-fluid"> 
+            <!-- Brand and toggle get grouped for better mobile display -->
+            <div class="navbar-header">
+              <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button>
+              <a class="navbar-brand" href="/"><img src="/images/logo2.png" height="44px" style="margin-top:-7px"></a> </div>
+            
+            <!-- Collect the nav links, forms, and other content for toggling -->
+            <!-- <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+              <ul class="nav navbar-nav navbar-right" id="top-menu">
+                <li><a class="menu" href="/#home_page">HOME</a></li>
+                <li><a class="menu" href="/docs/">DOCS</a></li>
+                <li><a class="menu" href="/#about_page">ABOUT</a></li>
+                <li><a class="menu" href="/#diagram_page">ARCHITECTURE</a></li>
+                <li><a class="menu" href="/#modules_page">MODULES</a></li>
+                <li><a class="menu" href="/#usecase_page">USE CASES</a></li>
+                <li>
+                </li>
+              </ul> -->
+            </div>
+          </div>
+          <!-- /.container-fluid --> 
+        </nav>
+      </div>
+    </div>
+  </div>
+    <div class="page-content">
+      <div class="pagewrapper">
+        <div class="post">
+
+  <header class="post-header">
+    <h1 class="post-title">Apache Eagle \u6b63\u5f0f\u53d1\u5e03\uff1a\u5206\u5e03\u5f0f\u5b9e\u65f6Hadoop\u6570\u636e\u5b89\u5168\u65b9\u6848</h1>
+    <p class="post-meta">Oct 27, 2015 \u2022 Hao Chen, Edward Zhang, Libin Sun, Jilin Jiang, Qingwen Zhao</p>
+  </header>
+  
+  <article class="post-content">
+    <blockquote>
+  <p><em>\u6458\u8981</em>\uff1a\u65e5\u524d\uff0ceBay\u516c\u53f8\u9686\u91cd\u5ba3\u5e03\u6b63\u5f0f\u5411\u5f00\u6e90\u4e1a\u754c\u63a8\u51fa\u5b9e\u65f6\u5206\u5e03\u5f0fHadoop\u6570\u636e\u5b89\u5168\u65b9\u6848 - Apache Eagle\uff0c\u4f5c\u4e3a\u4e00\u5957\u65e8\u5728\u63d0\u4f9b\u9ad8\u6548\u5206\u5e03\u5f0f\u7684\u6d41\u5f0f\u7b56\u7565\u5f15\u64ce\uff0c\u5e76\u96c6\u6210\u673a\u5668\u5b66\u4e60\u5bf9\u7528\u6237\u884c\u4e3a\u5efa\u7acbProfile\u4ee5\u5b9e\u65f6\u667a\u80fd\u5730\u4fdd\u62a4Hadoop\u751f\u6001\u7cfb\u7edf\u4e2d\u5927\u6570\u636e\u5b89\u5168\u7684\u89e3\u51b3\u65b9\u6848\u3002</p>
+</blockquote>
+
+<p>\u65e5\u524d\uff0ceBay\u516c\u53f8\u9686\u91cd\u5ba3\u5e03\u6b63\u5f0f\u5411\u5f00\u6e90\u4e1a\u754c\u63a8\u51fa\u5206\u5e03\u5f0f\u5b9e\u65f6\u5b89\u5168\u76d1\u63a7\u65b9\u6848 \uff0d Apache Eagle (http://goeagle.io)\uff0c\u8be5\u9879\u76ee\u5df2\u4e8e2015\u5e7410\u670826\u65e5\u6b63\u5f0f\u52a0\u5165Apache \u6210\u4e3a\u5b75\u5316\u5668\u9879\u76ee\u3002Apache Eagle\u63d0\u4f9b\u4e00\u5957\u9ad8\u6548\u5206\u5e03\u5f0f\u7684\u6d41\u5f0f\u7b56\u7565\u5f15\u64ce\uff0c\u5177\u6709\u9ad8\u5b9e\u65f6\u3001\u53ef\u4f38\u7f29\u3001\u6613\u6269\u5c55\u3001\u4ea4\u4e92\u53cb\u597d\u7b49\u7279\u70b9\uff0c\u540c\u65f6\u96c6\u6210\u673a\u5668\u5b66\u4e60\u5bf9\u7528\u6237\u884c\u4e3a\u5efa\u7acbProfile\u4ee5\u5b9e\u73b0\u667a\u80fd\u5b9e\u65f6\u5730\u4fdd\u62a4Hadoop\u751f\u6001\u7cfb\u7edf\u4e2d\u5927\u6570\u636e\u7684\u5b89\u5168\u3002</p>
+
+<h2 id="section">\u80cc\u666f</h2>
+<p>\u968f\u7740\u5927\u6570\u636e\u7684\u53d1\u5c55\uff0c\u8d8a\u6765\u8d8a\u591a\u7684\u6210\u529f\u4f01\u4e1a\u6216\u8005\u7ec4\u7ec7\u5f00\u59cb\u91c7\u53d6\u6570\u636e\u9a71\u52a8\u5546\u4e1a\u7684\u8fd0\u4f5c\u6a21\u5f0f\u3002\u5728eBay\uff0c\u6211\u4eec\u62e5\u6709\u6570\u4e07\u540d\u5de5\u7a0b\u5e08\u3001\u5206\u6790\u5e08\u548c\u6570\u636e\u79d1\u5b66\u5bb6\uff0c\u4ed6\u4eec\u6bcf\u5929\u8bbf\u95ee\u5206\u6790\u6570PB\u7ea7\u7684\u6570\u636e\uff0c\u4ee5\u4e3a\u6211\u4eec\u7684\u7528\u6237\u5e26\u6765\u65e0\u4e0e\u4f26\u6bd4\u7684\u4f53\u9a8c\u3002\u5728\u5168\u7403\u4e1a\u52a1\u4e2d\uff0c\u6211\u4eec\u4e5f\u5e7f\u6cdb\u5730\u5229\u7528\u6d77\u91cf\u5927\u6570\u636e\u6765\u8fde\u63a5\u6211\u4eec\u6570\u4ee5\u4ebf\u8ba1\u7684\u7528\u6237\u3002</p>
+
+<p>\u8fd1\u5e74\u6765\uff0cHadoop\u5df2\u7ecf\u9010\u6e10\u6210\u4e3a\u5927\u6570\u636e\u5206\u6790\u9886\u57df\u6700\u53d7\u6b22\u8fce\u7684\u89e3\u51b3\u65b9\u6848\uff0ceBay\u4e5f\u4e00\u76f4\u5728\u4f7f\u7528Hadoop\u6280\u672f\u4ece\u6570\u636e\u4e2d\u6316\u6398\u4ef7\u503c\uff0c\u4f8b\u5982\uff0c\u6211\u4eec\u901a\u8fc7\u5927\u6570\u636e\u63d0\u9ad8\u7528\u6237\u7684\u641c\u7d22\u4f53\u9a8c\uff0c\u8bc6\u522b\u548c\u4f18\u5316\u7cbe\u51c6\u5e7f\u544a\u6295\u653e\uff0c\u5145\u5b9e\u6211\u4eec\u7684\u4ea7\u54c1\u76ee\u5f55\uff0c\u4ee5\u53ca\u901a\u8fc7\u70b9\u51fb\u6d41\u5206\u6790\u4ee5\u7406\u89e3\u7528\u6237\u5982\u4f55\u4f7f\u7528\u6211\u4eec\u7684\u5728\u7ebf\u5e02\u573a\u5e73\u53f0\u7b49\u3002</p>
+
+<p>\u76ee\u524d\uff0ceBay\u7684Hadoop\u96c6\u7fa4\u603b\u8282\u70b9\u6570\u636e\u8d85\u8fc710000\u591a\u4e2a\uff0c\u5b58\u50a8\u5bb9\u91cf\u8d85\u8fc7170PB\uff0c\u6d3b\u8dc3\u7528\u6237\u8d85\u8fc72000\u591a\u3002\u73b0\u5728\u76f8\u5173\u89c4\u6a21\u8fd8\u5728\u4e0d\u65ad\u589e\u957f\u4e2d\uff0c\u540c\u65f6\u4e3a\u4e86\u652f\u6301\u591a\u5143\u5316\u9700\u6c42\uff0c\u6211\u4eec\u5f15\u5165\u8d8a\u6765\u8d8a\u591a\u6837\u7684\u6570\u636e\u5b58\u50a8\u548c\u5206\u6790\u65b9\u6848\uff0c\u6bd4\u5982Hive\u3001MapReduec\u3001Spark \u548cHBase\u7b49\uff0c\u968f\u4e4b\u5e26\u6765\u7684\u7ba1\u7406\u548c\u76d1\u63a7\u7684\u6311\u6218\u8d8a\u6765\u8d8a\u4e25\u5cfb\uff0c\u6570\u636e\u5b89\u5168\u95ee\u9898\u4ea6\u662f\u5176\u4e2d\u6700\u91cd\u8981\u7684\u4e4b\u4e00\u3002</p>
+
+<p>\u5927\u6570\u636e\u65f6\u4ee3\uff0c\u5b89\u5168\u95ee\u9898\u5f00\u59cb\u53d8\u5f97\u7a7a\u524d\u7684\u5173\u952e\uff0c\u7279\u522beBay\u4f5c\u4e3a\u5168\u7403\u9886\u5148\u7684\u7535\u5b50\u5546\u52a1\u516c\u53f8\uff0c\u6211\u4eec\u5fc5\u987b\u4fdd\u8bc1Hadoop\u4e2d\u7528\u6237\u6570\u636e\u7684\u7edd\u5bf9\u5b89\u5168\u3002\u901a\u5e38\u6211\u4eec\u7684\u5b89\u5168\u63aa\u65bd\u6839\u636e\u5982\u4e0b\u51e0\u70b9 \uff1a\u8bbf\u95ee\u63a7\u5236\u3001\u5b89\u5168\u9694\u79bb\u3001\u6570\u636e\u5206\u7c7b\u3001\u6570\u636e\u52a0\u5bc6\u4ee5\u53ca\u5b9e\u65f6\u6570\u636e\u884c\u4e3a\u76d1\u63a7\uff0c\u7136\u800c\u7ecf\u8fc7\u5e7f\u6cdb\u7684\u5c1d\u8bd5\u548c\u7814\u7a76\uff0c\u6211\u4eec\u610f\u8bc6\u5230\u6ca1\u6709\u4efb\u4f55\u5df2\u7ecf\u5b58\u5728\u7684\u4ea7\u54c1\u6216\u8005\u89e3\u51b3\u65b9\u6848\u80fd\u591f\u5145\u5206\u6ee1\u8db3\u6211\u4eec\u9762\u4e34\u6d77\u91cf\u5b9e\u65f6\u6570\u636e\u6d41\u548c\u591a\u5143\u5316\u7528\u4f8b\u573a\u666f\u4e0b\u6570\u636e\u884c\u4e3a\u76d1\u63a7\u7684\u9700\u6c42\u3002\u4e3a\u4e86\u903e\u8d8a\u8fd9\u9053\u9e3f\u6c9f\uff0ceBay\u51b3\u5b9a\u4ece\u5934\u5f00\u59cb\u6784\u5efaEagle\u3002</p>
+
+<p><img src="/images/logo_700x400.png" alt="" /></p>
+
+<blockquote>
+  <p>\u201cEagle \u662f\u5f00\u6e90\u5206\u5e03\u5f0f\u5b9e\u65f6Hadoop\u6570\u636e\u5b89\u5168\u65b9\u6848\uff0c\u652f\u6301\u6570\u636e\u884c\u4e3a\u5b9e\u65f6\u76d1\u63a7\uff0c\u80fd\u7acb\u5373\u76d1\u6d4b\u51fa\u5bf9\u654f\u611f\u6570\u636e\u7684\u8bbf\u95ee\u6216\u6076\u610f\u7684\u64cd\u4f5c\uff0c\u5e76\u7acb\u5373\u91c7\u53d6\u5e94\u5bf9\u7684\u63aa\u65bd\u201d</p>
+</blockquote>
+
+<p>\u6211\u4eec\u76f8\u4fe1Eagle\u5c06\u6210\u4e3aHadoop\u6570\u636e\u5b89\u5168\u9886\u57df\u7684\u6838\u5fc3\u7ec4\u4ef6\u4e4b\u4e00\uff0c\u56e0\u6b64\u6211\u4eec\u51b3\u5b9a\u5c06\u5b83\u7684\u529f\u80fd\u5206\u4eab\u7ed9\u6574\u4e2a\u793e\u533a\u3002\u76ee\u524d\u6211\u4eec\u5df2\u7ecf\u5c06Eagle\u6350\u8d60\u7ed9Apache\u8f6f\u4ef6\u57fa\u91d1\u4f1a\u4f5c\u4e3aApache \u5b75\u5316\u5668\u9879\u76ee\u5f00\u6e90\uff0c\u671f\u671b\u80fd\u591f\u540c\u5f00\u6e90\u793e\u533a\u4e00\u540c\u534f\u4f5c\u5f00\u53d1\uff0c\u4f7f\u5f97Eagle\u4e0d\u65ad\u53d1\u5c55\u58ee\u5927\uff0c\u5171\u540c\u6ee1\u8db3\u5f00\u6e90\u793e\u533a\u4e2d\u66f4\u5e7f\u6cdb\u7684\u9700\u6c42\u3002</p>
+
+<p>Eagle\u7684\u6570\u636e\u884c\u4e3a\u76d1\u63a7\u65b9\u6848\u53ef\u7528\u4e8e\u5982\u4e0b\u51e0\u7c7b\u5178\u578b\u573a\u666f\uff1a</p>
+
+<ul>
+  <li>\u76d1\u63a7Hadoop\u4e2d\u7684\u6570\u636e\u8bbf\u95ee\u6d41\u91cf</li>
+  <li>\u68c0\u6d4b\u975e\u6cd5\u5165\u4fb5\u548c\u8fdd\u53cd\u5b89\u5168\u89c4\u5219\u7684\u884c\u4e3a</li>
+  <li>\u68c0\u6d4b\u5e76\u9632\u6b62\u654f\u611f\u6570\u636e\u4e22\u5931\u548c\u8bbf\u95ee</li>
+  <li>\u5b9e\u73b0\u57fa\u4e8e\u7b56\u7565\u7684\u5b9e\u65f6\u68c0\u6d4b\u548c\u9884\u8b66</li>
+  <li>\u5b9e\u73b0\u57fa\u4e8e\u7528\u6237\u884c\u4e3a\u6a21\u5f0f\u7684\u5f02\u5e38\u6570\u636e\u884c\u4e3a\u68c0\u6d4b</li>
+</ul>
+
+<p>Eagle\u5177\u6709\u5982\u4e0b\u7279\u70b9\uff1a</p>
+
+<ul>
+  <li><strong>\u9ad8\u5b9e\u65f6</strong>\uff1a \u6211\u4eec\u5145\u5206\u7406\u89e3\u5b89\u5168\u76d1\u63a7\u4e2d\u9ad8\u5ea6\u5b9e\u65f6\u548c\u5feb\u901f\u53cd\u5e94\u7684\u91cd\u8981\u6027\uff0c\u56e0\u6b64\u8bbe\u8ba1Eagle\u4e4b\u521d\uff0c\u6211\u4eec\u7aed\u5c3d\u53ef\u80fd\u5730\u786e\u4fdd\u80fd\u5728\u4e9a\u79d2\u7ea7\u522b\u65f6\u95f4\u5185\u4ea7\u751f\u544a\u8b66\uff0c\u4e00\u65e6\u7efc\u5408\u591a\u79cd\u56e0\u7d20\u786e\u8ba2\u4e3a\u5371\u9669\u64cd\u4f5c\uff0c\u7acb\u5373\u91c7\u53d6\u63aa\u65bd\u963b\u6b62\u975e\u6cd5\u884c\u4e3a\u3002</li>
+  <li><strong>\u53ef\u4f38\u7f29</strong>\uff1a\u5728eBay Eagle \u88ab\u90e8\u7f72\u5728\u591a\u4e2a\u5927\u578bHadoop\u96c6\u7fa4\u4e0a\uff0c\u8fd9\u4e9b\u96c6\u7fa4\u62e5\u6709\u6570\u767ePB\u7684\u6570\u636e\uff0c\u6bcf\u5929\u67098\u4ebf\u4ee5\u4e0a\u7684\u6570\u636e\u8bbf\u95ee\u65f6\u95f4\uff0c\u56e0\u6b64Eagle\u5fc5\u987b\u5177\u6709\u5904\u7406\u6d77\u91cf\u5b9e\u65f6\u6570\u636e\u7684\u9ad8\u5ea6\u53ef\u4f38\u7f29\u80fd\u529b\u3002</li>
+  <li><strong>\u7b80\u5355\u6613\u7528</strong>\uff1a\u53ef\u7528\u6027\u4e5f\u662fEagle\u4ea7\u54c1\u7684\u6838\u5fc3\u8bbe\u8ba1\u539f\u5219\u4e4b\u4e00\u3002\u901a\u8fc7Eagle\u7684Sandbox\uff0c\u4f7f\u7528\u8005\u4ec5\u9700\u6570\u5206\u949f\u4fbf\u53ef\u4ee5\u8bbe\u7f6e\u597d\u73af\u5883\u5e76\u5f00\u59cb\u5c1d\u8bd5\u3002\u4e3a\u4e86\u4f7f\u5f97\u7528\u6237\u4f53\u9a8c\u5c3d\u53ef\u80fd\u7b80\u5355\uff0c\u6211\u4eec\u5185\u7f6e\u4e86\u8bb8\u591a\u5f88\u597d\u7684\u4f8b\u5b50\uff0c\u53ea\u9700\u7b80\u5355\u5730\u70b9\u51fb\u51e0\u6b65\u9f20\u6807\uff0c\u4fbf\u53ef\u4ee5\u8f7b\u677e\u5730\u5b8c\u6210\u7b56\u7565\u5730\u521b\u5efa\u548c\u6dfb\u52a0\u3002</li>
+  <li><strong>\u7528\u6237Profile</strong>\uff1aEagle \u5185\u7f6e\u63d0\u4f9b\u57fa\u4e8e\u673a\u5668\u5b66\u4e60\u7b97\u6cd5\u5bf9Hadoop\u4e2d\u7528\u6237\u884c\u4e3a\u4e60\u60ef\u5efa\u7acb\u7528\u6237Profile\u7684\u529f\u80fd\u3002\u6211\u4eec\u63d0\u4f9b\u591a\u79cd\u9ed8\u8ba4\u7684\u673a\u5668\u5b66\u4e60\u7b97\u6cd5\u4f9b\u4f60\u9009\u62e9\u7528\u4e8e\u9488\u5bf9\u4e0d\u540cHDFS\u7279\u5f81\u96c6\u8fdb\u884c\u5efa\u6a21\uff0c\u901a\u8fc7\u5386\u53f2\u884c\u4e3a\u6a21\u578b\uff0cEagle\u53ef\u4ee5\u5b9e\u65f6\u5730\u68c0\u6d4b\u5f02\u5e38\u7528\u6237\u884c\u4e3a\u5e76\u4ea7\u751f\u9884\u8b66\u3002</li>
+  <li><strong>\u5f00\u6e90</strong>\uff1aEagle\u4e00\u76f4\u6839\u636e\u5f00\u6e90\u7684\u6807\u51c6\u5f00\u53d1\uff0c\u5e76\u6784\u5efa\u4e8e\u8bf8\u591a\u5927\u6570\u636e\u9886\u57df\u7684\u5f00\u6e90\u4ea7\u54c1\u4e4b\u4e0a\uff0c\u56e0\u6b64\u6211\u4eec\u51b3\u5b9a\u4ee5Apache\u8bb8\u53ef\u8bc1\u5f00\u6e90Eagle\uff0c\u4ee5\u56de\u9988\u793e\u533a\uff0c\u540c\u65f6\u4e5f\u671f\u5f85\u83b7\u5f97\u793e\u533a\u7684\u53cd\u9988\u3001\u534f\u4f5c\u4e0e\u652f\u6301\u3002</li>
+</ul>
+
+<h2 id="eagle">Eagle\u6982\u89c8</h2>
+
+<p><img src="/images/posts/eagle-group.png" alt="" /></p>
+
+<h4 id="data-collection-and-storage">\u6570\u636e\u6d41\u63a5\u5165\u548c\u5b58\u50a8\uff08Data Collection and Storage\uff09</h4>
+<p>Eagle\u63d0\u4f9b\u9ad8\u5ea6\u53ef\u6269\u5c55\u7684\u7f16\u7a0bAPI\uff0c\u53ef\u4ee5\u652f\u6301\u5c06\u4efb\u4f55\u7c7b\u578b\u7684\u6570\u636e\u6e90\u96c6\u6210\u5230Eagle\u7684\u7b56\u7565\u6267\u884c\u5f15\u64ce\u4e2d\u3002\u4f8b\u5982\uff0c\u5728Eagle HDFS \u5ba1\u8ba1\u4e8b\u4ef6\uff08Audit\uff09\u76d1\u63a7\u6a21\u5757\u4e2d\uff0c\u901a\u8fc7Kafka\u6765\u5b9e\u65f6\u63a5\u6536\u6765\u81eaNamenode Log4j Appender \u6216\u8005 Logstash Agent \u6536\u96c6\u7684\u6570\u636e\uff1b\u5728Eagle Hive \u76d1\u63a7\u6a21\u5757\u4e2d\uff0c\u901a\u8fc7YARN API \u6536\u96c6\u6b63\u5728\u8fd0\u884cJob\u7684Hive \u67e5\u8be2\u65e5\u5fd7\uff0c\u5e76\u4fdd\u8bc1\u6bd4\u8f83\u9ad8\u7684\u53ef\u4f38\u7f29\u6027\u548c\u5bb9\u9519\u6027\u3002</p>
+
+<h4 id="data-processing">\u6570\u636e\u5b9e\u65f6\u5904\u7406\uff08Data Processing\uff09</h4>
+
+<p><strong>\u6d41\u5904\u7406API\uff08Stream Processing API\uff09Eagle</strong> \u63d0\u4f9b\u72ec\u7acb\u4e8e\u7269\u7406\u5e73\u53f0\u800c\u9ad8\u5ea6\u62bd\u8c61\u7684\u6d41\u5904\u7406API\uff0c\u76ee\u524d\u9ed8\u8ba4\u652f\u6301Apache Storm\uff0c\u4f46\u662f\u4e5f\u5141\u8bb8\u6269\u5c55\u5230\u5176\u4ed6\u4efb\u610f\u6d41\u5904\u7406\u5f15\u64ce\uff0c\u6bd4\u5982Flink \u6216\u8005 Samza\u7b49\u3002\u8be5\u5c42\u62bd\u8c61\u5141\u8bb8\u5f00\u53d1\u8005\u5728\u5b9a\u4e49\u76d1\u63a7\u6570\u636e\u5904\u7406\u903b\u8f91\u65f6\uff0c\u65e0\u9700\u5728\u7269\u7406\u6267\u884c\u5c42\u7ed1\u5b9a\u4efb\u4f55\u7279\u5b9a\u6d41\u5904\u7406\u5e73\u53f0\uff0c\u800c\u53ea\u9700\u901a\u8fc7\u590d\u7528\u3001\u62fc\u63a5\u548c\u7ec4\u88c5\u4f8b\u5982\u6570\u636e\u8f6c\u6362\u3001\u8fc7\u6ee4\u3001\u5916\u90e8\u6570\u636eJoin\u7b49\u7ec4\u4ef6\uff0c\u4ee5\u5b9e\u73b0\u6ee1\u8db3\u9700\u6c42\u7684DAG\uff08\u6709\u5411\u65e0\u73af\u56fe\uff09\uff0c\u540c\u65f6\uff0c\u5f00\u53d1\u8005\u4e5f\u53ef\u4ee5\u5f88\u5bb9\u6613\u5730\u4ee5\u7f16\u7a0b\u5730\u65b9\u5f0f\u5c06\u4e1a\u52a1\u903b\u8f91\u6d41\u7a0b\u548cEagle \u7b56\u7565\u5f15\u64ce\u6846\u67b6\u96c6\u6210\u8d77\u6765\u3002Eagle\u6846\u67b6\u5185\u90e8\u4f1a\u5c06\u63cf\u8ff0\u4e1a\u52a1\u903b\u8f91\u7684DAG\u7f16\u8bd1\u6210\u5e95\u5c42\u6d41\u5904\u7406\u67b6\u6784\u7684\u539f\u751f\u5e94\u7528\uff0c\u4f8b\u5982Apache Storm Topology \u7b49\uff0c\u4ece\u4e8b\u5b9e\u73b0\u5e73\u53f0\u7684\u72ec\u7acb\u3002</p>
+
+<p><strong>\u4ee5\u4e0b\u662f\u4e00\u4e2aEagle\u5982\u4f55\u5904\u7406\u4e8b\u4ef6\u548c\u544a\u8b66\u7684\u793a\u4f8b\uff1a</strong></p>
+
+<pre><code>StormExecutionEnvironment env = ExecutionEnvironmentFactory.getStorm(config); // storm env
+StreamProducer producer = env.newSource(new KafkaSourcedSpoutProvider().getSpout(config)).renameOutputFields(1) // declare kafka source
+       .flatMap(new AuditLogTransformer()) // transform event
+       .groupBy(Arrays.asList(0))  // group by 1st field
+       .flatMap(new UserProfileAggregatorExecutor()); // aggregate one-hour data by user
+       .alertWithConsumer(\u201cuserActivity\u201c,\u201duserProfileExecutor\u201c) // ML policy evaluation
+env.execute(); // execute stream processing and alert
+</code></pre>
+
+<p><strong>\u544a\u8b66\u6846\u67b6\uff08Alerting Framework\uff09Eagle</strong>\u544a\u8b66\u6846\u67b6\u7531\u6d41\u5143\u6570\u636eAPI\u3001\u7b56\u7565\u5f15\u64ce\u670d\u52a1\u63d0\u4f9bAPI\u3001\u7b56\u7565Partitioner API \u4ee5\u53ca\u9884\u8b66\u53bb\u91cd\u6846\u67b6\u7b49\u7ec4\u6210:</p>
+
+<ul>
+  <li><strong>\u6d41\u5143\u6570\u636eAPI</strong> \u5141\u8bb8\u7528\u6237\u58f0\u660e\u4e8b\u4ef6\u7684Schema\uff0c\u5305\u62ec\u4e8b\u4ef6\u7531\u54ea\u4e9b\u5c5e\u6027\u6784\u6210\u3001\u6bcf\u4e2a\u5c5e\u6027\u7684\u7c7b\u578b\uff0c\u4ee5\u53ca\u5f53\u7528\u6237\u914d\u7f6e\u7b56\u7565\u65f6\u5982\u4f55\u5728\u8fd0\u884c\u65f6\u52a8\u6001\u89e3\u6790\u5c5e\u6027\u7684\u503c\u7b49\u3002</li>
+  <li><strong>\u7b56\u7565\u5f15\u64ce\u670d\u52a1\u63d0\u4f9bAPI</strong> \u5141\u8bb8\u5f00\u53d1\u8005\u5f88\u5bb9\u6613\u5730\u4ee5\u63d2\u4ef6\u7684\u5f62\u5f0f\u6269\u5c55\u65b0\u7684\u7b56\u7565\u5f15\u64ce\u3002WSO2 Siddhi CEP \u5f15\u64ce\u662fEagle \u4f18\u5148\u9ed8\u8ba4\u652f\u6301\u7684\u7b56\u7565\u5f15\u64ce\uff0c\u540c\u65f6\u673a\u5668\u5b66\u4e60\u7b97\u6cd5\u4e5f\u53ef\u4f5c\u4e3a\u53e6\u4e00\u79cd\u7b56\u7565\u5f15\u64ce\u6267\u884c\u3002</li>
+  <li>
+    <p><strong>\u6269\u5c55\u6027</strong> Eagle\u7684\u7b56\u7565\u5f15\u64ce\u670d\u52a1\u63d0\u4f9bAPI\u5141\u8bb8\u4f60\u63d2\u5165\u65b0\u7684\u7b56\u7565\u5f15\u64ce</p>
+
+    <pre><code>  public interface PolicyEvaluatorServiceProvider {
+    public String getPolicyType();         // literal string to identify one type of policy
+    public Class&lt;? extends PolicyEvaluator&gt; getPolicyEvaluator(); // get policy evaluator implementation
+    public List&lt;Module&gt; getBindingModules();  // policy text with json format to object mapping
+  }
+  public interface PolicyEvaluator {
+    public void evaluate(ValuesArray input) throws Exception;  // evaluate input event
+    public void onPolicyUpdate(AlertDefinitionAPIEntity newAlertDef); // invoked when policy is updated
+    public void onPolicyDelete(); // invoked when policy is deleted
+  }
+</code></pre>
+  </li>
+  <li><strong>\u7b56\u7565Partitioner API</strong> \u5141\u8bb8\u7b56\u7565\u5728\u4e0d\u540c\u7684\u7269\u7406\u8282\u70b9\u4e0a\u5e76\u884c\u6267\u884c\u3002\u4e5f\u5141\u8bb8\u4f60\u81ea\u5b9a\u4e49\u7b56\u7565Partitioner\u7c7b\u3002\u8fd9\u4e9b\u529f\u80fd\u4f7f\u5f97\u7b56\u7565\u548c\u4e8b\u4ef6\u5b8c\u5168\u4ee5\u5206\u5e03\u5f0f\u7684\u65b9\u5f0f\u6267\u884c\u3002</li>
+  <li>
+    <p><strong>\u53ef\u4f38\u7f29\u6027</strong> Eagle \u901a\u8fc7\u652f\u6301\u7b56\u7565\u7684\u5206\u533a\u63a5\u53e3\u6765\u5b9e\u73b0\u5927\u91cf\u7684\u7b56\u7565\u53ef\u4f38\u7f29\u5e76\u53d1\u5730\u8fd0\u884c</p>
+
+    <pre><code>  public interface PolicyPartitioner extends Serializable {
+    int partition(int numTotalPartitions, String policyType, String policyId); // method to distribute policies
+  }
+</code></pre>
+
+    <p><img src="/images/posts/policy-partition.png" alt="" /></p>
+
+    <blockquote>
+      <p>\u53ef\u4f38\u7f29\u7684Eagle\u7b56\u7565\u6267\u884c\u6846\u67b6</p>
+    </blockquote>
+  </li>
+</ul>
+
+<p><strong>\u673a\u5668\u5b66\u4e60\u6a21\u5757:</strong>
+Eagle \u652f\u6301\u6839\u636e\u7528\u6237\u5728Hadoop\u5e73\u53f0\u4e0a\u5386\u53f2\u4f7f\u7528\u884c\u4e3a\u4e60\u60ef\u6765\u5b9a\u4e49\u884c\u4e3a\u6a21\u5f0f\u6216\u7528\u6237Profile\u7684\u80fd\u529b\u3002\u62e5\u6709\u4e86\u8fd9\u4e2a\u529f\u80fd\uff0c\u4e0d\u9700\u8981\u5728\u7cfb\u7edf\u4e2d\u9884\u5148\u8bbe\u7f6e\u56fa\u5b9a\u4e34\u754c\u503c\u7684\u60c5\u51b5\u4e0b\uff0c\u4e5f\u53ef\u4ee5\u5b9e\u73b0\u667a\u80fd\u5730\u68c0\u6d4b\u51fa\u5f02\u5e38\u7684\u884c\u4e3a\u3002Eagle\u4e2d\u7528\u6237Profile\u662f\u901a\u8fc7\u673a\u5668\u5b66\u4e60\u7b97\u6cd5\u751f\u6210\uff0c\u7528\u4e8e\u5728\u7528\u6237\u5f53\u524d\u5b9e\u65f6\u884c\u4e3a\u6a21\u5f0f\u4e0e\u5176\u5bf9\u5e94\u7684\u5386\u53f2\u6a21\u578b\u6a21\u5f0f\u5b58\u5728\u4e00\u5b9a\u7a0b\u5ea6\u7684\u5dee\u5f02\u65f6\u8bc6\u522b\u7528\u6237\u884c\u4e3a\u662f\u5426\u4e3a\u5f02\u5e38\u3002\u76ee\u524d\uff0cEagle \u5185\u7f6e\u63d0\u4f9b\u4ee5\u4e0b\u4e24\u79cd\u7b97\u6cd5\u6765\u68c0\u6d4b\u5f02\u5e38\uff0c\u5206\u522b\u4e3a\u7279\u5f81\u503c\u5206\u89e3\uff08Eigen-Value Decomposition\uff09\u548c \u5bc6\u5ea6\u4f30\u8ba1\uff08Density Estimation\uff09\u3002\u8fd9\u4e9b\u7b97\u6cd5\u4eceHDFS \u5ba1\u8ba1\u65e5\u5fd7\u4e2d\u8bfb\u53d6\u6570\u636e\uff0c\u5bf9\u6570\u636e\u8fdb\u884c\u5206\u5272\u3001\u5ba1\u67e5\u3001\u4ea4\u53c9\u5206\u6790\uff0c\u5468\u671f\u6027\u5730\u4e3a\u6bcf\u4e2a\u7528\u6237\u4f9d\u6b21\u521b\u5efaProfile \u884c\u4e3a\u6a21\u578b\u3002\u4e00\u65e6\u6a21\u578b\u751f\u6210\uff0cEagle\u7684\u5b9e\u65f6\u6d41\u7b56\u7565\u5f15\u64ce\u80fd\u591f\u8fd1\u4e4e\u5b9e\u65f6\u5730\u8bc6\u522b\u51fa\u5f02\u5e38\uff0c\u5206\u8fa8\u5f53\u524d\u7528\u6237\u7684\u884c\u4e3a\u53ef\u7591\u7684\u6216\u8005\u4e0e\u4ed6\u4eec\u7684\u5386\u53f2\u884c\u4e3a\u6a21\u578b\u4e0d\u76f8\u7b26\u3002</p>
+
+<p>\u4e0b\u56fe\u7b80\u5355\u63cf\u8ff0\u4e86\u76ee\u524dEagle\u4e2d\u7528\u6237Profile\u7684\u79bb\u7ebf\u8bad\u7ec3\u5efa\u6a21\u548c\u5728\u7ebf\u5b9e\u65f6\u76d1\u6d4b\u7684\u6570\u636e\u6d41\uff1a</p>
+
+<p><img src="/images/posts/ml-pipeline.png" alt="" /></p>
+
+<blockquote>
+  <p>\u7528\u6237Profile \u79bb\u7ebf\u8bad\u7ec3\u4ee5\u53ca\u5f02\u5e38\u76d1\u6d4b\u67b6\u6784</p>
+</blockquote>
+
+<p>\u57fa\u4e8e\u7528\u6237 Profile\u7684Eagle\u5728\u7ebf\u5b9e\u65f6\u5f02\u5e38\u76d1\u6d4b\u662f\u6839\u636eEagle\u7684\u901a\u7528\u7b56\u7565\u6846\u67b6\u5b9e\u73b0\u7684\uff0c\u7528\u6237Profile\u53ea\u662f\u88ab\u5b9a\u4e49\u4e3aEagle\u7cfb\u7edf\u4e2d\u4e00\u4e2a\u7b56\u7565\u800c\u5df2\uff0c\u7528\u6237Profile\u7684\u7b56\u7565\u662f\u901a\u8fc7\u7ee7\u627f\u81eaEagle\u7edf\u4e00\u7b56\u7565\u6267\u884c\u63a5\u53e3\u7684\u673a\u5668\u5b66\u4e60Evaluator\u6765\u6267\u884c\uff0c\u5176\u7b56\u7565\u7684\u5b9a\u4e49\u4e2d\u5305\u62ec\u5f02\u5e38\u68c0\u6d4b\u8fc7\u7a0b\u4e2d\u9700\u8981\u7684\u7279\u5f81\u5411\u91cf\u7b49\uff08\u5728\u7ebf\u68c0\u6d4b\u4e0e\u79bb\u7ebf\u8bad\u7ec3\u4fdd\u6301\u4e00\u81f4\uff09\u3002</p>
+
+<p>\u6b64\u5916\uff0cEagle \u63d0\u4f9b\u81ea\u52a8\u8bad\u7ec3\u8c03\u5ea6\u5668\uff0c\u53ef\u6839\u636e\u6587\u4ef6\u6216\u8005UI\u914d\u7f6e\u7684\u65f6\u95f4\u5468\u671f\u548c\u7c92\u5ea6\u6765\u8c03\u5ea6\u8fd9\u4e2a\u57fa\u4e8eSpark\u7684\u79bb\u7ebf\u8bad\u7ec3\u7a0b\u5e8f\uff0c\u7528\u4e8e\u6279\u91cf\u521b\u5efa\u7528\u6237Profile\u548c\u884c\u4e3a\u6a21\u578b\uff0c\u9ed8\u8ba4\u8be5\u8bad\u7ec3\u7cfb\u7edf\u4ee5\u6bcf\u6708\u7684\u9891\u7387\u66f4\u65b0\u6a21\u578b\uff0c\u6a21\u578b\u7c92\u5ea6\u4e3a\u4e00\u5206\u949f\u3002</p>
+
+<p>Eagle \u5185\u7f6e\u7684\u673a\u5668\u5b66\u4e60\u7b97\u6cd5\u57fa\u672c\u601d\u60f3\u5982\u4e0b\uff1a</p>
+
+<p><strong>\u6838\u5bc6\u5ea6\u4f30\u8ba1\u7b97\u6cd5 (Density Estimation)</strong>
+\u8be5\u7b97\u6cd5\u7684\u57fa\u672c\u601d\u60f3\u662f\u6839\u636e\u68c0\u6d4b\u7684\u8bad\u7ec3\u6837\u672c\u6570\u636e\u9488\u5bf9\u6bcf\u4e2a\u7528\u6237\u8ba1\u7b97\u51fa\u5bf9\u5e94\u7684\u6982\u7387\u5bc6\u5ea6\u5206\u5e03\u51fd\u6570\u3002\u9996\u5148\uff0c\u6211\u4eec\u5bf9\u8bad\u7ec3\u6570\u636e\u96c6\u7684\u6bcf\u4e2a\u7279\u5f81\u5747\u503c\u6807\u51c6\u5316\uff0c\u6807\u51c6\u5316\u53ef\u4ee5\u4f7f\u5f97\u6240\u6709\u6570\u636e\u96c6\u8f6c\u5316\u4e3a\u76f8\u540c\u5c3a\u5ea6\u3002\u7136\u540e\uff0c\u5728\u6211\u4eec\u7684\u968f\u673a\u53d8\u91cf\u6982\u7387\u5206\u5e03\u4f30\u8ba1\u4e2d\uff0c\u6211\u4eec\u91c7\u7528\u9ad8\u65af\u5206\u5e03\u5f0f\u51fd\u6570\u6765\u8ba1\u7b97\u6982\u7387\u5bc6\u5ea6\u3002\u5047\u8bbe\u4efb\u610f\u7279\u5f81\u5f7c\u6b64\u76f8\u4e92\u72ec\u7acb\uff0c\u90a3\u4e48\u6700\u7ec8\u7684\u9ad8\u65af\u6982\u7387\u5bc6\u5ea6\u5c31\u53ef\u4ee5\u901a\u8fc7\u5206\u89e3\u5404\u4e2a\u7279\u5f81\u7684\u6982\u7387\u5bc6\u5ea6\u800c\u8ba1\u7b97\u5f97\u5230\u3002\u5728\u7ebf\u5b9e\u65f6\u68c0\u6d4b\u9636\u6bb5\uff0c\u6211\u4eec\u53ef\u4ee5\u9996\u5148\u8ba1\u7b97\u51fa\u6bcf\u4e2a\u7528\u6237\u5b9e\u65f6\u884c\u4e3a\u7684\u6982\u7387\u3002\u5982\u679c\u7528\u6237\u51fa\u73b0\u5f53\u524d\u884c\u4e3a\u7684\u53ef\u80fd\u6027\u4f4e\u4e8e\u67d0\u4e2a\u4e34\u754c\u503c\uff0c\u6211\u4eec\u8868\u8bc6\u4e3a\u5f02\u5e38\u8b66\u544a\uff0c\u800c\u8fd9\u4e2a\u4e34\u754c\u503c\u5b8c\u5168\u7531\u79bb\u7ebf\u8bad\u7ec3\u7a0b\u5e8f\u901a\u8fc7\u79f0\u4e3a\u201c\u9a6c\u4fee\u65af\u76f8\u5173\u7cfb\u6570\u201d\uff08Mathews Correlation Coefficient\uff09\u7684\u65b9\u6cd5\u8ba1\u7b97\u800c\u5f97\u3002</p>
+
+<p><img src="/images/posts/density-estimation.png" alt="" /></p>
+
+<blockquote>
+  <p>\u5c55\u793a\u5355\u4e00\u7ef4\u5ea6\u4e0a\u7528\u6237\u884c\u4e3a\u76f4\u65b9\u56fe</p>
+</blockquote>
+
+<p><strong>\u7279\u5f81\u503c\u5206\u89e3\u7b97\u6cd5\uff08Eigen-Value Decomposition\uff09</strong>
+\u8be5\u7b97\u6cd5\u4e2d\uff0c\u6211\u4eec\u8ba4\u4e3a\u751f\u6210\u7528\u6237Profile\u7684\u4e3b\u8981\u76ee\u7684\u662f\u4e3a\u4e86\u4ece\u4e2d\u53d1\u73b0\u6709\u4ef7\u503c\u7684\u7528\u6237\u884c\u4e3a\u6a21\u5f0f\u3002\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e2a\u76ee\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u8003\u8651\u5bf9\u7279\u5f81\u4f9d\u6b21\u8fdb\u884c\u7ec4\u5408\uff0c\u7136\u540e\u89c2\u5bdf\u4ed6\u4eec\u76f8\u4e92\u4e4b\u95f4\u662f\u5982\u4f55\u5f71\u54cd\u7684\u3002\u5f53\u6570\u636e\u96c6\u975e\u5e38\u5de8\u5927\u65f6\uff0c\u6b63\u5982\u901a\u5e38\u6211\u4eec\u6240\u9047\u5230\u7684\u573a\u666f\uff0c\u7531\u4e8e\u6b63\u5e38\u6a21\u5f0f\u7684\u6570\u91cf\u975e\u5e38\u4e4b\u591a\uff0c\u4ee5\u81f3\u4e8e\u7279\u5f81\u96c6\u7684\u5f02\u5e38\u7684\u6a21\u5f0f\u5f88\u5bb9\u6613\u88ab\u5ffd\u89c6\u3002\u7531\u4e8e\u6b63\u5e38\u7684\u884c\u4e3a\u6a21\u5f0f\u901a\u5e38\u5904\u4e8e\u975e\u5e38\u4f4e\u7ef4\u7684\u5b50\u7a7a\u95f4\u5185\uff0c\u56e0\u6b64\u6211\u4eec\u4e5f\u8bb8\u53ef\u4ee5\u901a\u8fc7\u964d\u4f4e\u6570\u636e\u96c6\u7684\u7ef4\u5ea6\u6765\u66f4\u597d\u7684\u7406\u89e3\u7528\u6237\u7684\u771f\u6b63\u7684\u884c\u4e3a\u6a21\u5f0f\u3002\u8be5\u65b9\u6cd5\u540c\u6837\u53ef\u4ee5\u5bf9\u4e8e\u8bad\u7ec3\u6570\u636e\u96c6\u8fdb\u884c\u964d\u566a\u3002\u6839\u636e\u5bf9\u5927\u91cf\u7528\u6237\u7279\u5f81\u6570\u636e\u65b9\u5dee\u7684\u8fdb\u884c\u8fd0\u7b97\uff0c\u901a\u5e38\u5728\u6211\u4eec\u7684\u7528\u4f8b\u573a\u666f\u4e2d\u9009\u53d6\u65b9\u5dee\u4e3a95%\u4f5c\u4e3a\u57fa\u51c6\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u65b9\u5dee\u4e3a95%\u7684\u4e3b\u6210\u5206\u7684\u6570\u91cf\u4e3ak\uff0c\u56e0\u6b64\u6211\u4eec\u5c06\u524dk\u4e2a\u4e3b\u6210\u5206\u8ba4\u4e3a\u662f\u7528\u6237\u7684\u6b63\u5e38\u5b50\u7a7a\u95f4\uff0c\u800c\u5269\u4e0b\u7684(n-k)\u4e2a\u4e3b\u6210\u5206\u5219\u88ab\u89c6\u4e3a\u5f02\u5e38\u5b50\u7a7a\u95f4\u3002</p>
+
+<p>\u5f53\u7ebf\u5b9e\u65f6\u5f02\u5e38\u68c0\u6d4b\u65f6\uff0c\u5982\u679c\u7528\u6237\u884c\u4e3a\u6a21\u5f0f\u4f4d\u4e8e\u6b63\u5e38\u5b50\u7a7a\u95f4\u9644\u8fd1\uff0c\u5219\u8ba4\u4e3a\u8be5\u884c\u4e3a\u6b63\u5e38\uff0c\u5426\u5219\uff0c\u5982\u679c\u7528\u6237\u884c\u4e3a\u6a21\u5f0f\u4f4d\u4e8e\u5f02\u5e38\u5b50\u7a7a\u95f4\u9644\u8fd1\uff0c\u5219\u4f1a\u7acb\u5373\u62a5\u8b66\uff0c\u56e0\u4e3a\u6211\u4eec\u76f8\u4fe1\u901a\u5e38\u7528\u6237\u884c\u4e3a\u4e00\u822c\u5e94\u8be5\u4f4d\u4e8e\u6b63\u5e38\u5b50\u7a7a\u95f4\u5185\u3002\u81f3\u4e8e\u5982\u4f55\u8ba1\u7b97\u7528\u6237\u5f53\u524d\u884c\u4e3a\u63a5\u8fd1\u6b63\u5e38\u8fd8\u662f\u5f02\u5e38\u5b50\u7a7a\u95f4\uff0c\u6211\u4eec\u91c7\u7528\u7684\u662f\u6b27\u6c0f\u8ddd\u79bb\u6cd5\uff08Euclidian distance method\uff09\u3002</p>
+
+<p><img src="/images/posts/eigen-decomposition.png" alt="" /></p>
+
+<blockquote>
+  <p>\u5c55\u793a\u91cd\u8981\u7684\u7528\u6237\u884c\u4e3a\u6a21\u5f0f\u6210\u5206</p>
+</blockquote>
+
+<p><strong>Eagle \u670d\u52a1</strong></p>
+
+<p><strong>\u7b56\u7565\u7ba1\u7406\u5668</strong> Eagle\u7b56\u7565\u7ba1\u7406\u5668\u63d0\u4f9b\u4ea4\u4e92\u53cb\u597d\u7684\u7528\u6237\u754c\u9762\u548cREST API \u4f9b\u7528\u6237\u8f7b\u677e\u5730\u5b9a\u4e49\u548c\u7ba1\u7406\u7b56\u7565\uff0c\u4e00\u5207\u53ea\u9700\u51e0\u6b21\u9f20\u6807\u70b9\u51fb\u800c\u5df2\u3002Eagle\u7684\u7528\u6237\u754c\u9762\u4f7f\u5f97\u7b56\u7565\u7684\u7ba1\u7406\u3001\u654f\u611f\u5143\u6570\u636e\u7684\u6807\u8bc6\u548c\u5bfc\u5165\u3001HDFS\u6216Hive \u7684\u8d44\u6e90\u6d4f\u89c8\u4ee5\u53ca\u9884\u8b66\u4eea\u8868\u7b49\u529f\u80fd\u90fd\u975e\u5e38\u6613\u4e8e\u4f7f\u7528\u3002</p>
+
+<p>Eagle \u7b56\u7565\u5f15\u64ce\u9ed8\u8ba4\u652f\u6301WSO2\u7684Siddhi CEP\u5f15\u64ce\u548c\u673a\u5668\u5b66\u4e60\u5f15\u64ce\uff0c\u4ee5\u4e0b\u662f\u51e0\u4e2a\u57fa\u4e8eSiddi CEP\u7684\u7b56\u7565\u793a\u4f8b</p>
+
+<ul>
+  <li>
+    <p>\u5355\u4e00\u4e8b\u4ef6\u6267\u884c\u7b56\u7565\uff08\u7528\u6237\u8bbf\u95eeHive\u4e2d\u7684\u654f\u611f\u6570\u636e\u5217\uff09</p>
+
+    <pre><code>  from hiveAccessLogStream[sensitivityType=='PHONE_NUMBER'] select * insert into outputStream;
+</code></pre>
+  </li>
+  <li>
+    <p>\u57fa\u4e8e\u7a97\u53e3\u7684\u7b56\u7565\uff08\u7528\u6237\u572810\u5206\u949f\u5185\u8bbf\u95ee\u76ee\u5f55 /tmp/private \u591a\u4f59 5\u6b21\uff09</p>
+
+    <pre><code>  hdfsAuditLogEventStream[(src == '/tmp/private')]#window.externalTime(timestamp,10 min) select user, count(timestamp) as aggValue group by user having aggValue &gt;= 5 insert into outputStream;
+</code></pre>
+  </li>
+</ul>
+
+<p><strong>\u67e5\u8be2\u670d\u52a1\uff08Query Service\uff09</strong> Eagle \u63d0\u4f9b\u7c7bSQL\u7684REST API\u7528\u6765\u5b9e\u73b0\u9488\u5bf9\u6d77\u91cf\u6570\u636e\u96c6\u7684\u7efc\u5408\u8ba1\u7b97\u3001\u67e5\u8be2\u548c\u5206\u6790\u7684\u80fd\u529b\uff0c\u652f\u6301\u4f8b\u5982\u8fc7\u6ee4\u3001\u805a\u5408\u3001\u76f4\u65b9\u8fd0\u7b97\u3001\u6392\u5e8f\u3001top\u3001\u7b97\u672f\u8868\u8fbe\u5f0f\u4ee5\u53ca\u5206\u9875\u7b49\u3002Eagle\u4f18\u5148\u652f\u6301HBase \u4f5c\u4e3a\u5176\u9ed8\u8ba4\u6570\u636e\u5b58\u50a8\uff0c\u4f46\u662f\u540c\u65f6\u4e5f\u652f\u6301\u57faJDBC\u7684\u5173\u7cfb\u578b\u6570\u636e\u5e93\u3002\u7279\u522b\u662f\u5f53\u9009\u62e9\u4ee5HBase\u4f5c\u4e3a\u5b58\u50a8\u65f6\uff0cEagle\u4fbf\u539f\u751f\u62e5\u6709\u4e86HBase\u5b58\u50a8\u548c\u67e5\u8be2\u6d77\u91cf\u76d1\u63a7\u6570\u636e\u7684\u80fd\u529b\uff0cEagle \u67e5\u8be2\u6846\u67b6\u4f1a\u5c06\u7528\u6237\u63d0\u4f9b\u7684\u7c7bSQL\u67e5\u8be2\u8bed\u6cd5\u6700\u7ec8\u7f16\u8bd1\u6210\u4e3aHBase \u539f\u751f\u7684Filter \u5bf9\u8c61\uff0c\u5e76\u652f\u6301\u901a\u8fc7HBase Coprocessor\u8fdb\u4e00\u6b65\u63d0\u5347\u54cd\u5e94\u901f\u5ea6\u3002</p>
+
+<pre><code>query=AlertDefinitionService[@dataSource="hiveQueryLog"]{@policyDef}&amp;pageSize=100000
+</code></pre>
+
+<h2 id="eagleebay">Eagle\u5728eBay\u7684\u4f7f\u7528\u573a\u666f</h2>
+<p>\u76ee\u524d\uff0cEagle\u7684\u6570\u636e\u884c\u4e3a\u76d1\u63a7\u7cfb\u7edf\u5df2\u7ecf\u90e8\u7f72\u5230\u4e00\u4e2a\u62e5\u67092500\u591a\u4e2a\u8282\u70b9\u7684Hadoop\u96c6\u7fa4\u4e4b\u4e0a\uff0c\u7528\u4ee5\u4fdd\u62a4\u6570\u767ePB\u6570\u636e\u7684\u5b89\u5168\uff0c\u5e76\u6b63\u8ba1\u5212\u4e8e\u4eca\u5e74\u5e74\u5e95\u4e4b\u524d\u6269\u5c55\u5230\u5176\u4ed6\u4e0a\u5341\u4e2aHadoop\u96c6\u7fa4\u4e0a\uff0c\u4ece\u800c\u8986\u76d6eBay \u6240\u6709\u4e3b\u8981Hadoop\u768410000\u591a\u53f0\u8282\u70b9\u3002\u5728\u6211\u4eec\u7684\u751f\u4ea7\u73af\u5883\u4e2d\uff0c\u6211\u4eec\u5df2\u9488\u5bf9HDFS\u3001Hive \u7b49\u96c6\u7fa4\u4e2d\u7684\u6570\u636e\u914d\u7f6e\u4e86\u4e00\u4e9b\u57fa\u7840\u7684\u5b89\u5168\u7b56\u7565\uff0c\u5e76\u5c06\u4e8e\u5e74\u5e95\u4e4b\u524d\u4e0d\u65ad\u5f15\u5165\u66f4\u591a\u7684\u7b56\u7565\uff0c\u4ee5\u786e\u4fdd\u91cd\u8981\u6570\u636e\u7684\u7edd\u5bf9\u5b89\u5168\u3002\u76ee\u524d\uff0cEagle\u7684\u7b56\u7565\u6db5\u76d6\u591a\u79cd\u6a21\u5f0f\uff0c\u5305\u62ec\u4ece\u8bbf\u95ee\u6a21\u5f0f\u3001\u9891\u7e41\u8bbf\u95ee\u6570\u636e\u96c6\uff0c\u9884\u5b9a\u4e49\u67e5\u8be2\u7c7b\u578b\u3001Hive \u8868\u548c\u5217\u3001HBase \u8868\u4ee5\u53ca\u57fa\u4e8e\u673a\u5668\u5b66\u4e60\u6a21\u578b\u751f\u6210\u7684\u7528\u6237Profile\u76f8\u5173\u7684\u6240\u6709\u7b56\u7565\u7b49\u3002\u540c\u65f6\uff0c\u6211\u4eec\u4e5f\u6709\u5e7f\u6cdb\u7684\u7b56\u7565\u6765\u9632\u6b62\u6570\u636e\u7684\u4e22\u5931\u3001\u6570\u636e\u88ab\u62f7\u8d1d\u5230\u4e0d\u5b89\u5168\u5730\u70b9\u3001\u654f\u611f\u6570\u636e\u88ab\u672a\u6388\u6743\u533a\u57df\u8bbf\u95ee\u7b49\u3002Eagle\u7b56\u7565\u5b9a\u4e49\u4e0a\u6781\u5927\u7684\u7075\u6d3b\u6027\u548c\u6269\u5c55\u6027\u4f7f\u5f97\u6211\u4eec\u672a\u6765\u53ef\u4ee5\u8f7b\u6613\u5730\u7ee7\u7eed\u6269\u5c55\u66f4\u591a\u66f4\u590d\u6742\u7684\u7b56\u7565\u4ee5\u652f\u6301\u66f4\u591a\u591a\u5143\u5316\u7684
 \u7528\u4f8b\u573a\u666f\u3002</p>
+
+<h2 id="section-1">\u540e\u7eed\u8ba1\u5212</h2>
+<p>\u8fc7\u53bb\u4e24\u5e74\u4e2d\uff0c\u5728eBay \u9664\u4e86\u88ab\u7528\u4e8e\u6570\u636e\u884c\u4e3a\u76d1\u63a7\u4ee5\u5916\uff0cEagle \u6838\u5fc3\u6846\u67b6\u8fd8\u88ab\u5e7f\u6cdb\u7528\u4e8e\u76d1\u63a7\u8282\u70b9\u5065\u5eb7\u72b6\u51b5\u3001Hadoop\u5e94\u7528\u6027\u80fd\u6307\u6807\u3001Hadoop \u6838\u5fc3\u670d\u52a1\u4ee5\u53ca\u6574\u4e2aHadoop\u96c6\u7fa4\u7684\u5065\u5eb7\u72b6\u51b5\u7b49\u8bf8\u591a\u9886\u57df\u3002\u6211\u4eec\u8fd8\u5efa\u7acb\u4e00\u7cfb\u5217\u7684\u81ea\u52a8\u5316\u673a\u5236\uff0c\u4f8b\u5982\u8282\u70b9\u4fee\u590d\u7b49\uff0c\u5e2e\u52a9\u6211\u4eec\u5e73\u53f0\u90e8\u95e8\u6781\u5927\u5f97\u8282\u7701\u4e86\u6211\u4eec\u4eba\u5de5\u52b3\u529b\uff0c\u5e76\u6709\u6548\u5730\u63d0\u5347\u4e86\u6574\u4e2a\u96c6\u7fa4\u8d44\u6e90\u5730\u5229\u7528\u7387\u3002</p>
+
+<p>\u4ee5\u4e0b\u662f\u6211\u4eec\u76ee\u524d\u6b63\u5728\u5f00\u53d1\u4e2d\u5730\u4e00\u4e9b\u7279\u6027\uff1a</p>
+
+<ul>
+  <li>\u6269\u5c55\u673a\u5668\u5b66\u4e60\u6a21\u578b\u5bf9Hive\u548cHBase\u652f\u6301</li>
+  <li>\u63d0\u4f9b\u9ad8\u5ea6\u53ef\u6269\u5c55\u7684API\uff0c\u4ee5\u65b9\u4fbf\u96c6\u76ee\u524d\u4e1a\u754c\u5e7f\u6cdb\u4f7f\u7528\u7684\u5176\u4ed6\u76d1\u63a7\u9884\u8b66\u5e73\u53f0\u6216\u8005\u5de5\u5177\uff0c\u5982Ganglia\u548cNagios\u7b49\uff0c\u540c\u65f6\u652f\u6301\u654f\u611f\u6570\u636e\u7684\u5bfc\u5165\uff0c\u5982\u4e0eDataguise \u96c6\u6210\u7b49\u3002</li>
+  <li>\u6b64\u5916\uff0c\u6211\u4eec\u6b63\u5728\u79ef\u6781\u6574\u7406\u5176\u4ed6Hadoop \u96c6\u7fa4\u76d1\u63a7\u6a21\u5757\uff0c\u671f\u671b\u5728\u540e\u7eed\u53d1\u5e03\u4e2d\u5f00\u6e90\u7ed9\u793e\u533a\uff0c\u4f8b\u5982
+    <ul>
+      <li>HBase \u76d1\u63a7</li>
+      <li>Hadoop \u4f5c\u4e1a\u6027\u80fd\u76d1\u63a7</li>
+      <li>Hadoop \u8282\u70b9\u76d1\u63a7</li>
+    </ul>
+  </li>
+</ul>
+
+<h2 id="section-2">\u5173\u4e8e\u4f5c\u8005</h2>
+<p><a href="https://github.com/haoch">\u9648\u6d69</a>\uff0cApache Eagle Committer \u548c PMC \u6210\u5458\uff0ceBay \u5206\u6790\u5e73\u53f0\u57fa\u7840\u67b6\u6784\u90e8\u95e8\u9ad8\u7ea7\u8f6f\u4ef6\u5de5\u7a0b\u5e08\uff0c\u8d1f\u8d23Eagle\u7684\u4ea7\u54c1\u8bbe\u8ba1\u3001\u6280\u672f\u67b6\u6784\u3001\u6838\u5fc3\u5b9e\u73b0\u4ee5\u53ca\u5f00\u6e90\u793e\u533a\u63a8\u5e7f\u7b49\u3002</p>
+
+<p>\u611f\u8c22\u4ee5\u4e0b\u6765\u81eaApache Eagle\u793e\u533a\u548ceBay\u516c\u53f8\u7684\u8054\u5408\u4f5c\u8005\u4eec\u5bf9\u672c\u6587\u7684\u8d21\u732e\uff1a</p>
+
+<ul>
+  <li><a href="https://github.com/yonzhang">\u5f20\u52c7</a>\uff0cApache Eagle Committer\u548cPMC\uff0ceBay \u8d44\u6df1\u67b6\u6784\u5e08</li>
+  <li><a href="https://github.com/sunlibin">\u5b59\u7acb\u658c</a>\uff0cApache Eagle Committer\u548cPMC\uff0ceBay \u8f6f\u4ef6\u5de5\u7a0b\u5e08</li>
+  <li><a href="https://github.com/zombiej">\u848b\u5409\u9e9f</a>\uff0cApache Eagle Committer\u548cPMC\uff0ceBay \u8f6f\u4ef6\u5de5\u7a0b\u5e08</li>
+  <li><a href="https://github.com/qingwen220">\u8d75\u6674\u96ef</a>\uff0cApache Eagle Committer\u548cPMC\uff0ceBay \u8f6f\u4ef6\u5de5\u7a0b\u5e08</li>
+</ul>
+
+<p>eBay \u5206\u6790\u5e73\u53f0\u57fa\u7840\u67b6\u6784\u90e8\uff08Analytics Data Infrastructure\uff09\u662feBay\u7684\u5168\u7403\u6570\u636e\u53ca\u5206\u6790\u57fa\u7840\u67b6\u6784\u90e8\u95e8\uff0c\u8d1f\u8d23eBay\u5728\u6570\u636e\u5e93\u3001\u6570\u636e\u4ed3\u5e93\u3001Hadoop\u3001\u5546\u52a1\u667a\u80fd\u4ee5\u53ca\u673a\u5668\u5b66\u4e60\u7b49\u5404\u4e2a\u6570\u636e\u5e73\u53f0\u5f00\u53d1\u3001\u7ba1\u7406\u7b49,\u652f\u6301eBay\u5168\u7403\u5404\u90e8\u95e8\u8fd0\u7528\u9ad8\u7aef\u7684\u6570\u636e\u5206\u6790\u89e3\u51b3\u65b9\u6848\u4f5c\u51fa\u53ca\u65f6\u6709\u6548\u7684\u4f5c\u4e1a\u51b3\u7b56\uff0c\u4e3a\u904d\u5e03\u5168\u7403\u7684\u4e1a\u52a1\u7528\u6237\u63d0\u4f9b\u6570\u636e\u5206\u6790\u89e3\u51b3\u65b9\u6848\u3002</p>
+
+<h2 id="section-3">\u53c2\u8003\u8d44\u6599</h2>
+
+<ul>
+  <li>Apache Eagle \u6587\u6863\uff1a<a href="http://goeagle.io">http://goeagle.io</a></li>
+  <li>Apache Eagle \u6e90\u7801\uff1a<a href="http://github.com/apache/incubator-eagle">http://github.com/apache/incubator-eagle</a></li>
+  <li>Apache Eagle \u9879\u76ee\uff1a<a href="http://incubator.apache.org/projects/eagle.html">http://incubator.apache.org/projects/eagle.html</a></li>
+</ul>
+
+<h2 id="section-4">\u5f15\u7528\u94fe\u63a5</h2>
+<ul>
+  <li><strong>CSDN</strong>: <a href="http://www.csdn.net/article/2015-10-29/2826076">http://www.csdn.net/article/2015-10-29/2826076</a></li>
+  <li><strong>OSCHINA</strong>: <a href="http://www.oschina.net/news/67515/apache-eagle">http://www.oschina.net/news/67515/apache-eagle</a></li>
+  <li><strong>China Hadoop Summit</strong>: <a href="http://mp.weixin.qq.com/s?__biz=MzA4MTkyODIzMA==&amp;mid=400298495&amp;idx=1&amp;sn=954031ba8065481c31a3464e2c8a26a5&amp;scene=1&amp;srcid=1102zgGQzedckCmNrfRwounA&amp;uin=MjYyNzgwNDQwMA%3D%3D&amp;key=04dce534b3b035efe14d53fcf6e7062a63179003551e59fad5cf8584703fcaa38779cc4c93cbf931c25f6b34cb2d7653&amp;devicetype=iMac+MacBookPro11%2C3+OSX+OSX+10.10.5+build(14F1021)&amp;version=11020201&amp;lang=en&amp;pass_ticket=TC%2Bod2ZeFnhmci%2Bi4%2BxTTVD6moUrNFX8RXppzoQSa%2BXO3C7evUDs6njeYbsYyCFD">http://mp.weixin.qq.com/s?\u2026</a></li>
+  <li><strong>Apache Kylin</strong>: <a href="http://mp.weixin.qq.com/s?__biz=MzAwODE3ODU5MA==&amp;mid=400287781&amp;idx=1&amp;sn=343b2b29a37f8ed53a7ecb0465faf515&amp;scene=0&amp;uin=MjYyNzgwNDQwMA%3D%3D&amp;key=04dce534b3b035ef73f964362ac4c43d452ab1b208eb357c488dfcd7d69209e060cfe01e9b146752517d2096f6751370&amp;devicetype=iMac+MacBookPro11%2C3+OSX+OSX+10.10.5+build(14F1021)&amp;version=11020201&amp;lang=en&amp;pass_ticket=TC%2Bod2ZeFnhmci%2Bi4%2BxTTVD6moUrNFX8RXppzoQSa%2BXO3C7evUDs6njeYbsYyCFD">http://mp.weixin.qq.com/s?\u2026</a></li>
+</ul>
+
+<hr />
+
+<p><em>\u672c\u6587\u6765\u81eaApache Eagle\u7f51\u7ad9\uff1a<a href="http://goeagle.io">http://goeagle.io</a>\uff0c\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u548c\u6765\u6e90\u3002</em></p>
+
+  </article>
+</div>
+
+      </div>
+    </div>
+    <!-- footer start -->
+<div class="footerwrapper">
+  <div class="container">
+    <div class="row">
+      <div class="col-md-12"><div style="margin-left:auto; margin-right:auto; text-align:center;font-size: 12px">
+<div>
+</div>
+<div>
+<a href="http://www.apache.org">
+<img id="asf-logo" alt="Apache Software Foundation" src="/images/apache-logo-small.gif">
+</a>
+</div>
+<div>
+Copyright � 2015 <a href="http://www.apache.org">The Apache Software Foundation</a>, Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
+</div>
+<div>
+Apache Eagle, Eagle, Apache Hadoop, Hadoop, Apache HBase, HBase, Apache Hive, Hive, Apache Ambari, Ambari, Apache Spark, Spark, Apache Kafka, Kafka, Apache Storm, Storm, Apache Maven, Maven, Apache Tomcat, Tomcat, Apache Derby, Derby, Apache Cassandra, Cassandra, Apache ZooKeeper, ZooKeeper, Apache, the Apache feather logo, and the Apache project logo are trademarks of The Apache Software Foundation.
+</div>
+      </div></div>
+    </div>
+  </div>
+</div>
+<!-- footer end --> 
+
+<!-- JavaScripts -->
+<script src="/js/jquery-1.11.1.min.js"></script>
+<script src="/js/jquery.singlePageNav.js"></script>
+<script src="/js/jquery.flexslider.js"></script>
+<script src="/js/modernizr.min.js"></script>
+<script src="/js/svg.js"></script>
+<script>
+    /************** FlexSlider *********************/
+    $('.flexslider').flexslider({
+        animation: "fade",
+        directionNav: false
+    });
+</script>
+  </body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/about.md
----------------------------------------------------------------------
diff --git a/eagle-site/about.md b/eagle-site/about.md
new file mode 100644
index 0000000..fca4517
--- /dev/null
+++ b/eagle-site/about.md
@@ -0,0 +1,11 @@
+---
+layout: page
+title: About
+permalink: /about/
+---
+
+This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](http://jekyllrb.com/)
+
+You can find the source code for the Jekyll new theme at: [github.com/jglovier/jekyll-new](https://github.com/jglovier/jekyll-new)
+
+You can find the source code for Jekyll at [github.com/jekyll/jekyll](https://github.com/jekyll/jekyll)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/ambari-plugin-install.md
----------------------------------------------------------------------
diff --git a/eagle-site/ambari-plugin-install.md b/eagle-site/ambari-plugin-install.md
new file mode 100644
index 0000000..f5d1df7
--- /dev/null
+++ b/eagle-site/ambari-plugin-install.md
@@ -0,0 +1,51 @@
+---
+layout: doc
+title:  "Install Apache Eagle Ambari Plugin"
+permalink: /docs/ambari-plugin-install.html
+---
+
+Assume Apache Eagle (called Eagle in the following) package has been copied and exacted under /usr/hdp/current/eagle.
+
+> **WARNING**: the following instructions work in sandbox currently.
+
+
+### Pre-requisites
+
+1. Create a Kafka[^KAFKA] topic if you have not. Here is an example command.
+
+       $ /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic sandbox_hdfs_audit_log
+
+2. Stream HDFS log data to Kafka, and refer to [here](/docs/import-hdfs-auditLog.html) on how to do it .
+
+### Installation Steps
+
+1. Start dependent services Storm[^STORM], Spark[^SPARK], HBase[^HBASE] & Kafka via Ambari[^AMBARI].
+
+2. Install Eagle Ambari plugin
+
+       $ /usr/hdp/current/eagle/bin/eagle-ambari.sh install
+
+3. Restart [Ambari](http://127.0.0.1:8000/) click on disable and enable Ambari back.
+
+4. Add Eagle Service to Ambari. Click on "Add Service" on Ambari Main page
+
+    ![AddService](/images/docs/add-service.png "AddService")
+    ![Eagle Services](/images/docs/eagle-service-success.png "Eagle Services")
+
+5. Add Policies and meta data required by running the below script.
+
+       $ cd <eagle-home>
+       $ examples/sample-sensitivity-resource-create.sh
+       $ examples/sample-policy-create.sh
+
+
+
+---
+
+#### *Footnotes*
+
+[^HBASE]:*Apache HBase.*
+[^AMBARI]:*All mentions of "ambari" on this page represent Apache Ambari.*
+[^SPARK]:*Apache Spark.*
+[^KAFKA]:*All mentions of "kafka" on this page represent Apache Kafka.*
+[^STORM]:*Apache Storm.*

http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/application-configuration.md
----------------------------------------------------------------------
diff --git a/eagle-site/application-configuration.md b/eagle-site/application-configuration.md
new file mode 100644
index 0000000..5619e2a
--- /dev/null
+++ b/eagle-site/application-configuration.md
@@ -0,0 +1,85 @@
+---
+layout: doc
+title:  "Application Configuration"
+permalink: /docs/configuration.html
+---
+
+Apache Eagle (called Eagle in the following) requires you to create a configuration file under `$EAGLE_HOME/conf/` for each application. Basically, there are some common properties shared, e.g., envContextConfig, eagleProps, and dynamicConfigSource. While dataSourceConfig differs from application to application.
+
+In this page we take the following two application as examples
+
+* HDFS Audit Log Configuration
+* Hive[^HIVE] Query Log Configuration
+
+
+### HDFS Audit Log Configuration
+---
+
+ Class            ||| Property Name    ||| Description
+ -----------------||| -------------    ||| -----------
+ envContextConfig |||   env            ||| currently only Storm[^STORM] is supported.
+                  |||   mode           ||| local or cluster
+                  |||   topologyName   ||| in the format {site}-{topology-name}
+                  |||   stormConfigFile    ||| a storm configuration file for overriding some Storm properties
+                  |||  parallelismConfig   ||| parallelism for both Kafka[^KAFKA] consumer and alert executors
+dataSourceConfig  |||  **topic**           ||| Kafka topic for audit log streaming, make sure it exists
+                  ||| **zkConnection***    |||ZooKeeper[^ZOOKEEPER] connection string, you can also specify multiple hosts in the form hostname1:port1,hostname2:port2, ...
+                  |||zkConnectionTimeoutMS ||| zookeeper connection timeout
+                  |||   fetchSize          ||| kafka maximal message fetching size, default value is 1048586
+                  |||   deserializerClass  ||| org.apache.eagle.security.auditlog.HdfsAuditLogKafkaDeserializer 
+                  ||| transactionZKServers ||| ZooKeeper servers, you can also specify multiple hosts in the form hostname1,hostname2,hostname3
+                  ||| transactionZKPort    ||| ZooKeeper connection port
+                  |||   transactionZKRoot  ||| ZooKeeper chroot path for Eagle
+                  ||| consumerGroupId      ||| only for hdfsAuditLog
+                  ||| transactionStateUpdateMS   ||| default is 2000
+alertExecutorConfigs ||| parallelism             ||| default is 1
+                  |||   partitioner              ||| default value is eagle.alert.policy.DefaultPolicyPartitioner
+                  |||   needValidation           ||| true or false
+eagleProps        |||   **site***                ||| site name, such as sandbox, datacenter1, datacenter2
+                  |||   dataSource               ||| hdfsAuditLog
+                  |||   dataJoinPollIntervalSec  ||| time interval for retrieving data from HBase[^HBASE]
+                  |||   **mailHost***                 ||| SMTP server
+                  |||   **mailSmtpPort***             ||| SMTP server port, default is 25
+                  |||   mailDebug                ||| true or false
+                  |||   eagleService.host        ||| Tomcat[^TOMCAT] server host, default is localhost
+                  |||   eagleService.port        ||| 9099
+                  |||   eagleService.username    ||| admin
+                  |||   eagleService.password    ||| secret
+ dynamicConfigSource ||| enabled                 ||| true or false, default is true
+                     |||   initDelayMillis       ||| default is 0
+                     |||   delayMillis           ||| default is 30000
+
+
+<br />
+
+### Hive Query Log Configuration
+---
+
+ Class            ||| Property Name           ||| Description
+ -----------------||| -------------           ||| -----------
+ envContextConfig |||  same as HDF            |||
+ dataSourceConfig |||  flavor                 ||| stormrunning
+ |||   **zkQuorum***                               ||| ZooKeeper connection string,  you can also specify multiple hosts in the form hostname1:port1,hostname2:port2,hostname3:port3
+ |||   **zkRoot***                                 ||| ZooKeeper chroot path for Eagle to store data, default is /jobrunning
+ |||   zkSessionTimeoutMs                     ||| ZooKeeper session timeout, default is 15000
+ |||   zkRetryTimes                           ||| ZooKeeper retry times, default is 3
+ |||   zkRetryInterval                        ||| default is 2000
+ |||   **RMEndPoints***                       ||| yarn.resourcemanager.webapp.address. Default value is http://localhost:8088/
+ |||   **HSEndPoint***                        ||| mapreduce.jobhistory.webapp.address. Default values is http://localhost:19888/
+ |||   partitionerCls                         ||| eagle.job.DefaultJobPartitionerImpl
+ alertExecutorConfigs ||| same as HDFS        |||
+ eagleProps           ||| same as HDFS        |||
+ dynamicConfigSource  ||| same as HDFS        |||
+
+<br />
+
+---
+
+#### *Footnotes*
+
+[^HBASE]:*Apache HBase.*
+[^HIVE]:*All mentions of "hive" on this page represent Apache Hive.*
+[^KAFKA]:*All mentions of "kafka" on this page represent Apache Kafka.*
+[^STORM]:*All mentions of "storm" on this page represent Apache Storm.*
+[^TOMCAT]:*Apache Tomcat.*
+[^ZOOKEEPER]:*All mentions of "zookeeper" on this page represent Apache ZooKeeper.*

http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/cloudera-integration.md
----------------------------------------------------------------------
diff --git a/eagle-site/cloudera-integration.md b/eagle-site/cloudera-integration.md
new file mode 100644
index 0000000..52e0eda
--- /dev/null
+++ b/eagle-site/cloudera-integration.md
@@ -0,0 +1,166 @@
+---
+layout: doc
+title:  "Cloudera Integration"
+permalink: /docs/cloudera-integration.html
+---
+
+*Since Eagle 0.4.0*
+
+Configuring Apache Eagle on Cloudera is very similar to configuring it on Hortonworks, but still there are some difference. 
+This tutorial is to address these issues before you continue to follow the tutorials originally prepared for Hortonworks.
+
+### Prerequisites
+
+To get Apache Eagle works on Cloudera, we need:
+
+* Zookeeper (installed through Cloudera Manager)
+* Kafka (installed through Cloudera Manager)
+* Storm (``0.9.x`` or ``0.10.x``, installed manually)
+* Logstash (``2.X``, installed manually on NameNode)
+
+
+### Kafka
+
+#### Configuration
+
+There are two configurations needed to be mentioned: 
+
+* Open Cloudera Manager and open "kafka" configuration, then set ``\u201czookeeper Root\u201d`` to ``\u201c/\u201d``.
+
+* If Kafka cannot be started successfully, check kafka\u2019s log. If stack trace shows: ``\u201cjava.lang.OutOfMemoryError: Java heap space\u201d``. Increase heap size by setting ``"KAFKA_HEAP_OPTS"``in ``/bin/kafka-server-start.sh``.
+
+Example:
+
+~~~
+                  export KAFKA_HEAP_OPTS="-Xmx2G -Xms2G"
+~~~
+
+
+
+#### Verification
+
+- Step1: create a kafka topic (here I created a topic called \u201ctest\u201d, which will be used in  logstash configuration file to receive hdfsAudit log messages from Cloudera.
+
+~~~
+bin/kafka-topics.sh --create --zookeeper 127.0.0.1:2181 --replication-factor 1 --partitions 1 --topic test
+~~~
+
+- Step2: check if topic has been created successfully.
+
+~~~
+bin/kafka-topics.sh --list --zookeeper 127.0.0.1:2181
+~~~
+
+this command will show all created topics.
+
+- Step3: open two terminals, start \u201cproducer\u201d and \u201cconsumer\u201d separately.
+
+~~~
+/usr/bin/kafka-console-producer --broker-list hostname:9092 --topic test
+/usr/bin/kafka-console-consumer --zookeeper hostname:2181 --topic test
+~~~
+
+- Step4: type in some message in producer. If consumer can receive the messages sent from producer, then kafka is working fine. Otherwise please check the configuration and logs to identify the root cause of issues.
+
+
+
+### Logstash
+
+#### Installation
+
+You can follow [logstash online doc](https://www.elastic.co/downloads/logstash) to download and install logstash on your machine:
+
+Or you can install it through ``yum`` if you are using centos:
+
+- download and install the public signing key:
+
+~~~
+rpm --import  https://packages.elastic.co/GPG-KEY-elasticsearch
+~~~
+
+- Add the following lines in ``/etc/yum.repos.d/`` directory in a file with a ``.repo`` suffix, for example ``logstash.repo``.
+
+~~~
+[logstash-2.3]
+name=Logstash repository for 2.3.x packages
+baseurl=https://packages.elastic.co/logstash/2.3/centos
+gpgcheck=1
+gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
+enabled=1
+~~~
+
+- Then install it using ``yum``: 
+
+~~~
+yum install logstash
+~~~
+
+#### Create conf file
+
+Follow [Apache Eagle online documentation](https://github.com/apache/incubator-eagle/blob/branch-0.4/eagle-assembly/src/main/docs/logstash-kafka-conf.md) to create logstash configuration file for Apache Eagle.
+
+#### Start logstash
+
+~~~
+bin/logstash -f conf/first-pipeline.conf
+~~~
+
+#### Verification
+
+Open a terminal and start a kafka consumer to see if it can receive the messages sent by logstash, if there is no message, double check the configuration parameters in conf file. Otherwise logstash is all set.
+
+### Apache Storm
+As Apache Storm is not in Cloudera\u2019s stack, we need to install Storm manually.
+
+#### Installation
+
+Download Apache Storm from [here](http://storm.apache.org/downloads.html), the version you choose should be ``0.10.x`` or ``0.9.x`` release.
+Then follow [Apache Storm online doc](http://storm.apache.org/releases/0.10.0/Setting-up-a-Storm-cluster.html)) to install Apache Storm on your cluster.
+
+In ``/etc/profile``, add this: 
+
+~~~
+export PATH=$PATH:/opt/apache-storm-0.10.1/bin/
+~~~
+
+save the profile and then type:
+
+~~~
+source /etc/profile 
+~~~
+
+to make it work.
+
+#### Configuration
+
+In ``storm/conf/storm.yaml``, change the hostname to your own host.
+
+#### Start Apache Storm
+
+In Termial, type:
+
+~~~
+$: storm nimbus
+$: storm supervisor
+$: storm UI
+~~~
+
+#### Verification
+
+Open storm UI in your browser, default URL is : ``http://hostname:8080/index.html``.
+
+### Apache Eagle
+
+To download and install Apache Eagle, please refer to  [Get Started with Sandbox.](http://eagle.incubator.apache.org/docs/quick-start.html) .
+
+One thing need to mention is: in ``\u201c/bin/eagle-topology.sh\u201d``, line 102:
+
+~~~			
+			storm_ui=http://localhost:8080
+~~~
+
+If you are not using the default port number, change this to your own Storm UI url.
+
+I know it takes time to finish these configuration, but now it is time to have fun! 
+Just try ``HDFS Data Activity Monitoring`` with ``Demo`` listed in [HDFS Data Activity Monitoring.](http://eagle.incubator.apache.org/docs/hdfs-data-activity-monitoring.html)
+

http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/community.md
----------------------------------------------------------------------
diff --git a/eagle-site/community.md b/eagle-site/community.md
new file mode 100644
index 0000000..0ea6358
--- /dev/null
+++ b/eagle-site/community.md
@@ -0,0 +1,95 @@
+---
+layout: doc
+title:  "Apache Eagle Community" 
+permalink: /docs/community.html
+---
+### Mailing Lists
+
+|Name|||||Email|||||Subscribe|Unsubscribe|Archive|
+|----|||||-----|||||---------|-----------|-------|
+| User Mailling List|||||[user@eagle.apache.org](mailto:user@eagle.apache.org)|||||[subscribe](mailto:user-subscribe@eagle.apache.org)|[unsubscribe](mailto:user-unsubscribe@eagle.apache.org)| [eagle-user](http://mail-archives.apache.org/mod_mbox/eagle-user/)|
+| Dev Mailling List|||||[dev@eagle.apache.org](mailto:dev@eagle.apache.org)|||||[subscribe](mailto:dev-subscribe@eagle.apache.org)|[unsubscribe](mailto:dev-unsubscribe@eagle.apache.org)| [eagle-dev](http://mail-archives.apache.org/mod_mbox/eagle-dev/)|
+| Issues Mailling List|||||[issues@eagle.apache.org](mailto:issues@eagle.apache.org)|||||[subscribe](mailto:issues-subscribe@eagle.apache.org)|[unsubscribe](mailto:issues-unsubscribe@eagle.apache.org)| [eagle-issues](http://mail-archives.apache.org/mod_mbox/eagle-issues/)|
+| Commits Mailling List|||||[commits@eagle.apache.org](mailto:commits@eagle.apache.org)|||||[subscribe](mailto:commits-subscribe@eagle.apache.org)|[unsubscribe](mailto:commits-unsubscribe@eagle.apache.org)| [eagle-commits](http://mail-archives.apache.org/mod_mbox/eagle-commits/)|
+
+
+### Issue Tracker
+
+[https://issues.apache.org/jira/browse/EAGLE](https://issues.apache.org/jira/browse/EAGLE)
+
+### Eagle Team
+
+#### PMC Members
+
+* [Edward Zhang (\u5f20\u52c7)](https://github.com/yonzhang)
+* [Hao Chen\uff08\u9648\u6d69\uff09](https://github.com/haoch)
+* [Libin Sun\uff08\u5b59\u7acb\u658c\uff09](https://github.com/sunlibin)
+* [Jilin Jiang\uff08\u5c06\u5409\u9e9f\uff09](https://github.com/zombiej)
+* [Qingwen Zhao\uff08\u8d75\u6674\u96ef\uff09](https://github.com/qingwen220)
+* [Hemanth Dendukuri](https://github.com/hdendukuri)
+* [Senthil Kumar](https://github.com/senthilec566)
+* [Arun Manoharan](https://github.com/armanoharan)
+* [Adunuthula, Seshu](https://github.com/seshuad)
+* [Michael Wu (\u6b66\u5b50\u626c)](https://github.com/anyway1021)
+
+#### Commiters
+
+* [Edward Zhang (\u5f20\u52c7)](https://github.com/yonzhang)
+* [Hao Chen\uff08\u9648\u6d69\uff09](https://github.com/haoch)
+* [Chaitali Gupta](https://github.com/chaitaligupta)
+* [Libin Sun\uff08\u5b59\u7acb\u658c\uff09](https://github.com/sunlibin)
+* [Jilin Jiang\uff08\u5c06\u5409\u9e9f\uff09](https://github.com/zombiej)
+* [Qingwen Zhao\uff08\u8d75\u6674\u96ef\uff09](https://github.com/qingwen220)
+* [Hemanth Dendukuri](https://github.com/hdendukuri)
+* [Senthil Kumar](https://github.com/senthilec566)
+* [Arun Manoharan](https://github.com/armanoharan)
+* [Adunuthula, Seshu](https://github.com/seshuad)
+* [Liangfei Su (\u82cf\u826f\u98de)](https://github.com/RalphSu)
+* [Daniel Zhou (\u5468\u8fbe)](https://github.com/DadanielZ)
+* [Michael Wu (\u6b66\u5b50\u626c)](https://github.com/anyway1021)
+* [Jinhu Wu (\u5434\u91d1\u864e)](https://github.com/wujinhu)
+* [Jijun Tang](https://github.com/r7raul1984)
+
+#### Contributors
+
+* [Prasad Mujumdar](https://github.com/pmujumdar)
+* [Jaspaul Chahal](https://github.com/Jashchahal)
+* [Huizhi Lu](https://github.com/pkuwm)
+* [Jing Ge](https://github.com/JingGe)
+* [boscodurai](https://github.com/boscodurai)
+* [Ju He](https://github.com/joe-hj)
+* [Chang Chen](https://github.com/baibaichen)
+* [Huizhi Lu](https://github.com/pkuwm)
+* [koone](https://github.com/koone)
+* [qinzhaokun](https://github.com/qinzhaokun)
+* [mizeng](https://github.com/mizeng)
+* [chitin](https://github.com/chitin)
+
+### Project History
+
+* **Oct 20th, 2015** Eagle was officially open sourced by [eBay Inc.](http://www.ebay.com).
+
+### Credits
+
+* Thanks [eBay Inc.](http://www.ebay.com) to donated this project to open source community, first announement at [eBay Techblog](http://www.ebaytechblog.com/2015/10/23/eagle-is-your-hadoop-data-secured/).
+
+### Social Network
+
+* **Twitter**: [@TheApacheEagle](https://twitter.com/TheApacheEagle)
+* **Wechat**: Apache_Eagle
+
+### Events and Meetups[^HADOOP]
+
+**Conferences**
+
+* [**IEEE BigData 2015**](http://cci.drexel.edu/bigdata/bigdata2015/): [Eagle: User Profile-based Anomaly Detection in Hadoop Clusters](http://cci.drexel.edu/bigdata/bigdata2015/APaper.html) by [Chaitali Gupta](https://github.com/chaitaligupta) and [Edward Zhang](https://github.com/yonzhang) on Oct 29 - Nov 01, 2015 at [Santa Clara, CA, USA](https://www.google.com/maps/place/Santa+Clara,+CA)
+* [**China Hadoop Summit 2015**](http://www.chinahadoop.com/english): [Hadoop Eagle - Real Time Monitoring Platform](http://www.slideshare.net/haoch/hadoop-eaglev4) by [Hao Chen](https://github.com/haoch) on July 23 - 24, 2015 at [Shanghai, China](https://www.google.com/maps/place/Shanghai,+China)
+* [**Hadoop Summit 2015**](http://2015.hadoopsummit.org/san-jose/): [Hadoop Eagle - Real Time Monitoring Framework for eBay Hadoop](http://www.slideshare.net/Hadoop_Summit/hadoop-eagle-real-time-monitoring) by [Edward Zhand](https://github.com/yonzhang) and [Hao Chen](https://github.com/haoch) on June 9 - 11, 2015 at [San Jose, CA, USA](https://www.google.com/maps/place/San+Jose,+CA)
+<br/>
+
+
+---
+
+#### *Footnotes*
+
+[^HADOOP]:*All mentions of "hadoop" on this page represent Apache Hadoop.*