def config(): if not auth.user: redirect(URL(c='default',f='index')) configuracion=Config(cdb) configuracion.loadConfig() form=SQLFORM.factory( Field('m_server',type='string', label="Servidor correo (nombre:puerto)", length=50, default=configuracion.mail_server), Field('m_sender',type='string', label="Email de envio" , length=50, default=configuracion.mail_sender), Field('m_user', type='string', label="Usuario correo", length=50, default=configuracion.mail_user), Field('m_password',type='string',label="Contraseña correo" , length=30, default=configuracion.mail_password), Field ('m_receiver',type='string', label="Email receptor", length=50, default=configuracion.mail_receiver), Field ('a_teclado',type='boolean', label="Alertar teclado thinclients", length=50, default=True if configuracion.alert_teclado==1 else False), Field ('a_raton',type='boolean', label="Alertar raton thinclients", length=50, default=True if configuracion.alert_raton==1 else False), Field ('a_apagado',type='boolean', label="Alertar thinclients apagados", length=50, default=True if configuracion.alert_apagado==1 else False), Field ('l_email',type='boolean', label="Envio de correo resumen", length=50, default=True if configuracion.list_email==1 else False) , submit_button='Guardar Datos Configuración') if form.accepts(request.vars, session): response.flash = 'Procesando datos, espere' configuracion.saveConfig(form.vars.m_server,form.vars.m_sender, form.vars.m_user, form.vars.m_password, form.vars.m_receiver, form.vars.a_teclado, form.vars.a_raton, form.vars.a_apagado, form.vars.l_email) redirect( URL( 'gestion', 'config')) return dict(form=form)
def getConfigData(): configuracion=Config(cdb) configuracion.loadConfig() response=configuracion.getConfigData() return dict(response=response)
def docheckapagado(host): ahora=datetime.datetime.today() #Ver si hay que mandar emails, siempre que traiga informacion configuracion=Config(cdb) configuracion.loadConfig() if (configuracion.alert_apagado==1): enviar_mensaje=False ultimos_estados=cdb(cdb.thinclients.host==host).select(orderby=~cdb.thinclients.time, limitby=(0, 2)).as_list() #Si hay algun estado anterior.... miramos si ha pasado de encendido->apagado. if len(ultimos_estados)>0 : #Si el ultimo vale 0, estaba apagado. if (ultimos_estados[0]["raton"]=="0"): if len(ultimos_estados)>1: #Si hay penultimo #Si no vale 0, estaba encendido y ahora apagado. Hay que avisar de que está apagado. if (ultimos_estados[1]["raton"]!="0"): enviar_mensaje=True else: #Si no hay penúltimo, avisamos de que está apagado. enviar_mensaje=True if enviar_mensaje: mensaje="El thinclient "+host+" parece apagado o bloqueado ("+ahora.strftime("%d/%m/%Y %H:%M")+")\n\n" configuracion.enviaMail('Aviso de thinclient '+host+" apagado", mensaje) return "OK"
def doactualizahost(host,tipohost,ultimoarranque,ultimopkgsync,estadopaquetes): ahora=datetime.datetime.today() fila=cdb((cdb.maquinas.host==host) & (cdb.maquinas.tipohost==tipohost)).select().last() if fila==None: if estadopaquetes!='': cdb.maquinas.insert(host=host,tipohost=tipohost,ultimorefresco=ahora,ultimoarranque=ultimoarranque, ultimopkgsync=ultimopkgsync,estadopaquetes=estadopaquetes) else: cdb.maquinas.insert(host=host,tipohost=tipohost,ultimorefresco=ahora,ultimoarranque=ultimoarranque) else: if fila.alert==1 and fila.ultimoarranque.strftime("%Y-%m-%d %H:%M")!=ultimoarranque[0:16]: # Si está activada la alerta para ese host y es un nuevo arranque, se envia el mensaje de correo de alerta de encendido. # Para ver si es un nuevo arranque, comparamos las fechas de ultima arranque, desechando los segundos. configuracion=Config(cdb) configuracion.loadConfig() mensaje="Alerta: ha sido encendido el host monitorizado "+host+" con fecha "+ahora.strftime("%d/%m/%Y %H:%M")+"\n" configuracion.enviaMail("Encendido de "+host, mensaje) if estadopaquetes!='': fila.update_record(ultimorefresco=ahora, tipohost=tipohost, ultimopkgsync=ultimopkgsync, ultimoarranque=ultimoarranque, estadopaquetes=estadopaquetes) else: fila.update_record(ultimorefresco=ahora, tipohost=tipohost, ultimoarranque=ultimoarranque) return "OK"
def getConfigData(): configuracion = Config(cdb) configuracion.loadConfig() response = configuracion.getConfigData() return dict(response=response)
def sendTestMail(): configuracion = Config(cdb) configuracion.loadConfig() return configuracion.enviaMail( 'Desde controlies', 'Este es un mensaje enviado desde Controlies. Si le ha llegado es que todo esta correcto.' )
def setConfigData(): configuracion=Config(cdb) configuracion.loadConfig() import gluon.contrib.simplejson #Los datos vienen en un string json y hay que reconstituirlos sobre un diccionario-lista python. data = gluon.contrib.simplejson.loads(request.vars["data"]) try: a_teclado=False if str(data['a_teclado']) == "a_teclado": a_teclado=True except LookupError: pass try: a_raton=False if str(data['a_raton']) == "a_raton": a_raton=True except LookupError: pass try: a_apagado=False if str(data['a_apagado']) == "a_apagado": a_apagado=True except LookupError: pass try: l_email=False if str(data['l_email']) == "l_email": l_email=True except LookupError: pass configuracion.saveConfig(data['m_server'], data['m_sender'], data['m_user'], data['m_password'], data['m_receiver'], a_teclado, a_raton, a_apagado, l_email, data['horarios']) response = "OK" return dict(response = response)
def doactualizathinclient(host, raton, teclado): ahora=datetime.datetime.today() #Ver si hay que mandar emails, siempre que traiga informacion configuracion=Config(cdb) configuracion.loadConfig() if (raton=="1" or teclado=="1") and (configuracion.alert_teclado==1 or configuracion.alert_raton==1): #Busca ultimo estado que no sea "apagado", para comparar ultimo_estado=cdb((cdb.thinclients.host==host) & (cdb.thinclients.raton!="0") ).select(orderby=~cdb.thinclients.time).first() if ultimo_estado==None: ult_teclado="2" ult_raton="2" else: ult_teclado=ultimo_estado.teclado ult_raton=ultimo_estado.raton if (teclado=="1" and ult_teclado=="2" and configuracion.alert_teclado==1) or (raton=="1" and ult_raton=="2" and configuracion.alert_raton==1): mensaje="Aviso fallo teclado/ratón en thinclient "+host+" ("+ahora.strftime("%d/%m/%Y %H:%M")+")\n\n" est_teclado="Conectado" if teclado=="2" else "Desconectado" est_raton="Conectado" if raton=="2" else "Desconectado" mensaje=mensaje+"\tTeclado: "+est_teclado+"\n" mensaje=mensaje+"\tRaton: "+est_raton+"\n" configuracion.enviaMail('Aviso de thinclient '+host, mensaje) fila=cdb(cdb.thinclients.host==host).select(orderby=~cdb.thinclients.time).first() if fila==None: cdb.thinclients.insert(host=host,time=ahora,raton=raton,teclado=teclado) else: if fila.raton == "0": hora1=fila.time hora2=ahora diferencia=hora2-hora1 if diferencia.seconds > 300 : #Si han pasado mas de 5 minutos es otro encendido cdb.thinclients.insert(host=host,time=ahora,raton=raton,teclado=teclado) else: fila.update_record(time=ahora, raton=raton, teclado=teclado) else: cdb.thinclients.insert(host=host,time=ahora,raton=raton,teclado=teclado) return "OK"
def setConfigData(): configuracion = Config(cdb) configuracion.loadConfig() import gluon.contrib.simplejson #Los datos vienen en un string json y hay que reconstituirlos sobre un diccionario-lista python. data = gluon.contrib.simplejson.loads(request.vars["data"]) try: a_teclado = False if str(data['a_teclado']) == "a_teclado": a_teclado = True except LookupError: pass try: a_raton = False if str(data['a_raton']) == "a_raton": a_raton = True except LookupError: pass try: a_apagado = False if str(data['a_apagado']) == "a_apagado": a_apagado = True except LookupError: pass try: l_email = False if str(data['l_email']) == "l_email": l_email = True except LookupError: pass configuracion.saveConfig(data['m_server'], data['m_sender'], data['m_user'], data['m_password'], data['m_receiver'], a_teclado, a_raton, a_apagado, l_email, data['horarios']) response = "OK" return dict(response=response)
def sendTestMail(): configuracion=Config(cdb) configuracion.loadConfig() return configuracion.enviaMail('Desde controlies', 'Este es un mensaje enviado desde Controlies. Si le ha llegado es que todo esta correcto.')
def sendReportMail(): configuracion=Config(cdb) configuracion.loadConfig() return configuracion.sendListReport()
def sendReportMail(): configuracion = Config(cdb) configuracion.loadConfig() return configuracion.sendListReport()
def config(): if not auth.user: redirect(URL(c='default', f='index')) configuracion = Config(cdb) configuracion.loadConfig() form = SQLFORM.factory( Field('m_server', type='string', label="Servidor correo (nombre:puerto)", length=50, default=configuracion.mail_server), Field('m_sender', type='string', label="Email de envio", length=50, default=configuracion.mail_sender), Field('m_user', type='string', label="Usuario correo", length=50, default=configuracion.mail_user), Field('m_password', type='string', label="Contraseña correo", length=30, default=configuracion.mail_password), Field('m_receiver', type='string', label="Email receptor", length=50, default=configuracion.mail_receiver), Field('a_teclado', type='boolean', label="Alertar teclado thinclients", length=50, default=True if configuracion.alert_teclado == 1 else False), Field('a_raton', type='boolean', label="Alertar raton thinclients", length=50, default=True if configuracion.alert_raton == 1 else False), Field('a_apagado', type='boolean', label="Alertar thinclients apagados", length=50, default=True if configuracion.alert_apagado == 1 else False), Field('l_email', type='boolean', label="Envio de correo resumen", length=50, default=True if configuracion.list_email == 1 else False), submit_button='Guardar Datos Configuración') if form.accepts(request.vars, session): response.flash = 'Procesando datos, espere' configuracion.saveConfig(form.vars.m_server, form.vars.m_sender, form.vars.m_user, form.vars.m_password, form.vars.m_receiver, form.vars.a_teclado, form.vars.a_raton, form.vars.a_apagado, form.vars.l_email) redirect(URL('gestion', 'config')) return dict(form=form)