You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flagon.apache.org by jk...@apache.org on 2024/10/23 22:18:18 UTC
(flagon) 01/01: remove stale information from site
This is an automated email from the ASF dual-hosted git repository.
jky pushed a commit to branch site-cleanup
in repository https://gitbox.apache.org/repos/asf/flagon.git
commit a71bbb4eca396c239ac3a1496a7bff7b047b580d
Author: Jason Young <jk...@pm.me>
AuthorDate: Wed Oct 23 15:18:04 2024 -0700
remove stale information from site
---
site/Dockerfile | 7 +-
site/_docs/contributing.md | 8 +-
site/_docs/distill/analytics.md | 66 -------
site/_docs/distill/api.md | 22 ---
site/_docs/distill/changelog.md | 26 ---
site/_docs/distill/http.md | 208 ---------------------
site/_docs/distill/index.md | 162 +---------------
site/_docs/distill/models.md | 201 --------------------
site/_docs/distill/start.md | 19 --
site/_docs/distill/utilities.md | 63 -------
site/_docs/stack/index.md | 70 -------
site/_docs/stack/scaling.md | 367 -------------------------------------
site/_docs/stout/index.md | 30 ---
site/_docs/stout/start.md | 104 -----------
site/_docs/tap/index.md | 12 --
site/_docs/userale/index.md | 21 ---
site/_docs/useralejs/API.md | 165 +++++------------
site/_docs/useralejs/build.md | 14 +-
site/_docs/useralejs/dataschema.md | 267 ++++++++++++---------------
site/_docs/useralejs/index.md | 28 +--
site/_docs/useralepy/api.md | 183 ------------------
site/_docs/useralepy/changelog.md | 53 ------
site/_docs/useralepy/index.md | 111 -----------
site/_docs/useralepy/start.md | 59 ------
site/_includes/doc_sidebar.html | 105 -----------
site/_includes/footer.html | 11 --
site/_includes/header.html | 8 -
site/_includes/tapDemo.html | 93 ----------
site/_pages/community.html | 38 +---
site/_pages/stack.html | 38 ----
site/_pages/stout.html | 38 ----
site/_pages/tap.html | 30 ---
site/_pages/userale.html | 2 +-
site/_site/stack/index.html | 232 -----------------------
site/_site/stout/index.html | 250 -------------------------
site/index.html | 34 +---
36 files changed, 194 insertions(+), 2951 deletions(-)
diff --git a/site/Dockerfile b/site/Dockerfile
index 5afd3f9..13706a1 100644
--- a/site/Dockerfile
+++ b/site/Dockerfile
@@ -1,14 +1,15 @@
-FROM phusion/passenger-full
+FROM phusion/passenger-full:3.0.7
LABEL org.opencontainers.image.authors="poorejc@apache.org"
-RUN bash -lc 'rvm --default use ruby-3.2.3'
+RUN bash -lc 'rvm list'
+RUN bash -lc 'rvm --default use ruby-3.2.5'
# Cache bundle
COPY Gemfile* /tmp/
WORKDIR /tmp
RUN bundle install
-ENV app /app
+ENV app=/app
# Install npm modules
COPY package.json /tmp/
diff --git a/site/_docs/contributing.md b/site/_docs/contributing.md
index 6bed431..3e4951c 100644
--- a/site/_docs/contributing.md
+++ b/site/_docs/contributing.md
@@ -10,15 +10,15 @@ There are certain procedures that must be followed for all contributions. These
See individual product guides for product-specific information on getting started as a contributor, setup and testing, code style, etc.
-To report a bug or other issue, simply create an issue in JIRA, as described in Step 1 below.
+To report a bug or other issue, simply create an issue in Giithub, as described in Step 1 below.
-#### 1. Create an issue in JIRA
+#### 1. Create an issue in Github
- All changes to Apache Flagon must have a corresponding issue in [JIRA](https://issues.apache.org/jira/browse/FLAGON) so the change can be properly tracked. If you do not already have an account on JIRA, you will need to create one before creating your new issue.
+ All changes to Apache Flagon must have a corresponding issue in [GitHub](https://github.com/apache?q=flagon) so the change can be properly tracked. If you do not already have an account on Github, you will need to create one before creating your new issue.
#### 2. Make and test your changes locally
- The Apache Flagon source code is maintained in [several git repositories](https://gitbox.apache.org/repos/asf?s=flagon) hosted by Apache. These repositories are mirrored and more easily available [on GitHub](https://github.com/apache?q=flagon). To make your changes, fork the appropriate GitHub repository and make commits to a topic branch in your fork. Commits should be made in logical units and must reference the JIRA issue number:
+ The Apache Flagon source code is maintained in [several git repositories](https://gitbox.apache.org/repos/asf?s=flagon) hosted by Apache. These repositories are mirrored and more easily available [on GitHub](https://github.com/apache?q=flagon). To make your changes, fork the appropriate GitHub repository and make commits to a topic branch in your fork. Commits should be made in logical units:
```shell
git commit -S -m "[FLAGON-123] High-level message describing the changes."
```
diff --git a/site/_docs/distill/analytics.md b/site/_docs/distill/analytics.md
deleted file mode 100644
index 3cc5a28..0000000
--- a/site/_docs/distill/analytics.md
+++ /dev/null
@@ -1,66 +0,0 @@
----
-title: Apache Distill Analytics
-component: distill
----
-
-### Graph Analytics
-
->
-```python
-class distill.algorithms.graphs.graph.GraphAnalytics
-```
-
-> **Bases:** object
-
-> Distill’s graph analytics package. Apply graph algorithms to User Ale log data segmented with Stout.
-
->
-```python
-static foo()
-```
-
-### Statistics Package
-
->
-```python
-class distill.algorithms.stats.hist.Hist
-```
-
-> **Bases:** object
-
-> Distill’s statistics package. Apply statistical algorithms to User Ale log data segmented with Stout. Need to query/filter by session or user id.
-
->
-```python
-get_value()
-```
-
->
-```python
-static histogram(app, app_type=None, q='')
-```
-Only works on numerical data.
-
->
-```python
-static terms(app, app_type=None, q='')
-```
-Group by field (find all elements )
-
->
-```python
-static unique_terms(app, app_type=None, q='')
-```
-Aggregate the number of unique terms in a field. Missing values are counted and marked as “N/A”.
-
-> **Todo:** Need to incorporate QueryBuilder library instead of manually generating queries.
-
-> **Parameters:**
-- app – [string] application name
-- app_type – [string] application type
-- field – [string] field to search against for unique values
-- size – [int] the top size terms returned in the result. Default value is 10.
-- min_hits – [int] return tags which have been found in min_hits or more. Default value is 1.
-
-> **Returns:**
-- [dict] dictionary of results
diff --git a/site/_docs/distill/api.md b/site/_docs/distill/api.md
deleted file mode 100644
index 43de309..0000000
--- a/site/_docs/distill/api.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: API Documentation
-component: distill
-priority: 9
----
-
-### [Apache Distill HTTP Client]({{ '/docs/distill/http.html' | prepend: site.baseurl }})
-- RESTful Endpoints
-
-### [Apache Distill Analytics]({{ '/docs/distill/analytics.html' | prepend: site.baseurl }})
-- Graph Analytics
-- Statistics Package
-
-### [Apache Distill Models]({{ '/docs/distill/models.html' | prepend: site.baseurl }})
-- Brew Interface
-- Stout Interface
-- UserAle Interface
-
-### [Apache Distill Utilities]({{ '/docs/distill/utilities.html' | prepend: site.baseurl }})
-- Query Builder
-- Exception Handling
-- Validation Library
diff --git a/site/_docs/distill/changelog.md b/site/_docs/distill/changelog.md
deleted file mode 100644
index 0fc6b00..0000000
--- a/site/_docs/distill/changelog.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Changelog
-component: distill
-priority: 99
----
-
-### 0.1.3 (2016-09-19)
-- Moved to Apache.
-- Updated all documentation.
-- Added License headers
-- Docker compose file added to assist deployment of ELK stack with Distill
-
-### 0.1.2 (2016-07-22)
-- Moved CRUD operations from UserAle model to Brew model.
-- Added API specs to segment UserAle data from Elasticsearch
-- Added deployment instructions
-
-### 0.1.1 (2016-06-14)
-- Completed index route for status endpoint which lists all applications registered and their document count segmented by type.
-- Updated setup.py to reference deploy scripts
-- Example configuration to deploy Distll with Gunicorn and Nginx for Linux/Mac users
-- Added UserAle and Stout classes.
-- Updated requirements.txt for deployment.
-
-### 0.1.0 (2016-04-01)
-- Initial release.
diff --git a/site/_docs/distill/http.md b/site/_docs/distill/http.md
deleted file mode 100644
index 9c8267a..0000000
--- a/site/_docs/distill/http.md
+++ /dev/null
@@ -1,208 +0,0 @@
----
-title: Apache Distill HTTP Client
-component: distill
----
-
-### RESTful Endpoints
->
-```python
-distill.app.create(app_id)
-```
-
-> Registers an application in Distill.
-
->
-```shell
-$ curl -XPOST https://localhost:8090/xdata_v3
-```
-
-> **Parameters:**
-- app_id – Application name
-
-> **Returns:**
-- Newly created application’s status as JSON blob
-
->
-```python
-distill.app.delete(app_id)
-```
-
-> Deletes an application permentantly from Distill
-
->
-```shell
-$ curl -XDELETE https://localhost:8090/xdata_v3
-```
-
-> **Parameters:**
-- app_id – Application name
-
-> **Returns:**
-- Boolean response message as JSON blob
-
->
-```python
-distill.app.denoise(app_id)
-```
-
-> Bootstrap script to cleanup the raw logs. A document type called “parsed” will be stored with new log created unless specified in the request. Have option to save parsed results back to data store. These parsed logs can be intergrated with STOUT results by running the stout bootstrap script.
-
->
-```shell
-$ curl -XGET https://localhost:8090/denoise/xdata_v3?save=true&type=parsed
-```
-
-> **Parameters:**
-- app_id – Application name
-
-> **Returns:**
-- [dict]
-
->
-```python
-distill.app.index()
-```
-
-> Show Distill version information, connection status, and all registered applications.
-
->
-```shell
-$ curl -XGET https://localhost:8090
-```
-
->
-```javascript
-{
- "author" : "Michelle Beard",
- "email" : "msbeard@apache.org",
- "name": "Distill",
- "status" : true,
- "version" : "1.0",
- "applications" : {
- "xdata_v3" : {
- testing: 205,
- parsed: 500,
- },
- "test_app" : {
- logs: 500,
- parsed: 100,
- }
- }
-}
-```
-
-> **Returns:**
-- Distill’s status information as JSON blob
-
->
-```python
-distill.app.merge_stout()
-```
-
-> Bootstrap script to aggregate user ale logs to stout master answer table This will save the merged results back to ES instance at new index stout OR denoise data first, then merge with the stout index... If STOUT is enabled, the select method expects a stout index to exist or otherwise it will return an error message.
-
->
-```shell
-$ curl -XGET https://locahost:8090/stout/xdata_v3
-```
-
-> **Returns:**
-- Status message
-
->
-```python
-distill.app.page_not_found(error)
-```
-
-> Generic Error Message
-
->
-```python
-distill.app.segment(app_id, app_type)
-```
-
-> Search against an application on various fields.
-
->
-```shell
-$ curl -XGET https://[hostname]:[port]/search/
-xdata_v3?q=session_id:A1234&size=100
-&scroll=false&fl=param1,param2
-```
-
-> **Parameters:**
-- app_id – Application name
-- app_type – Optional document type to filter against
-- q – Main search query. To return all documents, pass in q=*:*
-- size – Maximum number of documents to return in request
-- scroll – Scroll id if the number of documents exceeds 10,000
-- fl – List of fields to restrict the result set
-
-> **Returns:**
-- JSON blob of result set
-
->
-```python
-distill.app.stat(app_id, app_type)
-```
-
-> Generic histogram counts for a single registered application filtered optionally by document type. View the Statistics document page for method definitions and arguments
-
->
-```shell
-$ curl -XGET https://localhost:8090/stat/xdata_v3/
-testing/?stat=terms&elem=signup&event=click
-```
-
-> **Parameters:**
-- app_id – Application name
-- app_type – Application type
-
-> **Returns:**
-- JSON blob of result set
-
->
-```python
-distill.app.status(app_id, app_type)
-```
-
-> Presents meta information about an registered application, including field names and document types.
-
->
-```shell
-$ curl -XGET https://localhost:8090/status/xdata_v3
-```
-
->
-```javascript
-{
- "application": "xdata_v3",
- "health": "green",
- "num_docs": "433",
- "status": "open"
-}
-```
-w
-> **Parameters:**
-- app_id – Application name
-
-> **Returns:**
-- Registered applications meta data as JSON blob
-
->
-```python
-distill.app.update(app_id)
-```
-
-> Renames a specific application
-
->
-```shell
-$ curl -XPOST https://localhost:8090/update/xdata_v3?name="xdata_v4"
-```
-
-> **Parameters:**
-- app_id – Application name
-
-> **Returns:**
-- Boolean response message as JSON blob
diff --git a/site/_docs/distill/index.md b/site/_docs/distill/index.md
index a30a104..d4ea146 100644
--- a/site/_docs/distill/index.md
+++ b/site/_docs/distill/index.md
@@ -7,164 +7,4 @@ priority: 0
### Installing Apache Distill
-#### This project is not currently maintained and will be refactored. If you are interested in Distill, join the discussion on our [dev list](mailto:dev-subscribe@flagon.incubator.apache.org).
-
-The first step is to install Apache Distill. First, checkout the latest version of Apache Distill.
-
- ```shell
- $ git clone https://gitbox.apache.org/repos/asf/incubator-flagon-distill.git
- ```
-
-Apache Distill is a python project, so it can be installed like any other python library. Several operating systems (Mac OS X, Major Versions of Linux/BSD) have Python pre-installed, so you should just have to run
-
- ```shell
- $ easy_install distill
- ```
-
- or
-
- ```shell
- $ pip install distill
- ```
-
-Users are strongly recommended to install Apache Distill in a virtualenv. Instructions to setup an virtual environment will be explained below.
-
-> **Note**
-When the package is installed via easy_install or pip this function will be bound to the distill executable in the Python installation’s bin directory (on Windows - the Scripts directory).
-
-### Installing Apache Distill in an Virtual Environment
-
-virtualenv is a tool to create isolated Python environments. virtualenv creates a folder which contains all the necessary executables to use the packages that the Apache Distill project would need.
-
-Install virtualenv via pip:
-
- ```shell
- $ sudo env/bin/pip install virtualenv
- ```
-
-Start by changing directory into the root of Apache Distill’s project directory, and then use the virtualenv command-line tool to create a new environment:
-
- ```shell
- $ mkdir env
- $ virtualenv env
- ```
-
-Activate environment:
-
- ```shell
- $ source env/bin/activate
- ```
-
-Install Apache Distill requirements:
-
- ```shell
- $ env/bin/pip -r requirements.txt
- ```
-
-To build the source code and run all unit tests.
-
- ```shell
- $ env/bin/python setup.py develop test
- ```
-
-Launch local Apache Distill server, running on localhost:8090:
-
- ```shell
- $ env/bin/dev
- ```
-
-Deactivate environment
-
- ```shell
- $ deactivate
- ```
-
-### Running Apache Distill on Docker Compose
-From the project directory, start up Apache Distill in the background.
-
- ```shell
- $ docker-compose up -d
- $ docker-compose ps
- ```
-
-To stop services once you’ve finished with them:
-
- ```shell
- $ docker-compose stop
- ```
-
-### Deployment with Nginx and Gunicorn
-
-I will describe a setup with nginx as a web server on Ubuntu. A web server cannot communicate directly with a Flask application such as Apache Distill. Thus gunicorn will be used to act as a medium between the web server and Apache Distill. Gunicorn is like an application web server that will be running behind nginx, and it is WSGI compatible. It can communicate with applications that support WSGI – Flask, Django, etc.
-
-Install requirements.
-
- ```shell
- $ sudo apt-get update
- $ sudo apt-get install -y python python-pip nginx gunicorn
- ```
-
-Create a directory to store the project.
-
- ```shell
- $ sudo mkdir /home/pubic_html && cd /home/public_html
- ```
-
-Download the project from the GitHub repository and copy the application to the /home/public_html directory.
-
- ```shell
- $ git clone https://gitbox.apache.org/repos/asf/incubator-flagon-distill.git /home/public_html
- ```
-
-Install Apache Distill’s requirements either globally or in a virutal environment:
-
- ```shell
- $ env/bin/pip install -r requirements.txt
- ```
-
-Apache Distill has provided an nginx configuration file located in distill/deploy/nginx.conf.
-
-Gunicorn will use port 8000 and handle the incoming HTTP requests.
-
-Restart nginx to load the configuration changes.
-
- ```shell
- $ sudo /etc/init.d/nginx restart
- ```
-
-Run gunicorn on port 8000.
-
- ```shell
- $ gunicorn --workers 4 --bind unix:distill.sock -m 007 deploy/run_server:app
- ```
-
-Start a new browser instance and navigate to http://localhost.
-
-### Installing Documentation
-
-If you want to manually build the documentation, the instructions are below.
-
-First, install the documentation dependencies:
-
- ```shell
- $ env/bin/pip install -r doc_requirements.txt
- ```
-
-To build Apache Distill’s documentation, create a directory at the root level of /distill called distill-docs.
-
- ```shell
- $ mkdir distill-docs & cd distill-docs
- ```
-
-Execute build command:
-
- ```shell
- # Inside top-level docs/ directory.
- $ make html
- ```
-
-This should build the documentation in your shell, and output HTML. At then end, it should say something about documents being ready in distill-docs/html. You can now open them in your browser by typing
-
- ```shell
- $ open distill-docs/html/index.html
- ```
+#### This project is currently being refactored. If you are interested in Distill, join the discussion on our [dev list](mailto:dev-subscribe@flagon.incubator.apache.org).
\ No newline at end of file
diff --git a/site/_docs/distill/models.md b/site/_docs/distill/models.md
deleted file mode 100644
index b7395e1..0000000
--- a/site/_docs/distill/models.md
+++ /dev/null
@@ -1,201 +0,0 @@
----
-title: Apache Distill Models
-component: distill
----
-
-### Brew Interface
->
-```python
-class distill.models.brew.Brew
-```
-
-> **Bases:** object
-
-> Distill supports basic CRUD operations and publishes the status of an persistenct database. Eventually it will support ingesting logs sent from an registered application.
-
->
-```python
-static create(app)
-```
-
->Register a new application in Distill
-
->
-```javascript
-{
- "application" : "xdata_v3",
- "health" : "green",
- "num_docs" : 0,
- "status" : "open"
-}
-```
-
-> **Parameters:**
-- app – [string] application name (e.g. xdata_v3)
-
-> **Returns:**
-- [dict] dictionary of application and its meta information
-
->
-```python
-static delete(app)
-```
-
->Technically closes the index so its content is not searchable.
-
-> **Parameters:**
-- app – [string] application name (e.g. xdata_v3)
-
-> **Returns:**
-- [dict] status message of the event
-
->
-```python
-static get_applications()
-```
-
->Fetch all the registered applications in Distill.
-
-> *Note:* Private indexes starting with a period are not included in the result set
-
-> **Returns:**
-- [dict] dictionary of all registered applications and meta information
-
->
-```python
-static get_status()
-```
-
-> Fetch the status of the underlying database instance.
-
-> **Returns:**
-- [bool] if connection to database instance has been established
-
->
-```python
-static read(app, app_type=None)
-```
-
-> Fetch meta data associated with an application
-
-> Example:
-```javascript
-{
- "application" : "xdata_v3",
- "health" : "green",
- "num_docs" : "100",
- "status" : "open"
- "types" : {
- "raw_logs" : {
- "@timestamp" : "date",
- "action" : "string",
- "elementId" : "string"
- },
- "parsed" : {
- "@timestamp" : "date",
- "elementId_interval" : "string"
- },
- "graph" : {
- "uniqueID" : "string",
- "transition_count" : "long",
- "p_value" : "float"
- }
- }
-}
-```
-
-> **Parameters:**
-- app – [string] application name (e.g. xdata_v3)
-
-> **Returns:**
-- [dict] dictionary of application and its meta information
-
->
-```python
-static update(app)
-```
-
-> **Todo:** Currently not implemented
-
-### Stout Interface
->
-```python
-class distill.models.stout.Stout
-```
-
-> **Bases:** object
-
- > Main Stout class to support ingest and search operations.
-
->
-```python
-static ingest()
-```
-
-> Ingest data coming from Stout to Distill
-
->
-```python
-class distill.models.stout.StoutDoc(meta=None, **kwargs)
-```
-
-> **Bases:** elasticsearch_dsl.document.DocType
-
-> Representation of a Stout document.
-
->
-```python
-save(*args, **kwargs)
-```
-
-> Save data from parsing as a Stout document in Distill
-
-### UserAle Interface
->
-```python
-class distill.models.userale.UserAle
-```
-
-> **Bases:** object
-
-> Main method of entry to perform segmentation and integration of STOUT’s master answer table (if STOUT is enabled). Advanced and basic analytics is performed in the distill.algorithms.stats and distill.algorithms.graphs module.
-
->
-```python
-static denoise(app, app_type='parsed', save=False)
-```
-
->
-```python
-static search(app, app_type=None, filters=[],
-size=100, include='*', scroll=None, sort_field=None)
-```
-
-> Perform a search query.
-
-> **Parameters:**
-- app – [string] application id (e.g. “xdata_v3”)
-- app_type – [string] name of the application type. If None all application types are searched.
-- filters – [list of strings] list of filters for a query.
-- size – [int] maximum number of hits that should be returned
-- sort_field – [string] sorting field. Currently supported fields: “timestamp”, “date”
-
-> **Returns**
-- [dict] dictionary with processed results. If STOUT is enabled, STOUT data will be merged with final result.
-
->
-```python
-static segment(app, app_type=None, params='')
-```
-
->Just support match all for now.
-
->
-```python
-distill.models.userale.merge_dicts(lst)
-```
-
->
-```python
-distill.models.userale.parse_query_parameters(indx, app_type=None, request_args={})
-```
diff --git a/site/_docs/distill/start.md b/site/_docs/distill/start.md
deleted file mode 100644
index ea8ec0e..0000000
--- a/site/_docs/distill/start.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Getting Started
-component: distill
-priority: 1
----
-
-#### This project is not currently maintained and will be refactored. If you are interested in Distill, join the discussion on our [dev list](mailto:dev-subscribe@flagon.incubator.apache.org).
-
-### Usage
-
-Using curl:
-
- ```shell
- $ curl -XGET 'http://localhost:8090/app/register' -d '{
- "application_name" : "my_app",
- "version" : "0.1",
- "application_description" : "my test app"
- }'
- ```
diff --git a/site/_docs/distill/utilities.md b/site/_docs/distill/utilities.md
deleted file mode 100644
index 3907032..0000000
--- a/site/_docs/distill/utilities.md
+++ /dev/null
@@ -1,63 +0,0 @@
----
-title: Apache Distill Utilities
-component: distill
----
-
-### Query Builder
->
-```python
-class distill.utils.query_builder.QueryBuilder(query=None)
-```
-
-> **Bases:** object
-
-#### add_filters(filters)
-
-#### add_sorting(sort_field='', sort_order='')
-
-### Exception Handling
->
-```python
-exception distill.utils.exceptions.Error
-```
-
-> **Bases:** exceptions.Exception
-
-> Base class for exceptions.
-
->
-```python
-exception distill.utils.exceptions.ValidationError(url, msg)
-```
-
-> **Bases:** distill.utils.exceptions.Error
-
-> Exceptions raised for errors in validated a url.
-
-### Validation Library
->
-```python
-distill.utils.validation.str2bool(v)
-```
-
-> Convert string expression to boolean
-
-> **Parameters:**
-- v – Input value
-
-> **Returns:**
-- Converted message as boolean type
-- Return type: bool
-
->
-```python
-distill.utils.validation.validate_request(q)
-```
-
-> Parse out request message and validate inputs
-
-> **Parameters:**
-- q – Url query string
-
-> **Raises:**
-- ValidationError – if the query is missing required parameters
diff --git a/site/_docs/stack/index.md b/site/_docs/stack/index.md
deleted file mode 100644
index cbb5f85..0000000
--- a/site/_docs/stack/index.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-title: Getting Started
-component: stack
-permalink: /docs/stack/
-priority: 0
----
-
-The Apache Flagon project provides a streamlined deployment solution for including behavioral logging capabilities in your project and for monitoring and analyzing your log data in a containerized Elastic backend. Our Docker container includes an Elastic backend, pre-configured, interactive Kibana dashboards. The container also includes prototype applications for exploration, Apache Distill and Apache Tap.
-
-Before you begin, you'll need [NPM and Node.js](https://nodejs.org/), [Docker](https://www.docker.com/) and [Docker Compose](https://docs.docker.com/compose/install/) installed before you start.
-
-### Building and Deploying UserALE.js
-
-[Apache UserALE.js](https://github.com/apache/incubator-flagon-useralejs) is the Apache Flagon's thin-client behavioral logging solution. Below, you'll find short-hand instructions for getting started with UserALE.js. For complete instructions, see our [README](https://github.com/apache/incubator-flagon-useralejs/blob/master/README.md).
-
-First, download the [release](http://flagon.incubator.apache.org/releases/) or clone our [repo on GitHub](https://github.com/apache/incubator-flagon-useralejs/tree/master). Apache UserALE.js is also available as an [NPM package](https://www.npmjs.com/package/useralejs).
-
-Next, **install Dependencies**.
- ```shell
- #intall NPM packages into build directory
- $ npm install
- ```
-
-Then, **build UserALE.js**.
- ```shell
- #produce UserALE.js build artifacts
- $ npm run build
- ```
-
-The build process produces a minified version of UserALE.js and a Web Extension package, giving you two options depending on your needs. You can skip the build process if you just want to explore UserALE.js; just use the minified script found in our [repo](https://github.com/apache/incubator-flagon-useralejs/tree/master/build).
-
-**Option 1: Include Apache UserALE.js in your project:**
-
- ```markdown
- #include userale in your project via script tag
- <script src="/path/to/userale-2.0.2.min.js" data-url="http://yourLoggingUrl"></script>
- ```
-Apache UserALE.js allows for configuration via HTML 5 data parameters. For a complete list of options, see the [docs]({{ '/docs/useralejs' | prepend: site.baseurl }}) or the [README](https://github.com/apache/incubator-flagon-useralejs/blob/master/README.md). You can also modify Apache UserALE.js using our API. Find examples in our [repos](https://github.com/apache/incubator-flagon-useralejs/tree/FLAGON-192).
-
-**Option 2: Follow the [instructions](https://github.com/apache/incubator-flagon-useralejs/tree/FLAGON-192/src/UserALEWebExtension) to install the Apache UserALE.js web extension into your browser.**
-
-You can now start generating behavioral log data from your page, or through your browser. To view these logs, you can either utilize our [example logging server](https://github.com/apache/incubator-flagon-useralejs/tree/master/example) and log to file, or you can log directly to our Elastic backend. For complete instructions, see the [README](https://github.com/apache/incubator-flagon/tree/master/docker)
-### Building and Using the Elastic Backend
-
-[Apache Flagon](https://github.com/apache/incubator-flagon) utilizes an Elastic stack for transforming, indexing, and storing log data. With Elastic, you'll not only have the ability to search and query log data, but you'll also be able to monitor it and visualize it through Kibana.
-
-To build our single-node Elastic instance, **first clone our [Docker repo](https://github.com/apache/incubator-flagon/tree/master/docker)**. Note that for production-level deployments, you should probably check out our [Kubernetes build](https://github.com/apache/incubator-flagon/tree/master/kubernetes) and our [guide for scaling]({{ '/docs/stack/scaling' | prepend: site.baseurl }})).
-
-Then, **start up a virtual machine**.
- ```shell
-# start virtual machine and requisite network
-$ docker-machine create --virtualbox-memory 3072 --virtualbox-cpu-count 2 flagon
-$ docker-machine ssh flagon sudo sysctl -w vm.max_map_count=262144
-$ docker network create esnet
- ```
-Next, **start Elastic services**.
-
- ```shell
- #start Elastic services
- $ docker-compose up -d elasticsearch
- $ docker-compuse up -d logstash
- $ docker-compose up -d kibana
- ```
-**Configure UserALE.js** to send logs to localhost:8100. This is easy: either modify the script tag for port 8100 or open up the "options" tab of the web extension and enter localhost:8100 as your logging end-point.
-
-Before starting Kibana, **generate some logs**. Move your mouse around, click around, etc. Do this for a couple minutes to populate the index.
-
-Finally, **navigate to localhost:5601 (Kibana), set an index pattern, and load our visualizations and dashboards** to see your logs. Find simple instructions in our [README](https://github.com/apache/incubator-flagon/tree/master/docker).
-
-Subscribe to our [dev list](mailto:dev-subscribe@flagon.incubator.apache.org) and join the conversation!
diff --git a/site/_docs/stack/scaling.md b/site/_docs/stack/scaling.md
deleted file mode 100644
index bf2bc56..0000000
--- a/site/_docs/stack/scaling.md
+++ /dev/null
@@ -1,367 +0,0 @@
----
-title: Scaling Considerations
-component: stack
-permalink: /docs/stack/scaling/
-priority: 0
----
-
-### Scaling Apache Flagon: An Introduction and First Principles
-
-This guide touches on some basic principles to keep in mind as you're planning for scale with [Apache Flagon](https://github.com/apache/incubator-flagon).
-
-We provide high-level guidance and considerations for working with an Elastic stack to scale [Apache UserALE.js]({{ '/docs/useralejs' | prepend: site.baseurl }}) services.
-
-This guide also provides an overview of benchmarking tools and methodologies for accurately gauging your scaling needs.
-
-**"It Depends..."**
-
-The best way to scale Apache Flagon depends entirely on your use-case:
-
-* how you'll use your Apache UserALE.js data;
-* which [data streams]({{ '/docs/useralejs/dataschema' | prepend: site.baseurl }}) you'll use;
-* how long you need to keep your data.
-
-**The Apache Flagon Single-Node Elastic Container is an Ingredient, Not a Whole Solution**
-
-The single-node Elastic (ELK) build distributed by [Apache Flagon]({{ '/docs/stack' | prepend: site.baseurl }}) is not alone suitable for most production-level use-cases.
-
-This build may be suitable for limited user-testing; just a few days of data collection from a specific application, from just a few users.
-
-However, a single-node Elastic build will fail quickly for any enterprise-scale use-cases.
-
-Instead, this container is meant to be a building block for larger solutions:
-
-1. Our ELK .yml config files for our Docker container can be used as the building-blocks for your very own load-balanced, [multi-node cluster](https://dzone.com/articles/elasticsearch-tutorial-creating-an-elasticsearch-c).
-1. You can use our [Kubernetes build](https://github.com/apache/incubator-flagon/tree/master/kubernetes), which relies on our Docker assets, to scale your Apache Flagon stack to meet your needs.
-1. You can use our single-node container to scale out in [AWS Elastic Beanstalk (EBS)](https://aws.amazon.com/elasticbeanstalk/).
-
-**Apache Flagon Data Also Scales**
-
-Flagon's behavioral logging capability, [Apache UserALE.js]({{ '/docs/useralejs' | prepend: site.baseurl }}) also scales. The most efficient way to manage scale and resources, is to [configure]({{ '/docs/useralejs/API' | prepend: site.baseurl }}) or [modify]({{ '/docs/useralejs/modifying' | prepend: site.baseurl }}) UserALE.js.
-### Sizing Up an Elastic Stack
-
-Elasticsearch isn't a database, its a document store; UserALE.js "logs" aren't logs once they're indexed in Elastic, they become searchable documents.
-
-Elastic has many useful [guides]((https://www.elastic.co/blog/found-sizing-elasticsearch)) on sizing and scaling. Below, we're adding some thoughts based on Apache Flagon's own eccentricities.
-
-####Document generation rate is the most important consideration to scaling
-
-Default [Apache UserALE.js parameters]({{ '/docs/useralejs' | prepend: site.baseurl }}) produce loads of [data]({{ '/docs/useralejs/dataschema' | prepend: site.baseurl }}), even from a single users.
-
-We strongly suggest that you consider whether you need data from all our event-handlers.
-
-If you don't need mouseover events, for example, you can dramatically reduce the rate at which you generate data and the resources you'll need.
-
-Instead, you can [modify source]({{ '/docs/useralejs/modifying' | prepend: site.baseurl }}) or use the [UserALE.js API]({{ '/docs/useralejs/API' | prepend: site.baseurl }}), and/or use [configurable HTLM5 parameters in our script tag]({{ '/docs/useralejs' | prepend: site.baseurl }}) to manage data generation rate.
-
-####Resource needs will also grow with document length
-
-[Strings](https://blog.appdynamics.com/product/estimating-costs-of-storing-documents-in-elasticsearch/) within UserALE.js logs (see also [Elastic's tips on indexing strings](https://www.elastic.co/guide/en/elasticsearch/reference/5.5/tune-for-disk-usage.html#_use_literal_best_compression_literal)) can add to scaling needs.
-
-One of the discriminating features of Apache UserALE.js is its precision:
-
-* it captures target DOM elements;
-* it captures the DOM path that elements are nested in;
-* it captures loads of metadata (URI, page title, page url, referrer, etc.).
-
-UserALE.js fields like `path` and `pageUrl` can be lengthy for certain pages, increasing string length per document.
-
-Instead, you might consider relying on `pageTitle` rather than `pageUrl`, or just `target` instead of `path`
-
-Below is a sample `path` for a Kibana element:
-
- ```shell
- ...
- "pageTitle": "Discover - Kibana",
- "toolName": "test_app",
- "userId": "nobody",
- "type": "click",
- "target": "a.kuiButton kuiButton--small kuiButton--secondary",
- "path": [
- "a.kuiButton kuiButton--small kuiButton--secondary",
- "div.kbnDocTableDetails__actions",
- "td",
- "tr",
- "tbody",
- "table.kbn-table table",
- "div.kbnDocTable__container",
- "doc-table",
- "section.dscTable",
- "div.dscResults",
- "div.dscWrapper__content",
- "div.dscWrapper col-md-10",
- "div.row",
- "main.container-fluid",
- "discover-app.app-container",
- "div.application tab-discover",
- "div.app-wrapper-panel",
- "div.app-wrapper",
- "div.content",
- "div#kibana-body",
- "body#kibana-app.coreSystemRootDomElement",
- "html",
- "#document",
- "Window"
- ...
- ```
-
-Through simple [modifications to UserALE.js source]({{ '/docs/useralejs/modifying' | prepend: site.baseurl }}) or with the UserALE.js [API]({{ '/docs/useralejs/API' | prepend: site.baseurl }}) you can alias verbose fields in your logs to reduce resource consumption.
-
-####Additional services attached to your stack can increase resource consumption
-
-Apache Flagon scales--Elastic products make it easy to attach other services to your Apache Flagon stack.
-
-The *number of services* connected to your stack will affect your Elastic stacks' performance.
-
-Any production-level deployment will require, at minimum a simple three-node [Elastic cluster](https://dzone.com/articles/elasticsearch-tutorial-creating-an-elasticsearch-c) (with one load-balancing node).
-
-As you configure that cluster, be mindful that Elasticsearch is indexing and servicing queries and aggregations for connected servies.
-
-Analytical services connected to the stack can consume significant resources and increase indexing and search time.
-
-This can be problematic for real-time analytical and monitoring applications (including Kibana).
-
-For hefty analytical services, it may be worth dedicating specific nodes in your cluster to service them.
-
-
-### Benchmarking Tools and Methods for Sizing your Apache Flagon Stack
-
-For the reasons above, its really critical to do some benchmarking for your use-case prior to deciding on a scaling strategy.
-
-This guide outlines a set of tools and steps for running your own benchmarking study using Flagon's [single-node container]({{ '/docs/stack' | prepend: site.baseurl }}).
-
-To generate log data, use our [UserALE.js Example](https://github.com/apache/incubator-flagon-useralejs/tree/master/example) test utility or your own website.
-
-Our test utility that makes it easy to [modify]({{ '/docs/useralejs/modifying' | prepend: site.baseurl }}) UserALE.js HTML5 and API parameters on the fly.
-
-However, you'll want to experiment with your own page/application for more accurate benchmarks.
-
-1. **Start up the Apache Flagon Elastic Stack (detailed instructions [here](https://github.com/apache/incubator-flagon/tree/master/docker)).**
-
- Important: as noted in the instructions, you'll need to have collected some log data to establish the index.
-
-1. **Once Elasticsearch, Logstash, Kibana, and metricbeat are up, look at the `userale` index stats.**
- ```shell
- #Index Stats using Elastic's _stats API
- $ curl localhost:9200/index_name/_stats?pretty=true
-
- #Tailored for Apache Flagon default settings
- $ curl localhost:9200/userale/_stats?pretty=true
-
- #Or, view in your browser
- http://localhost:9200/userale/_stats?pretty=true
- ```
- Find the `indices` portion of the output. It looks like this (#note annotations):
- ```shell
- ...
- "indices" : {
- "userale" : { #this is the index UserALE.js logs write to
- "uuid" : "0h0Wxe2cSwqMALs4QCJ8Tw",
- "primaries" : {
- "docs" : {
- "count" : 1284, #this is the total # of documents in the userale index
- "deleted" : 0
- },
- "store" : {
- "size_in_bytes" : 241212 #this is size of the index in bytes (.24 MB).
- ...
- ```
- Let's call this value a simple benchmark.
-
- As you continue benchmarking, the `userale` index "size_in_bytes" will be one of your key metrics.
-
-1. **Next, let's see how much data UserALE.js produces with default parameters on your page or app.**
-
- Drop in a UserALE.js script-tag into your project (see [instructions]({{ '/docs/useralejs' | prepend: site.baseurl }})).
-
- Here is an example of the script tag (with `settings`) we're using in the UserALE.js Example page for this test:
- ```
- <script
- src="file:/// ... /UserALEtest/userale-1.1.0.min.js"
- data-url="http://localhost:8100/"
- data-user="example-user"
- data-version="1.1.1"
- data-tool="Apache UserALE.js Example"
- ></script>
- ```
- To get a conservative upper-bound, generate as many mouseover and scroll behaviors in your page/app as you can.
-
- Doing that for 5 minutes solid, our `userale` index looks like this (#note annotations):
-
- ```shell
- "indices" : {
- "userale" : {
- "uuid" : "0h0Wxe2cSwqMALs4QCJ8Tw",
- "primaries" : {
- "docs" : {
- "count" : 3282, #new userale document count
- "deleted" : 0
- },
- "store" : {
- "size_in_bytes" : 820978 #new size of the index (.82 MB)
- ```
- **That's +1,998 documents (2000) and +579,866 bytes (.58 MB) generated with UserALE.js by one user in 5 mins**.
-
- Assuming this rate over an 8 hour period each day for 20 working days: that's **1.1 GB per month**.
-
- **This is an ultra-conservative, worst-case-scenario estimate** because no one uses pages or applications this way.
-
- If you're a scientist or researcher, these figures might be fine, but it might be overkill for business analytics.
-
- To find the biggest culprit in data generation: take a look at our `Apache Flagon Page Usage Dashboard` to see.
-
- <img src= "/images/mouseOverBench1.png" width="750" height="500" />
-
- Mouseovers accounted for a lot of the data we just produced--its written frequently to index.
-
-
-1. **Next, scale back UserALE.js mouseover handling and see how this changes data generation rate**.
-
- Using the UserALE.js HTML5 `settings` in our script tag, you can "downsample" certain event handler that generate a lot of documents.
-
- Here's what our script tag looks like now:
- ```
- <script
- src="file:/// ... /UserALEtest/userale-1.1.0.min.js"
- data-url="http://localhost:8100/"
- data-user="example-user"
- data-version="1.1.1"
- data-resolution=1000 #increased the delay between collection of frequent events (e.g., mouseovers).
- data-tool="Apache UserALE.js Example"
- ></script>
- ```
- Next, replicate your benchmarking, behaving in a similar way for the same amount of time.
-
- Here's what our `userale` index looks like now after another 5 minutes of vigorous behavior.
-
- ```shell
- "indices" : {
- "userale" : {
- "uuid" : "0h0Wxe2cSwqMALs4QCJ8Tw",
- "primaries" : {
- "docs" : {
- "count" : 4800, #new userale document count
- "deleted" : 0
- },
- "store" : {
- "size_in_bytes" : 115978 #new size of the index (1.1 MB)
- ```
- **That is +1518 documents and +295K bytes (.30 MB)**
-
- But, it's 500 fewer than our first benchmark and ~40% less growth in the store.
-
- At **~576 MB per working month** we've cut data generation considerably by modifying one parameter in the script tag.
-
- The proportion of mouseover events is down by ~50%, and 25% fewer documents overall:
-
- <img src= "/images/mouseOverBench2.png" width="750" height="500" />
-
-1. **Still too much data? Below are some other ways to curb the growth of your `userale` index**.
-
- * Modify [UserALE.js source](https://github.com/apache/incubator-flagon-useralejs/tree/master/src) to cut down on event handlers (`attachHandlers.js`).
- * Drop interval logging by modifying UserALE.js [UserALE.js source](https://github.com/apache/incubator-flagon-useralejs/tree/master/src) (`attachHandlers.js` or `packageLogs.js`).
- * Reduce the amount of metadata you collect by modifying [UserALE.js source](https://github.com/apache/incubator-flagon-useralejs/tree/master/src) (`packageLogs.js`).
- * Use different UserALE.js script builds for different pages within your site/app to serve different logging needs.
- * You can use our [API]({{ '/docs/useralejs/API' | prepend: site.baseurl }}) for surgical precision in how specific elements (targets) on your page generate data.
-
-### Other Tools to Support Benchmarking for Scaling
-
-In our benchmarking guide, we primarily used Elastic's [`Stats` API](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-stats.html).
-
-You can **use other [Elastic APIs](https://www.datadoghq.com/blog/collect-elasticsearch-metrics/#index-stats-api)** for different views of what's going on inside your Apache Flagon stack.
-
-For more streamlined views into your indices, try the `CAT` API. Try this call in your browser:
-
- http://localhost:9200/_cat/indices?format=json&bytes=b&pretty
-
- Output is very simple and index sizes stack on top of one another
- ```shell
- [
- {
- "health" : "green",
- "status" : "open",
- "index" : ".kibana_1",
- "uuid" : "FnI_6AQYQEWp2mIxSlM8HQ",
- "pri" : "1",
- "rep" : "0",
- "docs.count" : "184",
- "docs.deleted" : "13",
- "store.size" : "366457",
- "pri.store.size" : "366457"
- },
- {
- "health" : "yellow",
- "status" : "open",
- "index" : "metricbeat-6.6.2-2019.04.22",
- "uuid" : "pDYNmzsxTFu9Z0Tc1_GdLw",
- "pri" : "5",
- "rep" : "1",
- "docs.count" : "4687",
- "docs.deleted" : "0",
- "store.size" : "6309920",
- "pri.store.size" : "6309920"
- },
- {
- "health" : "green",
- "status" : "open",
- "index" : "userale",
- "uuid" : "0h0Wxe2cSwqMALs4QCJ8Tw",
- "pri" : "1",
- "rep" : "0",
- "docs.count" : "14018",
- "docs.deleted" : "0",
- "store.size" : "2235963",
- "pri.store.size" : "2235963"
- },
- {
- "health" : "yellow",
- "status" : "open",
- "index" : "metricbeat-6.6.2-2019.04.27",
- "uuid" : "wTyUBXvNRMOwpR4lDF9BNA",
- "pri" : "5",
- "rep" : "1",
- "docs.count" : "107124",
- "docs.deleted" : "0",
- "store.size" : "63263644",
- "pri.store.size" : "63263644"
- }
- ]
- ```
-
-**Use Flagon's pre-configured metricbeat service** to run with Flagon.
-
-You can use this utility to see how your Apache Flagon stack is utilizing disk and compute resources.
-
-See a sample view of Metricbeat stats below:
-
-<img src= "/images/metricBeat.png" width="750" height="500" />
-
-### Wonky Things that Can and Will Happen as You Benchmark
-
-You just finished a benchmarking session after modifying UserALE.js to produce less data.
-
-What you find is that your new store size is either dramatically bigger than your last benchmark or smaller (which should be impossible).
-
-What happened is a thing called [merging](https://www.elastic.co/guide/en/elasticsearch/guide/current/merge-process.html).
-
-As data is collected it's gathered into segments within an index. Each segment is an element of your index and takes up storage.
-
-As Elastic (Lucene) indexes, it merges these segments into larger segments to reduce the overall number of segments to minimize storage.
-
-This means that a call to Elastic's `STATS` API can result in a view into the store size at different stages in the merging process.
-
-If your store size looks smaller than your last benchmark. You should re-run it then wait.
-
-If your store size looks way to big, then wait. After a minute, call the `STATS` API again, and you'll likely see a more sensible store size.
-
-### Summary
-Benchmarking and adjusting your data-rate so that you can scale how you want to is made very easy in Apache Flagon.
-
-We combine easily deployed and modified capabilities with the power of Elastic's APIs and visualization capabilities.
-
-Again, Flagon's single-node container is not a scaling solution.
-
-It's a building block benchmarking tool to help you build and manage scale and cost.
-
-Subscribe to our [dev list](mailto:dev-subscribe@flagon.incubator.apache.org) and join the conversation!
-
diff --git a/site/_docs/stout/index.md b/site/_docs/stout/index.md
deleted file mode 100644
index 9070b9e..0000000
--- a/site/_docs/stout/index.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: About Stout
-component: stout
-permalink: /docs/stout/
-priority: 0
----
-
-#### This project is not currently maintained and will be refactored. If you are interested in STOUT, join the discussion on our [dev list](mailto:dev-subscribe@flagon.incubator.apache.org).
-
-
-The Subject Tracker for Online User Testing (STOUT) is a content management system for formal human performance experimentation. STOUT presents tools and operational tasks to each participant. In doing so, it collects:
-
-- an intake questionnaire to assess the user’s background and experience as an analyst
-- operational task performance and confidence in responses i.e. did they get the right answer? How sure are they?
-- subjective feedback (did they like how the tool worked?)
-- screen captures
-- physiological response, which help infer operator workload (how hard did they work?).
-
-The STOUT system provides human-subjects testing experiment administrators with a flexible tool for managing and tracking user progress through a series of online tasks. The STOUT system was designed to help collect information about the utility of online applications.
-
-### Who is STOUT for?
-
-This package is for developers. A framework has been built but many features and additions can still be added.
-
-This package is also for experiment administrators. This system can be used immediately to conduct new evaluations of online applications.
-
-
-### For more information
-
-STOUT was built using Django 1.6. For more advanced developer information or instructions on how to setup your own system, consult the documentation for Django [here](https://www.djangoproject.com/).
diff --git a/site/_docs/stout/start.md b/site/_docs/stout/start.md
deleted file mode 100644
index a64d14d..0000000
--- a/site/_docs/stout/start.md
+++ /dev/null
@@ -1,104 +0,0 @@
----
-title: Getting Started
-component: stout
-priority: 1
----
-#### This project is not currently maintained and will be refactored. If you are interested in STOUT, join the discussion on our [dev list](mailto:dev-subscribe@flagon.incubator.apache.org).
-
-### Getting Going...
-If you already have your own system and just want to work with the source code, then skip to the next section. Otherwise read on...
-
-The simplest way to get started, rather than build your own system from the ground up, is to download both [VirtualBox](https://www.virtualbox.org) and [Vagrant](https://www.vagrantup.com). Once you have both of those working, you can clone this repository to begin.
-
-#### Getting this working on Vagrant (VirtualBox)
-
-Get a base centos box (this may take awhile)
-
- ```bash
- vagrant box add centos_6.5 https://github.com/2creatives/vagrant-centos/
- releases/download/v6.5.3/centos65-x86_64-20140116.box
- ```
-
-Start it
-
- ```bash
- vagrant up virtualbox
- ```
-
-#### Getting this working on Vagrant (OpenStack)
-
-Get a base centos box (this may take awhile)
-
-You need 2 files:
-
-1. The first is the `.pem` (or `.cer`) file which is the KeyPair file you can download from the OpenStack dashboard.
-
-2. The second is a shell script which contains all the environment variables referenced in the Vagrantfile. This is located under API Access under the Security Settings. Once you download this file run `source $file.sh`, and this will ask you for you OpenStack password and load all the required varaibles under your current environment.
-
-Adjust the Vagrantfile to use the appropriate `.pem` file and the appropriate KeyPair name associated with that pem file. Once that is complete you can run:
-
- ```bash
- vagrant up openstack --provider=openstack
- ```
-
----------------
-### If you already have your own system...
-
-Once this package is cloned, create the database
-
- ```bash
- python manage.py syncdb
- ```
-
-This will also create a superuser.
-
-
-#### During development, if you want to drop to the database and start over run the following:
-
- ```bash
- python manage.py sqlclear op_tasks | python manage.py dbshell
- python manage.py syncdb
- python manage.py populate_db
- ```
-
-This will keep your super user and drop just the app database which is a lot nicer than deleting the whole database and starting over
-
-This process is also under the `reset_optask` command
-
- ```bash
- python manage.py reset_optask
- ```
-
---------------------------------
-### Now that STOUT is running...
-The following instructions assume you're using Vagrant. If you're using another system, you might need to alter them slightly (e.g. different IP addresses, etc.) to get the same results.
-
-#### Test operation
-Open a browser and point it to [localhost:8080](http://localhost:8080). You should see the welcome page for the XDATA Online Experiment. The system comes with a one prepopulated example task. Register a new user and test it out.
-
-#### Access admin page
-The Admin page allows direct access to the STOUT database. From this page you can manage users, tasks, and products directly. Before you can access the admin page, you need to create a superuser. If you're using Vagrant you can ssh into that system using
-
- ```bash
- vagrant ssh virtualbox
- ```
-
-Navigate to the source directory and add a superuser
-
- ```bash
- cd /var/www/op_tasks/db/
- sudo python manage.py createsuperuser
- ```
-
-Now point your browser to the admin page at [localhost:8080/admin](http://localhost:8080/admin) to begin browsing the STOUT database.
-
-#### Add subjects
-From the admin page, you can pre-register users through the Participants link.
-#### Add tasks
-You can also add new tasks for users to complete through the Op tasks link. First however you must add a dataset for the task to reference. That can be done through the Datasets link.
-#### Add products
-New products can be added through the product link. Products are tools available online. Copy and past the address for the tool into the URL field and then fill in the remaining information.
-#### Assign task sequences
-Normally, a user is assigned a random order of tasks from all those that are available. If you'd prefer to assign a sequence of tasks though that can be managed through the TaskListItem link.
-
-**Note:** If you assign multiple tasks to a single user, only mark the first task as ***Ot active*** and leave all checkboxes for the remaining tasks empty
diff --git a/site/_docs/tap/index.md b/site/_docs/tap/index.md
deleted file mode 100644
index c9a3d06..0000000
--- a/site/_docs/tap/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: Getting Started
-component: tap
-permalink: /docs/tap/
-priority: 0
----
-
-#### This project is not currently maintained and will be refactored. If you are interested in TAP, join the discussion on our [dev list](mailto:dev-subscribe@flagon.incubator.apache.org).
-
-Tap is an experimental sandbox for Apache Flagon, highlighting customer visual analytics to highlight insights derived from Apache UserAle.js. It consists of a React-Django web app that allows you to access your applications' usage data via data visualizations built in D3.
-
-Work on Tap's documentation is ongoing. To get involved, see our [Contributing]({{ '/docs/contributing' | prepend: site.baseurl }}) guide. To get started with Tap, [try out the full Flagon system]({{ '/docs/stack' | prepend: site.baseurl }}).
diff --git a/site/_docs/userale/index.md b/site/_docs/userale/index.md
deleted file mode 100644
index 9d91937..0000000
--- a/site/_docs/userale/index.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: About UserALE
-component: userale
-permalink: /docs/userale/
-priority: 0
----
-
-*Note*: Work on UserALE's documentation is ongoing. To get involved, see our [Contributing]({{ '/docs/contributing' | prepend: site.baseurl }}) guide. To get started with UserALE, [try out the full Flagon stack]({{ '/docs/stack' | prepend: site.baseurl }}).
-
-### About UserALE
-
-The User Analytic Logging Engine (UserALE) is part of Apache Flagon. UserALE is for Software Developers, HCI/UX researchers, and project managers who develop user facing software tools—applications that are used for manipulating, analyzing, or visualizing data or other systems.
-
-UserALE provides an API for instrumenting software tools, turning them into a human usability sensors. With every user interaction User ALE will transmit specially structured messages (JSON) from software tools to an activity logging server ([Elasticsearch™](http://elastic.co)). These messages not only report user activities and their timing, but provide sufficient context to understand how those activities are related to the functional organization of the software tool. This allows for [...]
-
-UserALE provides data provides insight into software tool usage frequency, users' cognitive/behavioral strategy in using tools to complete tasks, their workflows, as well as their integrative use of software tool features.
-
-
-### Who is UserALE for?
-
-UserALE is for Software Developers, HCI/UX researchers, and project managers who develop user facing software tools.
diff --git a/site/_docs/useralejs/API.md b/site/_docs/useralejs/API.md
index cb1ac2f..d8010c6 100644
--- a/site/_docs/useralejs/API.md
+++ b/site/_docs/useralejs/API.md
@@ -8,8 +8,6 @@ priority: 2
[Apache UserALE.js](https://github.com/apache/flagon-useralejs) features a robust API that allows you
customize official Apache Flagon UserALE.js [builds](https://github.com/apache/flagon-useralejs/tree/master/build) page-by-page to suite your needs.
-The API exposes a number of functions, including: `options`, `setLogFilter`, & `setLogMapper`. With these two powerful functions, you have a lot of
-latitude in customizing and curating your logs.
# API Usage
@@ -17,7 +15,7 @@ To invoke the API, simply add additional javascript code blocks under your UserA
Don't forget to add UserALE.js to your project!
-It can be deployed as either script-tag, NPM module, or via CDN! For in-depth example, see our [Getting Started Guide]({{ '/docs/useralejs' | prepend: site.baseurl }})) or source [README.md](https://github.com/apache/flagon-useralejs#usage).
+It can be deployed as either script-tag, NPM module, or via CDN! For in-depth example, see our [Getting Started Guide]({{ '/docs/useralejs' | prepend: site.baseurl }}) or source [README.md](https://github.com/apache/flagon-useralejs#usage).
Also, check out our[example test utility](https://github.com/apache/flagon-useralejs/tree/master/example) so that you can experiment with logs in your terminal!
@@ -29,156 +27,75 @@ The following API examples use script-tag deployment methods for illustration:
<!--
Add the UserALE.js script tag to the top of your doc
-->
- <script src="/path/to/userale-2.3.0.min.js" data-url="http://yourLoggingUrl"></script>
+ <script src="/path/to/userale-2.4.0.min.js" data-url="http://yourLoggingUrl"></script>
```
-## `options` Examples
+## `options()`
`options` allows you to modify UserALE.js script tag parameters. This can be particularly useful if need to pass additional data about users from your page into the logging parameters, like username and sessionID. You can build variables constructors that pass data from form data or browser storage to UserALE's paramters.
```html
-<!--
-Try out the options API to pass dynamic page data into your UserALE.js params page by page.
--->
<script type="text/javascript">
const changeMe = "me";
window.userale.options({
"userId": changeMe,
- "version": "2.3.0",
+ "version": "2.4.0",
"sessionID": "4"
})
</script>
```
-## `setLogFilter` Examples
-
-`setLogFilter` allows you to eliminate log data you don't need or want from your log stream:
-
-
-```html
-<!--
-Add additional code blocks to set the filters you want
-This simple array filter pulls mouseover data out of your log stream
--->
- <script type="text/javascript">
- window.userale.filter(function (log) {
- return (log.type != 'mouseover');
- });
- </script>
-```
-
-
-Here is one UserALE.js filter to rule them all!
-
-
-```html
-<!--
-Modify the array page-by-page to curate your log stream:
-by adding unwanted event 'types' in type_array;
-by adding unwanted log classes to eliminate 'raw' or 'interval' logs from your stream.
--->
- <script type="text/javascript">
- var type_array = ['mouseup', 'mouseover', 'dblclick', 'blur', 'focus']
- var logType_array = ['interval']
- window.userale.filter(function (log) {
- return !type_array.includes(log.type) && !logType_array.includes(log.logType);
- });
- </script>
-```
-
-
-You can also use the `setLogFilter` function to do other cool stuff. Below is an example for how to further modify the
-rate at which UserALE.js collects data, but dropping every other log (odd-even) in the logging queue.
-
-
-```html
- <script type="text/javascript">
- var logCounter = 0;
- window.userale.filter(function (log) {
- return (logCounter++ % 2);
- });
- </script>
-```
-
-
-## `setLogMapper` Examples
-
-`setLogMapper` allows you to modify or add new fields to UserALE.js logs.
-
-This simple mapping function adds a new log field for custom labels you want to attach to certain elements:
+## `addCallbacks()`
+`addCallbacks` allows you to modify UserALE.js logs via callback functions. Callback functions are passed the log to be modifyed, and the corresponding event if one exists. The value returned from the calback is used as the new log, except when a falsey value is returned. In the case of a falsey value, the log is dropped. Callbacks are executed in the order they are submitted. Pass multiple callbacks with an object of functions. The following example shows how to both filter unwanted eve [...]
```html
-<!--
-This will add your label to all event logs that reference a particular DOM target.
--->
- <script type="text/javascript">
- window.userale.map(function (log) {
- var targetsForLabels = ["button#test_button"];
- if (targetsForLabels.includes(log.target)) {
- return Object.assign({}, log, { CustomLabel: "Click me!" });
- } else {
- return log;
- }
- });
- </script>
+<script type="text/javascript">
+ window.userale.addCallbacks({
+ filter(log) {
+ var type_array = [
+ "mouseup",
+ "mouseover",
+ "mousedown",
+ "keydown",
+ "dblclick",
+ "blur",
+ "focus",
+ "input",
+ "wheel",
+ ];
+ var logType_array = ["interval"];
+ if (type_array.includes(log.type) || logType_array.includes(log.logType)) {
+ return false;
+ }
+ return log;
+ },
+ addCustomFields(log, event) {
+ var targetsForLabels = ["button#test_button"];
+ if (targetsForLabels.includes(log.target)) {
+ return Object.assign({}, log, { CustomLabel: "Click me!" });
+ } else {
+ return log;
+ }
+ }
+ });
+</script>
```
+## `removeCallbacks()`
-This cool mapping function adds a progressive count on a given element ("app") and writes to a new log field
-called "score"
-
+`removeCallbacks` removes a list of callback function that was added by addCallbacks() by name. The following example will remove the filter from the addCallbacks() example
```html
- </head>
- <body>
- <div id="app">
- <button id="increment">+</button>
- <button id="decrement">-</button>
- <div id="scoreboard"></div>
- </div>
- </script>
-
- <script type="text/javascript">
- var score = 0;
- var scoreBoard = document.getElementById('scoreboard');
- scoreBoard.innerText = '0';
-
- function setScore(nextScore) {
- score = nextScore;
- scoreBoard.innerText = String(score);
- }
-
- document.getElementById('increment').addEventListener('click', function () {
- setScore(score + 1);
- });
-
- document.getElementById('decrement').addEventListener('click', function () {
- if (score) {
- setScore(score - 1);
- }
- });
-
- window.userale.map(function (log) {
- return Object.assign({}, log, { score: score }); // Add the "score" property to the log
- });
- </script>
- </body>
-</html>
-
+<script type="text/javascript">
+ window.userale.removeCallbacks(["filter"]);
+</script>
```
Test these examples out in our UserALE.js [example page](https://github.com/apache/flagon-useralejs/blob/master/example/index.html) test utility!
See more [UserALE.js API Examples]()
-### Benefits of the UserALE.js API
- * No need to dig into our source code
- * Version control is easy and no need to sweat merges--just download the latest [release]({{ '/releases' | prepend: site.baseurl }}),
- or update via [npm](https://www.npmjs.com/package/flagon-userale).
- * Manage logs page-by-page, ideal for large or complex sites
- * Use basic or best-practice JS styles and methods to build your own filters, no need to learn weird custom syntax.
-
## Contributing
Contributions are welcome! Simply [submit an issue](https://github.com/apache/flagon-useralejs/issues) for problems
diff --git a/site/_docs/useralejs/build.md b/site/_docs/useralejs/build.md
index 87db4d5..2fe8dc0 100644
--- a/site/_docs/useralejs/build.md
+++ b/site/_docs/useralejs/build.md
@@ -5,7 +5,7 @@ permalink: /docs/useralejs/build/
priority: 1
---
-To build [Apache UserALE.js](https://github.com/apache/flagon-useralejs/tree/master), you will need to clone our repo and install [NPM and Node.js](https://nodejs.org/).
+To build [Apache UserALE.js](https://github.com/apache/flagon-useralejs/tree/master), you will need to clone our repo and install [NPM and Node.js](https://nodejs.org/) and [Go](https://go.dev/doc/install).
UserALE.js utilizes NPM for package and dependency management. Execute the following to install dependencies.
```
@@ -18,7 +18,7 @@ npm ls --depth=0
## Build
-UserALE.js uses Gulp to manage build tasking. These tasks are executed through our build script; use the following to execute:
+UserALE.js uses Rollup to manage build tasking. These tasks are executed through our build script; use the following to execute:
```
#Build UserALE.js
@@ -27,11 +27,10 @@ npm run build
## Test
-UserALE.js uses JSDOM and Mocha to execute unit tests, which are integrated into our build pipeline. See ``package.json`` for full script options.
+UserALE.js uses Jest and Playwright to execute tests, which are integrated into our build pipeline. See ``package.json`` for full script options.
To run tests:
```
-#Run UserALE.js unit tests
npm run test
```
... you'll see something like:
@@ -111,12 +110,11 @@ npm run test
45 passing (954ms)
1 pending
```
-Any failing tests will also be logged in the terminal. If there are failing tests, please consider [logging an issue in JIRA](https://issues.apache.org/jira/projects/FLAGON).
+
+Followed by e2e tests via playwright that runs in a headed browser. Note that interacting with the headed browser may contaminate test results. Unfortanutely, the browser plugin requires playwright to run with a headed browser at this time. Any failing tests will also be logged in the terminal. If there are failing tests, please consider [opening an issue in Github](https://github.com/apache/flagon-useralejs/issues).
Further instructions can be found in our [README](https://github.com/apache/flagon-useralejs/blob/master/README.md)
## Contributing
-Contributions are welcome! Simply [submit an issue](https://github.com/apache/flagon-useralejs/issues) for problems
-you encounter or a pull request for your feature or bug fix. The core team will review it and work with you to
-incorporate it into UserALE.js. We also love Pull Requests!
\ No newline at end of file
+Contributions are welcome! See the [contribution guide](https://github.com/apache/flagon-useralejs/blob/master/CONTRIBUTING.md) for more information.
\ No newline at end of file
diff --git a/site/_docs/useralejs/dataschema.md b/site/_docs/useralejs/dataschema.md
index b3cb0a9..ce5ed2b 100644
--- a/site/_docs/useralejs/dataschema.md
+++ b/site/_docs/useralejs/dataschema.md
@@ -27,46 +27,38 @@ This is a standard UserALE.js log from our [example test utility](https://github
```html
- "microTime": 0.185,
- "minor_ver": "0",
- "@timestamp": "2019-06-28T16:00:20.790Z",
- "type": "click",
- "target": "button#test_button",
- "details": {
- "clicks": 13,
- "shift": false,
- "meta": false,
- "alt": false,
- "ctrl": false
- },
- "major_ver": "2",
- "toolVersion": "2.1.1",
- "pageReferrer": "",
- "clientTime": 1561737620520,
- "userAction": true,
- "location": {
- "x": 40,
- "y": 19
- },
- "host": "172.18.0.1",
- "path": [
- "button#test_button",
- "div.container",
- "body",
- "html",
- "#document",
- "Window"
- ],
- "sessionID": "session_1561737570573",
- "toolName": "Apache UserALE.js Example",
- "pageTitle": "UserAleJS - Example Page",
- "logType": "raw",
- "pageUrl": "file:///Users/jpoore/Documents/Apache_Flagon/test/flagon-useralejs/example/index.html",
- "userId": "example-user",
- "useraleVersion": "2.1.1",
- "patch_ver": "0"
- ]
-
+{
+ target: 'button#test_button',
+ path: [
+ 'button#test_button',
+ 'div.container',
+ 'body',
+ 'html',
+ '#document',
+ 'Window'
+ ],
+ pageUrl: 'http://localhost:8000/',
+ pageTitle: 'UserALE - Example Page',
+ pageReferrer: '',
+ browser: { browser: 'firefox', version: '131.0.0' },
+ clientTime: 1729658103797,
+ microTime: 0,
+ location: { x: 66, y: 220 },
+ scrnRes: { width: 1920, height: 915 },
+ type: 'click',
+ logType: 'raw',
+ userAction: true,
+ details: { clicks: 1, ctrl: false, alt: false, shift: false, meta: false },
+ userId: 'me',
+ toolVersion: '2.3.0',
+ toolName: 'Apache UserALE Example (Custom)',
+ useraleVersion: '2.4.0',
+ sessionId: 'session_1729657762020',
+ httpSessionId: '057109eed2c0b107476731f201b6d63d',
+ browserSessionId: null,
+ attributes: { id: 'test_button' },
+ style: {}
+}
```
@@ -78,15 +70,16 @@ The fields dentify what users do and what they interact with. UserALE.js gets th
```html
- "type": "click", [this field documents the kind of user behavior observed]
- "target": "button#test_button", [this field documents the site/app element a user interacted with]
- "path": [ {this is the DOM path to the "target" element, which is critical for disambiguation between elements}
- "button#test_button",
- "div.container",
- "body",
- "html",
- "#document",
- "Window"]
+ type: 'click', [this field documents the kind of user behavior observed]
+ target: 'button#test_button', [this field documents the site/app element a user interacted with]
+ path: [ {this is the DOM path to the "target" element, which is critical for disambiguation between elements}
+ 'button#test_button',
+ 'div.container',
+ 'body',
+ 'html',
+ '#document',
+ 'Window'
+ ]
```
@@ -102,9 +95,8 @@ Time is a very important concept in UserALE.js. Below are the fields related to
```html
- "clientTime": 1561737620520, [UserALE.js collects time from the client when a log is generated]
- "microTime": 0.185, [When a log is wrtten, we write microtime too, not every database parses it]
- "@timestamp": "2019-06-28T16:00:20.790Z", [If you use our Elastic backend, you will see indexing time too]
+ clientTime: 1729658103797, [UserALE.js collects time from the client when a log is generated]
+ microTime: 0, [When a log is wrtten, we write microtime too, not every database parses it]
```
@@ -116,28 +108,25 @@ You want context? We have all of the things for all of your events:
Every event has a little nuance, UserALE.js gets it all.
-UserALE.js will add to details the number of rapid, consecutive clicks on a single element.
-
```html
- "details": {
- "clicks": 13,
- "shift": false,
- "meta": false,
- "alt": false,
- "ctrl": false
+ details: {
+ clicks: 1,
+ ctrl: false,
+ alt: false,
+ shift: false,
+ meta: false
},
```
-
You'll get location of the cursor two for mouseover and click data, too!
```html
- "location": {
- "x": 40,
- "y": 19
- },
+ location: {
+ x: 66,
+ y: 220
+ }
```
@@ -148,19 +137,28 @@ Examples are below,you'll see our details field has some pretty useful data from
```html
- "details": {
- "audible": false, [audio media on the page?]
- "title": "Discover - Kibana",
- "selected": true,
- "tabId": 64, [uniquely tracks each tab]
- "windowId": 73, [uniquely tracks each window]
- "muted": false,
- "index": 0,
- "incognito": false, [private browsing?]
- "url": "http://localhost:5601/app/kibana#/discover?_g=(refreshInterval:(pause:!t)",
- "active": true, []tab is active?[]
- "pinned": false
- },
+ details: {
+ active: true,
+ audible: false,
+ autoDiscardable: true,
+ discarded: false,
+ favIconUrl: 'https://apache.org/favicons/favicon-32x32.png',
+ groupId: -1,
+ height: 914,
+ highlighted: true,
+ id: 1852931762,
+ incognito: false,
+ index: 4,
+ lastAccessed: 1729720562214.495,
+ openerTabId: 1852931752,
+ pinned: false,
+ selected: true,
+ status: 'complete',
+ title: 'Welcome to The Apache Software Foundation!',
+ url: 'https://apache.org/',
+ width: 1912,
+ windowId: 1852931606
+ }
```
@@ -173,7 +171,7 @@ configurable through our [script tag]({{ '/docs/useralejs' | prepend: site.baseu
```html
- "toolVersion": "2.1.1", [you can give a semantic versioning of your page or tool]
+ "toolVersion": "2.4.0", [you can give a semantic versioning of your page or tool]
"pageReferrer": "", [grabbed from the page, from which page did your users find your page/app]
"toolName": "Apache UserALE.js Example", [give your tool an alis through our script tag]
"pageTitle": "UserAleJS - Example Page", [page title grabbed from page]
@@ -191,64 +189,21 @@ UserALE.js has its own methods for gathering user context, and it can integrate
```html
- "sessionID": "session_1561737570573", [This session ID is unique to a specific page visit]
- "userId": "example-user", [You can also pass a unique userId]
- "host": "172.18.0.1", [IP address]
+ sessionId: 'session_1729657762020', [This session ID is unique to a specific page visit (deprecated)]
+ httpSessionId: '057109eed2c0b107476731f201b6d63d', [This ID is unique to the page session]
+ browserSessionId: null, [This ID is unique to the browser session when using the plugin]
+ userId: 'me', [You can also pass a unique userId]
```
To see how to pass in a userId from a url, check out our [script tag docs]({{ '/docs/useralejs' | prepend: site.baseurl }}).
-Other things you might want to do (e.g., cookies) can also be passed to userId via [the UserALE.js API]({{ '/docs/useralejs/API' | prepend: site.baseurl }})
-`mapping` function.
+Other things you might want to do (e.g., cookies) can also be passed to userId via [the UserALE.js API]({{ '/docs/useralejs/API' | prepend: site.baseurl }}).
## UserALE.js Log Types
For the most part, UserALE.js logs are uniform. However, there are some variations based on the type of log.
-### WebExtension Logs
-
-WebExtension logs from page-level events will look identical to the logs from our script tag method.
-
-Our WebExtension logs from browser-level events, including focus, activation, and zoom events:
-
-
-```html
-"host": "172.18.0.1",
- "path": null,
- "microTime": 0.835,
- "@timestamp": "2019-06-28T18:05:03.681Z",
- "sessionID": "session_1561741679119",
- "type": "browser.tabs.onZoomChange",
- "target": null,
- "details": {
- "audible": false,
- "oldZoomFactor": 1,
- "selected": true,
- "tabId": 64,
- "title": "Discover - Kibana",
- "windowId": 73,
- "newZoomFactor": 1,
- "muted": false,
- "index": 0,
- "incognito": false,
- "url": "http://localhost:5601/app/kibana#/discover?_g=(refreshInterval:(pause:!t),
- "active": true,
- "pinned": false
- },
- "toolName": null,
- "toolVersion": null,
- "clientTime": 1561745100028,
- "userAction": true,
- "logType": "raw",
- "tags": [
- "_grokparsefailure"
- ],
- "location": null,
- "userId": "nobody",
- "useraleVersion": null
- },
-
```
### Interval Logs
@@ -258,34 +213,38 @@ Interval logs are a experimental feature, that write long sequences of the same
Interval logs have a start- and end-time instead of a single, discrete time-stamp.
```html
- "endTime": 1561739434516, [end interval]
- "minor_ver": "0",
- "@timestamp": "2019-06-28T16:30:35.734Z",
- "type": "mouseover",
- "target": "html", [where were mouseovers observed within the interval]
- "targetChange": true,
- "major_ver": "2",
- "count": 10, [count of disrcete events within the interval]
- "pageReferrer": "",
- "toolVersion": "2.1.1",
- "userAction": false,
- "duration": 396, [duration of interval in ms]
- "host": "172.18.0.1",
- "path": [
- "html",
- "#document",
- "Window"
+{
+ target: 'img.img-responsive center-block visible-home', [where were mouseovers observed within the interval]
+ path: [
+ 'img.img-responsive center-block visible-home',
+ 'div.main',
+ 'header#main-header.container',
+ 'body#home',
+ 'html',
+ '#document',
+ 'Window'
],
- "sessionID": "session_1561737570573",
- "toolName": "Apache UserALE.js Example",
- "startTime": 1561739434120, [begin interval]
- "typeChange": true, [were there any other events during the interval?]
- "pageTitle": "UserAleJS - Example Page",
- "logType": "interval", [as compared to "raw"]
- "pageUrl": "Apache_Flagon/test/flagon-useralejs/example/index.html",
- "userId": "example-user",
- "useraleVersion": "2.1.1",
- "patch_ver": "0"
+ pageUrl: 'https://apache.org/',
+ pageTitle: 'Welcome to The Apache Software Foundation!',
+ pageReferrer: 'https://www.bing.com/',
+ browser: { browser: 'edge-chromium', version: '130.0.0' },
+ count: 0, [count of disrcete events within the interval]
+ duration: 67, [duration of interval in ms]
+ startTime: 1729720562466, [begin interval]
+ endTime: 1729720562533, [end interval]
+ type: 'mouseover',
+ logType: 'interval', [as compared to "raw"]
+ targetChange: true,
+ typeChange: false, [were there any other events during the interval?]
+ userAction: false,
+ userId: 'pluginUser',
+ toolVersion: '2.4.0',
+ toolName: 'useralePlugin',
+ useraleVersion: '2.4.0',
+ sessionId: 'session_1727742067433',
+ httpSessionId: '298926d0ffe8085dc0f7c421dbad9c3a',
+ browserSessionId: 'd43400275c1f4f04f1ce74da7d0cd3c8'
+ }
```
## Contributing
diff --git a/site/_docs/useralejs/index.md b/site/_docs/useralejs/index.md
index ad6401b..4c2d2f0 100644
--- a/site/_docs/useralejs/index.md
+++ b/site/_docs/useralejs/index.md
@@ -33,7 +33,7 @@ Our [webpack example](https://github.com/apache/flagon-useralejs/tree/master/exa
### Include UserALE.js as a `script-tag`:
```html
-<script src="./node_modules/flagon-userale/build/userale-2.3.0.min.js"></script>
+<script src="./node_modules/flagon-userale/build/userale-2.4.0.min.js"></script>
```
Our [script tag example](https://github.com/apache/flagon-useralejs/tree/master/example) illustrates this use-case
@@ -47,7 +47,7 @@ npm install --save-dev flagon-userale
### Include UserALE.js via a CDN:
```html
-<script src="https://cdn.jsdelivr.net/npm/flagon-userale@2.1.1/build/userale-2.3.0.min.js"></script>
+<script src="https://cdn.jsdelivr.net/npm/flagon-userale@2.4.0/build/userale-2.4.0.min.js"></script>
```
We also support a [WebExtension](https://github.com/apache/flagon-useralejs/tree/master/src/UserALEWebExtension) that can be added to your browser in developer mode. Follow the link for instructions.
@@ -61,23 +61,25 @@ UserALE.js is designed to be easily configured to fit your use case. In `script-
For example, one thing you'll need to do is set the URL (location) of your minified UserALE.js script:
```html
-<script src="/path/to/userale-2.3.0.min.js" data-url="http://yourLoggingUrl"></script>
+<script src="/path/to/userale-2.4.0.min.js" data-url="http://yourLoggingUrl"></script>
```
The complete list of configurable options is:
| Param | Description | Default |
|---|---|---|
-| data-url | Logging URL | http://localhost:8000 |
-| data-autostart | Should UserALE.js start on page load | true |
-| data-interval | Delay between transmit checks | 5000 (ms) |
-| data-threshold | Minimum number of logs to send | 5 |
-| data-user | User identifier | null |
-| data-version | Application version identifier | null |
-| data-log-details | Toggle detailed logs (keys pressed and input/change values) | false |
-| data-resolution | Delay between instances of high frequency logs (mouseover, scroll, etc.) | 500 (ms) |
-| data-user-from-params | Query param in the page URL to fetch userId from | null |
-| data-tool | Name of tool being logged | null |
+| url | Logging URL | http://localhost:8000 |
+| autostart | Should UserALE start on page load | true |
+| transmitInterval | Delay between transmit checks | 5000 (ms) |
+| logCountThreshold | Minimum number of logs to send | 5 |
+| userId | User identifier | null |
+| sessionId | Session identifier | null |
+| version | Application version identifier | null |
+| logDetails | Toggle detailed logs (keys pressed and input/change values) | false |
+| resolution | Delay between instances of high frequency logs (mouseover, scroll, etc.) | 500 (ms) |
+| userFromParams | Query param in the page URL to fetch userId from | null |
+| toolName | Name of tool being logged | null |
+| authHeader | Authorization header to be passed to logging endpoint | null |
**NOTE** These options are also available through our [API]({{ '/docs/useralejs/API' | prepend: site.baseurl }}), which support deploying UserALE.js as an NPM `module.`
diff --git a/site/_docs/useralepy/api.md b/site/_docs/useralepy/api.md
deleted file mode 100644
index 4f96b92..0000000
--- a/site/_docs/useralepy/api.md
+++ /dev/null
@@ -1,183 +0,0 @@
----
-title: API Documentation
-component: useralepy
-priority: 11
----
-
-Apache UserALE.PyQt5 intercepts all application events by letting the developer install an event filter in their PyQt5 application to generate detailed user logs. Apache UserALE.PyQt5 does not capture system level logs or events generated by a non-user (a.k.a. system and signals sent between QObjects).
-
-### Apache UserALE.PyQt5
-
->
-```python
-class userale.ale.Ale(output='userale.log', user=None,
-session=None, toolname=None, toolversion=None,
-keylog=False, interval=5000, resolution=100, shutoff=[])
-```
-
-> **Bases:** PyQt5.QtCore.QObject
-
-> **Parameters:**
-- output – [str] The file or url path to which logs will be sent
-- user – [str] Identifier for the user of the application
-- session – [str] Session tag to track same user with multiple sessions. If a session is not provided, one will be created
-- toolname – [str] The application name
-- toolversion – [str] The application version
-- keylog – [bool] Should detailed key logs be recorded. Default is False
-- interval – [int] The minimum time interval in ms between batch transmission of logs. Default is 5000ms.
-- resolution – [int] Delay in ms between instances of high frequency logs like mousemoves, scrolls, etc. Default is 100ms (10Hz).
-- shutoff – [list] Turn off logging for specific events
-
-An example log will appear like this:
-
- ```javascript
- {
- 'target': 'testLineEdit',
- 'path': ['Example', 'testLineEdit'],
- 'clientTime': '2016-08-03 16:12:03.460573',
- 'location': {'x': 82, 'y': 0},
- 'type': 'mousemove',
- 'userAction': 'true',
- 'details' : {},
- 'userId': 'userABC1234',
- 'session': '5ee42ccc-852c-44d9-a937-28d7901e4ead',
- 'toolName': 'myApplication',
- 'toolVersion': '3.5.0',
- 'useraleVersion': '0.1.0'
- }
- ```
-
-#### aggregate()
-Sample high frequency logs at self.resolution. High frequency logs are consolidated down to a single log event to be emitted later
-
-#### cleanup()
-Clean up any dangling logs in self.logs or self.hlogs
-
-#### dump()
-Write log data to file
-
-#### eventFilter(object, event)
-Filters events for the watched widget.
-
-> **Parameters:**
-- object – [QObject] The object being watched.
-- event – [QEvent] The event triggered by a user action.
-
-> **Returns:**
-- [bool] Propagate filter up if other objects needs to be handled
-
-#### getClientTime()
-Capture the time the event was captured in milliseconds since the UNIX epoch (January 1, 1970 00:00:00 UTC)
-
-> **Returns:**
-- [str] String representation of the time the event was captured.
-
-#### getLocation(event)
-Grab the x and y position of the mouse cursor, relative to the widget that received the event.
-
-> **Parameters:**
-- event – [QEvent] The base class for all event classes.
-
-> **Returns:**
-- [dict] A dictionary representation of the x and y positions of the mouse cursor.
-
-#### getPath(object)
-Generate the entire object hierachy from root to leaf node.
-
-> **Parameters:**
-- object – [QObject] The base class for all Qt objects.
-
-> **Returns:**
-- [list] List of QObjects.
-
-#### getSelector(object)
-Get target object’s name (object defined by user or object’s meta class name).
-
-> **Parameters:**
-- object – [QObject] The base class for all Qt objects.
-
-> **Returns:**
-- [str] The Qt object’s name
-
-#### getSender(object)
-Fetch the QObject who triggered the event
-
-> **Parameters:**
-- object – [QObject] The object being watched.
-
-> **Returns:**
-- [QObject] The QObject
-
-#### handleDragEvents(event_type, event, object)
-Returns the userale log representing all drag events.
-
-> **Parameters:**
-- event_type – [str] The string representation of the type of event being triggered by the user.
-- event – [QEvent] The base class for all event classes.
-- object – [QObject] The base class for all Qt objects.
-
-> **Returns:**
-- [dict] A userale log describing a drag event.
-
-#### handleKeyEvents(event_type, event, object)
-Returns the userale log representing all key events, including key name and key code.
-
-> **Parameters:**
-- event_type – [str] The string representation of the type of event being triggered by the user.
-- event – [QEvent] The base class for all event classes.
-- object – [QObject] The base class for all Qt objects.
-
-> **Returns:**
-- [dict] A userale log describing a key event.
-
-#### handleMouseEvents(event_type, event, object)
-Returns the userale log representing all mouse event data.
-
-> **Parameters:**
-- event_type – [str] The string representation of the type of event being triggered by the user.
-- event – [QEvent] The base class for all event classes.
-- object – [QObject] The base class for all Qt objects.
-
-> **Returns:**
-- [dict] A userale log describing a mouse event.
-
-#### handleMoveEvents(event_type, event, object)
-Returns the userale log representing all move events.
-
-> **Parameters:**
-- event_type – [str] The string representation of the type of event being triggered by the user.
-- event – [QEvent] The base class for all event classes.
-- object – [QObject] The base class for all Qt objects.
-
-> **Returns:**
-- [dict] A userale log describing a drag event.
-
-#### handleResizeEvents(event_type, event, object)
-Returns the userale log representing all resize events.
-
-> **Parameters:**
-- event_type – [str] The string representation of the type of event being triggered by the user.
-- event – [QEvent] The base class for all event classes.
-- object – [QObject] The base class for all Qt objects.
-**Returns:**
-- [dict] A userale log describing a resize event.
-
-#### handleScrollEvents(event_type, event, object)
-Returns the userale log representing all scroll events.
-
-> **Parameters:**
-- event_type – [str] The string representation of the type of event being triggered by the user.
-- event – [QEvent] The base class for all event classes.
-- object – [QObject] The base class for all Qt objects.
-
-> **Returns:**
-- [dict] A userale log describing a scroll event.
-
-#### timerEvent(event)
-Routinely dump data to file or send over the network
-
-> **Parameters:**
-- object – [list] List of events
-
-> **Returns:**
-- [void] Emit events to file
diff --git a/site/_docs/useralepy/changelog.md b/site/_docs/useralepy/changelog.md
deleted file mode 100644
index 7ff36bc..0000000
--- a/site/_docs/useralepy/changelog.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-title: Changelog
-component: useralepy
-priority: 99
----
-
-### 0.1.5 (2016-09-19)
-
-- clientTime field is represented in ISO 8601 format.
-- Sampling mouseenter, mouseleave, and dragmove events by resolution parameter.
-- Batch dumping all logs to file by interval parameter.
-- Added Apache license headers.
-- Updated all documentation.
-- Updated versioning numbers.
-- Added docker support.
-
-### 0.1.4 (2016-08-04)
-
-- New events Apache UserAle is tracking:
- - move
- - resize
- - scroll
-- Remove timer from dragdrop log due to incorrect time being recorded.
-- Session id is autogenerated if not passed into configuration.
-
-### 0.1.3 (2016-08-02)
-
-- New events Apache UserAle is tracking:
- - mouseenter
- - mouseleave
-
-### 0.1.2 (2016-08-01)
-
-- The elapsed time for a drag event is being recorded in the dragdrop log.
-
-### 0.1.1 (2016-07-29)
-
-- All logs will be stored to file called userale.log (configurable).
-- Users can specify which events to capture by passing in a list of event keys when instantiating Apache UserAle.
-- These are the events Apache UserAle is tracking:
- - mouseup
- - mousedown
- - mousemove
- - keypress (optional)
- - keydown (optional)
- - dragenter
- - dragleave
- - dragmove
- - dragdrop
-
-### 0.1.0 (2016-06-24)
-
-- Initial release.
diff --git a/site/_docs/useralepy/index.md b/site/_docs/useralepy/index.md
deleted file mode 100644
index 5c46050..0000000
--- a/site/_docs/useralepy/index.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-title: Installation
-component: useralepy
-permalink: /docs/useralepy/
-priority: 0
----
-
-Apache UserALE.PyQt5 is the UserALE client for PyQt5 applications. It provides an easy way to generate highly detailed log streams from any PyQt5 application.
-
-### Requirements
-
-- Python 3.5 or above
-- PyQt5, version 5.3 or above
-- pip3, see requirements.txt
-
-### Installing UserALE.PyQt5
-
-The first step is to install Apache UserALE.PyQt5. First, checkout the latest version of Apache UserALE.PyQt5 from our Git repository.
-
- ```shell
- $ git clone https://gitbox.apache.org/repos/asf/incubator-flagon-userale-pyqt5.git
- ```
-
-Apache UserALE.PyQt5 is a python3 project, so it can be installed like any other python library. Several operating systems (Mac OS X, Major Versions of Linux/BSD) have Python3 pre-installed, so you should just have to run
-
- ```shell
- $ easy_install3 userale
- ```
-
- or
-
- ```shell
- $ pip3 install userale
- ```
-
-Users are strongly recommended to install Apache UserALE.PyQt5 in a virtualenv. Instructions to setup an virtual environment will be explained below.
-
-> **Note**
-> Apache UserALE.PyQt5 requires that PyQt5 and the Qt5 bindings has been installed. Instructions to install PyQt5 and Qt5 in a virtual environment will be left to the user.
-
-> **Note**
-> When the package is installed via easy_install3 or pip3 this function will be bound to the userale executable in the Python installation’s bin directory (on Windows - the Scripts directory).
-
-### Installing Apache UserALE.PyQt5 in an Virtual Environment
-
-There are multiple ways to create virtual environments for a Python3 application. virtualenv is a one of those tools to create isolated Python environments. virtualenv creates a folder which contains all the necessary executables to use the packages that the UserAle project would need.
-
-Start by changing directory into the root of Apache UserALE.PyQt5’s project directory, and then use the virtualenv command-line tool to create a new environment:
-
- ```shell
- $ virtualenv --python=/usr/bin/python3 env
- ```
-
-Optionally, Python3 has built in support for virtual environments.
-
- ```shell
- $ mkdir env
- $ python3 -m venv env
- ```
-
-Activate environment:
-
- ```shell
- $ source env/bin/activate
- ```
-
-Install UserAle requirements:
-
- ```shell
- $ env/bin/pip3 install -r requirements.txt
- ```
-
-To build the source code and run all unit tests.
-
- ```shell
- $ env/bin/python3 setup.py develop test
- ```
-
-Deactivate environment
-
- ```shell
- $ deactivate
- ```
-
-### Installing Documentation
-
-First, install the documentation dependencies:
-
- ```shell
- $ env/bin/pip3 install -r doc_requirements.txt
- ```
-
-To build Apache UserALE.PyQt5’s documentation, create a directory at the root level of /userale.pyqt5 called userale.pyqt5-docs.
-
- ```shell
- $ mkdir userale.pyqt5-docs & cd userale.pyqt5-docs
- ```
-
-Execute build command from inside the top-level doc/ directory:
-
- ```shell
- $ make html
- ```
-
-This should build the documentation in your shell, and output HTML. At then end, it should say something about documents being ready in userale.pyqt5-docs/html.
-
-You can now open them in your browser by typing
-
- ```shell
- $ open userale.pyqt5-docs/html/index.html
- ```
diff --git a/site/_docs/useralepy/start.md b/site/_docs/useralepy/start.md
deleted file mode 100644
index 799cd7b..0000000
--- a/site/_docs/useralepy/start.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: Getting Started
-component: useralepy
-priority: 1
----
-
-### Instrumenting Your Application Globally with Apache UserALE.PyQt5
-
-It’s very simple to instrument a PyQt5 application with Apache UserALE.PyQt5. Simply import the Apache UserALE.PyQt5 library and register it with your application.
-
-Below is an example PyQt5 application taken from ZetCode PyQt5 tutorial instrumented with Apache UserALE.PyQt5.
-
- ```python
- import sys
- from PyQt5.QtWidgets import QWidget, QLabel, QPushButton, QApplication, QMessageBox
- from PyQt5.QtCore import QCoreApplication, QObject, QEvent
-
- from userale.ale import Ale
-
- class TestApplication (QWidget):
-
- def __init__(self):
- super().__init__()
- self.initUI()
-
- def initUI(self):
- qbtn = QPushButton('Quit', self)
- qbtn.setObjectName ("testApplicationButton")
- qbtn.clicked.connect(QCoreApplication.instance().quit)
- qbtn.resize(qbtn.sizeHint())
- qbtn.move(50, 50)
-
- self.setGeometry(300, 300, 250, 150)
- self.setWindowTitle('Quit button')
- self.show()
-
- if __name__ == '__main__':
- app = QApplication(sys.argv)
- ex = TestApplication()
- # Initiate Apache UserALE.PyQt5
- ale = Ale (output="mouse.log", user="testUser", toolversion="0.0.1")
- # install globally
- app.installEventFilter (ale)
-
- sys.exit (app.exec_())
- ```
-
-Before we enter the mainloop of the application, UserAle needs to register the application to be instrumented. Simply instantiate Apache UserALE.PyQt5 and install it as an event filter in your application.
-
- ```python
- # Initiate UserAle
- ale = Ale (output="mouse.log", user="testUser", toolversion="0.0.1")
- # install globally
- app.installEventFilter (ale)
- ```
-
-### Instrumenting Your Application Manually with Apache UserALE.PyQt5
-
-*Todo:* Write guidelines for instrumenting specific PyQt5 Widgets with Apache UserALE.PyQt5.
diff --git a/site/_includes/doc_sidebar.html b/site/_includes/doc_sidebar.html
index d045abd..f4ce3f5 100644
--- a/site/_includes/doc_sidebar.html
+++ b/site/_includes/doc_sidebar.html
@@ -1,11 +1,6 @@
{% assign flagon = site.docs | where:"component", "flagon" | sort: "priority" %}
-{% assign stack = site.docs | where:"component", "stack" | sort: "priority" %}
-{% assign userale = site.docs | where:"component", "userale" | sort: "priority" %}
{% assign useralejs = site.docs | where:"component", "useralejs" | sort: "priority" %}
-{% assign useralepy = site.docs | where:"component", "useralepy" | sort: "priority" %}
{% assign distill = site.docs | where:"component", "distill" | sort: "priority" %}
-{% assign tap = site.docs | where:"component", "tap" | sort: "priority" %}
-{% assign stout = site.docs | where:"component", "stout" | sort: "priority" %}
<!-- <div class="ui inverted list">
<a class="item" href="{{ '/docs' | prepend: site.baseurl }}">About the Docs</a>
@@ -31,47 +26,6 @@
</div>
</div>
-
- {% if page.component == 'stack' %}
- <div class="active title">
- {% else %}
- <div class="title">
- {% endif %}
- <i class="dropdown icon"></i>
- Stack
- </div>
- {% if page.component == 'stack' %}
- <div class="active content">
- {% else %}
- <div class="content">
- {% endif %}
- <div class="ui inverted bulleted list docs-list">
- {% for doc in stack %}
- <a class="item" href="{{ doc.url }}">{{ doc.title }}</a>
- {% endfor %}
- </div>
- </div>
-
- {% if page.component == 'userale' %}
- <div class="active title">
- {% else %}
- <div class="title">
- {% endif %}
- <i class="dropdown icon"></i>
- UserALE
- </div>
- {% if page.component == 'userale' %}
- <div class="active content">
- {% else %}
- <div class="content">
- {% endif %}
- <div class="ui inverted bulleted list docs-list">
- {% for doc in userale %}
- <a class="item" href="{{ doc.url }}">{{ doc.title }}</a>
- {% endfor %}
- </div>
- </div>
-
{% if page.component == 'useralejs' %}
<div class="active title">
{% else %}
@@ -92,26 +46,6 @@
</div>
</div>
- {% if page.component == 'useralepy' %}
- <div class="active title">
- {% else %}
- <div class="title">
- {% endif %}
- <i class="dropdown icon"></i>
- UserALE.py
- </div>
- {% if page.component == 'useralepy' %}
- <div class="active content">
- {% else %}
- <div class="content">
- {% endif %}
- <div class="ui inverted bulleted list docs-list">
- {% for doc in useralepy %}
- <a class="item" href="{{ doc.url }}">{{ doc.title }}</a>
- {% endfor %}
- </div>
- </div>
-
{% if page.component == 'distill' %}
<div class="active title">
{% else %}
@@ -132,43 +66,4 @@
</div>
</div>
- {% if page.component == 'tap' %}
- <div class="active title">
- {% else %}
- <div class="title">
- {% endif %}
- <i class="dropdown icon"></i>
- Tap
- </div>
- {% if page.component == 'tap' %}
- <div class="active content">
- {% else %}
- <div class="content">
- {% endif %}
- <div class="ui inverted bulleted list docs-list">
- {% for doc in tap %}
- <a class="item" href="{{ doc.url }}">{{ doc.title }}</a>
- {% endfor %}
- </div>
- </div>
-
- {% if page.component == 'stout' %}
- <div class="active title">
- {% else %}
- <div class="title">
- {% endif %}
- <i class="dropdown icon"></i>
- Stout
- </div>
- {% if page.component == 'stout' %}
- <div class="active content">
- {% else %}
- <div class="content">
- {% endif %}
- <div class="ui inverted bulleted list docs-list">
- {% for doc in stout %}
- <a class="item" href="{{ doc.url }}">{{ doc.title }}</a>
- {% endfor %}
- </div>
- </div>
</div>
diff --git a/site/_includes/footer.html b/site/_includes/footer.html
index 90cd443..d8b1e1a 100644
--- a/site/_includes/footer.html
+++ b/site/_includes/footer.html
@@ -4,23 +4,15 @@
<div class="column">
<h4 class="ui inverted header">About</h4>
<div class="ui inverted link list">
- <a class="item" href="{{ '/stack' | prepend: site.baseurl }}">Stack</a>
<a class="item" href="{{ '/userale' | prepend: site.baseurl }}">UserALE</a>
<a class="item" href="{{ '/distill' | prepend: site.baseurl }}">Distill</a>
- <a class="item" href="{{ '/tap' | prepend: site.baseurl }}">Tap</a>
- <a class="item" href="{{ '/stout' | prepend: site.baseurl }}">Stout</a>
</div>
</div>
<div class="column">
<h4 class="ui inverted header">Docs</h4>
<div class="ui inverted link list">
- <a class="item" href="{{ '/docs/stack' | prepend: site.baseurl }}">Stack</a>
- <a class="item" href="{{ '/docs/userale' | prepend: site.baseurl }}">UserALE</a>
<a class="item" href="{{ '/docs/useralejs' | prepend: site.baseurl }}">UserAle.js</a>
- <a class="item" href="{{ '/docs/useralepy' | prepend: site.baseurl }}">UserAle.py</a>
<a class="item" href="{{ '/docs/distill' | prepend: site.baseurl }}">Distill</a>
- <a class="item" href="{{ '/docs/tap' | prepend: site.baseurl }}">Tap</a>
- <a class="item" href="{{ '/docs/stout' | prepend: site.baseurl }}">Stout</a>
</div>
</div>
<div class="column">
@@ -28,9 +20,6 @@
<div class="ui inverted link list">
<a class="item" href="https://github.com/apache?q=flagon">GitHub</a>
<a class="item" href="http://stackoverflow.com/questions/tagged/apache-flagon">StackOverflow</a>
- <a class="item" href="https://issues.apache.org/jira/browse/FLAGON">Jira Issue Tracker</a>
- <a class="item" href="https://cwiki.apache.org/confluence/display/FLAGON">Project Wiki</a>
- <a class="item" href="https://twitter.com/ApacheFlagon">Twitter</a>
</div>
</div>
<div class="column">
diff --git a/site/_includes/header.html b/site/_includes/header.html
index e6506e4..c55e152 100644
--- a/site/_includes/header.html
+++ b/site/_includes/header.html
@@ -8,23 +8,15 @@
<div class="ui dropdown item">
Products
<div class="menu">
- <a class="item" href="{{ '/stack' | prepend: site.baseurl }}">Stack</a>
<a class="item" href="{{ '/userale' | prepend: site.baseurl }}">UserALE</a>
<a class="item" href="{{ '/distill' | prepend: site.baseurl }}">Distill</a>
- <a class="item" href="{{ '/tap' | prepend: site.baseurl }}">Tap</a>
- <a class="item" href="{{ '/stout' | prepend: site.baseurl }}">Stout</a>
</div>
</div>
<div class="ui dropdown item">
<a href="{{ '/docs' | prepend: site.baseurl }}">Docs</a>
<div class="menu">
- <a class="item" href="{{ '/docs/stack' | prepend: site.baseurl }}">Stack</a>
- <a class="item" href="{{ '/docs/userale'| prepend: site.baseurl }}">UserALE</a>
<a class="item" href="{{ '/docs/useralejs'| prepend: site.baseurl }}">UserALE.js</a>
- <a class="item" href="{{ '/docs/useralepy'| prepend: site.baseurl }}">UserALE.py</a>
<a class="item" href="{{ '/docs/distill'| prepend: site.baseurl }}">Distill</a>
- <a class="item" href="{{ '/docs/tap'| prepend: site.baseurl }}">Tap</a>
- <a class="item" href="{{ '/docs/stout'| prepend: site.baseurl }}">Stout</a>
</div>
</div>
<a class="item" href="{{ '/releases' | prepend: site.baseurl }}">Releases</a>
diff --git a/site/_includes/tapDemo.html b/site/_includes/tapDemo.html
deleted file mode 100644
index e387e56..0000000
--- a/site/_includes/tapDemo.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<div class="ui {% if include.inverted %}inverted grey{% endif %} very padded vertical segment">
- <div class="ui center aligned text container">
- <h2 class="ui {% if include.inverted %}inverted{% endif %} header">The Bowie Plot</h2>
- <p>
- Tap uses the Bowie plot to present your users' micro-workflows and help you uncover insights into how your users interact with you apps. Start on the left, with the activity that starts the workflow, sized by the frequency of the activity. Next, the circles in the middle show the second activity in the workflow. The circles are downselected and sized by a graph metric to help uncover a particular type of insight. End on the right with the final activity of the workflow.
- </p>
- </div>
-
- <div class="ui container">
- <div class="ui padded grid">
- <div class="four wide middle aligned column">
- <div class="ui {% if include.inverted %}inverted{% endif %} form">
- <h3 class="ui {% if include.inverted %}inverted{% endif %} header">Graph Metrics</h3>
-
- <div class="grouped fields">
- <div class="field">
- <div class="ui radio checkbox">
- <input type="radio" name="metric" value="out_degree" checked></input>
- <label>Out Degree</label>
- </div>
- </div>
-
- <div class="field">
- <div class="ui radio checkbox">
- <input type="radio" name="metric" value="in_degree"></input>
- <label>In Degree</label>
- </div>
- </div>
-
- <div class="field">
- <div class="ui radio checkbox">
- <input type="radio" name="metric" value="betweenness_cent_dir_weighted"></input>
- <label>Weighted Betweenness</label>
- </div>
- </div>
-
- <div class="field">
- <div class="ui radio checkbox">
- <input type="radio" name="metric" value="closeness_cent_dir_weighted"></input>
- <label>Weighted Closeness</label>
- </div>
- </div>
-
- <div class="field">
- <div class="ui radio checkbox">
- <input type="radio" name="metric" value="closeness_cent_dir_unweighted"></input>
- <label>Unweighted Closeness</label>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="twelve wide center aligned column">
- <div class="ui basic row segment">
- <div id="bowie"></div>
- </div>
- </div>
- </div>
-
- <div id="metric-explanation" class="ui center aligned text container"></div>
- </div>
-</div>
-
-<script src="/js/bowiePlot.js"></script>
-<script>
- $(document).ready(function () {
- // Metric explanations
- var metricExplanations = {
- 'out_degree': 'Out degree describes how often an activity was a source. How often did a micro-workflow start with this activity? This could indicate an entry point to your app or the start of a particularly common workflow.',
- 'in_degree': 'In degree describes how often an activity was a sink. How often did a micro-workflow end with this activity? This could indicate a final confirmation, exit navigation, or a place the user got stuck.',
- 'betweenness_cent_dir_weighted': 'Betweenness centrality describes how often an activity was passed through. This indicates a common intermediate activity, like a busy intersection of your app.',
- 'closeness_cent_dir_weighted': 'Closeness centrality indicates how "close" an activity is to all others. A higher closeness indicates an activity that was involved in more workflows. Weighted closeness focuses on closeness to the most common activities, rather than to all equally.',
- 'closeness_cent_dir_unweighted': 'Closeness centrality indicates how "close" an activity is to all others. A higher closeness indicates an activity that was involved in more workflows. Unweighted closeness focuses on closeness to all activities equally, regardless of how often each activity occurred.'
- };
-
- // Change metric
- function changeMetric() {
- var metric = $('input[name=metric]:checked').val();
- $('#metric-explanation').html(metricExplanations[metric]);
- Bowie.update(metric);
- }
-
- // Initialize radio buttons
- $('.ui.radio.checkbox').checkbox({
- onChange: changeMetric
- });
-
- // Initialize
- Bowie.create();
- changeMetric();
- });
-</script>
diff --git a/site/_pages/community.html b/site/_pages/community.html
index 81a21b2..a4948db 100644
--- a/site/_pages/community.html
+++ b/site/_pages/community.html
@@ -17,8 +17,8 @@ title: Community
<div class="content">Users</div>
</h3>
<p>
- For users of Apache Flagon who want to keep up to date with new releases and community highlights. To subscribe, email <a href="mailto:user-subscribe@flagon.incubator.apache.org">user-subscribe@flagon.incubator.apache.org</a>.
- <a class="ui yellow button" href="mailto:user-subscribe@flagon.incubator.apache.org">User List</a>
+ For users of Apache Flagon who want to keep up to date with new releases and community highlights. To subscribe, email <a href="mailto:user-subscribe@flagon.apache.org">user-subscribe@flagon.apache.org</a>.
+ <a class="ui yellow button" href="mailto:user-subscribe@flagon.apache.org">User List</a>
</p>
<h3 class="ui header">
@@ -26,16 +26,16 @@ title: Community
<div class="content">Dev</div>
</h3>
<p>
- For contributors to Apache Flagon or those interested in ongoing design and development efforts. To subscribe, email <a href="mailto:dev-subscribe@flagon.incubator.apache.org">dev-subscribe@flagon.incubator.apache.org</a>.
- <a class="ui blue button" href="mailto:dev-subscribe@flagon.incubator.apache.org">Dev List</a>
+ For contributors to Apache Flagon or those interested in ongoing design and development efforts. To subscribe, email <a href="mailto:dev-subscribe@flagon.apache.org">dev-subscribe@flagon.apache.org</a>.
+ <a class="ui blue button" href="mailto:dev-subscribe@flagon.apache.org">Dev List</a>
</p>
<h3 class="ui header">
<i class="upload icon"></i>
<div class="content">Commits</div>
</h3>
<p>
- For emails-on-commit across all Apache Flagon products. To subscribe, email <a href="mailto:commits-subscribe@flagon.incubator.apache.org">commits-subscribe@flagon.incubator.apache.org</a>.
- <a class="ui blue button" href="mailto:commits-subscribe@flagon.incubator.apache.org">Commits List</a>
+ For emails-on-commit across all Apache Flagon products. To subscribe, email <a href="mailto:commits-subscribe@flagon.apache.org">commits-subscribe@flagon.apache.org</a>.
+ <a class="ui blue button" href="mailto:commits-subscribe@flagon.apache.org">Commits List</a>
</p>
</div>
@@ -46,14 +46,7 @@ title: Community
<div class="content">GitHub</div>
</h3>
<p>
- <a href="https://github.com/apache?q=flagon">Find our code on Github</a> to browse and contribute.
- </p>
- <h3 class="ui header">
- <i class="twitter icon"></i>
- <div class="content">Twitter</div>
- </h3>
- <p>
- <a href="https://twitter.com/ApacheFlagon">Follow us on Twitter</a> to keep up to date on Apache Flagon and related developments.
+ <a href="https://github.com/apache?q=flagon">Find our code on Github</a> to browse, contribute, and submit issues.
</p>
<h3 class="ui header">
<i class="stack overflow icon"></i>
@@ -62,26 +55,11 @@ title: Community
<p>
Get your questions answered on <a href="http://stackoverflow.com/questions/tagged/apache-flagon">StackOverflow</a>.
</p>
- <h3 class="ui header">
- <i class="bug icon"></i>
- <div class="content">Issues and Bugs</div>
- </h3>
- <p>
- Visit our <a href="https://issues.apache.org/jira/browse/FLAGON">JIRA Issue Tracker</a> for full information on current developments, bugs, etc.
- </p>
- <h3 class="ui header">
- <i class="sticky note icon"></i>
- <div class="content">Wiki</div>
- </h3>
- <p>
- See our <a href="https://cwiki.apache.org/confluence/display/FLAGON">wiki</a> for detailed information on project organization, roadmaps, etc.
- </p>
-</div>
<div class="ui vertical segment">
<h2 class="ui header">Contributors</h2>
<p>
- Thank you to all our contributors! Want to be added? Contribute and <a href="mailto:dev@flagon.incubator.apache.org">contact us!</a>
+ Thank you to all our contributors! Want to be added? Contribute and <a href="mailto:dev@flagon.apache.org">contact us!</a>
</p>
<ul class="ui list">
<li>Michelle Beard</li>
diff --git a/site/_pages/stack.html b/site/_pages/stack.html
deleted file mode 100644
index 341867d..0000000
--- a/site/_pages/stack.html
+++ /dev/null
@@ -1,38 +0,0 @@
----
-layout: component
-permalink: /stack/
-title: The Apache Flagon Stack
-subtitle: Easy combined deployment with Docker
-component: Apache Flagon Stack
-
-description: Apache Flagon is a set of project that provide all the components needed for tracking, analyzing and visualizing user event data. Apache UserALE provides comprehensive user event tracking for web pages, but it is specially engineered for tools–applications users will use in their work. Apache Distill is an analytics framework for handling and analyzing UserALE data. Apache TAP provides you with a customizable array of interactive visual analytic libraries (D3) to extract ins [...]
-
-features:
- -
- icon: cloud
- color: blue
- title: Containerized
- description: Deploy on your infrastructure or in the cloud quickly and easily with Docker.
- -
- icon: rocket
- color: yellow
- title: Ready to Go
- description: No configuration or connections to make to get a basic setup up and running.
- -
- icon: settings
- color: red
- title: Customizable
- description: Switch out or modify components for your use case. Integrate with your existing system.
-
-contentCount: 1
----
-
-<div class="ui very padded vertical segment">
- <div class="ui center aligned text container">
- <h2 class="ui header">What's Included?</h2>
- <p>
- The Apache Flagon stack includes a complete backend deployment for Apache UserALE, as well as demonstration versions of Apache Distill, and Apache Tap. These components are connected as seen below and ready to work together out of the box. UserALE clients will still need to be included in the target applications to push logs into the system.
- </p>
- <img class="segment-image" src="/images/stack.png">
- </div>
-</div>
diff --git a/site/_pages/stout.html b/site/_pages/stout.html
deleted file mode 100644
index 00b97a5..0000000
--- a/site/_pages/stout.html
+++ /dev/null
@@ -1,38 +0,0 @@
----
-layout: component
-permalink: /stout/
-title: Stout
-image: /images/stout_inverted.png
-component: Stout
-
-description: Apache STOUT (Subject Tracking and Online User Testing) is an experimental platform for UI/UX (and behavioral) researchers that want to perform formal user-testing studies and experiments with web applications. In STOUT, you'll be able to track participants through a series of URLs in a sequence that matches your experimental design–both between and within-subject designs. STOUT makes sure that your participants are sent to the right URLs in the right sequence. You can also [...]
-
-features:
- -
- icon: lab
- color: blue
- title: Perform experiments
- description: STOUT allows you to track users as they interact with different applications or different versions of the same applications in simple experimental designs. STOUT's Django back end allows you collect task sequence data and even randomize or counterbalance your experiments without losing track of what users are interacting with and when.
- -
- icon: database
- color: yellow
- title: Wrangle different data sources
- description: STOUT allows you to track users between different sources of information using an anonymous user hash. Collect demographics and psychometrics from form data, present users with tasks and questions while they interact with applications, and collect user behavior through UserALE without losing track of who generated the data.
- -
- icon: cloud download
- color: red
- title: Fuse data for analysis
- description: With the SurveyMongo extension to STOUT you can automate polling for survey data and integrate with STOUT metadata to provide tabular datasets that make statistical analysis easy.
- -
- icon: refresh
- color: green
- title: Automate data preprocessing
- description: STOUT's architecture makes it easy to run batch processing scripts in R or python, server-side. Perform your truthing, aggregation, and data transformations automatically, triggered by flags in STOUT, so that you can get straight to analysis.
- -
- icon: bar chart
- color: blue
- title: Visualize experimental findings
- description: STOUT features a dashboard so that you can effectively manage multiple experiments and visualize your results using D3 packages.
-
-contentCount: 0
----
diff --git a/site/_pages/tap.html b/site/_pages/tap.html
deleted file mode 100644
index e309acd..0000000
--- a/site/_pages/tap.html
+++ /dev/null
@@ -1,30 +0,0 @@
----
-layout: component
-permalink: /tap/
-title: Tap
-image: /images/tap_inverted.png
-component: Tap
-
-description: Apache TAP (Test Application Portal) is an experimental visual analytic sandbox for interacting with exploring Apache UserALE data. TAP features registration features served through Django–register your application, organization, and yourself to control access to your applications' usage data and manage custom configurations in TAP. TAP also provides you with a customizable array of interactive visual analytic libraries to extract insights from your usage data. Through TAP y [...]
-
-features:
- -
- icon: users
- color: blue
- title: Understand your users
- description: TAP allows you to visualize how you application is used by different sets of users based on their characteristics (e.g., geography, demographics).
- -
- icon: ordered list
- color: yellow
- title: Understand how your application is used
- description: TAP comes with custom visualization for how your users interact with elements of your application in sequence revealing insights about how application design affects usage and efficiency.
- -
- icon: lock
- color: red
- title: Control access to your data (coming soon)
- description: Control permissions for how your organization can access user data by setting permissions at the institutional level down to access to data collected from specific applications.
-
-contentCount: 1
----
-
-{% include tapDemo.html inverted=false %}
diff --git a/site/_pages/userale.html b/site/_pages/userale.html
index d99a850..7b2ce0a 100644
--- a/site/_pages/userale.html
+++ b/site/_pages/userale.html
@@ -5,7 +5,7 @@ title: UserAle
image: /images/userale_inverted.png
component: UserALE
-description: Apache UserALE (User Analytic Logging Engine) is the beating heart of Apache Flagon technology. UserALE provides instrumentation for applications, embedding a light-weight, easy-to-manage behavioral logging capability. UserALE provides comprehensive user event tracking for web pages, but it is specially engineered for thin-client analytical applications. UserALE transmits specially structured messages from your application to an activity logging server whenever users interac [...]
+description: Apache UserALE (User Analytic Logging Engine) is the beating heart of Apache Flagon technology. UserALE provides instrumentation for applications, embedding a light-weight, easy-to-manage behavioral logging capability. UserALE provides comprehensive user event tracking for web pages, but it is specially engineered for thin-client analytical applications. UserALE transmits specially structured messages from your application to an activity logging server whenever users interac [...]
features:
-
diff --git a/site/_site/stack/index.html b/site/_site/stack/index.html
deleted file mode 100644
index 1c9d60b..0000000
--- a/site/_site/stack/index.html
+++ /dev/null
@@ -1,232 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1">
-
- <title>The Apache Flagon Stack</title>
- <meta name="description" content="The homepage for Apache Flagon">
-
- <link rel="stylesheet" type="text/css" href="/semantic/dist/semantic.min.css">
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
- <script src="/semantic/dist/semantic.min.js"></script>
- <script src="https://d3js.org/d3.v4.min.js"></script>
- <script src="/js/main.js"></script>
-
- <link rel="stylesheet" href="/assets/main.css">
- <link rel="canonical" href="http://flagon.apache.org/stack/">
- <link rel="alternate" type="application/rss+xml" title="Apache Flagon" href="/feed.xml">
-
-
-</head>
-
-
- <body>
-
- <div class="site-header">
- <div id="main-menu" class="ui inverted padded fixed top borderless menu">
- <a class="site-title" href="/">
- <h3 class="ui inverted header item">Apache Flagon</h3>
- </a>
-
- <div class="right menu">
- <div class="ui dropdown item">
- Products
- <div class="menu">
- <a class="item" href="/stack">Stack</a>
- <a class="item" href="/userale">UserALE</a>
- <a class="item" href="/distill">Distill</a>
- <a class="item" href="/tap">Tap</a>
- <a class="item" href="/stout">Stout</a>
- </div>
- </div>
- <div class="ui dropdown item">
- <a href="/docs">Docs</a>
- <div class="menu">
- <a class="item" href="/docs/stack">Stack</a>
- <a class="item" href="/docs/userale">UserALE</a>
- <a class="item" href="/docs/useralejs">UserALE.js</a>
- <a class="item" href="/docs/useralepy">UserALE.py</a>
- <a class="item" href="/docs/distill">Distill</a>
- <a class="item" href="/docs/tap">Tap</a>
- <a class="item" href="/docs/stout">Stout</a>
- </div>
- </div>
- <a class="item" href="/releases">Releases</a>
- <a class="item" href="/community">Community</a>
- </div>
- </div>
-</div>
-
-
- <div class="main-wrapper">
-
- <div class="ui blank-masthead masthead padded center aligned inverted vertical segment">
- <h1 class="ui header">The Apache Flagon Stack</h1>
- <h2 class="ui header">Easy combined deployment with Docker</h2>
- </div>
-
-
-<div class="ui very padded vertical segment">
- <div class="ui center aligned text container">
- <p>
- Apache Flagon is a set of project that provide all the components needed for tracking, analyzing and visualizing user event data. Apache UserALE provides comprehensive user event tracking for web pages, but it is specially engineered for tools–applications users will use in their work. Apache Distill is an analytics framework for handling and analyzing UserALE data. Apache TAP provides you with a customizable array of interactive visual analytic libraries (D3) to extract insights f [...]
- </p>
- </div>
-</div>
-
-<div class="ui inverted grey very padded vertical segment">
- <div class="ui center aligned text container">
- <h2 class="ui inverted header">Features</h2>
-
- <div class="ui basic padded vertical segment">
- <div class="ui middle aligned two column grid">
- <div class="column">
- <i class="huge circular inverted blue cloud icon"></i>
- </div>
- <div class="column">
- <h3 class="ui inverted header">Containerized</h3>
- <div class="feature-description">
- Deploy on your infrastructure or in the cloud quickly and easily with Docker.
- </div>
- </div>
- </div>
- </div>
-
- <div class="ui basic padded vertical segment">
- <div class="ui middle aligned two column grid">
- <div class="column">
- <i class="huge circular inverted yellow rocket icon"></i>
- </div>
- <div class="column">
- <h3 class="ui inverted header">Ready to Go</h3>
- <div class="feature-description">
- No configuration or connections to make to get a basic setup up and running.
- </div>
- </div>
- </div>
- </div>
-
- <div class="ui basic padded vertical segment">
- <div class="ui middle aligned two column grid">
- <div class="column">
- <i class="huge circular inverted red settings icon"></i>
- </div>
- <div class="column">
- <h3 class="ui inverted header">Customizable</h3>
- <div class="feature-description">
- Switch out or modify components for your use case. Integrate with your existing system.
- </div>
- </div>
- </div>
- </div>
-
- </div>
-</div>
-
-<div class="ui very padded vertical segment">
- <div class="ui center aligned text container">
- <h2 class="ui header">What's Included?</h2>
- <p>
- The Apache Flagon stack includes a complete backend deployment for Apache UserALE, as well as demonstration versions of Apache Distill, and Apache Tap. These components are connected as seen below and ready to work together out of the box. UserALE clients will still need to be included in the target applications to push logs into the system.
- </p>
- <img class="segment-image" src="/images/stack.png">
- </div>
-</div>
-
-
-
-<div class="ui inverted grey very padded vertical segment">
- <div class="ui center aligned text container">
- <h2 class="ui inverted header">
- Ready to try Apache Flagon Stack?
- </h2>
- <a class="ui big blue button" href="/releases">
- Get the Release
- </a>
- <a class="ui big yellow button" href="/docs/stack/">
- Read the Docs
- </a>
- </div>
-</div>
-
- </div>
-
- <div class="footer ui inverted very padded vertical segment">
- <div class="ui vertical segment">
- <div class="ui four column grid">
- <div class="column">
- <h4 class="ui inverted header">About</h4>
- <div class="ui inverted link list">
- <a class="item" href="/stack">Stack</a>
- <a class="item" href="/userale">UserALE</a>
- <a class="item" href="/distill">Distill</a>
- <a class="item" href="/tap">Tap</a>
- <a class="item" href="/stout">Stout</a>
- </div>
- </div>
- <div class="column">
- <h4 class="ui inverted header">Docs</h4>
- <div class="ui inverted link list">
- <a class="item" href="/docs/stack">Stack</a>
- <a class="item" href="/docs/userale">UserALE</a>
- <a class="item" href="/docs/useralejs">UserAle.js</a>
- <a class="item" href="/docs/useralepy">UserAle.py</a>
- <a class="item" href="/docs/distill">Distill</a>
- <a class="item" href="/docs/tap">Tap</a>
- <a class="item" href="/docs/stout">Stout</a>
- </div>
- </div>
- <div class="column">
- <h4 class="ui inverted header">Community</h4>
- <div class="ui inverted link list">
- <a class="item" href="https://github.com/apache?q=flagon">GitHub</a>
- <a class="item" href="http://stackoverflow.com/questions/tagged/apache-flagon">StackOverflow</a>
- <a class="item" href="https://issues.apache.org/jira/browse/FLAGON">Jira Issue Tracker</a>
- <a class="item" href="https://cwiki.apache.org/confluence/display/FLAGON">Project Wiki</a>
- <a class="item" href="https://twitter.com/ApacheFlagon">Twitter</a>
- </div>
- </div>
- <div class="column">
- <h4 class="ui inverted header">Apache</h4>
- <div class="ui inverted link list">
- <a class="item" href="http://www.apache.org/">Apache Software Foundation</a>
- <a class="item" href="http://www.apache.org/licenses/">License</a>
- <a class="item" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
- <a class="item" href="http://www.apache.org/foundation/thanks.html">Thanks</a>
- <a class="item" href="http://www.apache.org/security/">Security</a>
- </div>
- </div>
- </div>
- </div>
- <div class="ui inverted vertical segment">
- <div class="ui two column middle aligned grid">
- <div class="column">
- Apache Flagon is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. 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 [...]
- </div>
- <div class="center aligned column">
- Copyright © 2023 The Apache Software Foundation, Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br>
- Apache Flagon, Flagon, Apache, the Apache feather logo, the Apache Flagon logo and the Apache Incubator logo are trademarks of The Apache Software Foundation.
- </div>
- </div>
- </div>
- <div class="ui inverted vertical segment">
- <div class="ui one column middle aligned grid">
- <div class="center aligned column">
- <a href="http://incubator.apache.org/">
- <img src="/images/incubator-logo-white.jpg">
- </a>
- <a href="https://www.apache.org/events/current-event.html">
- <img src="https://www.apache.org/events/current-event-234x60.png" alt="ASF Current Event">
- </a>
- </div>
- </div>
- </div>
-</div>
-
-
- </body>
-
-</html>
diff --git a/site/_site/stout/index.html b/site/_site/stout/index.html
deleted file mode 100644
index 011bc92..0000000
--- a/site/_site/stout/index.html
+++ /dev/null
@@ -1,250 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1">
-
- <title>Stout</title>
- <meta name="description" content="The homepage for Apache Flagon">
-
- <link rel="stylesheet" type="text/css" href="/semantic/dist/semantic.min.css">
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
- <script src="/semantic/dist/semantic.min.js"></script>
- <script src="https://d3js.org/d3.v4.min.js"></script>
- <script src="/js/main.js"></script>
-
- <link rel="stylesheet" href="/assets/main.css">
- <link rel="canonical" href="http://flagon.apache.org/stout/">
- <link rel="alternate" type="application/rss+xml" title="Apache Flagon" href="/feed.xml">
-
-
-</head>
-
-
- <body>
-
- <div class="site-header">
- <div id="main-menu" class="ui inverted padded fixed top borderless menu">
- <a class="site-title" href="/">
- <h3 class="ui inverted header item">Apache Flagon</h3>
- </a>
-
- <div class="right menu">
- <div class="ui dropdown item">
- Products
- <div class="menu">
- <a class="item" href="/stack">Stack</a>
- <a class="item" href="/userale">UserALE</a>
- <a class="item" href="/distill">Distill</a>
- <a class="item" href="/tap">Tap</a>
- <a class="item" href="/stout">Stout</a>
- </div>
- </div>
- <div class="ui dropdown item">
- <a href="/docs">Docs</a>
- <div class="menu">
- <a class="item" href="/docs/stack">Stack</a>
- <a class="item" href="/docs/userale">UserALE</a>
- <a class="item" href="/docs/useralejs">UserALE.js</a>
- <a class="item" href="/docs/useralepy">UserALE.py</a>
- <a class="item" href="/docs/distill">Distill</a>
- <a class="item" href="/docs/tap">Tap</a>
- <a class="item" href="/docs/stout">Stout</a>
- </div>
- </div>
- <a class="item" href="/releases">Releases</a>
- <a class="item" href="/community">Community</a>
- </div>
- </div>
-</div>
-
-
- <div class="main-wrapper">
-
- <div class="ui image-masthead masthead padded center aligned inverted vertical segment">
- <img class="component-image" src="/images/stout_inverted.png">
- </div>
-
-
-<div class="ui very padded vertical segment">
- <div class="ui center aligned text container">
- <p>
- Apache STOUT (Subject Tracking and Online User Testing) is an experimental platform for UI/UX (and behavioral) researchers that want to perform formal user-testing studies and experiments with web applications. In STOUT, you'll be able to track participants through a series of URLs in a sequence that matches your experimental design–both between and within-subject designs. STOUT makes sure that your participants are sent to the right URLs in the right sequence. You can also set tim [...]
- </p>
- </div>
-</div>
-
-<div class="ui inverted grey very padded vertical segment">
- <div class="ui center aligned text container">
- <h2 class="ui inverted header">Features</h2>
-
- <div class="ui basic padded vertical segment">
- <div class="ui middle aligned two column grid">
- <div class="column">
- <i class="huge circular inverted blue lab icon"></i>
- </div>
- <div class="column">
- <h3 class="ui inverted header">Perform experiments</h3>
- <div class="feature-description">
- STOUT allows you to track users as they interact with different applications or different versions of the same applications in simple experimental designs. STOUT's Django back end allows you collect task sequence data and even randomize or counterbalance your experiments without losing track of what users are interacting with and when.
- </div>
- </div>
- </div>
- </div>
-
- <div class="ui basic padded vertical segment">
- <div class="ui middle aligned two column grid">
- <div class="column">
- <i class="huge circular inverted yellow database icon"></i>
- </div>
- <div class="column">
- <h3 class="ui inverted header">Wrangle different data sources</h3>
- <div class="feature-description">
- STOUT allows you to track users between different sources of information using an anonymous user hash. Collect demographics and psychometrics from form data, present users with tasks and questions while they interact with applications, and collect user behavior through UserALE without losing track of who generated the data.
- </div>
- </div>
- </div>
- </div>
-
- <div class="ui basic padded vertical segment">
- <div class="ui middle aligned two column grid">
- <div class="column">
- <i class="huge circular inverted red cloud download icon"></i>
- </div>
- <div class="column">
- <h3 class="ui inverted header">Fuse data for analysis</h3>
- <div class="feature-description">
- With the SurveyMongo extension to STOUT you can automate polling for survey data and integrate with STOUT metadata to provide tabular datasets that make statistical analysis easy.
- </div>
- </div>
- </div>
- </div>
-
- <div class="ui basic padded vertical segment">
- <div class="ui middle aligned two column grid">
- <div class="column">
- <i class="huge circular inverted green refresh icon"></i>
- </div>
- <div class="column">
- <h3 class="ui inverted header">Automate data preprocessing</h3>
- <div class="feature-description">
- STOUT's architecture makes it easy to run batch processing scripts in R or python, server-side. Perform your truthing, aggregation, and data transformations automatically, triggered by flags in STOUT, so that you can get straight to analysis.
- </div>
- </div>
- </div>
- </div>
-
- <div class="ui basic padded vertical segment">
- <div class="ui middle aligned two column grid">
- <div class="column">
- <i class="huge circular inverted blue bar chart icon"></i>
- </div>
- <div class="column">
- <h3 class="ui inverted header">Visualize experimental findings</h3>
- <div class="feature-description">
- STOUT features a dashboard so that you can effectively manage multiple experiments and visualize your results using D3 packages.
- </div>
- </div>
- </div>
- </div>
-
- </div>
-</div>
-
-
-
-
-<div class="ui very padded vertical segment">
- <div class="ui center aligned text container">
- <h2 class="ui header">
- Ready to try Stout?
- </h2>
- <a class="ui big blue button" href="/releases">
- Get the Release
- </a>
- <a class="ui big yellow button" href="/docs/stout/">
- Read the Docs
- </a>
- </div>
-</div>
-
- </div>
-
- <div class="footer ui inverted very padded vertical segment">
- <div class="ui vertical segment">
- <div class="ui four column grid">
- <div class="column">
- <h4 class="ui inverted header">About</h4>
- <div class="ui inverted link list">
- <a class="item" href="/stack">Stack</a>
- <a class="item" href="/userale">UserALE</a>
- <a class="item" href="/distill">Distill</a>
- <a class="item" href="/tap">Tap</a>
- <a class="item" href="/stout">Stout</a>
- </div>
- </div>
- <div class="column">
- <h4 class="ui inverted header">Docs</h4>
- <div class="ui inverted link list">
- <a class="item" href="/docs/stack">Stack</a>
- <a class="item" href="/docs/userale">UserALE</a>
- <a class="item" href="/docs/useralejs">UserAle.js</a>
- <a class="item" href="/docs/useralepy">UserAle.py</a>
- <a class="item" href="/docs/distill">Distill</a>
- <a class="item" href="/docs/tap">Tap</a>
- <a class="item" href="/docs/stout">Stout</a>
- </div>
- </div>
- <div class="column">
- <h4 class="ui inverted header">Community</h4>
- <div class="ui inverted link list">
- <a class="item" href="https://github.com/apache?q=flagon">GitHub</a>
- <a class="item" href="http://stackoverflow.com/questions/tagged/apache-flagon">StackOverflow</a>
- <a class="item" href="https://issues.apache.org/jira/browse/FLAGON">Jira Issue Tracker</a>
- <a class="item" href="https://cwiki.apache.org/confluence/display/FLAGON">Project Wiki</a>
- <a class="item" href="https://twitter.com/ApacheFlagon">Twitter</a>
- </div>
- </div>
- <div class="column">
- <h4 class="ui inverted header">Apache</h4>
- <div class="ui inverted link list">
- <a class="item" href="http://www.apache.org/">Apache Software Foundation</a>
- <a class="item" href="http://www.apache.org/licenses/">License</a>
- <a class="item" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
- <a class="item" href="http://www.apache.org/foundation/thanks.html">Thanks</a>
- <a class="item" href="http://www.apache.org/security/">Security</a>
- </div>
- </div>
- </div>
- </div>
- <div class="ui inverted vertical segment">
- <div class="ui two column middle aligned grid">
- <div class="column">
- Apache Flagon is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. 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 [...]
- </div>
- <div class="center aligned column">
- Copyright © 2023 The Apache Software Foundation, Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br>
- Apache Flagon, Flagon, Apache, the Apache feather logo, the Apache Flagon logo and the Apache Incubator logo are trademarks of The Apache Software Foundation.
- </div>
- </div>
- </div>
- <div class="ui inverted vertical segment">
- <div class="ui one column middle aligned grid">
- <div class="center aligned column">
- <a href="http://incubator.apache.org/">
- <img src="/images/incubator-logo-white.jpg">
- </a>
- <a href="https://www.apache.org/events/current-event.html">
- <img src="https://www.apache.org/events/current-event-234x60.png" alt="ASF Current Event">
- </a>
- </div>
- </div>
- </div>
-</div>
-
-
- </body>
-
-</html>
diff --git a/site/index.html b/site/index.html
index 5abc92d..efb607c 100644
--- a/site/index.html
+++ b/site/index.html
@@ -17,7 +17,7 @@ layout: default
<br>
- <a class="ui big red button" href="{{ '/docs/stack/' | prepend: site.baseurl }}">
+ <a class="ui big red button" href="{{ '/docs/useralejs/' | prepend: site.baseurl }}">
Get Started
</a>
<a class="ui big blue button" href="{{ '/releases' | prepend: site.baseurl }}">
@@ -61,38 +61,6 @@ layout: default
</div>
</div>
-<div class="ui very padded vertical segment">
- <div class="ui text container">
- <div class="ui two column middle aligned grid">
- <div class="column">
- Apache TAP is Flagon's experimental collection of specially modified D3 visual analytic libraries for exploring Apache UserALE.js data. You can explore them in our sandbox environment, or embed them in your own applications. With TAP, Gain insight from advanced sequential and graph models and reveal trends in usage across users of different types and experience, and trends across different versions of your application. Try out our Bowie plot demo below!
- </div>
- <div class="center aligned column">
- <a href="{{ '/tap' | prepend: site.baseurl }}">
- <img class="component-image" src="/images/tap.png">
- </a>
- </div>
- </div>
- </div>
-</div>
-
-{% include tapDemo.html inverted=true %}
-
-<div class="ui very padded vertical segment">
- <div class="ui text container">
- <div class="ui two column middle aligned grid">
- <div class="center aligned column">
- <a href="{{ '/stout' | prepend: site.baseurl }}">
- <img class="component-image" src="/images/stout.png">
- </a>
- </div>
- <div class="column">
- Stage systematic user research on the web. Apache STOUT provides everyone the ability to perform user research on the web. Track research participants through different tasks with your web applications, or track them through different versions of the same web application. Apache STOUT allows you to manage user research participants and data collected through Apache UserALE and 3rd party form data services.
- </div>
- </div>
- </div>
-</div>
-
<div class="ui inverted grey very padded vertical segment">
<div class="ui text container">
<h2 class="ui inverted header">About the Project</h2>