Command Line Interface

The command line interface (CLI) can be used to interact with the local Joule service or any Joule node on the network. Arguments can often be supplied in both short and long forms, and many are optional. The documentation uses the following conventions:

  • An argument that takes an additional parameter is denoted -f FILE.

  • The syntax -f FILE, --file FILE indicates that either the short form (-f) or long form (--file) can be used interchangeably.

  • Square brackets ([]) denote optional arguments.

  • Pipes (A|B) indicate that either A or B can be specified, but not both.

  • Curly braces ({}) indicate a list of mutually-exclusive argument choices.

Usage

joule ~ [--help] [--node|-n] [--version] {subcommand} ...

Arguments

--node Node: Specify a different node than the default (see ''node list'' for available nodes) --help: Print a help message with usage information on all supported command-line arguments. This can also be specified after the subcommand in which case the usage and arguments of the subcommand are shown instead --version: print the joule CLI version subcommand: The subcommand followed by its arguments. This is required

node

info

show information about the selected node

Usage

joule node info ~ [--help]

Arguments

none

Example

$> joule node info --connecting to [XXXX]-- Server Version: 0.10.XX Database Location: /var/lib/postgresql/13/main Database Size: 2GiB Space Available: 20GiB

list

add

delete

default

module

list

list all active modules and pipe connections.

Usage

joule module list ~ [--help]

Arguments

none

Example

$> joule module list ╒════════════╤══════════╤═════════════════╤═════════╤═════════════╕ │ Name │ Inputs │ Outputs │ CPU % │ Mem (KiB) │ ╞════════════╪══════════╪═════════════════╪═════════╪═════════════╡ │ Visualizer │ │ /random/output2 │ 0 │ 59880 │ ├────────────┼──────────┼─────────────────┼─────────┼─────────────┤ │ Producer1 │ │ /random/10hertz │ 0 │ 62644 │ ├────────────┼──────────┼─────────────────┼─────────┼─────────────┤ │ Producer2 │ │ /demo/stream1 │ 0 │ 8028 │ ╘════════════╧══════════╧═════════════════╧═════════╧═════════════╛

info

information about the specified module

Usage

joule module info ~ [--help] NAME

Arguments

NAME: module name (from configuration file)

Example
$> joule module info Visualizer Name: Visualizer Description: visualizes data Inputs: --none-- Outputs: output: /random/output2

logs

print module logs

Usage

joule module logs ~ [--help] NAME

Arguments

NAME: module name (from configuration file)

Example

$> joule module logs Visualizer [2018-09-11T20:45:58.799616]: ---starting module--- [2018-09-11T20:45:59.736744]: starting web server at [wattsworth.joule.0]

stream

list

show the contents of the stream database

Usage

joule stream list ~ [-l] [-s] [--help]

Arguments

-l, --layout: include stream layout -s, --status: include stream status

Example
$> joule stream list ├── demo │ ├── f1 │ │ └── stream0(1) │ ├── copied2(6) │ ├── copy one(5) │ └── stream1(4) └── random ├── 10hertz(3) ├── output(2) └── output2(7)

info

Display information about the specified stream

Usage

joule stream info ~ [--help] PATH

Arguments

PATH: stream path

Example
$> joule stream info /random/10hertz Name: 10hertz Description: — Datatype: float32 Keep: all data Decimate: yes Status: ● [active] Start: 2018-07-25 20:35:49.427396 End: 2018-09-11 22:11:39.839133 Rows: 216040 ╒════════╤═════════╤════════════╤═══════════╕ │ Name │ Units │ Display │ Min,Max │ ╞════════╪═════════╪════════════╪═══════════╡ │ x │ — │ continuous │ auto │ ├────────┼─────────┼────────────┼───────────┤ │ y │ — │ continuous │ auto │ ├────────┼─────────┼────────────┼───────────┤ │ z │ — │ continuous │ auto │ ╘════════╧═════════╧════════════╧═══════════╛

destroy

Completely remove the stream at the specified path

Usage

joule stream destroy ~ PATH

Arguments

PATH: path of stream to destroy

move

Move a stream into a new folder.

Usage

joule stream move ~ PATH DESTINATION

Arguments

PATH: path of stream to move DESTINATION: path of destination folder

Notes

The folder will be created if it does not exist. A stream cannot be moved into a folder which has a stream with the same name

folder

move

move a folder into a new parent folder.

Usage

joule folder move ~ PATH DESTINATION

