1
|
|
|
<?php |
2
|
|
|
|
|
|
|
|
3
|
|
|
namespace Hhxsv5\LaravelS\Components\Prometheus; |
4
|
|
|
|
5
|
|
|
use Hhxsv5\LaravelS\Components\Prometheus\Collectors\SwooleProcessCollector; |
6
|
|
|
use Hhxsv5\LaravelS\Components\Prometheus\Collectors\SwooleStatsCollector; |
7
|
|
|
use Hhxsv5\LaravelS\Components\Prometheus\Collectors\SystemCollector; |
8
|
|
|
use Hhxsv5\LaravelS\Swoole\Process\CustomProcessInterface; |
9
|
|
|
use Swoole\Http\Server; |
10
|
|
|
use Swoole\Process; |
11
|
|
|
use Swoole\Timer; |
12
|
|
|
|
13
|
|
|
class CollectorProcess implements CustomProcessInterface |
|
|
|
|
14
|
|
|
{ |
15
|
|
|
private static $timerId; |
|
|
|
|
16
|
|
|
|
17
|
|
|
public static function callback(Server $swoole, Process $process) |
|
|
|
|
18
|
|
|
{ |
19
|
|
|
/**@var SwooleProcessCollector $processCollector */ |
|
|
|
|
20
|
|
|
$processCollector = app(SwooleProcessCollector::class); |
|
|
|
|
21
|
|
|
/**@var SwooleStatsCollector $swooleStatsCollector */ |
|
|
|
|
22
|
|
|
$swooleStatsCollector = app(SwooleStatsCollector::class); |
23
|
|
|
/**@var SystemCollector $systemCollector */ |
|
|
|
|
24
|
|
|
$systemCollector = app(SystemCollector::class); |
25
|
|
|
$workerNum = $swoole->setting['worker_num']; |
26
|
|
|
$taskWorkerNum = isset($swoole->setting['task_worker_num']) ? $swoole->setting['task_worker_num'] : 0; |
27
|
|
|
$totalNum = $workerNum + $taskWorkerNum - 1; |
28
|
|
|
$workerIds = range(0, $totalNum); |
29
|
|
|
$runJob = function () use ($swoole, $workerIds, $processCollector, $swooleStatsCollector, $systemCollector) { |
30
|
|
|
// Collect the metrics of Swoole stats() |
31
|
|
|
$swooleStatsCollector->collect(); |
32
|
|
|
|
33
|
|
|
// Collect the metrics of system |
34
|
|
|
$systemCollector->collect(); |
35
|
|
|
|
36
|
|
|
// Collect the metrics of all workers |
37
|
|
|
foreach ($workerIds as $workerId) { |
38
|
|
|
$swoole->sendMessage($processCollector, $workerId); |
39
|
|
|
} |
40
|
|
|
}; |
41
|
|
|
|
42
|
|
|
$interval = config('prometheus.collect_metrics_interval', 10) * 1000; |
|
|
|
|
43
|
|
|
self::$timerId = Timer::tick($interval, $runJob); |
44
|
|
|
} |
45
|
|
|
|
46
|
|
|
public static function onReload(Server $swoole, Process $process) |
|
|
|
|
47
|
|
|
{ |
48
|
|
|
Timer::clear(self::$timerId); |
49
|
|
|
} |
50
|
|
|
|
51
|
|
|
public static function onStop(Server $swoole, Process $process) |
|
|
|
|
52
|
|
|
{ |
53
|
|
|
Timer::clear(self::$timerId); |
54
|
|
|
} |
55
|
|
|
} |