Skip to content

Commit d732e3f

Browse files
committed
Rewrite functions for metric fetching
1 parent fd43e34 commit d732e3f

File tree

2 files changed

+103
-50
lines changed

2 files changed

+103
-50
lines changed

application/controllers/ChartsController.php

+37-22
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
use ipl\Html\HtmlElement;
1515
use ipl\Html\Attributes;
1616
use ipl\Html\Text;
17+
use DateTime;
18+
use DateInterval;
1719

1820
class ChartsController extends Controller
1921
{
@@ -46,14 +48,17 @@ public function clusterAction(): void
4648
$metrics = new Metrics(Database::connection());
4749
$clusterMetrics = [];
4850

49-
$clusterMetrics['cpu'] = $metrics->getClusterUsage('cpu', $this->LAST_12_HOURS);
50-
$clusterMetrics['memory'] = $metrics->getClusterUsage('memory', $this->LAST_12_HOURS);
51+
$clusterMetrics = $metrics->getClusterUsage(
52+
(new DateTime())->sub(new DateInterval('PT12H')),
53+
Metrics::$ClusterCpuUsage,
54+
Metrics::$ClusterMemoryUsage
55+
);
5156

5257
$this->addContent(
5358
new LineChart(
5459
'chart-medium',
55-
implode(', ', $clusterMetrics['cpu']),
56-
implode(', ', array_keys($clusterMetrics['cpu'])),
60+
implode(', ', $clusterMetrics[Metrics::$ClusterCpuUsage]),
61+
implode(', ', array_keys($clusterMetrics[Metrics::$ClusterCpuUsage])),
5762
'CPU Usage',
5863
'#00a8ff'
5964
)
@@ -62,50 +67,60 @@ public function clusterAction(): void
6267
$this->addContent(
6368
new LineChart(
6469
'chart-medium',
65-
implode(', ', $clusterMetrics['memory']),
66-
implode(', ', array_keys($clusterMetrics['memory'])),
70+
implode(', ', $clusterMetrics[Metrics::$ClusterMemoryUsage]),
71+
implode(', ', array_keys($clusterMetrics[Metrics::$ClusterMemoryUsage])),
6772
'Memory Usage',
6873
'#8c7ae6'
6974
)
7075
);
7176

72-
$numberOfRunningPods = $metrics->getNumberOfPodsByState('running');
73-
$numberOfPendingPods = $metrics->getNumberOfPodsByState('pending');
74-
$numberOfFailedPods = $metrics->getNumberOfPodsByState('failed');
75-
$numberOfSucceededPods = $metrics->getNumberOfPodsByState('succeeded');
77+
// $numberOfRunningPods = $metrics->getNumberOfPodsByState('running');
78+
// $numberOfPendingPods = $metrics->getNumberOfPodsByState('pending');
79+
// $numberOfFailedPods = $metrics->getNumberOfPodsByState('failed');
80+
// $numberOfSucceededPods = $metrics->getNumberOfPodsByState('succeeded');
81+
82+
$pods = $metrics->getNumberOfPodsByState(
83+
Metrics::$PodStateRunning,
84+
Metrics::$PodStatePending,
85+
Metrics::$PodStateFailed,
86+
Metrics::$PodStateSucceeded
87+
);
7688

7789
$this->addContent(
7890
new DoughnutChart(
7991
'chart-small',
8092
implode(
8193
', ',
8294
[
83-
$numberOfRunningPods,
84-
$numberOfPendingPods,
85-
$numberOfFailedPods,
86-
$numberOfSucceededPods
95+
$pods[Metrics::$PodStateRunning],
96+
$pods[Metrics::$PodStatePending],
97+
$pods[Metrics::$PodStateFailed],
98+
$pods[Metrics::$PodStateSucceeded]
8799
]
88100
),
89101
implode(
90102
', ',
91103
[
92-
$numberOfRunningPods . ' Running',
93-
$numberOfPendingPods . ' Pending',
94-
$numberOfFailedPods . ' Failed',
95-
$numberOfSucceededPods . ' Succeeded'
104+
$pods[Metrics::$PodStateRunning] . ' Running',
105+
$pods[Metrics::$PodStatePending] . ' Pending',
106+
$pods[Metrics::$PodStateFailed] . ' Failed',
107+
$pods[Metrics::$PodStateSucceeded] . ' Succeeded'
96108
]
97109
),
98110
'#007bff, #ffc107, #dc3545, #28a745'
99111
)
100112
);
101113

102-
$clusterCpuUsage = $metrics->getClusterUsageCurrent('cpu');
103-
$clusterMemoryUsage = $metrics->getClusterUsageCurrent('memory');
114+
$current = $metrics->getClusterUsage(
115+
(new DateTime())->sub(new DateInterval('PT1M')),
116+
Metrics::$ClusterCpuUsage,
117+
Metrics::$ClusterMemoryUsage
118+
);
104119

105120
$this->addContent(
106121
new DoughnutChartStates(
107122
'chart-small',
108-
$clusterCpuUsage,
123+
$current[Metrics::$ClusterCpuUsage][array_key_last($current[Metrics::$ClusterCpuUsage])],
109124
'CPU Usage',
110125
'#28a745, #ffc107, #dc3545'
111126
)
@@ -114,7 +129,7 @@ public function clusterAction(): void
114129
$this->addContent(
115130
new DoughnutChartStates(
116131
'chart-small',
117-
$clusterMemoryUsage,
132+
$current[Metrics::$ClusterMemoryUsage][array_key_last($current[Metrics::$ClusterMemoryUsage])],
118133
'Memory Usage',
119134
'#28a745, #ffc107, #dc3545'
120135
)

library/Kubernetes/Common/Metrics.php

+66-28
Original file line numberDiff line numberDiff line change
@@ -9,51 +9,89 @@
99

1010
class Metrics
1111
{
12+
public static string $ClusterCpuUsage = 'cpu.usage';
13+
14+
public static string $ClusterMemoryUsage = 'memory.usage';
15+
16+
public static string $PodStateRunning = 'running';
17+
18+
public static string $PodStatePending = 'pending';
19+
20+
public static string $PodStateFailed = 'failed';
21+
22+
public static string $PodStateSucceeded = 'succeeded';
23+
1224
protected Connection $db;
1325

1426
public function __construct(Connection $db)
1527
{
1628
$this->db = $db;
1729
}
1830

19-
public function getClusterUsage(string $resource, int $period): array
31+
public function getClusterUsage(DateTimeInterface $startDateTime, string ...$metricNames): array
2032
{
21-
$dbData = $this->db->prepexec(
22-
(new Select())
23-
->columns(['timestamp', 'value'])
24-
->from('prometheus_cluster_metric')
25-
->where(
26-
'`group` = ? AND timestamp > UNIX_TIMESTAMP() * 1000 - ?',
27-
"$resource.usage",
28-
$period
29-
)
30-
);
33+
$out = [];
3134

32-
foreach ($dbData->fetchAll(PDO::FETCH_ASSOC) as $row) {
33-
$ts = $row['timestamp'];
34-
$data[$ts] = $row['value'];
35-
}
35+
foreach ($metricNames as $metricName) {
36+
$data = [];
37+
$dbData = $this->db->prepexec(
38+
(new Select())
39+
->columns(['timestamp', 'value'])
40+
->from('prometheus_cluster_metric')
41+
->where(
42+
'`group` = ? AND timestamp > ?',
43+
$metricName,
44+
$startDateTime->getTimestamp() * 1000
45+
)
46+
);
47+
48+
foreach ($dbData->fetchAll(PDO::FETCH_ASSOC) as $row) {
49+
$ts = $row['timestamp'];
50+
$data[$ts] = $row['value'];
51+
}
3652

37-
$this->fillGaps($data);
38-
ksort($data);
53+
$this->fillGaps($data);
54+
ksort($data);
55+
$out[$metricName] = $data;
56+
}
3957

40-
return $data;
58+
return $out;
4159
}
4260

43-
public function getNumberOfPodsByState(string $state): int
61+
public function getNumberOfPodsByState(string ...$states): array
4462
{
45-
$dbData = $this->db->prepexec(
46-
(new Select())
47-
->columns(['value'])
48-
->from('prometheus_cluster_metric')
49-
->where('`group` = ?', "pod.$state")
50-
->orderBy('timestamp DESC')
51-
->limit(1)
52-
);
63+
$out = [];
5364

54-
return $dbData->fetchAll(PDO::FETCH_ASSOC)[0]['value'];
65+
foreach ($states as $state) {
66+
$dbData = $this->db->prepexec(
67+
(new Select())
68+
->columns(['value'])
69+
->from('prometheus_cluster_metric')
70+
->where('`group` = ?', "pod.$state")
71+
->orderBy('timestamp DESC')
72+
->limit(1)
73+
);
74+
75+
$out[$state] = $dbData->fetchAll(PDO::FETCH_ASSOC)[0]['value'];
76+
}
77+
78+
return $out;
5579
}
5680

81+
// public function getNumberOfPodsByState(string $state): int
82+
// {
83+
// $dbData = $this->db->prepexec(
84+
// (new Select())
85+
// ->columns(['value'])
86+
// ->from('prometheus_cluster_metric')
87+
// ->where('`group` = ?', "pod.$state")
88+
// ->orderBy('timestamp DESC')
89+
// ->limit(1)
90+
// );
91+
//
92+
// return $dbData->fetchAll(PDO::FETCH_ASSOC)[0]['value'];
93+
// }
94+
5795
public function getClusterUsageCurrent(string $resource): float|null
5896
{
5997
$dbData = $this->db->prepexec(

0 commit comments

Comments
 (0)