# PluginTools # agents # Global variables **Descripción** Las siguientes variables pueden modificarse de modo global.
**Nombre****Descripción****Valor por defecto**
agents_group_name
Grupo de destino de Pandora FMS''
interval
Intervalo de monitorización del agente300
Para modificar las variables globales use la función : [set\_global\_variable](https://pandorafms.com/guides/public/books/plugintools/page/set-global-variable) **Versión** - 1.0.0 # class Agent **Descripción** Clase básica de agente. Requiere parámetros de agente (config {diccionario}) y definición de módulo (modules\_def \[lista de diccionarios\]) **Ejemplo** ``` import pandoraPlugintools as pt # Create an instance of the Agent class agent_instance = pt.agents.Agent() ``` ### **Funciones** ##### **update\_config**
**Descripción** Actualiza los ajustes de configuración con nuevos valores. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
configdictSiUn diccionario que contiene las claves de configuración y sus nuevos valores
**Versión**
- 1.0.0
**Ejemplo** ``` # Update agent configuration new_config = { "agent_name": "UpdatedAgentName", "description": "Updated agent description" } agent_instance.update_config(new_config) ``` ##### **get\_config** **Descripción** Recupera los ajustes de configuración actuales. **Return**
**Tipo****Descripción**
dictUn diccionario que contiene los ajustes de configuración actuales
**Versión**
- 1.0.0
**Ejemplo** ``` # Get current agent configuration current_config = agent_instance.get_config() print("Current Agent Configuration:", current_config) ``` ##### **add\_module** **Descripción** Añade un nuevo módulo a la lista de módulos. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
moduledictSiUn diccionario que contiene información sobre el módulo
**Return**
**Tipo**
None
**Versión**
- 1.0.0
**Ejemplo** ``` # Define a module and add it to the agent module_data = { "name": "HostAlive", "type": "generic_proc", "value": 1 } agent_instance.add_module(module_data) ``` ##### **del\_module** **Descripción** Elimina un módulo basándose en su nombre **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
module\_namestrSiEl nombre del módulo a eliminar
**Return**
**Tipo**
None
**Versión**
- 1.0.0
**Ejemplo** ``` # Delete a module based on its name module_name_to_delete = "HostAlive" agent_instance.del_module(module_name_to_delete) ``` **update\_module** **Descripción** Actualiza un módulo basándose en su nombre **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
module\_namestrSiEl nombre del módulo a actualizar
moduledictSiUn diccionario que contiene la información actualizada del módulo
**Return**
**Tipo**
None
**Versión**
- 1.0.0
**Ejemplo** ``` # Update a module based on its name module_name_to_update = "HostAlive" updated_module_data = { "type": "generic_data", "value": 1 } agent_instance.update_module(module_name_to_update, updated_module_data) ``` ##### **get\_module** **Descripción** Recupera información del módulo en base a su nombre **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
module\_namestrSIEl nombre del módulo a recuperar
**Return**
**Tipo****Descripción**
dictUn diccionario que contiene información del módulo si se encuentra, de lo contrario un diccionario vacío
**Versión**
- 1.0.0
**Ejemplo** ``` # Get module information by name module_info = agent_instance.get_module("HostAlive") print("Module Information:", module_info) ``` ##### **get\_modules\_def** **Descripción** Recupera las definiciones de todos los módulos añadidos. **Return**
**Tipo****Descripción**
dictUn diccionario que contiene las definiciones de todos los módulos añadidos
**Versión**
- 1.0.0
**Ejemplo** ``` # Get definitions of all added modules all_module_defs = agent_instance.get_modules_def() print("All Module Definitions:", all_module_defs) ``` ##### **add\_log\_module** **Descripción** Añade un nuevo módulo de registro a la lista de módulos de registro. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
log\_moduledictSiUn diccionario que contiene información sobre el módulo de registro
**Return**
**Tipo**
None
**Versión**
- 1.0.0
**Ejemplo** ``` # Define a log module and add it to the agent log_module_data = { "source": "LogSource", "type": "log", "value": "El host no es accesible" } agent_instance.add_log_module(log_module_data) ``` ##### **get\_log\_modules\_def** **Descripción**
Recupera las definiciones de todos los módulos de registro añadidos
**Return**
**Tipo****Descripción**
dict Un diccionario que contiene las definiciones de todos los módulos de registro añadidos
**Versión**
- 1.0.0
**Ejemplo** ``` # Get definitions of all added log modules all_log_module_defs = agent_instance.get_log_modules_def() print("All Log Module Definitions:", all_log_module_defs) ``` ##### **print\_xml** **Descripción** Genera y opcionalmente imprime la representación XML del agente. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
print\_flagboolSIUna bandera que indica si imprimir la representación XML
**Return**
**Tipo****Descripción**
strLa representación XML del agente
**Versión**
- 1.0.0
**Ejemplo** ``` # Generate and optionally print the XML representation of the agent xml_representation = agent_instance.print_xml(print_flag=True) print("Agent XML Representation:\n", xml_representation) ``` # set_global_variable **Descripción** Establece el valor de una variable global en el diccionario 'global\_variables'. **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
variable\_namestrSiNombre de la variable a establecer
valueNoneSiValor a asignar a la variable
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt variable_name = "agents_group_name" value = "Servers" pt.agents.set_global_variable(variable_name, value) print(pt.agents._GLOBAL_VARIABLES) ``` # get_global_variable **Descripción** Establece el valor de una variable global en el diccionario 'global\_variables'. **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
variable\_namestrSiNombre de la variable a establecer
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt variable_name = "agents_group_name" value = pt.agents.get_global_variable(variable_name) print(f"{variable_name}: {value}") ``` # get_os **Descripción** Detecta el sistema operativo del sistema. **Return**
**Tipo****Descripción**
strSistema operativo del sistema
**Requisitos** - os **Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt os_name = pt.agents.get_os() print("Operating System:", os_name) ``` # init_agent **Descripción** Inicializa una plantilla de agente con valores por defecto. **Return**
**Nombre****Tipo****Requerido****Descripción**
dictdictNoDiccionario que representa la plantilla de agente con valores por defecto
**Requisitos** - datetime.datetime **Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Example: Initializing an agent template with default values and custom values custom_defaults = { "agent_name": "RockyLinux", "description": "Linux system", "address": "192.168.1.100" } agent_template = pt.agents.init_agent(default_values=custom_defaults) print("Agent Template:", agent_template) ``` # print_agent **Descripción** Imprime el XML del agente. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
agentdictSiDiccionario con la configuración del agente
moduleslistSiLista de módulos
log\_moduleslistNoSirve para añadir módulos de log. Por defecto None
print_flag
bool
No
Sirve para mostrar el XML de los módulos en STDOUT. Por defecto None
**Return**
**Tipo****Descripción**
strDevuelve una cadena en formato XML
**Requisitos** - modules.print\_module - modules.print\_log\_module **Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Example: Creating agent and module data agent_data = { "agent_name": "Debian10", "description": "Linux system", "address": "192.168.1.100" } module_data = { "name": "Ping", "type": "generic_proc", "value": 1, "desc": "Check host alive", } agent_xml_representation = pt.agents.print_agent( agent=agent_data, modules=[module_data], print_flag=True ) print("Agent XML Representation:\n", agent_xml_representation) ``` # modules # init_module **Descripción** Inicializa una plantilla de módulo con valores por defecto. **Parámetros**
**Nombre**
**Tipo**
**Requerido**
**Descripción**
default_values
dict
Si
Módulo en formato dict
**Return**
**Tipo****Descripción**
dictMódulo en formato XML
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define default values to override the template values default_module_values = { "name": "HostAlive", "type": "generic_proc", "value": 1, } # Initialize a module template with default values module_template = pt.modules.init_module(default_module_values) # Print the initialized module template print("Initialized Module Template:", module_template) ``` # print_module **Descripción** Devuelve el módulo en formato XML. **Parámetros**
**Nombre**
**Tipo**
**Requerido**
**Descripción**
module
dict
Si
Módulo en formato dict
print_flag
bool
No
Con True muestra el XML del módulo en STDOUT
**Return**
**Tipo****Descripción**
strMódulo en formato XML
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define module data module_data = { "name": "HostAlive", "type": "generic_proc", "value": 1, "desc": "Check if the host is alive", } # Print module data in XML format without printing to STDOUT module_xml = pt.modules.print_module(module_data, print_flag=False) print("Module XML:\n", module_xml) ``` # init_log_module **Descripción** Inicializa una plantilla de módulo de logs con valores por defecto. **Parámetros**
**Nombre**
**Tipo**
**Requerido**
**Descripción**
default_values
dict
Si
Módulo en formato dict
**Return**
**Tipo****Descripción**
dictMódulo de logs en formato XML
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define default values for the log module template default_log_module_values = { "source": "System", "value": "The host is not accessible", } # Initialize a log module template with default values log_module_template = pt.modules.init_log_module(default_log_module_values) # Print the initialized log module template print("Initialized Log Module Template:", log_module_template) ``` # print_log_module **Descripción** Devuelve el módulo de logs en formato XML. **Parámetros**
**nombre**
**tipo**
**descripción**
module
dict
Módulo en formato dict
print_flag
bool
Si se utiliza muestra el XML de los módulos en STDOUT
**Return**
**tipo****descripción**
strMódulo en formato XML
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define log module data log_module_data = { "source": "System", "value": "The host is not accessible", } # Print the log module in XML format log_module_xml = pt.modules.print_log_module(log_module_data, print_flag=True) # Print the generated log module XML print("Log Module XML:\n", log_module_xml) ``` # transfer # Global variables Es un diccionario de variables con valores por defecto. Las variables que contiene son las siguientes:
**Nombre**
**Descripción**
**Valor por defecto**
transfer_mode
Modo de transferencia, local o tentacle
tentacle
temporalRuta para ficheros temporales
/tmp
data\_dirDirectorio de datos de Pandora FMS
/var/spool/pandora/data_in/
tentacle\_clientRuta del cliente de tentacle
tentacle
tentacle\_ipIp del servidor tentacle al que mandar los datos
127.0.0.1
tentacle\_portPuerto de tentacle
41121
tentacle_extra_opts
Opciones extras de tentacle
''
Para modificar las variables globales use la función : [set\_global\_variable](https://pandorafms.com/guides/public/books/plugintools/page/set-global-variable-577) **Versión** - 1.0.0 # set_global_variable **Descripción** Establece el valor de una variable global en el diccionario '\_GLOBAL\_VARIABLES'. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
variable\_namestrSINombre de la variable a establecer
valueNoneSiValor a asignar a la variable
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define the variable name and value to set variable_name = 'transfer_mode' new_value = 'local' # Set the value of the global variable pt.transfer.set_global_variable(variable_name, new_value) # Print the updated value of the global variable print(f"Updated value of '{variable_name}': {pt.transfer._GLOBAL_VARIABLES[variable_name]}") ``` # get_global_variable **Descripción** Obtiene el valor de una variable global del diccionario '\_GLOBAL\_VARIABLES'. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
variable\_namestrSiNombre de la variable a establecer
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define the variable name to retrieve variable_name = 'tentacle_client' # Get the value of the global variable value = pt.transfer.get_global_variable(variable_name) # Print the value of the global variable print(f"The value of '{variable_name}' is: {value}") ``` # tentacle_xml **Descripción** Envía un archivo usando el protocolo tentacle. **Parámetros**
**Nombre**
**Tipo**
**Requerido**
**Descripción**
data_file
str
Si
Archivo a enviar. Se necesita la ruta completa del archivo
tentacle_ops
dict
No
Debe ser un dict con las opciones de tentacle (dirección \[contraseña\] \[puerto\])
tentacle_path
str
NoPermite definir una ruta personalizada para el cliente tentacle en caso de que no esté en sys path)
debugintNoSi está habilitado, el fichero de datos no será eliminado después de ser enviado
print\_errorsboolNoSi se habilita con True, imprimirá todos los mensajes de error
**Return**
boolDevuelve 0 para OK y 1 para errores
**Requisitos** - sys - os - datetime.datetime -
subprocess.Popen
**Versión** - 1.0.0 Ejemplo ``` import pandoraPlugintools as pt # Define the path to the data file to be sent data_file = '/tmp/agent.data' # Define tentacle options as a dictionary tentacle_ops = { 'address': '192.168.1.100', 'port': 41121 } # Send the file using the tentacle protocol success = pt.transfer.tentacle_xml(data_file, tentacle_ops, tentacle_path, debug, print_errors) # Check if the file was sent successfully if success: print("File sent successfully using tentacle protocol.") else: print("Failed to send file using tentacle protocol.") ``` # transfer_xml **Descripción** Detecta el modo de transferencia y llama a la función agentplugin() para realizar la transferencia. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
filestrSiDiccionario con la configuración del agente
transfer\_modestrSiModo de transferencia. Por defecto es global\_variables\['transfer\_mode'\]
tentacle\_ipstrSiDirección IP para Tentacle. Por defecto es global\_variables\['tentacle\_ip'\]
tentacle\_portintSiPuerto para Tentacle. Por defecto es global\_variables\['tentacle\_port'\]
tentacle\_extra\_optsstrSiOpciones extra para Tentacle. Por defecto es global\_variables\['
tentacle_extra_opts']
data\_dirstrSiRuta de la carpeta data\_dir. Por defecto es global\_variables\['
data_dir']
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define the path to the file to be transferred file_to_transfer = '/tmp/agent.data' # Define transfer mode (e.g., 'local' or 'tentacle') transfer_mode = 'tentacle' # Define Tentacle IP and port tentacle_ip = '192.168.1.100' tentacle_port = 41121 # Define data directory for local transfer mode data_dir = '/var/spool/pandora/data_in/' # Perform the file transfer based on the selected transfer mode pt.transfer.transfer_xml(file_to_transfer, transfer_mode, tentacle_ip, tentacle_port, tentacle_extra_opts, data_dir) # Print a message indicating the successful transfer print("File transfer completed.") ``` # write_xml **Descripción** Crea un archivo .data de agente en la carpeta data\_dir especificada **Parámetros**
**Nombre**
**Tipo**
**Requerido**
**Descripción**
xml
str
SiCadena XML que se escribirá en el fichero
agent_name
str
Si
Nombre del agente para el xml y nombre del fichero
data_dir
str
Si
Carpeta en la que se creará el fichero
print_errors
bool
No
Si desea imprimir mensajes de error
**Return**
fileFichero del agente
**Requisitos** - datetime.datetime - hashlib - sys **Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define the XML string to be written xml_data = """ RockyLinux HostAlive generic_proc 1 """ # Define the agent name and data directory agent_name = "RockyLinux" data_dir = '/tmp' # Write the XML data to a .data file data_file_path = pt.output.write_xml(xml_data, agent_name, data_dir) # Print the path to the created .data file print("Data file created:", data_file_path) ``` # general # _print_debug **Descripción** Imprime cualquier lista, dict, string, float o integer como un json **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
var
strSiElemento que será imprimido
print_errors
boolNoChequeo para pintar errores.
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt device_name = "Router" device_status = "Active" device_data = { "cpu_usage": 80, "memory_usage": 60 } information = { "name": device_name, "status": device_status, "data": device_data } pt.agents._print_debug(information, print_errors=True) ``` 2 # safe_input **Descripción** Convierte una cadena de entrada codificada en entidades HTML en una cadena de caracteres claros. **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
input_string
strSiLa cadena de entrada codificada en entidades HTML
**Return**
strLa cadena de caracteres claros descodificada
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define an input string with HTML entities input_string = "<p>Hello, <b>world</b>!</p>" # Use the safe_input function to decode the HTML entities decoded_string = pt.general.safe_input(input_string) # Print the decoded string print("Decoded string:", decoded_string) ``` # safe_output **Descripción** Convierte las entidades HTML a sus caracteres correspondientes en la cadena de entrada. **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
input\_stringstrSiLa cadena de caracteres claros descodificada
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define an input string with HTML entities input_string = "<p>Hello, <b>world</b>!</p>" # Use the safe_output function to convert HTML entities back to characters decoded_string = pt.general.safe_output(input_string) # Print the decoded string print("Decoded string:", decoded_string) ``` # set_dict_key_value **Descripción** Asignar a una clave de un dict un valor determinado **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
input\_dictdictSiDiccionario
input\_keystrSiClave del diccionario
input\_valueNoneSiValor del diccionario
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define the dictionary of monitored devices devices = { 'device1': { 'status': 'online', 'temperature': 25.0, 'humidity': 60.0 }, 'device2': { 'status': 'offline', 'temperature': 0.0, 'humidity': 0.0 } } # Update the status of a device pt.general.set_dict_key_value(devices['device1'], 'status', 'offline') # Update the temperature of another device pt.general.set_dict_key_value(devices['device2'], 'temperature', 22.5) # Display the updated dictionary print("Monitored devices dictionary:", devices) ``` # get_dict_key_value **Descripción** Devuelve el valor de una clave en un dict dado. **Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Sample device monitoring data device_data = { 'device_id': '12345', 'temperature': 28.5, 'status': 'online' } # Get the temperature reading from the device data temperature = pt.general.get_dict_key_value(device_data, 'temperature') if temperature is not None: print("Temperature:", temperature, "C") # Get the status of the device status = pt.general.get_dict_key_value(device_data, 'status') if status is not None: print("Status:", status) ``` # generate_md5 **Descripción** Genera un hash MD5 para la cadena de entrada dada **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
input\_stringstrSiLa cadena para la que se generará el hash MD5.
**Return**
strEl hash MD5 de la cadena de entrada como cadena hexadecimal.
**Requisitos** - hashlib
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Sample monitoring data for a Linux system agent name_agent = "Rocky-linux-master" # Convert the monitoring data dictionary to a string data_string = str(linux_system_data) # Generate MD5 hash for the monitoring data md5_hash = pt.general.generate_md5(data_string) print("Linux System Monitoring Data:") print(linux_system_data) print("MD5 Hash:", md5_hash) ``` # now **Descripción** Devuelve la hora en formato aaaa/mm/dd HH:MM:SS por defecto. **Parámetros**
**Nombre**
**Tipo**
**Requerido**
**Descripción**
print_flag
int
No
Sirve para imprimir la hora, de no utilizarse la hora se devolverá. Por defecto None
utimestamp
int
No
Sirve para introducir un utimestamp, por defecto utilizará el actual.
**Return**
**Nombre****Descripción**
strHora en formato aaaa/mm/dd HH:MM:SS
floatHora en formato epoch time
**Requisitos** - datetime.datetime **Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Get the current time in the default format current_time_default = pt.general.now() print("Current Time (Default Format):", current_time_default) # Get the current time in Unix timestamp format current_time_unix = pt.general.now(utimestamp=True) print("Current Time (Unix Timestamp):", current_time_unix) # Get and print the current time with the specified format current_time_custom_format = pt.general.now(print_flag=True) ``` # translate_macros **Descripción** Espera un diccionario de macros clave:valor (nombre\_macro:valor\_macro) y una cadena para reemplazar la macro. **Parámetros**
**Nombre**
**Tipo**
**Requerido**
**Descripción**
macro_dic
dict
Si
Diccionario de macros clave:valor (nombre\_macro:valor\_macro)
data
str
Si
String para reemplazar la macro.
**Return**
strDevuelve el string parseado
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define a dictionary of macros and their corresponding values macros = { "{DATE}": "2023-08-16", "{TIME}": "15:30:00", "{DEVICE}": "Linux Server", "{USER}": "admin" } # Input string with macros input_data = "The {DEVICE} is operational since {TIME}." # Replace macros in the input string translated_data = pt.general.translate_macros(macro_dic=macros, data=input_data) # Print the translated input string print("Translated input string:", translated_data) ``` # parse_configuration **Descripción** Analiza la configuración. Lee el fichero de configuración y almacena sus datos como dict. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
file siRuta del fichero de configuración. Por defecto es "/etc/pandora/pandora\_server.conf"
separator noSeparador para la opción y el valor. Por defecto es " "
default\_values noDiccionario de valores por defecto
**Return**
dictDiccionario que contiene todas las claves y valores del fichero
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Specify the path to the configuration file config_file = "/etc/pandora/pandora_server.conf" # Specify the separator used in the configuration file separator = "=" # Define default values for configuration options default_config = { "server_port": "8080", "debug_mode": "false", "log_file": "/var/log/pandora.log" } # Parse the configuration file and get the configuration data parsed_config = pt.general.parse_configuration(file=config_file, separator=separator, default_values=default_config) # Print the parsed configuration data print("Parsed configuration:", parsed_config) ``` # parse_csv_file **Descripción** Lee el fichero de configuración y almacena sus datos en un array. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
filestrSiRuta del fichero csv de configuración
separatorstrNoSeparador para la opción y el valor. Por defecto es ";"
coun_parameters
int
No
Número mínimo de parámetros que debe tener cada línea. Por defecto Ninguno
debugboolNoPara imprimir errores en las líneas
**Return**
listContiene una lista de valores para cada línea csv
**Requisitos** - sys **Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Specify the path to the CSV configuration file csv_file = "data.csv" # Specify the separator used in the CSV file separator = "," # Specify the minimum number of parameters each line should have min_parameters = 3 # Parse the CSV configuration file and get the data in a list parsed_csv_data = pt.general.parse_csv_file(file=csv_file, separator=separator, count_parameters=min_parameters, print_errors=True) # Print the parsed CSV data print("Parsed CSV data:", parsed_csv_data) ``` # parse_int **Descripción** Convierte una variable dada en una cadena. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
varNoneSiLa variable a analizar como cadena.
**Return**
strEl valor de la cadena analizada. Si el análisis falla, devuelve "".
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Sample variables to be parsed as integers var1 = "123" var2 = "45.67" var3 = "invalid" # Parse the variables as integers using the parse_int function parsed_var1 = pt.general.parse_int(var1) parsed_var2 = pt.general.parse_int(var2) parsed_var3 = pt.general.parse_int(var3) # Print the parsed integer values print("Parsed var1:", parsed_var1) # Should print: Parsed var1: 123 print("Parsed var2:", parsed_var2) # Should print: Parsed var2: 0 (parsing fails for decimal value) print("Parsed var3:", parsed_var3) # Should print: Parsed var3: 0 (parsing fails for invalid value) ``` # parse_float **Descripción** Convierte una variable dada a float. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
varNoneSILa variable a convertir en float.
**Return**
floatEl valor de float analizado. Si el análisis falla, devuelve 0.
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Sample variables to be parsed as floats var1 = "123.45" var2 = "invalid" var3 = 67 # Parse the variables as floats using the parse_float function parsed_var1 = pt.general.parse_float(var1) parsed_var2 = pt.general.parse_float(var2) parsed_var3 = pt.general.parse_float(var3) # Print the parsed float values print("Parsed var1:", parsed_var1) # Should print: Parsed var1: 123.45 print("Parsed var2:", parsed_var2) # Should print: Parsed var2: 0.0 (parsing fails for invalid value) print("Parsed var3:", parsed_var3) # Should print: Parsed var3: 67.0 ``` # parse_str **Descripción** Convierte una variable dada en una cadena. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
varNoneSiLa variable a analizar como cadena.
**Return**
strEl valor de la cadena analizada. Si el análisis falla, devuelve "".s
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Sample variables to be parsed as strings var1 = 12345 var2 = 3.14159 var3 = True # Parse the variables as strings using the parse_str function parsed_var1 = pt.general.parse_str(var1) parsed_var2 = pt.general.parse_str(var2) parsed_var3 = pt.general.parse_str(var3) # Print the parsed string values print("Parsed var1:", parsed_var1) # Should print: Parsed var1: 12345 print("Parsed var2:", parsed_var2) # Should print: Parsed var2: 3.14159 print("Parsed var3:", parsed_var3) # Should print: Parsed var3: True ``` # parse_bool **Descripción** Convierte una variable dada en bool. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
varNoneSiLa variable a convertir en bool.
**Return**
boolEl valor bool analizado. Si el análisis falla, devuelve False.
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Sample variables to be parsed as booleans var1 = "True" var2 = 1 var3 = "false" # Parse the variables as booleans using the parse_bool function parsed_var1 = pt.general.parse_bool(var1) parsed_var2 = pt.general.parse_bool(var2) parsed_var3 = pt.general.parse_bool(var3) # Print the parsed boolean values print("Parsed var1:", parsed_var1) # Should print: Parsed var1: True print("Parsed var2:", parsed_var2) # Should print: Parsed var2: True print("Parsed var3:", parsed_var3) # Should print: Parsed var3: False ``` # discovery # Global variables **Descripción** Las siguientes variables pueden modificarse de modo global.
**Nombre****Descripción****Valor por defecto**
_ERROR_LEVEL
Esta variable se utiliza para controlar el nivel de error.0
_SUMMARY
Este diccionario se utiliza para almacenar un sumario de elementos{}
_INFO
Esta variable se utiliza para almacenar posibles errores en la ejecución""
_MONITORING_DATA
Esta lista se utiliza para almacenar elementos\[\]
Para modificar las variables globales use la función : [set\_disco\_error\_level](https://pandorafms.com/guides/public/books/plugintools/page/set-disco-error-level) [set\_disco\_summary](https://pandorafms.com/guides/public/books/plugintools/page/set-disco-summary) [set\_disco\_info\_value](https://pandorafms.com/guides/public/books/plugintools/page/set-disco-info-value) [set\_disco\_monitoring\_data](https://pandorafms.com/guides/public/books/plugintools/page/set-disco-monitoring-data) **Versión** - 1.0.0 # set_disco_error_level **Descripción** Establece el nivel de error al valor especificado. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
valueintSiEl valor del nivel de error. Por defecto es 0
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Set the error level to 1 pt.discovery.set_disco_error_level(1) # Your code continues here without error level checking print("Error level has been set to 1. Continue processing...") ``` # set_disco_summary **Descripción** Establecer valor fijo en el diccionario '\_SUMMARY'. **Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Create a sample data dictionary sample_data = { 'total_devices': 50, 'active_devices': 30, 'inactive_devices': 20 } # Set the discovery summary using the sample data pt.set_disco_summary(sample_data) # Verify by printing the updated _SUMMARY print(pt._SUMMARY) ``` # set_disco_summary_value **Descripción** Establece un valor fijo para una clave del diccionario '\_SUMMARY'. **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
keystrSiClave para la que se establece el valor
valueanySiValor a asignar a la clave
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Set a fixed value for a specific key in the discovery summary pt.set_disco_summary_value('total_devices', 100) pt.set_disco_summary_value('active_devices', 75) pt.set_disco_summary_value('inactive_devices', 25) # Verify by printing the updated _SUMMARY print(pt._SUMMARY) ``` # add_disco_summary_value **Descripción** Añade un valor a una clave del diccionario 'resumen'. Si la clave ya existe, se incrementará el valor. En caso contrario, se creará una nueva clave. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
keystrSIClave a la que añadir el valor
valueNoneSIValor a añadir a la clave
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Add values to existing keys in the discovery summary pt.set_disco_summary_value('total_devices', 100) pt.set_disco_summary_value('active_devices', 75) pt.set_disco_summary_value('inactive_devices', 25) # Add values to existing keys using add_disco_summary_value function pt.add_disco_summary_value('total_devices', 10) pt.add_disco_summary_value('active_devices', 5) pt.add_disco_summary_value('inactive_devices', 5) # Add values to new keys using add_disco_summary_value function pt.add_disco_summary_value('new_key', 50) # Verify by printing the updated _SUMMARY print(pt._SUMMARY) ``` # set_disco_info_value **Descripción** Establece un valor fijo en la variable 'info'. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
valuestrSiEl valor a establecer en la variable 'info'. Por defecto es una cadena vacía.
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Set a value to the _INFO variable pt.set_disco_info_value("This is some information about the discovery.") # Verify by printing the updated _INFO print(discovery._INFO) ``` # add_disco_info_value **Descripción** Añade datos a la variable 'info'. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
valuestrSiLos datos a añadir a la variable 'info'. Por defecto es una cadena vacía
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Add data to the _INFO variable pt.add_disco_info_value("Additional information: ") pt.add_disco_info_value("System status: OK") # Verify by printing the updated _INFO variable print(pt._INFO) ``` # set_disco_monitoring_data **Descripción** Establecer un valor fijo en los datos de seguimiento **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
datalistSiLista con los datos
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Example data for disk monitoring disk_monitoring_data = [ {'path': '/dev/sda1', 'usage': '75%'}, {'path': '/dev/sdb1', 'usage': '42%'}, {'path': '/dev/sdc1', 'usage': '90%'} ] # Set the monitoring data for disk usage pt.set_disco_monitoring_data(disk_monitoring_data) # Verify by printing the updated _MONITORING_DATA variable print(pt._MONITORING_DATA) ``` # add_disco_monitoring_data **Descripción** Añadir valor a los datos de seguimiento **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
datadictSiDiccionario con los datos
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Example data for disk monitoring to be added new_disk_data = {'path': '/dev/sdd1', 'usage': '60%'} # Add the new disk monitoring data to the global monitoring dataset pt.add_disco_monitoring_data(new_disk_data) # Verify by printing the updated _MONITORING_DATA variable print(pt._MONITORING_DATA) ``` # disco_output **Descripción** Imprime la salida JSON y sale del script. **Requisitos** - json - sys **Ejemplo** ``` import pandoraPlugintools as pt import sys # Don't forget to import the sys module for the sys.exit() function # Set values for _SUMMARY, _INFO, and _MONITORING_DATA (for demonstration purposes) pt.set_disco_summary({'disk_usage': '80%'}) pt.set_disco_info_value('Disk usage information') pt.add_disco_monitoring_data({'path': '/dev/sda1', 'usage': '70%'}) # Call the disco_output function to print JSON output and exit with a specific error level pt.disco_output() ``` # http # auth_call **Descripción** Autenticación para petición url. Requiere el objeto request.sessions.Session(). **Parámetros**
**Nombre****Tipo****Descripción**
session Noneobjeto Session() de request
authtype str'ntlm', 'basic' o 'digest'
user
str
Usuario de autenticación
passw
str
Contraseña de autenticación
**Return**
**Tipo**
None
**Requisitos** -
requests_ntlm.HttpNtlmAuth
-
requests.auth.HTTPBasicAuth
-
requests.auth.HTTPDigestAuth
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Create a request session session = pt.requests.Session() # Define authentication details authtype = 'basic' user = 'admin' passw = 'S4n3tk!' # Call the authentication function pt._auth_call(session, authtype, user, passw) # Now you can use the authenticated session to make URL requests url = 'https://api.com/api/data' response = session.get(url) # Print the response print(response.text) ``` # call_url **Descripción** Utiliza el módulo request para obtener el contenido de la URL. **Parámetros**
**Nombre**
**Tipo**
**Descripción**
url
str
Url objetivo.
authtype
str
ntlm', 'basic', 'digest'. Opcional.
user
str
Usuario de autenticación. Opcional.
passw
str
Contraseña de autenticación. Opcional.
time_out
int
Time out para la llamada.
**Return**
**Tipo****Descripción**
strSalida de la petición request.
**Requisitos** -
requests.sessions.Session
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define URL and authentication details url = 'https://api.com/api/data' authtype = 'basic' user = 'admin' passw = 'S4!jdKm' # Call the URL and get the contents response = pt.call_url(url, authtype=authtype, user=user, passw=passw, timeout=5, verify=True, print_errors=True) # Print the response content if response is not None: print(response.decode('utf-8')) else: print("Error occurred during URL call.") ``` # threads # _single_thread **Descripción** Sólo para uso interno: Ejecuta una función dada en un hilo. **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
qNoneSiUna cola de la que obtener parámetros para la función
functioncallableSiLa función a ejecutar en el hilo
errorslistNoUna lista para almacenar cualquier error encontrado durante la ejecución
**Versión** - 1.0.0 # run_threads **Descripción** Ejecutar una función dada para una lista de elementos dada en un número dado de hilos **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
max_threads
intSINúmero de hilos
functioncallableSiFunción a ejecutar
itemslistSiLista con los items que se asignaran a cada hilo
print_errors
boolNoPara pintar error por salida
**Return**
boolDevuelve True si no ha habido errores en la ejecución y 0 de suceder lo contrario.
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define a function to be executed in each thread def process_item(item): # Perform some processing on the item print(f"Processing item: {item}") # List of items to process items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # Number of threads to use max_threads = 3 # Run the function for each item using multiple threads success = pt.run_threads(max_threads=max_threads, function=process_item, items=items, print_errors=True) if success: print("All threads executed successfully.") else: print("Errors occurred during thread execution.") ``` # set_shared_dict_value **Descripción** Establece un valor para una clave en el diccionario interno compartido. Esta función es utilizada por todos los procesos paralelos. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
keystrSILa clave en el diccionario compartido
valueNoneSiEl valor a asignar a la clave
**Return**
**Tipo**
None
**Versión** - 1.0.0 Ejemplo ``` import pandoraPlugintools as pt # Define a function to be executed by parallel processes def process_data(item): # Process the data and set a value in the shared dictionary result = item * 2 pt.set_shared_dict_value(key=str(item), value=result) # List of items to process data_list = [1, 2, 3, 4, 5] # Create a shared dictionary and lock for synchronization shared_dict = multiprocessing.Manager().dict() shared_dict_lock = multiprocessing.Manager().Lock() # Set the shared dictionary and lock in the module pt._SHARED_DICT = shared_dict pt._SHARED_DICT_LOCK = shared_dict_lock # Number of parallel processes to use num_processes = 2 # Run the function for each item using parallel processes success = pt.run_parallel(num_processes=num_processes, function=process_data, data_list=data_list, print_errors=True) if success: print("All processes executed successfully.") else: print("Errors occurred during process execution.") ``` # add_shared_dict_value **Descripción** Añade un valor a una clave del diccionario interno compartido. Esta función es utilizada por todos los procesos paralelos. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
keystrSiLa clave en el diccionario compartido
valueNoneSIEl valor a añadir a la clave
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define a function to be executed by parallel processes def process_data(item): # Process the data and add a value to the shared dictionary result = item * 2 pt.add_shared_dict_value(key=str(item), value=result) # List of items to process data_list = [1, 2, 3, 4, 5] # Create a shared dictionary and lock for synchronization shared_dict = multiprocessing.Manager().dict() shared_dict_lock = multiprocessing.Manager().Lock() # Set the shared dictionary and lock in the module pt._SHARED_DICT = shared_dict pt._SHARED_DICT_LOCK = shared_dict_lock # Number of parallel processes to use num_processes = 2 # Run the function for each item using parallel processes success = pt.run_parallel(num_processes=num_processes, function=process_data, data_list=data_list, print_errors=True) if success: print("All processes executed successfully.") else: print("Errors occurred during process execution.") In this example, the process_data function processes each item and adds a value to the shared dictionary using the add_shared_dict_value function. The run_parallel function is used to execute the process_data function in parallel processes for the given list of items. The shared dictionary and lock are created using the multiprocessing.Manager() and then assigned to the corresponding module variables _SHARED_DICT and _SHARED_DICT_LOCK in the pandoraPluginTools module. ``` # get_shared_dict_value **Descripción** Obtener el valor de una clave en el diccionario interno compartido. Esta función es utilizada por todos los procesos paralelos. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
keystrSiLa clave en el diccionario compartido
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define a function to be executed by parallel processes def process_data(item): # Process the data and get the value from the shared dictionary result = item * 2 value = pt.get_shared_dict_value(key=str(item)) print(f"Item: {item}, Processed Value: {result}, Shared Value: {value}") # List of items to process data_list = [1, 2, 3, 4, 5] # Create a shared dictionary and lock for synchronization shared_dict = multiprocessing.Manager().dict() shared_dict_lock = multiprocessing.Manager().Lock() # Set the shared dictionary and lock in the module pt._SHARED_DICT = shared_dict pt._SHARED_DICT_LOCK = shared_dict_lock # Number of parallel processes to use num_processes = 2 # Run the function for each item using parallel processes success = pt.run_parallel(num_processes=num_processes, function=process_data, data_list=data_list, print_errors=True) if success: print("All processes executed successfully.") else: print("Errors occurred during process execution.") ``` # run_processes **Descripción** Ejecuta una función dada para una lista de elementos dada en un número dado de procesos **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
max_processes
intSiEl número máximo de procesos a ejecutar en paralelo
function
callableSILa función a ejecutar para cada ítem
items
listSiLista de ítems a procesar
print_errors
boolNoSi se van a imprimir los errores
**Return**
**Tipo****Descripción**
boolTrue si todos los procesos se completaron con éxito, False en caso contrario
**Versión** - 1.0.0 ``` import pandoraPlugintools as pt # Define a function to be executed by parallel processes def process_data(item): result = item * 2 print(f"Item: {item}, Processed Value: {result}") # List of items to process data_list = [1, 2, 3, 4, 5] # Number of parallel processes to use num_processes = 2 # Run the function for each item using parallel processes success = pt.run_processes(max_processes=num_processes, function=process_data, items=data_list, print_errors=True) if success: print("All processes completed successfully.") else: print("Errors occurred during process execution.") ``` # encryption # _get_cipher_AES **Descripción** Sólo para uso interno: Obtiene el cifrado AES para encriptación y desencriptación. **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
passwordstrSiLa contraseña utilizada para obtener la clave de cifrado
**Return**
**Tipo****Descripción**
AESUna instancia de cifrado AES para cifrar y descifrar
**Requisitos** - base64 - hmac - hashlib **Versión** - 1.0.0 # encrypt_AES **Descripción** Cifra una cadena utilizando el cifrado AES. **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
str\_to\_encryptstrSiLa cadena a cifrar
passwordstrNoLa contraseña utilizada para obtener la clave de cifrado
**Return**
**Tipo**
None
**Requisitos** - base64 **Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define a password for encryption encryption_password = "S4!DHhsd" # String to be encrypted data_to_encrypt = "This is a confidential message." # Encrypt the string using AES encryption encrypted_data = pt.encrypt_AES(str_to_encrypt=data_to_encrypt, password=encryption_password) print(f"Original String: {data_to_encrypt}") print(f"Encrypted String: {encrypted_data}") ``` # decrypt_AES **Descripción** Descifra una cadena encriptada utilizando el descifrado AES. **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
str_to_decrypt
strSiLa cadena cifrada que se va a descifrar
passwordstrNoLa contraseña utilizada para obtener la clave de cifrado base64
**Return**
**Tipo**
None
**Requisitos** - base64 **Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define a password for encryption encryption_password = "S4snDH!" # Encrypted string to be decrypted encrypted_string = "2S1Ps52+qUQ45b5uK2od2w==" # Decrypt the encrypted string decrypted_string = pt.decrypt_AES(str_to_decrypt=encrypted_string, password=encryption_password) print(f"Decrypted String: {decrypted_string}") ``` # _get_cipher_Rijndael **Descripción** Sólo para uso interno: Obtén el cifrado Rijndael para encriptar y desencriptar. **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
passwordstrSiLa contraseña utilizada para obtener la clave de cifrado
**Return**
**Tipo****Descripción**
AESUna instancia de cifrado AES para cifrar y descifrar
**Requisitos** - base64 - hmac - hashlib **Versión** - 1.0.6 # encrypt_Rijndael **Descripción** Cifra una cadena utilizando el cifrado Rijndael. **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
str\_to\_encryptstrSiLa cadena a cifrar
passwordstrNoLa contraseña utilizada para obtener la clave de cifrado
**Return**
**Tipo**
None
**Requisitos** - base64 **Versión** - 1.0.6 **Ejemplo** ``` import pandoraPlugintools as pt # Define a password for encryption encryption_password = "S4!DHhsd" # String to be encrypted data_to_encrypt = "This is a confidential message." # Encrypt the string using AES encryption encrypted_data = pt.encrypt_Rijndael(str_to_encrypt=data_to_encrypt, password=encryption_password) print(f"Original String: {data_to_encrypt}") print(f"Encrypted String: {encrypted_data}") ``` # decrypt_Rijndael **Descripción** Descifra una cadena cifrada utilizando el descifrado Rijndael. **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
str\_to\_encryptstrSiLa cadena a cifrar
passwordstrNoLa contraseña utilizada para obtener la clave de cifrado
**Return**
**Tipo**
None
**Requisitos** - base64 **Versión** - 1.0.6 **Ejemplo** ``` import pandoraPlugintools as pt # Define a password for encryption encryption_password = "S4snDH!" # Encrypted string to be decrypted encrypted_string = "2S1Ps52+qUQ45b5uK2od2w==" # Decrypt the encrypted string decrypted_string = pt.decrypt_Rijndael(str_to_decrypt=encrypted_string, password=encryption_password) print(f"Decrypted String: {decrypted_string}") ``` # output # print_stdout **Descripción** Imprime el mensaje en stdout **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
messagestrNoMensaje a imprimir. Por defecto es ""
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Message to be printed message = "Disk usage exceeded threshold: 90%." # Print the message using the print_stdout function pt.print_stdout(message) ``` # print_stderr **Descripción** Imprime el mensaje en stdout **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
messagestrNoMensaje a imprimir. Por defecto es ""
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Monitoring error message to be printed monitoring_error = "Error: Disk space running low!" # Print the monitoring error message using the print_stderr function pt.print_stderr(monitoring_error) ``` # print_debug **Descripción** Imprime cualquier lista, dict, string, float o integer como un json **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
var
strSiVariable a imprimir
print_errors
boolNoImprime o no los errores. Por defecto es False.
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Monitoring data in dictionary format monitoring_data = { "disk_usage": { "drive": "/dev/sda1", "usage": "85%" }, "cpu_usage": { "core_1": "50%", "core_2": "45%" } } # Print the monitoring data using the print_debug function pt.print_debug(monitoring_data) ``` # logger **Descripción** Añadir una nueva línea al archivo de registro **Parámetros**
**Nombre** **Tipo****Requerido****Descripción**
log_file
strSiRuta al archivo de registro
messagestrSiMensaje a añadir al registro
log_level
strNoNivel de registro, si procede. Por defecto es una cadena vacía
add\_dateboolNoSi desea añadir la fecha y hora actuales a la entrada del registro. Por defecto es True
print_errors
boolNoSi se imprimen los errores. Por defecto es False
**Return**
**Tipo****Descripción**
boolTrue si la entrada de registro se ha añadido correctamente, False en caso contrario
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Path to the log file log_file = "/tmp/log_file.txt" # Log message to be added log_message = "Disk space usage exceeded threshold." # Log level (optional) log_level = "WARNING" # Add the log entry using the logger function pt.logger(log_file, log_message, log_level) ``` # snmp # Global variables **Descripción** Las siguientes variables pueden modificarse de modo global.
**Nombre****Descripción****Valor por defecto**
hostname
El nombre del host o dirección IP del dispositivo SNMP que deseas consultar""
version
La versión del protocolo SNMP que se utilizará para la comunicación. Puede ser 1, 2 o 31
community
La cadena de comunidad utilizada en SNMPv1 y SNMPv2c para autenticar el acceso. Es como una contraseña simple que permite la lectura de informaciónpublic
user
El nombre de usuario utilizado en SNMPv3 para autenticación y autorización""
auth_protocol
El protocolo de autenticación utilizado en SNMPv3, como "MD5" o "SHA". Debe coincidir con el protocolo configurado en el dispositivo SNMP""
auth_password
La contraseña utilizada para autenticación en SNMPv3. Debe coincidir con la configuración del dispositivo SNMP""
privacy_protocol
El protocolo de privacidad utilizado en SNMPv3 para cifrar los datos, como "DES" o "AES". Debe coincidir con la configuración del dispositivo SNMP""
privacy_password
La contraseña utilizada para cifrar los datos en SNMPv3. Debe coincidir con la configuración del dispositivo SNMP""
security_level
El nivel de seguridad utilizado en SNMPv3, que puede ser "noAuthNoPriv" (sin autenticación ni privacidad), "authNoPriv" (autenticación sin privacidad) o "authPriv" (autenticación y privacidad)
noAuthNoPriv
timeout
El tiempo máximo en segundos que se esperará por una respuesta del dispositivo SNMP antes de que se agote el tiempo de espera2
retries
El número de veces que se reintentará la operación SNMP en caso de que no se reciba una respuesta o se produzca un error1
remote_port
El número de puerto remoto utilizado para la comunicación SNMP
161
Para modificar las variables globales use la función : [set\_global\_variable](https://pandorafms.com/guides/public/books/plugintools/page/set-global-variable-821) **Versión** - 1.0.0 # set_global_variable **Descripción** Establece el valor de una variable global en el diccionario '\_GLOBAL\_VARIABLES'. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
variable\_namestrSINombre de la variable a establecer
valueNoneSiValor a asignar a la variable
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define the variable name and value to set variable_name = 'security_level' new_value = 'auth_without_privacy' # Set the value of the global variable pt.snmp.set_global_variable(variable_name, new_value) # Print the updated value of the global variable print(f"Updated value of '{variable_name}': {pt.snmp._GLOBAL_VARIABLES[variable_name]}") ``` # get_global_variable **Descripción** Obtiene el valor de una variable global del diccionario '\_GLOBAL\_VARIABLES'. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
variable\_namestrSiNombre de la variable a establecer
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import pandoraPlugintools as pt # Define the variable name to retrieve variable_name = 'community' # Get the value of the global variable value = pt.snmp.get_global_variable(variable_name) # Print the value of the global variable print(f"The value of '{variable_name}' is: {value}") ``` # create_snmp_session **Descripción** Crea una sesión SNMP basada en las variables de configuración global. **Argumentos**
**Nombre****Tipo****Requerido****Descripción**
hoststrSiDirección IP o nombre del dispositivo SNMP
versionintNoVersión del protocolo SNMP (1, 2 o 3)
communitystrNoContraseña simple para acceso en SNMPv1/v2c
userstrSiNombre de usuario en SNMPv3
auth\_protocolstrNoProtocolo de autenticación en SNMPv3 (MD5, SHA, etc.)
auth\_passwordstrNoContraseña de autenticación en SNMPv3
privacy\_protocolstrNoProtocolo de cifrado en SNMPv3 (DES, AES, etc.)
privacy\_passwordstrNoContraseña de cifrado en SNMPv3
security\_levelstrNoNivel de seguridad en SNMPv3
timeoutintNoTiempo máximo de espera para respuestas SNMP
retriesintNoNúmero de intentos en caso de fallo
remote\_portintNoPuerto remoto para comunicación SNMP
**Return**
**Tipo****Descripción**
SessionUna sesión SNMP configurada en base a las variables globales
**Versión** - 1.0.0 **Ejemplo** ``` import PandoraPlugintools as pt # Set global variables pt.set_global_variable('hostname', '192.168.1.1') pt.set_global_variable('version', 2) pt.set_global_variable('community', 'public') pt.set_global_variable('user', 'admin') pt.set_global_variable('auth_protocol', 'md5') pt.set_global_variable('auth_password', 'authpass') pt.set_global_variable('privacy_protocol', 'des') pt.set_global_variable('privacy_password', 'privpass') pt.set_global_variable('security_level', 'authPriv') pt.set_global_variable('timeout', 5) pt.set_global_variable('retries', 2) pt.set_global_variable('remote_port', 161) # Create an SNMP session session = pt.create_snmp_session() print(session) ``` # snmp_get **Descripción** Realiza una operación SNMP GET para recuperar el valor de un OID especificado. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
oidstrSiEl OID para la operación SNMP GET
hoststrSiDirección IP o nombre del dispositivo SNMP
versionintNoVersión del protocolo SNMP (1, 2 o 3)
communitystrNoContraseña simple para acceso en SNMPv1/v2c
userstrSiNombre de usuario en SNMPv3
auth\_protocolstrNoProtocolo de autenticación en SNMPv3 (MD5, SHA, etc.)
auth\_passwordstrNoContraseña de autenticación en SNMPv3
privacy\_protocolstrNoProtocolo de cifrado en SNMPv3 (DES, AES, etc.)
privacy\_passwordstrNoContraseña de cifrado en SNMPv3
security\_levelstrNoNivel de seguridad en SNMPv3
timeoutintNoTiempo máximo de espera para respuestas SNMP
retriesintNoNúmero de intentos en caso de fallo
remote\_portintNoPuerto remoto para comunicación SNMP
**Return**
**Tipo****Descripción**
strEl valor recuperado del OID especificado
**Versión** - 1.0.0 **Ejemplo** ``` import PandoraPlugintools as pt # Set global variables pt.set_global_variable('hostname', '192.168.1.1') pt.set_global_variable('version', 2) pt.set_global_variable('community', 'public') pt.set_global_variable('timeout', 5) pt.set_global_variable('retries', 2) pt.set_global_variable('remote_port', 161) # Create an SNMP session session = pt.create_snmp_session() # Specify the OID for the SNMP GET operation oid = '1.3.6.1.2.1.1.1.0' # Perform an SNMP GET operation value = pt.snmp_get(session, oid) print('SNMP GET Value:', value) ``` # snmp_walk **Descripción** Realiza una operación SNMP WALK para recuperar una lista de valores de un subárbol de la MIB. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
oidstrSiEl OID para la operación SNMP GET
hoststrSiDirección IP o nombre del dispositivo SNMP
versionintNoVersión del protocolo SNMP (1, 2 o 3)
communitystrNoContraseña simple para acceso en SNMPv1/v2c
userstrSiNombre de usuario en SNMPv3
auth\_protocolstrNoProtocolo de autenticación en SNMPv3 (MD5, SHA, etc.)
auth\_passwordstrNoContraseña de autenticación en SNMPv3
privacy\_protocolstrNoProtocolo de cifrado en SNMPv3 (DES, AES, etc.)
privacy\_passwordstrNoContraseña de cifrado en SNMPv3
security\_levelstrNoNivel de seguridad en SNMPv3
timeoutintNoTiempo máximo de espera para respuestas SNMP
retriesintNoNúmero de intentos en caso de fallo
remote\_portintNoPuerto remoto para comunicación SNMP
**Tipo****Descripción**
dictDiccionario con la OID y el valor de cada elemento.
- 1.0.0 **Ejemplo** ``` import PandoraPlugintools as pt # Set global variables pt.set_global_variable('hostname', '192.168.1.1') pt.set_global_variable('version', 2) pt.set_global_variable('community', 'public') pt.set_global_variable('timeout', 5) pt.set_global_variable('retries', 2) pt.set_global_variable('remote_port', 161) # Create an SNMP session session = pt.create_snmp_session() # Specify the OID for the SNMP WALK operation oid = '1.3.6.1.2.1.2.2.1.2' # Example OID for interface descriptions # Perform an SNMP WALK operation values = pt.snmp_walk(session, oid) for value in values: print('SNMP WALK Value:', value) ``` # snmp_trap **Descripción** Envía un trap SNMP a la IP de destino especificada utilizando el OID, valor y comunidad dados. **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
trap_oid
str
Si
El OID para el trap SNMP
trap_value
str
SI
El valor asociado a la trampa
destination_ip
str
Si
La dirección IP del destino de la trampa
community
str
Si
La cadena de comunidad SNMP para la autenticación
**Return**
**Tipo**
None
**Versión** - 1.0.0 **Ejemplo** ``` import PandoraPlugintools as pt # Specify the trap details trap_oid = '1.3.6.1.4.1.12345.1.0' # Example OID for custom trap trap_value = 'Trap from my application' destination_ip = '192.168.1.2' community = 'public' # Send an SNMP trap pt.send_trap(trap_oid, trap_value, destination_ip, community) print('SNMP Trap sent successfully.') ``` # class SNMPTarget **Descripción** Una clase que representa un objetivo SNMP, proporcionando métodos para establecer la configuración SNMP y realizar operaciones SNMP como GET y WALK. **Ejemplo** ``` import pandoraPlugintools as pt target = pt.SNMPTarget( host="192.168.1.1", community="public", version=2, timeout=5, retries=3 ) ``` ### **Funciones** ##### **snmp\_get**
**Descripción** **Parámetros**
**Nombre****Tipo****Requerido****Descripción**
oidstrSIEl OID para la operación SNMP GET
**Return**
**Tipo****Descripción**
strEl valor recuperado del OID especificado
**Versión**
- 1.0.0
**Ejemplo** ``` import pandoraPlugintools as pt target = pt.SNMPTarget( host="192.168.1.1", community="public", version=2, timeout=5, retries=3 ) oid_value = target.snmp_get("1.3.6.1.2.1.1.1.0") print("Valor del OID 1.3.6.1.2.1.1.1.0:", oid_value) ``` ##### **snmp\_walk**
**Descripción**
**Parámetros**
**Nombre****Tipo****Requerido****Descripción**
oidstrSiEl OID para la operación SNMP WALK
**Tipo****Descripción**
dictDiccionario con la OID y el valor de cada elemento.
**Versión**
- 1.0.0
**Ejemplo** ``` import pandoraPlugintools as pt target = pt.SNMPTarget( host="192.168.1.1", community="public", version=2, timeout=5, retries=3 ) oid_values_dict = target.snmp_walk("1.3.6.1.2.1.2.2.1.2") print("Valores del OID 1.3.6.1.2.1.2.2.1.2:", oid_values_dict) ```