All Downloads are FREE. Search and download functionalities are using the official Maven repository.

orbit.server.service.Meters.kt Maven / Gradle / Ivy

/*
 Copyright (C) 2015 - 2020 Electronic Arts Inc.  All rights reserved.
 This file is part of the Orbit Project .
 See license in LICENSE.
 */

package orbit.server.service

import io.micrometer.core.instrument.Metrics

open class Meters {

    companion object {
        private fun getMeter(name: String, statistic: String? = null): Double {
            return Metrics.globalRegistry.meters.first { m -> m.id.name == name }.measure()
                .first { m -> statistic == null || statistic.equals(m.statistic.name, true) }.value
        }

        val Names = object : MeterNames {
            override val AddressableLeaseAbandonTimer: String = "orbit_addressable_lease_abandon"
            override val AddressableLeaseRenewalTimer: String = "orbit_addressable_lease_renewal"
            override val HealthCheck = "orbit_health_checks"
            override val PassingHealthChecks = "orbit_passing_health_checks"
            override val ConnectedClients = "orbit_connected_clients"
            override val PlacementTimer = "orbit_placement_timer"
            override val AddressableCount = "orbit_addressable_count"
            override val NodeCount = "orbit_node_count"
            override val ConnectedNodes = "orbit_connected_nodes"
            override val MessageSizes = "orbit_message_sizes"
            override val SlowTicks = "orbit_slow_ticks"
            override val TickTimer = "orbit_tick_timer"
            override val RetryAttempts = "orbit_retry_attempts"
            override val RetryErrors = "orbit_retry_errors"
        }

        val ConnectedClients: Double get() = getMeter(Names.ConnectedClients)
        val PlacementTimer_Count: Double get() = getMeter(Names.PlacementTimer, "count")
        val PlacementTimer_TotalTime: Double get() = getMeter(Names.PlacementTimer, "total_time")
        val AddressableCount: Double get() = getMeter(Names.AddressableCount)
        val NodeCount: Double get() = getMeter(Names.NodeCount)
        val ConnectedNodes: Double get() = getMeter(Names.ConnectedNodes)
        val MessagesCount: Double get() = getMeter(Names.MessageSizes, "count")
        val MessageSizes: Double get() = getMeter(Names.MessageSizes, "total")
        val SlowTickCount: Double get() = getMeter(Names.SlowTicks)
        val TickTimer_Count: Double get() = getMeter(Names.TickTimer, "count")
        val TickTimer_Total: Double get() = getMeter(Names.TickTimer, "total_time")
    }

    interface MeterNames {
        val AddressableLeaseAbandonTimer: String
        val AddressableLeaseRenewalTimer: String
        val HealthCheck: String
        val PassingHealthChecks: String
        val ConnectedClients: String
        val PlacementTimer: String
        val AddressableCount: String
        val NodeCount: String
        val ConnectedNodes: String
        val MessageSizes: String
        val SlowTicks: String
        val TickTimer: String
        val RetryAttempts: String
        val RetryErrors: String
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy