Skip to content

Commit 710fdc4

Browse files
authored
Merge pull request #4 from renvins/feature/ping-metric
Implement ping service
2 parents 34b3280 + d91298b commit 710fdc4

File tree

7 files changed

+414
-14
lines changed

7 files changed

+414
-14
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ServerPulse
22

3-
ServerPulse is an **open‑source**, real‑time performance monitoring tool for Paper Minecraft servers. It will collect key server metrics **(TPS, disk usage, heap memory, online player count, entities, chunks)** and store them in InfluxDB for visualization in Grafana.
3+
ServerPulse is an **open‑source**, real‑time performance monitoring tool for Paper Minecraft servers. It will collect key server metrics **(TPS, disk usage, heap memory, online player count, entities, chunks, ping)** and store them in InfluxDB for visualization in Grafana.
44

55
<details>
66
<summary>📊 View Dashboard Examples</summary>

build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
group = "it.renvins"
2-
version = "0.1.3-SNAPSHOT"
2+
version = "0.1.4-SNAPSHOT"
33

44
repositories {
55
mavenCentral()
+319
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,319 @@
1+
{
2+
"annotations": {
3+
"list": [
4+
{
5+
"builtIn": 1,
6+
"datasource": {
7+
"type": "grafana",
8+
"uid": "-- Grafana --"
9+
},
10+
"enable": true,
11+
"hide": true,
12+
"iconColor": "rgba(0, 211, 255, 1)",
13+
"name": "Annotations & Alerts",
14+
"type": "dashboard"
15+
}
16+
]
17+
},
18+
"editable": true,
19+
"fiscalYearStartMonth": 0,
20+
"graphTooltip": 0,
21+
"id": 4,
22+
"links": [],
23+
"panels": [
24+
{
25+
"datasource": {
26+
"type": "influxdb",
27+
"uid": "P5697886F9CA74929"
28+
},
29+
"fieldConfig": {
30+
"defaults": {
31+
"color": {
32+
"mode": "palette-classic"
33+
},
34+
"custom": {
35+
"axisBorderShow": false,
36+
"axisCenteredZero": false,
37+
"axisColorMode": "text",
38+
"axisLabel": "",
39+
"axisPlacement": "auto",
40+
"barAlignment": 0,
41+
"barWidthFactor": 0.6,
42+
"drawStyle": "line",
43+
"fillOpacity": 0,
44+
"gradientMode": "none",
45+
"hideFrom": {
46+
"legend": false,
47+
"tooltip": false,
48+
"viz": false
49+
},
50+
"insertNulls": false,
51+
"lineInterpolation": "linear",
52+
"lineWidth": 1,
53+
"pointSize": 5,
54+
"scaleDistribution": {
55+
"type": "linear"
56+
},
57+
"showPoints": "auto",
58+
"spanNulls": false,
59+
"stacking": {
60+
"group": "A",
61+
"mode": "none"
62+
},
63+
"thresholdsStyle": {
64+
"mode": "off"
65+
}
66+
},
67+
"mappings": [],
68+
"thresholds": {
69+
"mode": "absolute",
70+
"steps": [
71+
{
72+
"color": "green"
73+
},
74+
{
75+
"color": "red",
76+
"value": 80
77+
}
78+
]
79+
}
80+
},
81+
"overrides": []
82+
},
83+
"gridPos": {
84+
"h": 8,
85+
"w": 12,
86+
"x": 0,
87+
"y": 0
88+
},
89+
"id": 1,
90+
"options": {
91+
"legend": {
92+
"calcs": [],
93+
"displayMode": "list",
94+
"placement": "bottom",
95+
"showLegend": true
96+
},
97+
"tooltip": {
98+
"hideZeros": false,
99+
"mode": "single",
100+
"sort": "none"
101+
}
102+
},
103+
"pluginVersion": "11.6.0",
104+
"targets": [
105+
{
106+
"datasource": {
107+
"type": "influxdb",
108+
"uid": "P5697886F9CA74929"
109+
},
110+
"query": "from(bucket: \"metrics_db\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"minecraft_stats\")\r\n |> filter(fn: (r) => r._field == \"min_ping\")\r\n |> filter(fn: (r) => r.server == \"bed1\") // customize it\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"mean_min_ping\")",
111+
"refId": "A"
112+
}
113+
],
114+
"title": "Minimum ping",
115+
"type": "timeseries"
116+
},
117+
{
118+
"datasource": {
119+
"type": "influxdb",
120+
"uid": "P5697886F9CA74929"
121+
},
122+
"fieldConfig": {
123+
"defaults": {
124+
"color": {
125+
"mode": "palette-classic"
126+
},
127+
"custom": {
128+
"axisBorderShow": false,
129+
"axisCenteredZero": false,
130+
"axisColorMode": "text",
131+
"axisLabel": "",
132+
"axisPlacement": "auto",
133+
"barAlignment": 0,
134+
"barWidthFactor": 0.6,
135+
"drawStyle": "line",
136+
"fillOpacity": 0,
137+
"gradientMode": "none",
138+
"hideFrom": {
139+
"legend": false,
140+
"tooltip": false,
141+
"viz": false
142+
},
143+
"insertNulls": false,
144+
"lineInterpolation": "linear",
145+
"lineWidth": 1,
146+
"pointSize": 5,
147+
"scaleDistribution": {
148+
"type": "linear"
149+
},
150+
"showPoints": "auto",
151+
"spanNulls": false,
152+
"stacking": {
153+
"group": "A",
154+
"mode": "none"
155+
},
156+
"thresholdsStyle": {
157+
"mode": "off"
158+
}
159+
},
160+
"mappings": [],
161+
"thresholds": {
162+
"mode": "absolute",
163+
"steps": [
164+
{
165+
"color": "green"
166+
},
167+
{
168+
"color": "red",
169+
"value": 80
170+
}
171+
]
172+
}
173+
},
174+
"overrides": []
175+
},
176+
"gridPos": {
177+
"h": 8,
178+
"w": 12,
179+
"x": 12,
180+
"y": 0
181+
},
182+
"id": 2,
183+
"options": {
184+
"legend": {
185+
"calcs": [],
186+
"displayMode": "list",
187+
"placement": "bottom",
188+
"showLegend": true
189+
},
190+
"tooltip": {
191+
"hideZeros": false,
192+
"mode": "single",
193+
"sort": "none"
194+
}
195+
},
196+
"pluginVersion": "11.6.0",
197+
"targets": [
198+
{
199+
"datasource": {
200+
"type": "influxdb",
201+
"uid": "P5697886F9CA74929"
202+
},
203+
"query": "from(bucket: \"metrics_db\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"minecraft_stats\")\r\n |> filter(fn: (r) => r._field == \"max_ping\")\r\n |> filter(fn: (r) => r.server == \"bed1\") // customize it\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"mean_max_ping\")",
204+
"refId": "A"
205+
}
206+
],
207+
"title": "Maximum ping",
208+
"type": "timeseries"
209+
},
210+
{
211+
"datasource": {
212+
"type": "influxdb",
213+
"uid": "P5697886F9CA74929"
214+
},
215+
"fieldConfig": {
216+
"defaults": {
217+
"color": {
218+
"mode": "palette-classic"
219+
},
220+
"custom": {
221+
"axisBorderShow": false,
222+
"axisCenteredZero": false,
223+
"axisColorMode": "text",
224+
"axisLabel": "",
225+
"axisPlacement": "auto",
226+
"barAlignment": 0,
227+
"barWidthFactor": 0.6,
228+
"drawStyle": "line",
229+
"fillOpacity": 0,
230+
"gradientMode": "none",
231+
"hideFrom": {
232+
"legend": false,
233+
"tooltip": false,
234+
"viz": false
235+
},
236+
"insertNulls": false,
237+
"lineInterpolation": "linear",
238+
"lineWidth": 1,
239+
"pointSize": 5,
240+
"scaleDistribution": {
241+
"type": "linear"
242+
},
243+
"showPoints": "auto",
244+
"spanNulls": false,
245+
"stacking": {
246+
"group": "A",
247+
"mode": "none"
248+
},
249+
"thresholdsStyle": {
250+
"mode": "off"
251+
}
252+
},
253+
"mappings": [],
254+
"thresholds": {
255+
"mode": "absolute",
256+
"steps": [
257+
{
258+
"color": "green"
259+
},
260+
{
261+
"color": "red",
262+
"value": 80
263+
}
264+
]
265+
}
266+
},
267+
"overrides": []
268+
},
269+
"gridPos": {
270+
"h": 8,
271+
"w": 12,
272+
"x": 0,
273+
"y": 8
274+
},
275+
"id": 3,
276+
"options": {
277+
"legend": {
278+
"calcs": [],
279+
"displayMode": "list",
280+
"placement": "bottom",
281+
"showLegend": true
282+
},
283+
"tooltip": {
284+
"hideZeros": false,
285+
"mode": "single",
286+
"sort": "none"
287+
}
288+
},
289+
"pluginVersion": "11.6.0",
290+
"targets": [
291+
{
292+
"datasource": {
293+
"type": "influxdb",
294+
"uid": "P5697886F9CA74929"
295+
},
296+
"query": "from(bucket: \"metrics_db\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"minecraft_stats\")\r\n |> filter(fn: (r) => r._field == \"avg_ping\")\r\n |> filter(fn: (r) => r.server == \"bed1\") // customize it\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"mean_avg_ping\")",
297+
"refId": "A"
298+
}
299+
],
300+
"title": "Average ping",
301+
"type": "timeseries"
302+
}
303+
],
304+
"preload": false,
305+
"schemaVersion": 41,
306+
"tags": [],
307+
"templating": {
308+
"list": []
309+
},
310+
"time": {
311+
"from": "now-30m",
312+
"to": "now"
313+
},
314+
"timepicker": {},
315+
"timezone": "browser",
316+
"title": "Bed1's ping",
317+
"uid": "aej6mg1xt1hj4e",
318+
"version": 3
319+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package it.renvins.serverpulse.metrics;
2+
3+
public interface IPingRetriever {
4+
5+
/**
6+
* Retrieves the minimum ping of all online players.
7+
*
8+
* @return the minimum ping
9+
*/
10+
int getMinPing();
11+
12+
/**
13+
* Retrieves the maximum ping of all online players.
14+
*
15+
* @return the maximum ping
16+
*/
17+
int getMaxPing();
18+
19+
/**
20+
* Retrieves the average ping of all online players.
21+
*
22+
* @return the average ping
23+
*/
24+
int getAveragePing();
25+
}

0 commit comments

Comments
 (0)