From 9573d7deb4b11102e329435dc6c8fefa98ba6413 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Mon, 10 Feb 2025 10:24:05 +0200 Subject: [PATCH 01/27] Lab 1 Step 1 --- lab1/main.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 lab1/main.py diff --git a/lab1/main.py b/lab1/main.py new file mode 100644 index 000000000..047e8749f --- /dev/null +++ b/lab1/main.py @@ -0,0 +1,11 @@ +try: + server = input("Enter a server name: ") + if server == "": + raise ValueError("Server name is empty.") + if not server.isalnum(): + raise ValueError("Server name must be alphanumeric.") +except ValueError as err: + print(err) + + + From ecd79b35a59415d980110dbd92bacff44720b4b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Mon, 10 Feb 2025 10:31:37 +0200 Subject: [PATCH 02/27] Lab 1 Step 2 --- lab1/main.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lab1/main.py b/lab1/main.py index 047e8749f..fa7032841 100644 --- a/lab1/main.py +++ b/lab1/main.py @@ -1,9 +1,14 @@ +valid_server = {"nginx", "docker", "apache"} try: server = input("Enter a server name: ") if server == "": raise ValueError("Server name is empty.") if not server.isalnum(): raise ValueError("Server name must be alphanumeric.") + if server not in valid_server: + raise ValueError("Server is not recognized.") + else: + print("Server is running.") except ValueError as err: print(err) From 925b1a04cb92c8b3f661e06124287a5f58deada7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Mon, 10 Feb 2025 11:51:32 +0200 Subject: [PATCH 03/27] Added server names --- lab1/main.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/lab1/main.py b/lab1/main.py index fa7032841..5d9f347d2 100644 --- a/lab1/main.py +++ b/lab1/main.py @@ -1,4 +1,19 @@ -valid_server = {"nginx", "docker", "apache"} +valid_server = { + "nginx", "docker", "apache", "tomcat", "mysql", "mariadb", "postgresql", "mongodb", "redis", "memcached", + "rabbitmq", "kafka", "zookeeper", "elasticsearch", "logstash", "kibana", "prometheus", "grafana", "jenkins", + "gitlab", "nexus", "sonarqube", "harbor", "minio", "portainer", "traefik", "consul", "vault", "nomad", "packer", + "terraform", "ansible", "vagrant", "docker-compose", "kubernetes", "helm", "istio", "prometheus-operator", + "grafana-operator", "kiali", "jaeger", "loki", "fluentd", "nginx-ingress", "cert-manager", "external-dns", + "argocd", "tekton", "jenkins-x", "spinnaker", "argo-rollouts", "argo-cd", "argo-events", "argo-workflows", + "argo-tunnel", "argo-registry", "argo-mlflow", "argo-cd-operator", "argo-rollouts-operator", "argo-events-operator", + "argo-workflows-operator", "argo-tunnel-operator", "argo-registry-operator", "argo-mlflow-operator", + "argo-cd-applicationset", "argo-rollouts-applicationset", "argo-events-applicationset", "argo-workflows-applicationset", + "argo-tunnel-applicationset", "argo-registry-applicationset", "argo-mlflow-applicationset", + "argo-cd-applicationset-operator", "argo-rollouts-applicationset-operator", "argo-events-applicationset-operator", + "argo-workflows-applicationset-operator", "argo-tunnel-applicationset-operator", "argo-registry-applicationset-operator", + "argo-mlflow-applicationset-operator" +} + try: server = input("Enter a server name: ") if server == "": @@ -8,9 +23,9 @@ if server not in valid_server: raise ValueError("Server is not recognized.") else: - print("Server is running.") + print("Server is running.") except ValueError as err: print(err) - - + + From a9719189684688f8c29938e913b52a8aab29909e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Mon, 10 Feb 2025 14:01:58 +0200 Subject: [PATCH 04/27] Lab 2 Task 1 --- lab2/main.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 lab2/main.py diff --git a/lab2/main.py b/lab2/main.py new file mode 100644 index 000000000..82746299d --- /dev/null +++ b/lab2/main.py @@ -0,0 +1,38 @@ +class InvalidServerError(Exception): + pass + + + + +valid_server = { + "nginx", "docker", "apache", "tomcat", "mysql", "mariadb", "postgresql", "mongodb", "redis", "memcached", + "rabbitmq", "kafka", "zookeeper", "elasticsearch", "logstash", "kibana", "prometheus", "grafana", "jenkins", + "gitlab", "nexus", "sonarqube", "harbor", "minio", "portainer", "traefik", "consul", "vault", "nomad", "packer", + "terraform", "ansible", "vagrant", "docker-compose", "kubernetes", "helm", "istio", "prometheus-operator", + "grafana-operator", "kiali", "jaeger", "loki", "fluentd", "nginx-ingress", "cert-manager", "external-dns", + "argocd", "tekton", "jenkins-x", "spinnaker", "argo-rollouts", "argo-cd", "argo-events", "argo-workflows", + "argo-tunnel", "argo-registry", "argo-mlflow", "argo-cd-operator", "argo-rollouts-operator", "argo-events-operator", + "argo-workflows-operator", "argo-tunnel-operator", "argo-registry-operator", "argo-mlflow-operator", + "argo-cd-applicationset", "argo-rollouts-applicationset", "argo-events-applicationset", "argo-workflows-applicationset", + "argo-tunnel-applicationset", "argo-registry-applicationset", "argo-mlflow-applicationset", + "argo-cd-applicationset-operator", "argo-rollouts-applicationset-operator", "argo-events-applicationset-operator", + "argo-workflows-applicationset-operator", "argo-tunnel-applicationset-operator", "argo-registry-applicationset-operator", + "argo-mlflow-applicationset-operator" +} +while True: + try: + server = input("Enter a server name: ") + server.strip() + if server == "": + raise InvalidServerError("Server name is empty.") + if not server.isalnum(): + raise InvalidServerError("Server name must be alphanumeric.") + if server not in valid_server: + raise InvalidServerError("Server is not recognized.") + else: + print("Server is running.") + except ValueError as err: + print(err) + + + From ac4b406c91795142e0a1f6812077aad71f932bce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Mon, 10 Feb 2025 14:16:42 +0200 Subject: [PATCH 05/27] Lab 2 Task 2 --- lab2/main.py | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/lab2/main.py b/lab2/main.py index 82746299d..82dd1f9d8 100644 --- a/lab2/main.py +++ b/lab2/main.py @@ -1,9 +1,8 @@ +import logging +logging.basicConfig(level="INFO") class InvalidServerError(Exception): pass - - - valid_server = { "nginx", "docker", "apache", "tomcat", "mysql", "mariadb", "postgresql", "mongodb", "redis", "memcached", "rabbitmq", "kafka", "zookeeper", "elasticsearch", "logstash", "kibana", "prometheus", "grafana", "jenkins", @@ -19,20 +18,26 @@ class InvalidServerError(Exception): "argo-workflows-applicationset-operator", "argo-tunnel-applicationset-operator", "argo-registry-applicationset-operator", "argo-mlflow-applicationset-operator" } -while True: + + +def check_service_status(server_name): try: - server = input("Enter a server name: ") - server.strip() - if server == "": + if server_name == "": raise InvalidServerError("Server name is empty.") - if not server.isalnum(): + if not server_name.isalnum(): raise InvalidServerError("Server name must be alphanumeric.") - if server not in valid_server: + if server_name not in valid_server: raise InvalidServerError("Server is not recognized.") else: - print("Server is running.") - except ValueError as err: - print(err) - - + return "Runing" + except InvalidServerError: + raise ValueError +while True: + server_name = input("Enter a server name: ") + server_name.strip() + try: + status = check_service_status(server_name) + logging.info("User type valid server name.") + except ValueError as err: + logging.error("User type invalid server name.") From 182602810d592f9c34968a01d21d37dd293edff6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Mon, 10 Feb 2025 14:52:09 +0200 Subject: [PATCH 06/27] Lab 2 Task 3 --- lab2/main.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/lab2/main.py b/lab2/main.py index 82dd1f9d8..b56613161 100644 --- a/lab2/main.py +++ b/lab2/main.py @@ -1,5 +1,19 @@ import logging -logging.basicConfig(level="INFO") +import sys +import json +class JasonFormatter(logging.Formatter): + def format(self, record: logging.LogRecord): + log = {"time":record.created, "module": record.module} + return json.dumps(log) + + +# logging.basicConfig(level="INFO") +handler = logging.StreamHandler(sys.stdout) +logger = logging.getLogger("myapp") +logger.addHandler(handler) +logger.setLevel("INFO") +handler.setFormatter(JasonFormatter()) + class InvalidServerError(Exception): pass @@ -34,10 +48,10 @@ def check_service_status(server_name): raise ValueError while True: - server_name = input("Enter a server name: ") + server_name = input("Enter a server name:\n") server_name.strip() try: status = check_service_status(server_name) - logging.info("User type valid server name.") + logger.info("Valid Server name") except ValueError as err: - logging.error("User type invalid server name.") + logger.error("Invalid Server name") From 3fe137cf4c0c1c680d071eba8168364bc82b9031 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Mon, 10 Feb 2025 15:08:01 +0200 Subject: [PATCH 07/27] Lab 2 --- lab2/main.py | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/lab2/main.py b/lab2/main.py index b56613161..3d02a853b 100644 --- a/lab2/main.py +++ b/lab2/main.py @@ -1,36 +1,32 @@ import logging import sys import json +import os class JasonFormatter(logging.Formatter): def format(self, record: logging.LogRecord): log = {"time":record.created, "module": record.module} return json.dumps(log) +log_level = os.environ.get("LOG_LEVEL", "DEBUG") +log_format = os.environ.get("LOG_FORMAT", "TEXT") # logging.basicConfig(level="INFO") handler = logging.StreamHandler(sys.stdout) logger = logging.getLogger("myapp") logger.addHandler(handler) -logger.setLevel("INFO") -handler.setFormatter(JasonFormatter()) +logger.setLevel(log_level) +if log_format == "JSON": + handler.setFormatter(JasonFormatter()) + + + class InvalidServerError(Exception): pass valid_server = { "nginx", "docker", "apache", "tomcat", "mysql", "mariadb", "postgresql", "mongodb", "redis", "memcached", - "rabbitmq", "kafka", "zookeeper", "elasticsearch", "logstash", "kibana", "prometheus", "grafana", "jenkins", - "gitlab", "nexus", "sonarqube", "harbor", "minio", "portainer", "traefik", "consul", "vault", "nomad", "packer", - "terraform", "ansible", "vagrant", "docker-compose", "kubernetes", "helm", "istio", "prometheus-operator", - "grafana-operator", "kiali", "jaeger", "loki", "fluentd", "nginx-ingress", "cert-manager", "external-dns", - "argocd", "tekton", "jenkins-x", "spinnaker", "argo-rollouts", "argo-cd", "argo-events", "argo-workflows", - "argo-tunnel", "argo-registry", "argo-mlflow", "argo-cd-operator", "argo-rollouts-operator", "argo-events-operator", - "argo-workflows-operator", "argo-tunnel-operator", "argo-registry-operator", "argo-mlflow-operator", - "argo-cd-applicationset", "argo-rollouts-applicationset", "argo-events-applicationset", "argo-workflows-applicationset", - "argo-tunnel-applicationset", "argo-registry-applicationset", "argo-mlflow-applicationset", - "argo-cd-applicationset-operator", "argo-rollouts-applicationset-operator", "argo-events-applicationset-operator", - "argo-workflows-applicationset-operator", "argo-tunnel-applicationset-operator", "argo-registry-applicationset-operator", - "argo-mlflow-applicationset-operator" + "terraform", "ansible", "vagrant", "docker-compose", "kubernetes", "helm", "istio", "prometheus-operator" } From 67aa3d565aa5da268ce1e2f2d42325bcd2c24cdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Mon, 10 Feb 2025 15:14:07 +0200 Subject: [PATCH 08/27] Lab 2 version 2 --- lab2/main.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lab2/main.py b/lab2/main.py index 3d02a853b..b270b6f18 100644 --- a/lab2/main.py +++ b/lab2/main.py @@ -4,7 +4,11 @@ import os class JasonFormatter(logging.Formatter): def format(self, record: logging.LogRecord): - log = {"time":record.created, "module": record.module} + log = { + "timestamp": self.formatTime(record), + "level": record.levelname, + "message": record.getMessage() + } return json.dumps(log) log_level = os.environ.get("LOG_LEVEL", "DEBUG") @@ -19,8 +23,6 @@ def format(self, record: logging.LogRecord): handler.setFormatter(JasonFormatter()) - - class InvalidServerError(Exception): pass From 82a74b7aa1d9aa1d6efef66e8ce146fae619ea49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Mon, 10 Feb 2025 15:19:19 +0200 Subject: [PATCH 09/27] Lab 2 version 3 --- lab2/main.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lab2/main.py b/lab2/main.py index b270b6f18..d8f93d49e 100644 --- a/lab2/main.py +++ b/lab2/main.py @@ -14,15 +14,14 @@ def format(self, record: logging.LogRecord): log_level = os.environ.get("LOG_LEVEL", "DEBUG") log_format = os.environ.get("LOG_FORMAT", "TEXT") -# logging.basicConfig(level="INFO") handler = logging.StreamHandler(sys.stdout) logger = logging.getLogger("myapp") logger.addHandler(handler) logger.setLevel(log_level) if log_format == "JSON": handler.setFormatter(JasonFormatter()) - - +else: + handler.setFormatter(logging.Formatter("%(asctime)s:%(name)s:%(levelname)s:%(module)s:%(lineno)d:%(funcName)s:%(message)s")) class InvalidServerError(Exception): pass @@ -50,6 +49,6 @@ def check_service_status(server_name): server_name.strip() try: status = check_service_status(server_name) - logger.info("Valid Server name") + logger.info("Valid Server name.") except ValueError as err: - logger.error("Invalid Server name") + logger.error("Invalid Server name.") From 697e3b276d6dbb3ae388b1502235e615943e0971 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Mon, 10 Feb 2025 15:26:43 +0200 Subject: [PATCH 10/27] Lab 2 version 4 --- lab2/main.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lab2/main.py b/lab2/main.py index d8f93d49e..2e513abb4 100644 --- a/lab2/main.py +++ b/lab2/main.py @@ -14,14 +14,19 @@ def format(self, record: logging.LogRecord): log_level = os.environ.get("LOG_LEVEL", "DEBUG") log_format = os.environ.get("LOG_FORMAT", "TEXT") -handler = logging.StreamHandler(sys.stdout) +stdout_handler = logging.StreamHandler(sys.stdout) logger = logging.getLogger("myapp") -logger.addHandler(handler) +file_handler = logging.FileHandler("myapp.log") +logger.addHandler(stdout_handler) +logger.addHandler(file_handler) logger.setLevel(log_level) if log_format == "JSON": - handler.setFormatter(JasonFormatter()) + stdout_handler.setFormatter(JasonFormatter()) + file_handler.setFormatter(JasonFormatter()) else: - handler.setFormatter(logging.Formatter("%(asctime)s:%(name)s:%(levelname)s:%(module)s:%(lineno)d:%(funcName)s:%(message)s")) + stdout_handler.setFormatter(logging.Formatter("%(asctime)s:%(name)s:%(levelname)s:%(module)s:%(lineno)d:%(funcName)s:%(message)s")) + file_handler.setFormatter(logging.Formatter("%(asctime)s:%(name)s:%(levelname)s:%(module)s:%(lineno)d:%(funcName)s:%(message)s")) + class InvalidServerError(Exception): pass From 490160ecc83e8f118978ed5f05d10bfb0044eaec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Mon, 10 Feb 2025 15:51:34 +0200 Subject: [PATCH 11/27] Lab 2 version 4 --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 15a8842fe..4311d105c 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,5 @@ override.tf.json # Ignore CLI configuration files .terraformrc terraform.rckeys/ + +lab2/myapp.log From 147fcc81244f7d25d3eab9c58ae532119fd019c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Mon, 10 Feb 2025 15:59:07 +0200 Subject: [PATCH 12/27] Lab 2 version 5 --- lab2/invalid_server_error.py | 2 ++ lab2/log.py | 29 +++++++++++++++++++++++++ lab2/main.py | 42 +++++------------------------------- lab2/valid_servers.py | 4 ++++ 4 files changed, 40 insertions(+), 37 deletions(-) create mode 100644 lab2/invalid_server_error.py create mode 100644 lab2/log.py create mode 100644 lab2/valid_servers.py diff --git a/lab2/invalid_server_error.py b/lab2/invalid_server_error.py new file mode 100644 index 000000000..ccb97349f --- /dev/null +++ b/lab2/invalid_server_error.py @@ -0,0 +1,2 @@ +class InvalidServerError(Exception): + pass \ No newline at end of file diff --git a/lab2/log.py b/lab2/log.py new file mode 100644 index 000000000..69b0d9748 --- /dev/null +++ b/lab2/log.py @@ -0,0 +1,29 @@ +import logging +import sys +import json +import os + +class JasonFormatter(logging.Formatter): + def format(self, record: logging.LogRecord): + log = { + "timestamp": self.formatTime(record), + "level": record.levelname, + "message": record.getMessage() + } + return json.dumps(log) +def setup_logging(): + log_level = os.environ.get("LOG_LEVEL", "DEBUG") + log_format = os.environ.get("LOG_FORMAT", "TEXT") + + stdout_handler = logging.StreamHandler(sys.stdout) + logger = logging.getLogger("myapp") + file_handler = logging.FileHandler("myapp.log") + logger.addHandler(stdout_handler) + logger.addHandler(file_handler) + logger.setLevel(log_level) + if log_format == "JSON": + stdout_handler.setFormatter(JasonFormatter()) + file_handler.setFormatter(JasonFormatter()) + else: + stdout_handler.setFormatter(logging.Formatter("%(asctime)s:%(name)s:%(levelname)s:%(module)s:%(lineno)d:%(funcName)s:%(message)s")) + file_handler.setFormatter(logging.Formatter("%(asctime)s:%(name)s:%(levelname)s:%(module)s:%(lineno)d:%(funcName)s:%(message)s")) \ No newline at end of file diff --git a/lab2/main.py b/lab2/main.py index 2e513abb4..5204e4d07 100644 --- a/lab2/main.py +++ b/lab2/main.py @@ -1,40 +1,8 @@ -import logging -import sys -import json -import os -class JasonFormatter(logging.Formatter): - def format(self, record: logging.LogRecord): - log = { - "timestamp": self.formatTime(record), - "level": record.levelname, - "message": record.getMessage() - } - return json.dumps(log) - -log_level = os.environ.get("LOG_LEVEL", "DEBUG") -log_format = os.environ.get("LOG_FORMAT", "TEXT") - -stdout_handler = logging.StreamHandler(sys.stdout) -logger = logging.getLogger("myapp") -file_handler = logging.FileHandler("myapp.log") -logger.addHandler(stdout_handler) -logger.addHandler(file_handler) -logger.setLevel(log_level) -if log_format == "JSON": - stdout_handler.setFormatter(JasonFormatter()) - file_handler.setFormatter(JasonFormatter()) -else: - stdout_handler.setFormatter(logging.Formatter("%(asctime)s:%(name)s:%(levelname)s:%(module)s:%(lineno)d:%(funcName)s:%(message)s")) - file_handler.setFormatter(logging.Formatter("%(asctime)s:%(name)s:%(levelname)s:%(module)s:%(lineno)d:%(funcName)s:%(message)s")) - -class InvalidServerError(Exception): - pass - -valid_server = { - "nginx", "docker", "apache", "tomcat", "mysql", "mariadb", "postgresql", "mongodb", "redis", "memcached", - "terraform", "ansible", "vagrant", "docker-compose", "kubernetes", "helm", "istio", "prometheus-operator" -} +from log import setup_logging +from invalid_server_error import InvalidServerError +from valid_servers import valid_servers +logger = setup_logging() def check_service_status(server_name): try: @@ -42,7 +10,7 @@ def check_service_status(server_name): raise InvalidServerError("Server name is empty.") if not server_name.isalnum(): raise InvalidServerError("Server name must be alphanumeric.") - if server_name not in valid_server: + if server_name not in valid_servers: raise InvalidServerError("Server is not recognized.") else: return "Runing" diff --git a/lab2/valid_servers.py b/lab2/valid_servers.py new file mode 100644 index 000000000..5b6825dc8 --- /dev/null +++ b/lab2/valid_servers.py @@ -0,0 +1,4 @@ +valid_servers = { + "nginx", "docker", "apache", "tomcat", "mysql", "mariadb", "postgresql", "mongodb", "redis", "memcached", + "terraform", "ansible", "vagrant", "docker-compose", "kubernetes", "helm", "istio", "prometheus-operator" +} \ No newline at end of file From 9cc4f7b1927c1deb5ab8cf0261a61acf40db3281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Mon, 10 Feb 2025 16:01:52 +0200 Subject: [PATCH 13/27] Lab 2 version 6 --- lab2/log.py | 3 ++- lab2/main.py | 18 +++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lab2/log.py b/lab2/log.py index 69b0d9748..fe3996472 100644 --- a/lab2/log.py +++ b/lab2/log.py @@ -26,4 +26,5 @@ def setup_logging(): file_handler.setFormatter(JasonFormatter()) else: stdout_handler.setFormatter(logging.Formatter("%(asctime)s:%(name)s:%(levelname)s:%(module)s:%(lineno)d:%(funcName)s:%(message)s")) - file_handler.setFormatter(logging.Formatter("%(asctime)s:%(name)s:%(levelname)s:%(module)s:%(lineno)d:%(funcName)s:%(message)s")) \ No newline at end of file + file_handler.setFormatter(logging.Formatter("%(asctime)s:%(name)s:%(levelname)s:%(module)s:%(lineno)d:%(funcName)s:%(message)s")) + return logger \ No newline at end of file diff --git a/lab2/main.py b/lab2/main.py index 5204e4d07..72e7997bf 100644 --- a/lab2/main.py +++ b/lab2/main.py @@ -16,12 +16,12 @@ def check_service_status(server_name): return "Runing" except InvalidServerError: raise ValueError - -while True: - server_name = input("Enter a server name:\n") - server_name.strip() - try: - status = check_service_status(server_name) - logger.info("Valid Server name.") - except ValueError as err: - logger.error("Invalid Server name.") +if __name__ == "__main__": + while True: + server_name = input("Enter a server name:\n") + server_name.strip() + try: + status = check_service_status(server_name) + logger.info("Valid Server name.") + except ValueError as err: + logger.error("Invalid Server name.") From 1ee4ffa2142f714270dfa3ac6420e5b434bddf8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Mon, 10 Feb 2025 16:07:42 +0200 Subject: [PATCH 14/27] Lab 2 version 7 --- lab2/main.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lab2/main.py b/lab2/main.py index 72e7997bf..9de5cb47b 100644 --- a/lab2/main.py +++ b/lab2/main.py @@ -17,9 +17,12 @@ def check_service_status(server_name): except InvalidServerError: raise ValueError if __name__ == "__main__": - while True: + server_name = "" + while server_name != "exit": server_name = input("Enter a server name:\n") server_name.strip() + if server_name == "exit": + break try: status = check_service_status(server_name) logger.info("Valid Server name.") From 0eaf538e0ef44936a8fee94e6fe1a9acc7e0698b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Mon, 10 Feb 2025 16:12:56 +0200 Subject: [PATCH 15/27] Lab 2 version 8 --- lab2/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab2/main.py b/lab2/main.py index 9de5cb47b..84e72fbe1 100644 --- a/lab2/main.py +++ b/lab2/main.py @@ -20,7 +20,7 @@ def check_service_status(server_name): server_name = "" while server_name != "exit": server_name = input("Enter a server name:\n") - server_name.strip() + server_name = server_name.strip().lower() if server_name == "exit": break try: From 0502b40abcfef8b568367525a42b33f5ce5ed95a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Tue, 11 Feb 2025 08:59:03 +0200 Subject: [PATCH 16/27] Lab 2 version 9 --- lab2/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab2/main.py b/lab2/main.py index 84e72fbe1..feada294c 100644 --- a/lab2/main.py +++ b/lab2/main.py @@ -13,7 +13,7 @@ def check_service_status(server_name): if server_name not in valid_servers: raise InvalidServerError("Server is not recognized.") else: - return "Runing" + return "Running" except InvalidServerError: raise ValueError if __name__ == "__main__": From 57ddc1ab4d834c4f16d54163797597ce2ea3fdc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Tue, 11 Feb 2025 09:10:54 +0200 Subject: [PATCH 17/27] deleted lab1 folder and change the name of lab2 folder to lab --- {lab2 => lab}/invalid_server_error.py | 0 {lab2 => lab}/log.py | 0 {lab2 => lab}/main.py | 0 lab/myapp.log | 5 +++++ {lab2 => lab}/valid_servers.py | 0 lab1/main.py | 31 --------------------------- 6 files changed, 5 insertions(+), 31 deletions(-) rename {lab2 => lab}/invalid_server_error.py (100%) rename {lab2 => lab}/log.py (100%) rename {lab2 => lab}/main.py (100%) create mode 100644 lab/myapp.log rename {lab2 => lab}/valid_servers.py (100%) delete mode 100644 lab1/main.py diff --git a/lab2/invalid_server_error.py b/lab/invalid_server_error.py similarity index 100% rename from lab2/invalid_server_error.py rename to lab/invalid_server_error.py diff --git a/lab2/log.py b/lab/log.py similarity index 100% rename from lab2/log.py rename to lab/log.py diff --git a/lab2/main.py b/lab/main.py similarity index 100% rename from lab2/main.py rename to lab/main.py diff --git a/lab/myapp.log b/lab/myapp.log new file mode 100644 index 000000000..f12d26f69 --- /dev/null +++ b/lab/myapp.log @@ -0,0 +1,5 @@ +2025-02-10 15:25:39,050:myapp:INFO:main:57::Valid Server name. +2025-02-10 15:25:50,234:myapp:ERROR:main:59::Invalid Server name. +2025-02-10 16:01:15,471:myapp:INFO:main:25::Valid Server name. +2025-02-10 16:01:19,268:myapp:ERROR:main:27::Invalid Server name. +2025-02-10 16:01:23,829:myapp:ERROR:main:27::Invalid Server name. diff --git a/lab2/valid_servers.py b/lab/valid_servers.py similarity index 100% rename from lab2/valid_servers.py rename to lab/valid_servers.py diff --git a/lab1/main.py b/lab1/main.py deleted file mode 100644 index 5d9f347d2..000000000 --- a/lab1/main.py +++ /dev/null @@ -1,31 +0,0 @@ -valid_server = { - "nginx", "docker", "apache", "tomcat", "mysql", "mariadb", "postgresql", "mongodb", "redis", "memcached", - "rabbitmq", "kafka", "zookeeper", "elasticsearch", "logstash", "kibana", "prometheus", "grafana", "jenkins", - "gitlab", "nexus", "sonarqube", "harbor", "minio", "portainer", "traefik", "consul", "vault", "nomad", "packer", - "terraform", "ansible", "vagrant", "docker-compose", "kubernetes", "helm", "istio", "prometheus-operator", - "grafana-operator", "kiali", "jaeger", "loki", "fluentd", "nginx-ingress", "cert-manager", "external-dns", - "argocd", "tekton", "jenkins-x", "spinnaker", "argo-rollouts", "argo-cd", "argo-events", "argo-workflows", - "argo-tunnel", "argo-registry", "argo-mlflow", "argo-cd-operator", "argo-rollouts-operator", "argo-events-operator", - "argo-workflows-operator", "argo-tunnel-operator", "argo-registry-operator", "argo-mlflow-operator", - "argo-cd-applicationset", "argo-rollouts-applicationset", "argo-events-applicationset", "argo-workflows-applicationset", - "argo-tunnel-applicationset", "argo-registry-applicationset", "argo-mlflow-applicationset", - "argo-cd-applicationset-operator", "argo-rollouts-applicationset-operator", "argo-events-applicationset-operator", - "argo-workflows-applicationset-operator", "argo-tunnel-applicationset-operator", "argo-registry-applicationset-operator", - "argo-mlflow-applicationset-operator" -} - -try: - server = input("Enter a server name: ") - if server == "": - raise ValueError("Server name is empty.") - if not server.isalnum(): - raise ValueError("Server name must be alphanumeric.") - if server not in valid_server: - raise ValueError("Server is not recognized.") - else: - print("Server is running.") -except ValueError as err: - print(err) - - - From 9583093f325f7369a2fd46234c46cb68dc9ae86a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Tue, 11 Feb 2025 12:09:40 +0200 Subject: [PATCH 18/27] fastapi and venv installation requirements file --- .gitignore | 3 +++ Readme.md | 1 + lab/main.py | 39 +++++++++++---------------------------- lab/pipdemo.py | 10 ++++++++++ lab/tools.py | 30 ++++++++++++++++++++++++++++++ requirements.txt | 3 +++ 6 files changed, 58 insertions(+), 28 deletions(-) create mode 100644 lab/pipdemo.py create mode 100644 lab/tools.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore index 4311d105c..2186f7263 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,6 @@ override.tf.json terraform.rckeys/ lab2/myapp.log + +.venv +.venv/* \ No newline at end of file diff --git a/Readme.md b/Readme.md index e69de29bb..39a9971bf 100644 --- a/Readme.md +++ b/Readme.md @@ -0,0 +1 @@ +pip install -r requirements.txt \ No newline at end of file diff --git a/lab/main.py b/lab/main.py index feada294c..5fa2fcb71 100644 --- a/lab/main.py +++ b/lab/main.py @@ -1,30 +1,13 @@ -from log import setup_logging -from invalid_server_error import InvalidServerError -from valid_servers import valid_servers +from fastapi import FastAPI +import json +import httpx +app = FastAPI() -logger = setup_logging() +@app.get("/") +def hello_world(): + return "Hello World" -def check_service_status(server_name): - try: - if server_name == "": - raise InvalidServerError("Server name is empty.") - if not server_name.isalnum(): - raise InvalidServerError("Server name must be alphanumeric.") - if server_name not in valid_servers: - raise InvalidServerError("Server is not recognized.") - else: - return "Running" - except InvalidServerError: - raise ValueError -if __name__ == "__main__": - server_name = "" - while server_name != "exit": - server_name = input("Enter a server name:\n") - server_name = server_name.strip().lower() - if server_name == "exit": - break - try: - status = check_service_status(server_name) - logger.info("Valid Server name.") - except ValueError as err: - logger.error("Invalid Server name.") +@app.get("/users") +def get_users(): + response = httpx.get('https://jsonplaceholder.typicode.com/users') + return response.json() diff --git a/lab/pipdemo.py b/lab/pipdemo.py new file mode 100644 index 000000000..660f7ea7a --- /dev/null +++ b/lab/pipdemo.py @@ -0,0 +1,10 @@ +import httpx +import json +from pprint import pprint + +response = httpx.get('https://jsonplaceholder.typicode.com/users') +pprint(response) +users = response.json() +for user in users: + pprint(user['name']) + \ No newline at end of file diff --git a/lab/tools.py b/lab/tools.py new file mode 100644 index 000000000..feada294c --- /dev/null +++ b/lab/tools.py @@ -0,0 +1,30 @@ +from log import setup_logging +from invalid_server_error import InvalidServerError +from valid_servers import valid_servers + +logger = setup_logging() + +def check_service_status(server_name): + try: + if server_name == "": + raise InvalidServerError("Server name is empty.") + if not server_name.isalnum(): + raise InvalidServerError("Server name must be alphanumeric.") + if server_name not in valid_servers: + raise InvalidServerError("Server is not recognized.") + else: + return "Running" + except InvalidServerError: + raise ValueError +if __name__ == "__main__": + server_name = "" + while server_name != "exit": + server_name = input("Enter a server name:\n") + server_name = server_name.strip().lower() + if server_name == "exit": + break + try: + status = check_service_status(server_name) + logger.info("Valid Server name.") + except ValueError as err: + logger.error("Invalid Server name.") diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..0c13947b9 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +httpx +fastapi +pydantic \ No newline at end of file From dc862e5596284061d911d8bd88fb2e9332d7969d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Tue, 11 Feb 2025 15:25:15 +0200 Subject: [PATCH 19/27] Fastapi server get and post --- lab/main.py | 46 +++++++++++++++++++++++++++++++++++++------- lab/valid_servers.py | 3 +-- 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/lab/main.py b/lab/main.py index 5fa2fcb71..4ca97e5ee 100644 --- a/lab/main.py +++ b/lab/main.py @@ -1,13 +1,45 @@ from fastapi import FastAPI import json import httpx +from dataclasses import dataclass +from datetime import datetime +from valid_servers import valid_servers + +@dataclass +class ServerStatusResponse: + server_name: str + server_status: str | bool + app = FastAPI() -@app.get("/") -def hello_world(): - return "Hello World" +@app.get("/server") +def get_server(server_name: str) -> ServerStatusResponse: + server_status = valid_servers.get(server_name, "Doest not exist.") + return ServerStatusResponse(server_name, server_status) + + +@app.post("/server") +def add_server(server_name: str) -> ServerStatusResponse: + valid_servers[server_name] = True + return ServerStatusResponse(server_name, valid_servers[server_name]) + + +# @dataclass +# class User: +# name:str +# email:str +# date = datetime.now() + + +# @app.get("/") +# def hello_world(): +# return "Hello World" + +# @app.get("/users") +# def get_users() ->list[User]: +# response = httpx.get('https://jsonplaceholder.typicode.com/users') +# return response.json() -@app.get("/users") -def get_users(): - response = httpx.get('https://jsonplaceholder.typicode.com/users') - return response.json() +# @app.post("/users") +# def create_user(new_user: User) -> bool: +# return True \ No newline at end of file diff --git a/lab/valid_servers.py b/lab/valid_servers.py index 5b6825dc8..fe2785fb2 100644 --- a/lab/valid_servers.py +++ b/lab/valid_servers.py @@ -1,4 +1,3 @@ valid_servers = { - "nginx", "docker", "apache", "tomcat", "mysql", "mariadb", "postgresql", "mongodb", "redis", "memcached", - "terraform", "ansible", "vagrant", "docker-compose", "kubernetes", "helm", "istio", "prometheus-operator" + "nginx": True, "docker": False } \ No newline at end of file From 54d34016eb0a0bb2e7984492858f75462f5ffcd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Tue, 11 Feb 2025 15:37:24 +0200 Subject: [PATCH 20/27] Clean up lab folder --- lab/main.py | 46 +++++++++++++++++++++++++++++++++++++++++++++- lab/pipdemo.py | 10 ---------- lab/tools.py | 30 ------------------------------ 3 files changed, 45 insertions(+), 41 deletions(-) delete mode 100644 lab/pipdemo.py delete mode 100644 lab/tools.py diff --git a/lab/main.py b/lab/main.py index 4ca97e5ee..729c6bd7f 100644 --- a/lab/main.py +++ b/lab/main.py @@ -42,4 +42,48 @@ def add_server(server_name: str) -> ServerStatusResponse: # @app.post("/users") # def create_user(new_user: User) -> bool: -# return True \ No newline at end of file +# return True + + +# from log import setup_logging +# from invalid_server_error import InvalidServerError +# from valid_servers import valid_servers + +# logger = setup_logging() + +# def check_service_status(server_name): +# try: +# if server_name == "": +# raise InvalidServerError("Server name is empty.") +# if not server_name.isalnum(): +# raise InvalidServerError("Server name must be alphanumeric.") +# if server_name not in valid_servers: +# raise InvalidServerError("Server is not recognized.") +# else: +# return "Running" +# except InvalidServerError: +# raise ValueError +# if __name__ == "__main__": +# server_name = "" +# while server_name != "exit": +# server_name = input("Enter a server name:\n") +# server_name = server_name.strip().lower() +# if server_name == "exit": +# break +# try: +# status = check_service_status(server_name) +# logger.info("Valid Server name.") +# except ValueError as err: +# logger.error("Invalid Server name.") + + +# import httpx +# import json +# from pprint import pprint + +# response = httpx.get('https://jsonplaceholder.typicode.com/users') +# pprint(response) +# users = response.json() +# for user in users: +# pprint(user['name']) + \ No newline at end of file diff --git a/lab/pipdemo.py b/lab/pipdemo.py deleted file mode 100644 index 660f7ea7a..000000000 --- a/lab/pipdemo.py +++ /dev/null @@ -1,10 +0,0 @@ -import httpx -import json -from pprint import pprint - -response = httpx.get('https://jsonplaceholder.typicode.com/users') -pprint(response) -users = response.json() -for user in users: - pprint(user['name']) - \ No newline at end of file diff --git a/lab/tools.py b/lab/tools.py deleted file mode 100644 index feada294c..000000000 --- a/lab/tools.py +++ /dev/null @@ -1,30 +0,0 @@ -from log import setup_logging -from invalid_server_error import InvalidServerError -from valid_servers import valid_servers - -logger = setup_logging() - -def check_service_status(server_name): - try: - if server_name == "": - raise InvalidServerError("Server name is empty.") - if not server_name.isalnum(): - raise InvalidServerError("Server name must be alphanumeric.") - if server_name not in valid_servers: - raise InvalidServerError("Server is not recognized.") - else: - return "Running" - except InvalidServerError: - raise ValueError -if __name__ == "__main__": - server_name = "" - while server_name != "exit": - server_name = input("Enter a server name:\n") - server_name = server_name.strip().lower() - if server_name == "exit": - break - try: - status = check_service_status(server_name) - logger.info("Valid Server name.") - except ValueError as err: - logger.error("Invalid Server name.") From feab1284717eaf59b75e2b8118ebdfef721cb0ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Tue, 11 Feb 2025 16:39:13 +0200 Subject: [PATCH 21/27] Read from servers file --- lab/main.py | 83 +++++++------------------------------------------ lab/modules.py | 38 ++++++++++++++++++++++ lab/servers.txt | 4 +++ 3 files changed, 53 insertions(+), 72 deletions(-) create mode 100644 lab/modules.py create mode 100644 lab/servers.txt diff --git a/lab/main.py b/lab/main.py index 729c6bd7f..03ed34214 100644 --- a/lab/main.py +++ b/lab/main.py @@ -3,87 +3,26 @@ import httpx from dataclasses import dataclass from datetime import datetime -from valid_servers import valid_servers +import modules + +app = FastAPI() +servers = modules.read_server_list() @dataclass class ServerStatusResponse: server_name: str server_status: str | bool -app = FastAPI() - @app.get("/server") def get_server(server_name: str) -> ServerStatusResponse: - server_status = valid_servers.get(server_name, "Doest not exist.") - return ServerStatusResponse(server_name, server_status) + server_status = False + for server in servers: + if server.name == server_name: + return ServerStatusResponse(server_name, server_status) + return ServerStatusResponse(server_name, server_name + " Does not exist.") @app.post("/server") def add_server(server_name: str) -> ServerStatusResponse: - valid_servers[server_name] = True - return ServerStatusResponse(server_name, valid_servers[server_name]) - - -# @dataclass -# class User: -# name:str -# email:str -# date = datetime.now() - - -# @app.get("/") -# def hello_world(): -# return "Hello World" - -# @app.get("/users") -# def get_users() ->list[User]: -# response = httpx.get('https://jsonplaceholder.typicode.com/users') -# return response.json() - -# @app.post("/users") -# def create_user(new_user: User) -> bool: -# return True - - -# from log import setup_logging -# from invalid_server_error import InvalidServerError -# from valid_servers import valid_servers - -# logger = setup_logging() - -# def check_service_status(server_name): -# try: -# if server_name == "": -# raise InvalidServerError("Server name is empty.") -# if not server_name.isalnum(): -# raise InvalidServerError("Server name must be alphanumeric.") -# if server_name not in valid_servers: -# raise InvalidServerError("Server is not recognized.") -# else: -# return "Running" -# except InvalidServerError: -# raise ValueError -# if __name__ == "__main__": -# server_name = "" -# while server_name != "exit": -# server_name = input("Enter a server name:\n") -# server_name = server_name.strip().lower() -# if server_name == "exit": -# break -# try: -# status = check_service_status(server_name) -# logger.info("Valid Server name.") -# except ValueError as err: -# logger.error("Invalid Server name.") - - -# import httpx -# import json -# from pprint import pprint - -# response = httpx.get('https://jsonplaceholder.typicode.com/users') -# pprint(response) -# users = response.json() -# for user in users: -# pprint(user['name']) - \ No newline at end of file + modules.add_new_server(modules.Server(name=server_name, online=True, cpus=6, ram=10)) + return ServerStatusResponse(server_name, " Server was added and now is running.") diff --git a/lab/modules.py b/lab/modules.py new file mode 100644 index 000000000..e54b0d29b --- /dev/null +++ b/lab/modules.py @@ -0,0 +1,38 @@ +from pydantic import BaseModel, ValidationError +import json + + +class ServerStatusResponse(BaseModel): + server_name: str + server_status: str | bool + + +class Server(BaseModel): + name: str + online: bool + cpus: int + ram: int + + +def read_server_list() -> list[Server]: + with open("servers.txt", "r") as f: + servers: list[Server] = [] + for line in f.readlines(): + if line.strip(): + json_object = json.loads(line) + try: + new_server = Server(**json_object) + except ValidationError: + pass + else: + servers.append(new_server) + return servers + + +def add_new_server(new_server: Server): + with open("servers.txt", "a") as f: + f.write("\n") + f.write(new_server.model_dump_json()) + + +print(read_server_list()) \ No newline at end of file diff --git a/lab/servers.txt b/lab/servers.txt new file mode 100644 index 000000000..a7ad56cdb --- /dev/null +++ b/lab/servers.txt @@ -0,0 +1,4 @@ +{"name": "nginx", "online": true, "cpus": 2, "ram": 4} +{"name":"wow","online":true,"cpus":6,"ram":10} +{"name":"wow","online":true,"cpus":6,"ram":10} +{"name":"yonatan","online":true,"cpus":6,"ram":10} \ No newline at end of file From 247b04f469ff31daec97056a6e08fca645608789 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Tue, 11 Feb 2025 16:45:16 +0200 Subject: [PATCH 22/27] Read from servers file 2 --- lab/main.py | 7 ++++--- lab/modules.py | 4 +--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/lab/main.py b/lab/main.py index 03ed34214..607c2f570 100644 --- a/lab/main.py +++ b/lab/main.py @@ -15,14 +15,15 @@ class ServerStatusResponse: @app.get("/server") def get_server(server_name: str) -> ServerStatusResponse: - server_status = False for server in servers: if server.name == server_name: - return ServerStatusResponse(server_name, server_status) + return ServerStatusResponse(server_name, server.online) return ServerStatusResponse(server_name, server_name + " Does not exist.") @app.post("/server") def add_server(server_name: str) -> ServerStatusResponse: - modules.add_new_server(modules.Server(name=server_name, online=True, cpus=6, ram=10)) + new_server = modules.Server(name=server_name, online=True, cpus=6, ram=10) + modules.add_new_server(new_server) + servers.append(new_server) return ServerStatusResponse(server_name, " Server was added and now is running.") diff --git a/lab/modules.py b/lab/modules.py index e54b0d29b..5bc89a8f9 100644 --- a/lab/modules.py +++ b/lab/modules.py @@ -33,6 +33,4 @@ def add_new_server(new_server: Server): with open("servers.txt", "a") as f: f.write("\n") f.write(new_server.model_dump_json()) - - -print(read_server_list()) \ No newline at end of file + \ No newline at end of file From f186acd92deb091a2f3e11a5505456b3f542bf96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Wed, 12 Feb 2025 11:38:55 +0200 Subject: [PATCH 23/27] API feching lab --- apilab/main.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 apilab/main.py diff --git a/apilab/main.py b/apilab/main.py new file mode 100644 index 000000000..943adea01 --- /dev/null +++ b/apilab/main.py @@ -0,0 +1,47 @@ +import httpx +import json +import pprint +import time + + +def main(): + # Task 1 + user_id = input("Please type the user's id you want: ") + try: + response = httpx.get("https://jsonplaceholder.typicode.com/users?id=" + user_id) + response.raise_for_status() + chosen_user = response.json()[0] + print("User name: " + str(chosen_user["name"]) + "\nEmail: " + str(chosen_user["email"]) + "\nAddress: " + str(chosen_user["address"]["street"]) + ", " + str(chosen_user["address"]["city"]) ) + except (httpx.HTTPStatusError, IndexError): + if response.status_code == 500: + print("Server error. Please try again later.") + else: + print("User not found\n") + + # Task 2 + + for i in range(3): + try: + print("Fetching System metrics ...") + URL = "https://api.example.com/system/metrics" + headers = {"Authorization": "Bearer YOUR_API_KEY"} + params = {"metrics": "cpu,memory"} + response = httpx.get(URL, params=params, headers=headers) + if response.status_code == 401: + print("Invalid API key") + break + if response.status_code == 500: + print("Server is currently down") + break + except httpx.HTTPError: + print(f"attempt {i + 1} failed: server is currently down.") + time.sleep(2) + print("Retrying in 2 seconds.") + + + + + + +if __name__=="__main__": + main() \ No newline at end of file From f892beb268a73cff6d0b9b1697fde2a638b4ba18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Wed, 12 Feb 2025 14:12:59 +0200 Subject: [PATCH 24/27] plab --- plab/main.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 plab/main.py diff --git a/plab/main.py b/plab/main.py new file mode 100644 index 000000000..ebaaf8553 --- /dev/null +++ b/plab/main.py @@ -0,0 +1,26 @@ +import subprocess +try: + p = subprocess.run(["ls", "/var/log"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) +except FileNotFoundError: + print("the command does not exist") +except PermissionError: + print("do not have permission to run the process") +err = p.stderr.decode() +out = p.stdout.decode() +if "No such file or directory" in err: + print("No such file or directory") +if "permission" in err: + print("permission dined") +if p.returncode == 0: + print(out) + + +p = subprocess.run(["systemctl", "status", "nginx"], stdout=subprocess.PIPE) +if "inactive" in p.stdout.decode(): + p = subprocess.run(["systemctl", "restart", "nginx"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + print(p.returncode) + if p.returncode == 0: + print("restart successful") + else: + print("restart failed") + From 6992fcbebcf16ff1da7dad60947dfa4926d84824 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Wed, 12 Feb 2025 16:26:32 +0200 Subject: [PATCH 25/27] boto3lab --- boto3lab/main.py | 74 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 boto3lab/main.py diff --git a/boto3lab/main.py b/boto3lab/main.py new file mode 100644 index 000000000..abc7e5de7 --- /dev/null +++ b/boto3lab/main.py @@ -0,0 +1,74 @@ +import boto3 +import random + +# s3_client = boto3.client("s3") +# response = s3_client.list_buckets() + +# for bucket in response["Buckets"]: +# print(f"Buckets: {bucket['Name']}") +def main(): + while True: + user_choice = input("[1] Manage S3 Buckets\n[2] Manage EC2 Instances\n[3] Exit\n") + if user_choice == "1": + s3_client = boto3.client("s3") + user_choice = input("chose an option: list, create, delete: ") + if user_choice == "list": + list_bucket(s3_client) + elif user_choice == "create": + create_bucket(s3_client) + elif user_choice == "delete": + delete_bucket() + else: + print("Please chose a valid option from the menu") + elif user_choice =="2": + ec2_client = boto3.client("ec2") + user_choice = input("chose an option: list, start, stop, terminate: ") + if user_choice == "list": + list_instances(ec2_client) + elif user_choice == "start": + pass + elif user_choice == "stop": + pass + elif user_choice == "terminate": + pass + else: + print("Please chose a valid option from the menu") + elif user_choice == "3": + break + else: + print("Please chose a valid option from the menu") + + + +def list_bucket(s3_client): + response = s3_client.list_buckets() + try: + for bucket in response["Buckets"]: + print(f"Buckets: {bucket['Name']}") + except KeyError: + print("no bucket was found") +def create_bucket(s3_client): + bucket_name = input("Please enter the new bucket name: ") + response = s3_client.create_bucket( + Bucket=bucket_name + ) + print(bucket_name + " was created") +def delete_bucket(s3_client): + bucket_name = input("Please type the name of the bucket you want to delete: ") + response = s3_client.delete_bucket( + Bucket=bucket_name, + ExpectedBucketOwner='???' + + ) +def list_instances(ec2_client): + response = ec2_client.describe_instances() + try: + for instance in response["Instances"]: + print(f"Instance: {instance['Name']}") + except KeyError: + print("no instance was found") + + +if __name__ == '__main__': + main() + \ No newline at end of file From 6599a8f26f0cb35f64381c6bc2531d379d149c85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Fri, 14 Feb 2025 17:40:25 +0200 Subject: [PATCH 26/27] Clean version of main in main2 - boto3lab --- boto3lab/main2.py | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 boto3lab/main2.py diff --git a/boto3lab/main2.py b/boto3lab/main2.py new file mode 100644 index 000000000..ef2b667a7 --- /dev/null +++ b/boto3lab/main2.py @@ -0,0 +1,68 @@ +import boto3 +import os + +def list_bucket(s3_client): + response = s3_client.list_buckets() + try: + for bucket in response["Buckets"]: + print(f"Buckets: {bucket['Name']}") + except KeyError: + print("no bucket was found") +def create_bucket(s3_client): + bucket_name = input("Please chose a name for the new bucket: ") + response = s3_client.create_bucket( + Bucket=bucket_name + ) + print(bucket_name + " was created") +def delete_bucket(s3_client): + bucket_name = input("Please type the name of the bucket you want to delete: ") + bucket_owner = input("Please type the name of the owner: ") + response = s3_client.delete_bucket( + Bucket=bucket_name, + ExpectedBucketOwner=bucket_owner + ) +def s3_menu(): + s3_client = boto3.client("s3") + while True: + print("Welcome to S3 menu. Please choose what you want to do:") + user_choice = input("[1] List of all buckets.\n[2] Create a new bucket.\n[3] Delete bucket.\n[4] Go back to main menu.\n") + match user_choice: + case "1": + list_bucket(s3_client) + case "2": + create_bucket(s3_client) + case "3": + delete_bucket(s3_client) + case "4": + print("Exited to main menu.") + return + case default: + print("Invalid option. Please select again.") + + +def ec2_menu(): + pass + +def menu(): + os.environ['AWS_ACCESS_KEY_ID'] = input("AWS_ACCESS_KEY_ID: ").strip() + os.environ['AWS_SECRET_ACCESS_KEY'] = input("AWS_SECRET_ACCESS_KEY: ").strip() + os.environ['AWS_DEFAULT_REGION'] = input("AWS_DEFAULT_REGION: ").strip() + while True: + user_choice = input("Chose an option from the menu:\n[1] Manage S3 Buckets\n[2] Manage EC2 Instances\n[3] Exit\n") + match user_choice: + case "1": + s3_menu() + case "2": + ec2_menu() + case "3": + break + case default: + print("Invalid option. Please select again.") + + + + +def main(): + menu() +if __name__ == "__main__": + main() \ No newline at end of file From 57306008942f0b9902b96e8fdd0c5d8eee90d852 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=99=D7=95=D7=A0=D7=AA=D7=9F=20=D7=A8=D7=93=D7=A2=D7=99?= Date: Fri, 14 Feb 2025 17:43:00 +0200 Subject: [PATCH 27/27] Clean version of main in main2 - boto3lab --- boto3lab/main2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boto3lab/main2.py b/boto3lab/main2.py index ef2b667a7..e95f40948 100644 --- a/boto3lab/main2.py +++ b/boto3lab/main2.py @@ -7,7 +7,7 @@ def list_bucket(s3_client): for bucket in response["Buckets"]: print(f"Buckets: {bucket['Name']}") except KeyError: - print("no bucket was found") + print("No buckets were found") def create_bucket(s3_client): bucket_name = input("Please chose a name for the new bucket: ") response = s3_client.create_bucket(