Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 40 additions & 16 deletions src/DogStatsd.php
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,32 @@ private function resetTelemetry()
$this->packets_sent = 0;
$this->packets_dropped = 0;
}

/**
* Gets the origin detection fields to be appended to each metric.
*
* @param string|null $cardinality override cardinality to set.
* @returns string
*/
private function getFields($cardinality)
{
$cardinalityToUse = $this->validateCardinality($cardinality ?: $this->cardinality);

$additionalFields = "";
if ($this->externalData) {
$additionalFields .= "|e:{$this->externalData}";
}
if ($cardinalityToUse) {
$additionalFields .= "|card:{$cardinalityToUse}";
}
if ($this->containerID) {
$additionalFields .= "|c:{$this->containerID}";
}

return $additionalFields;
}


/**
* Reset the telemetry value to zero
*/
Expand All @@ -256,13 +282,17 @@ private function flushTelemetry()
return "";
}

return "\ndatadog.dogstatsd.client.metrics:{$this->metrics_sent}|c{$this->telemetry_tags}"
. "\ndatadog.dogstatsd.client.events:{$this->events_sent}|c{$this->telemetry_tags}"
. "\ndatadog.dogstatsd.client.service_checks:{$this->service_checks_sent}|c{$this->telemetry_tags}"
. "\ndatadog.dogstatsd.client.bytes_sent:{$this->bytes_sent}|c{$this->telemetry_tags}"
. "\ndatadog.dogstatsd.client.bytes_dropped:{$this->bytes_dropped}|c{$this->telemetry_tags}"
. "\ndatadog.dogstatsd.client.packets_sent:{$this->packets_sent}|c{$this->telemetry_tags}"
. "\ndatadog.dogstatsd.client.packets_dropped:{$this->packets_dropped}|c{$this->telemetry_tags}";
$additionalFields = $this->getFields(null);

// phpcs:disable
return "\ndatadog.dogstatsd.client.metrics:{$this->metrics_sent}|c{$this->telemetry_tags}{$additionalFields}"
. "\ndatadog.dogstatsd.client.events:{$this->events_sent}|c{$this->telemetry_tags}{$additionalFields}"
. "\ndatadog.dogstatsd.client.service_checks:{$this->service_checks_sent}|c{$this->telemetry_tags}{$additionalFields}"
. "\ndatadog.dogstatsd.client.bytes_sent:{$this->bytes_sent}|c{$this->telemetry_tags}{$additionalFields}"
. "\ndatadog.dogstatsd.client.bytes_dropped:{$this->bytes_dropped}|c{$this->telemetry_tags}{$additionalFields}"
. "\ndatadog.dogstatsd.client.packets_sent:{$this->packets_sent}|c{$this->telemetry_tags}{$additionalFields}"
. "\ndatadog.dogstatsd.client.packets_dropped:{$this->packets_dropped}|c{$this->telemetry_tags}{$additionalFields}";
// phpcs:enable
}

