Files
tsUtilidades/tsNotificacionesClient.vb
manuel 8c0b8f85da - 2026-04-09 1.1.8 Se añade la clase tsNotificacionesClient
- 2026-04-09 1.1.7 Se añade la clase Excel
2026-04-09 11:59:01 +02:00

89 lines
4.5 KiB
VB.net

Imports System.Configuration
Imports System.Net
Imports System.Net.Http
Imports System.Net.Http.Headers
Imports System.Net.Http.Json
Public Class TsNotificacionesClient
Private ReadOnly _http As HttpClient
Private ReadOnly _idAplicacion As Integer
Public Sub New(baseUrl As String, idAplicacion As Integer, apiKey As String)
_idAplicacion = idAplicacion
ServicePointManager.ServerCertificateValidationCallback = Function(s, c, ch, e) True
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 Or SecurityProtocolType.Tls11
_http = New HttpClient() With {.BaseAddress = New Uri(baseUrl)}
_http.DefaultRequestHeaders.Add("X-Api-Key", apiKey)
End Sub
Public Shared Async Function RegistrarAsync(titulo As String, descripcion As String, TipoNotificacion As TipoNotificacionEnum, Optional Fichero As Byte() = Nothing) As Task
Try
ServicePointManager.ServerCertificateValidationCallback = Function(s, c, ch, e) True
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 Or SecurityProtocolType.Tls11
Dim baseUrl = ConfigurationManager.AppSettings("TsNotificaciones:ApiUrl")
Dim idAplicacion = Integer.Parse(ConfigurationManager.AppSettings("TsNotificaciones:IdAplicacion"))
Dim apiKey = ConfigurationManager.AppSettings("TsNotificaciones:ApiKey")
Dim http = New HttpClient() With {.BaseAddress = New Uri(baseUrl)}
Dim NombreServidor = ConfigurationManager.AppSettings("TsNotificaciones:ApiKey")
If NombreServidor = "" Then NombreServidor = System.Environment.MachineName
'Dim json As String = String.Format(
' "{{""idAplicacion"":{0},""nombreServidor"":""{1}"",""ipServidor"":""{2}""," &
' """titulo"":""{3}"",""stacktrace"":""{4}"",""nivelSeveridad"":{5}}}",
' idAplicacion, EscaparJson(Environment.MachineName), ObtenerIp(),
' EscaparJson(titulo), EscaparJson(descripcion), CInt(TipoNotificacion))
'Await http.PostAsync("/api/alertas/registrar",
' New StringContent(json, Encoding.UTF8, "application/json"))
Dim Tipo = CInt(TipoNotificacion)
Dim request = New HttpRequestMessage(HttpMethod.Post, "/api/alertas/registrar")
request.Headers.Add("X-Api-Key", apiKey)
request.Content = JsonContent.Create(New With {idAplicacion, NombreServidor, ObtenerIp(), titulo, descripcion, Tipo})
Dim response = Await http.SendAsync(request)
Dim body As System.Text.Json.JsonElement = Await response.Content.ReadFromJsonAsync(Of System.Text.Json.JsonElement)()
Dim id = body.GetProperty("id").GetInt32()
If Fichero IsNot Nothing Then
Await SubirFichero(http, apiKey, id, Fichero)
End If
Catch ex As Exception
Throw New Exception(ex.Message, ex)
End Try
End Function
Private Shared Async Function SubirFichero(ByVal http As HttpClient, ByVal apiKey As String, ByVal alertaId As Integer, ByVal datos As Byte()) As Task
Try
Dim fileContent = New ByteArrayContent(datos)
fileContent.Headers.ContentType = New MediaTypeHeaderValue("image/png")
Dim multipart = New MultipartFormDataContent()
multipart.Add(fileContent, "archivo", "Imagen.png")
Dim request = New HttpRequestMessage(HttpMethod.Post, $"/api/alertas/{alertaId}/archivo")
request.Headers.Add("X-Api-Key", apiKey)
request.Content = multipart
Dim response = Await http.SendAsync(request)
Dim ok As Boolean = response.IsSuccessStatusCode
If Not ok Then Throw New Exception($"Subida fallida ({response.StatusCode}): {Await response.Content.ReadAsStringAsync()}")
Catch httpEx As Exception
Throw New Exception
End Try
End Function
Private Shared Function ObtenerIp() As String
For Each addr In Dns.GetHostAddresses(Dns.GetHostName())
If addr.AddressFamily = Sockets.AddressFamily.InterNetwork Then Return addr.ToString()
Next
Return "127.0.0.1"
End Function
'Private Shared Function EscaparJson(s As String) As String
' Return s.Replace("\", "\\").Replace("""", "\""").Replace(vbCr, "\r").Replace(vbLf, "\n")
'End Function
Public Enum TipoNotificacionEnum
INFO = 0
ADVERTENCIA = 1
[ERROR] = 2
CRÍTICO = 3
End Enum
End Class