Oft sprechen SLA usw. über die Betriebsrate und die zulässigen Ausfallzeiten, aber ich möchte in der Lage sein, schnell danach zu fragen.
Mathematisch ist es wie folgt.
Nutzungsrate= \frac{Gesamtzeit-Ausfallzeit}{Gesamtzeit}
Beispiel: "Wenn die Betriebsrate 99% beträgt, wie viel Aussetzung ist pro Monat oder Jahr zulässig?" Wird nicht in Zahlen angegeben. Schreiben wir also ein Programm, damit es berechnet werden kann. Es hat viel zweites Abkochen, aber lass es in Ruhe.
Ich würde es gerne in Python schreiben.
Ein Monat ist 30 Tage (24 x 60 x 60 Sekunden).
Ein Jahr ist 365 Tage (365 x 24 x 60 x 60 Sekunden).
Bestätigte Python-Version.
$ python3 -V
Python 3.6.9
Finden Sie die folgenden drei.
Stellen Sie die oben genannten Informationen entweder anhand der Verfügbarkeitsrate, der monatlich zulässigen Ausfallzeit oder der jährlich zulässigen Ausfallzeit zur Verfügung.
Kurz gesagt, ich möchte etwas machen, das das andere Element sucht, wenn eines gegeben wird.
Außerdem ist die zulässige Stoppzeit in Einheiten von "s" (Sekunden), "m" (Minuten), "h" (Stunden) und "d" (Tage) anzugeben, und wenn sie weggelassen wird, ist sie als Sekunden zu interpretieren. Muss.
Das Ergebnis wird im Markdown-Tabellenformat ausgegeben.
Hier ist der, den ich erstellt habe.
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}Tag"
elif time > 60 * 60:
formatted_time = f"{time / (60 * 60):.2f}Zeit"
elif time > 60:
formatted_time = f"{time / 60:.2f}Protokoll"
else:
formatted_time = f"{time:.2f}Sekunden"
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("|Nutzungsrate|Monatlich zulässige Ausfallzeit|Jährlich zulässige Ausfallzeit|")
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]} |")
Laden und starten Sie es in der interaktiven Shell von Python.
$ python3 -i calc.py
>>>
Ermitteln Sie die zulässigen Ausfallzeiten aus der Betriebsrate. Wenn Sie mehr als eine geben möchten, verwenden Sie die Liste.
>>> print_table(99, calc_from_percentage)
|Nutzungsrate|Monatlich zulässige Ausfallzeit|Jährlich zulässige Ausfallzeit|
|:------:|:----------------:|:----------------:|
| 99% | 7.20 Stunden| 3.65 Tage|
>>> print_table([90, 95, 99, 99.5, 99.9, 99.95, 99.99, 99.999, 99.9999], calc_from_percentage)
|Nutzungsrate|Monatlich zulässige Ausfallzeit|Jährlich zulässige Ausfallzeit|
|:------:|:----------------:|:----------------:|
| 90% | 3.00 Tage| 36.50 Tage|
| 95% | 1.50 Tage| 18.25 ..|
| 99% | 7.20 Stunden| 3.65 Tage|
| 99.5% | 3.60 Stunden| 1.82 ..|
| 99.9% | 43.20 Minuten| 8.76 Stunden|
| 99.95% | 21.60 Minuten| 4.38 Stunden|
| 99.99% | 4.32 Minuten| 52.56 Minuten|
| 99.999% | 25.92 Sekunden| 5.26 Minuten|
| 99.9999% | 2.59 Sekunden| 31.54 Sekunden|
Dies ist der Tisch, den ich wollte.
Nutzungsrate | Monatlich zulässige Ausfallzeit | Jährlich zulässige Ausfallzeit |
---|---|---|
90% | 3.00 Tage | 36.50 Tage |
95% | 1.50 Tage | 18.25 .. |
99% | 7.20 Stunden | 3.65 Tage |
99.5% | 3.60 Stunden | 1.82 .. |
99.9% | 43.20 Minuten | 8.76 Stunden |
99.95% | 21.60 Minuten | 4.38 Stunden |
99.99% | 4.32 Minuten | 52.56 Minuten |
99.999% | 25.92 Sekunden | 5.26 Minuten |
99.9999% | 2.59 Sekunden | 31.54 Sekunden |
Berechnet aus der monatlich zulässigen Ausfallzeit.
>>> print_table("10", calc_from_month_stop_time)
|Nutzungsrate|Monatlich zulässige Ausfallzeit|Jährlich zulässige Ausfallzeit|
|:------:|:----------------:|:----------------:|
| 99.99961419753086% | 10.00 Sekunden| 2.03 Minuten|
>>> print_table(["3d", "10m", "10s", "10"], calc_from_month_stop_time)
|Nutzungsrate|Monatlich zulässige Ausfallzeit|Jährlich zulässige Ausfallzeit|
|:------:|:----------------:|:----------------:|
| 90.0% | 3.00 Tage| 36.50 Tage|
| 99.97685185185185% | 10.00 Minuten| 2.03 Stunden|
| 99.99961419753086% | 10.00 Sekunden| 2.03 Minuten|
| 99.99961419753086% | 10.00 Sekunden| 2.03 Minuten|
Ich dachte, die Anzahl der Stellen in Prozent wäre diesmal gut ...
Berechnet aus der jährlich zulässigen Ausfallzeit.
>>> print_table("30d", calc_from_year_stop_time)
|Nutzungsrate|Monatlich zulässige Ausfallzeit|Jährlich zulässige Ausfallzeit|
|:------:|:----------------:|:----------------:|
| 91.78082191780823% | 2.47| 30.00 Tage|
>>> print_table(["30d", "45m", "30s", "30"], calc_from_year_stop_time)
|Nutzungsrate|Monatlich zulässige Ausfallzeit|Jährlich zulässige Ausfallzeit|
|:------:|:----------------:|:----------------:|
| 91.78082191780823% | 2.47| 30.00 Tage|
| 99.99143835616438% | 3.70 Minuten| 45.00 Minuten|
| 99.99990487062405% | 2.47 Sekunden| 30.00 Sekunden|
| 99.99990487062405% | 2.47 Sekunden| 30.00 Sekunden|
So was.
Recommended Posts