]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/json/tst.usdt.d
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / cddl / contrib / opensolaris / cmd / dtrace / test / tst / common / json / tst.usdt.d
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
26 pid$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
33 bunyan*$1:::log-*
34 {
35         this->j = copyinstr(arg0);
36 }
37
38 bunyan*$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
49 bunyan*$1:::log-*
50 /json(this->j, "finished") != NULL/
51 {
52         printf("FINISHED!\n");
53         exit(0);
54 }
55
56 tick-10s
57 {
58         printf("ERROR: Timed out before finish message!\n");
59         exit(1);
60 }
61
62 ERROR
63 {
64         exit(1);
65 }