Repository: metron Updated Branches: refs/heads/asf-site cf4c2ecde -> 53295c5ae
http://git-wip-us.apache.org/repos/asf/metron/blob/53295c5a/current-book/use-cases/geographic_login_outliers/index.html ---------------------------------------------------------------------- diff --git a/current-book/use-cases/geographic_login_outliers/index.html b/current-book/use-cases/geographic_login_outliers/index.html new file mode 100644 index 0000000..f1c3cff --- /dev/null +++ b/current-book/use-cases/geographic_login_outliers/index.html @@ -0,0 +1,532 @@ +<!DOCTYPE html> +<!-- + | Generated by Apache Maven Doxia at 2017-09-15 + | Rendered using Apache Maven Fluido Skin 1.3.0 +--> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <meta name="Date-Revision-yyyymmdd" content="20170915" /> + <meta http-equiv="Content-Language" content="en" /> + <title>Metron – Problem Statement</title> + <link rel="stylesheet" href="../../css/apache-maven-fluido-1.3.0.min.css" /> + <link rel="stylesheet" href="../../css/site.css" /> + <link rel="stylesheet" href="../../css/print.css" media="print" /> + + + <script type="text/javascript" src="../../js/apache-maven-fluido-1.3.0.min.js"></script> + + + +<script type="text/javascript">$( document ).ready( function() { $( '.carousel' ).carousel( { interval: 3500 } ) } );</script> + + </head> + <body class="topBarDisabled"> + + + + + <div class="container-fluid"> + <div id="banner"> + <div class="pull-left"> + <a href="http://metron.apache.org/" id="bannerLeft"> + <img src="../../images/metron-logo.png" alt="Apache Metron" width="148px" height="48px"/> + </a> + </div> + <div class="pull-right"> </div> + <div class="clear"><hr/></div> + </div> + + <div id="breadcrumbs"> + <ul class="breadcrumb"> + + + <li class=""> + <a href="http://www.apache.org" class="externalLink" title="Apache"> + Apache</a> + </li> + <li class="divider ">/</li> + <li class=""> + <a href="http://metron.apache.org/" class="externalLink" title="Metron"> + Metron</a> + </li> + <li class="divider ">/</li> + <li class=""> + <a href="../../index.html" title="Documentation"> + Documentation</a> + </li> + <li class="divider ">/</li> + <li class="">Problem Statement</li> + + + + <li id="publishDate" class="pull-right">Last Published: 2017-09-15</li> <li class="divider pull-right">|</li> + <li id="projectVersion" class="pull-right">Version: 0.4.1</li> + + </ul> + </div> + + + <div class="row-fluid"> + <div id="leftColumn" class="span3"> + <div class="well sidebar-nav"> + + + <ul class="nav nav-list"> + <li class="nav-header">User Documentation</li> + + <li> + + <a href="../../index.html" title="Metron"> + <i class="icon-chevron-down"></i> + Metron</a> + <ul class="nav nav-list"> + + <li> + + <a href="../../Upgrading.html" title="Upgrading"> + <i class="none"></i> + Upgrading</a> + </li> + + <li> + + <a href="../../metron-analytics/index.html" title="Analytics"> + <i class="icon-chevron-right"></i> + Analytics</a> + </li> + + <li> + + <a href="../../metron-contrib/metron-docker/index.html" title="Docker"> + <i class="none"></i> + Docker</a> + </li> + + <li> + + <a href="../../metron-deployment/index.html" title="Deployment"> + <i class="icon-chevron-right"></i> + Deployment</a> + </li> + + <li> + + <a href="../../metron-interface/metron-alerts/index.html" title="Alerts"> + <i class="none"></i> + Alerts</a> + </li> + + <li> + + <a href="../../metron-interface/metron-config/index.html" title="Config"> + <i class="none"></i> + Config</a> + </li> + + <li> + + <a href="../../metron-interface/metron-rest/index.html" title="Rest"> + <i class="none"></i> + Rest</a> + </li> + + <li> + + <a href="../../metron-platform/index.html" title="Platform"> + <i class="icon-chevron-right"></i> + Platform</a> + </li> + + <li> + + <a href="../../metron-sensors/index.html" title="Sensors"> + <i class="icon-chevron-right"></i> + Sensors</a> + </li> + + <li> + + <a href="../../metron-stellar/stellar-common/index.html" title="Stellar-common"> + <i class="icon-chevron-right"></i> + Stellar-common</a> + </li> + + <li> + + <a href="../../use-cases/index.html" title="Use-cases"> + <i class="icon-chevron-down"></i> + Use-cases</a> + <ul class="nav nav-list"> + + <li class="active"> + + <a href="#"><i class="none"></i>Geographic_login_outliers</a> + </li> + </ul> + </li> + </ul> + </li> + </ul> + + + + <hr class="divider" /> + + <div id="poweredBy"> + <div class="clear"></div> + <div class="clear"></div> + <div class="clear"></div> + <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> + <img class="builtBy" alt="Built by Maven" src="../../images/logos/maven-feather.png" /> + </a> + </div> + </div> + </div> + + + <div id="bodyColumn" class="span9" > + + <h1>Problem Statement</h1> +<p><a name="Problem_Statement"></a></p> +<p>One way to find anomalous behavior in a network is by inspecting user login behavior. In particular, if a user is logging in via vastly differing geographic locations in a short period of time, this may be evidence of malicious behavior.</p> +<p>More formally, we can encode this potentially malicious event in terms of how far from the geographic centroid of the user’s historic logins as compared to all users. For instance, if we track all users and the median distance from the central geographic location of all of their logins for the last 2 hours is 3 km and the standard deviation is 1 km, if we see a user logging in 1700 km from the central geographic location of their logins for the last 2 hours, then they MAY be exhibiting a deviation that we want to monitor since it would be hard to travel that distance in 4 hours. On the other hand, the user may have just used a VPN or proxy. Ultimately, this sort of analytic must be considered only one piece of evidence in addition to many others before we want to indicate an alert.</p> +<p><a name="Demonstration_Design"></a></p> +<h1>Demonstration Design</h1> +<p>For the purposes of demonstration, we will construct synthetic data whereby 2 users are logging into a system rather quickly (once per second) from various hosts. Each user’s locations share the same first 2 octets, but will choose the last 2 randomly. We will then inject a data point indicating <tt>user1</tt> is logging in via a russian IP address.</p> +<div class="section"> +<h2><a name="Preliminaries"></a>Preliminaries</h2> +<p>We assume that the following environment variables are set:</p> + +<ul> + +<li><tt>METRON_HOME</tt> - the home directory for metron</li> + +<li><tt>ZOOKEEPER</tt> - The zookeeper quorum (comma separated with port specified: e.g. <tt>node1:2181</tt> for full-dev)</li> + +<li><tt>BROKERLIST</tt> - The Kafka broker list (comma separated with port specified: e.g. <tt>node1:6667</tt> for full-dev)</li> + +<li><tt>ES_HOST</tt> - The elasticsearch master (and port) e.g. <tt>node1:9200</tt> for full-dev.</li> +</ul> +<p>Also, this does not assume that you are using a kerberized cluster. If you are, then the parser start command will adjust slightly to include the security protocol.</p> +<p>Before editing configurations, be sure to pull the configs from zookeeper locally via</p> + +<div class="source"> +<div class="source"> +<pre>$METRON_HOME/bin/zk_load_configs.sh --mode PULL -z $ZOOKEEPER -o $METRON_HOME/config/zookeeper/ -f +</pre></div></div></div> +<div class="section"> +<h2><a name="Configure_the_Profiler"></a>Configure the Profiler</h2> +<p>First, we’ll configure the profiler to emit a profiler every 1 minute:</p> + +<ul> + +<li>In Ambari, set the profiler period duration to <tt>1</tt> minute via the Profiler config section.</li> + +<li>Adjust <tt>$METRON_HOME/config/zookeeper/global.json</tt> to adjust the capture duration:</li> +</ul> + +<div class="source"> +<div class="source"> +<pre> "profiler.client.period.duration" : "1", + "profiler.client.period.duration.units" : "MINUTES" +</pre></div></div></div> +<div class="section"> +<h2><a name="Create_the_Data_Generator"></a>Create the Data Generator</h2> +<p>We want to create a new sensor for our synthetic data called <tt>auth</tt>. To feed it, we need a synthetic data generator. In particular, we want a process which will feed authentication events per second for a set of users where the IPs are randomly chosen, but each user’s login ip addresses share the same first 2 octets.</p> +<p>Edit <tt>~/gen_data.py</tt> and paste the following into it:</p> + +<div class="source"> +<div class="source"> +<pre>#!/usr/bin/python + +import random +import sys +import time + +domains = { 'user1' : '173.90', 'user2' : '156.33' } + +def get_ip(base): + return base + '.' + str(random.randint(1,255)) + '.' + str(random.randint(1, 255)) + +def main(): + freq_s = 1 + while True: + user='user' + str(random.randint(1,len(domains))) + epoch_time = int(time.time()) + ip=get_ip(domains[user]) + print user + ',' + ip + ',' + str(epoch_time) + sys.stdout.flush() + time.sleep(freq_s) + +if __name__ == '__main__': + main() +</pre></div></div></div> +<div class="section"> +<h2><a name="Create_the_auth_Parser"></a>Create the <tt>auth</tt> Parser</h2> +<p>The message format for our simple synthetic data is a CSV with:</p> + +<ul> + +<li>username</li> + +<li>login ip address</li> + +<li>timestamp</li> +</ul> +<p>We will need to parse this via our <tt>CSVParser</tt> and add the geohash of the login ip address.</p> + +<ul> + +<li>To create this parser, edit <tt>$METRON_HOME/config/zookeeper/parsers/auth.json</tt> and paste the following:</li> +</ul> + +<div class="source"> +<div class="source"> +<pre>{ + "parserClassName" : "org.apache.metron.parsers.csv.CSVParser" + ,"sensorTopic" : "auth" + ,"parserConfig" : { + "columns" : { + "user" : 0, + "ip" : 1, + "timestamp" : 2 + } + } + ,"fieldTransformations" : [ + { + "transformation" : "STELLAR" + ,"output" : [ "hash" ] + ,"config" : { + "hash" : "GEOHASH_FROM_LOC(GEO_GET(ip))" + } + } + ] +} +</pre></div></div> + +<ul> + +<li>Create the kafka topic via:</li> +</ul> + +<div class="source"> +<div class="source"> +<pre>/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper $ZOOKEEPER --create --topic auth --partitions 1 --replication-factor 1 +</pre></div></div></div> +<div class="section"> +<h2><a name="Create_the_Profiles_for_Enrichment"></a>Create the Profiles for Enrichment</h2> +<p>We will need to track 2 profiles to accomplish this task:</p> + +<ul> + +<li><tt>locations_by_user</tt> - The geohashes of the locations the user has logged in from. This is a multiset of geohashes per user. Note that the multiset in this case is effectively a map of geohashes to occurrance counts.</li> + +<li><tt>geo_distribution_from_centroid</tt> - The statistical distribution of the distance between a login location and the geographic centroid of the user’s previous logins from the last 2 minutes. Note, in a real installation this would be a larger temporal lookback.</li> +</ul> +<p>We can represent these in the <tt>$METRON_HOME/config/zookeeper/profiler.json</tt> via the following:</p> + +<div class="source"> +<div class="source"> +<pre>{ + "profiles": [ + { + "profile": "geo_distribution_from_centroid", + "foreach": "'global'", + "onlyif": "exists(geo_distance) && geo_distance != null", + "init" : { + "s": "STATS_INIT()" + }, + "update": { + "s": "STATS_ADD(s, geo_distance)" + }, + "result": "s" + }, + { + "profile": "locations_by_user", + "foreach": "user", + "onlyif": "exists(hash) && hash != null && LENGTH(hash) > 0", + "init" : { + "s": "MULTISET_INIT()" + }, + "update": { + "s": "MULTISET_ADD(s, hash)" + }, + "result": "s" + } + ] +} +</pre></div></div></div> +<div class="section"> +<h2><a name="Enrich_authentication_Events"></a>Enrich authentication Events</h2> +<p>We will need to enrich the authentication records in a couple of ways to use in the threat triage section as well as the profiles:</p> + +<ul> + +<li><tt>geo_distance</tt>: representing the distance between the current geohash and the geographic centroid for the last 2 minutes.</li> + +<li><tt>geo_centroid</tt>: representing the geographic centroid for the last 2 minutes</li> +</ul> +<p>Beyond that, we will need to determine if the authentication event is a geographic outlier by computing the following fields:</p> + +<ul> + +<li><tt>dist_median</tt> : representing the median distance between a user’s login location and the geographic centroid for the last 2 minutes (essentially the median of the <tt>geo_distance</tt> values across all users).</li> + +<li><tt>dist_sd</tt> : representing the standard deviation of the distance between a user’s login location and the geographic centroid for the last 2 minutes (essentially the standard deviation of the <tt>geo_distance</tt> values across all users).</li> + +<li><tt>geo_outlier</tt> : whether <tt>geo_distance</tt> is more than 5 standard deviations from the median across all users.</li> +</ul> +<p>We also want to set up a triage rule associating a score and setting an alert if <tt>geo_outlier</tt> is true. In reality, this would be more complex as this metric is at best circumstantial and would need supporting evidence, but for simplicity we’ll deal with the false positives.</p> + +<ul> + +<li>Edit <tt>$METRON_HOME/config/zookeeper/enrichments/auth.json</tt> and paste the following:</li> +</ul> + +<div class="source"> +<div class="source"> +<pre>{ + "enrichment": { + "fieldMap": { + "stellar" : { + "config" : [ + "geo_locations := MULTISET_MERGE( PROFILE_GET( 'locations_by_user', user, PROFILE_FIXED( 2, 'MINUTES')))", + "geo_centroid := GEOHASH_CENTROID(geo_locations)", + "geo_distance := TO_INTEGER(GEOHASH_DIST(geo_centroid, hash))", + "geo_locations := null" + ] + } + } + ,"fieldToTypeMap": { } + }, + "threatIntel": { + "fieldMap": { + "stellar" : { + "config" : [ + "geo_distance_distr:= STATS_MERGE( PROFILE_GET( 'geo_distribution_from_centroid', 'global', PROFILE_FIXED( 2, 'MINUTES')))", + "dist_median := STATS_PERCENTILE(geo_distance_distr, 50.0)", + "dist_sd := STATS_SD(geo_distance_distr)", + "geo_outlier := ABS(dist_median - geo_distance) >= 5*dist_sd", + "is_alert := exists(is_alert) && is_alert", + "is_alert := is_alert || (geo_outlier != null && geo_outlier == true)", + "geo_distance_distr := null" + ] + } + + }, + "fieldToTypeMap": { }, + "triageConfig" : { + "riskLevelRules" : [ + { + "name" : "Geographic Outlier", + "comment" : "Determine if the user's geographic distance from the centroid of the historic logins is an outlier as compared to all users.", + "rule" : "geo_outlier != null && geo_outlier", + "score" : 10, + "reason" : "FORMAT('user %s has a distance (%d) from the centroid of their last login is 5 std deviations (%f) from the median (%f)', user, geo_distance, dist_sd, dist_median)" + } + ], + "aggregator" : "MAX" + } + } +} +</pre></div></div></div> +<div class="section"> +<h2><a name="Execute_Demonstration"></a>Execute Demonstration</h2> +<p>From here, we’ve set up our configuration and can push the configs:</p> + +<ul> + +<li>Push the configs to zookeeper via</li> +</ul> + +<div class="source"> +<div class="source"> +<pre>$METRON_HOME/bin/zk_load_configs.sh --mode PUSH -z node1:2181 -i $METRON_HOME/config/zookeeper/ +</pre></div></div> + +<ul> + +<li>Start the parser via:</li> +</ul> + +<div class="source"> +<div class="source"> +<pre>$METRON_HOME/bin/start_parser_topology.sh -k $BROKERLIST -z $ZOOKEEPER -s auth +</pre></div></div> + +<ul> + +<li>Push synthetic data into the <tt>auth</tt> topic via</li> +</ul> + +<div class="source"> +<div class="source"> +<pre>python ~/gen_data.py | /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --broker-list node1:6667 --topic auth +</pre></div></div> + +<ul> + +<li>Wait for about <tt>5</tt> minutes and kill the previous command</li> + +<li>Push a synthetic record indicating <tt>user1</tt> has logged in from a russian IP (<tt>109.252.227.173</tt>):</li> +</ul> + +<div class="source"> +<div class="source"> +<pre>echo -e "import time\nprint 'user1,109.252.227.173,'+str(int(time.time()))" | python | /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --broker-list $BROKERLIST --topic auth +</pre></div></div> + +<ul> + +<li>Execute the following to search elasticsearch for our geographic login outliers:</li> +</ul> + +<div class="source"> +<div class="source"> +<pre>curl -XPOST "http://$ES_HOST/auth*/_search?pretty" -d ' +{ + "_source" : [ "is_alert", "threat:triage:rules:0:reason", "user", "ip", "geo_distance" ], + "query": { "exists" : { "field" : "threat:triage:rules:0:reason" } } +} +' +</pre></div></div> +<p>You should see, among a few other false positive results, something like the following:</p> + +<div class="source"> +<div class="source"> +<pre>{ + "_index" : "auth_index_2017.09.07.20", + "_type" : "auth_doc", + "_id" : "f5bdbf76-9d78-48cc-b21d-bc434c96e62e", + "_score" : 1.0, + "_source" : { + "geo_distance" : 7879, + "threat:triage:rules:0:reason" : "user user1 has a distance (7879) from the centroid of their last login is 5 std deviations (334.814719) from the median (128.000000)", + "ip" : "109.252.227.173", + "is_alert" : "true", + "user" : "user1" + } +} +</pre></div></div></div> + </div> + </div> + </div> + + <hr/> + + <footer> + <div class="container-fluid"> + <div class="row span12">Copyright © 2017 + <a href="https://www.apache.org">The Apache Software Foundation</a>. + All Rights Reserved. + + </div> + + + + </div> + </footer> + </body> +</html> http://git-wip-us.apache.org/repos/asf/metron/blob/53295c5a/current-book/use-cases/index.html ---------------------------------------------------------------------- diff --git a/current-book/use-cases/index.html b/current-book/use-cases/index.html new file mode 100644 index 0000000..7db5f99 --- /dev/null +++ b/current-book/use-cases/index.html @@ -0,0 +1,213 @@ +<!DOCTYPE html> +<!-- + | Generated by Apache Maven Doxia at 2017-09-15 + | Rendered using Apache Maven Fluido Skin 1.3.0 +--> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <meta name="Date-Revision-yyyymmdd" content="20170915" /> + <meta http-equiv="Content-Language" content="en" /> + <title>Metron – Worked Examples</title> + <link rel="stylesheet" href="../css/apache-maven-fluido-1.3.0.min.css" /> + <link rel="stylesheet" href="../css/site.css" /> + <link rel="stylesheet" href="../css/print.css" media="print" /> + + + <script type="text/javascript" src="../js/apache-maven-fluido-1.3.0.min.js"></script> + + + +<script type="text/javascript">$( document ).ready( function() { $( '.carousel' ).carousel( { interval: 3500 } ) } );</script> + + </head> + <body class="topBarDisabled"> + + + + + <div class="container-fluid"> + <div id="banner"> + <div class="pull-left"> + <a href="http://metron.apache.org/" id="bannerLeft"> + <img src="../images/metron-logo.png" alt="Apache Metron" width="148px" height="48px"/> + </a> + </div> + <div class="pull-right"> </div> + <div class="clear"><hr/></div> + </div> + + <div id="breadcrumbs"> + <ul class="breadcrumb"> + + + <li class=""> + <a href="http://www.apache.org" class="externalLink" title="Apache"> + Apache</a> + </li> + <li class="divider ">/</li> + <li class=""> + <a href="http://metron.apache.org/" class="externalLink" title="Metron"> + Metron</a> + </li> + <li class="divider ">/</li> + <li class=""> + <a href="../index.html" title="Documentation"> + Documentation</a> + </li> + <li class="divider ">/</li> + <li class="">Worked Examples</li> + + + + <li id="publishDate" class="pull-right">Last Published: 2017-09-15</li> <li class="divider pull-right">|</li> + <li id="projectVersion" class="pull-right">Version: 0.4.1</li> + + </ul> + </div> + + + <div class="row-fluid"> + <div id="leftColumn" class="span3"> + <div class="well sidebar-nav"> + + + <ul class="nav nav-list"> + <li class="nav-header">User Documentation</li> + + <li> + + <a href="../index.html" title="Metron"> + <i class="icon-chevron-down"></i> + Metron</a> + <ul class="nav nav-list"> + + <li> + + <a href="../Upgrading.html" title="Upgrading"> + <i class="none"></i> + Upgrading</a> + </li> + + <li> + + <a href="../metron-analytics/index.html" title="Analytics"> + <i class="icon-chevron-right"></i> + Analytics</a> + </li> + + <li> + + <a href="../metron-contrib/metron-docker/index.html" title="Docker"> + <i class="none"></i> + Docker</a> + </li> + + <li> + + <a href="../metron-deployment/index.html" title="Deployment"> + <i class="icon-chevron-right"></i> + Deployment</a> + </li> + + <li> + + <a href="../metron-interface/metron-alerts/index.html" title="Alerts"> + <i class="none"></i> + Alerts</a> + </li> + + <li> + + <a href="../metron-interface/metron-config/index.html" title="Config"> + <i class="none"></i> + Config</a> + </li> + + <li> + + <a href="../metron-interface/metron-rest/index.html" title="Rest"> + <i class="none"></i> + Rest</a> + </li> + + <li> + + <a href="../metron-platform/index.html" title="Platform"> + <i class="icon-chevron-right"></i> + Platform</a> + </li> + + <li> + + <a href="../metron-sensors/index.html" title="Sensors"> + <i class="icon-chevron-right"></i> + Sensors</a> + </li> + + <li> + + <a href="../metron-stellar/stellar-common/index.html" title="Stellar-common"> + <i class="icon-chevron-right"></i> + Stellar-common</a> + </li> + + <li class="active"> + + <a href="#"><i class="icon-chevron-down"></i>Use-cases</a> + <ul class="nav nav-list"> + + <li> + + <a href="../use-cases/geographic_login_outliers/index.html" title="Geographic_login_outliers"> + <i class="none"></i> + Geographic_login_outliers</a> + </li> + </ul> + </li> + </ul> + </li> + </ul> + + + + <hr class="divider" /> + + <div id="poweredBy"> + <div class="clear"></div> + <div class="clear"></div> + <div class="clear"></div> + <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> + <img class="builtBy" alt="Built by Maven" src="../images/logos/maven-feather.png" /> + </a> + </div> + </div> + </div> + + + <div id="bodyColumn" class="span9" > + + <h1>Worked Examples</h1> +<p><a name="Worked_Examples"></a></p> +<p>The following are worked examples of use-cases that showcase some (or many) component(s) of Metron.</p> + </div> + </div> + </div> + + <hr/> + + <footer> + <div class="container-fluid"> + <div class="row span12">Copyright © 2017 + <a href="https://www.apache.org">The Apache Software Foundation</a>. + All Rights Reserved. + + </div> + + + + </div> + </footer> + </body> +</html> http://git-wip-us.apache.org/repos/asf/metron/blob/53295c5a/develop/bylaws.html ---------------------------------------------------------------------- diff --git a/develop/bylaws.html b/develop/bylaws.html deleted file mode 100644 index 8a2be3b..0000000 --- a/develop/bylaws.html +++ /dev/null @@ -1,508 +0,0 @@ -<!DOCTYPE html> - -<html lang="en-US" prefix="og: http://ogp.me/ns#" ng-app="hortonWorksApp"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">@charset "UTF-8";[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style> - - <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0"> - <link rel="profile" href="http://gmpg.org/xfn/11"> - <title>Apache Metron Bylaws</title> - - <style type="text/css"> - img.wp-smiley, - img.emoji { - display: inline !important; - border: none !important; - box-shadow: none !important; - height: 1em !important; - width: 1em !important; - margin: 0 .07em !important; - vertical-align: -0.1em !important; - background: none !important; - padding: 0 !important; - } - </style> - - <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','https://www.google-analytics.com/analytics.js','ga'); - - ga('create', 'UA-78972211-1', 'auto'); - ga('send', 'pageview'); - - </script> - - <link rel="stylesheet" id="default-css" href="/css/default.css" type="text/css" media="all"> - <link rel="stylesheet" id="legacy-css" href="/css/legacy.css" type="text/css" media="all"> - <link rel="stylesheet" id="gravityforms-css" href="/css/gravityforms.css" type="text/css" media="all"> - <link rel="stylesheet" id="selectboxit-css" href="/css/selectBoxIt.css" type="text/css" media="all"> - <link href='http://fonts.googleapis.com/css?family=Roboto%20Condensed' rel='stylesheet' type='text/css'> - - <script type="text/javascript" src="/js/jquery.js"></script> - <script type="text/javascript" src="/js/jquery-migrate.min.js"></script> - <script type="text/javascript" src="/js/jquery.mobile.custom.min.js"></script> - <script type="text/javascript" src="/js/isotope.pkgd.min.js"></script> - <script type="text/javascript" src="/js/navigation.js"></script> - <script type="text/javascript" src="/js/slider.js"></script> - <script type="text/javascript" src="/js/jquery.classyloader.js"></script> - <script type="text/javascript" src="/js/hero-slider.js"></script> - <script type="text/javascript" src="/js/footer.js"></script> - <script type="text/javascript" src="/js/top-form.js"></script> - <script type="text/javascript" src="/js/local6.js"></script> - <script type="text/javascript" src="/js/select-list.js"></script> - <script type="text/javascript" src="/js/legacy.js"></script> - <script type="text/javascript" src="/js/paralax-scroll.js"></script> - <script type="text/javascript" src="/js/jquery-ui.min.js"></script> - <script type="text/javascript" src="/js/jquery.selectBoxIt.min.js"></script> - <script type="text/javascript" src="/js/scroll-slider.js"></script> - <script type="text/javascript" src="/js/charts-animate.js"></script> - <script type="text/javascript" src="/js/dotdotdot.js"></script> - <script type="text/javascript" src="/js/products_scroll.js"></script> - <script type="text/javascript" src="/js/parallax.min.js"></script> - <script type="text/javascript" src="/js/parallax.js"></script> - <script type="text/javascript" src="/js/shb0wjr.js"></script> - - <script> - window.lsfDataLayer = window.lsfDataLayer || []; - </script> - - <style> - body { - font-family: "roboto-condensed", sans-serif; - } - </style> - - <!-- Angular js files --> - <script src="/js/angular.min.js"></script> - <script src="/js/angular-animate.min.js"></script> - <script src="/js/app.js"></script> - <script src="/js/pressReleaseController.js"></script> - <script src="/js/eventCtrl.js"></script> - <!-- End Angular js files --> - <link rel="stylesheet" type="text/css" href="/css/prettify.css"> - <script type="text/javascript" async="" src="/js/munchkin-beta.js"></script> - <link type="text/css" href="/css/jquery-ui-insightera-custom-1.8.css" rel="stylesheet"> - <style id="style-1-cropbar-clipper"> - /* Copyright 2014 Evernote Corporation. All rights reserved. */ - - .en-markup-crop-options { - top: 18px !important; - left: 50% !important; - margin-left: -100px !important; - width: 200px !important; - border: 2px rgba(255, 255, 255, .38) solid !important; - border-radius: 4px !important; - } - - .en-markup-crop-options div div:first-of-type { - margin-left: 0px !important; - } - </style> -</head> - - -<body class="wrap"> - <header> - <div class="main-navigation" style="height: 85px;"> - <div class="main-nav fixed"> - <div class="wrapper"> - <div class="logo"> - <a href=""><img src="/img/logo.png" alt="Logo"></a> - </div> - <nav> - <div class="toggle"> - <span></span> - <span></span> - <span></span> - </div> - <div class="menu-wrapper" style="height: auto; display: block;"> - <ul class="main-menu"> - <li class="products-menu"><a href="/">Home</a> - </li> - <li class="solutions-menu"><a href="/about/">About</a> - </li> - <li class="services-menu"><a href="/documentation/">Documentation</a> - </li> - <li class="services-menu"><a href="/community/">Community</a> - </li> - <li class="training-menu"><a href="/news/">News</a> - </li> - <li> - <button class="button-default button-green" style="line-height:43px;"> <a>Download </a></button> - </li> -</ul> - - </div> - </nav> - </div> - </div> - </div> -</header> - - - <section class="standalone"> - <div class="grid"> - - <div class="unit whole"> - <article> - <h1>Apache Metron Bylaws</h1> - <h2 id="introduction">Introduction</h2> - -<p>This document defines the bylaws under which the Apache Metron project -operates. It defines the roles and responsibilities of the project, -who may vote, how voting works, how conflicts are resolved, etc.</p> - -<p>Metron is a project of the Apache Software Foundation (ASF) and the foundation -holds the trademark on the name âMetronâ and copyright on the combined -code base. The <a href="http://www.apache.org/foundation/faq.html">Apache Foundation -FAQ</a> and -<a href="http://www.apache.org/foundation/how-it-works.html">How-It-Works</a> -explain the operation and background of the foundation.</p> - -<p>Apache has a <a href="http://www.apache.org/foundation/policies/conduct.html">code of -conduct</a> that -it expects its members to follow. In particular:</p> - -<ul> - <li> - <p>Be <strong>open and welcoming</strong>. It is important that we grow and -encourage the community of users and developers for our project.</p> - </li> - <li> - <p>Be <strong>collaborative</strong>. Working together on the open mailing lists and -bug database to make decisions helps the project grow.</p> - </li> - <li> - <p>Be <strong>respectful</strong> of others. Everyone is volunteering their time and -efforts to work on this project. Please be respectful of everyone -and their views.</p> - </li> -</ul> - -<p>Metron is typical of Apache projects in that it operates under a set of -principles, known collectively as the âApache Wayâ. If you are new to -Apache development, please refer to -<a href="http://www.apache.org/foundation/how-it-works.html">this</a> for more -information on how Apache projects operate.</p> - -<h2 id="roles-and-responsibilities">Roles and Responsibilities</h2> - -<p>Apache projects define a set of roles with associated rights and -responsibilities. These roles govern what tasks an individual may -perform within the project. The roles are defined in the following -sections.</p> - -<h3 id="users">Users</h3> - -<p>The most important participants in the project are people who use our -software. The majority of our developers start out as users and guide -their development efforts from the userâs perspective. Users -contribute to the Apache projects by providing feedback to developers -in the form of bug reports and feature suggestions. As well, users -participate in the Apache community by helping other users on mailing -lists and user support forums.</p> - -<h3 id="contributors">Contributors</h3> - -<p>Contributors include all of the volunteers who donate time, code, -documentation, -or resources to the Metron Project. A contributor that makes sustained, -welcome contributions to the project may be invited to become a -committer, though the exact timing of such invitations depends on many -factors.</p> - -<h3 id="committers">Committers</h3> - -<p>The projectâs committers are responsible for the projectâs technical -management. Committers have the right to commit to the projectâs git -repository. Committers may cast binding votes on any technical -discussion.</p> - -<p>Committer access is by invitation only and must be approved by -consensus approval of the active Project Management Committee (PMC) -members.</p> - -<p>If a committer wishes to leave the project or does not contribute to -the project in any form for six months, the PMC may make them emeritus. -Emeritus committers lose their ability to commit code or cast binding -votes. An emeritus committer may -request reinstatement of commit access from the PMC. Such -reinstatement is subject to consensus approval of active PMC members.</p> - -<p>All Apache committers are required to have a signed <a href="https://www.apache.org/licenses/icla.txt">Individual -Contributor License -Agreement</a> (ICLA) on file -with the Apache Software Foundation. There is a <a href="http://www.apache.org/dev/committers.html">Committer -FAQ</a> which provides more -details on the requirements for Committers.</p> - -<p>A committer who makes a -sustained contribution to the project may be invited to become a -member of the PMC. The form of contribution -is not limited to code. It can also include code review, helping out -users on the mailing lists, documentation, testing, etc.</p> - -<h3 id="release-manager">Release Manager</h3> - -<p>A Release Manager (RM) is a committer who volunteers to produce a -Release Candidate. The RM shall publish a Release Plan on the -dev mailing list stating the branch from which they intend to -make a Release Candidate.</p> - -<h3 id="project-management-committee">Project Management Committee</h3> - -<p>The Project Management Committee (PMC) for Apache Metron was created by -the Apache Board in December 2015 when Metron moved out of Ciscoâs OpenSOC<br /> -project and became an incubated project at Apache. -The PMC is responsible to the board and -the ASF for the management and oversight of the Apache Metron -codebase. The responsibilities of the PMC include</p> - -<ul> - <li> - <p>Deciding what is distributed as products of the Apache Metron -project. In particular all releases must be approved by the PMC.</p> - </li> - <li> - <p>Maintaining the projectâs shared resources, including the codebase -repository, mailing lists, and websites.</p> - </li> - <li> - <p>Speaking on behalf of the project.</p> - </li> - <li> - <p>Resolving license disputes regarding products of the project</p> - </li> - <li> - <p>Nominating new PMC members and committers</p> - </li> - <li> - <p>Maintaining these bylaws and other guidelines of the project</p> - </li> -</ul> - -<p>Membership of the PMC is by invitation only and must be approved by a -consensus approval of active PMC members.</p> - -<p>A PMC member is considered -emeritus by their own declaration or by not contributing in any form -to the project for over six months. An emeritus member may request -reinstatement to the PMC. Such reinstatement is subject to consensus -approval of the active PMC members.</p> - -<p>The chair of the PMC is appointed by the ASF board. The chair is an -office holder of the Apache Software Foundation (Vice President, -Apache Metron) and has primary responsibility to the board for the -management of the project within the scope of the Metron PMC. The -chair reports to the board quarterly on developments within the Metron -project.</p> - -<p>When the project desires a new PMC chair, the PMC votes to recommend a -new chair using <a href="http://wiki.apache.org/general/BoardVoting">Single Transferable -Vote</a> voting. The decision -must be ratified by the Apache board.</p> - -<h2 id="decision-making">Decision Making</h2> - -<p>Within the Metron project, different types of decisions require -different forms of approval. For example, the previous section -describes several decisions which require âconsensus approval.â -This section defines how voting is performed, the types of -approvals, and which types of decision require which type of approval.</p> - -<h3 id="voting">Voting</h3> - -<p>Decisions regarding the project are made by votes on the primary -project development mailing list ([email protected]). Where -necessary, PMC voting may take place on the private Metron PMC mailing -list. Votes are clearly indicated by subject line starting with -[VOTE]. Votes may contain multiple items for approval and these should -be clearly separated. Voting is carried out by replying to the vote -mail. Voting may take five flavors:</p> - -<ul> - <li> - <p><strong>+1</strong> â âYes,â âAgree,â or âthe action should be performed.â In general, -this vote also indicates a willingness on the behalf of the voter in -âmaking it happen.â</p> - </li> - <li> - <p><strong>+0</strong> â This vote indicates a willingness for the action under -consideration to go ahead. The voter, however, will not be able to -help.</p> - </li> - <li> - <p><strong>0</strong> â The voter is neutral on the topic under discussion.</p> - </li> - <li> - <p><strong>-0</strong> â This vote indicates that the voter does not, in general, agree - with the proposed action but is not concerned enough to prevent the - action going ahead.</p> - </li> - <li> - <p><strong>-1</strong> â This is a negative vote. On issues where consensus is required, - this vote counts as a veto. All vetoes must contain an explanation - of why the veto is appropriate. Vetoes with no explanation are - void. It may also be appropriate for a -1 vote to include an - alternative course of action.</p> - </li> -</ul> - -<p>All participants in the Metron project are encouraged to show their -agreement for or against a particular action by voting, regardless of -whether their vote is binding. Nonbinding votes are useful for -encouraging discussion and understanding the scope of opinions within -the project.</p> - -<h3 id="approvals">Approvals</h3> - -<p>These are the types of approvals that can be sought. Different actions -require different types of approvals.</p> - -<ul> - <li> - <p><strong>Consensus Approval</strong> â Consensus approval requires 3 binding +1 -votes and no binding vetoes.</p> - </li> - <li> - <p><strong>Lazy Consensus</strong> â Lazy consensus requires at least one +1 vote and -no -1 votes (âsilence gives assentâ).</p> - </li> - <li> - <p><strong>Lazy Majority</strong> â A lazy majority vote requires 3 binding +1 votes - and more binding +1 votes than -1 votes.</p> - </li> - <li> - <p><strong>Lazy 2/3 Majority</strong> â Lazy 2/3 majority votes requires at least 3 -votes and twice as many +1 votes as -1 votes.</p> - </li> -</ul> - -<h3 id="vetoes">Vetoes</h3> - -<p>A valid, binding veto cannot be overruled. If a veto is cast, it must -be accompanied by a valid reason explaining the reasons for the -veto. The validity of a veto, if challenged, can be confirmed by -anyone who has a binding vote. This does not necessarily signify -agreement with the veto - merely that the veto is valid. If you -disagree with a valid veto, you must lobby the person casting the veto -to withdraw their veto. If a veto is not withdrawn, any action that -has already been taken must be reversed in a timely manner.</p> - -<h3 id="actions">Actions</h3> - -<p>This section describes the various actions which are undertaken within -the project, the corresponding approval required for that action and -those who have binding votes over the action.</p> - -<h4 id="code-change">Code Change</h4> - -<p>A change made to a codebase of the project requires <em>lazy consensus</em> -of active committers other than the author of the patch. The code can -be committed after the first +1.</p> - -<h4 id="product-release">Product Release</h4> - -<p>To make a release, the release manager creates a release candidate and -a vote requiring a <em>lazy majority</em> of the active PMC members is -required. Once the vote passes, the release candidate becomes an -official release.</p> - -<h4 id="adoption-of-new-codebase">Adoption of New Codebase</h4> - -<p>When the codebase for an existing, released product is to be replaced -with an alternative codebase, it requires a <em>lazy 2/3 majority</em> of PMC -members. This also covers the creation of new sub-projects and -submodules within the project.</p> - -<h4 id="new-committer">New Committer</h4> - -<p>When a new committer is proposed for the project, <em>consensus approval</em> -of the active PMC members is required.</p> - -<h4 id="new-pmc-member">New PMC Member</h4> - -<p>To promote a committer to a PMC member requires <em>consensus approval</em> -of active PMC members.</p> - -<p>If the vote passes, the Apache Board must be notified to make the change -official.</p> - -<h4 id="committer-removal">Committer Removal</h4> - -<p>Removal of commit privileges requires a <em>lazy 2/3 majority</em> of active -PMC members.</p> - -<h4 id="pmc-member-removal">PMC Member Removal</h4> - -<p>Removing a PMC member requires a <em>lazy 2/3 majority</em> of active PMC -members, excluding the member in question.</p> - -<p>If the vote passes, the Apache Board must be notified to make the change -official.</p> - -<h4 id="modifying-bylaws">Modifying Bylaws</h4> - -<p>Modifying this document requires a <em>lazy majority</em> of active PMC members.</p> - -<h3 id="voting-timeframes">Voting Timeframes</h3> - -<p>Votes are open for a minimum period of 72 hours to allow all active -voters time to consider the vote. For holiday weekends or conferences, -consider using a longer vote window. Votes relating to code changes are -not subject to a strict timetable but should be made as timely as -possible.</p> - - </article> - </div> - - <div class="clear"></div> - - </div> -</section> - - - </section> -<section class="intro-block darken" id="docshome"> - <div class="content-960 hover-btn text-center disclaimer"> - The contents of this website are © 2016 Apache Software Foundation under the terms of the Apache License v2. Apache Metron and its logo are trademarks of the Apache Software Foundation. - </div> -</section> - - <script> - var anchorForId = function (id) { - var anchor = document.createElement("a"); - anchor.className = "header-link"; - anchor.href = "#" + id; - anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>"; - anchor.title = "Permalink"; - return anchor; - }; - - var linkifyAnchors = function (level, containingElement) { - var headers = containingElement.getElementsByTagName("h" + level); - for (var h = 0; h < headers.length; h++) { - var header = headers[h]; - - if (typeof header.id !== "undefined" && header.id !== "") { - header.appendChild(anchorForId(header.id)); - } - } - }; - - document.onreadystatechange = function () { - if (this.readyState === "complete") { - var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0]; - if (!contentBlock) { - return; - } - for (var level = 1; level <= 6; level++) { - linkifyAnchors(level, contentBlock); - } - } - }; -</script> - - -</body> -</html> http://git-wip-us.apache.org/repos/asf/metron/blob/53295c5a/develop/coding.html ---------------------------------------------------------------------- diff --git a/develop/coding.html b/develop/coding.html deleted file mode 100644 index 35542b8..0000000 --- a/develop/coding.html +++ /dev/null @@ -1,243 +0,0 @@ -<!DOCTYPE html> - -<html lang="en-US" prefix="og: http://ogp.me/ns#" ng-app="hortonWorksApp"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">@charset "UTF-8";[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style> - - <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0"> - <link rel="profile" href="http://gmpg.org/xfn/11"> - <title>Coding Guidelines</title> - - <style type="text/css"> - img.wp-smiley, - img.emoji { - display: inline !important; - border: none !important; - box-shadow: none !important; - height: 1em !important; - width: 1em !important; - margin: 0 .07em !important; - vertical-align: -0.1em !important; - background: none !important; - padding: 0 !important; - } - </style> - - <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','https://www.google-analytics.com/analytics.js','ga'); - - ga('create', 'UA-78972211-1', 'auto'); - ga('send', 'pageview'); - - </script> - - <link rel="stylesheet" id="default-css" href="/css/default.css" type="text/css" media="all"> - <link rel="stylesheet" id="legacy-css" href="/css/legacy.css" type="text/css" media="all"> - <link rel="stylesheet" id="gravityforms-css" href="/css/gravityforms.css" type="text/css" media="all"> - <link rel="stylesheet" id="selectboxit-css" href="/css/selectBoxIt.css" type="text/css" media="all"> - <link href='http://fonts.googleapis.com/css?family=Roboto%20Condensed' rel='stylesheet' type='text/css'> - - <script type="text/javascript" src="/js/jquery.js"></script> - <script type="text/javascript" src="/js/jquery-migrate.min.js"></script> - <script type="text/javascript" src="/js/jquery.mobile.custom.min.js"></script> - <script type="text/javascript" src="/js/isotope.pkgd.min.js"></script> - <script type="text/javascript" src="/js/navigation.js"></script> - <script type="text/javascript" src="/js/slider.js"></script> - <script type="text/javascript" src="/js/jquery.classyloader.js"></script> - <script type="text/javascript" src="/js/hero-slider.js"></script> - <script type="text/javascript" src="/js/footer.js"></script> - <script type="text/javascript" src="/js/top-form.js"></script> - <script type="text/javascript" src="/js/local6.js"></script> - <script type="text/javascript" src="/js/select-list.js"></script> - <script type="text/javascript" src="/js/legacy.js"></script> - <script type="text/javascript" src="/js/paralax-scroll.js"></script> - <script type="text/javascript" src="/js/jquery-ui.min.js"></script> - <script type="text/javascript" src="/js/jquery.selectBoxIt.min.js"></script> - <script type="text/javascript" src="/js/scroll-slider.js"></script> - <script type="text/javascript" src="/js/charts-animate.js"></script> - <script type="text/javascript" src="/js/dotdotdot.js"></script> - <script type="text/javascript" src="/js/products_scroll.js"></script> - <script type="text/javascript" src="/js/parallax.min.js"></script> - <script type="text/javascript" src="/js/parallax.js"></script> - <script type="text/javascript" src="/js/shb0wjr.js"></script> - - <script> - window.lsfDataLayer = window.lsfDataLayer || []; - </script> - - <style> - body { - font-family: "roboto-condensed", sans-serif; - } - </style> - - <!-- Angular js files --> - <script src="/js/angular.min.js"></script> - <script src="/js/angular-animate.min.js"></script> - <script src="/js/app.js"></script> - <script src="/js/pressReleaseController.js"></script> - <script src="/js/eventCtrl.js"></script> - <!-- End Angular js files --> - <link rel="stylesheet" type="text/css" href="/css/prettify.css"> - <script type="text/javascript" async="" src="/js/munchkin-beta.js"></script> - <link type="text/css" href="/css/jquery-ui-insightera-custom-1.8.css" rel="stylesheet"> - <style id="style-1-cropbar-clipper"> - /* Copyright 2014 Evernote Corporation. All rights reserved. */ - - .en-markup-crop-options { - top: 18px !important; - left: 50% !important; - margin-left: -100px !important; - width: 200px !important; - border: 2px rgba(255, 255, 255, .38) solid !important; - border-radius: 4px !important; - } - - .en-markup-crop-options div div:first-of-type { - margin-left: 0px !important; - } - </style> -</head> - - -<body class="wrap"> - <header> - <div class="main-navigation" style="height: 85px;"> - <div class="main-nav fixed"> - <div class="wrapper"> - <div class="logo"> - <a href=""><img src="/img/logo.png" alt="Logo"></a> - </div> - <nav> - <div class="toggle"> - <span></span> - <span></span> - <span></span> - </div> - <div class="menu-wrapper" style="height: auto; display: block;"> - <ul class="main-menu"> - <li class="products-menu"><a href="/">Home</a> - </li> - <li class="solutions-menu"><a href="/about/">About</a> - </li> - <li class="services-menu"><a href="/documentation/">Documentation</a> - </li> - <li class="services-menu"><a href="/community/">Community</a> - </li> - <li class="training-menu"><a href="/news/">News</a> - </li> - <li> - <button class="button-default button-green" style="line-height:43px;"> <a>Download </a></button> - </li> -</ul> - - </div> - </nav> - </div> - </div> - </div> -</header> - - - <section class="standalone"> - <div class="grid"> - - <div class="unit whole"> - <article> - <h1>Coding Guidelines</h1> - <h2 id="general-rules">General rules</h2> - -<ul> - <li>All files must have an Apache copyright header at the top of the file.</li> - <li>Code should be removed rather than commented out.</li> - <li>All public functions should have javadoc comments.</li> - <li>Always use braces to surround branches.</li> - <li>try-finally should be avoided.</li> -</ul> - -<h2 id="formatting">Formatting</h2> - -<ul> - <li>All files must have an 80 character maximum line length.</li> - <li>Indentation should be 2 spaces.</li> - <li>Files should use spaces instead of tabs.</li> - <li>Wrapping lines - <ul> - <li>Break after a comma.</li> - <li>Break before an operator.</li> - <li>Prefer higher-level breaks to lower-level breaks.</li> - <li>Align the new line with beginning of the expression at the same level -on the previous line.</li> - <li>If the above rules lead to confusing code, just indent 8 spaces.</li> - </ul> - </li> - <li>One variable declaration per a line.</li> -</ul> - -<h2 id="naming">Naming</h2> - -<ul> - <li>Packages should be all lowercase. - <ul> - <li>Java code should be in <code>org.apache.,metron</code>, except for compatibility classes</li> - </ul> - </li> - <li>Classes should be in mixed case.</li> - <li>Variables should be in camel case.</li> - <li>Constants should be in upper case.</li> -</ul> - - </article> - </div> - - <div class="clear"></div> - - </div> -</section> - - - </section> -<section class="intro-block darken" id="docshome"> - <div class="content-960 hover-btn text-center disclaimer"> - The contents of this website are © 2016 Apache Software Foundation under the terms of the Apache License v2. Apache Metron and its logo are trademarks of the Apache Software Foundation. - </div> -</section> - - <script> - var anchorForId = function (id) { - var anchor = document.createElement("a"); - anchor.className = "header-link"; - anchor.href = "#" + id; - anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>"; - anchor.title = "Permalink"; - return anchor; - }; - - var linkifyAnchors = function (level, containingElement) { - var headers = containingElement.getElementsByTagName("h" + level); - for (var h = 0; h < headers.length; h++) { - var header = headers[h]; - - if (typeof header.id !== "undefined" && header.id !== "") { - header.appendChild(anchorForId(header.id)); - } - } - }; - - document.onreadystatechange = function () { - if (this.readyState === "complete") { - var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0]; - if (!contentBlock) { - return; - } - for (var level = 1; level <= 6; level++) { - linkifyAnchors(level, contentBlock); - } - } - }; -</script> - - -</body> -</html> http://git-wip-us.apache.org/repos/asf/metron/blob/53295c5a/documentation/index.html ---------------------------------------------------------------------- diff --git a/documentation/index.html b/documentation/index.html index aa486b4..24fcde5 100644 --- a/documentation/index.html +++ b/documentation/index.html @@ -211,21 +211,24 @@ <section class="events-section info-block darken" id="releases"> <div class="wrapper downloads"> <div class="text-center"> - <h4>Current Release: 0.4.0</h4> + <h4>Current Release: 0.4.1</h4> </div> <div class="content-960 hover-btn text-center"> <ul> <li> - <a href="http://www.apache.org/dyn/closer.cgi/metron/0.4.0/apache-metron-0.4.0.tar.gz" target="new"> - apache-metron-0.4.0.tar.gz + <a href="http://www.apache.org/dyn/closer.cgi/metron/0.4.1/apache-metron-0.4.1.tar.gz" target="new"> + apache-metron-0.4.1.tar.gz </a> - [ <a href="https://dist.apache.org/repos/dist/release/metron/0.4.0/apache-metron-0.4.0.tar.gz.asc" target="new"> + [ <a href="https://dist.apache.org/repos/dist/release/metron/0.4.1/apache-metron-0.4.1.tar.gz.asc" target="new"> PGP </a>] - [ <a href="https://dist.apache.org/repos/dist/release/metron/0.4.0/apache-metron-0.4.0.tar.gz.sha" target="new"> + [ <a href="https://dist.apache.org/repos/dist/release/metron/0.4.1/apache-metron-0.4.1.tar.gz.sha1" target="new"> + SHA + </a>] + [ <a href="https://dist.apache.org/repos/dist/release/metron/0.4.1/apache-metron-0.4.1.tar.gz.sha512" target="new"> SHA512 </a>] - [ <a href="https://dist.apache.org/repos/dist/release/metron/0.4.0/apache-metron-0.4.0.tar.gz.md5" target="new"> + [ <a href="https://dist.apache.org/repos/dist/release/metron/0.4.1/apache-metron-0.4.1.tar.gz.md5" target="new"> MD5 </a>] [ <a href="/current-book/index.html" target="new"> Book </a>] http://git-wip-us.apache.org/repos/asf/metron/blob/53295c5a/feed.xml ---------------------------------------------------------------------- diff --git a/feed.xml b/feed.xml index 910d107..ac78c82 100644 --- a/feed.xml +++ b/feed.xml @@ -5,8 +5,8 @@ <description></description> <link>http://localhost:4000/</link> <atom:link href="http://localhost:4000/feed.xml" rel="self" type="application/rss+xml"/> - <pubDate>Wed, 05 Jul 2017 11:58:22 -0700</pubDate> - <lastBuildDate>Wed, 05 Jul 2017 11:58:22 -0700</lastBuildDate> + <pubDate>Tue, 19 Sep 2017 11:36:21 -0700</pubDate> + <lastBuildDate>Tue, 19 Sep 2017 11:36:21 -0700</lastBuildDate> <generator>Jekyll v3.4.5</generator> <item>
