Spaces:
Configuration error
Configuration error
File size: 7,596 Bytes
3dc2617 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | 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 |