¿Qué estado de NetworkManager recibió realmente su notificador?
El mismo entero significa desactivado en una enumeración y a medio configurar en otra. Haga coincidir el tipo de estado con el objeto antes de copiar una condición.
El estado cuatro dispara una notificación en una API y significa otra cosa en otra, y el código no muestra ninguna diferencia. Cada valor de estado en NetworkManager pertenece a una enumeración con nombre, y las enumeraciones no coinciden en qué significa un número dado. Por eso copiar un entero de un fragmento que funciona a otra función de retorno no es una transferencia de comportamiento; es una coincidencia esperando a romperse. Encuentre primero el tipo y el número se vuelve legible.
Un número sin tipo es un rumor
Aquí importan dos enumeraciones. Una describe una conexión activa en general: desconocido, activando, activado, desactivando, desactivado. La otra describe específicamente una conexión VPN, y tiene más paradas en el camino, incluidas la preparación, la configuración de la conexión, la configuración de IP y una solicitud de autenticación antes de que se active nada. Su numeración empieza en cero en ambos casos y luego diverge, así que el valor que significa desactivado en la enumeración general cae en algún punto del medio de la secuencia VPN. Ninguno de los encabezados es incorrecto; responden a preguntas distintas.
Use la constante simbólica del encabezado o binding instalado en lugar de un literal. El nombre sobrevive a una renumeración; el entero no.
Vigile una conexión, no la máquina
Parta del UUID del perfil que le interesa y del objeto de conexión activa creado por esa activación. El estado de un dispositivo, o el estado de otro túnel, no es un sustituto, incluso cuando ambos cambian en el mismo momento. Mantenga la identidad del objeto junto con la observación, para que un informe posterior pueda decir qué perfil lo produjo. La máquina tiene muchos estados; el aviso trata de uno de ellos.
Después decida qué debe significar el aviso. Una conexión que nunca llegó a la activación es un fallo de configuración, y una sesión que estaba activa y luego desapareció es una pérdida. Merecen palabras distintas.
Diga qué transición está informando
Guarde el estado anterior y compárelo con el nuevo, en lugar de probar el valor nuevo de forma aislada. Una transición a un estado fallido y una transición fuera de un estado activado son eventos distintos incluso cuando ambos terminan sin nada conectado. Registre la cadena de motivo al lado, porque a menudo es la única parte sobre la que un usuario puede actuar.
Una desconexión intencionada no es una falla. Si el aviso no puede distinguirla, enseñará a la gente a ignorarlo.
Mantenga vivo al observador
El sondeo repetido no debe generar otra alerta para un estado que no ha cambiado. Esa única regla elimina la mayor parte del ruido que generan estos notificadores.
También maneje el caso en que el gestor se reinicia o el objeto observado se reemplaza. Un vigilante ligado a una identidad obsoleta se calla justo en el momento en que ocurre algo interesante, y el silencio parece salud. Vuelva a descubrir el objeto actual tras un cambio en la presencia del gestor, y registre cuándo ocurrió el redescubrimiento. De lo contrario, el registro muestra un túnel que simplemente dejó de informar.
Entregue el aviso donde está el usuario
Una función de retorno privilegiada del sistema no hereda el servicio de notificaciones de una sesión de escritorio. Un mensaje enviado desde un manejador a nivel de root puede desaparecer sin error, lo que produce un notificador que funciona cuando se prueba a mano y nunca en la práctica. Entregue en la sesión que posee el escritorio, o deje que el propio cliente del escritorio levante el aviso.
Prefiera la notificación existente del cliente si ya cubre el caso, ya que dos notificadores para un evento es un problema de soporte y no una redundancia. Mantenga la hora del evento, el perfil y el motivo en el registro de soporte, y deje fuera las contraseñas y los perfiles completos. Recuerde qué es el aviso: un informe de un estado observado, no un mecanismo de aplicación, porque bloquear el tráfico mientras el túnel está ausente es una política aparte con su propia implementación.