-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver_metrics.py
More file actions
52 lines (43 loc) · 2.22 KB
/
server_metrics.py
File metadata and controls
52 lines (43 loc) · 2.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from argparse import ArgumentParser
from pyVmomi import vim
import socket
from data_retriever.dto import result_message, server_metrics_info, output
from data_retriever.vm_ware_connection import VMwareConnection
def server_metrics(moid: str, ip: str, user: str, password: str, port: int) -> dict:
"""
Retrieve metrics of a server from the VCenter
Args:
moid (str): The Managed Object ID of the server to get metrics from
ip (str): The ip of the VCenter to connect to
user (str): The username of the VCenter to connect to
password (str): The password of the VCenter to connect to
port (int): The port to use to connect to the VCenter
Returns:
dict: A dictionary formatted for json dump containing the server metrics (server_metrics_info()), or an error message (result_message())
"""
conn = VMwareConnection()
try:
conn.connect(ip, user, password, port=port)
host = conn.get_host_system(moid)
if not host:
return result_message("Server not found", 404)
return server_metrics_info(host)
except vim.fault.InvalidLogin:
return result_message("Invalid credentials", 401)
except (vim.fault.NoCompatibleHost, vim.fault.InvalidHostState, OSError, socket.error):
return result_message("Host is unreachable", 404)
except vim.fault.VimFault:
return result_message(f"Can't get metrics from Server '{moid}'", 403)
except Exception as err:
return result_message(str(err), 400)
finally:
conn.disconnect()
if __name__ == "__main__":
parser = ArgumentParser(description="Récupérer les métriques d'un serveur")
parser.add_argument("--moid", required=True, help="Le Managed Object ID du serveur'")
parser.add_argument("--ip", required=True, help="Adresse IP du vCenter")
parser.add_argument("--user", required=True, help="Nom d'utilisateur du vCenter")
parser.add_argument("--password", required=True, help="Mot de passe de l'utilisateur du vCenter")
parser.add_argument("--port", type=int, default=443, help="Port du vCenter (optionnel, 443 par défaut)")
args = parser.parse_args()
output(server_metrics(args.moid, args.ip, args.user, args.password, args.port))