100 lines
4.3 KiB
Python
100 lines
4.3 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
|
|
import sys
|
|
|
|
|
|
# --------------------------------------------------------------------------------------------
|
|
# VARIABLES
|
|
# --------------------------------------------------------------------------------------------
|
|
|
|
repo_path = '/opt/opengnsys/ogrepository/images/' # No borrar la barra final
|
|
|
|
|
|
# --------------------------------------------------------------------------------------------
|
|
# FUNCTIONS
|
|
# --------------------------------------------------------------------------------------------
|
|
|
|
|
|
def get_udpsender_processes():
|
|
""" Busca procesos de "udp-sender", y si los encuentra retorna el pid, el ID, 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, el nombre de la imagen (con subdirectorio de OU, si es el caso), y la ruta de la imagen de cada uno:
|
|
for process in process_list:
|
|
pid = process.split()[1]
|
|
image_name = process.split(repo_path)[1]
|
|
image_path = process.split('--file ')[1]
|
|
# Obtenemos el ID de la imagen actual:
|
|
with open(f"{image_path}.full.sum", 'r') as file:
|
|
image_id = file.read().strip('\n')
|
|
# Creamos una clave en el diccionario de resultados, correspondiente a la imagen actual:
|
|
result_dict[pid] = {'image_id':image_id, 'image_name':image_name}
|
|
# Retornamos el diccionario de resultados:
|
|
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, y salimos del script:
|
|
if results == "udp-sender process not found":
|
|
print("No UDPcast active transmissions")
|
|
sys.exit(1)
|
|
elif results == "Unexpected error":
|
|
print("Unexpected error checking UDPcast transmissions")
|
|
sys.exit(2)
|
|
# 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()
|
|
|
|
# --------------------------------------------------------------------------------------------
|