<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<body>
Edgent provides an programming model and runtime for executing streaming
analytics at the <i>edge</i>.
<P>
<em>
Apache Edgent is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by Apache Incubator PMC. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
</em>
</P>
<H1>Edgent</H1>
<OL>
<LI><a href="#overview">Overview</A></LI>
<LI><a href="#model">Programming Model</A></LI>
<LI><a href="#start">Getting Started</A></LI>
</OL>
<a name="overview"></a>
<H2>Overview</H2>
Edgent provides an programming model and runtime for executing streaming
analytics at the <i>edge</i>. Edgent is focusing on two edge cases:
<UL>
<LI>Internet of Things (IoT) - Widely distributed and/or mobile devices.</LI>
<LI>Enterprise Embedded - Edge analytics within an enterprise, such as local analytic applications of eash system in a machine room, or error log analytics in application servers.</LI>
</UL>
In both cases Edgent applications analyze live data and
send results of that analytics and/or data intermittently
to back-end systems for deeper analysis. An Edgent application
can use analytics to decide when to send information to back-end systems,
such as when the behaviour of the system is outside normal parameters
(e.g. an engine running too hot).
<BR>
Edgent applications do not send data continually
to back-end systems as the cost of communication may be high
(e.g. cellular networks) or bandwidth may be limited.
<P>
Edgent applications communicate with back-end systems through
some form of message hub as there may be millions of edge devices.
Edgent supports these message hubs:
<UL>
<LI> MQTT - Messaging standard for IoT</LI>
<LI> IBM Watson IoT Platform - Cloud based service providing a device model on top of MQTT</LI>
<LI> Apache Kafka - Enterprise message bus</LI>
</UL> 
</P>
<P>
Back-end analytic systems are used to perform analysis on information from Edgent applications that cannot be performed at the edge. Such analysis may be:
<UL>
<LI>Running complex analytic algorithms than require more resources (cpu, memory etc.) than are available at the edge. </LI>
<LI>Maintaining more state per device that can exist at the edge, e.g. hours of state for patients' medical sensors. </LI>
<LI>Correlating device information with multiple data sources:
<UL>
<LI> Weather data</LI>
<LI> Social media data</LI>
<LI> Data of record (e.g patients' medical histories, trucking manifests).</LI>
<LI> Other devices </LI>
<LI>etc.</LI>
</UL>
</LI>
</UL>
<BR>
Back-end systems can interact or control devices based upon their analytics, by sending commands to specific devices, e.g. reduce maximum engine revs to reduce chance of failure before the next scheduled service, or send an alert of an accident ahead.
</P>
<a name="model"></a>
<H2>Programming Model</H2>
Edgent applications are streaming applications in which each <em>tuple</em>
(data item or event) in a <em>stream</em> of data is processed as it occurs.
Additionally, you can process <em>windows</em> (logical subsets) of data.
For example, you could analyze the last 90 seconds of data from a sensor to identify trends in the data
<P>
<H3>Topology functional API</H3>
<H4>Overview</H4>
The primary api is {@link org.apache.edgent.topology.Topology} which uses a functional
model to build a topology of {@link org.apache.edgent.topology.TStream streams} for an application.
<BR>
{@link org.apache.edgent.topology.TStream TStream} is a declaration of a stream of tuples, an application will create streams that source data (e.g. sensor readings) and then apply functions that transform those streams into derived streams, for example simply filtering a stream containg engine temperator readings to a derived stream that only contains readings thar are greater than 100&deg;C.
<BR>
An application terminates processing for a stream by <em>sinking</em> it. Sinking effectively terminates a stream by applying processing to each tuple on the stream (as it occurs) that does not produce a result. Typically this sinking is transmitting the tuple to an external system, for example the messgae hub to send the data to a back-end system, or locally sending the data to a user interface.
</P>
<P>
This programming style is typical for streaming systems and similar APIs are supported by systems such as Apache Flink, Apache Spark Streaming, IBM Streams and Java 8 streams.
</P>
<H4>Functions</H4>
Edgent supports Java 8 and it is encouraged to use Java 8 as functions can be easily and clearly written using lambda expressions.
<H4>Arbitrary Topology</H4>
Simple applications may just be a pipeline of streams, for example, logically:
<BR>
{@code source --> filter --> transform --> aggregate --> send to MQTT}
<BR>
However Edgent allows arbitrary topologies including:
<UL>
<LI>Multiple source streams in an application</LI>
<LI>Multiple sinks in an application </LI>
<LI>Multiple processing including sinks against a stream (fan-out)</LI>
<LI>Union of streams (fan-in)  </LI>
<LI>Correlation of streams by allowing streams to be joined</LI>
</UL>
<H3>Graph API</H3>
<H4>Overview</H4>
The {@link org.apache.edgent.graph.Graph graph} API is a lower-level API that the
topology api is built on top of. A graph consists of
{@link org.apache.edgent.oplet.Oplet oplet} invocations connected by streams.
The oplet invocations contain the processing applied to each tuple
on streams connected to their input ports. Processing by the oplet
submits tuples to its output ports for subsequent processing
by downstream connected oplet invocations.
<a name="start"></a>
<H2>Getting Started</H2>
Below, {@code <edgent-target>} refers to an Edgent release's platform target
directory such as {@code .../edgent/java8}.
<P>
A number of sample Java applications are provided that demonstrate use of Edgent.
<BR>
The Java code for the samples is under {@code <edgent-target>/samples}.
<P>
Shell scripts to run the samples are {@code <edgent-target>/scripts}.
See the {@code README} there.
<P>
Summary of samples:
<TABLE border=1 width="80%" table-layout="auto">
<TR class="rowColor"><TH>Sample</TH><TH>Description</TH><TH>Focus</TH></TR>
<TR class="altColor"><TD>{@link org.apache.edgent.samples.topology.HelloEdgent}</TD>
  <TD>Prints Hello Edgent! to standard output.</TD>
  <TD>Basic mechanics of declaring a topology and executing it.</TD></TR>
<TR class="altColor"><TD>{@link org.apache.edgent.samples.topology.PeriodicSource}</TD>
  <TD>Polls a random number generator for a new value every second
      and then prints out the raw value and a filtered and transformed stream.</TD>
  <TD>Polling of a data value to create a source stream.</TD></TR>
<TR class="altColor"><TD>{@link org.apache.edgent.samples.topology.SensorsAggregates}</TD>
  <TD>Demonstrates partitioned aggregation and filtering of simulated sensors
      that are bursty in nature, so that only intermittently
      is the data output to {@code System.out}</TD>
  <TD>Simulated sensors with windowed aggregation</TD></TR>
<TR class="altColor"><TD>{@link org.apache.edgent.samples.topology.SimpleFilterTransform}</TD>
  <TD></TD>
  <TD></TD></TR>
<TR class="altColor"><TD><a href="{@docRoot}/org/apache/edgent/samples/connectors/file/package-summary.html">
      File</a></TD>
  <TD>Write a stream of tuples to files.  Watch a directory for new files
      and create a stream of tuples from the file contents.</TD>
  <TD>Use of the <a href="{@docRoot}/org/apache/edgent/connectors/file/package-summary.html">
      File stream connector</a></TD></TR>
<TR class="altColor"><TD><a href="{@docRoot}/org/apache/edgent/samples/connectors/iotp/package-summary.html">
      IotfSensors, IotfQuickstart</a></TD>
  <TD>Sends simulated sensor readings to an IBM Watson IoT Platform instance as device events.</TD>
  <TD>Use of the <a href="{@docRoot}/org/apache/edgent/connectors/iotp/package-summary.html">
      IBM Watson IoT Platform connector</a> to send device events and receive device commands.</TD></TR>
<TR class="altColor"><TD><a href="{@docRoot}/org/apache/edgent/samples/connectors/jdbc/package-summary.html">
      JDBC</a></TD>
  <TD>Write a stream of tuples to an Apache Derby database table.
      Create a stream of tuples by reading a table.</TD>
  <TD>Use of the <a href="{@docRoot}/org/apache/edgent/connectors/jdbc/package-summary.html">
      JDBC stream connector</a></TD></TR>
<TR class="altColor"><TD><a href="{@docRoot}/org/apache/edgent/samples/connectors/kafka/package-summary.html">
      Kafka</a></TD>
  <TD>Publish a stream of tuples to a Kafka topic. 
      Create a stream of tuples by subscribing to a topic and receiving 
      messages from it.</TD>
  <TD>Use of the <a href="{@docRoot}/org/apache/edgent/connectors/kafka/package-summary.html">
      Kafka stream connector</a></TD></TR>
<TR class="altColor"><TD><a href="{@docRoot}/org/apache/edgent/samples/connectors/mqtt/package-summary.html">
      MQTT</a></TD>
  <TD>Publish a stream of tuples to a MQTT topic. 
      Create a stream of tuples by subscribing to a topic and receiving 
      messages from it.</TD>
  <TD>Use of the <a href="{@docRoot}/org/apache/edgent/connectors/mqtt/package-summary.html">
      MQTT stream connector</a></TD></TR>
<TR class="altColor"><TD><a href="{@docRoot}/org/apache/edgent/samples/apps/sensorAnalytics/package-summary.html">
      SensorAnalytics</a></TD>
  <TD>Demonstrates a Sensor Analytics application that includes: 
      configuration control, a device of one or more sensors and
      some typical analytics, use of MQTT for publishing results and receiving
      commands, local results logging, conditional stream tracing.</TD>
  <TD>A more complete sample application demonstrating common themes.</TD></TR>
</TABLE>
<BR>
Other samples are also provided but have not yet been fully documented.
Feel free to explore them.
<H2>Building Applications</H2>
You need to include one or more Edgent jars in your {@code classpath} depending
on what features your application uses.
<P>
Include one or more of the topology providers:
<ul>
<li>{@code <edgent-target>/lib/edgent.providers.iot.jar} - if you use the
{@link org.apache.edgent.providers.iot.IotProvider IotProvider}</li>
<li>{@code <edgent-target>/lib/edgent.providers.direct.jar} - if you use the
{@link org.apache.edgent.providers.direct.DirectProvider DirectProvider}</li>
<li>{@code <edgent-target>/lib/edgent.providers.development.jar} - if you use the
{@link org.apache.edgent.providers.development.DevelopmentProvider DevelopmentProvider}</li>
</ul>
Include the jar of any Edgent connector you use:
<ul>
<li>{@code <edgent-target>/connectors/command/lib/edgent.connectors.command.jar}</li>
<li>{@code <edgent-target>/connectors/csv/lib/edgent.connectors.csv.jar}</li>
<li>{@code <edgent-target>/connectors/file/lib/edgent.connectors.file.jar}</li>
<li>{@code <edgent-target>/connectors/http/lib/edgent.connectors.http.jar}</li>
<li>{@code <edgent-target>/connectors/iotp/lib/edgent.connectors.iotp.jar}</li>
<li>{@code <edgent-target>/connectors/jdbc/lib/edgent.connectors.jdbc.jar}</li>
<li>{@code <edgent-target>/connectors/kafka/lib/edgent.connectors.kafka.jar}</li>
<li>{@code <edgent-target>/connectors/mqtt/lib/edgent.connectors.mqtt.jar}</li>
<li>{@code <edgent-target>/connectors/pubsub/lib/edgent.connectors.pubsub.jar}</li>
<li>{@code <edgent-target>/connectors/wsclient-javax.websocket/lib/edgent.connectors.wsclient.javax.websocket.jar} [*]</li>
</ul>
[*] You also need to include a {@code javax.websocket} client implementation
if you use the {@code wsclient} connector.  Include the following to use
an Eclipse Jetty based implementation:
<ul>
<li>{@code <edgent-target>/connectors/javax.websocket-client/lib/javax.websocket-client.jar}</li>
</ul>
<p>
Include jars for any Edgent analytic features you use:
<ul>
<li>{@code <edgent-target>/analytics/math3/lib/edgent.analytics.math3.jar}</li>
<li>{@code <edgent-target>/analytics/sensors/lib/edgent.analytics.sensors.jar}</li>
</ul>
Include jars for any Edgent utility features you use:
<ul>
<li>{@code <edgent-target>/utils/metrics/lib/edgent.utils.metrics.jar} - for the {@code org.apache.edgent.metrics} package</li>
</ul>
Edgent uses <a href="www.slf4j.org">slf4j</a> for logging,
leaving the decision of the actual logging implementation to your application
(e.g., {@code java.util.logging} or {@code log4j}).  
For {@code java.util.logging} you can include:
<ul>
<li>{@code <edgent-target>/ext/slf4j-jdk-1.7.12.jar}</li>
</ul>
</body>
