62 lines
1.8 KiB
PHP
62 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire;
|
|
|
|
use App\Services\PrometheusService;
|
|
use LaraZeus\InlineChart\InlineChartWidget;
|
|
|
|
class MetricWidgetChart extends InlineChartWidget
|
|
{
|
|
protected function getData(): array
|
|
{
|
|
$prometheus = new PrometheusService();
|
|
|
|
$query1 = $this->record->name . '{data="real"}';
|
|
$query2 = $this->record->name . '{data="simulate"}';
|
|
|
|
$start = now()->subDays(1)->timestamp;
|
|
$end = now()->timestamp;
|
|
$step = 60;
|
|
$realdata = $prometheus->queryRange($query1, $start, $end, $step);
|
|
$simulatedata = $prometheus->queryRange($query2, $start, $end, $step);
|
|
|
|
// 将数据格式化为 InlineChartWidget 所需的格式
|
|
$formattedRealData = $this->formatData($realdata, 'Real Data');
|
|
$formattedSimulateData = $this->formatData($simulatedata, 'Simulate Data');
|
|
|
|
return [
|
|
'labels' => $formattedRealData['labels'],
|
|
'datasets' => [
|
|
$formattedRealData['datasets'],
|
|
$formattedSimulateData['datasets'],
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* 将 Prometheus 查询结果格式化为 InlineChartWidget 所需的数据格式
|
|
*
|
|
* @param array $data Prometheus 查询结果
|
|
* @param string $label 数据集标签
|
|
* @return array 格式化后的数据
|
|
*/
|
|
protected function formatData(array $data, string $label): array
|
|
{
|
|
$labels = [];
|
|
$dataset = [
|
|
'label' => $label,
|
|
'data' => [],
|
|
];
|
|
|
|
foreach ($data['data']['result'][0]['values'] as $point) {
|
|
$labels[] = date('H:i', $point[0]);
|
|
$dataset['data'][] = $point[1];
|
|
}
|
|
|
|
return [
|
|
'labels' => $labels,
|
|
'datasets' => $dataset,
|
|
];
|
|
}
|
|
}
|