Files
data-collection-terminal/management-panel/app/Livewire/MetricWidgetChart.php

70 lines
2.1 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();
// date_default_timezone_set('Asia/Shanghai');
$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);
// 检查查询结果是否有数据
if (empty($realdata['data']['result']) && empty($simulatedata['data']['result'])) {
// 如果没有数据,返回一个空数据集或提示信息
return ['labels' => [], 'datasets' => [],];
}
// 将数据格式化为 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,
];
}
}