jackgleeson/stats-collector

轻量级工具,用于记录、合并、检索和导出任何PHP进程中的统计数据和日志数据

v1.4.11 2021-08-18 19:09 UTC

README

GitHub tag Build Status Coverage Status

记录、合并、检索和导出任何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

查看samples/shorthand-samples.php以获取可用功能的完整列表。