This is a dogstatsd client written in C. It's used by the PHP tracer, and right now only implements the pieces needed for its metrics logging. If there is demand, it can be split into its own project.
Requirements:
- POSIX OS
- C99 compatible compiler and standard library.
Optional, but recommended:
- CMake 3.10 or newer.
The build has been tested on recent Mac OS and Linux operating systems.
This project intentionally uses a simple layout, with just client.c
and dogstatsd_client/client.h
. You can build,
compile, and install these however you want as long as you use a C99 compiler; they do not require any configuring.
Building with CMake does provide pkg-config and CMake project integration, though.
This project has CMake support, which will generate files for pkg-config
and cmake imported targets. It should use an
out of tree build, meaning don't build it from the directory that contains CMakeLists.txt.
Here are some common commands that will probably get it built and installed on your platform, where $prefix
is the
path CMake will install to and $srcdir
is the directory that contains this project's CMakeLists.txt
:
mkdir /tmp/build-dogstatsd_client
cd /tmp/build-dogstatsd_client
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX="$prefix" $srcdir
cmake --build . --config RelWithDebInfo
cmake --build . --target install
To build the dogstatsd_client tests, add -DBUILD_TESTING=ON
to the cmake flags and use the test
target.
If dogstatsd_client was installed via CMake then there is support for pkg-config
and CMake.
The header is named dogstatsd_client/client.h
. The API is described below.
The path $prefix/share/pkgconfig
will contain the dogstatsd_client.pc
file. If it is added to PKG_CONFIG_PATH
,
then commands like pkg-config --libs dogstatsd_client
should work.
As long as $prefix
is in the environment variable CMAKE_PREFIX_PATH
, e.g.
export CMAKE_PREFIX_PATH="$prefix:$CMAKE_PREFIX_PATH"
in bash, then find_package(dogstatsd_client)
should find it.
The target DogstatsdClient::DogstatsdClient
can then be linked. As an example, this will add the client to the
example
target:
find_package(dogstatsd_client REQUIRED)
target_link_libraries(example DogstatsdClient::DogstatsdClient)
Create a client with dogstatsd_client_ctor
. Note that the const_tags
parameter will be attached to all metrics
automatically. This example uses localhost and the default port.
char buf[DOGSTATSD_CLIENT_RECOMMENDED_MAX_MESSAGE_SIZE];
size_t len = DOGSTATSD_CLIENT_RECOMMENDED_MAX_MESSAGE_SIZE;
int error;
struct addrinfo *addrs = NULL;
if ((error = dogstatsd_client_getaddrinfo(&addrs, "localhost", "8125"))) {
fprintf(
stderr,
"Failed looking up localhost:8125: %s\n",
(error == EAI_SYSTEM) ? strerror(errno) : gai_strerror(error)
);
} else {
/* the client will always be usable, but if
* dogstatsd_client_is_default_client(client) is true then it will always
* return E_NO_CLIENT instead of performing the operation.
*
* Note that the client will take responsibility for calling freeaddrinfo.
*/
dogstatsd_client client = dogstatsd_client_ctor(addrs, buf, len, "lang:php");
// do client operations, then
dogstatsd_client_dtor(&client);
}
To increment a metric with the default sampling rate of 1.0, use dogstatsd_client_count
. This example increments the
metric datadog.tracer.uncaught_exceptions
by 1, using the tag class:sigsegv
:
dogstatsd_client_count(&client, "datadog.tracer.uncaught_exceptions", "1", "class:sigsegv");
The tags parameter can be NULL or an empty string if you do not need to set any tags specific to this metric.
Use the dogstatsd_client_dtor
function to clean up the client and the addrinfo. It will not free the buffer or
constant tags. The dtor should always be called on the client.
dogstatsd_client_dtor(&client);