Arguments

PATH: path of folder to move DESTINATION: path of new parent folder

Note:

The parent folder will be created if it does not exist. A folder cannot be moved into a parent folder which has a folder with the same name

remove

remove a folder

Usage

joule folder remove ~ [-r] PATH

Arguments

-r, --recursive: remove subfolders PATH: path of folder to remove

Notes

If the folder has subfolders, add -r to recursively remove them. The folder and its subfolders may not have any streams, if they do more or remove them first.

data

copy

copy data between streams

Usage

joule data copy ~ [-s] [-e] [-n] [-d] [--source-url] SOURCE DESTINATION

Arguments

-s, --start: timestamp or descriptive string, if omitted start copying at the beginning of SOURCE -e, --end: timestamp or descriptive string, if omitted copy to the end of SOURCE -n, --new: copy starts at the last timestamp of the destination -d: destination node name or Nilmdb URL if different than source --source-url: copy from a Nilmdb URL (specify a Joule node with top level -n flag)

read

extract data from a stream

Usage

joule data read ~ [-s] [-e] [-r|-d] [-b] [-m] [-i] [-f] PATH

Arguments

-s, --start: timestamp or descriptive string, if omitted start reading at the beginning -e, --end: timestamp or descriptive string, if omitted read to the end -r: limit the response to a maximum number of rows (this will produce a decimated result) -d: specify a particular decimation level, may not be used with -r, default is 1 -b: include min/max limits for each row of decimated data -m: include [# interval break] tags in the output to indicate broken data intervals -f, --file: filename to write data to rather than stdout (written in hdf5 format) -i: indices of elements to read, separate multiple elements with , The first element is index 0

PATH: path of stream to read

Example

# write the last hour of data from /demo/random into data.txt $> joule data read /demo/random --start="1 hour ago" > data.txt $> head data.txt 1538744825370107 0.383491 0.434531 1538744825470107 0.317079 0.054972 1538744825570107 0.572721 0.875278 1538744825670107 0.350911 0.680056 1538744825770107 0.839264 0.189361 1538744825870107 0.259714 0.394411 1538744825970107 0.027148 0.963998 1538744826070107 0.828187 0.704508 1538744826170107 0.738999 0.082351 1538744826270107 0.828530 0.916019

remove

remove data from a stream

Usage

joule data remove ~ [--from] [--to] STREAM

Arguments

-s, --start: timestamp or descriptive string, if omitted start reading at the beginning of SOURCE -e, --end: timestamp or descriptive string, if omitted read to the end of SOURCE

consolidate

merge data intervals with short gaps

Usage

joule data consolidate ~ [-s] [-e] [--max-gap] STREAM

Arguments

-s, --start: timestamp or descriptive string, if omitted start at the beginning of STREAM -e, --end: timestamp or descriptive string, if omitted run to the end of STREAM -m, --max-gap: remove intervals shorter than this (in us). Default is 2 seconds

admin

The following commands require super user (sudo) permission and only operate on the local node. They should only be run when the joule service (jouled) is stopped.

initialize

prepare a system to run the joule service (jouled)

Usage

joule admin initialize ~ --dsn DSN_STRING

Arguments

--dsn: connection string to PostgreSQL database

authorize

authorize the current user access to the local node

Usage

joule admin authorize ~ [-c]

Arguments

-c, --config: configuration file default is /etc/joule/main.conf

erase

remove all data from the node

Usage

joule admin erase ~ [-c] [-l] [--yes]

Arguments

-c, --config: configuration file default is /etc/joule/main.conf -l, --links: remove master/follower relationships, default removes only data --yes: force, do not prompt for confirmation

backup

archive all node data into a single file

Usage

joule admin backup ~ [-c] [-f]

Arguments

-c, --config: configuration file default is /etc/joule/main.conf -f, --file: backup file name default is joule_backup.tar

ingest

bulk copy data into the local node

Usage

joule admin ingest ~ [-c] [-f] [-d|-f] [-m] [-y] [-s] [-e]

Arguments

-c, --config: configuration file default is /etc/joule/main.conf -f, --file: copy data from backup file, default is joule_backup.tar -d, --dsn: live copy data from another node, may not be specified with -f -m, --map: map file relating source streams to destination streams -y, --yes: force, do not prompt for confirmation -s, --start: timestamp or descriptive string, if omitted copy from start of source -e, --end: timestamp or descriptive string, if omitted copy to the end of source