Spaces:
Configuration error
Configuration error
| import tensorflow as tf | |
| import time | |
| import logging | |
| from prometheus_client import Gauge, push_to_gateway | |
| logger = logging.getLogger("Orbix") | |
| class TelemetryMonitor: | |
| """ | |
| Monitorea m茅tricas en tiempo real de la predicci贸n y optimizaci贸n orbital. | |
| Esta clase proporciona funcionalidades para recopilar, actualizar y exportar | |
| m茅tricas relacionadas con la predicci贸n de trayectorias orbitales y la | |
| optimizaci贸n de rutas para sat茅lites. | |
| Attributes: | |
| metrics (dict): Diccionario de m茅tricas de TensorFlow para seguimiento interno. | |
| prometheus_metrics (dict): Diccionario de m茅tricas de Prometheus para exportaci贸n. | |
| last_update_time (float): Timestamp de la 煤ltima actualizaci贸n de m茅tricas. | |
| """ | |
| def __init__(self): | |
| """ | |
| Inicializa el monitor de telemetr铆a con m茅tricas espec铆ficas para navegaci贸n orbital. | |
| """ | |
| # M茅tricas internas de TensorFlow | |
| self.metrics = { | |
| 'position_error': tf.keras.metrics.MeanSquaredError(), | |
| 'velocity_error': tf.keras.metrics.MeanAbsoluteError(), | |
| 'collision_probability': tf.keras.metrics.Mean(), | |
| 'prediction_latency': tf.keras.metrics.Mean(), | |
| 'optimization_time': tf.keras.metrics.Mean(), | |
| 'fuel_consumption_estimate': tf.keras.metrics.Mean(), | |
| 'trajectory_deviation': tf.keras.metrics.MeanSquaredError(), | |
| 'orbital_stability': tf.keras.metrics.Mean() | |
| } | |
| # M茅tricas de Prometheus para exportaci贸n | |
| self.prometheus_metrics = { | |
| 'position_error': Gauge('orbix_position_error', 'Error cuadr谩tico medio en la posici贸n'), | |
| 'velocity_error': Gauge('orbix_velocity_error', 'Error absoluto medio en la velocidad'), | |
| 'collision_probability': Gauge('orbix_collision_probability', 'Probabilidad de colisi贸n'), | |
| 'prediction_latency': Gauge('orbix_prediction_latency_ms', 'Latencia de predicci贸n en ms'), | |
| 'optimization_time': Gauge('orbix_optimization_time_ms', 'Tiempo de optimizaci贸n en ms'), | |
| 'fuel_consumption_estimate': Gauge('orbix_fuel_consumption', 'Estimaci贸n de consumo de combustible'), | |
| 'trajectory_deviation': Gauge('orbix_trajectory_deviation', 'Desviaci贸n de la trayectoria 贸ptima'), | |
| 'orbital_stability': Gauge('orbix_orbital_stability', '脥ndice de estabilidad orbital') | |
| } | |
| self.last_update_time = time.time() | |
| def update_metrics(self, predictions, ground_truth): | |
| """ | |
| Actualiza las m茅tricas con nuevos datos de predicci贸n y valores reales. | |
| Args: | |
| predictions (tf.Tensor): Tensor con las predicciones del modelo. | |
| ground_truth (tf.Tensor): Tensor con los valores reales. | |
| """ | |
| # Registrar el tiempo de inicio para medir la latencia | |
| start_time = time.time() | |
| # Actualizar m茅tricas de error de posici贸n y velocidad | |
| self.metrics['position_error'].update_state(predictions, ground_truth) | |
| self.metrics['velocity_error'].update_state(predictions, ground_truth) | |
| # Calcular y actualizar la latencia | |
| latency = (time.time() - start_time) * 1000 # Convertir a milisegundos | |
| self.metrics['prediction_latency'].update_state(latency) | |
| # Actualizar timestamp de 煤ltima actualizaci贸n | |
| self.last_update_time = time.time() | |
| logger.debug("M茅tricas actualizadas. Latencia: %.2f ms", latency) | |
| def update_collision_probability(self, probability): | |
| """ | |
| Actualiza la m茅trica de probabilidad de colisi贸n. | |
| Args: | |
| probability (float): Valor de probabilidad entre 0 y 1. | |
| """ | |
| self.metrics['collision_probability'].update_state(probability) | |
| logger.info("Probabilidad de colisi贸n actualizada: %.4f", probability) | |
| def update_optimization_metrics(self, optimization_time, fuel_consumption=None, | |
| trajectory_deviation=None, orbital_stability=None): | |
| """ | |
| Actualiza las m茅tricas relacionadas con la optimizaci贸n de rutas. | |
| Args: | |
| optimization_time (float): Tiempo de ejecuci贸n del algoritmo de optimizaci贸n en ms. | |
| fuel_consumption (float, optional): Estimaci贸n del consumo de combustible. | |
| trajectory_deviation (float, optional): Desviaci贸n de la trayectoria 贸ptima. | |
| orbital_stability (float, optional): 脥ndice de estabilidad orbital entre 0 y 1. | |
| """ | |
| self.metrics['optimization_time'].update_state(optimization_time) | |
| if fuel_consumption is not None: | |
| self.metrics['fuel_consumption_estimate'].update_state(fuel_consumption) | |
| if trajectory_deviation is not None: | |
| self.metrics['trajectory_deviation'].update_state(trajectory_deviation) | |
| if orbital_stability is not None: | |
| self.metrics['orbital_stability'].update_state(orbital_stability) | |
| logger.debug("M茅tricas de optimizaci贸n actualizadas. Tiempo: %.2f ms", optimization_time) | |
| def _update_prometheus_metrics(self): | |
| """ | |
| Actualiza las m茅tricas de Prometheus con los valores actuales de las m茅tricas de TensorFlow. | |
| """ | |
| # Transferir valores de m茅tricas internas a Prometheus | |
| for name, metric in self.metrics.items(): | |
| if name in self.prometheus_metrics: | |
| self.prometheus_metrics[name].set(metric.result().numpy()) | |
| logger.debug("M茅tricas de Prometheus actualizadas.") | |
| def get_prometheus_metrics(self): | |
| """ | |
| Obtiene los valores actuales de las m茅tricas para exportaci贸n a Prometheus. | |
| Returns: | |
| dict: Diccionario con los nombres de las m茅tricas y sus valores actuales. | |
| """ | |
| return {name: metric.result().numpy() for name, metric in self.metrics.items()} | |
| def export_to_prometheus(self, push_gateway_url): | |
| """ | |
| Exporta las m茅tricas actuales al Push Gateway de Prometheus. | |
| Args: | |
| push_gateway_url (str): URL del Push Gateway de Prometheus. | |
| """ | |
| try: | |
| # Actualizar las m茅tricas de Prometheus | |
| self._update_prometheus_metrics() | |
| # Exportar a Prometheus | |
| push_to_gateway( | |
| push_gateway_url, | |
| job='orbix_satellite_metrics', | |
| registry=self.prometheus_metrics | |
| ) | |
| logger.info("M茅tricas exportadas a Prometheus: %s", push_gateway_url) | |
| except Exception as e: | |
| logger.error("Error al exportar m茅tricas a Prometheus: %s", str(e)) | |
| def reset_metrics(self): | |
| """ | |
| Reinicia todas las m茅tricas a sus valores iniciales. | |
| """ | |
| for metric in self.metrics.values(): | |
| metric.reset_states() | |
| logger.info("M茅tricas reiniciadas.") | |
| def get_metrics_summary(self): | |
| """ | |
| Genera un resumen de las m茅tricas actuales en formato legible. | |
| Returns: | |
| str: Resumen de las m茅tricas en formato de texto. | |
| """ | |
| summary = "Resumen de m茅tricas de telemetr铆a:\n" | |
| for name, metric in self.metrics.items(): | |
| summary += f" - {name}: {metric.result().numpy():.6f}\n" | |
| summary += f"脷ltima actualizaci贸n: {self.last_update_time}\n" | |
| return summary |