73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
package gjson
|
|
|
|
import (
|
|
"log"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestParseJsonPath(t *testing.T) {
|
|
testString := `{
|
|
"total_devices": 5,
|
|
"total_threads": 10,
|
|
"shares": {
|
|
"total": 5,
|
|
"accepted": 5,
|
|
"rejected": 0,
|
|
"avg_find_time": 4,
|
|
"tester": "work",
|
|
"tester2": true,
|
|
"tester3": {
|
|
"hello":"sup",
|
|
"fun":"money",
|
|
"break":9
|
|
}
|
|
}
|
|
}`
|
|
|
|
jsonParser := JSONPath{
|
|
MetricName: "jsonpather",
|
|
TagPath: map[string]string{"hello": "shares.tester3.hello"},
|
|
BoolPath: map[string]string{"bool": "shares.tester2"},
|
|
}
|
|
|
|
metrics, err := jsonParser.Parse([]byte(testString))
|
|
assert.NoError(t, err)
|
|
log.Printf("m[0] name: %v, tags: %v, fields: %v", metrics[0].Name(), metrics[0].Tags(), metrics[0].Fields())
|
|
|
|
}
|
|
|
|
func TestTagTypes(t *testing.T) {
|
|
testString := `{
|
|
"total_devices": 5,
|
|
"total_threads": 10,
|
|
"shares": {
|
|
"total": 5,
|
|
"accepted": 5,
|
|
"rejected": 0,
|
|
"my_bool": true,
|
|
"tester": "work",
|
|
"tester2": {
|
|
"hello":"sup",
|
|
"fun":true,
|
|
"break":9.97
|
|
}
|
|
}
|
|
}`
|
|
|
|
r := JSONPath{
|
|
TagPath: map[string]string{"int1": "total_devices", "my_bool": "shares.my_bool"},
|
|
FloatPath: map[string]string{"total": "shares.total"},
|
|
BoolPath: map[string]string{"fun": "shares.tester2.fun"},
|
|
StrPath: map[string]string{"hello": "shares.tester2.hello"},
|
|
IntPath: map[string]string{"accepted": "shares.accepted"},
|
|
}
|
|
|
|
metrics, err := r.Parse([]byte(testString))
|
|
log.Printf("m[0] name: %v, tags: %v, fields: %v", metrics[0].Name(), metrics[0].Tags(), metrics[0].Fields())
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, true, reflect.DeepEqual(map[string]interface{}{"total": 5.0, "fun": true, "hello": "sup", "accepted": int64(5)}, metrics[0].Fields()))
|
|
}
|