计算近实时健康度(固定单位时长15mins内的平均健康度)
多种心跳;各心跳开始时间不确定
根据各心跳周期,确定各时间段内(时长15mins)的理论心跳数,以实际检测到的心跳数/理论心跳数=:该时段内的平均健康度
各时段内的理论心跳数的确定
方法1、定义各时段取同一个心跳数:平均心跳数(存在小数点,以此计算的健康度会在一定误差范围内波动)
方法2、根据各心跳周期,以期获得各时段的准确理论心跳数(整数,希望获得准确心跳)
方法2并不能获得准确心跳数,因为起始时间的不确定性,而且并不只是第一个点不准确
假设某服务层包含两种心跳:60s周期和1800s周期,将一天内的时间以秒为单位,记为[0,86400],并且假设心跳正常且都从0时刻开始跳动,即两种心跳跳动时刻点分别如下
HB60<-seq(from=0,to=86400,by=60)#模拟发生心跳的时刻点
HB1800<-seq(from=0,to=86400,by=1800)
head(HB60)#查看前几个心跳时刻点
## [1] 0 60 120 180 240 300
head(HB1800)
## [1] 0 1800 3600 5400 7200 9000
那么,该服务层的所有心跳时刻点为:
heartbeat<-sort(c(HB60,HB1800))#将两种心跳时刻点合并且排序,注意这里不要去重
head(heartbeat)
## [1] 0 0 60 120 180 240
定义每15mins(900s)的切割点:
break.a<-seq(from=0,to=86400,by=900)
head(break.a)
## [1] 0 900 1800 2700 3600 4500
计算各时段内的“准确”理论心跳数:
each<-hist(heartbeat,breaks = break.a,plot = F)$count
head(each)
## [1] 17 16 15 16 15 16
如果所有心跳果真都是从同一时刻开始跳动,那么健康度一直都是准确的100%,如下图:
RateHealthy<-hist(heartbeat,breaks = break.a,plot = F)$count
plot(RateHealthy/each,type='b',col='red',xlim = c(0,100),ylim = c(0.9,1))
但是,当初始心跳不同时,比如,我们假设第一种心跳从40s开始跳,第二种心跳从100s开始跳:
hb60<-seq(from=40,to=86400,by=60)#模拟发生心跳的时刻点
hb1800<-seq(from=100,to=86400,by=1800)
head(hb60)
## [1] 40 100 160 220 280 340
head(hb1800)
## [1] 100 1900 3700 5500 7300 9100
heartbeat.new<-sort(c(hb60,hb1800))
head(heartbeat.new)
## [1] 40 100 100 160 220 280
RateHealthy.new<-hist(heartbeat.new,breaks = break.a,plot = F)$count
plot(RateHealthy/each,type='b',col='red',xlim = c(0,100),ylim = c(0.9,1.1))
lines(x=1:length(RateHealthy.new),y=RateHealthy.new/each)
其中红色为都为0s开始跳动时候的健康度图,黑色为从不同时刻开始跳动的健康度图,从图中明显可以看出来,并不只是起始几个点会影响,而是会一直传递到整个过程,实际上取统一理论心跳数的情形与之类似,也是在一定范围内波动,因此,建议不搞这么复杂,就用统一均值处理即可