poc: InfluxDB line protocol to OpenTSDB JSON protocol
#!/bin/bash -eu
# [key] [fields] [timestamp]
# temperature,machine=unit143,type=assembly internal=22,external=130 1434055562005000035
split() { tr "$2" "\n" <<< $1; }
get() { cut -d '=' -f$2 <<< $1; }
point() {
local timestamp=$1
local metric=$2
local value=$3
local tags=$4
echo '{"metric":"'$metric'","timestamp":'$timestamp',"value":'$value',"tags":'$tags'}'
}
get_prefix() {
local key=$1
for t in $(split "$key" ","); do
echo $t; break
done
}
parse_tags() {
local key=$1
local count=0
local c=''
echo '{'
for t in $(split "$key" ","); do
if [[ $count -eq 0 ]]; then
PREFIX=$t
else
echo $c'"'$(get $t 1)'":"'$(get $t 2)'"'; c=,
fi
count=$(($count + 1))
done
echo '}'
}
main() {
local key=$1
local fields=${2:-""}
local timestamp=${3:-$(date +%s%N)}
[ -z $key ] && echo '{"error": "key required"}' && exit 1
[ -z $fields ] && echo '{"error": "fields required"}' && exit 1
local prefix=$(get_prefix $key)
local tags=$(parse_tags $key | jq -c .)
for f in $(split "$fields" ","); do
point $timestamp $prefix.$(get $f 1) $(get $f 2) $tags
done
}
main $(cat /dev/stdin) | jq -s .