Bygga en plattformsoberoende System Monitor med Ubidots (1 / 3 steg)
Steg 1: Skriva skriptet
Låt oss börja. Vårt mål är att skapa ett program som använder datakällan "Övervaka" till rapporten värden av tre variabler: cpu_percent (procent av CPU används), mem_percent (procent av RAM som används), och disk_percent (procent av hårddisk används). För att ge programmet några extra smak, vi söker efter dessa variabler och datakällan vid namn, och skapa dem om nödvändigt.
Den första delen av Python program är raden schabraket och en beskrivning av programmet i en docstring. Att ge en bra är Beskrivning friska.
#! / usr/bin/python
"""
Övervakning statistik via Ubidots
Detta script skickar CPU, minne och diskanvändning statistik toUbidots för visualisering och insikter. Detta skript är plattformsoberoende och fungerar på Windows, Linux och OS X.
"""
Vi importerar fyra moduler. Vi tar bara gethostname() funktion från modulen uttaget, och bara argv variabeln från sys-modulen.
från uttaget importera gethostname
från sys importera argv
importera psutil
importera ubidots
Låt oss nu definiera den huvudsakliga metoden. Programmet kommer att ta ett kommandoradsargument och man Ubidots API-nyckel. Den sista raden nedan instansierar en ApiClient-instans som vi kommer att använda för resten av programmet.
def main ():
"" "Main rutin för skriptet." ""
om len(argv)! = 2:
skriva ut "användning: %s API_KEY" % argv [0]
returnera
API: t = ubidots. ApiClient(argv[1])
Nu skriver vi lite kod till söka för datakällan på önskat namn på vår datakälla: "Monitor." Om ingen sådan datakälla finns, tar vi tid att skapa den.
ds_name = gethostname() + "Monitor"
DS = ingen
för cur_ds i api.get_datasources():
om cur_ds.name == ds_name:
DS = cur_ds
Break
om ds ingen är:
DS = api.create_datasource ({"namn": ds_name})
Med våra ds variabel skapad, kommer vi nu följer ett liknande mönster av att söka och skapa om inte hittade för var och en av variablerna. Utanför din huvudsakliga funktion, definiera denna hjälpare funktion:
def get_var_by_name (var_name, ds):
"" "Sök för en variabel i en datakälla. Om hittade, returnerar variabeln. Om inte hittas, returnerar inget."" "
för var i ds.get_variables():
om var.name == var_name:
tillbaka var
returnera ingen
Tillbaka i den huvudsakliga funktionen:
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)
om var_cpu ingen är:
var_cpu = ds.create_variable ({"namn": "cpu_percent",
"enhet": "%"})
om var_mem ingen är:
var_mem = ds.create_variable ({"namn": "mem_percent",
"enhet": "%"})
om var_disk ingen är:
var_disk = ds.create_variable ({"namn": "disk_percent",
"enhet": "%"})
Nu i slutet av våra huvudsakliga funktion, kommer vi att lämpliga anrop till funktioner i modulen psutil att spara värdet. Koden nedan ser på alla fysiska tillgängliga partitioner, och väljer först betänkande på.
# Utnyttja psutil modulen för att skicka värden till Ubidots.
first_mnt = psutil.disk_partitions(all=False) [0] .mountpoint
var_cpu.save_value ({"värde":
psutil.cpu_percent(Interval=1)})
var_mem.save_value ({"värde":
psutil.virtual_memory().percent})
var_disk.save_value ({"värde":
psutil.disk_usage(first_mnt).percent})