Étape 1: Écrire le scénario
Nous commençons. Notre objectif est de créer un programme qui utilise la source de données « Moniteur » aux valeurs du rapport des trois variables : cpu_percent (pour cent du processeur en cours d’utilisation), mem_percent (pour cent de mémoire vive en cours d’utilisation) et disk_percent (pourcentage du disque dur en cours d’utilisation). Pour donner au programme une saveur supplémentaire, nous rechercher ces variables et la source de données par nom et les créer seulement si nécessaire.
La première partie de n’importe quel programme Python est la ligne de shebang ainsi qu’une description du programme dans un docstring. Offrant une bonne description est une pratique saine.
#!/usr/bin/python""" Monitoring Statistics via UbidotsThis script sends CPU, Memory, and Disk Usage statistics toUbidots for visualization and insights. This script is crossplatform and will work on Windows, Linux, and OS X. """
Nous importons des quatre modules. Nous prenons uniquement la fonction gethostname() provenant du module de prise de courant et juste la variable argv du module sys.
from socket import gethostnamefrom sys import argv import psutil import ubidots
Nous allons maintenant définir la méthode principale. Le programme aura un argument de ligne de commande, et ce sera la clé API Ubidots. La dernière ligne ci-dessous instancie une instance de ApiClient que nous allons utiliser pour le reste du programme.
def main(): """Main routine for the script.""" if len(argv) != 2: print "Usage: %s API_KEY" % argv[0] return api = ubidots.ApiClient(argv[1])
Maintenant, nous allons écrire du code pour rechercher la source de données correspondant au nom souhaité de notre source de données: « Monitor ». Si aucune telle source de données n’existe, nous prenons le temps de le créer.
ds_name = gethostname() + " Monitor" ds = None for cur_ds in api.get_datasources(): if cur_ds.name == ds_name: ds = cur_ds break if ds is None: ds = api.create_datasource({"name": ds_name})
Avec notre variable ds créée, nous sera maintenant suivent un modèle semblable de la recherche et la création sinon trouves pour chacune des variables. En dehors de votre fonction principale, définir cette fonction d’assistance :
def get_var_by_name(var_name, ds): """Search for a variable in a data source. If found, returns the variable. If not found, returns None.""" for var in ds.get_variables(): if var.name == var_name: return var return None
Retour dans la fonction main :
var_cpu = get_var_by_name("cpu_percent", ds) var_mem = get_var_by_name("mem_percent", ds) var_disk = get_var_by_name("disk_percent", ds) if var_cpu is None: var_cpu = ds.create_variable({"name": "cpu_percent", "unit": "%"}) if var_mem is None: var_mem = ds.create_variable({"name": "mem_percent", "unit": "%"}) if var_disk is None: var_disk = ds.create_variable({"name": "disk_percent", "unit": "%"})
Maintenant, à la fin de notre fonction principale, nous allons faire les appels appropriés aux fonctions dans le module psutil pour enregistrer la valeur. Le code ci-dessous examine toutes les partitions disponibles et choisit le premier rapport sur.
# Utilize the psutil module to send values to Ubidots. first_mnt = psutil.disk_partitions(all=False)[0].mountpoint var_cpu.save_value({"value": psutil.cpu_percent(interval=1)}) var_mem.save_value({"value": psutil.virtual_memory().percent}) var_disk.save_value({"value": psutil.disk_usage(first_mnt).percent})