Всегда ли он сообщает о времени выполнения 0 при перезагрузке? Или что-то близкое к нулю (все равно меньше прежнего времени)?
Вы можете рассчитать это двумя способами.
1. Чем меньше число, тем меньше проблем.
2. Чем выше число, тем больше баллов.
Полагаю, вам нужно учесть, что здоровье может меняться. Так что со временем это может ухудшиться. Поэтому последние значения должны иметь больший вес, чем старые. Это может указывать на экспоненциальный рост.
Чем больше перезагрузок у него было за последний период, тем больше могла быть сломана система. Но также глядя на более короткие интервалы перезагрузок. Скажем, 5 перезагрузок в день против 10 перезагрузок за 2 недели. Это значит много другого. Поэтому я думаю, что время должно быть метрикой, а также количество перезагрузок в этой формуле.
Полагаю, вам нужно рассчитать плотность количества перезагрузок за последний период.
Вы можете использовать вес плотности, просто разделив. Потому что, чем больше число, на которое вы делите, тем ниже будет результат, и насколько может уменьшиться вес числа.
Псевдокод:
function calcHealth(machine)
float value = 0;
float threshold = 800;
for each (reboot in machine.reboots) {
reboot.daysPast = time() - reboot.time;
// the more days past, the lower the value, so the lower the weight
value += (100 / reboot.daysPast);
}
return (value == 0) ? 0 : (threshold / value);
}
Вы можете продвинуть эту функцию, например, отфильтровывая maxDaysPast и играя с порогом и тому подобным.
Эта формула основана на этом графике: f (x) = 100 / x . Как видите, при малых числах (низкое значение x) значение выше, чем при большом значении x. Так вот как эта формула вычисляет вес daysPast. Потому что ниже daysPast == ниже x == вес больше.
При значении + = эта формула подсчитывает перезагрузки, а при части 100 / x - вес при перезагрузке, где вес - время.
При возврате порог делится на значение. Это связано с тем, что чем выше оценка перезагрузок, тем ниже должен быть результат.
Вы можете использовать программу построения графиков или калькулятор, чтобы увидеть изгиб графика, который также является изгибом веса daysPast.