datanow
v2.0.1
Published
DataNow.io's command line tool and node SDK.
Downloads
7
Maintainers
Readme
DataNow.io CLI & SDK
DataNow.io is a simple service you can send generic data, read it back or graph it in a nice app. This is a simple command line tool and node.js SDK for interfacing with it.
Examples
Setup
Install
Open a command line and run the following command to install. Requires node.js to be installed.
[sudo] npm install -g datanow
Register
Register using the command below substituting in your username and email.
datanow register --username your-username --email [email protected]
# Enter your password
You will need to click the verification link that was sent to your email before proceeding.
Now you can login.
datanow login --username your-username --email [email protected]
An authorization token has been generated and placed in ~/.datanow-config.json
so DataNow will remember you.
Simple Example
First create an app and a board to post your data to.
datanow create your-username/test-board
Now post some numbers to it.
datanow write 1
datanow write 2
datanow write 3
Let's get those numbers back.
datanow read
# Prints
# 2015-01-29T10:01:06.382Z, 1
# 2015-01-29T10:01:07.194Z, 2
# 2015-01-29T10:01:09.542Z, 3
You like that? Good. I was hoping you would.
Specifying Date
Notice how in the above example you got a date back? That is because the default schema is [ date, number ]
and if you don't supply date its is auto filled.
Let's try specifying our own date in the ISO 8601 format.
datanow write 2014-12-28T13:27:48.000Z 4
# reads out as 2014-12-28T13:27:48.000Z, 4
datanow write 2014-12-29 5
# reads out as 2014-12-29T00:00:00.000Z, 5
Custom Schemas
You can specify your own schema when you create a board. Valid data types are date
, number
and string
. Here are some examples.
String only
datanow create your-username/messages string
datanow write hello
datanow write world
datanow write 'goodbye world'
datanow read
# Prints
# hello
# world
# goodbye world
Date, Number and String
datanow create your-username/weights date number string
datanow set --board your-username/weights
datanow write `date -u +"%Y-%m-%dT%H:%M:%SZ"` 130 Homer
datanow write `date -u +"%Y-%m-%dT%H:%M:%SZ"` 45 Bart
datanow read
# Prints
# 2015-02-02T14:12:45.000Z, 130, Homer
# 2015-02-02T14:12:51.000Z, 45, Bart
Numbers only
datanow create your-username/temperature number
datanow write -- -3
for i in {-3..5}
do
datanow write -- $i
done
datanow write 5
datanow read
# Prints
# -3
# -3
# -2
# -1
# 0
# 1
# 2
# 3
# 4
# 5
# 5
datanow read --board your-username/weights
# Prints
# 2015-03-13T07:49:09.000Z, 130, Homer
# 2015-03-13T07:49:09.000Z, 45, Bart
Note in this example that it uses the --
. That is a standard with command line tools for handling negative numbers as it marks end of options.
Formatting Output
The default output option is CSV but there are a few more.
CSV Format
CSV (comma separated values) looks nice and you can use with LibreOffice's Calc Spreadsheet program or others similar programs. Just pipe the output to a file.
datanow read --format csv > output.csv
# Try opening with the default program.
open output.csv
Specify the line delimiter and the column delimiter with --lineDelimiter
and --delimiter
. Very handy for piping to other tools like GNUPlot.
datanow read --format csv --lineDelimiter ', '
# Prints
# -3, -3, -2, -1, 0, 1, 2, 3, 4, 5, 5,
datanow read --board your-username/weights --delimiter $'\t'
# Prints
# 2015-03-13T07:49:09.000Z 130 Homer
# 2015-03-13T07:49:09.000Z 45 Bart
JSON Format
datanow read --board your-username/weights --format json
# Prints
# [
# [
# "2015-02-02T14:12:45.000Z",
# 130,
# "Homer"
# ],
# [
# "2015-02-02T14:12:51.000Z",
# 45,
# "Bart"
# ]
# ]
JS Format
This is very similar to JSON format but it prints the javascript object in shorthand which is not valid JSON.
datanow read --board your-username/weights --format js
# Prints
# [ [ '2015-02-02T14:12:45.000Z', 130, 'Homer' ],
# [ '2015-02-02T14:12:51.000Z', 45, 'Bart' ] ]
ASCII Plot Output
You can even plot some cool graphs in the command line with the plot format.
datanow read --board your-username/temperature --format plot --height 10 --width 80
# Prints
# ▲
# │ • •
# │
# │ •
# │
# │ •
# │
# │ •
# │
# │ •
# │
# ┼───────•────────────▶
# │
# │ •
# │
# │ •
# │
# • •
#
# Max=5 Min=-3 Mean=1 Last=5
If you exclude the --height
& --width
, it will default to the size of your terminal window. Very useful when streaming large datasets.
Collaborators
You can add collaborators to your boards which get administrative privileges.
Let's create a friend and test it out.
datanow register --username friends-name --email [email protected]
Note friends-name
will have to click their email confirmation link before proceeding.
datanow collaborators your-username/temperature --add friends-name
datanow logout
datanow login --username friends-name --email [email protected]
datanow write --board your-username/temperature 7
See how friends-name
has permissions to write to your temperature board? That's nice of you.
datanow collaborators your-username/temperature --remove your-username
Hey! friends-name
just removed you as a collaborators from your board. That is not very friendly but could be a completely legitimate use case.
Streaming Reads
DataNow has the ability to stream data in real time using the --stream
flag. Try it by opening up 2 terminal windows and running this in one
datanow read --board your-username/temperature --format plot --height 10 --width 80 --stream
and this in the other
for i in {5..-3}; do datanow write -- $i; done
You should see the plot updating in realtime.
Paging, Limits & Ordering
If you only want to get the first few data points, you can impose a limit when reading using the --limit
flag.
datanow create your-username/counting number
for i in {0..10}; do datanow write -- $i; done
datanow read --limit 3
# Prints
# 0
# 1
# 2
We call this a page of data. This is most useful when dealing with large datasets. The largest and default limit you can set is 50.
To get the next page, use the --page
flag.
datanow read --limit 3 --page 2
# Prints
# 3
# 4
# 5
To get the latest data instead of the oldest, use the --reverse
flag.
datanow read --limit 3 --page 1 --reverse
# Prints
# 10
# 9
# 8
The --reverse
flag can be very useful. If you prefer it as the default, use the set
command.
datanow set --reverse true
#or
datanow set --reverse false