Files
powerfulcomputermanager/client/control.pyw
2019-06-11 11:14:38 +02:00

200 lines
9.5 KiB
Python

#!/usr/bin/python3
# Version 0.5
import easygui
import configparser
import json
import requests
import subprocess, platform
def ping(host):
"""
Returns True if host (str) responds to a ping request.
Remember that a host may not respond to a ping (ICMP) request even if the host name is valid.
"""
# Option for the number of packets as a function of
param = '-n' if platform.system().lower()=='windows' else '-c'
# Building the command. Ex: "ping -c 1 google.com"
command = ['ping', param, '1', host]
return subprocess.call(command) == 0
## sendmenudot, returns of choice of a series of choices that has "." as delimiter inside it (For returning index)
def sendmenudot(text,title,choices):
menu = easygui.choicebox(text,title,choices)
if menu is not None:
return menu.split('.')[0]
else:
return menu
## showchoicesapi, apiurl has to have all (Inlcuding server part)
def showchoicesapi(text,title,apiurl,field='Name'):
try:
jsonobj = json.loads(requests.get(apiurl).text)
listitems = []
for ite in jsonobj:
listitems.append(ite[field])
return easygui.choicebox(text,title,listitems)
except:
easygui.msgbox(msg='Error en la aplicación al consultar', title=title, ok_button='OK')
return None
def sendsettoapi(suburl,goodtext): # Send a add/del/modify to API. Doesn't return more than "Valid" and "Not valid"
global c_server
try:
jsonobj = json.loads(requests.get(c_server+suburl).text)
if jsonobj is not None and jsonobj['RESULT'] is not None and jsonobj['RESULT'] == 'ERROR':
if jsonobj['TEXT']:
easygui.msgbox(jsonobj['TEXT'],"Error","Ok")
else:
easygui.msgbox("Error no especificado","Error","Ok")
return 1
else:
easygui.msgbox(goodtext,"Exito","Ok")
return 0
except:
easygui.msgbox("Error inesperado","Error","Ok")
return 1
config = configparser.ConfigParser()
config.read('configpcm.ini')
c_server = config['General']['server']
c_resources = config['General']['resources'].replace('\\\\','\\')
def menuprinc():
menu = sendmenudot("Menú principal","Seleccione opción",['1.Equipos','2.Grupos','3.Recetas','4.Reportes/Listados'])
if menu == '1':
mcomputers()
elif menu == '2':
mgroups()
elif menu == '3':
mcooks()
elif menu == '4':
mreports()
def mcomputers():
global c_server
menu = sendmenudot("Menú equipos","Seleccione opción",['1.Añadir equipo','2.Borrar equipo','3.Añadir equipo a un grupo','4.Listado de equipos'])
if menu == '1':
newcomputer = easygui.enterbox("Nombre del nuevo equipo","Añadir equipo")
if easygui.ynbox("Nombre del equipo: '"+newcomputer+"'. ¿Seguro?","Añadir equipo"):
sendsettoapi("/add/computer?ComputerName="+newcomputer,"Equipo añadido a la base de datos")
elif menu == '2':
whatc = showchoicesapi("Seleccione equipo a borrar","Borrar equipo",c_server+"/get/computers")
if whatc is not None and easygui.ynbox("Se va a borrar el equipo '"+whatc+"'. ¿Seguro?","Borrar equipo"):
sendsettoapi("/del/computer?ComputerName="+whatc,"Equipo borrado")
elif menu == '3':
m_addcomputergroup()
elif menu == '4':
showchoicesapi("Lista de equipos","Listado de equipos",c_server+"/get/computers")
elif menu is None:
menuprinc()
return
mcomputers()
def mgroups():
global c_server
menu = sendmenudot("Menú grupos","Seleccione opción",['1.Añadir grupo','2.Borrar grupo','3.Añadir equipo a un grupo','4.Quitar equipo de un grupo','5.Listado de grupos','6.Listado de equipos de un grupo'])
if menu == '1':
newgroup = easygui.enterbox("Nombre del nuevo grupo","Añadir grupo")
if easygui.ynbox("Nombre del grupo: '"+newgroup+"'. ¿Seguro?","Añadir grupo"):
sendsettoapi("/add/group?GroupName="+newgroup,"Grupo añadido a la base de datos")
elif menu == '2':
group = showchoicesapi("Lista de grupos. Selecciona uno para borrarlo","Borrar grupo",c_server+"/get/groups",'Name')
if group is not None:
if easygui.ynbox("Borrar grupo '"+group+"'. ¿Seguro?","Borrar grupo"):
sendsettoapi("/del/group?GroupName="+group,"Grupo borrado")
elif menu == '3':
m_addcomputergroup()
elif menu == '4':
m_delcomputergroup()
elif menu == '5':
showchoicesapi("Listado de grupos","Listado de grupos",c_server+"/get/groups",field='Name')
elif menu == '6':
group = showchoicesapi("Lista de grupos","Listado de equipos de un grupo",c_server+"/get/groups")
showchoicesapi("Lista de equipos del grupo "+group,"Listado de equipos de un grupo",c_server+"/get/computersgrp?GroupName="+group)
elif menu is None:
menuprinc()
return
mcomputers()
def mcooks():
global c_server
global c_resources
menu = sendmenudot("Menú recetas","Seleccione opción",['1.Detalles de una receta','2.Renombrar receta','3.Añadir receta a un grupo','4.Eliminar receta de un grupo','5.Grupos de una receta'])
if menu == '1':
cook = showchoicesapi("Lista de recetas implementadas en algún grupo. Selecciona una para ver sus datos","Detalles de una receta",c_server+"/get/cookall",'CookName')
if cook is not None:
showchoicesapi("Lista de grupos de la receta "+cook,"Listado de grupos de una receta",c_server+"/get/grpcook?CookName="+cook)
elif menu == '2':
cook = showchoicesapi("Lista de recetas implementadas en algún grupo. Selecciona una para renombrarla. Si la receta no está en ningún grupo, se puede renombrar desde fuera.","Renombrar receta",c_server+"/get/cookall",'CookName')
if cook is not None:
newname = easygui.enterbox("Nombre de la nueva receta","Renombrar receta")
if newname is not None and easygui.ynbox("Cambiar nombre de la receta '"+cook+"' por '"+newname+"'. ¿Seguro?","Renombrar receta"):
sendsettoapi("/upd/cookname?CookName="+cook+"&CookNewName="+newname,"Receta cambiada de nombre")
elif menu == '3':
cook = easygui.enterbox("Nombre de la receta","Añadir receta a un grupo")
group = showchoicesapi("Lista de grupos existentes","Listado de grupos",c_server+"/get/groups")
if easygui.ynbox("Añadir la receta "+cook+" al grupo '"+group+"'. ¿Seguro?","Añadir receta a un grupo"):
sendsettoapi("/add/cookgrp?CookName="+cook+"&GroupName="+group,"Receta añadida al grupo")
elif menu == '4':
cook = showchoicesapi("Lista de recetas implementadas en algún grupo. Selecciona una para elegir un grupo de esa receta para borrar. Si la receta no está en ningún grupo, no saldrá.","Eliminar receta de un grupo",c_server+"/get/cookall",'CookName')
if cook is not None:
group = showchoicesapi("Lista de grupos que tienen esa receta. Selecciona el grupo a quitar","Eliminar receta de un grupo",c_server+"/get/grpcook?CookName="+cook,'Name')
if group is not None and easygui.ynbox("Se va a quitar la receta "+cook+" del grupo "+group+". ¿Seguro?","Eliminar receta de un grupo"):
sendsettoapi("/del/cookgrp?CookName="+cook+"&GroupName="+group,"Receta quitada del grupo")
elif menu == '5':
cook = showchoicesapi("Lista de recetas implementadas en algún grupo. Selecciona una para elegir un grupo de esa receta para borrar. Si la receta no está en ningún grupo, no saldrá.","Eliminar receta de un grupo",c_server+"/get/cookall",'CookName')
if cook is not None:
showchoicesapi("Lista de grupos que tienen esa receta. Selecciona el grupo a quitar","Eliminar receta de un grupo",c_server+"/get/grpcook?CookName="+cook,'Name')
elif menu is None:
menuprinc()
return
mcooks()
def mreports():
global c_server
global c_resources
menu = sendmenudot("Menú reportes","Seleccione opción",['1.Listado de equipos','2.Listado de grupos','3.Equipos y recetas de un grupo','4.Grupos de una receta'])
if menu == '1': #Listado de equipos
showchoicesapi("Lista de equipos","Listado de equipos",c_server+"/get/computers")
elif menu == '2': #Listado de grupos
showchoicesapi("Lista de grupos","Listado de grupos",c_server+"/get/groups")
elif menu == '3':
group = showchoicesapi("Lista de grupos","Listado de grupos",c_server+"/get/groups")
showchoicesapi("Lista de equipos del grupo "+group,"Listado de equipos y recetas de un grupo",c_server+"/get/computersgrp?GroupName="+group)
showchoicesapi("Lista de recetas del grupo "+group,"Listado de equipos y recetas de un grupo",c_server+"/get/cookgrp?GroupName="+group,'CookName')
elif menu == '4':
cook = showchoicesapi("Lista de recetas con grupo. Selecciona una para ver sus grupos","Listado de grupos de una receta",c_server+"/get/cookall",'CookName')
if cook is not None:
showchoicesapi("Lista de grupos de la receta "+cook,"Listado de grupos de una receta",c_server+"/get/grpcook?CookName="+cook)
elif menu is None:
menuprinc()
return
mreports()
def m_addcomputergroup():
whatc = howchoicesapi("Seleccione equipo a añadir a un grupo","Añadir Equipo a grupo",c_server+"/get/computers")
if whatc is None:
return
whatg = showchoicesapi("Seleccione grupo a ser añadido","Añadir Equipo a grupo",c_server+"/get/groups")
if whatg is None:
return
sendsettoapi("/add/grpcomputer?ComputerName="+whatc+"&GroupName="+whatg,"Equipo añadido al grupo")
def m_delcomputergroup():
group = showchoicesapi("Seleccione grupo del que quitar un equipo","Borrar equipo de un grupo",c_server+"/get/groups")
if group is None:
return
computer = showchoicesapi("Seleccione grupo a ser quitado","Borrar equipo de un grupo",c_server+"/get/computersgrp?GroupName="+group)
if computer is None:
return
if easygui.ynbox("Quitar el equipo "+computer+" del grupo '"+group+"'. ¿Seguro?","Borrar equipo de un grupo"):
sendsettoapi("/del/grpcomputer?ComputerName="+computer+"&GroupName="+group,"Equipo quitado del grupo")
menuprinc()