Repository navigation
Releases: andrextor/p2p-log-parser
Release list
Release v2.7.0
Added
ParseResult.unrecognized: las unidades que ninguna estrategia
convirtió en evento, conlineycontentrecortado a 200 caracteres, igual
queerrors.stats.unrecognizedseguía siendo solo la cuenta, y con 452
«sin reconocer» no había forma de saber si era ruido del lambda
(START/END/REPORT, scheduler de artisan) o un formato por soportar.
Release v2.6.2
Fixed
- Las llamadas al gateway no se emparejaban en el export de Bref. El
pairKeyde Checkout solo se fijaba conaws_request_id, que Bref no mete
en el JSON (elRequestIdva en las líneas START/END del lambda). Sin
traza, la ida y la vuelta de[GW_LIB] HTTP Req/Resquedaban sueltas y el
visor las pintaba como dos tarjetas. Ahora la traza cae atransaction_idy
después asession_id; sin ninguno de los tres sigue sin inventarse un par.
Release v2.6.1
Fixed
- Ids repetidos con hora sin fracción. La semilla del
idera la marca de
tiempo más el mensaje de presentación, que se repite en varias líneas del
mismo job («State Update (Transaction)»). En el export de Bref, tres líneas
del mismo segundo compartían id y el visor, que deduplica por id, perdía
Transaction resolved. La semilla lleva ahora también el contexto.
Release v2.6.0
Added
- Soporte del export de Grafana de un Checkout desplegado con Bref. La
columna@messagetraeLEVEL\tmensaje\t{json}en vez del JSON a pelo, sin
datetime,TENANT_DOMAINniaws_request_id, y la hora del CSV viene sin
fracción.CheckoutGrafanaCsvParseracepta ambos marcadores; el formato
anterior se sigue leyendo igual. Fixture real recortado en
test/fixtures/checkout-bref-queue.csv. - Etiquetas
Gateway: Transaction Query(/gateway/query) yGateway: Transaction Search(/gateway/search), con el motivo cuando no esOK.
Fixed
- Los estados
PENDING_*del gateway (PENDING_CONFIRMATION…) se resolvían
comoFAILED; ahora sonPENDINGy no cuentan como error. CheckoutMapperno pasaba elstatus_codede la respuesta a
resolveOutcome, así que un403del gateway salía comoOK.- El código HTTP de una excepción de Guzzle (
`403 Forbidden`) no se leía;
solo se aceptaba el número a secas. - Con marcas de tiempo sin fracción, los eventos del mismo segundo se
ordenaban por id y barajaban «Start Updating» con «Transaction resolved».
Ahora conservan el orden del fichero. - El resultado de sesión ignoraba la transacción si el export no traía la
llamada a/process: una sesión conTransaction resolved: APPROVEDsalía
comoABANDONED.
Release v2.5.1
Fixed
-
La respuesta del gateway a un pago aprobado se marcaba como rechazo.
resolveOutcometomaba como error de negocio cualquier bloquestatusdel
gateway distinto deOK, y/rest/gateway/processrespondeAPPROVED
cuando el pago sale bien: el evento llegaba conoutcome.isError = true,
status: "REJECTED"y el mensaje «Approved», y el visor lo pintaba en rojo. -
Transaction resolvedno correlacionaba porplacetopay_id. Esa línea
trae el id recién asignado comoupdated_placetopay_id, conplacetopay_id
todavía ennull, ybuildCorrelationsolo leía el segundo. Justo la línea
que resuelve el pago se quedaba sin el identificador para filtrar por él.
Changed
- El bloque
statusdel gateway se traduce a resultado, no a error.
OK,APPROVEDyAPPROVED_PARTIAL→OK;PENDINGy
PENDING_VALIDATION→PENDING;REJECTED→REJECTED;FAILEDy
cualquier estado desconocido →FAILED. SoloFAILEDlleva
isError: true: un rechazo es la respuesta del proveedor, no un fallo de la
operación, y no debe contarse entre los errores del lote.codeymessage
se conservan en los tres casos para que el visor pueda explicarlo.
Release v2.5.0
Added
- La sesión de checkout dice cómo acabó, no solo si llegó a
/process.
CheckoutSessionMetadataganatransactionStatus(elstatedel último
Update transaction trace: Transaction resolved, por orden cronológico: un
rechazo seguido de un reintento aprobado acaba enAPPROVED),outcome
(APPROVED | REJECTED | PENDING | FAILED | EXPIRED | ABANDONED | UNKNOWN) y
lastStep, el hito más lejano alcanzado, para decir en qué paso se abandonó.
hasSuccessfulTransactionse mantiene y equivale aoutcome === "APPROVED". timings.process,timings.firstEventytimings.lastEvent, con sus
derivadasdurations.timeToProcessydurations.total. Hasta ahora solo se
medía cuánto tardaba el usuario en entrar y ver la sesión; faltaba cuánto
tardó en pagar y cuánto duró la sesión.checkout.session.expiredfijafinalState = "EXPIRED".CHECKOUT_FUNNEL_ORDERy el tipoCheckoutSessionOutcomese exportan.- Fixture
checkout-approved-session.csv: export real de Grafana de una sesión
aprobada de extremo a extremo, con el login del comercio anonimizado.
Fixed
- El retorno al comercio se contaba como 3DS. El hito se marcaba con
msg.includes("3ds"), y elPOST …/returndelReturnControllerse
etiqueta «Gateway Return (3DS / Redirection)» aunque no haya habido reto.
Toda sesión con retorno salía conthreeDS: true. Ahora solo cuentan
/mpi/lookupy el mensaje «Opening 3DS» del propio reto.
Release v2.4.1
Fixed
-
Las marcas de tiempo del análisis REST mezclaban zonas horarias. Las
líneas del SDK (interdin-rest-sdk.log) traen offset propio y se conservaban
en-05:00, pero las dehttp.logylaravel.logson naive, así que
RestNewRelicCsvParsercaía al epoch de New Relic y lo renderizaba en UTC con
toISOString(). En una misma traza convivían13:35:41-05:00y
18:35:45Z, y cualquier visualizador que pintaratimestamptal cual
mostraba un salto de cinco horas entre el request y su response. El epoch
(ts) siempre fue correcto; solo el texto estaba desalineado. La misma fuga a
UTC afectaba a las etiquetas por minuto degroupedBySession. -
El desempate del orden cronológico comparaba textos, no tiempos. Dos
eventos del mismo milisegundo se ordenaban conlocaleComparesobre
timestamp, que es hora local: con offsets distintos pesaban primero los
dígitos de la hora y solo después la fracción de microsegundos que se quería
comparar. Ahora se compara solo esa fracción, como número. -
El respaldo de
extractTimestamppara líneas demasiado cortas inventaba la
hora actual en UTC, reintroduciendo la mezcla de zonas que arregla esta
versión.
Added
fromEpochMs(ms, offset?), la contraparte detoEpochMs: rinde un epoch en
el offset de los logs en vez de en UTC.subMillis(timestamp), la fracción por debajo del milisegundo quetsno
conserva. Ambas exportadas desde el índice.
Release v2.4.0
Fixed
- Las llamadas del SDK se quedaban sin título igual que el Core API. La
2.3.0 arregló el Core API comparando el mensaje por igualdad, y
guzzle-loggerantepone un prefijo por integración
(APPLE_PAY-SDK: HTTP Req), así que Apple Pay, Google Pay y Click to Pay
seguían apareciendo con el mensaje crudo, sin proveedor y con la respuesta
clasificada comoBACKEND_LOG. Ahora cualquier intercambio de Guzzle produce
APPLE_PAY | POST /paymentservices/startSessionyAPPLE_PAY | 200 OK, con
el proveedor tomado del propio prefijo y las categoríasHTTP_REQ_OUT/
HTTP_RES. Sin prefijo sigue siendoCORE_API.
Changed
- El título de estos intercambios usa el identificador del proveedor tal cual
(CORE_API, noCore API), que es el mismo valor quedetails.provider.
Release v2.3.0
Fixed
- El Core API se quedaba sin título fuera de
/core/tokenize. Sus registros
llegan con el mensajeHTTP Req/HTTP Resa secas, y solo la tokenización
tenía un caso propio; el resto de rutas caía al genérico y aparecía en la
línea de tiempo con ese texto, sin proveedor y con la respuesta clasificada
comoBACKEND_LOG. Ahora cualquier ruta del Core API produce
Core API | POST /core/ads/searchyCore API | 404 Not Found, con
provider: CORE_APIy las categoríasHTTP_REQ_OUT/HTTP_RES. La ruta
sale del mismo sitio quedetails.endpoint, para que título y endpoint no
describan la llamada de dos maneras.
Release v2.2.0
Fixed
-
Checkout emparejaba solo las llamadas del gateway propio. El rol de un
registro deguzzle-loggerse deducía del texto del mensaje (HTTP Req/
HTTP Res, o el marcador[GW_LIB]), y cada integración lo redacta a su
manera: Apple Pay, Google Pay o Click to Pay quedaban como dos eventos
sueltos aunque compartieranaws_request_idy URL. Ahora el rol sale de la
forma del contexto —un registro traerequestoresponse, nunca los dos—,
que es estable entre integraciones. El texto del mensaje se sigue mirando
primero, así que los formatos que ya emparejaban no cambian.Además, la comparación con
HTTP Req/HTTP Resexigía igualdad exacta del
mensaje, y los SDK lo emiten con prefijo de integración
(APPLE_PAY-SDK: HTTP Req). Ahora basta con que lo contenga. Hay un test con
un export real de Grafana que lo cubre.