mirror of
https://github.com/NationalSecurityAgency/timely.git
synced 2026-11-10 03:41:25 -10:00
Compare commits
27
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
577688aa54 | ||
|
|
1f0fe4198d | ||
|
|
385b142f71 | ||
|
|
9065dcdce2 | ||
|
|
3877695949 | ||
|
|
d4e504b31c | ||
|
|
32ae6ee399 | ||
|
|
9688514a0f | ||
|
|
9aa089a585 | ||
|
|
8d75089525 | ||
|
|
7857d862b3 | ||
|
|
e8e2e5e144 | ||
|
|
33515061b7 | ||
|
|
7d2ab1be7e | ||
|
|
521969b9ee | ||
|
|
62fb143490 | ||
|
|
08cf3dc5c2 | ||
|
|
6831223f50 | ||
|
|
20ed753723 | ||
|
|
a8e3737200 | ||
|
|
d1c3989a8d | ||
|
|
5712ebe2ae | ||
|
|
e47cbe5e3b | ||
|
|
f5b3a205b2 | ||
|
|
a2b61191c7 | ||
|
|
adfd4080bd | ||
|
|
483f5f8f1a |
No files matched your search
@@ -1,5 +1,5 @@
|
||||
Make sure you've checked off all these things before submitting:
|
||||
!!!!! STOP AND READ !!!!!
|
||||
|
||||
- [ ] This pull request isn't for a company's fork, it's intended for the upstream Slate shared by everybody.
|
||||
- [ ] This pull request is submitted to the `dev` branch.
|
||||
- [ ] If it makes frontend changes, this pull request has been tested in the latest version of Firefox, Chrome, IE, and Safari.
|
||||
If the dropdown above says "base fork: lord/master", you are submitting your change to ALL USERS OF SLATE, not just your company. This is probably not what you want. Click "base fork" to change it to the right place.
|
||||
|
||||
If you're actually trying to submit a change to upstream Slate, please submit to our dev branch, PRs sent to the master branch are generally rejected.
|
||||
+2
-2
@@ -3,8 +3,8 @@ sudo: false
|
||||
language: ruby
|
||||
|
||||
rvm:
|
||||
- 2.0.0
|
||||
- 2.1.0
|
||||
- 2.2.5
|
||||
- 2.3.1
|
||||
|
||||
cache: bundler
|
||||
script: bundle exec middleman build
|
||||
@@ -1,5 +1,18 @@
|
||||
# Changelog
|
||||
|
||||
## Version 1.4.0
|
||||
|
||||
*November 24, 2016*
|
||||
|
||||
- Upgrade Middleman and Rouge gems, should hopefully solve a number of bugs
|
||||
- Update some links in README
|
||||
- Fix broken Vagrant startup script
|
||||
- Fix some problems with deploy.sh help message
|
||||
- Fix bug with language tabs not hiding properly if no error
|
||||
- Add `!default` to SASS variables
|
||||
- Fix bug with logo margin
|
||||
- Bump tested Ruby versions in .travis.yml
|
||||
|
||||
## Version 1.3.3
|
||||
|
||||
*June 11, 2016*
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
source 'https://rubygems.org'
|
||||
|
||||
# Middleman
|
||||
gem 'middleman', '~>4.0.0'
|
||||
gem 'middleman-gh-pages', '~> 0.0.3'
|
||||
gem 'middleman-syntax', '~> 2.1.0'
|
||||
gem 'middleman', '~>4.1.0'
|
||||
gem 'middleman-syntax', '~> 3.0.0'
|
||||
gem 'middleman-autoprefixer', '~> 2.7.0'
|
||||
gem "middleman-sprockets", "~> 4.0.0.rc"
|
||||
gem 'rouge', '~> 1.10.1'
|
||||
gem "middleman-sprockets", "~> 4.0.0"
|
||||
gem 'rouge', '~> 2.0.5'
|
||||
gem 'redcarpet', '~> 3.3.2'
|
||||
+59
-71
@@ -1,134 +1,122 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (4.2.5.1)
|
||||
activesupport (4.2.7.1)
|
||||
i18n (~> 0.7)
|
||||
json (~> 1.7, >= 1.7.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.3, >= 0.3.4)
|
||||
tzinfo (~> 1.1)
|
||||
addressable (2.4.0)
|
||||
autoprefixer-rails (6.3.1)
|
||||
autoprefixer-rails (6.4.1)
|
||||
execjs
|
||||
json
|
||||
backports (3.6.7)
|
||||
capybara (2.5.0)
|
||||
mime-types (>= 1.16)
|
||||
nokogiri (>= 1.3.3)
|
||||
rack (>= 1.0.0)
|
||||
rack-test (>= 0.5.4)
|
||||
xpath (~> 2.0)
|
||||
backports (3.6.8)
|
||||
coffee-script (2.4.1)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.10.0)
|
||||
compass-import-once (1.0.5)
|
||||
sass (>= 3.2, < 3.5)
|
||||
concurrent-ruby (0.9.2)
|
||||
contracts (0.12.0)
|
||||
concurrent-ruby (1.0.2)
|
||||
contracts (0.13.0)
|
||||
dotenv (2.1.1)
|
||||
erubis (2.7.0)
|
||||
execjs (2.6.0)
|
||||
fastimage (1.8.1)
|
||||
addressable (~> 2.3, >= 2.3.5)
|
||||
ffi (1.9.10)
|
||||
execjs (2.7.0)
|
||||
fast_blank (1.0.0)
|
||||
fastimage (2.0.0)
|
||||
addressable (~> 2)
|
||||
ffi (1.9.14)
|
||||
haml (4.0.7)
|
||||
tilt
|
||||
hamster (2.0.0)
|
||||
concurrent-ruby (~> 0.8)
|
||||
hashie (3.4.3)
|
||||
hamster (3.0.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
hashie (3.4.4)
|
||||
i18n (0.7.0)
|
||||
json (1.8.3)
|
||||
kramdown (1.9.0)
|
||||
listen (3.0.5)
|
||||
rb-fsevent (>= 0.9.3)
|
||||
rb-inotify (>= 0.9)
|
||||
middleman (4.0.0)
|
||||
kramdown (1.12.0)
|
||||
listen (3.0.8)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
memoist (0.15.0)
|
||||
middleman (4.1.10)
|
||||
coffee-script (~> 2.2)
|
||||
compass-import-once (= 1.0.5)
|
||||
haml (>= 4.0.5)
|
||||
kramdown (~> 1.2)
|
||||
middleman-cli (= 4.0.0)
|
||||
middleman-core (= 4.0.0)
|
||||
middleman-cli (= 4.1.10)
|
||||
middleman-core (= 4.1.10)
|
||||
sass (>= 3.4.0, < 4.0)
|
||||
middleman-autoprefixer (2.7.0)
|
||||
autoprefixer-rails (>= 6.3.1, < 7.0.0)
|
||||
middleman-core (>= 3.3.3)
|
||||
middleman-cli (4.0.0)
|
||||
middleman-cli (4.1.10)
|
||||
thor (>= 0.17.0, < 2.0)
|
||||
middleman-core (4.0.0)
|
||||
middleman-core (4.1.10)
|
||||
activesupport (~> 4.2)
|
||||
addressable (~> 2.4.0)
|
||||
addressable (~> 2.3)
|
||||
backports (~> 3.6)
|
||||
bundler (~> 1.1)
|
||||
capybara (~> 2.5.0)
|
||||
contracts (~> 0.12.0)
|
||||
contracts (~> 0.13.0)
|
||||
dotenv
|
||||
erubis
|
||||
execjs (~> 2.0)
|
||||
fastimage (~> 1.8)
|
||||
hamster (~> 2.0)
|
||||
fast_blank
|
||||
fastimage (~> 2.0)
|
||||
hamster (~> 3.0)
|
||||
hashie (~> 3.4)
|
||||
i18n (~> 0.7.0)
|
||||
listen (~> 3.0)
|
||||
listen (~> 3.0.0)
|
||||
memoist (~> 0.14)
|
||||
padrino-helpers (~> 0.13.0)
|
||||
parallel
|
||||
rack (>= 1.4.5, < 2.0)
|
||||
sass (>= 3.4)
|
||||
servolux
|
||||
tilt (~> 1.4.1)
|
||||
uglifier (~> 2.6)
|
||||
middleman-gh-pages (0.0.3)
|
||||
rake (> 0.9.3)
|
||||
middleman-sprockets (4.0.0.rc.1)
|
||||
middleman-core (>= 4.0.0.rc.1)
|
||||
sprockets (~> 3.0)
|
||||
middleman-syntax (2.1.0)
|
||||
uglifier (~> 3.0)
|
||||
middleman-sprockets (4.0.0)
|
||||
middleman-core (~> 4.0)
|
||||
sprockets (>= 3.0)
|
||||
middleman-syntax (3.0.0)
|
||||
middleman-core (>= 3.2)
|
||||
rouge (~> 1.0)
|
||||
mime-types (3.0)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2015.1120)
|
||||
mini_portile2 (2.0.0)
|
||||
minitest (5.8.4)
|
||||
nokogiri (1.6.7.2)
|
||||
mini_portile2 (~> 2.0.0.rc2)
|
||||
padrino-helpers (0.13.1)
|
||||
rouge (~> 2.0)
|
||||
minitest (5.9.0)
|
||||
padrino-helpers (0.13.3.1)
|
||||
i18n (~> 0.6, >= 0.6.7)
|
||||
padrino-support (= 0.13.1)
|
||||
tilt (~> 1.4.1)
|
||||
padrino-support (0.13.1)
|
||||
padrino-support (= 0.13.3.1)
|
||||
tilt (>= 1.4.1, < 3)
|
||||
padrino-support (0.13.3.1)
|
||||
activesupport (>= 3.1)
|
||||
parallel (1.9.0)
|
||||
rack (1.6.4)
|
||||
rack-test (0.6.3)
|
||||
rack (>= 1.0)
|
||||
rake (10.4.2)
|
||||
rb-fsevent (0.9.7)
|
||||
rb-inotify (0.9.5)
|
||||
rb-inotify (0.9.7)
|
||||
ffi (>= 0.5.0)
|
||||
redcarpet (3.3.4)
|
||||
rouge (1.10.1)
|
||||
sass (3.4.21)
|
||||
sprockets (3.4.1)
|
||||
rouge (2.0.5)
|
||||
sass (3.4.22)
|
||||
servolux (0.12.0)
|
||||
sprockets (3.7.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
rack (> 1, < 3)
|
||||
thor (0.19.1)
|
||||
thread_safe (0.3.5)
|
||||
tilt (1.4.1)
|
||||
tzinfo (1.2.2)
|
||||
thread_safe (~> 0.1)
|
||||
uglifier (2.7.2)
|
||||
execjs (>= 0.3.0)
|
||||
json (>= 1.8.0)
|
||||
xpath (2.0.0)
|
||||
nokogiri (~> 1.3)
|
||||
uglifier (3.0.2)
|
||||
execjs (>= 0.3.0, < 3)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
middleman (~> 4.0.0)
|
||||
middleman (~> 4.1.0)
|
||||
middleman-autoprefixer (~> 2.7.0)
|
||||
middleman-gh-pages (~> 0.0.3)
|
||||
middleman-sprockets (~> 4.0.0.rc)
|
||||
middleman-syntax (~> 2.1.0)
|
||||
middleman-sprockets (~> 4.0.0)
|
||||
middleman-syntax (~> 3.0.0)
|
||||
redcarpet (~> 3.3.2)
|
||||
rouge (~> 1.10.1)
|
||||
rouge (~> 2.0.5)
|
||||
|
||||
BUNDLED WITH
|
||||
1.10.6
|
||||
1.12.5
|
||||
@@ -21,7 +21,7 @@ Features
|
||||
|
||||
* **Write code samples in multiple languages** — If your API has bindings in multiple programming languages, you can easily put in tabs to switch between them. In your document, you'll distinguish different languages by specifying the language name at the top of each code block, just like with Github Flavored Markdown.
|
||||
|
||||
* **Out-of-the-box syntax highlighting** for [almost 100 languages](http://rouge.jneen.net/), no configuration required.
|
||||
* **Out-of-the-box syntax highlighting** for [over 100 languages](https://github.com/jneen/rouge/wiki/List-of-supported-languages-and-lexers), no configuration required.
|
||||
|
||||
* **Automatic, smoothly scrolling table of contents** on the far left of the page. As you scroll, it displays your current position in the document. It's fast, too. We're using Slate at TripIt to build documentation for our new API, where our table of contents has over 180 entries. We've made sure that the performance remains excellent, even for larger documents.
|
||||
|
||||
@@ -37,7 +37,7 @@ Getting Started with Slate
|
||||
You're going to need:
|
||||
|
||||
- **Linux or OS X** — Windows may work, but is unsupported.
|
||||
- **Ruby, version 2.0 or newer**
|
||||
- **Ruby, version 2.2.5 or newer**
|
||||
- **Bundler** — If Ruby is already installed, but the `bundle` command doesn't work, just run `gem install bundler` in a terminal.
|
||||
|
||||
### Getting Set Up
|
||||
@@ -58,7 +58,7 @@ vagrant up
|
||||
|
||||
You can now see the docs at http://localhost:4567. Whoa! That was fast!
|
||||
|
||||
Now that Slate is all set up your machine, you'll probably want to learn more about [editing Slate markdown](https://github.com/lord/slate/wiki/Markdown-Syntax), or [how to publish your docs](https://github.com/lord/slate/wiki/Deploying-Slate).
|
||||
Now that Slate is all set up on your machine, you'll probably want to learn more about [editing Slate markdown](https://github.com/lord/slate/wiki/Markdown-Syntax), or [how to publish your docs](https://github.com/lord/slate/wiki/Deploying-Slate).
|
||||
|
||||
If you'd prefer to use Docker, instructions are available [in the wiki](https://github.com/lord/slate/wiki/Docker).
|
||||
|
||||
@@ -66,9 +66,13 @@ Companies Using Slate
|
||||
---------------------------------
|
||||
|
||||
* [NASA](https://api.nasa.gov)
|
||||
* [IBM Cloudant](https://docs.cloudant.com/api.html)
|
||||
* [Travis-CI](https://docs.travis-ci.com/api/)
|
||||
* [IBM](https://docs.cloudant.com/api.html)
|
||||
* [Sony](http://developers.cimediacloud.com)
|
||||
* [Mozilla](http://mozilla.github.io/localForage/)
|
||||
* [Best Buy](https://bestbuyapis.github.io/api-documentation/)
|
||||
* [Travis-CI](https://docs.travis-ci.com/api/)
|
||||
* [Greenhouse](https://developers.greenhouse.io/harvest.html)
|
||||
* [Woocommerce](http://woothemes.github.io/woocommerce-rest-api-docs/)
|
||||
* [Appium](http://appium.io/slate/en/master)
|
||||
* [Dwolla](https://docs.dwolla.com/)
|
||||
* [Clearbit](https://clearbit.com/docs)
|
||||
|
||||
Vendored
+1
-1
@@ -34,6 +34,6 @@ Vagrant.configure(2) do |config|
|
||||
echo "Starting up middleman at http://localhost:4567"
|
||||
echo "If it does not come up, check the ~/middleman.log file for any error messages"
|
||||
cd /vagrant
|
||||
bundle exec middleman server --force-polling -l 1 &> ~/middleman.log &
|
||||
bundle exec middleman server --watcher-force-polling --watcher_latency=1 &> ~/middleman.log &
|
||||
SHELL
|
||||
end
|
||||
@@ -18,6 +18,8 @@ set :fonts_dir, 'fonts'
|
||||
# Activate the syntax highlighter
|
||||
activate :syntax
|
||||
|
||||
activate :sprockets
|
||||
|
||||
activate :autoprefixer do |config|
|
||||
config.browsers = ['last 2 version', 'Firefox ESR']
|
||||
config.cascade = false
|
||||
|
||||
@@ -15,20 +15,7 @@ Options:
|
||||
deploy branch.
|
||||
-n, --no-hash Don't append the source commit's hash to the deploy
|
||||
commit's message.
|
||||
-c, --config-file PATH Override default & environment variables' values
|
||||
with those in set in the file at 'PATH'. Must be the
|
||||
first option specified.
|
||||
|
||||
Variables:
|
||||
|
||||
GIT_DEPLOY_DIR Folder path containing the files to deploy.
|
||||
GIT_DEPLOY_BRANCH Commit deployable files to this branch.
|
||||
GIT_DEPLOY_REPO Push the deploy branch to this repository.
|
||||
|
||||
These variables have default values defined in the script. The defaults can be
|
||||
overridden by environment variables. Any environment variables are overridden
|
||||
by values set in a '.env' file (if it exists), and in turn by those set in a
|
||||
file specified by the '--config-file' option."
|
||||
"
|
||||
|
||||
bundle exec middleman build --clean
|
||||
|
||||
@@ -38,12 +25,6 @@ parse_args() {
|
||||
source .env
|
||||
fi
|
||||
|
||||
# Set args from file specified on the command-line.
|
||||
if [[ $1 = "-c" || $1 = "--config-file" ]]; then
|
||||
source "$2"
|
||||
shift 2
|
||||
fi
|
||||
|
||||
# Parse arg flags
|
||||
# If something is exposed as an environment variable, set/overwrite it
|
||||
# here. Otherwise, set/overwrite the internal variable instead.
|
||||
@@ -98,24 +79,24 @@ main() {
|
||||
|
||||
commit_title=`git log -n 1 --format="%s" HEAD`
|
||||
commit_hash=` git log -n 1 --format="%H" HEAD`
|
||||
|
||||
|
||||
#default commit message uses last title if a custom one is not supplied
|
||||
if [[ -z $commit_message ]]; then
|
||||
commit_message="publish: $commit_title"
|
||||
fi
|
||||
|
||||
|
||||
#append hash to commit message unless no hash flag was found
|
||||
if [ $append_hash = true ]; then
|
||||
commit_message="$commit_message"$'\n\n'"generated from commit $commit_hash"
|
||||
fi
|
||||
|
||||
|
||||
previous_branch=`git rev-parse --abbrev-ref HEAD`
|
||||
|
||||
if [ ! -d "$deploy_directory" ]; then
|
||||
echo "Deploy directory '$deploy_directory' does not exist. Aborting." >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
|
||||
# must use short form of flag in ls for compatibility with OS X and BSD
|
||||
if [[ -z `ls -A "$deploy_directory" 2> /dev/null` && -z $allow_empty ]]; then
|
||||
echo "Deploy directory '$deploy_directory' is empty. Aborting. If you're sure you want to deploy an empty tree, use the --allow-empty / -e flag." >&2
|
||||
@@ -124,7 +105,7 @@ main() {
|
||||
|
||||
if git ls-remote --exit-code $repo "refs/heads/$deploy_branch" ; then
|
||||
# deploy_branch exists in $repo; make sure we have the latest version
|
||||
|
||||
|
||||
disable_expanded_output
|
||||
git fetch --force $repo $deploy_branch:$deploy_branch
|
||||
enable_expanded_output
|
||||
@@ -207,7 +188,7 @@ restore_head() {
|
||||
else
|
||||
git symbolic-ref HEAD refs/heads/$previous_branch
|
||||
fi
|
||||
|
||||
|
||||
git reset --mixed
|
||||
}
|
||||
|
||||
@@ -219,4 +200,4 @@ sanitize() {
|
||||
"$@" 2> >(filter 1>&2) | filter
|
||||
}
|
||||
|
||||
[[ $1 = --source-only ]] || main "$@"
|
||||
[[ $1 = --source-only ]] || main "$@"
|
||||
@@ -22,3 +22,7 @@ Add | | | | X
|
||||
Remove | | | | X
|
||||
Close | | | | X
|
||||
|
||||
# Timely Client
|
||||
|
||||
Java Timely client library was started in 0.0.4, it is not complete, but what is done does work. The client library includes classes for communicating over all the protocols (UDP, TCP, HTTPS, WSS).
|
||||
|
||||
@@ -2,13 +2,14 @@
|
||||
|
||||
## Building Timely
|
||||
|
||||
Timely requires a Java 8 and uses Maven for compiling source, running tests, and packaging distributions. Below is a set of useful Maven lifecyles that we use:
|
||||
Timely requires a Java 8 and uses Maven for compiling source, running tests, and packaging distributions. To build the CollectD plugins, activate the `collectd` profile. Below are a set of useful Maven lifecyles that we use:
|
||||
|
||||
Command | Description
|
||||
--------|------------
|
||||
mvn compile | Compiles and formats the source
|
||||
mvn test | Runs unit tests
|
||||
mvn package | Runs findbugs and creates a distribution
|
||||
mvn package -Pcollectd | Runs findbugs and creates a distribution, includes the collectd plugins
|
||||
mvn verify | Runs integration tests
|
||||
mvn verify site | Creates the site
|
||||
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
# Standalone Quick Start
|
||||
|
||||
1. Install latest version of Grafana (3.0.4 at time of writing)
|
||||
2. Create a grafana configuration file (e.g: `conf/settings.ini`)
|
||||
1. Build Timely
|
||||
1. set `JAVA_HOME` to point to a JDK 8 installation
|
||||
2. run `mvn clean package` from the top level directory in the source tree
|
||||
2. Install latest version of Grafana that works with Timely (4.4.3)
|
||||
3. Create a grafana configuration file (e.g: `conf/settings.ini`)
|
||||
1. `protocol = https`
|
||||
2. `http_addr = localhost`
|
||||
3. `cert_file= <path to PEM encoded certificate file>`
|
||||
4. `key_file= <path to PEM encoded un-encrypted private key file>`
|
||||
3. Start Grafana (`./bin/grafana-server -c conf/settings.ini`)
|
||||
4. Untar the timely-app distribution tarball located in grafana/target in the grafana plugins directory (default: /var/lib/grafana/plugins)
|
||||
5. Start Grafana (`./bin/grafana-server -c conf/settings.ini`)
|
||||
1. Visit `https://localhost:3000` to verify Grafana is working
|
||||
4. Build Timely
|
||||
1. set `JAVA_HOME` to point to a JDK 8 installation
|
||||
2. cd into the server directory and run `mvn clean package`
|
||||
5. Untar Timely server distribution (found in `target/timely-server-(VERSION)-SNAPSHOT-dist.tar.gz`)
|
||||
6. Modify `timely-standalone.yml`:
|
||||
6. Untar Timely server distribution (found in `target/timely-server-(VERSION)-SNAPSHOT-dist.tar.gz`)
|
||||
7. Modify `timely-standalone.yml`:
|
||||
1. Use generated server side SSL certificates
|
||||
1. `timely.security.ssl.use-generated-keypair=true`
|
||||
2. or, use your own SSL certificates - see [SSL] (#ssl-setup) Setup
|
||||
@@ -28,11 +29,11 @@
|
||||
1. `grafana.http.address=https://localhost:3000/login`
|
||||
5. Set Anonymous access for Timely
|
||||
1. `timely.security.allow-anonymous-access=<true or false>`
|
||||
7. Start the Timely standalone server
|
||||
8. Start the Timely standalone server
|
||||
1. `cd bin; ./timely-standalone.sh`
|
||||
8. Insert test data
|
||||
9. Insert test data
|
||||
1. `cd bin; ./insert-test-data.sh`
|
||||
9. Add the Timely datasource to Grafana
|
||||
10. Add the Timely datasource to Grafana
|
||||
1. Login to Grafana, go to 'DataSources'
|
||||
2. Click 'Add data source'
|
||||
3. Enter the following information:
|
||||
@@ -44,7 +45,7 @@
|
||||
6. Basic Auths: check
|
||||
7. Click `Browser Cert Check` and accept the certificate
|
||||
8. Click `Save & Test`.
|
||||
10. Import Standalone Test dashboard into Grafana.
|
||||
11. Import Standalone Test dashboard into Grafana.
|
||||
|
||||
|
||||
## Notes on Security Options
|
||||
|
||||
@@ -1,5 +1,34 @@
|
||||
# Release Notes
|
||||
|
||||
## 0.0.5
|
||||
|
||||
### FEATURES
|
||||
|
||||
- Made changes and tested with Grafana 4.4.3 (alerting not supported yet)
|
||||
- Updated provided dashboards
|
||||
|
||||
### NOTES
|
||||
|
||||
- Build modified to *not* build collectd modules by default, use the `collectd` maven profile at build time
|
||||
|
||||
## 0.0.4
|
||||
|
||||
### FEATURES
|
||||
|
||||
- Added a Timely client library that contains Java code for interacting with the Timely API. Not all operations are finished.
|
||||
- Added an analytics module for writing Apache Flink jobs
|
||||
- Exposed Subscription Scanner configuration settings in the Timely configuration
|
||||
|
||||
### PERFORMANCE
|
||||
|
||||
- AgeOff performance is greatly improved with a new iterator
|
||||
- Added netty-transport-native-epoll as an optional runtime dependency
|
||||
|
||||
### NOTES
|
||||
|
||||
- Timely has not been tested with Grafana 4.x
|
||||
- The aggregation function (not the downsample aggregration function) in Grafana did not work prior to this release, it now works.
|
||||
|
||||
## 0.0.3
|
||||
|
||||
### FEATURES
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Securing the Transport
|
||||
|
||||
Timely only exposes two operations over a non-secure transport, one to the version of the server and the other to insert data. All other operations are protected by either HTTPS or WSS protocols. The server [configuration] (#configuration) allows the user to change many of the security settings such as: CORS origins, specific SSL/TLS ciphers, duration of the HTTP session cookie, and more.
|
||||
Timely only exposes two operations over a non-secure transport, one to get the version of the server and the other to insert data. All other operations are protected by either HTTPS or WSS protocols. The server [configuration] (#configuration) allows the user to change many of the security settings such as: CORS origins, specific SSL/TLS ciphers, duration of the HTTP session cookie, and more.
|
||||
|
||||
### HTTP Strict Transport Security
|
||||
|
||||
|
||||
@@ -12,18 +12,14 @@ The standalone server will not save your metric data across restarts.
|
||||
|
||||
To deploy Timely with a running Accumulo instance you will need to modify the `conf/timely.yml` file appropriately. Then copy the `lib/timely-client.jar`, `lib/timely-server.jar`, `lib/commons-lang3-*.jar`, `lib/commons-collections4-*.jar`, and `lib/guava-*.jar` files to your Accumulo tablet servers. Finally, launch Timely using the `bin/timely-server.sh` script. Because Timely uses a newer version of Guava, you will need to configure a classloader for the Timely context, set it to use post-delegation, and then configure your tables to use the Timely context classloader. This can be done in the shell or in the accumulo-site.xml file.
|
||||
|
||||
> In accumulo-site.xml: <br>
|
||||
<name>general.vfs.conext.classpath.timely.delegation=post</name><br>
|
||||
<value>some location</value>
|
||||
|
||||
> In accumulo shell: <br>
|
||||
`general.vfs.conext.classpath.timely=<some location>`<br>
|
||||
`general.vfs.context.classpath.timely=<some location>`<br>
|
||||
`general.vfs.context.classpath.timely.delegation=post`
|
||||
|
||||
|
||||
## SSL Setup
|
||||
|
||||
To user Timely, both Timely and Grafana will need to use SSL certificates. Grafana requires a PEM encoded certificate file and an un-encrypted PEM private key file. Timely requires a PEM encoded certificate file and a PKCS#8 encoded private key file. Timely supports private keys with and without a password, just comment out the `timely.security.ssl.key-password` property if there is no password for your private key.
|
||||
To user Timely, both Timely and Grafana will need to use SSL certificates. Grafana requires a PEM encoded certificate file and an un-encrypted PEM private key file. Timely requires a PEM encoded certificate file and a PKCS#8 encoded private key file. Timely supports private keys with and without a password, just comment out the `timely.security.ssl.key-password` property if there is no password for your private key. In a successful setup, you should only need to add the Timely Certificate Authority to your web browser.
|
||||
|
||||
### Creating your own SSL keys and certificates
|
||||
|
||||
@@ -37,7 +33,7 @@ Create a private key
|
||||
|
||||
Create a certificate request using the private key
|
||||
|
||||
`openssl req -x509 -new -key CA.key -sha256 -nodes -days 365 -out CA.pem`
|
||||
`openssl req -x509 -new -key CA.key -sha256 -subj '/C=US/ST=Confusion/L=Here/O=Timely/OU=CA/CN=localhost/emailAddress=noreply@localhost/subjectAltName=DNS.1=127.0.0.1' -nodes -days 365 -out CA.pem`
|
||||
|
||||
#### Create your SSL material for Grafana
|
||||
|
||||
@@ -47,7 +43,7 @@ Create the private key for the Grafana server
|
||||
|
||||
Generate a certificate signing request (CSR) with our Grafana private key
|
||||
|
||||
`openssl req -new -key grafana.key -sha256 -nodes -out grafana.csr`
|
||||
`openssl req -new -key grafana.key -sha256 -subj '/C=US/ST=Confusion/L=Here/O=Grafana/OU=Server/CN=localhost/emailAddress=noreply@localhost/subjectAltName=DNS.1=127.0.0.1' -nodes -out grafana.csr`
|
||||
|
||||
Use the CSR and the CA to create a certificate for the server (a reply to the CSR)
|
||||
|
||||
@@ -80,7 +76,7 @@ timely:
|
||||
```
|
||||
The default configuration file type for Timely is a YAML. The configuration is read internally using Spring Boot, and therefore supports all of the configuration styles supported by Spring Boot. See [here](http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config) and [here](http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-yaml) for more details. In YAML, a property such as timely.accumulo.instance-name=MyInstanceName (which can also be timely.accumulo.instanceName) would look like the example on the right.
|
||||
|
||||
The `NUM_SERVER_THREADS` variable in the `timely-server.sh` script controls how many threads are used in the Netty event group for TCP and HTTP operations. The TCP and HTTP groups use a different event group, so if you set the value to 8, then you will have 8 threads for TCP operations and 8 threads for HTTP operations. The properties file in the `conf` directory supports the following properties:
|
||||
The `NUM_SERVER_THREADS` variable in the `timely-server.sh` script controls how many threads are used in the Netty event group for UPD, TCP, HTTP, and WebSocket operations. The different protocols each use a Netty event group, so if you set the value to 8, then you will have 4 thread groups of 8 threads each. The properties file in the `conf` directory supports the following properties:
|
||||
|
||||
> Note: Each thread in the Timely server that is used for processing TCP put operations has its own BatchWriter. Each BatchWriter honors the `timely.accumulo.write.latency` and `timely.accumulo.write.threads` configuration property, but the buffer size for each BatchWriter is `timely.accumulo.write.buffer-size` divided by the number of threads. For example, if you have 8 threads processing put operations and the following settings, then you will have 8 BatchWriters each using 2 threads with a 30s latency and a maximum buffer size of 128M: timely.accumulo.write.latency=30s, timely.accumulo.write.threads=2 timely.accumulo.write.buffer-size=1G
|
||||
|
||||
@@ -130,6 +126,10 @@ timely.websocket.ip | The IP address where the Timely server is listening for we
|
||||
timely.websocket.port | The port that will be used for processing web socket requests |
|
||||
timely.websocket.timeout | Number of seconds with no client ping response before closing subscription | 60
|
||||
timely.websocket.subscription-lag | Number of seconds that subscriptions should lag to account for latency | 120
|
||||
timely.websocket.scanner-batch-size | Accumulo Scanner batch size | 5000
|
||||
timely.websocket.flush-interval-seconds | Time in seconds that Timely will send a batch of subscription responses to the client | 30
|
||||
timely.websocket.scanner-read-ahead | Accumulo Scanner Readahead threshold | 1
|
||||
timely.websocket.subscription-batch-size | Maximum number of metric responses in a batch sent back to the client | 1000
|
||||
timely.meta-cache.expiration-minutes | Number of minutes after which unaccessed meta information will be purged from the meta cache | 60
|
||||
timely.meta-cache.initial-capacity | Initial capacity of the meta cache | 2000
|
||||
timely.meta-cache.max-capacity | Maximum capacity of the meta cache | 10000
|
||||
|
||||
@@ -7,26 +7,27 @@ The subscription API allows the user to subscribe to metrics data using WebSocke
|
||||
```json
|
||||
{
|
||||
"metric" : "sys.cpu.user",
|
||||
"timestamp":1469028728091,
|
||||
"value":1.0,
|
||||
"timestamp": 1469028728091,
|
||||
"value": 1.0,
|
||||
"tags":
|
||||
[
|
||||
{
|
||||
"key":"rack",
|
||||
"value":"r1"
|
||||
"key": "rack",
|
||||
"value": "r1"
|
||||
},{
|
||||
"key":"tag3",
|
||||
"value":"value3"
|
||||
"key": "tag3",
|
||||
"value": "value3"
|
||||
},{
|
||||
"key":"tag4",
|
||||
"value":"value4"
|
||||
"key": "tag4",
|
||||
"value": "value4"
|
||||
}
|
||||
],
|
||||
"subscriptionId":"<unique id>"
|
||||
"subscriptionId": "<unique id>",
|
||||
"complete": false
|
||||
}
|
||||
```
|
||||
|
||||
The Metric response contains the metric name, tag set, value for the metric, and the timestamp.
|
||||
The Metric response contains the metric name, tag set, value for the metric, and the timestamp. Unlike the timeseries api, the subscription responses will include the `viz` tag if it exists on the data.
|
||||
|
||||
## Create Operation
|
||||
|
||||
@@ -49,17 +50,19 @@ Initialize this WebSocket connection for subscription requests. This method does
|
||||
"metric" : "sys.cpu.user",
|
||||
"tags" : null,
|
||||
"startTime" : null,
|
||||
"endTime" : null,
|
||||
"delayTime" : 1000
|
||||
}
|
||||
```
|
||||
|
||||
Subscribe to metrics that match the metric name and optional tag set. Only one subscription per `metric` is supported. The Timely server will return [Metric] (#metric-response) responses over the WebSocket channel that match the `metric` and `tags` in the request. The Timely server will return metrics that are older than the `startTime`, which can be zero to return all currently stored data. When all data has been returned, the Timely server will wait `delayTime` ms before looking for new data. The Timely server maintains a pointer to the last metric returned, so it will not return data that is newly inserted but older than the last returned metric. Use the `timely.websocket.subscription-lag` server configuration property to determine how close to current time the subscriptions will be. This will depend on your deployment. For example, if the `timely.accumulo.write.latency` configuration property is 30s, then you may want to set the lag to greater than 30s to ensure that all data has arrived.
|
||||
Subscribe to metrics that match the metric name and optional tag set. Only one subscription per `metric` is supported. The Timely server will return [Metric] (#metric-response) responses over the WebSocket channel that match the `metric` and `tags` in the request. The Timely server will return metrics that are older than the `startTime`, which can be zero to return all currently stored data. When all data has been returned, the Timely server will either send a completed message, or wait `delayTime` ms before looking for new data, depending on the value of endTime. If endTime has been specified, then the Timely server will send a final message with `complete` set to true. Otherwise, the Timely server maintains a pointer to the last metric returned, so it will not return data that is newly inserted but older than the last returned metric. Use the `timely.websocket.subscription-lag` server configuration property to determine how close to current time the subscriptions will be. This will depend on your deployment. For example, if the `timely.accumulo.write.latency` configuration property is 30s, then you may want to set the lag to greater than 30s to ensure that all data has arrived.
|
||||
|
||||
Attribute | Type | Description
|
||||
----------|------|------------
|
||||
metric | string | metric name
|
||||
tags | map | (Optional) Map of K,V strings to use in the query.
|
||||
startTime | long | (Optional, default 0) Return metrics after this time (in ms)
|
||||
endTime | long | (Optional, default 0) If specified, stop returning data at this time (in ms)
|
||||
delayTime | long | Wait time to look for the arrival of new data.
|
||||
|
||||
## Remove Operation
|
||||
|
||||
@@ -44,6 +44,6 @@ Getting started with Timely requires that you:
|
||||
|
||||
2. Install and configure the Timely [app] (#deployment) within Grafana
|
||||
|
||||
> Timely should accept data from TCollector with no changes. A [plugin] (#plugins-for-collectd) exists for sending data from CollectD.
|
||||
|
||||
3. Send metrics to Timely using [CollectD] (http://collectd.org/), OpenTSDBs [TCollector] (https://github.com/OpenTSDB/tcollector), etc.
|
||||
|
||||
> Timely should accept data from TCollector with no changes. A [plugin] (#plugins-for-collectd) exists for sending data from CollectD.
|
||||
@@ -43,7 +43,7 @@ under the License.
|
||||
</a>
|
||||
<div class="tocify-wrapper">
|
||||
<%= image_tag "logo.png" %>
|
||||
<% if language_tabs %>
|
||||
<% if language_tabs.any? %>
|
||||
<div class="lang-selector">
|
||||
<% language_tabs.each do |lang| %>
|
||||
<% if lang.is_a? Hash %>
|
||||
@@ -79,7 +79,7 @@ under the License.
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
<% if language_tabs %>
|
||||
<% if language_tabs.any? %>
|
||||
<div class="lang-selector">
|
||||
<% language_tabs.each do |lang| %>
|
||||
<% if lang.is_a? Hash %>
|
||||
|
||||
@@ -23,48 +23,46 @@ under the License.
|
||||
|
||||
// BACKGROUND COLORS
|
||||
////////////////////
|
||||
$nav-bg: #393939;
|
||||
$examples-bg: #393939;
|
||||
$code-bg: #292929;
|
||||
$code-annotation-bg: #1c1c1c;
|
||||
$nav-subitem-bg: #262626;
|
||||
$nav-active-bg: #2467af;
|
||||
$lang-select-border: #000;
|
||||
$lang-select-bg: #222;
|
||||
$lang-select-active-bg: $examples-bg; // feel free to change this to blue or something
|
||||
$lang-select-pressed-bg: #111; // color of language tab bg when mouse is pressed
|
||||
$main-bg: #eaf2f6;
|
||||
$aside-notice-bg: #8fbcd4;
|
||||
$aside-warning-bg: #c97a7e;
|
||||
$aside-success-bg: #6ac174;
|
||||
$search-notice-bg: #c97a7e;
|
||||
$nav-bg: #393939 !default;
|
||||
$examples-bg: #393939 !default;
|
||||
$code-bg: #292929 !default;
|
||||
$code-annotation-bg: #1c1c1c !default;
|
||||
$nav-subitem-bg: #262626 !default;
|
||||
$nav-active-bg: #2467af !default;
|
||||
$lang-select-border: #000 !default;
|
||||
$lang-select-bg: #222 !default;
|
||||
$lang-select-active-bg: $examples-bg !default; // feel free to change this to blue or something
|
||||
$lang-select-pressed-bg: #111 !default; // color of language tab bg when mouse is pressed
|
||||
$main-bg: #eaf2f6 !default;
|
||||
$aside-notice-bg: #8fbcd4 !default;
|
||||
$aside-warning-bg: #c97a7e !default;
|
||||
$aside-success-bg: #6ac174 !default;
|
||||
$search-notice-bg: #c97a7e !default;
|
||||
|
||||
|
||||
// TEXT COLORS
|
||||
////////////////////
|
||||
$main-text: #111; // main content text color
|
||||
//$main-text: #333; // main content text color
|
||||
$nav-text: #fff;
|
||||
$nav-active-text: #fff;
|
||||
$lang-select-text: #fff; // color of unselected language tab text
|
||||
$lang-select-active-text: #fff; // color of selected language tab text
|
||||
$lang-select-pressed-text: #fff; // color of language tab text when mouse is pressed
|
||||
$main-text: #111 !default; // main content text color
|
||||
$nav-text: #fff !default;
|
||||
$nav-active-text: #fff !default;
|
||||
$lang-select-text: #fff !default; // color of unselected language tab text
|
||||
$lang-select-active-text: #fff !default; // color of selected language tab text
|
||||
$lang-select-pressed-text: #fff !default; // color of language tab text when mouse is pressed
|
||||
|
||||
|
||||
// SIZES
|
||||
////////////////////
|
||||
$nav-width: 230px; // width of the navbar
|
||||
$examples-width: 35%; // portion of the screen taken up by code examples
|
||||
//$examples-width: 50%; // portion of the screen taken up by code examples
|
||||
$logo-margin: 20px; // margin between nav items and logo, ignored if search is active
|
||||
$main-padding: 28px; // padding to left and right of content & examples
|
||||
$nav-padding: 15px; // padding to left and right of navbar
|
||||
$nav-v-padding: 10px; // padding used vertically around search boxes and results
|
||||
$nav-indent: 10px; // extra padding for ToC subitems
|
||||
$code-annotation-padding: 13px; // padding inside code annotations
|
||||
$h1-margin-bottom: 21px; // padding under the largest header tags
|
||||
$tablet-width: 930px; // min width before reverting to tablet size
|
||||
$phone-width: $tablet-width - $nav-width; // min width before reverting to mobile size
|
||||
$nav-width: 230px !default; // width of the navbar
|
||||
$examples-width: 35% !default; // portion of the screen taken up by code examples
|
||||
$logo-margin: 20px !default; // margin between nav items and logo, ignored if search is active
|
||||
$main-padding: 28px !default; // padding to left and right of content & examples
|
||||
$nav-padding: 15px !default; // padding to left and right of navbar
|
||||
$nav-v-padding: 10px !default; // padding used vertically around search boxes and results
|
||||
$nav-indent: 10px !default; // extra padding for ToC subitems
|
||||
$code-annotation-padding: 13px !default; // padding inside code annotations
|
||||
$h1-margin-bottom: 21px !default; // padding under the largest header tags
|
||||
$tablet-width: 930px !default; // min width before reverting to tablet size
|
||||
$phone-width: $tablet-width - $nav-width !default; // min width before reverting to mobile size
|
||||
|
||||
|
||||
// FONTS
|
||||
@@ -88,12 +86,12 @@ $phone-width: $tablet-width - $nav-width; // min width before reverting to mobil
|
||||
|
||||
// OTHER
|
||||
////////////////////
|
||||
$nav-active-shadow: #000;
|
||||
$nav-footer-border-color: #666;
|
||||
$nav-embossed-border-top: #000;
|
||||
$nav-embossed-border-bottom: #939393;
|
||||
$main-embossed-text-shadow: 0px 1px 0px #fff;
|
||||
$search-box-border-color: #666;
|
||||
$nav-active-shadow: #000 !default;
|
||||
$nav-footer-border-color: #666 !default;
|
||||
$nav-embossed-border-top: #000 !default;
|
||||
$nav-embossed-border-bottom: #939393 !default;
|
||||
$main-embossed-text-shadow: 0px 1px 0px #fff !default;
|
||||
$search-box-border-color: #666 !default;
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -110,7 +110,7 @@ html, body {
|
||||
}
|
||||
}
|
||||
|
||||
img+.tocify {
|
||||
img+.tocify, .lang-selector+.tocify {
|
||||
margin-top: $logo-margin;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user