/**
Expand Down Expand Up @@ -506,18 +536,12 @@ public function send($data, $sampleRate = 1.0, $tags = null, $cardinality = null
return;
}

$cardinalityToUse = $this->validateCardinality($cardinality ?: $this->cardinality);
$fields = $this->getFields($cardinality);

foreach ($sampledData as $stat => $value) {
$value .= $this->serializeTags($tags);
if ($this->externalData) {
$value .= "|e:{$this->externalData}";
}
if ($cardinalityToUse) {
$value .= "|card:{$cardinalityToUse}";
}
if ($this->containerID) {
$value .= "|c:{$this->containerID}";
if ($fields) {
$value .= $fields;
}
$this->report("{$this->metricPrefix}$stat:$value");
}
Expand Down
61 changes: 48 additions & 13 deletions tests/UnitTests/DogStatsd/SocketsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,9 @@ public function assertSameWithTelemetry($expected, $actual, $message="", $params
$packets_sent = $this->get_default($params["packets_sent"], 0);
$packets_dropped = $this->get_default($params["packets_dropped"], 0);
$transport_type = $this->get_default($params["transport"], "udp");
$external_env = $this->get_default($params["external_env"], null);
$container_id = $this->get_default($params["container_id"], null);
$cardinality = $this->get_default($params["cardinality"], null);

$version = DogStatsd::$version;
$tags = "client:php,client_version:{$version},client_transport:{$transport_type}";
Expand All @@ -150,13 +153,24 @@ public function assertSameWithTelemetry($expected, $actual, $message="", $params
$tags = $extra_tags.",".$tags;
}

$telemetry = "\ndatadog.dogstatsd.client.metrics:{$metrics_sent}|c|#{$tags}"
. "\ndatadog.dogstatsd.client.events:{$events_sent}|c|#{$tags}"
. "\ndatadog.dogstatsd.client.service_checks:{$service_checks_sent}|c|#{$tags}"
. "\ndatadog.dogstatsd.client.bytes_sent:{$bytes_sent}|c|#{$tags}"
. "\ndatadog.dogstatsd.client.bytes_dropped:{$bytes_dropped}|c|#{$tags}"
. "\ndatadog.dogstatsd.client.packets_sent:{$packets_sent}|c|#{$tags}"
. "\ndatadog.dogstatsd.client.packets_dropped:{$packets_dropped}|c|#{$tags}";
$additionalFields = "";
if ($external_env) {
$additionalFields .= "|e:{$external_env}";
}
if ($cardinality) {
$additionalFields .= "|card:{$cardinality}";
}
if ($container_id) {
$additionalFields .= "|c:{$container_id}";
}

$telemetry = "\ndatadog.dogstatsd.client.metrics:{$metrics_sent}|c|#{$tags}{$additionalFields}"
. "\ndatadog.dogstatsd.client.events:{$events_sent}|c|#{$tags}{$additionalFields}"
. "\ndatadog.dogstatsd.client.service_checks:{$service_checks_sent}|c|#{$tags}{$additionalFields}"
. "\ndatadog.dogstatsd.client.bytes_sent:{$bytes_sent}|c|#{$tags}{$additionalFields}"
. "\ndatadog.dogstatsd.client.bytes_dropped:{$bytes_dropped}|c|#{$tags}{$additionalFields}"
. "\ndatadog.dogstatsd.client.packets_sent:{$packets_sent}|c|#{$tags}{$additionalFields}"
. "\ndatadog.dogstatsd.client.packets_dropped:{$packets_dropped}|c|#{$tags}{$additionalFields}";

$this->assertSame(
$expected.$telemetry,
Expand Down Expand Up @@ -1570,7 +1584,11 @@ public function testExternalEnv()
$this->assertSameWithTelemetry(
$expectedUdpMessage,
$argsPassedToSocketSendTo[1],
""
"",
array(
"external_env" => "cn-SomeKindOfContainerName",
"container_id" => "container"
)
);
}

Expand All @@ -1595,7 +1613,11 @@ public function testExternalEnvInvalidCharacters()
$this->assertSameWithTelemetry(
$expectedUdpMessage,
$argsPassedToSocketSendTo[1],
""
"",
array(
"external_env" => "it-false,cn-nginx-webserver,pu-75a2b6d5-3949-4afb-ad0d-92ff0674e759",
"container_id" => "container"
)
);
}

Expand All @@ -1618,7 +1640,11 @@ public function testExternalEnvWithTags()
$this->assertSameWithTelemetry(
$expectedUdpMessage,
$argsPassedToSocketSendTo[1],
""
"",
array(
"external_env" => "it-false,cn-nginx-webserver,pu-75a2b6d5-3949-4afb-ad0d-92ff0674e759",
"container_id" => "container"
)
);
}

Expand Down Expand Up @@ -1663,7 +1689,10 @@ public function testExternalEnvDisabledOriginDetectionContainerID()
$this->assertSameWithTelemetry(
$expectedUdpMessage,
$argsPassedToSocketSendTo[1],
""
"",
array(
"container_id" => "container"
)
);
}

Expand Down Expand Up @@ -1736,7 +1765,10 @@ public function testGlobalCardinality()
$this->assertSameWithTelemetry(
$expectedUdpMessage,
$argsPassedToSocketSendTo[1],
""
"",
array(
"cardinality" => "orchestrator"
)
);
}

Expand All @@ -1758,7 +1790,10 @@ public function testEnvVarCardinality()
$this->assertSameWithTelemetry(
$expectedUdpMessage,
$argsPassedToSocketSendTo[1],
""
"",
array(
"cardinality" => "high"
)
);
}

Expand Down
Loading