/*
* 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);
}