From 6d955f96fcdab290b7267b5ca5b20da63a9c846a Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Thu, 3 Sep 2026 13:46:59 +0530 Subject: [PATCH 1/2] feat(metric): add request attributes and premium geo fields to Metric class --- src/Usage/Metric.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/Usage/Metric.php b/src/Usage/Metric.php index 6c1eff9..b0e14dd 100644 --- a/src/Usage/Metric.php +++ b/src/Usage/Metric.php @@ -54,8 +54,11 @@ class Metric extends ArrayObject 'service', 'resourceType', 'resourceId', 'resourceInternalId', 'teamId', 'teamInternalId', 'country', 'region', 'hostname', 'ip', + // request attributes (firewall rule matching) + 'protocol', 'accept', 'acceptLanguage', 'cookie', 'queryKeys', // premium geo 'city', 'continentCode', 'subdivisions', + 'postalCode', 'latitude', 'longitude', 'timeZone', 'weatherCode', 'isp', 'autonomousSystemNumber', 'autonomousSystemOrganization', 'connectionType', 'connectionUsageType', 'connectionOrganization', 'osCode', 'osName', 'osVersion', @@ -88,7 +91,9 @@ class Metric extends ArrayObject * - resourceType / resourceId / resourceInternalId: resource identity * - teamId / teamInternalId: owning team identity * - country / region / hostname / ip: geographic + caller origin + * - protocol / accept / acceptLanguage / cookie / queryKeys: request attributes (firewall rule matching) * - city / continentCode / subdivisions: premium geo location fields + * - postalCode / latitude / longitude / timeZone / weatherCode: premium geo location fields * - isp / autonomousSystemNumber / autonomousSystemOrganization: premium network origin * - connectionType / connectionUsageType / connectionOrganization: premium connection intelligence * - osCode / osName / osVersion: parsed user-agent OS fields @@ -648,10 +653,21 @@ public static function getEventSchema(): array $stringColumn('region', 64), $stringColumn('hostname', 255), $stringColumn('ip', 45), + // request attributes (firewall rule matching) + $stringColumn('protocol', 16), + $stringColumn('accept', 1024), + $stringColumn('acceptLanguage', 256), + $stringColumn('cookie', 8192), + $stringColumn('queryKeys', 1024), // premium geo $stringColumn('city', 256), $stringColumn('continentCode', 2), $stringColumn('subdivisions', 256), + $stringColumn('postalCode', 32), + $stringColumn('latitude', 32), + $stringColumn('longitude', 32), + $stringColumn('timeZone', 64), + $stringColumn('weatherCode', 16), $stringColumn('isp', 256), $stringColumn('autonomousSystemNumber', 255), $stringColumn('autonomousSystemOrganization', 256), From b9031210f4070f55b36ecfcc626aeaa890714cbf Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Thu, 3 Sep 2026 14:12:08 +0530 Subject: [PATCH 2/2] feat(metric): increase cookie column size to accommodate larger headers --- src/Usage/Metric.php | 5 ++++- tests/Usage/MetricTest.php | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Usage/Metric.php b/src/Usage/Metric.php index b0e14dd..e1a1518 100644 --- a/src/Usage/Metric.php +++ b/src/Usage/Metric.php @@ -657,7 +657,10 @@ public static function getEventSchema(): array $stringColumn('protocol', 16), $stringColumn('accept', 1024), $stringColumn('acceptLanguage', 256), - $stringColumn('cookie', 8192), + // Cookie headers are large; size > maxVarchar (16381) makes this a + // TEXT column, stored off-page so it costs ~20 bytes toward the + // MariaDB 65535 row-size limit instead of size*4. + $stringColumn('cookie', 65535), $stringColumn('queryKeys', 1024), // premium geo $stringColumn('city', 256), diff --git a/tests/Usage/MetricTest.php b/tests/Usage/MetricTest.php index fa7e3e6..d3d230b 100644 --- a/tests/Usage/MetricTest.php +++ b/tests/Usage/MetricTest.php @@ -14,7 +14,7 @@ public function testGetEventSchemaReturnsAttributeDefinitions(): void { $schema = Metric::getEventSchema(); - // 3 core (metric, value, time) + 24 dimension columns from EVENT_COLUMNS. + // 3 core (metric, value, time) + one column per EVENT_COLUMNS entry. $this->assertCount(3 + count(Metric::EVENT_COLUMNS), $schema); $metricAttr = $schema[0]; @@ -609,7 +609,9 @@ public function testEventColumnsConstant(): void 'service', 'resourceType', 'resourceId', 'resourceInternalId', 'teamId', 'teamInternalId', 'country', 'region', 'hostname', 'ip', + 'protocol', 'accept', 'acceptLanguage', 'cookie', 'queryKeys', 'city', 'continentCode', 'subdivisions', + 'postalCode', 'latitude', 'longitude', 'timeZone', 'weatherCode', 'isp', 'autonomousSystemNumber', 'autonomousSystemOrganization', 'connectionType', 'connectionUsageType', 'connectionOrganization', 'osCode', 'osName', 'osVersion',