Velocity queueing solution
at master 64 lines 2.8 kB view raw
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}