Souvent, les SLA, etc. parlent du taux de fonctionnement et des temps d'arrêt autorisés, mais je veux pouvoir le demander rapidement.
Mathématiquement, c'est comme suit.
Taux d'utilisation= \frac{Temps total-Temps d'échec}{Temps total}
Ainsi, par exemple, «Si le taux de fonctionnement est de 99%, combien de suspension est autorisée par mois ou par an?» Ne sort pas en chiffres, alors écrivons un programme pour qu'il puisse être calculé. Il a beaucoup de deuxième décoction, mais laissez-le tranquille.
J'aimerais l'écrire en Python.
Un mois correspond à 30 jours («24 x 60 x 60» secondes).
Un an équivaut à 365 jours («365 x 24 x 60 x 60» secondes).
Version Python confirmée.
$ python3 -V
Python 3.6.9
Trouvez les trois suivants.
Rendez ce qui précède disponible à partir du taux de disponibilité, du temps d'arrêt mensuel autorisé ou du temps d'arrêt annuel autorisé.
Bref, je veux faire quelque chose qui cherche l'autre élément quand on est donné.
En outre, l'heure d'arrêt autorisée est exprimée en unités de «s» (secondes), «m» (minutes), «h» (heures) et «d» (jours) et, si elle est omise, elle doit être interprétée comme des secondes. Doit être.
Le résultat est sorti au format tabulaire Markdown.
Voici celui que j'ai créé.
calc.py
import datetime
year_time = 365 * 24 * 60 * 60
month_time = 30 * 24 * 60 * 60
units = {"s": "seconds", "m": "minutes", "h": "hours", "d": "days"}
def calc_from_percentage(percentage):
stop_time_per_year_raw = year_time * ((100 - percentage) / 100)
stop_time_per_month_raw = month_time * ((100 - percentage) / 100)
def format_time(time):
if time > 24 * 60 * 60:
formatted_time = f"{time / (24 * 60 * 60):.2f}journée"
elif time > 60 * 60:
formatted_time = f"{time / (60 * 60):.2f}temps"
elif time > 60:
formatted_time = f"{time / 60:.2f}Minutes"
else:
formatted_time = f"{time:.2f}Secondes"
return formatted_time
stop_time_per_year = format_time(stop_time_per_year_raw)
stop_time_per_month = format_time(stop_time_per_month_raw)
return (f"{percentage}%", stop_time_per_month, stop_time_per_year)
def calc_from_month_stop_time(stop_time):
try:
seconds = int(stop_time)
except ValueError:
t = int(stop_time[:-1])
unit = units[stop_time[-1]]
seconds = datetime.timedelta(**{unit: t}).total_seconds()
percentage = 100 - ((seconds * 100) / month_time)
return calc_from_percentage(percentage)
def calc_from_year_stop_time(stop_time):
try:
seconds = int(stop_time)
except ValueError:
t = int(stop_time[:-1])
unit = units[stop_time[-1]]
seconds = datetime.timedelta(**{unit: t}).total_seconds()
percentage = 100 - ((seconds * 100) / year_time)
return calc_from_percentage(percentage)
def print_table(percentages_or_stop_times, calc_func):
print("|Taux d'utilisation|Temps d'arrêt mensuel autorisé|Temps d'arrêt annuel autorisé|")
print("|:------:|:----------------:|:----------------:|")
if isinstance(percentages_or_stop_times, list):
targets = percentages_or_stop_times
else:
targets = [percentages_or_stop_times]
for t in targets:
result = calc_func(t)
print(f"| {result[0]} | {result[1]} | {result[2]} |")
Chargez-le et lancez-le dans le shell interactif de Python.
$ python3 -i calc.py
>>>
Obtenez le temps d'arrêt autorisé à partir du taux de fonctionnement. Si vous voulez en donner plus d'un, utilisez la liste.
>>> print_table(99, calc_from_percentage)
|Taux d'utilisation|Temps d'arrêt mensuel autorisé|Temps d'arrêt annuel autorisé|
|:------:|:----------------:|:----------------:|
| 99% | 7.20 heures| 3.65 jours|
>>> print_table([90, 95, 99, 99.5, 99.9, 99.95, 99.99, 99.999, 99.9999], calc_from_percentage)
|Taux d'utilisation|Temps d'arrêt mensuel autorisé|Temps d'arrêt annuel autorisé|
|:------:|:----------------:|:----------------:|
| 90% | 3.00 jours| 36.50 jours|
| 95% | 1.50 jours| 18.25ème|
| 99% | 7.20 heures| 3.65 jours|
| 99.5% | 3.60 heures| 1.82e|
| 99.9% | 43.20 min| 8.76 heures|
| 99.95% | 21.60 minutes| 4.38 heures|
| 99.99% | 4.32 minutes| 52.56 minutes|
| 99.999% | 25.92 secondes| 5.26 minutes|
| 99.9999% | 2.59 secondes| 31.54 secondes|
C'est la table que je voulais.
Taux d'utilisation | Temps d'arrêt mensuel autorisé | Temps d'arrêt annuel autorisé |
---|---|---|
90% | 3.00 jours | 36.50 jours |
95% | 1.50 jours | 18.25ème |
99% | 7.20 heures | 3.65 jours |
99.5% | 3.60 heures | 1.82e |
99.9% | 43.20 min | 8.76 heures |
99.95% | 21.60 minutes | 4.38 heures |
99.99% | 4.32 minutes | 52.56 minutes |
99.999% | 25.92 secondes | 5.26 minutes |
99.9999% | 2.59 secondes | 31.54 secondes |
Calculé à partir du temps d'arrêt mensuel autorisé.
>>> print_table("10", calc_from_month_stop_time)
|Taux d'utilisation|Temps d'arrêt mensuel autorisé|Temps d'arrêt annuel autorisé|
|:------:|:----------------:|:----------------:|
| 99.99961419753086% | 10.00 secondes| 2.03 minutes|
>>> print_table(["3d", "10m", "10s", "10"], calc_from_month_stop_time)
|Taux d'utilisation|Temps d'arrêt mensuel autorisé|Temps d'arrêt annuel autorisé|
|:------:|:----------------:|:----------------:|
| 90.0% | 3.00 jours| 36.50 jours|
| 99.97685185185185% | 10.00 minutes| 2.03 heures|
| 99.99961419753086% | 10.00 secondes| 2.03 minutes|
| 99.99961419753086% | 10.00 secondes| 2.03 minutes|
Je pensais que le nombre de chiffres du pourcentage serait bien cette fois ...
Calculé à partir du temps d'arrêt annuel autorisé.
>>> print_table("30d", calc_from_year_stop_time)
|Taux d'utilisation|Temps d'arrêt mensuel autorisé|Temps d'arrêt annuel autorisé|
|:------:|:----------------:|:----------------:|
| 91.78082191780823% | 2.47e| 30.00 jours|
>>> print_table(["30d", "45m", "30s", "30"], calc_from_year_stop_time)
|Taux d'utilisation|Temps d'arrêt mensuel autorisé|Temps d'arrêt annuel autorisé|
|:------:|:----------------:|:----------------:|
| 91.78082191780823% | 2.47e| 30.00 jours|
| 99.99143835616438% | 3.70 minutes| 45.00 minutes|
| 99.99990487062405% | 2.47 secondes| 30.00 secondes|
| 99.99990487062405% | 2.47 secondes| 30.00 secondes|
Comme ça.
Recommended Posts