endclothing / prometheus_client_php

Prometheus instrumentation library for PHP applications
https://prometheus.io/docs/concepts/metric_types/
Apache License 2.0
150 stars 77 forks source link

Float locale issues #43

Open ns3777k opened 4 years ago

ns3777k commented 4 years ago

Prometheus can only deal with floats written with a dot (2.20 in en_EN for example). However if a project is set to use ru_RU, floats are written with a comma.

<?php

setlocale(LC_NUMERIC, 'en_EN');
printf("%f\n", 2.22); // prints 2.220000 which is correct

setlocale(LC_NUMERIC, 'ru_RU');
printf("%f\n", 2.22); // prints 2,220000 which is not correct

This can be fixed dropping the locale to C and returning it back after stringifying. Symfony guys fixed it in the VarDumper component here https://github.com/symfony/symfony/pull/23575/files .

Of course a project can drop locale when rendering the metrics, but IMO this should be handled by the library.

amfleurke commented 4 years ago

It's not only when rendering. The APC.php storage handler has a function histogramBucketValueKey that just converts the float to string for naming the buckets, which causes the bucket to not be updated if the float is rendered with comma.