jackgleeson / stats-collector
轻量级工具,用于记录、合并、检索和导出任何PHP进程中的统计数据和日志数据
v1.4.11
2021-08-18 19:09 UTC
Requires
- dflydev/dot-access-data: ^1.1
Requires (Dev)
- php-coveralls/php-coveralls: ^2.0
- phpunit/phpunit: ^6.4
- vimeo/psalm: ^3.2
README
记录、合并、检索和导出任何PHP进程生命周期中的自定义统计数据和日志数据。
一旦记录了一些统计数据,您可以使用传统的聚合函数(如平均值、计数和求和)从您的数据中创建新的统计数据。您可以将您的统计数据导出到您选择的输出中,例如文件、日志、数据库、队列或其他自定义格式。最后,您可以在任何前端中显示和查询导出的统计数据,例如Grafana。
功能
- 支持通配符名称扩展和正则表达式,例如
$stats->get("[a-z0-9]?.*");
- 从统计数据创建统计数据。在一个过程中获取您所需的数据,例如
$stats->add("overall_total", $stats->sum("separate.totals.*"));
- 在一般日志输出和统计日志输出之间明确分离责任,帮助您防止将统计数据污染应用程序日志。
待办事项
- 过滤行为。
$filteredStatsCollecter = $stats->filter($this->lessThan(50), $this->equalTo(50),...);
- 导入行为。允许统计收集器导入之前导出的数据,并从停止的地方继续。
- 为助手添加测试,并通过模拟协作者来改进测试
- 添加监听器行为,以便可以通过更新其他统计数据来更新统计数据,例如移动平均值
鸣谢
将Stats Collector添加到您的项目中
$ composer require jackgleeson/stats-collector
基本用法:记录、增加和检索一个统计数据
//get an instance of stats collector $stats = Statistics\Collector\Collector::getInstance(); //add a stat $stats->add("clicks", 45); //get a stat $clicks = $stats->get("clicks"); $clicks; // 45 //increment a stat $stats->inc("clicks"); $clicks = $stats->get("clicks"); $clicks; // 46
基本用法:自定义统计命名空间和通配符操作符的使用
$stats = Statistics\Collector\Collector::getInstance(); //add a custom namespace and add some stats to it $stats->ns("crons.payments") ->add("total", 30) ->add("succeeded", 20) ->add("failed", 10); // get payment cron stats using wildcard path $paymentStats = $stats->getWithKey("crons.payments.*"); // $paymentStats contents Array ( [crons.payments.failed] => 10 [crons.payments.succeeded] => 20 [crons.payments.total] => 30 )
基本用法:记录一个过程的执行时间
$stats = Statistics\Collector\Collector::getInstance(); $stats->start("timer"); // some lengthy process... $stats->end("timer"); // get the exectuion time $execution_time = $stats->diff('timer');
基本用法:将统计数据导出到文件
$stats = Statistics\Collector\Collector::getInstance(); //add a custom namespace and add some stats to it $stats->ns("crons.payments") ->add("total", 30) ->add("succeeded", 20) ->add("failed", 10); //export recorded stats to a txt file (see output below) $exporter = new Statistics\Exporter\File("demo","outdir/dir"); $exporter->export($stats);
基本用法:将统计数据导出到文件(输出)
$ cd output/dir
$ cat demo.stats
crons.payments.failed=10
crons.payments.succeeded=20
crons.payments.total=30
聚合用法:添加跨不同命名空间的一组统计数据并将它们求和
$stats = Statistics\Collector\Collector::getInstance(); $stats->ns("noahs.ark.passengers") ->add("humans", 2) ->add("aliens", 0) ->add("animal.cats", 3) ->add("animal.dogs", 6) ->add("animal.birds", 25); // total number of passengers on noahs ark $totalPassengers = $stats->sum("noahs.ark.passengers.*"); // 36 $totalAnimals = $stats->sum("*passengers.animal*"); // 34 $totalCatsAndDogs = $stats->sum("*passengers.animal.[c,d]*"); // 9
聚合用法:创建一个复合统计数据并计算其平均值
$stats = Statistics\Collector\Collector::getInstance(); $stats->ns("users") ->add("heights", 171) ->add("heights", [181, 222, 194, 143, 123, 161, 184]); $averageHeights = $stats->avg('heights'); //172.375