系统稳定性指标计算器

自己写的,用于计算系统的服务稳定性工具类:

/**
 *
 * @ClassName StabilityCalculator
 * @author kanpiaoxue
 * @version 1.0
 * @CreateTime 2018/01/15 21:20:06
 * @Description 稳定性计算器
 * 
 *              <pre>
 *              系统稳定性计算公式(年度):
 *              (100 - (故障分钟数 / 全年的分钟总数 * 100)) %
 *              (100 - (故障分钟数 / (60 * 24 * 365) * 100)) %
 *              (100 - (40 / 525600 * 100)) % = 99.992389649923896%
 *              </pre>
 */
public class StabilityCalculator {

    private enum TimeUnit {
        YEAR(365), QUARTER(120), MONTH(31);
        private static final int MINUTES_OF_DAY = 60 * 24;
        private int days;

        private TimeUnit(int num) {
            this.days = num;
        }

        public int getMinutes() {
            return MINUTES_OF_DAY * days;
        }
    }

    public static void main(String[] args) {
        StabilityCalculator sc = new StabilityCalculator();
        // 期望一年能达到的系统稳定性为: 99.99%,允许出现问题的最长时间是:52.56分钟
        sc.calculateErrorTime(99.99D, TimeUnit.YEAR);
        // 期望一个季度能达到的系统稳定性为:99.99%,允许出现问题的最长时间是:17.28分钟
        sc.calculateErrorTime(99.99D, TimeUnit.QUARTER);
        System.out.println("==========================================");
        // 一年中出现了40分钟的系统不稳定时间,能达到的系统稳定性是:99.99%
        sc.calculateStabilityPercent(40, TimeUnit.YEAR);
        // 一个季度中出现了40分钟的系统不稳定时间,能达到的系统稳定性是:99.98%
        sc.calculateStabilityPercent(40, TimeUnit.QUARTER);
    }

    /**
     *
     * @param expectedPercent 期望的稳定性百分比
     * @param timeUnit 统计的时间单位:年,季度
     * @return 达到期望的稳定性百分比可以出现的最大系统不稳定的时间(分钟)
     * @author kanpiaoxue
     * @CreateTime 2018/01/15 21:45:29
     * @Description 根据达到期望的稳定性百分比计算出可以出现的最大系统不稳定的时间(分钟)
     */
    public double calculateErrorTime(double expectedPercent, TimeUnit timeUnit) {
        double totalMinutes = timeUnit.getMinutes();
        double minutes = (100D - expectedPercent) / 100D * totalMinutes;
        System.out.println(String.format("[%s] expectedPercent:%s, the least required minutes:%s minutes",
                timeUnit, expectedPercent, minutes));
        return minutes;
    }

    /**
     *
     * @param errorDuration 出现系统不稳定的时长(分钟)
     * @param timeUnit 统计的时间单位:年,季度
     * @return 期望的稳定性百分比
     * @author kanpiaoxue
     * @CreateTime 2018/01/15 21:45:32
     * @Description 根据出现系统不稳定的时长(分钟)计算出目前系统的稳定性百分比
     */
    public double calculateStabilityPercent(int errorDuration, TimeUnit timeUnit) {
        double totalMinutes = timeUnit.getMinutes();
        double expectedPercent = (100D - (errorDuration / totalMinutes * 100D));
        System.out.println(String.format("[%s] errorDuration:%s minutes, stability percent:%s", timeUnit,
                errorDuration, expectedPercent));
        return expectedPercent;
    }

}

猜你喜欢

转载自kanpiaoxue.iteye.com/blog/2407833