ogrepository/bin/getUDPcastInfo.py

92 lines
3.7 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Este script busca procesos activos de "udp-sender", y si encuentra alguno devuelve el pid y la imagen asociada de cada uno de ellos, en una estructura JSON.
Si no encuentra ninguno, o si se produce un error, imprime un mensaje informativo.
No recibe ningún parámetro.
En la práctica, permite comprobar las transminisones UDPcast activas, porque cuando finalizan también finaliza el proceso asociado.
"""
# --------------------------------------------------------------------------------------------
# IMPORTS
# --------------------------------------------------------------------------------------------
import subprocess
import json
# --------------------------------------------------------------------------------------------
# VARIABLES
# --------------------------------------------------------------------------------------------
repo_path = '/opt/opengnsys/images/'
# --------------------------------------------------------------------------------------------
# FUNCTIONS
# --------------------------------------------------------------------------------------------
def get_udpsender_processes():
""" Busca procesos de "udp-sender", y si los encuentra retorna el pid y la imagen asociada de cada uno de ellos, en un diccionario.
Si no encuentra ningun proceso, o si se produce un error, retorna un mensaje.
"""
try:
# Obtenemos todos los procesos, y almacenamos la salida y los errores:
result = subprocess.Popen(['ps', '-aux'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8')
out, error = result.communicate()
# Almacenamos en una lista los procesos que contengan "udp-sender":
process_list = [line for line in out.split('\n') if 'udp-sender' in line]
# Si hemos encontrado procesos de udp-sender creamos un diccionario para almacenarlos:
if process_list != []:
result_dict = {}
# Iteramos los procesos y extraemos el pid y el nombre de la imagen de cada uno,
# los almacenamos en el diccionario, y retornamos este:
for process in process_list:
pid = process.split()[1]
image = process.split(repo_path)[1]
result_dict[pid] = {'image':image}
return result_dict
# Si no hemos encontrado procesos de udp-sender retrornamos un mensaje:
else:
return "udp-sender process not found"
# Si se ha producido una excepción, retornamos un mensaje:
except Exception:
return "Unexpected error"
# --------------------------------------------------------------------------------------------
# MAIN
# --------------------------------------------------------------------------------------------
def main():
"""
"""
# Obtenemos información sobre los procesos de udp-sender:
results = get_udpsender_processes()
# Si no hay procesos activos, o si se ha producido un error, imprimimos un mensaje explicativo:
if results == "udp-sender process not found":
print("No UDPcast active transmissions")
elif results == "Unexpected error":
print("Unexpected error checking UDPcast transmissions")
# Si hay procesos activos, convertimos el diccionario de resultados a JSON, e imprimimos este:
else:
json_data = json.dumps(results, indent=4)
print(json_data)
# --------------------------------------------------------------------------------------------
if __name__ == "__main__":
main()
# --------------------------------------------------------------------------------------------