计算服务的正常运行时间/停机时间

时间:2015-05-04 06:15:48

标签: c#

我有一个自定义解决方案,每1小时检查一个网站是否在线。

结果是这样的:(每天有一个条目)

enter image description here

一天(每小时)有24个条目。每小时都有一个可用性百分比(100%,95%,0%......等等)。

我的问题是:

  • 如何按百分比计算正常运行时间和停机时间?

  • 如何使用2个日期DateTime之间的这些值来计算正常运行时间和停机时间,并在几秒钟内得到结果?

正常运行时间非常简单:

  • 所有值的总和除以24(条目),即99.67%

那么对于停机时间,我可以做100 - 99.67 = 0.33%吗?

我在两个日期之间以秒为单位获取正常运行时间/停机时间存在一些问题DateTime

例如:如果范围日期是20.04.2015 - 26.05.2015

我想我应该这样做:

每天计算如上所述的正常运行时间(所有每日值的总和除以24个条目)并假设以下值:

  • 20.04.2015:96.67%
  • 21.04.2015:100.00%
  • 22.04.2015:92.00%
  • 23.04.2015:96.67%
  • 24.04.2015:100.00%
  • 25.04.2015:100.00%
  • 26.04.2015:100.00%

现在上述值的总和除以天数(20.04和26.04之间的7天),使97.91 %在20.04和26.04之间可用。

我假设在几秒钟内获得97.91%的正常运行时间,我应该这样做:

 CultureInfo provider = CultureInfo.InvariantCulture;

 DateTime first = DateTime.ParseExact("20.04.2015", "dd.MM.yyyy", provider);
 DateTime last = DateTime.ParseExact("26.04.2015", "dd.MM.yyyy", provider);

 TimeSpan time = last - first;

 decimal secondsUptime = ((time.Days * 86400)/100) * 97.91m;  //97.91 is the uptime calculated above for the time period. 

 // The problem is how to get this?

 decimal secondsDowntime = ?

到目前为止我做了什么,这是正确的方法吗?

如何获得secondsDowntime?

2 个答案:

答案 0 :(得分:3)

如果您已经拥有Up time percent,那么您所要做的就是非常简单的数学:

decimal PercentDownTime = 100 - PercentUpTime;
decimal SecondsUpTime = (time.Seconds / 100) * PercentUpTime;
decimal SecondsDownTime = (time.Seconds / 100) * PercentDownTime;

感谢conditional annotation提醒我们TimeSpan的{​​{3}}属性,但在这种情况下,可以使用Robert属性。

答案 1 :(得分:1)

支持... Ur输入数字错误。如果你每小时测量一次并显示每小时的结果,那么你的11:00的结果是97%?它应该是100%或0%它在那个小时上升或下降....除非你实际上在那个小时做了更多的计算...但即使这样得到97你将不得不做至少100次测试那小时和3他们失败了。

但如果你的数字是正确的,公式就是这个......

正常运行时间%=(正常运行时间百分比之和)/(测量次数)×100

正常运行时间%=(正常运行时间总和)/ 24×100

停机时间%= 100 - (正常运行时间%)

正常运行时间的秒数=(测量或考虑的小时数)×3600×(正常运行时间%)/ 100

停机时间秒=(测量或考虑的小时数×3600) - (正常运行时间秒)

注意 3600是一小时内的秒数,因此我们将小时乘以该小时数,以达到所需的时间单位秒数。

注意将正常运行时间%替换为0到100之间的数字。不是0和1.如果你使用0到1,那么不要将最后一个除法除以100。