Stap 1: Het schrijven van het script
Laten we beginnen. Ons doel is het creëren van een programma dat gebruikmaakt van de gegevensbron "Monitor" verslag waarden van drie variabelen: cpu_percent (procent van de CPU in gebruik), mem_percent (procent van RAM in gebruik), en disk_percent (procent van de vaste schijf in gebruik). Als u wilt geven het programma een extra smaak, wij zoeken voor deze variabelen en de gegevensbron met de naam, en ze alleen maken als nodig.
Het eerste deel van een Python programma is de keet lijn en een beschrijving van het programma in een docstring. Voorzien van een goede is beschrijving gezonde praktijk.
#!/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. """
Wij importeren vier modules. Wij nemen enkel de gethostname() functie van de socket-module, en gewoon de argv variabele van de sys-module.
from socket import gethostnamefrom sys import argv import psutil import ubidots
Laten we nu definiëren de belangrijkste methode. Het programma duurt één opdrachtregelargument, en zal zij de Ubidots API-sleutel. De laatste regel hieronder instantieert een ApiClient exemplaar dat we voor de rest van het programma gebruiken zullen.
def main(): """Main routine for the script.""" if len(argv) != 2: print "Usage: %s API_KEY" % argv[0] return api = ubidots.ApiClient(argv[1])
Nu zullen we het schrijven van code om te zoeken naar de gegevensbron dat overeenkomt met de gewenste naam van onze gegevensbron: "Monitor." Als er geen dergelijke gegevensbron bestaat, nemen we de tijd om het te maken.
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})
Met onze ds-variabele gemaakt, wij zal nu volgen een vergelijkbaar patroon van het zoeken en maken als deze niet wordt gevonden voor elk van de variabelen. Buiten uw belangrijkste functie, door deze helper functie te definiëren:
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
Terug in de main functie:
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": "%"})
Nu aan het einde van onze belangrijkste functie, zullen we passende aanroepen van functies in de module psutil om de waarde te slaan. De onderstaande code kijkt naar alle fysieke partities beschikbaar, en het eerste verslag op kiest.
# 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})