diff options
author | Rui Paulo <rpaulo@FreeBSD.org> | 2014-06-26 21:45:49 +0000 |
---|---|---|
committer | Rui Paulo <rpaulo@FreeBSD.org> | 2014-06-26 21:45:49 +0000 |
commit | b1f9167f94059fd55c630891d359bcff987bd7eb (patch) | |
tree | 4ddc8f5aee7a410915ef2557eb021621a9b82651 /cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/json/tst.usdt.d | |
parent | 8a7314fcb5347f8296a072e0c4f67a9f64303186 (diff) | |
parent | ff82455cb7d7889d4334155a9f832ed021b1ef80 (diff) | |
download | src-b1f9167f94059fd55c630891d359bcff987bd7eb.tar.gz src-b1f9167f94059fd55c630891d359bcff987bd7eb.zip |
MFV illumos
4477 DTrace should speak JSON
MFC after: 2 weeks
Notes
Notes:
svn path=/head/; revision=267937
Diffstat (limited to 'cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/json/tst.usdt.d')
-rw-r--r-- | cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/json/tst.usdt.d | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/json/tst.usdt.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/json/tst.usdt.d new file mode 100644 index 000000000000..f0fbdd5cabab --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/json/tst.usdt.d @@ -0,0 +1,65 @@ +/* + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + */ + +/* + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#pragma D option strsize=4k +#pragma D option quiet +#pragma D option destructive + +/* + * This test reads a JSON string from a USDT probe, roughly simulating the + * primary motivating use case for the json() subroutine: filtering + * JSON-formatted log messages from a logging subsystem like node-bunyan. + */ + +pid$1:a.out:waiting:entry +{ + this->value = (int *)alloca(sizeof (int)); + *this->value = 1; + copyout(this->value, arg0, sizeof (int)); +} + +bunyan*$1:::log-* +{ + this->j = copyinstr(arg0); +} + +bunyan*$1:::log-* +/json(this->j, "finished") == NULL && json(this->j, "action") != "ignore"/ +{ + this->index = strtoll(json(this->j, "index")); + this->size = json(this->j, "sizes[2]"); + this->odd = json(this->j, "facts.odd"); + this->even = json(this->j, "facts.even"); + printf("[%d] sz %s odd %s even %s\n", this->index, this->size, + this->odd, this->even); +} + +bunyan*$1:::log-* +/json(this->j, "finished") != NULL/ +{ + printf("FINISHED!\n"); + exit(0); +} + +tick-10s +{ + printf("ERROR: Timed out before finish message!\n"); + exit(1); +} + +ERROR +{ + exit(1); +} |