From fe3cf4812657ee972315e0bd0d6e5b0c1e8774c0 Mon Sep 17 00:00:00 2001 From: Franck Cuny Date: Sat, 4 May 2024 13:41:42 -0700 Subject: move the slocalc under `src` --- nix/flake/packages.nix | 4 +-- nix/profiles/home-manager/shell.nix | 1 - packages/slocalc/default.nix | 25 -------------- packages/slocalc/slocalc.py | 69 ------------------------------------- pyproject.toml | 1 + src/cli/slocalc.py | 67 +++++++++++++++++++++++++++++++++++ 6 files changed, 69 insertions(+), 98 deletions(-) delete mode 100644 packages/slocalc/default.nix delete mode 100755 packages/slocalc/slocalc.py create mode 100755 src/cli/slocalc.py diff --git a/nix/flake/packages.nix b/nix/flake/packages.nix index 10c003f..3bfbec5 100644 --- a/nix/flake/packages.nix +++ b/nix/flake/packages.nix @@ -6,8 +6,7 @@ perSystem = { config, pkgs, ... }: { overlayAttrs = { inherit (config.packages) - seqstat - slocalc; + seqstat; }; packages = { @@ -16,7 +15,6 @@ ipconverter = pkgs.callPackage "${self}/packages/ipconverter" { }; robloxenv = pkgs.callPackage "${self}/packages/robloxenv" { }; seqstat = pkgs.callPackage "${self}/packages/seqstat" { }; - slocalc = pkgs.callPackage "${self}/packages/slocalc" { }; }; }; } diff --git a/nix/profiles/home-manager/shell.nix b/nix/profiles/home-manager/shell.nix index a95558c..2c3734c 100644 --- a/nix/profiles/home-manager/shell.nix +++ b/nix/profiles/home-manager/shell.nix @@ -32,7 +32,6 @@ self.packages.${pkgs.system}.git-broom self.packages.${pkgs.system}.ipconverter self.packages.${pkgs.system}.seqstat - self.packages.${pkgs.system}.slocalc ]; xdg = { diff --git a/packages/slocalc/default.nix b/packages/slocalc/default.nix deleted file mode 100644 index 114120e..0000000 --- a/packages/slocalc/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ lib, python3, stdenvNoCC }: - -stdenvNoCC.mkDerivation rec { - pname = "slocalc"; - src = ./slocalc.py; - version = "0.1.0"; - - buildInputs = [ python3 ]; - propagatedBuildInputs = [ python3 ]; - - dontUnpack = true; - dontBuild = true; - - installPhase = '' - mkdir -p $out/bin - cp $src $out/bin/${pname} - ''; - - meta = with lib; { - description = "Calculate SLO uptime."; - license = with licenses; [ mit ]; - platforms = platforms.unix; - maintainers = with maintainers; [ fcuny ]; - }; -} diff --git a/packages/slocalc/slocalc.py b/packages/slocalc/slocalc.py deleted file mode 100755 index e13e850..0000000 --- a/packages/slocalc/slocalc.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -""" -A simple SLO calculator for the command line. - -$ slocalc.py 99.99 -daily: 0 days, 0 hours, 0 minutes, 8 seconds -weekly: 0 days, 0 hours, 1 minutes, 0 seconds -monthly: 0 days, 0 hours, 4 minutes, 19 seconds -quarterly: 0 days, 0 hours, 12 minutes, 57 seconds -yearly: 0 days, 0 hours, 52 minutes, 33 seconds -""" - -from typing import Optional -from datetime import timedelta - -import sys - - -seconds_in_hour = 60 * 60 - - -def convert_to_float(s: str) -> Optional[float]: - try: - return float(s) - except ValueError: - print(f"error: '{s}' cannot be converted to float") - return None - - -def seconds_to_human_readable(seconds: int) -> str: - delta = timedelta(seconds=seconds) - days = delta.days - hours, remainder = divmod(delta.seconds, 3600) - minutes, seconds = divmod(remainder, 60) - return f"{days} days, {hours} hours, {minutes} minutes, {seconds} seconds" - - -def cli(): - if len(sys.argv) <= 1: - print("you need at least one argument", file=sys.stderr) - sys.exit(1) - - uptime = convert_to_float(sys.argv[1]) - if uptime is None: - print("failed to read input") - sys.exit(1) - - if uptime <= 0: - uptime = 0 - if uptime >= 100: - uptime = 100 - - allowed_downtime = ((100 * 100) - (uptime * 100)) / (100 * 100) - - daily_seconds = seconds_in_hour * 24 * allowed_downtime - week_seconds = daily_seconds * 7 - month_seconds = daily_seconds * 30 - quarter_seconds = daily_seconds * 90 - year_seconds = daily_seconds * 365 - - print("daily: {0}".format(seconds_to_human_readable(daily_seconds))) - print("weekly: {0}".format(seconds_to_human_readable(week_seconds))) - print("monthly: {0}".format(seconds_to_human_readable(month_seconds))) - print("quarterly: {0}".format(seconds_to_human_readable(quarter_seconds))) - print("yearly: {0}".format(seconds_to_human_readable(year_seconds))) - - -if __name__ == "__main__": - cli() diff --git a/pyproject.toml b/pyproject.toml index 7783aab..63545be 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -65,3 +65,4 @@ known-first-party = ["rbx_nomad"] [project.scripts] pizza = "cli.pizza:main" +slocalc = "cli.slocalc:cli" diff --git a/src/cli/slocalc.py b/src/cli/slocalc.py new file mode 100755 index 0000000..bc4def8 --- /dev/null +++ b/src/cli/slocalc.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +""" +A simple SLO calculator for the command line. + +$ slocalc.py 99.99 +daily: 0 days, 0 hours, 0 minutes, 8 seconds +weekly: 0 days, 0 hours, 1 minutes, 0 seconds +monthly: 0 days, 0 hours, 4 minutes, 19 seconds +quarterly: 0 days, 0 hours, 12 minutes, 57 seconds +yearly: 0 days, 0 hours, 52 minutes, 33 seconds +""" + +import sys +from typing import Optional +from datetime import timedelta + +seconds_in_hour = 60 * 60 + + +def convert_to_float(s: str) -> Optional[float]: + try: + return float(s) + except ValueError: + print(f"error: '{s}' cannot be converted to float") + return None + + +def seconds_to_human_readable(seconds: int) -> str: + delta = timedelta(seconds=seconds) + days = delta.days + hours, remainder = divmod(delta.seconds, 3600) + minutes, seconds = divmod(remainder, 60) + return f"{days} days, {hours} hours, {minutes} minutes, {seconds} seconds" + + +def cli(): + if len(sys.argv) <= 1: + print("you need at least one argument", file=sys.stderr) + sys.exit(1) + + uptime = convert_to_float(sys.argv[1]) + if uptime is None: + print("failed to read input") + sys.exit(1) + + if uptime <= 0: + uptime = 0 + if uptime >= 100: + uptime = 100 + + allowed_downtime = ((100 * 100) - (uptime * 100)) / (100 * 100) + + daily_seconds = seconds_in_hour * 24 * allowed_downtime + week_seconds = daily_seconds * 7 + month_seconds = daily_seconds * 30 + quarter_seconds = daily_seconds * 90 + year_seconds = daily_seconds * 365 + + print("daily: {0}".format(seconds_to_human_readable(daily_seconds))) + print("weekly: {0}".format(seconds_to_human_readable(week_seconds))) + print("monthly: {0}".format(seconds_to_human_readable(month_seconds))) + print("quarterly: {0}".format(seconds_to_human_readable(quarter_seconds))) + print("yearly: {0}".format(seconds_to_human_readable(year_seconds))) + + +if __name__ == "__main__": + cli() -- cgit 1.4.1