Velocity queueing solution
1/*
2 * ProxyQueues, a Velocity queueing solution
3 *
4 * Copyright (c) 2021 James Lyne
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 */
23
24package uk.co.notnull.proxyqueues.metrics;
25
26import com.velocitypowered.api.proxy.server.RegisteredServer;
27import de.sldk.mc.metrics.AbstractMetric;
28import io.prometheus.metrics.core.metrics.GaugeWithCallback;
29
30import uk.co.notnull.proxyqueues.ProxyQueuesImpl;
31import uk.co.notnull.proxyqueues.api.ProxyQueues;
32import uk.co.notnull.proxyqueues.api.QueueType;
33import uk.co.notnull.proxyqueues.api.queues.ProxyQueue;
34
35public class PlayersQueued extends AbstractMetric {
36 private static final GaugeWithCallback playersQueued = GaugeWithCallback.builder()
37 .name(prefix("players_queued"))
38 .help("Number of players queued by server and queue type")
39 .labelNames("queue_type", "server")
40 .callback(callback -> {
41 ProxyQueuesImpl plugin = ProxyQueuesImpl.getInstance();
42
43 for (RegisteredServer server : plugin.getProxyServer().getAllServers()) {
44 ProxyQueue queue = plugin.getQueueHandler().getQueue(server);
45
46 if(queue != null) {
47 String serverName = server.getServerInfo().getName();
48
49 callback.call(queue.getQueueSize(QueueType.NORMAL), serverName, "normal");
50 callback.call(queue.getQueueSize(QueueType.PRIORITY), serverName, "priority");
51 callback.call(queue.getQueueSize(QueueType.STAFF), serverName, "staff");
52 }
53 }
54 })
55 .build();
56
57 public PlayersQueued(ProxyQueues plugin) {
58 super(plugin, playersQueued);
59 }
60
61 protected void initialValue() {
62 playersQueued.collect();
63 }
64}