krkr
11/27/2015 - 7:46 AM

poc: InfluxDB line protocol to OpenTSDB JSON protocol

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 .