1/*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
6 *
7 * A full copy of the text of the CDDL should have accompanied this
8 * source.  A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
10 */
11
12/*
13 * Copyright (c) 2012, Joyent, Inc.  All rights reserved.
14 */
15
16#pragma D option strsize=4k
17#pragma D option quiet
18#pragma D option destructive
19
20/*
21 * This test reads a JSON string from a USDT probe, roughly simulating the
22 * primary motivating use case for the json() subroutine: filtering
23 * JSON-formatted log messages from a logging subsystem like node-bunyan.
24 */
25
26pid$1:a.out:waiting:entry
27{
28	this->value = (int *)alloca(sizeof (int));
29	*this->value = 1;
30	copyout(this->value, arg0, sizeof (int));
31}
32
33bunyan*$1:::log-*
34{
35	this->j = copyinstr(arg0);
36}
37
38bunyan*$1:::log-*
39/json(this->j, "finished") == NULL && json(this->j, "action") != "ignore"/
40{
41	this->index = strtoll(json(this->j, "index"));
42	this->size = json(this->j, "sizes[2]");
43	this->odd = json(this->j, "facts.odd");
44	this->even = json(this->j, "facts.even");
45	printf("[%d] sz %s odd %s even %s\n", this->index, this->size,
46	    this->odd, this->even);
47}
48
49bunyan*$1:::log-*
50/json(this->j, "finished") != NULL/
51{
52	printf("FINISHED!\n");
53	exit(0);
54}
55
56tick-10s
57{
58	printf("ERROR: Timed out before finish message!\n");
59	exit(1);
60}
61
62ERROR
63{
64	exit(1);
65}
66