{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-04T10:23:08.247Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-04T10:23:08.779Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-04T10:23:08.801Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-04T10:23:08.849Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-04T10:23:08.850Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-04T10:23:08.852Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-04T10:23:08.853Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-04T10:23:08.855Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-04T10:23:08.856Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-04T10:23:08.856Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-04T10:23:08.856Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-04T10:23:08.856Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-04T10:23:08.858Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-04T10:23:08.863Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:268:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-04T10:23:09.398Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-04T10:28:21.420Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-04T10:30:00.381Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-04T10:30:00.382Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-04T10:30:00.394Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-04T10:30:00.400Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-04T10:40:25.785Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-04T10:42:54.478Z"}
{"level":"error","message":"[Error] An admin account already exists. Only one admin is allowed.","method":"POST","path":"/api/auth/register","stack":"Error: An admin account already exists. Only one admin is allowed.\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.register (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:170:13)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:72:16","timestamp":"2026-08-04T10:45:35.774Z"}
{"level":"info","message":"[Auth] Registered user: rele@mailinator.com (role: project-manager)","timestamp":"2026-08-04T10:45:43.178Z"}
{"level":"info","message":"[Auth] Registered user: qegovo@mailinator.com (role: team-member)","timestamp":"2026-08-04T10:46:13.285Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-04T11:01:44.084Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-04T11:01:44.576Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-04T11:01:44.600Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-04T11:01:44.636Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-04T11:01:44.638Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-04T11:01:44.641Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-04T11:01:44.642Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-04T11:01:44.642Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-04T11:01:44.645Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-04T11:01:44.646Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-04T11:01:44.646Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-04T11:01:44.646Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-04T11:01:44.646Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-04T11:01:44.653Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (JWSuI-zEwqszrahGAAAq)","timestamp":"2026-08-04T11:03:16.155Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (LIQFu1kQ-CS0XGx-AAAr)","timestamp":"2026-08-04T11:03:16.169Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (LIQFu1kQ-CS0XGx-AAAr)","timestamp":"2026-08-04T11:03:16.246Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (JWSuI-zEwqszrahGAAAq)","timestamp":"2026-08-04T11:03:16.250Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (dvdxel5E5UA5gXvUAAAu)","timestamp":"2026-08-04T11:03:16.285Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (g05bynt2AYeIzlLMAAAv)","timestamp":"2026-08-04T11:03:16.294Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-04T11:03:21.977Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-04T11:03:22.356Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-04T11:03:22.380Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-04T11:03:22.419Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-04T11:03:22.422Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-04T11:03:22.424Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-04T11:03:22.425Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-04T11:03:22.425Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-04T11:03:22.428Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-04T11:03:22.429Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-04T11:03:22.429Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-04T11:03:22.429Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-04T11:03:22.429Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-04T11:03:22.434Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (DnbnQWOVNbyRNYIxAAAD)","timestamp":"2026-08-04T11:03:25.726Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (tG5XEi5fPfCiKL0PAAAE)","timestamp":"2026-08-04T11:03:25.739Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (DnbnQWOVNbyRNYIxAAAD)","timestamp":"2026-08-04T11:03:25.823Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (tG5XEi5fPfCiKL0PAAAE)","timestamp":"2026-08-04T11:03:25.826Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (QgO08Z_rmJIMC4DuAAAH)","timestamp":"2026-08-04T11:03:25.860Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (kGQu2yfnZ-rrbqNMAAAI)","timestamp":"2026-08-04T11:03:25.868Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (UVswCuT7OaAfwOfJAAAe)","timestamp":"2026-08-04T11:06:05.352Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (UVswCuT7OaAfwOfJAAAe)","timestamp":"2026-08-04T11:06:05.421Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (jN7oTeAnVV3E4v7nAAAg)","timestamp":"2026-08-04T11:06:05.442Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:273:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-04T11:08:55.376Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-04T11:09:00.283Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Rrt_KY979GPFt44hAAAi)","timestamp":"2026-08-04T11:09:00.366Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (_HaIca6UUJxkIU17AAAk)","timestamp":"2026-08-04T11:09:00.512Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-04T11:11:03.945Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-04T11:11:04.308Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-04T11:11:04.331Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-04T11:11:04.362Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-04T11:11:04.366Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-04T11:11:04.367Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-04T11:11:04.368Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-04T11:11:04.368Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-04T11:11:04.371Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-04T11:11:04.371Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-04T11:11:04.371Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-04T11:11:04.371Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-04T11:11:04.371Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-04T11:11:04.374Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (xfGJnXmU49HKD6SZAAAC)","timestamp":"2026-08-04T11:11:04.440Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (SdvghVPw3DE9IgnAAAAD)","timestamp":"2026-08-04T11:11:04.458Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (SdvghVPw3DE9IgnAAAAD)","timestamp":"2026-08-04T11:11:04.559Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (xfGJnXmU49HKD6SZAAAC)","timestamp":"2026-08-04T11:11:04.562Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (7i-I5sk-AK7ym1CzAAAG)","timestamp":"2026-08-04T11:11:04.589Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (6LPGkUqY0we55jFeAAAH)","timestamp":"2026-08-04T11:11:04.594Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (zDDVlem20J6tBA9eAAAK)","timestamp":"2026-08-04T11:11:06.275Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (yTotweJ22ej6EPcpAAAL)","timestamp":"2026-08-04T11:11:06.282Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (YqalA0dt7SUmh3xgAAAN)","timestamp":"2026-08-04T11:11:06.451Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (W9agw1yLm_uxaPJAAAAQ)","timestamp":"2026-08-04T11:11:33.682Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (G9IGGRohXQSwS7LbAAAR)","timestamp":"2026-08-04T11:11:33.699Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (W9agw1yLm_uxaPJAAAAQ)","timestamp":"2026-08-04T11:11:33.775Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (G9IGGRohXQSwS7LbAAAR)","timestamp":"2026-08-04T11:11:33.779Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (MmioHSh_Fa7XKyWpAAAU)","timestamp":"2026-08-04T11:11:33.858Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (OZY4nzOICYeYekECAAAV)","timestamp":"2026-08-04T11:11:33.863Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (OZY4nzOICYeYekECAAAV)","timestamp":"2026-08-04T11:11:52.357Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (lM0-GeLWG5mbfj5KAAAX)","timestamp":"2026-08-04T11:11:55.687Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (zDDVlem20J6tBA9eAAAK)","timestamp":"2026-08-04T11:12:16.274Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (yTotweJ22ej6EPcpAAAL)","timestamp":"2026-08-04T11:12:16.278Z"}
{"level":"error","message":"[Error] An admin account already exists. Only one admin is allowed.","method":"POST","path":"/api/auth/register","stack":"Error: An admin account already exists. Only one admin is allowed.\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.register (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:170:13)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:72:16","timestamp":"2026-08-04T11:14:05.097Z"}
{"level":"error","message":"[Error] An admin account already exists. Only one admin is allowed.","method":"POST","path":"/api/auth/register","stack":"Error: An admin account already exists. Only one admin is allowed.\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.register (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:170:13)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:72:16","timestamp":"2026-08-04T11:14:27.192Z"}
{"level":"info","message":"[Auth] Registered user: aditya@yopmail.com (role: project-manager)","timestamp":"2026-08-04T11:14:45.184Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (6LPGkUqY0we55jFeAAAH)","timestamp":"2026-08-04T11:16:26.548Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (7i-I5sk-AK7ym1CzAAAG)","timestamp":"2026-08-04T11:16:26.551Z"}
{"level":"info","message":"[Auth] User logged in: aditya@yopmail.com (IP: 122.162.240.56)","timestamp":"2026-08-04T11:16:42.883Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (fmDir4pqNz9L9NViAAAZ)","timestamp":"2026-08-04T11:16:42.934Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (OYAeVdFQ3RRoExpIAAAb)","timestamp":"2026-08-04T11:16:43.021Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (OYAeVdFQ3RRoExpIAAAb)","timestamp":"2026-08-04T11:17:12.465Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (PfQ2bJV6_mMDYkobAAAe)","timestamp":"2026-08-04T11:18:12.978Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (3kUnUppBCnankvm-AAAf)","timestamp":"2026-08-04T11:18:12.985Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (PfQ2bJV6_mMDYkobAAAe)","timestamp":"2026-08-04T11:18:13.064Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (3kUnUppBCnankvm-AAAf)","timestamp":"2026-08-04T11:18:13.069Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (oope39Rqbxt3QmYxAAAi)","timestamp":"2026-08-04T11:18:13.089Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (v32Rz5aOsBTQA5wZAAAj)","timestamp":"2026-08-04T11:18:13.092Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (oope39Rqbxt3QmYxAAAi)","timestamp":"2026-08-04T11:18:15.456Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (I0ICcEYNO9OoGBawAAAl)","timestamp":"2026-08-04T11:18:19.046Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (I0ICcEYNO9OoGBawAAAl)","timestamp":"2026-08-04T11:18:34.151Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (MmioHSh_Fa7XKyWpAAAU)","timestamp":"2026-08-04T11:18:35.902Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (lM0-GeLWG5mbfj5KAAAX)","timestamp":"2026-08-04T11:18:56.032Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (buoO0Gph271rhEpqAAAn)","timestamp":"2026-08-04T11:19:30.533Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (buoO0Gph271rhEpqAAAn)","timestamp":"2026-08-04T11:19:30.580Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (Aqjnv8FdN1hZXn3pAAAp)","timestamp":"2026-08-04T11:19:30.614Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (OztXNKAI7FHaD2L5AAAr)","timestamp":"2026-08-04T11:19:35.146Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (fmDir4pqNz9L9NViAAAZ)","timestamp":"2026-08-04T11:19:58.085Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-04T11:20:47.298Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (0yJY6rE3zPnJxjRUAAAt)","timestamp":"2026-08-04T11:20:47.347Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (y0-84J8S-SdEkHAkAAAv)","timestamp":"2026-08-04T11:20:47.438Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (Me4qr8dKQldssIM7AAAy)","timestamp":"2026-08-04T11:20:51.607Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (Ag3xJGbnfqUAxRt2AAAz)","timestamp":"2026-08-04T11:20:51.612Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (Me4qr8dKQldssIM7AAAy)","timestamp":"2026-08-04T11:20:51.651Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (Ag3xJGbnfqUAxRt2AAAz)","timestamp":"2026-08-04T11:20:51.657Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (6LjMXVwlVIYAUYp4AAA2)","timestamp":"2026-08-04T11:20:51.663Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (zE97Y9QUv-YtcqNaAAA3)","timestamp":"2026-08-04T11:20:51.685Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (Aqjnv8FdN1hZXn3pAAAp)","timestamp":"2026-08-04T11:21:30.773Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (OztXNKAI7FHaD2L5AAAr)","timestamp":"2026-08-04T11:21:35.179Z"}
{"level":"error","message":"[Error] No report found.","method":"GET","path":"/api/daily-reports/download-excel","stack":"Error: No report found.\n    at exports.downloadDailyReportExcel (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/dailyReports/dailyReports.service.js:734:19)\n    at async exports.downloadDailyReportExcel (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/dailyReports/dailyReports.controller.js:65:20)","timestamp":"2026-08-04T11:22:56.141Z"}
{"level":"error","message":"[Error] No report found.","method":"GET","path":"/api/daily-reports/download-excel","stack":"Error: No report found.\n    at exports.downloadDailyReportExcel (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/dailyReports/dailyReports.service.js:734:19)\n    at async exports.downloadDailyReportExcel (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/dailyReports/dailyReports.controller.js:65:20)","timestamp":"2026-08-04T11:22:58.186Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (6LjMXVwlVIYAUYp4AAA2)","timestamp":"2026-08-04T11:23:32.127Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (2ppDnvVY7OKmGWXhAAA5)","timestamp":"2026-08-04T11:23:37.183Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (c8OHPUMQGX1HKz8jAAA8)","timestamp":"2026-08-04T11:24:48.830Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (K3XQ10WXUOTKkkQzAAA9)","timestamp":"2026-08-04T11:24:48.835Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (K3XQ10WXUOTKkkQzAAA9)","timestamp":"2026-08-04T11:24:48.930Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (c8OHPUMQGX1HKz8jAAA8)","timestamp":"2026-08-04T11:24:48.933Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (3fUvLVlsOgIGeqGQAABA)","timestamp":"2026-08-04T11:24:48.977Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (srEp74HQCugGj5AdAABB)","timestamp":"2026-08-04T11:24:48.980Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-04T11:24:53.317Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-04T11:24:53.622Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-04T11:24:53.644Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-04T11:24:53.678Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-04T11:24:53.681Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-04T11:24:53.682Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-04T11:24:53.684Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-04T11:24:53.685Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-04T11:24:53.687Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-04T11:24:53.688Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-04T11:24:53.688Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-04T11:24:53.688Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-04T11:24:53.688Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-04T11:24:53.693Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (BvZq1qMgHcmyckiHAAAB)","timestamp":"2026-08-04T11:24:55.282Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Oa7uWBmgvB-YtJJ2AAAD)","timestamp":"2026-08-04T11:24:55.437Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (hwbK_Nyxcp3Cx480AAAG)","timestamp":"2026-08-04T11:24:56.268Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Vqs6L1vEDKCTCdBNAAAH)","timestamp":"2026-08-04T11:24:56.273Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (GpRi9UhT-dh-Z5qfAAAK)","timestamp":"2026-08-04T11:24:56.737Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (PbsJWuIpp61b_gpRAAAL)","timestamp":"2026-08-04T11:24:56.743Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (PbsJWuIpp61b_gpRAAAL)","timestamp":"2026-08-04T11:25:17.041Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (XO0nRNyU67T0fL3uAAAN)","timestamp":"2026-08-04T11:25:18.437Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (XO0nRNyU67T0fL3uAAAN)","timestamp":"2026-08-04T11:26:28.435Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (hwbK_Nyxcp3Cx480AAAG)","timestamp":"2026-08-04T11:26:31.284Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Vqs6L1vEDKCTCdBNAAAH)","timestamp":"2026-08-04T11:26:31.286Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (GpRi9UhT-dh-Z5qfAAAK)","timestamp":"2026-08-04T11:26:31.754Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-04T11:28:16.573Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-04T11:28:16.867Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-04T11:28:16.888Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-04T11:28:16.918Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-04T11:28:16.921Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-04T11:28:16.923Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-04T11:28:16.923Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-04T11:28:16.924Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-04T11:28:16.926Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-04T11:28:16.927Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-04T11:28:16.927Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-04T11:28:16.927Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-04T11:28:16.927Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-04T11:28:16.930Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (_8eo9pU4kuk6bFRFAAAB)","timestamp":"2026-08-04T11:28:18.454Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (yw8TEVp5IKpo55ruAAAD)","timestamp":"2026-08-04T11:28:19.262Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-04T11:30:00.996Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-04T11:30:00.997Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-04T11:30:01.013Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-04T11:30:01.019Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (C7mvGRwUqxQxZFzgAAAF)","timestamp":"2026-08-04T11:32:02.863Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (C7mvGRwUqxQxZFzgAAAF)","timestamp":"2026-08-04T11:32:03.002Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (q373fAETHsCRpSbGAAAH)","timestamp":"2026-08-04T11:32:03.027Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (_8eo9pU4kuk6bFRFAAAB)","timestamp":"2026-08-04T11:32:23.647Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (LYziC2ataAv7tCVdAAAJ)","timestamp":"2026-08-04T11:32:36.401Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (LYziC2ataAv7tCVdAAAJ)","timestamp":"2026-08-04T11:32:46.806Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (fOrWjtkJr6s1tt1wAAAL)","timestamp":"2026-08-04T11:32:48.739Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (fOrWjtkJr6s1tt1wAAAL)","timestamp":"2026-08-04T11:33:31.377Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (YIlmvOCp9_rjBNSWAAAN)","timestamp":"2026-08-04T11:33:35.389Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-04T11:34:15.559Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (fG1Cr5DX0I6x2DIwAAAP)","timestamp":"2026-08-04T11:34:15.627Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (pLQ3-7HcDlfdNwWzAAAR)","timestamp":"2026-08-04T11:34:15.747Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (YIlmvOCp9_rjBNSWAAAN)","timestamp":"2026-08-04T11:37:58.063Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (q373fAETHsCRpSbGAAAH)","timestamp":"2026-08-04T11:37:58.067Z"}
{"level":"info","message":"[Auth] User logged in: aditya@yopmail.com (IP: 122.162.240.56)","timestamp":"2026-08-04T11:38:03.619Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (EtGL_3Vov62eeQvPAAAT)","timestamp":"2026-08-04T11:38:03.656Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (jNP7ZblpF31nGVkBAAAV)","timestamp":"2026-08-04T11:38:03.742Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (jNP7ZblpF31nGVkBAAAV)","timestamp":"2026-08-04T11:38:07.618Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (xl5njb8llHZM_yeRAAAX)","timestamp":"2026-08-04T11:38:18.088Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Kgzn152N0WjOuDkcAAAa)","timestamp":"2026-08-04T11:38:30.842Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (v1S5kL8w0wZ-tD_pAAAb)","timestamp":"2026-08-04T11:38:30.846Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Kgzn152N0WjOuDkcAAAa)","timestamp":"2026-08-04T11:38:30.898Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (v1S5kL8w0wZ-tD_pAAAb)","timestamp":"2026-08-04T11:38:30.902Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (8TLA8CnCRn85PsOwAAAe)","timestamp":"2026-08-04T11:38:30.925Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (fegpHqfcdYSBlCK3AAAf)","timestamp":"2026-08-04T11:38:30.929Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (xl5njb8llHZM_yeRAAAX)","timestamp":"2026-08-04T11:38:32.415Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (8TLA8CnCRn85PsOwAAAe)","timestamp":"2026-08-04T11:38:37.323Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (hFDum6gNF2uaxGpEAAAh)","timestamp":"2026-08-04T11:38:47.792Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (fG1Cr5DX0I6x2DIwAAAP)","timestamp":"2026-08-04T11:39:10.797Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (pLQ3-7HcDlfdNwWzAAAR)","timestamp":"2026-08-04T11:39:10.933Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (cOVbFWh9Cgma2Py9AAAk)","timestamp":"2026-08-04T11:39:17.516Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (rD66B-SPJTw9CdtWAAAl)","timestamp":"2026-08-04T11:39:17.523Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (rD66B-SPJTw9CdtWAAAl)","timestamp":"2026-08-04T11:39:17.628Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (cOVbFWh9Cgma2Py9AAAk)","timestamp":"2026-08-04T11:39:17.631Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (snHWvKMEg3OzykYEAAAo)","timestamp":"2026-08-04T11:39:17.642Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (eguGT9_5lXPROvVpAAAr)","timestamp":"2026-08-04T11:39:17.765Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (ceXcWV6Fzx81SIPZAAAs)","timestamp":"2026-08-04T11:39:17.771Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (eguGT9_5lXPROvVpAAAr)","timestamp":"2026-08-04T11:39:17.794Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (ceXcWV6Fzx81SIPZAAAs)","timestamp":"2026-08-04T11:39:17.798Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (0ksVS86FHdFj_g25AAAv)","timestamp":"2026-08-04T11:39:17.819Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Y7QDcnGCqxZSHpW4AAAw)","timestamp":"2026-08-04T11:39:17.826Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Y7QDcnGCqxZSHpW4AAAw)","timestamp":"2026-08-04T11:39:18.622Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (gH7456ebNV92zVdEAAAy)","timestamp":"2026-08-04T11:39:23.128Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (gH7456ebNV92zVdEAAAy)","timestamp":"2026-08-04T11:39:31.223Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (fegpHqfcdYSBlCK3AAAf)","timestamp":"2026-08-04T11:39:40.924Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (hFDum6gNF2uaxGpEAAAh)","timestamp":"2026-08-04T11:39:57.792Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (snHWvKMEg3OzykYEAAAo)","timestamp":"2026-08-04T11:40:02.626Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (ea5TobkXSOnlsQfXAAA0)","timestamp":"2026-08-04T11:55:30.327Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (yw8TEVp5IKpo55ruAAAD)","timestamp":"2026-08-04T11:59:31.681Z"}
{"level":"info","message":"[Cron] Running missing report reminder","timestamp":"2026-08-04T12:00:00.055Z"}
{"level":"info","message":"[Job:MissingReport] Missing report reminder job - pending notification module integration","timestamp":"2026-08-04T12:00:00.056Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (mEb6lNY5p96Gv2alAAA2)","timestamp":"2026-08-04T12:02:19.372Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-04T12:06:39.924Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (k_FkcbwRcpHbwS82AAA4)","timestamp":"2026-08-04T12:06:40.002Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (_IGTi2AwlCNvDGGNAAA6)","timestamp":"2026-08-04T12:06:40.163Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (_IGTi2AwlCNvDGGNAAA6)","timestamp":"2026-08-04T12:06:46.194Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (5Lkt8FaEBmNEhr0oAAA8)","timestamp":"2026-08-04T12:06:49.678Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (T6M9Se1AY0fGvXLBAAA-)","timestamp":"2026-08-04T12:06:56.971Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (T6M9Se1AY0fGvXLBAAA-)","timestamp":"2026-08-04T12:06:57.039Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (K-T4lJh6zZ0J0gTaAABA)","timestamp":"2026-08-04T12:06:57.074Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (5Lkt8FaEBmNEhr0oAAA8)","timestamp":"2026-08-04T12:07:35.859Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (k_FkcbwRcpHbwS82AAA4)","timestamp":"2026-08-04T12:07:35.862Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (mEb6lNY5p96Gv2alAAA2)","timestamp":"2026-08-04T12:07:39.627Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:273:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-04T12:07:44.915Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:273:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-04T12:07:55.539Z"}
{"level":"info","message":"[Auth] User logged in: aditya@yopmail.com (IP: 122.162.240.56)","timestamp":"2026-08-04T12:08:08.812Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (8qsykWirZo8GnwhBAABD)","timestamp":"2026-08-04T12:08:08.980Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (Is1f0sUCUulKOZ89AABE)","timestamp":"2026-08-04T12:08:09.024Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (Is1f0sUCUulKOZ89AABE)","timestamp":"2026-08-04T12:08:16.307Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (_Z3zCuCCTyUBJ0VdAABG)","timestamp":"2026-08-04T12:08:29.672Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (_Z3zCuCCTyUBJ0VdAABG)","timestamp":"2026-08-04T12:08:40.271Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (y2O4P87hEBMZrPodAABI)","timestamp":"2026-08-04T12:08:52.034Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (y2O4P87hEBMZrPodAABI)","timestamp":"2026-08-04T12:09:11.255Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (JEozAPaH0aXflIvyAABK)","timestamp":"2026-08-04T12:10:59.631Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (JEozAPaH0aXflIvyAABK)","timestamp":"2026-08-04T12:11:48.156Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (2XIvyhXmYccUnMWnAABM)","timestamp":"2026-08-04T12:11:52.740Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (nlrdfTM8rtZNnQ4LAABO)","timestamp":"2026-08-04T12:21:32.333Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (nlrdfTM8rtZNnQ4LAABO)","timestamp":"2026-08-04T12:21:36.787Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (_FInyF4VYokNYV58AABQ)","timestamp":"2026-08-04T12:21:38.779Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (btURu_Yp3sRGP1UZAABT)","timestamp":"2026-08-04T12:22:25.278Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (CpB4iuvPM1VivIjPAABU)","timestamp":"2026-08-04T12:22:25.282Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (btURu_Yp3sRGP1UZAABT)","timestamp":"2026-08-04T12:22:25.368Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (CpB4iuvPM1VivIjPAABU)","timestamp":"2026-08-04T12:22:25.370Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (y7Dn8lS2noXi72sWAABX)","timestamp":"2026-08-04T12:22:25.396Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (N3OVSlPxFMEvnyveAABY)","timestamp":"2026-08-04T12:22:25.399Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (K-T4lJh6zZ0J0gTaAABA)","timestamp":"2026-08-04T12:22:44.808Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (_FInyF4VYokNYV58AABQ)","timestamp":"2026-08-04T12:22:48.829Z"}
{"level":"info","message":"[Roles] Role updated: Project Manager (project-manager) by cms8s9s9f006tshjnh8pdc5np","timestamp":"2026-08-04T12:23:54.187Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (Sy6by76eTmPQQhH6AABb)","timestamp":"2026-08-04T12:24:01.360Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (z1EsMtPvS8nqtt61AABc)","timestamp":"2026-08-04T12:24:01.374Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (Sy6by76eTmPQQhH6AABb)","timestamp":"2026-08-04T12:24:01.457Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (z1EsMtPvS8nqtt61AABc)","timestamp":"2026-08-04T12:24:01.464Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (YwYfysaT36h3bbwAAABf)","timestamp":"2026-08-04T12:24:01.500Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (YPYIQxDCYbPieE1pAABg)","timestamp":"2026-08-04T12:24:01.586Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (8qsykWirZo8GnwhBAABD)","timestamp":"2026-08-04T12:24:21.513Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (NZPk6oywWuwSUOROAABj)","timestamp":"2026-08-04T12:24:26.945Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (G55Yjt6bkUNMFqUQAABk)","timestamp":"2026-08-04T12:24:26.955Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (NZPk6oywWuwSUOROAABj)","timestamp":"2026-08-04T12:24:27.053Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (G55Yjt6bkUNMFqUQAABk)","timestamp":"2026-08-04T12:24:27.064Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (CplVcsWaRUMJ3iISAABn)","timestamp":"2026-08-04T12:24:27.099Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (tMGsFc8_ciS4ASB7AABo)","timestamp":"2026-08-04T12:24:27.132Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (2XIvyhXmYccUnMWnAABM)","timestamp":"2026-08-04T12:24:44.598Z"}
{"level":"info","message":"[Roles] Role updated: Project Manager (project-manager) by cms8s9s9f006tshjnh8pdc5np","timestamp":"2026-08-04T12:25:03.496Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (WLfLsOq-4L4rWgpvAABr)","timestamp":"2026-08-04T12:25:08.725Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (rGREIGx-5P1T2BZPAABs)","timestamp":"2026-08-04T12:25:08.779Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (WLfLsOq-4L4rWgpvAABr)","timestamp":"2026-08-04T12:25:08.850Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (rGREIGx-5P1T2BZPAABs)","timestamp":"2026-08-04T12:25:08.852Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (Ddy8Y-Wu0yRWn6GlAABv)","timestamp":"2026-08-04T12:25:08.902Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (iK0Ukxk05PYZyCNKAABw)","timestamp":"2026-08-04T12:25:08.907Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (YPYIQxDCYbPieE1pAABg)","timestamp":"2026-08-04T12:25:11.502Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (YwYfysaT36h3bbwAAABf)","timestamp":"2026-08-04T12:25:11.503Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (CplVcsWaRUMJ3iISAABn)","timestamp":"2026-08-04T12:25:37.201Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (tMGsFc8_ciS4ASB7AABo)","timestamp":"2026-08-04T12:25:37.205Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (N3OVSlPxFMEvnyveAABY)","timestamp":"2026-08-04T12:26:41.867Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (3t4V42DJnDTt1hpAAABy)","timestamp":"2026-08-04T12:26:49.678Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (3t4V42DJnDTt1hpAAABy)","timestamp":"2026-08-04T12:27:12.324Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (2wU-3xH7r_NTOYd-AAB0)","timestamp":"2026-08-04T12:27:14.212Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (2wU-3xH7r_NTOYd-AAB0)","timestamp":"2026-08-04T12:27:59.179Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (y7Dn8lS2noXi72sWAABX)","timestamp":"2026-08-04T12:28:11.391Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-04T12:30:00.906Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-04T12:30:00.907Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-04T12:30:00.919Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-04T12:30:00.925Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (EtGL_3Vov62eeQvPAAAT)","timestamp":"2026-08-04T12:45:57.390Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (ea5TobkXSOnlsQfXAAA0)","timestamp":"2026-08-04T12:48:48.395Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (0ksVS86FHdFj_g25AAAv)","timestamp":"2026-08-04T12:48:51.881Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (iK0Ukxk05PYZyCNKAABw)","timestamp":"2026-08-04T12:56:51.855Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (a3FLPP2g8lGeaPN7AAB3)","timestamp":"2026-08-04T12:56:52.331Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (nLShZa725xELbDxVAAB4)","timestamp":"2026-08-04T12:56:52.335Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (Ddy8Y-Wu0yRWn6GlAABv)","timestamp":"2026-08-04T12:57:14.171Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (a3FLPP2g8lGeaPN7AAB3)","timestamp":"2026-08-04T12:58:27.390Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (nLShZa725xELbDxVAAB4)","timestamp":"2026-08-04T12:58:27.392Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (0N3vd8OswmbXOtliAAB6)","timestamp":"2026-08-04T13:14:08.848Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (jN6apBHz6TvMk-RLAAB8)","timestamp":"2026-08-04T13:14:08.946Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (0N3vd8OswmbXOtliAAB6)","timestamp":"2026-08-04T13:14:53.824Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (jN6apBHz6TvMk-RLAAB8)","timestamp":"2026-08-04T13:14:53.921Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-04T13:30:00.031Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-04T13:30:00.033Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-04T13:30:00.055Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-04T13:30:00.062Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-04T14:30:00.240Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-04T14:30:00.242Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-04T14:30:00.257Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-04T14:30:00.261Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-04T15:30:00.438Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-04T15:30:00.440Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-04T15:30:00.454Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-04T15:30:00.461Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-04T16:30:00.734Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-04T16:30:00.739Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-04T16:30:00.763Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-04T16:30:00.785Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-04T18:05:07.514Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-04T18:05:08.034Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-04T18:05:08.055Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-04T18:05:08.095Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-04T18:05:08.097Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-04T18:05:08.099Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-04T18:05:08.100Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-04T18:05:08.100Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-04T18:05:08.102Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-04T18:05:08.103Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-04T18:05:08.103Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-04T18:05:08.103Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-04T18:05:08.103Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-04T18:05:08.107Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-04T18:30:00.857Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-04T18:30:00.859Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-04T18:30:00.885Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-04T18:30:00.892Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-04T19:30:00.329Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-04T19:30:00.333Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-04T19:30:00.360Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-04T19:30:00.369Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-04T20:30:00.596Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-04T20:30:00.598Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-04T20:30:00.615Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-04T20:30:00.624Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-04T21:30:00.222Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-04T21:30:00.227Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-04T21:30:00.327Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-04T21:30:00.344Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-04T22:30:00.845Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-04T22:30:00.848Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-04T22:30:00.900Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-04T22:30:00.930Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-04T23:30:00.018Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-04T23:30:00.020Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-04T23:30:00.038Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-04T23:30:00.047Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T00:30:00.262Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T00:30:00.263Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T00:30:00.294Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T00:30:00.300Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T01:30:00.468Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T01:30:00.470Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T01:30:00.484Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T01:30:00.489Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T02:30:00.740Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T02:30:00.742Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T02:30:00.757Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T02:30:00.762Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T03:30:00.965Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T03:30:00.968Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T03:30:00.992Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T03:30:00.997Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T04:30:00.330Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T04:30:00.331Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T04:30:00.353Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T04:30:00.364Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T05:30:00.876Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T05:30:00.878Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T05:30:00.901Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T05:30:00.908Z"}
{"level":"info","message":"[Server] SIGTERM received — shutting down gracefully...","timestamp":"2026-08-05T06:16:36.836Z"}
{"level":"info","message":"[Redis] Client quit","timestamp":"2026-08-05T06:16:36.872Z"}
{"level":"warn","message":"[Redis] Connection closed","timestamp":"2026-08-05T06:16:36.890Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-05T06:36:22.450Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-05T06:36:23.087Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-05T06:36:23.109Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-05T06:36:23.157Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-05T06:36:23.159Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-05T06:36:23.160Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-05T06:36:23.161Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-05T06:36:23.161Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-05T06:36:23.164Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-05T06:36:23.165Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-05T06:36:23.165Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-05T06:36:23.165Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-05T06:36:23.165Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-05T06:36:23.170Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-05T06:36:23.552Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (NKe5f9oH3GmjU-ETAAAB)","timestamp":"2026-08-05T06:36:23.636Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (StJwNcSEBhg3TB2ZAAAD)","timestamp":"2026-08-05T06:36:23.756Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (StJwNcSEBhg3TB2ZAAAD)","timestamp":"2026-08-05T06:37:15.939Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (DW2f7GFyWS9L-473AAAF)","timestamp":"2026-08-05T06:37:38.467Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (DW2f7GFyWS9L-473AAAF)","timestamp":"2026-08-05T06:37:38.591Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (fslKp38WLZoHMLn3AAAH)","timestamp":"2026-08-05T06:37:38.619Z"}
{"level":"info","message":"[Auth] Token rotated for user: admin@pms.com","timestamp":"2026-08-05T06:37:39.733Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Dt9UepftKxTaVHGJAAAO)","timestamp":"2026-08-05T06:37:40.132Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (50Tcp5BclyUAWo72AAAP)","timestamp":"2026-08-05T06:37:40.145Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Dt9UepftKxTaVHGJAAAO)","timestamp":"2026-08-05T06:37:44.002Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (50Tcp5BclyUAWo72AAAP)","timestamp":"2026-08-05T06:37:44.008Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:273:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-05T06:37:57.163Z"}
{"level":"info","message":"[Auth] User logged in: aditya@yopmail.com (IP: 122.162.240.56)","timestamp":"2026-08-05T06:38:02.336Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (mQdPr-LzjXzUNpSqAAAS)","timestamp":"2026-08-05T06:38:02.382Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (BSc380dVLF8QqH9EAAAT)","timestamp":"2026-08-05T06:38:02.412Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (BSc380dVLF8QqH9EAAAT)","timestamp":"2026-08-05T06:38:08.189Z"}
{"level":"error","message":"[PushService] Error sending push: Received unexpected response code - Body: push subscription has unsubscribed or expired.\n","timestamp":"2026-08-05T06:38:18.268Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (fslKp38WLZoHMLn3AAAH)","timestamp":"2026-08-05T06:38:23.594Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-05T06:44:19.013Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-05T06:44:19.369Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-05T06:44:19.395Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-05T06:44:19.430Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-05T06:44:19.433Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-05T06:44:19.434Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-05T06:44:19.436Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-05T06:44:19.437Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-05T06:44:19.437Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-05T06:44:19.437Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-05T06:44:19.437Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-05T06:44:19.440Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-05T06:44:19.442Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-05T06:44:19.446Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Eq_Aypk1ep6JGkVTAAAB)","timestamp":"2026-08-05T06:44:20.235Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (FNJjnJLjIJkGAL9PAAAD)","timestamp":"2026-08-05T06:44:20.703Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (1jzJmBZwxG5XCh8UAAAF)","timestamp":"2026-08-05T06:44:21.049Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (1jzJmBZwxG5XCh8UAAAF)","timestamp":"2026-08-05T06:44:21.129Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (XO6cxnJvzwL_TsSwAAAH)","timestamp":"2026-08-05T06:44:21.167Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Eq_Aypk1ep6JGkVTAAAB)","timestamp":"2026-08-05T06:45:05.198Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (YfGyYhyR8no9o09rAAAJ)","timestamp":"2026-08-05T06:45:48.482Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (YfGyYhyR8no9o09rAAAJ)","timestamp":"2026-08-05T06:45:50.997Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (dpP2if4Ik1JTeTFcAAAL)","timestamp":"2026-08-05T06:47:56.639Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (dpP2if4Ik1JTeTFcAAAL)","timestamp":"2026-08-05T06:49:25.047Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (mjxHFk_4-sQ2SPaZAAAN)","timestamp":"2026-08-05T06:51:07.587Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (FNJjnJLjIJkGAL9PAAAD)","timestamp":"2026-08-05T06:54:41.409Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (5zJb9bjQ6S9xIjYGAAAQ)","timestamp":"2026-08-05T07:04:55.383Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (djsa5aHIZCDi4KSWAAAR)","timestamp":"2026-08-05T07:04:55.397Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (5zJb9bjQ6S9xIjYGAAAQ)","timestamp":"2026-08-05T07:04:55.489Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (djsa5aHIZCDi4KSWAAAR)","timestamp":"2026-08-05T07:04:55.492Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (X3ciLqXPRzl_i2nkAAAU)","timestamp":"2026-08-05T07:04:55.522Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (WpyS7YfmXyJ_4kDqAAAV)","timestamp":"2026-08-05T07:04:55.525Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (X3ciLqXPRzl_i2nkAAAU)","timestamp":"2026-08-05T07:05:40.496Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (WpyS7YfmXyJ_4kDqAAAV)","timestamp":"2026-08-05T07:05:40.500Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (mjxHFk_4-sQ2SPaZAAAN)","timestamp":"2026-08-05T07:20:14.735Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (XO6cxnJvzwL_TsSwAAAH)","timestamp":"2026-08-05T07:20:34.451Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T07:30:00.593Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T07:30:00.595Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T07:30:00.613Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T07:30:00.619Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (NU82tNS-uwGOA5UnAAAY)","timestamp":"2026-08-05T07:32:21.449Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (LsLQBsrmEJStd72NAAAZ)","timestamp":"2026-08-05T07:32:21.487Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (NU82tNS-uwGOA5UnAAAY)","timestamp":"2026-08-05T07:48:06.542Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (LsLQBsrmEJStd72NAAAZ)","timestamp":"2026-08-05T07:48:06.545Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T08:30:00.765Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T08:30:00.767Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T08:30:00.780Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T08:30:00.786Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T09:30:00.975Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T09:30:00.977Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T09:30:00.988Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T09:30:00.995Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T10:30:00.129Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T10:30:00.131Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T10:30:00.148Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T10:30:00.155Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T11:30:00.267Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T11:30:00.269Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T11:30:00.284Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T11:30:00.292Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-05T11:35:51.073Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-05T11:35:51.568Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-05T11:35:51.587Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-05T11:35:51.621Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-05T11:35:51.624Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-05T11:35:51.625Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-05T11:35:51.627Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-05T11:35:51.628Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-05T11:35:51.628Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-05T11:35:51.630Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-05T11:35:51.630Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-05T11:35:51.630Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-05T11:35:51.630Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-05T11:35:51.631Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-05T11:35:51.882Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Tlsk-9Q4bHE9FReUAAAB)","timestamp":"2026-08-05T11:35:51.944Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (-W6k0Fqcub6hMEb9AAAD)","timestamp":"2026-08-05T11:35:52.022Z"}
{"level":"info","message":"[Auth] Token rotated for user: aditya@yopmail.com","timestamp":"2026-08-05T11:41:30.046Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (BS0H0KXyI7JGZS-AAAAK)","timestamp":"2026-08-05T11:41:30.138Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (o1f9qFB3AJVadhNbAAAL)","timestamp":"2026-08-05T11:41:30.143Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-05T11:41:50.854Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (qbPaQzRqZNV61vfUAAAN)","timestamp":"2026-08-05T11:41:50.898Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (U2JL4nI3Sy1FAeu4AAAP)","timestamp":"2026-08-05T11:41:50.987Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (U2JL4nI3Sy1FAeu4AAAP)","timestamp":"2026-08-05T11:41:56.921Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (BS0H0KXyI7JGZS-AAAAK)","timestamp":"2026-08-05T11:42:25.441Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (mEN4OSogpQBg_qA7AAAR)","timestamp":"2026-08-05T11:43:13.915Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (yhR_GeJmr287munsAAAT)","timestamp":"2026-08-05T11:44:52.623Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (-W6k0Fqcub6hMEb9AAAD)","timestamp":"2026-08-05T11:50:27.500Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (mEN4OSogpQBg_qA7AAAR)","timestamp":"2026-08-05T11:50:35.551Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (QDrCWRhcJKffwaFQAAAW)","timestamp":"2026-08-05T11:50:42.043Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (suri4OyMBcftMtSWAAAX)","timestamp":"2026-08-05T11:50:42.049Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (QDrCWRhcJKffwaFQAAAW)","timestamp":"2026-08-05T11:50:42.122Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (suri4OyMBcftMtSWAAAX)","timestamp":"2026-08-05T11:50:42.123Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (e_GTK6_qlFEN7TM9AAAa)","timestamp":"2026-08-05T11:50:42.191Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (AA451AX3r8VaEbHvAAAb)","timestamp":"2026-08-05T11:50:42.195Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (e_GTK6_qlFEN7TM9AAAa)","timestamp":"2026-08-05T11:50:48.863Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (Ocxampu2qDrYlRXSAAAd)","timestamp":"2026-08-05T11:50:58.509Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (m8pszhsZUKiCvlWgAAAf)","timestamp":"2026-08-05T11:57:37.250Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (m8pszhsZUKiCvlWgAAAf)","timestamp":"2026-08-05T11:57:40.625Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (r0MI3IFLxnQNz_puAAAh)","timestamp":"2026-08-05T11:57:42.831Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Tlsk-9Q4bHE9FReUAAAB)","timestamp":"2026-08-05T11:58:02.022Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (r0MI3IFLxnQNz_puAAAh)","timestamp":"2026-08-05T11:58:02.023Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (CkzTDtqQZFXwFC6mAAAk)","timestamp":"2026-08-05T11:58:02.088Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (U8qGGePcvP2qG5RoAAAl)","timestamp":"2026-08-05T11:58:02.092Z"}
{"level":"info","message":"[Cron] Running missing report reminder","timestamp":"2026-08-05T12:00:00.091Z"}
{"level":"info","message":"[Job:MissingReport] Missing report reminder job - pending notification module integration","timestamp":"2026-08-05T12:00:00.092Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (CkzTDtqQZFXwFC6mAAAk)","timestamp":"2026-08-05T12:01:43.412Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (U8qGGePcvP2qG5RoAAAl)","timestamp":"2026-08-05T12:01:43.415Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (Ocxampu2qDrYlRXSAAAd)","timestamp":"2026-08-05T12:01:44.150Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (o1f9qFB3AJVadhNbAAAL)","timestamp":"2026-08-05T12:01:51.241Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (yhR_GeJmr287munsAAAT)","timestamp":"2026-08-05T12:02:34.353Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (2sPPzSibZWDl3xsGAAAn)","timestamp":"2026-08-05T12:03:12.492Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (2sPPzSibZWDl3xsGAAAn)","timestamp":"2026-08-05T12:03:12.554Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (qQZqqe-XQsCtwaeXAAAp)","timestamp":"2026-08-05T12:03:12.571Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (qbPaQzRqZNV61vfUAAAN)","timestamp":"2026-08-05T12:03:27.046Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:273:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-05T12:03:32.590Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (AA451AX3r8VaEbHvAAAb)","timestamp":"2026-08-05T12:03:32.823Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-05T12:03:33.609Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (XUjDtQNpVSoiTFG1AAAr)","timestamp":"2026-08-05T12:03:33.645Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (tFLRgrTGgaHKCVaOAAAt)","timestamp":"2026-08-05T12:03:33.740Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (bd87HYKH2vrWbS14AAAv)","timestamp":"2026-08-05T12:03:41.333Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (qQZqqe-XQsCtwaeXAAAp)","timestamp":"2026-08-05T12:03:44.092Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (bd87HYKH2vrWbS14AAAv)","timestamp":"2026-08-05T12:03:44.092Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-05T12:05:10.879Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (GziVv7RGwHmmONo8AAAx)","timestamp":"2026-08-05T12:05:10.924Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (YgtGXFnrLAtsjnRlAAAz)","timestamp":"2026-08-05T12:05:11.008Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (tFLRgrTGgaHKCVaOAAAt)","timestamp":"2026-08-05T12:05:22.559Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:268:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-05T12:06:48.896Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:268:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-05T12:06:54.471Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:268:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-05T12:06:58.816Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:268:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-05T12:07:00.756Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:273:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-05T12:07:16.485Z"}
{"level":"info","message":"[Auth] User logged in: aditya@yopmail.com (IP: 122.162.240.56)","timestamp":"2026-08-05T12:07:20.641Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (tMdvOFUpVKQt_IGPAAA1)","timestamp":"2026-08-05T12:07:20.684Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (Qsj6O0RkMqpiT-4AAAA3)","timestamp":"2026-08-05T12:07:20.791Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (Qsj6O0RkMqpiT-4AAAA3)","timestamp":"2026-08-05T12:07:28.849Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (YgtGXFnrLAtsjnRlAAAz)","timestamp":"2026-08-05T12:08:08.114Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (zsI93FX-jjK5EqIAAAA5)","timestamp":"2026-08-05T12:08:14.648Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (zsI93FX-jjK5EqIAAAA5)","timestamp":"2026-08-05T12:09:03.123Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (u9hLEpf4Zq0yfcqvAAA7)","timestamp":"2026-08-05T12:09:08.403Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (u9hLEpf4Zq0yfcqvAAA7)","timestamp":"2026-08-05T12:09:09.419Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (DEqryPNyq-Ljor-2AAA9)","timestamp":"2026-08-05T12:09:10.937Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (DEqryPNyq-Ljor-2AAA9)","timestamp":"2026-08-05T12:09:15.842Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (vbSLhPQ8EhoX_P5JAAA_)","timestamp":"2026-08-05T12:09:22.354Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (vbSLhPQ8EhoX_P5JAAA_)","timestamp":"2026-08-05T12:09:32.820Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (oE2Vszb5Pc0FijtcAABB)","timestamp":"2026-08-05T12:09:36.937Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (oE2Vszb5Pc0FijtcAABB)","timestamp":"2026-08-05T12:09:38.919Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (FwkY4yFbmPTvrbHaAABD)","timestamp":"2026-08-05T12:09:41.819Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (AAxvLMKnn-AMIGQiAABF)","timestamp":"2026-08-05T12:09:47.061Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (IrhbJcAqpS_0S9fLAABI)","timestamp":"2026-08-05T12:10:26.002Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (mERPtNs6nEu4R1g4AABJ)","timestamp":"2026-08-05T12:10:26.009Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (IrhbJcAqpS_0S9fLAABI)","timestamp":"2026-08-05T12:10:26.059Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (mERPtNs6nEu4R1g4AABJ)","timestamp":"2026-08-05T12:10:26.060Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (KJ366sumIG6u9cIqAABM)","timestamp":"2026-08-05T12:10:26.073Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (oXA4CxAj9HJBFQDEAABN)","timestamp":"2026-08-05T12:10:26.079Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (eL1vxnqfN5EniaaZAABQ)","timestamp":"2026-08-05T12:10:26.139Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (HlrW9uHC8Ldj13U0AABR)","timestamp":"2026-08-05T12:10:26.147Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (eL1vxnqfN5EniaaZAABQ)","timestamp":"2026-08-05T12:10:26.172Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (HlrW9uHC8Ldj13U0AABR)","timestamp":"2026-08-05T12:10:26.173Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (WTOz-YJo7GDFxqHiAABU)","timestamp":"2026-08-05T12:10:26.189Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (w0QKCNfqKK2FTzwXAABV)","timestamp":"2026-08-05T12:10:26.192Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (FwkY4yFbmPTvrbHaAABD)","timestamp":"2026-08-05T12:10:32.608Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (AAxvLMKnn-AMIGQiAABF)","timestamp":"2026-08-05T12:10:57.073Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (tMdvOFUpVKQt_IGPAAA1)","timestamp":"2026-08-05T12:11:00.840Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (KJ366sumIG6u9cIqAABM)","timestamp":"2026-08-05T12:11:11.061Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (oXA4CxAj9HJBFQDEAABN)","timestamp":"2026-08-05T12:11:11.062Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (GZfTkazUUuYEeSG0AABX)","timestamp":"2026-08-05T12:12:41.221Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (WTOz-YJo7GDFxqHiAABU)","timestamp":"2026-08-05T12:12:48.426Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (MbFMK0bDTS3Y928qAABZ)","timestamp":"2026-08-05T12:13:24.489Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (GZfTkazUUuYEeSG0AABX)","timestamp":"2026-08-05T12:13:36.938Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (h2lWSokV7HS_tYj2AABb)","timestamp":"2026-08-05T12:13:38.828Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (xh3e5Dj5sYFsJNUgAABd)","timestamp":"2026-08-05T12:14:35.652Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (xh3e5Dj5sYFsJNUgAABd)","timestamp":"2026-08-05T12:14:35.687Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (d7RHhte9MmgZN2khAABf)","timestamp":"2026-08-05T12:14:35.702Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (h2lWSokV7HS_tYj2AABb)","timestamp":"2026-08-05T12:14:51.516Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (In7SmUyMw5WokuAcAABh)","timestamp":"2026-08-05T12:14:53.920Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (GziVv7RGwHmmONo8AAAx)","timestamp":"2026-08-05T12:15:06.439Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (MbFMK0bDTS3Y928qAABZ)","timestamp":"2026-08-05T12:16:44.188Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-05T12:22:24.123Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (biDDrILSaeys9-yIAABj)","timestamp":"2026-08-05T12:22:24.189Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (1VXDWK4sWaFWnufFAABl)","timestamp":"2026-08-05T12:22:24.309Z"}
{"level":"info","message":"[Auth] User logged in: aditya@yopmail.com (IP: 122.162.240.56)","timestamp":"2026-08-05T12:23:23.764Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (_tZU7HMPJd0GD_VmAABn)","timestamp":"2026-08-05T12:23:23.864Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (d6oNPgKhwsvmtz1SAABp)","timestamp":"2026-08-05T12:23:23.953Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (In7SmUyMw5WokuAcAABh)","timestamp":"2026-08-05T12:23:33.016Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (-wFprJ13ZcNnIW-yAABs)","timestamp":"2026-08-05T12:24:42.554Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (vb7ik_FRQ34LNeaCAABt)","timestamp":"2026-08-05T12:24:42.558Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (-wFprJ13ZcNnIW-yAABs)","timestamp":"2026-08-05T12:24:42.630Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (vb7ik_FRQ34LNeaCAABt)","timestamp":"2026-08-05T12:24:42.640Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (yZcPruYFxTMThjI9AABw)","timestamp":"2026-08-05T12:24:42.653Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (WtWXYU1ILsDsWgGvAABx)","timestamp":"2026-08-05T12:24:42.657Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (kyFb4lkpAfkYNgBrAABz)","timestamp":"2026-08-05T12:24:50.962Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (w0QKCNfqKK2FTzwXAABV)","timestamp":"2026-08-05T12:24:56.844Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (kyFb4lkpAfkYNgBrAABz)","timestamp":"2026-08-05T12:24:57.947Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (_tZU7HMPJd0GD_VmAABn)","timestamp":"2026-08-05T12:24:58.868Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (d6oNPgKhwsvmtz1SAABp)","timestamp":"2026-08-05T12:24:58.962Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (UpJMDEgD8yoMU2V-AAB2)","timestamp":"2026-08-05T12:25:22.564Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (ATocoC70BX8ryWiAAAB3)","timestamp":"2026-08-05T12:25:22.569Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (UpJMDEgD8yoMU2V-AAB2)","timestamp":"2026-08-05T12:25:22.616Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (ATocoC70BX8ryWiAAAB3)","timestamp":"2026-08-05T12:25:22.619Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (Buv-EURlu69QPqzaAAB6)","timestamp":"2026-08-05T12:25:22.639Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (Xb5PHXwltEAx4kc8AAB7)","timestamp":"2026-08-05T12:25:22.644Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (Buv-EURlu69QPqzaAAB6)","timestamp":"2026-08-05T12:25:34.746Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (O1TuBPGcA9R4XB2MAAB9)","timestamp":"2026-08-05T12:25:38.557Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (yZcPruYFxTMThjI9AABw)","timestamp":"2026-08-05T12:25:52.652Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (WtWXYU1ILsDsWgGvAABx)","timestamp":"2026-08-05T12:25:52.652Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (P9SoikgCMPskaWOhAACA)","timestamp":"2026-08-05T12:26:28.761Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (lCeVZekXS-Sj8ZHCAACB)","timestamp":"2026-08-05T12:26:28.769Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (P9SoikgCMPskaWOhAACA)","timestamp":"2026-08-05T12:26:28.797Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (lCeVZekXS-Sj8ZHCAACB)","timestamp":"2026-08-05T12:26:28.799Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (sHamdMdgFttwBHkyAACE)","timestamp":"2026-08-05T12:26:28.819Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (5YEMk5h-EeqZJfZLAACF)","timestamp":"2026-08-05T12:26:28.828Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (sHamdMdgFttwBHkyAACE)","timestamp":"2026-08-05T12:26:33.486Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (opcXSJVl0Z8OIqCOAACH)","timestamp":"2026-08-05T12:26:35.461Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (vvl-8093QwVjT7kCAACK)","timestamp":"2026-08-05T12:26:44.954Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (YQfdK-8XHcczEabPAACL)","timestamp":"2026-08-05T12:26:44.959Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (YQfdK-8XHcczEabPAACL)","timestamp":"2026-08-05T12:26:44.980Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (vvl-8093QwVjT7kCAACK)","timestamp":"2026-08-05T12:26:44.983Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (YDq1B9NFGpzwy8XVAACO)","timestamp":"2026-08-05T12:26:44.995Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (sxLbytHCNGpb0mP8AACP)","timestamp":"2026-08-05T12:26:45.004Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T12:30:00.057Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T12:30:00.058Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T12:30:00.064Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T12:30:00.067Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (XUjDtQNpVSoiTFG1AAAr)","timestamp":"2026-08-05T12:30:09.881Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (biDDrILSaeys9-yIAABj)","timestamp":"2026-08-05T12:43:40.450Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (1VXDWK4sWaFWnufFAABl)","timestamp":"2026-08-05T12:43:40.451Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (d_cJ4Igg7zKnn_8nAACR)","timestamp":"2026-08-05T12:49:36.146Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (d_cJ4Igg7zKnn_8nAACR)","timestamp":"2026-08-05T12:49:36.207Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (af4JEm2RaIv1PH5_AACT)","timestamp":"2026-08-05T12:49:36.226Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (opcXSJVl0Z8OIqCOAACH)","timestamp":"2026-08-05T12:49:51.371Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (d7RHhte9MmgZN2khAABf)","timestamp":"2026-08-05T12:49:57.306Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (YDq1B9NFGpzwy8XVAACO)","timestamp":"2026-08-05T12:50:00.932Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (sxLbytHCNGpb0mP8AACP)","timestamp":"2026-08-05T12:50:00.933Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (5YEMk5h-EeqZJfZLAACF)","timestamp":"2026-08-05T12:50:09.889Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (O1TuBPGcA9R4XB2MAAB9)","timestamp":"2026-08-05T12:50:09.890Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (Xb5PHXwltEAx4kc8AAB7)","timestamp":"2026-08-05T12:50:19.205Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (af4JEm2RaIv1PH5_AACT)","timestamp":"2026-08-05T12:50:21.209Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T13:30:00.987Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T13:30:00.989Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T13:30:01.005Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T13:30:01.012Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T14:30:00.151Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T14:30:00.152Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T14:30:00.164Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T14:30:00.169Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T15:30:00.281Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T15:30:00.283Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T15:30:00.294Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T15:30:00.297Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T16:30:00.417Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T16:30:00.417Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T16:30:00.429Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T16:30:00.433Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T17:30:00.492Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T17:30:00.493Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T17:30:00.511Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T17:30:00.517Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T18:30:00.666Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T18:30:00.667Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T18:30:00.681Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T18:30:00.686Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T19:30:00.341Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T19:30:00.342Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T19:30:00.357Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T19:30:00.361Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T20:30:00.453Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T20:30:00.455Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T20:30:00.470Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T20:30:00.475Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T21:30:00.883Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T21:30:00.929Z"}
{"level":"error","message":"[Job:MarkOverdue] Error: \nInvalid `prisma.milestone.updateMany()` invocation:\n\n\nError occurred during query execution:\nConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(Server(MysqlError { code: 1615, message: \"Prepared statement needs to be re-prepared\", state: \"HY000\" })), transient: false })","timestamp":"2026-08-05T21:30:01.153Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T22:30:00.148Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T22:30:00.150Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T22:30:00.206Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T22:30:00.231Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-05T23:30:00.308Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-05T23:30:00.309Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-05T23:30:00.334Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-05T23:30:00.348Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T00:30:00.416Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T00:30:00.418Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T00:30:00.441Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T00:30:00.447Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-06T01:09:01.593Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-06T01:09:02.943Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-06T01:09:02.964Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-06T01:09:03.008Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-06T01:09:03.009Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-06T01:09:03.011Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-06T01:09:03.012Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-06T01:09:03.012Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-06T01:09:03.012Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-06T01:09:03.012Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-06T01:09:03.016Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-06T01:09:03.018Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-06T01:09:03.020Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-06T01:09:03.022Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T01:30:00.466Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T01:30:00.468Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T01:30:00.485Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T01:30:00.490Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T02:30:00.618Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T02:30:00.620Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T02:30:00.638Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T02:30:00.647Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T03:30:00.052Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T03:30:00.054Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T03:30:00.068Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T03:30:00.075Z"}
{"level":"info","message":"[Auth] Token rotated for user: aditya@yopmail.com","timestamp":"2026-08-06T04:09:57.452Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (yLTAtepyxb8eVY3NAAAG)","timestamp":"2026-08-06T04:09:57.559Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (eBgqQp57B5owe52CAAAH)","timestamp":"2026-08-06T04:09:57.585Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-06T04:10:18.329Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (ILod2em4R213r2A8AAAJ)","timestamp":"2026-08-06T04:10:18.379Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (QNUGzWmaTbHPBQHCAAAL)","timestamp":"2026-08-06T04:10:18.490Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (yLTAtepyxb8eVY3NAAAG)","timestamp":"2026-08-06T04:10:33.817Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (QNUGzWmaTbHPBQHCAAAL)","timestamp":"2026-08-06T04:13:34.752Z"}
{"level":"info","message":"[Auth] Token rotated for user: admin@pms.com","timestamp":"2026-08-06T04:15:07.489Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (TXVkxqwSRDDIZ7P_AAAP)","timestamp":"2026-08-06T04:15:07.580Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (LTXZHG1jHRJdDvUnAAAR)","timestamp":"2026-08-06T04:15:09.964Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (LTXZHG1jHRJdDvUnAAAR)","timestamp":"2026-08-06T04:15:13.291Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (xs00UuXCggap_NimAAAT)","timestamp":"2026-08-06T04:16:22.730Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (xs00UuXCggap_NimAAAT)","timestamp":"2026-08-06T04:16:27.411Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (TXVkxqwSRDDIZ7P_AAAP)","timestamp":"2026-08-06T04:16:27.413Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-06T04:17:09.721Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (7YfEQ3UBdySsdK9BAAAW)","timestamp":"2026-08-06T04:17:09.950Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (8grGY0mNo7wYJRHaAAAX)","timestamp":"2026-08-06T04:17:09.974Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (8grGY0mNo7wYJRHaAAAX)","timestamp":"2026-08-06T04:17:59.679Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (LkOnSF7kobWZZMkRAAAZ)","timestamp":"2026-08-06T04:19:53.077Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (LkOnSF7kobWZZMkRAAAZ)","timestamp":"2026-08-06T04:19:53.114Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (1kR8q-PxeDa-jWMiAAAb)","timestamp":"2026-08-06T04:19:53.132Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (mHdc_UmH4JjCQwCBAAAd)","timestamp":"2026-08-06T04:20:02.431Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (mHdc_UmH4JjCQwCBAAAd)","timestamp":"2026-08-06T04:20:02.506Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (gC5nZPXU92bsnTrAAAAf)","timestamp":"2026-08-06T04:20:02.527Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (GFf1McS_Q118autVAAAh)","timestamp":"2026-08-06T04:20:02.599Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (GFf1McS_Q118autVAAAh)","timestamp":"2026-08-06T04:20:02.631Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (1R0puiZzXNkBhb-UAAAj)","timestamp":"2026-08-06T04:20:02.656Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (iBr_yiqRhQiGQLP0AAAl)","timestamp":"2026-08-06T04:20:02.826Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (iBr_yiqRhQiGQLP0AAAl)","timestamp":"2026-08-06T04:20:02.846Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (i7UfO8Mds5phSHe_AAAn)","timestamp":"2026-08-06T04:20:02.862Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (7YfEQ3UBdySsdK9BAAAW)","timestamp":"2026-08-06T04:20:25.058Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (1kR8q-PxeDa-jWMiAAAb)","timestamp":"2026-08-06T04:20:38.114Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (gC5nZPXU92bsnTrAAAAf)","timestamp":"2026-08-06T04:20:47.507Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (1R0puiZzXNkBhb-UAAAj)","timestamp":"2026-08-06T04:20:47.631Z"}
{"level":"info","message":"[Auth] Token rotated for user: aditya@yopmail.com","timestamp":"2026-08-06T04:22:05.490Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (YOiz08yo9MvW12oQAAAr)","timestamp":"2026-08-06T04:22:05.564Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (ls0cgILAxTKuC4zNAAAt)","timestamp":"2026-08-06T04:22:10.980Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (ls0cgILAxTKuC4zNAAAt)","timestamp":"2026-08-06T04:22:11.039Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (iGoc2DDOe_VBt1ICAAAv)","timestamp":"2026-08-06T04:22:11.068Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (WwZyumhEJdPWIosFAAAx)","timestamp":"2026-08-06T04:22:11.484Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (WwZyumhEJdPWIosFAAAx)","timestamp":"2026-08-06T04:22:11.501Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (G0AdKGRZL32lA70qAAAz)","timestamp":"2026-08-06T04:22:11.505Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (s8agtuW-LOcsYP_EAAA1)","timestamp":"2026-08-06T04:22:17.543Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (YOiz08yo9MvW12oQAAAr)","timestamp":"2026-08-06T04:22:50.545Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (iGoc2DDOe_VBt1ICAAAv)","timestamp":"2026-08-06T04:22:56.041Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (s8agtuW-LOcsYP_EAAA1)","timestamp":"2026-08-06T04:23:11.876Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (G0AdKGRZL32lA70qAAAz)","timestamp":"2026-08-06T04:23:11.877Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (4pJNf0iZPsVhkVBoAAA3)","timestamp":"2026-08-06T04:25:45.549Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (187fwUzZ_hz-vVn3AAA5)","timestamp":"2026-08-06T04:27:58.052Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T04:30:00.967Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T04:30:00.968Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T04:30:00.980Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T04:30:00.986Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (4pJNf0iZPsVhkVBoAAA3)","timestamp":"2026-08-06T05:07:22.766Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (eBgqQp57B5owe52CAAAH)","timestamp":"2026-08-06T05:07:26.168Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (5zpREbyvvacBHlVOAAA7)","timestamp":"2026-08-06T05:13:04.080Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf connected (0IT7UMiyA96U7TL6AAA9)","timestamp":"2026-08-06T05:13:04.152Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (5zpREbyvvacBHlVOAAA7)","timestamp":"2026-08-06T05:13:12.953Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T05:30:00.690Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T05:30:00.691Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T05:30:00.705Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T05:30:00.711Z"}
{"level":"info","message":"[Socket.IO] User cmsek9nvn0006shhml9m8gcjf disconnected (0IT7UMiyA96U7TL6AAA9)","timestamp":"2026-08-06T05:33:25.038Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T06:30:00.598Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T06:30:00.599Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T06:30:00.614Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T06:30:00.618Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (187fwUzZ_hz-vVn3AAA5)","timestamp":"2026-08-06T07:08:26.860Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (ILod2em4R213r2A8AAAJ)","timestamp":"2026-08-06T07:08:43.753Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T07:30:00.636Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T07:30:00.638Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T07:30:00.673Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T07:30:00.688Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T08:30:00.825Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T08:30:00.826Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T08:30:00.841Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T08:30:00.849Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T09:30:00.015Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T09:30:00.017Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T09:30:00.037Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T09:30:00.044Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (i7UfO8Mds5phSHe_AAAn)","timestamp":"2026-08-06T09:54:52.541Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T10:30:00.067Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T10:30:00.069Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T10:30:00.089Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T10:30:00.099Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T11:30:00.238Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T11:30:00.240Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T11:30:00.252Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T11:30:00.259Z"}
{"level":"info","message":"[Cron] Running missing report reminder","timestamp":"2026-08-06T12:00:00.266Z"}
{"level":"info","message":"[Job:MissingReport] Missing report reminder job - pending notification module integration","timestamp":"2026-08-06T12:00:00.268Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T12:30:00.325Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T12:30:00.327Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T12:30:00.341Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T12:30:00.347Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T13:30:00.542Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T13:30:00.543Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T13:30:00.567Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T13:30:00.577Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T14:30:00.734Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T14:30:00.735Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T14:30:00.747Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T14:30:00.754Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T15:30:00.887Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T15:30:00.889Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T15:30:00.905Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T15:30:00.910Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T16:30:01.000Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T16:30:01.002Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T16:30:01.014Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T16:30:01.025Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T17:30:00.144Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T17:30:00.146Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T17:30:00.165Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T17:30:00.170Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T18:30:00.245Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T18:30:00.247Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T18:30:00.261Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T18:30:00.266Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T19:30:00.410Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T19:30:00.412Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T19:30:00.430Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T19:30:00.437Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T20:30:00.616Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T20:30:00.618Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T20:30:00.648Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T20:30:00.654Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T21:30:00.282Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T21:30:00.316Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T21:30:00.451Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T21:30:00.471Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T22:30:00.565Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T22:30:00.568Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T22:30:00.638Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T22:30:00.654Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-06T23:30:00.819Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-06T23:30:00.822Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-06T23:30:00.850Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-06T23:30:00.860Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T00:30:00.016Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T00:30:00.018Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T00:30:00.057Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T00:30:00.063Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T01:30:00.175Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T01:30:00.177Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T01:30:00.190Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T01:30:00.193Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T02:30:00.336Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T02:30:00.339Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T02:30:00.367Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T02:30:00.372Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T03:30:00.401Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T03:30:00.403Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T03:30:00.424Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T03:30:00.429Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T04:30:00.552Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T04:30:00.554Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T04:30:00.581Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T04:30:00.587Z"}
{"level":"info","message":"[Auth] Token rotated for user: admin@pms.com","timestamp":"2026-08-07T05:28:30.445Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (JiTepvqBXEv0pScnAABQ)","timestamp":"2026-08-07T05:28:30.598Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (bosQSV6dirQKVmNbAABR)","timestamp":"2026-08-07T05:28:30.618Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T05:30:00.639Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T05:30:00.640Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T05:30:00.645Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T05:30:00.648Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (oHYnLcdFGTngeuEwAABU)","timestamp":"2026-08-07T05:38:19.648Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (YBTSdtUjK9R7ELLSAABV)","timestamp":"2026-08-07T05:38:19.660Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (oHYnLcdFGTngeuEwAABU)","timestamp":"2026-08-07T05:38:19.812Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (YBTSdtUjK9R7ELLSAABV)","timestamp":"2026-08-07T05:38:19.813Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (aI2ny-IPgIae_erEAABY)","timestamp":"2026-08-07T05:38:19.845Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (VESOzqGxDEi7oHa-AABZ)","timestamp":"2026-08-07T05:38:19.849Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (EYHA7psrqPx1Y9TIAABc)","timestamp":"2026-08-07T05:46:44.020Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (huu9XZHYShPS9j1_AABd)","timestamp":"2026-08-07T05:46:44.027Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (EYHA7psrqPx1Y9TIAABc)","timestamp":"2026-08-07T05:46:44.116Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (huu9XZHYShPS9j1_AABd)","timestamp":"2026-08-07T05:46:44.117Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (_clF29Ovf-KzFZCSAABg)","timestamp":"2026-08-07T05:46:44.137Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (dnnJMgwIRVAjHqXKAABh)","timestamp":"2026-08-07T05:46:44.139Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Zielq-k1_OWbCXxiAABk)","timestamp":"2026-08-07T05:46:44.516Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Rqxg76LHxY3kA6LzAABl)","timestamp":"2026-08-07T05:46:44.523Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Zielq-k1_OWbCXxiAABk)","timestamp":"2026-08-07T05:46:44.562Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Rqxg76LHxY3kA6LzAABl)","timestamp":"2026-08-07T05:46:44.563Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (aIG3n4RMMYUHnNQ7AABo)","timestamp":"2026-08-07T05:46:44.585Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (mD1Vk9_dTlAoOykHAABp)","timestamp":"2026-08-07T05:46:44.589Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (glGMhuSZF78woB_mAABs)","timestamp":"2026-08-07T05:46:56.776Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (BaRcIWLbUWkwN3AVAABt)","timestamp":"2026-08-07T05:46:56.780Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (glGMhuSZF78woB_mAABs)","timestamp":"2026-08-07T05:46:56.841Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (BaRcIWLbUWkwN3AVAABt)","timestamp":"2026-08-07T05:46:56.842Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (EblB4cOJLX-k0K6gAABw)","timestamp":"2026-08-07T05:46:56.860Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (S0ixuPvF2_WsND3kAABx)","timestamp":"2026-08-07T05:46:56.864Z"}
{"level":"error","message":"[Error] Email address is already registered.","method":"POST","path":"/api/auth/register","stack":"Error: Email address is already registered.\n    at Object.register (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:148:19)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:72:16","timestamp":"2026-08-07T05:47:19.507Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (aI2ny-IPgIae_erEAABY)","timestamp":"2026-08-07T05:47:25.251Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (VESOzqGxDEi7oHa-AABZ)","timestamp":"2026-08-07T05:47:25.261Z"}
{"level":"error","message":"[Error] Email address is already registered.","method":"POST","path":"/api/auth/register","stack":"Error: Email address is already registered.\n    at Object.register (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:148:19)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:72:16","timestamp":"2026-08-07T05:47:26.681Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (_clF29Ovf-KzFZCSAABg)","timestamp":"2026-08-07T05:47:29.118Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (dnnJMgwIRVAjHqXKAABh)","timestamp":"2026-08-07T05:47:29.123Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (aIG3n4RMMYUHnNQ7AABo)","timestamp":"2026-08-07T05:47:29.565Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (mD1Vk9_dTlAoOykHAABp)","timestamp":"2026-08-07T05:47:29.570Z"}
{"level":"error","message":"[Error] An admin account already exists. Only one admin is allowed.","method":"POST","path":"/api/auth/register","stack":"Error: An admin account already exists. Only one admin is allowed.\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.register (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:170:13)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:72:16","timestamp":"2026-08-07T05:47:39.158Z"}
{"level":"error","message":"[Error] An admin account already exists. Only one admin is allowed.","method":"POST","path":"/api/auth/register","stack":"Error: An admin account already exists. Only one admin is allowed.\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.register (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:170:13)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:72:16","timestamp":"2026-08-07T05:47:56.449Z"}
{"level":"info","message":"[Auth] Registered user: deef@pms.com (role: team-leader)","timestamp":"2026-08-07T05:48:03.611Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (b8tUOxPdJga_J1pgAAB0)","timestamp":"2026-08-07T05:48:08.458Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (CAqeu11B9imyhza8AAB1)","timestamp":"2026-08-07T05:48:08.464Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (_q6xJ7p24JXpVPWwAAB4)","timestamp":"2026-08-07T05:48:08.560Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (KlB1kr0LyBLzkJ6vAAB5)","timestamp":"2026-08-07T05:48:08.581Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (KlB1kr0LyBLzkJ6vAAB5)","timestamp":"2026-08-07T05:48:08.618Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (_q6xJ7p24JXpVPWwAAB4)","timestamp":"2026-08-07T05:48:08.622Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (1BtFu-jVFcbjqMV2AAB8)","timestamp":"2026-08-07T05:48:08.655Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (qXf-cCvLb-3V9VUsAAB9)","timestamp":"2026-08-07T05:48:08.664Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (EblB4cOJLX-k0K6gAABw)","timestamp":"2026-08-07T05:48:31.886Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (S0ixuPvF2_WsND3kAABx)","timestamp":"2026-08-07T05:48:31.886Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (b8tUOxPdJga_J1pgAAB0)","timestamp":"2026-08-07T05:48:53.420Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (CAqeu11B9imyhza8AAB1)","timestamp":"2026-08-07T05:48:53.423Z"}
{"level":"info","message":"[Auth] Registered user: qypeneruwu@mailinator.com (role: team-member)","timestamp":"2026-08-07T05:49:30.834Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (siJeOuwmGrclD0VnAACA)","timestamp":"2026-08-07T05:49:36.787Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (-fUTY5JItNuzI8eaAACB)","timestamp":"2026-08-07T05:49:36.795Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (siJeOuwmGrclD0VnAACA)","timestamp":"2026-08-07T05:49:36.903Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (-fUTY5JItNuzI8eaAACB)","timestamp":"2026-08-07T05:49:36.905Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (TZVj2sixN_sBziJuAACE)","timestamp":"2026-08-07T05:49:36.926Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (itqEflV2fK9tWcRTAACF)","timestamp":"2026-08-07T05:49:36.930Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (dqJ9lwDFDsVQ8RwFAACI)","timestamp":"2026-08-07T05:49:37.736Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (PPXvpZZ0AiROzNGsAACJ)","timestamp":"2026-08-07T05:49:37.740Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (dqJ9lwDFDsVQ8RwFAACI)","timestamp":"2026-08-07T05:49:37.768Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (PPXvpZZ0AiROzNGsAACJ)","timestamp":"2026-08-07T05:49:37.769Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (4k7CX3Cm9EGmwi41AACM)","timestamp":"2026-08-07T05:49:37.785Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (QJVUVF-FB_16KPM5AACN)","timestamp":"2026-08-07T05:49:37.790Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-07T05:49:47.699Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (P_PxFLgNQRHc3dopAACP)","timestamp":"2026-08-07T05:49:47.745Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Q1OcukhJrJsq5IkfAACR)","timestamp":"2026-08-07T05:49:47.803Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (1BtFu-jVFcbjqMV2AAB8)","timestamp":"2026-08-07T05:50:08.679Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (qXf-cCvLb-3V9VUsAAB9)","timestamp":"2026-08-07T05:50:08.679Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (TZVj2sixN_sBziJuAACE)","timestamp":"2026-08-07T05:50:21.915Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (itqEflV2fK9tWcRTAACF)","timestamp":"2026-08-07T05:50:21.916Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (WJufk5ojZ23VS4OBAACU)","timestamp":"2026-08-07T05:51:40.584Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (IKg30zjfYtzDYLkRAACV)","timestamp":"2026-08-07T05:51:40.591Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (IKg30zjfYtzDYLkRAACV)","timestamp":"2026-08-07T05:51:40.692Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (WJufk5ojZ23VS4OBAACU)","timestamp":"2026-08-07T05:51:40.694Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Ci2h3Rd9y0QpsagAAACY)","timestamp":"2026-08-07T05:51:40.709Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (rNjEbSL9FwLWIv3nAACZ)","timestamp":"2026-08-07T05:51:40.715Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (JiTepvqBXEv0pScnAABQ)","timestamp":"2026-08-07T05:52:11.973Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (bosQSV6dirQKVmNbAABR)","timestamp":"2026-08-07T05:52:11.987Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (P_PxFLgNQRHc3dopAACP)","timestamp":"2026-08-07T05:52:12.835Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Q1OcukhJrJsq5IkfAACR)","timestamp":"2026-08-07T05:52:12.846Z"}
{"level":"error","message":"[Error] Team member effective dates are not under project date","method":"POST","path":"/api/projects","stack":"Error: Team member effective dates are not under project date\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.service.js:36:25\n    at Proxy._transactionWithCallback (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:134:8126)\n    at async exports.createProject (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.controller.js:6:21)","timestamp":"2026-08-07T05:53:13.259Z"}
{"level":"error","message":"[Error] Team member effective dates are not under project date","method":"POST","path":"/api/projects","stack":"Error: Team member effective dates are not under project date\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.service.js:36:25\n    at Proxy._transactionWithCallback (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:134:8126)\n    at async exports.createProject (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.controller.js:6:21)","timestamp":"2026-08-07T05:53:19.193Z"}
{"level":"error","message":"[Error] Milestone due date cannot be after project end date","method":"POST","path":"/api/milestones","stack":"Error: Milestone due date cannot be after project end date\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/milestones/milestones.service.js:50:21\n    at async Proxy._transactionWithCallback (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:134:8120)\n    at async exports.createMilestone (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/milestones/milestones.controller.js:5:20)","timestamp":"2026-08-07T05:54:08.024Z"}
{"level":"error","message":"[Error] Milestone due date cannot be after project end date","method":"POST","path":"/api/milestones","stack":"Error: Milestone due date cannot be after project end date\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/milestones/milestones.service.js:50:21\n    at async Proxy._transactionWithCallback (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:134:8120)\n    at async exports.createMilestone (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/milestones/milestones.controller.js:5:20)","timestamp":"2026-08-07T05:54:15.270Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (caD5btmxNqKUKY_bAACc)","timestamp":"2026-08-07T05:54:43.735Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (6QCMjS756i7oRzyiAACd)","timestamp":"2026-08-07T05:54:43.743Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (caD5btmxNqKUKY_bAACc)","timestamp":"2026-08-07T05:54:43.843Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (6QCMjS756i7oRzyiAACd)","timestamp":"2026-08-07T05:54:43.844Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (fWmhTxB9ChNBq6rlAACg)","timestamp":"2026-08-07T05:54:43.860Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (xTCNMy6V-RFq_JksAACh)","timestamp":"2026-08-07T05:54:43.869Z"}
{"level":"error","message":"[Error] Milestone due date cannot be after project end date","method":"POST","path":"/api/milestones","stack":"Error: Milestone due date cannot be after project end date\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/milestones/milestones.service.js:50:21\n    at async Proxy._transactionWithCallback (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:134:8120)\n    at async exports.createMilestone (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/milestones/milestones.controller.js:5:20)","timestamp":"2026-08-07T05:55:03.877Z"}
{"level":"error","message":"[Error] Task completed date cannot be after due date","method":"POST","path":"/api/tasks","stack":"Error: Task completed date cannot be after due date\n    at Object.createTask (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/tasks/tasks.service.js:189:19)\n    at async exports.createTask (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/tasks/tasks.controller.js:6:18)","timestamp":"2026-08-07T06:05:18.633Z"}
{"level":"error","message":"[Error] Task due date cannot be after sprint end date","method":"POST","path":"/api/tasks","stack":"Error: Task due date cannot be after sprint end date\n    at Object.createTask (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/tasks/tasks.service.js:112:21)\n    at async exports.createTask (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/tasks/tasks.controller.js:6:18)","timestamp":"2026-08-07T06:05:38.522Z"}
{"level":"error","message":"[Error] Task due date cannot be after sprint end date","method":"POST","path":"/api/tasks","stack":"Error: Task due date cannot be after sprint end date\n    at Object.createTask (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/tasks/tasks.service.js:112:21)\n    at async exports.createTask (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/tasks/tasks.controller.js:6:18)","timestamp":"2026-08-07T06:05:38.921Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (4k7CX3Cm9EGmwi41AACM)","timestamp":"2026-08-07T06:06:41.822Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (ySFEdPh4Eac0AgGPAACj)","timestamp":"2026-08-07T06:07:23.891Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T06:30:00.666Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T06:30:00.667Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T06:30:00.685Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T06:30:00.692Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T07:30:00.634Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T07:30:00.636Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T07:30:00.676Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T07:30:00.684Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T08:30:00.650Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T08:30:00.652Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T08:30:00.698Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T08:30:00.705Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T09:30:00.469Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T09:30:00.471Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T09:30:00.501Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T09:30:00.505Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T10:30:00.362Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T10:30:00.364Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T10:30:00.408Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T10:30:00.412Z"}
{"level":"info","message":"[Auth] Token rotated for user: admin@pms.com","timestamp":"2026-08-07T10:45:40.916Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T11:30:00.247Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T11:30:00.248Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T11:30:00.275Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T11:30:00.280Z"}
{"level":"info","message":"[Cron] Running missing report reminder","timestamp":"2026-08-07T12:00:00.197Z"}
{"level":"info","message":"[Job:MissingReport] Missing report reminder job - pending notification module integration","timestamp":"2026-08-07T12:00:00.198Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T12:30:00.131Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T12:30:00.132Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T12:30:00.165Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T12:30:00.174Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (ySFEdPh4Eac0AgGPAACj)","timestamp":"2026-08-07T12:49:49.214Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (rNjEbSL9FwLWIv3nAACZ)","timestamp":"2026-08-07T12:49:56.572Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (QJVUVF-FB_16KPM5AACN)","timestamp":"2026-08-07T12:49:56.577Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Ci2h3Rd9y0QpsagAAACY)","timestamp":"2026-08-07T12:49:56.583Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (fWmhTxB9ChNBq6rlAACg)","timestamp":"2026-08-07T12:50:05.727Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (xTCNMy6V-RFq_JksAACh)","timestamp":"2026-08-07T12:50:05.742Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T13:30:00.192Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T13:30:00.194Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T13:30:00.230Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T13:30:00.235Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T14:30:00.382Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T14:30:00.389Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T14:30:00.436Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T14:30:00.443Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T15:30:00.620Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T15:30:00.622Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T15:30:00.655Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T15:30:00.661Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T16:30:00.790Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T16:30:00.792Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T16:30:00.824Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T16:30:00.828Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T17:30:00.001Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T17:30:00.004Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T17:30:00.049Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T17:30:00.056Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T18:30:00.177Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T18:30:00.179Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T18:30:00.211Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T18:30:00.216Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T19:30:00.268Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T19:30:00.272Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T19:30:00.322Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T19:30:00.328Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T20:30:00.427Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T20:30:00.429Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T20:30:00.459Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T20:30:00.463Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T21:30:00.128Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T21:30:00.139Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T21:30:00.198Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T21:30:00.208Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T22:30:00.469Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T22:30:00.471Z"}
{"level":"error","message":"[Job:MarkOverdue] Error: \nInvalid `prisma.milestone.updateMany()` invocation:\n\n\nError occurred during query execution:\nConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(Server(MysqlError { code: 1615, message: \"Prepared statement needs to be re-prepared\", state: \"HY000\" })), transient: false })","timestamp":"2026-08-07T22:30:00.544Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-07T23:30:00.527Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-07T23:30:00.529Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-07T23:30:00.584Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-07T23:30:00.602Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-08T00:30:00.611Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-08T00:30:00.613Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-08T00:30:00.649Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-08T00:30:00.657Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-08T01:30:00.697Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-08T01:30:00.699Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-08T01:30:00.735Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-08T01:30:00.742Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-08T02:30:00.844Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-08T02:30:00.846Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-08T02:30:00.880Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-08T02:30:00.885Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-08T03:30:00.874Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-08T03:30:00.875Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-08T03:30:00.901Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-08T03:30:00.905Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-08T04:55:51.040Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-08T04:55:51.563Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-08T04:55:51.592Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-08T04:55:51.649Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-08T04:55:51.651Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-08T04:55:51.653Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-08T04:55:51.654Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-08T04:55:51.657Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-08T04:55:51.657Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-08T04:55:51.658Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-08T04:55:51.658Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-08T04:55:51.658Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-08T04:55:51.660Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-08T04:55:51.664Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-08T05:33:11.360Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-08T05:33:11.879Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-08T05:33:11.904Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-08T05:33:11.954Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-08T05:33:11.957Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-08T05:33:11.958Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-08T05:33:11.961Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-08T05:33:11.962Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-08T05:33:11.962Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-08T05:33:11.962Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-08T05:33:11.962Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-08T05:33:11.965Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-08T05:33:11.967Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-08T05:33:11.969Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-08T06:30:00.978Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-08T06:30:00.980Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-08T06:30:01.020Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-08T06:30:01.059Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-08T11:01:47.688Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-08T11:01:48.110Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-08T11:01:48.132Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-08T11:01:48.177Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-08T11:01:48.179Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-08T11:01:48.179Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-08T11:01:48.180Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-08T11:01:48.183Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-08T11:01:48.183Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-08T11:01:48.183Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-08T11:01:48.184Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-08T11:01:48.184Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-08T11:01:48.186Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-08T11:01:48.190Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-08T13:46:46.258Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-08T13:46:46.680Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-08T13:46:46.699Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-08T13:46:46.743Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-08T13:46:46.745Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-08T13:46:46.746Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-08T13:46:46.748Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-08T13:46:46.749Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-08T13:46:46.749Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-08T13:46:46.751Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-08T13:46:46.751Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-08T13:46:46.751Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-08T13:46:46.752Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-08T13:46:46.752Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-08T14:30:00.750Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-08T14:30:00.752Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-08T14:30:00.783Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-08T14:30:00.793Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-08T15:30:00.967Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-08T15:30:00.969Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-08T15:30:01.003Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-08T15:30:01.010Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-08T16:30:00.183Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-08T16:30:00.185Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-08T16:30:00.217Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-08T16:30:00.222Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-08T17:30:00.407Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-08T17:30:00.409Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-08T17:30:00.434Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-08T17:30:00.439Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-08T18:30:00.618Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-08T18:30:00.621Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-08T18:30:00.656Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-08T18:30:00.663Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-08T19:30:00.843Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-08T19:30:00.847Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-08T19:30:00.890Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-08T19:30:00.896Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-08T20:30:00.063Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-08T20:30:00.065Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-08T20:30:00.100Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-08T20:30:00.107Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-08T21:30:00.681Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-08T21:30:00.696Z"}
{"level":"error","message":"[Job:MarkOverdue] Error: \nInvalid `prisma.milestone.updateMany()` invocation:\n\n\nError occurred during query execution:\nConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(Server(MysqlError { code: 1615, message: \"Prepared statement needs to be re-prepared\", state: \"HY000\" })), transient: false })","timestamp":"2026-08-08T21:30:00.808Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-08T22:30:00.005Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-08T22:30:00.008Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-08T22:30:00.065Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-08T22:30:00.083Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-08T23:30:00.197Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-08T23:30:00.199Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-08T23:30:00.249Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-08T23:30:00.262Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T00:30:00.361Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T00:30:00.363Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T00:30:00.396Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T00:30:00.408Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T01:30:00.467Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T01:30:00.471Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T01:30:00.502Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T01:30:00.505Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T02:30:00.545Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T02:30:00.547Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T02:30:00.578Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T02:30:00.583Z"}
{"level":"info","message":"[Server] SIGTERM received — shutting down gracefully...","timestamp":"2026-08-09T03:21:53.397Z"}
{"level":"info","message":"[Redis] Client quit","timestamp":"2026-08-09T03:21:53.421Z"}
{"level":"warn","message":"[Redis] Connection closed","timestamp":"2026-08-09T03:21:53.423Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-09T04:03:42.527Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-09T04:03:42.964Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-09T04:03:42.987Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-09T04:03:43.034Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-09T04:03:43.035Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-09T04:03:43.036Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-09T04:03:43.037Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-09T04:03:43.037Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-09T04:03:43.039Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-09T04:03:43.040Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-09T04:03:43.040Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-09T04:03:43.040Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-09T04:03:43.040Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-09T04:03:43.043Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T04:30:00.835Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T04:30:00.839Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T04:30:00.873Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T04:30:00.877Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T05:30:00.113Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T05:30:00.115Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T05:30:00.149Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T05:30:00.162Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T06:30:00.442Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T06:30:00.446Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T06:30:00.477Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T06:30:00.481Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T07:30:00.665Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T07:30:00.676Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T07:30:00.715Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T07:30:00.722Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T08:30:00.826Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T08:30:00.832Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T08:30:00.865Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T08:30:00.869Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T09:30:00.978Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T09:30:00.984Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T09:30:01.027Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T09:30:01.032Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T10:30:00.158Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T10:30:00.165Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T10:30:00.204Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T10:30:00.210Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T11:30:00.266Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T11:30:00.268Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T11:30:00.298Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T11:30:00.302Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T12:30:00.473Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T12:30:00.479Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T12:30:00.520Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T12:30:00.526Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T13:30:00.589Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T13:30:00.594Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T13:30:00.628Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T13:30:00.632Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T14:30:00.764Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T14:30:00.766Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T14:30:00.803Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T14:30:00.809Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T15:30:00.904Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T15:30:00.905Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T15:30:00.933Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T15:30:00.937Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T16:30:00.128Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T16:30:00.134Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T16:30:00.171Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T16:30:00.176Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T17:30:00.337Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T17:30:00.339Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T17:30:00.375Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T17:30:00.381Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T18:30:00.429Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T18:30:00.445Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T18:30:00.481Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T18:30:00.485Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T19:30:00.908Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T19:30:00.910Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T19:30:00.950Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T19:30:00.955Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T20:30:00.027Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T20:30:00.029Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T20:30:00.064Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T20:30:00.071Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T21:30:00.314Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T21:30:00.322Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T21:30:00.375Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T21:30:00.381Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T22:30:00.579Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T22:30:00.580Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T22:30:00.624Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T22:30:00.633Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-09T23:30:00.790Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-09T23:30:00.793Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-09T23:30:00.823Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-09T23:30:00.829Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T00:30:00.972Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T00:30:00.975Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T00:30:01.006Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T00:30:01.013Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T01:30:00.103Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T01:30:00.104Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T01:30:00.138Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T01:30:00.144Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T02:30:00.294Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T02:30:00.296Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T02:30:00.324Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T02:30:00.328Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T03:30:00.446Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T03:30:00.448Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T03:30:00.481Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T03:30:00.488Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T04:30:00.615Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T04:30:00.617Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T04:30:00.645Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T04:30:00.649Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T05:30:00.814Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T05:30:00.816Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T05:30:00.852Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T05:30:00.858Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T06:30:00.979Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T06:30:00.981Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T06:30:01.030Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T06:30:01.037Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-10T06:57:27.666Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-10T06:57:28.190Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-10T06:57:28.211Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-10T06:57:28.255Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-10T06:57:28.260Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-10T06:57:28.262Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-10T06:57:28.265Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-10T06:57:28.268Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-10T06:57:28.269Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-10T06:57:28.273Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-10T06:57:28.273Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-10T06:57:28.273Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-10T06:57:28.273Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-10T06:57:28.273Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T07:30:00.535Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T07:30:00.538Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T07:30:00.571Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T07:30:00.578Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T08:30:00.705Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T08:30:00.708Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T08:30:00.744Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T08:30:00.748Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T09:30:00.882Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T09:30:00.884Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T09:30:00.922Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T09:30:00.927Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T10:30:00.110Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T10:30:00.111Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T10:30:00.149Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T10:30:00.155Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T11:30:00.319Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T11:30:00.321Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T11:30:00.364Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T11:30:00.374Z"}
{"level":"info","message":"[Cron] Running missing report reminder","timestamp":"2026-08-10T12:00:00.429Z"}
{"level":"info","message":"[Job:MissingReport] Missing report reminder job - pending notification module integration","timestamp":"2026-08-10T12:00:00.431Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T12:30:00.485Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T12:30:00.487Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T12:30:00.530Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T12:30:00.538Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-10T14:19:39.401Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-10T14:19:39.829Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-10T14:19:39.849Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-10T14:19:39.895Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-10T14:19:39.897Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-10T14:19:39.898Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-10T14:19:39.900Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-10T14:19:39.901Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-10T14:19:39.904Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-10T14:19:39.904Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-10T14:19:39.905Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-10T14:19:39.905Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-10T14:19:39.905Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-10T14:19:39.910Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T14:30:00.577Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T14:30:00.579Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T14:30:00.600Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T14:30:00.606Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T15:30:00.869Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T15:30:00.873Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T15:30:00.913Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T15:30:00.916Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T16:30:00.035Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T16:30:00.037Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T16:30:00.078Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T16:30:00.085Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T17:30:00.263Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T17:30:00.270Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T17:30:00.310Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T17:30:00.317Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T18:30:00.389Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T18:30:00.392Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T18:30:00.427Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T18:30:00.432Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T19:30:00.555Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T19:30:00.557Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T19:30:00.586Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T19:30:00.590Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T20:30:00.902Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T20:30:00.904Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T20:30:00.939Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T20:30:00.945Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T21:30:00.505Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T21:30:00.513Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T21:30:00.574Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T21:30:00.583Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T22:30:00.802Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T22:30:00.804Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T22:30:00.834Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T22:30:00.840Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-10T23:30:00.998Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-10T23:30:01.000Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-10T23:30:01.037Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-10T23:30:01.045Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T00:30:00.239Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T00:30:00.242Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T00:30:00.275Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T00:30:00.283Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T01:30:00.437Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T01:30:00.438Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T01:30:00.471Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T01:30:00.475Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T02:30:00.612Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T02:30:00.617Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T02:30:00.643Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T02:30:00.647Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T03:30:00.825Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T03:30:00.827Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T03:30:00.858Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T03:30:00.866Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T04:30:00.019Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T04:30:00.027Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T04:30:00.065Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T04:30:00.069Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T05:30:00.183Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T05:30:00.185Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T05:30:00.230Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T05:30:00.239Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T06:30:00.413Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T06:30:00.416Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T06:30:00.456Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T06:30:00.461Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T07:30:00.616Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T07:30:00.618Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T07:30:00.645Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T07:30:00.648Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-11T08:43:24.427Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-11T08:43:24.897Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-11T08:43:24.919Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-11T08:43:24.973Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-11T08:43:24.977Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-11T08:43:24.977Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-11T08:43:24.981Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-11T08:43:24.981Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-11T08:43:24.982Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-11T08:43:24.982Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-11T08:43:24.982Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-11T08:43:24.985Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-11T08:43:24.987Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-11T08:43:24.990Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T09:30:00.337Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T09:30:00.340Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T09:30:00.379Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T09:30:00.387Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T10:30:00.629Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T10:30:00.631Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T10:30:00.669Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T10:30:00.673Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T11:30:00.902Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T11:30:00.908Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T11:30:00.953Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T11:30:00.960Z"}
{"level":"info","message":"[Cron] Running missing report reminder","timestamp":"2026-08-11T12:00:00.035Z"}
{"level":"info","message":"[Job:MissingReport] Missing report reminder job - pending notification module integration","timestamp":"2026-08-11T12:00:00.040Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T12:30:00.189Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T12:30:00.191Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T12:30:00.229Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T12:30:00.236Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T13:30:00.565Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T13:30:00.569Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T13:30:00.610Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T13:30:00.614Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T14:30:00.858Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T14:30:00.860Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T14:30:00.896Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T14:30:00.903Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T15:30:00.129Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T15:30:00.132Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T15:30:00.160Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T15:30:00.164Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T16:30:00.334Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T16:30:00.336Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T16:30:00.372Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T16:30:00.378Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T17:30:00.604Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T17:30:00.616Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T17:30:00.659Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T17:30:00.664Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T18:30:00.871Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T18:30:00.874Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T18:30:00.910Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T18:30:00.914Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T19:30:00.864Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T19:30:00.876Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T19:30:00.965Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T19:30:00.974Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T20:30:00.103Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T20:30:00.106Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T20:30:00.145Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T20:30:00.150Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T21:30:00.932Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T21:30:00.954Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T21:30:01.008Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T21:30:01.019Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T22:30:00.263Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T22:30:00.268Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T22:30:00.318Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T22:30:00.327Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-11T23:30:00.484Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-11T23:30:00.486Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-11T23:30:00.517Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-11T23:30:00.523Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T00:30:00.676Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T00:30:00.694Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T00:30:00.738Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T00:30:00.747Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T01:30:00.946Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T01:30:00.951Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T01:30:00.989Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T01:30:00.994Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T02:30:00.102Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T02:30:00.108Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T02:30:00.145Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T02:30:00.149Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T03:30:00.275Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T03:30:00.277Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T03:30:00.308Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T03:30:00.316Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T04:30:00.490Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T04:30:00.495Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T04:30:00.523Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T04:30:00.526Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T05:30:00.713Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T05:30:00.715Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T05:30:00.743Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T05:30:00.750Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T06:30:00.973Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T06:30:00.974Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T06:30:01.027Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T06:30:01.039Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T07:30:00.336Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T07:30:00.338Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T07:30:00.377Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T07:30:00.385Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T08:30:00.592Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T08:30:00.594Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T08:30:00.631Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T08:30:00.635Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T09:30:00.859Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T09:30:00.861Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T09:30:00.923Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T09:30:00.934Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T10:30:00.482Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T10:30:00.483Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T10:30:00.528Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T10:30:00.540Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T11:30:00.740Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T11:30:00.741Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T11:30:00.776Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T11:30:00.782Z"}
{"level":"info","message":"[Cron] Running missing report reminder","timestamp":"2026-08-12T12:00:00.895Z"}
{"level":"info","message":"[Job:MissingReport] Missing report reminder job - pending notification module integration","timestamp":"2026-08-12T12:00:00.897Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T12:30:00.002Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T12:30:00.004Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T12:30:00.047Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T12:30:00.054Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-12T15:21:14.642Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-12T15:21:15.095Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-12T15:21:15.114Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-12T15:21:15.156Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-12T15:21:15.159Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-12T15:21:15.160Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-12T15:21:15.163Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-12T15:21:15.163Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-12T15:21:15.163Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-12T15:21:15.164Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-12T15:21:15.164Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-12T15:21:15.166Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-12T15:21:15.169Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-12T15:21:15.170Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T15:30:00.764Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T15:30:00.766Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T15:30:00.781Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T15:30:00.786Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T17:30:00.249Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T17:30:00.250Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T17:30:00.280Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T17:30:00.285Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T18:30:00.519Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T18:30:00.520Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T18:30:00.546Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T18:30:00.552Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-12T19:29:37.340Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-12T19:29:37.772Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-12T19:29:37.793Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-12T19:29:37.832Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-12T19:29:37.834Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-12T19:29:37.835Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-12T19:29:37.835Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-12T19:29:37.837Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-12T19:29:37.837Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-12T19:29:37.838Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-12T19:29:37.838Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-12T19:29:37.838Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-12T19:29:37.839Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-12T19:29:37.843Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T19:30:00.807Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T19:30:00.809Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T19:30:00.826Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T19:30:00.831Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T20:30:00.150Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T20:30:00.153Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T20:30:00.186Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T20:30:00.189Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T21:30:00.502Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T21:30:00.510Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T21:30:00.557Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T21:30:00.565Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T22:30:00.751Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T22:30:00.752Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T22:30:00.787Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T22:30:00.794Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-12T23:30:00.010Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-12T23:30:00.017Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-12T23:30:00.062Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-12T23:30:00.071Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T00:30:00.169Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T00:30:00.180Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T00:30:00.220Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T00:30:00.228Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T01:30:00.405Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T01:30:00.410Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T01:30:00.454Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T01:30:00.461Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T02:30:00.646Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T02:30:00.649Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T02:30:00.688Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T02:30:00.692Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T03:30:00.808Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T03:30:00.809Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T03:30:00.844Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T03:30:00.850Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T04:30:00.038Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T04:30:00.039Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T04:30:00.069Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T04:30:00.073Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:268:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-13T04:30:45.697Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:273:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-13T04:32:40.203Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-13T04:32:52.562Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (jEMCrIB4W2KRDNxnAAAB)","timestamp":"2026-08-13T04:32:52.749Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (GrX5WoL95EJLFkSnAAAD)","timestamp":"2026-08-13T04:32:52.904Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:273:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-13T04:35:05.360Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:273:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-13T04:35:09.680Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:273:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-13T04:35:19.748Z"}
{"level":"info","message":"[Auth] Token rotated for user: admin@pms.com","timestamp":"2026-08-13T04:36:45.616Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (A25Yl_WeLmQIM4VVAAAK)","timestamp":"2026-08-13T04:36:45.851Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (oISgJNxWJJzgiyjxAAAL)","timestamp":"2026-08-13T04:36:45.855Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (A25Yl_WeLmQIM4VVAAAK)","timestamp":"2026-08-13T04:36:54.954Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (oISgJNxWJJzgiyjxAAAL)","timestamp":"2026-08-13T04:36:54.955Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-13T04:37:13.273Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Vm7fHJjV77VyYidFAAAN)","timestamp":"2026-08-13T04:37:13.343Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (OK7IoCUVSMKjZdRSAAAP)","timestamp":"2026-08-13T04:37:13.373Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:273:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-13T04:37:32.622Z"}
{"level":"error","message":"[Error] An admin account already exists. Only one admin is allowed.","method":"POST","path":"/api/auth/register","stack":"Error: An admin account already exists. Only one admin is allowed.\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.register (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:170:13)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:72:16","timestamp":"2026-08-13T04:38:03.465Z"}
{"level":"info","message":"[Auth] Registered user: deepaksaini.his@gmail.com (role: team-leader)","timestamp":"2026-08-13T04:38:18.952Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (OK7IoCUVSMKjZdRSAAAP)","timestamp":"2026-08-13T04:38:33.364Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Vm7fHJjV77VyYidFAAAN)","timestamp":"2026-08-13T04:38:33.366Z"}
{"level":"info","message":"[Auth] User logged in: deepaksaini.his@gmail.com (IP: 122.162.240.56)","timestamp":"2026-08-13T04:38:36.690Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (x9LYAsBYaBJ7T0LRAAAR)","timestamp":"2026-08-13T04:38:36.903Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (r-14XRjjIHYap5P4AAAT)","timestamp":"2026-08-13T04:38:37.091Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (GrX5WoL95EJLFkSnAAAD)","timestamp":"2026-08-13T04:39:14.356Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (jEMCrIB4W2KRDNxnAAAB)","timestamp":"2026-08-13T04:39:14.358Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (r-14XRjjIHYap5P4AAAT)","timestamp":"2026-08-13T04:39:17.849Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-13T04:39:27.703Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (oWy3xl-Sb-K5vYLSAAAV)","timestamp":"2026-08-13T04:39:27.744Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (gydCrC79I9VIP4mcAAAX)","timestamp":"2026-08-13T04:39:27.856Z"}
{"level":"error","message":"[PushService] Error sending push: Received unexpected response code - Body: push subscription has unsubscribed or expired.\n","timestamp":"2026-08-13T04:39:38.125Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (gydCrC79I9VIP4mcAAAX)","timestamp":"2026-08-13T04:39:47.945Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (zpTaNgBEilGVojXUAAAZ)","timestamp":"2026-08-13T04:40:56.649Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-13T04:43:39.758Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (_XYbcoeRKmEw5wC7AAAb)","timestamp":"2026-08-13T04:43:39.823Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (YfRv6rnSMvfpap18AAAd)","timestamp":"2026-08-13T04:43:39.987Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (zpTaNgBEilGVojXUAAAZ)","timestamp":"2026-08-13T04:49:19.111Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (sG2b2rGTnBUhO19CAAAf)","timestamp":"2026-08-13T04:49:21.948Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-13T05:00:18.184Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (-dmoMtW9Z7LPy6W-AAAh)","timestamp":"2026-08-13T05:00:18.249Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (LEcOsdn1IUCTzcvUAAAj)","timestamp":"2026-08-13T05:00:18.359Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (TVnQVgWLgYWBJOCUAAAm)","timestamp":"2026-08-13T05:03:46.683Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (9wOWy82gMUJBpzfaAAAn)","timestamp":"2026-08-13T05:03:46.687Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (TVnQVgWLgYWBJOCUAAAm)","timestamp":"2026-08-13T05:03:46.723Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (9wOWy82gMUJBpzfaAAAn)","timestamp":"2026-08-13T05:03:46.724Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (U4_ft_I0T7RHtG0sAAAs)","timestamp":"2026-08-13T05:03:46.825Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (ZMl4VKtu9hpNlmhVAAAt)","timestamp":"2026-08-13T05:03:46.831Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (U4_ft_I0T7RHtG0sAAAs)","timestamp":"2026-08-13T05:03:46.844Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (ZMl4VKtu9hpNlmhVAAAt)","timestamp":"2026-08-13T05:03:46.847Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (DXcLFy0wOUxfeXL_AAAw)","timestamp":"2026-08-13T05:03:46.868Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (zldFanN4U2wWxleaAAAx)","timestamp":"2026-08-13T05:03:46.870Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (-dmoMtW9Z7LPy6W-AAAh)","timestamp":"2026-08-13T05:04:23.392Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (LEcOsdn1IUCTzcvUAAAj)","timestamp":"2026-08-13T05:04:23.538Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-13T05:04:34.168Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (kNU5W5qIQq_vdzfwAAAz)","timestamp":"2026-08-13T05:04:34.224Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (UN1dDWTvP2CMm1ZpAAA1)","timestamp":"2026-08-13T05:04:34.433Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (x9LYAsBYaBJ7T0LRAAAR)","timestamp":"2026-08-13T05:04:55.162Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (_XYbcoeRKmEw5wC7AAAb)","timestamp":"2026-08-13T05:04:56.206Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (YfRv6rnSMvfpap18AAAd)","timestamp":"2026-08-13T05:04:56.209Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (sG2b2rGTnBUhO19CAAAf)","timestamp":"2026-08-13T05:05:12.881Z"}
{"level":"info","message":"[Auth] Registered user: mayursharme.his@gmail.com (role: team-leader)","timestamp":"2026-08-13T05:07:33.568Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (UN1dDWTvP2CMm1ZpAAA1)","timestamp":"2026-08-13T05:07:47.413Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (kNU5W5qIQq_vdzfwAAAz)","timestamp":"2026-08-13T05:07:47.414Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:273:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-13T05:07:50.088Z"}
{"level":"info","message":"[Auth] User logged in: mayursharme.his@gmail.com (IP: 122.162.240.56)","timestamp":"2026-08-13T05:08:07.475Z"}
{"level":"info","message":"[Socket.IO] User cmsr2446o001bsh6hlywvytba connected (32lqIVNYNejyKywEAAA3)","timestamp":"2026-08-13T05:08:07.520Z"}
{"level":"info","message":"[Socket.IO] User cmsr2446o001bsh6hlywvytba connected (v64sKsH-I4U8GcOKAAA5)","timestamp":"2026-08-13T05:08:07.605Z"}
{"level":"info","message":"[Socket.IO] User cmsr2446o001bsh6hlywvytba disconnected (v64sKsH-I4U8GcOKAAA5)","timestamp":"2026-08-13T05:09:32.093Z"}
{"level":"info","message":"[Socket.IO] User cmsr2446o001bsh6hlywvytba connected (Juuogr-zx0AHxsf_AAA7)","timestamp":"2026-08-13T05:09:47.887Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (DXcLFy0wOUxfeXL_AAAw)","timestamp":"2026-08-13T05:10:31.849Z"}
{"level":"info","message":"[Socket.IO] User cmsr2446o001bsh6hlywvytba disconnected (Juuogr-zx0AHxsf_AAA7)","timestamp":"2026-08-13T05:11:53.692Z"}
{"level":"info","message":"[Socket.IO] User cmsr2446o001bsh6hlywvytba disconnected (32lqIVNYNejyKywEAAA3)","timestamp":"2026-08-13T05:11:53.694Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (XkG0ekzIpe9ZKOpMAAA9)","timestamp":"2026-08-13T05:12:02.810Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-13T05:12:03.498Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (mYSgPl6dNqL73vkpAABA)","timestamp":"2026-08-13T05:12:03.549Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (9iiAal7E5CzaQ1yyAABB)","timestamp":"2026-08-13T05:12:03.565Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (9iiAal7E5CzaQ1yyAABB)","timestamp":"2026-08-13T05:13:24.639Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (lNSOIIcYQQ7kSg2_AABD)","timestamp":"2026-08-13T05:13:39.151Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (qk2f5dp3cI3h9OEBAABG)","timestamp":"2026-08-13T05:16:38.573Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (JYBqpv1kjiZATYynAABH)","timestamp":"2026-08-13T05:16:38.583Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (SV5Z4S7kykjSFnx8AABJ)","timestamp":"2026-08-13T05:16:40.382Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (fJgkm3TjBAaeLL5GAABL)","timestamp":"2026-08-13T05:16:40.852Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (SV5Z4S7kykjSFnx8AABJ)","timestamp":"2026-08-13T05:17:50.599Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (fJgkm3TjBAaeLL5GAABL)","timestamp":"2026-08-13T05:17:51.300Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (N3XIAO5_B_TPkKdUAABN)","timestamp":"2026-08-13T05:17:52.580Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (HqZyPzHEoJ06fZYUAABP)","timestamp":"2026-08-13T05:17:53.637Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-13T05:20:51.444Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (j8pMF64DHNCspzrHAABR)","timestamp":"2026-08-13T05:20:51.495Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (YClMxPJFR81DQtfHAABT)","timestamp":"2026-08-13T05:20:51.618Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (YClMxPJFR81DQtfHAABT)","timestamp":"2026-08-13T05:21:23.025Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (zXOa8wLapkZWeQuhAABV)","timestamp":"2026-08-13T05:21:25.551Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (zXOa8wLapkZWeQuhAABV)","timestamp":"2026-08-13T05:21:56.660Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (j8pMF64DHNCspzrHAABR)","timestamp":"2026-08-13T05:21:56.661Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-13T05:22:21.768Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (SsjcYSe0CpZE36GgAABY)","timestamp":"2026-08-13T05:22:21.830Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (7mF9-JOtl9-qmhzVAABZ)","timestamp":"2026-08-13T05:22:21.836Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (qk2f5dp3cI3h9OEBAABG)","timestamp":"2026-08-13T05:23:03.849Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (JYBqpv1kjiZATYynAABH)","timestamp":"2026-08-13T05:23:03.850Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (-q8qwT7FHiVStSUpAABb)","timestamp":"2026-08-13T05:23:05.595Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (uY0MIez-WSUE2U9EAABd)","timestamp":"2026-08-13T05:23:06.578Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (N3XIAO5_B_TPkKdUAABN)","timestamp":"2026-08-13T05:23:13.975Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (HqZyPzHEoJ06fZYUAABP)","timestamp":"2026-08-13T05:23:13.976Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (-q8qwT7FHiVStSUpAABb)","timestamp":"2026-08-13T05:23:13.977Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (uY0MIez-WSUE2U9EAABd)","timestamp":"2026-08-13T05:23:13.978Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (QcdWNFkHePObUANOAABi)","timestamp":"2026-08-13T05:23:15.592Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (6Nw5-bKoNrtPi53ZAABj)","timestamp":"2026-08-13T05:23:15.599Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (BOIN4Tdxuar_zzFqAABk)","timestamp":"2026-08-13T05:23:15.606Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (NoFhY2OCsR7lXZS-AABl)","timestamp":"2026-08-13T05:23:15.609Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (QcdWNFkHePObUANOAABi)","timestamp":"2026-08-13T05:24:00.557Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (6Nw5-bKoNrtPi53ZAABj)","timestamp":"2026-08-13T05:24:00.557Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (BOIN4Tdxuar_zzFqAABk)","timestamp":"2026-08-13T05:24:00.558Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (NoFhY2OCsR7lXZS-AABl)","timestamp":"2026-08-13T05:24:00.558Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-13T05:28:21.387Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (byrQqPxhmDpsb9TIAABn)","timestamp":"2026-08-13T05:28:21.433Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (S-ok8AbcvXqm0aXUAABp)","timestamp":"2026-08-13T05:28:21.547Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (g79ZVRqYxgEQNSuoAABu)","timestamp":"2026-08-13T05:28:38.394Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (iaYw6PbfTaAynJWtAABv)","timestamp":"2026-08-13T05:28:38.420Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (moFgToUfA4jCtk65AABw)","timestamp":"2026-08-13T05:28:38.436Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (KJHygp3ZiaoMfU3UAABx)","timestamp":"2026-08-13T05:28:38.573Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (I7O6ge-tcn2IR-IEAAB0)","timestamp":"2026-08-13T05:28:48.054Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (qbqcQFx1f592BEDLAAB1)","timestamp":"2026-08-13T05:28:48.061Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (qbqcQFx1f592BEDLAAB1)","timestamp":"2026-08-13T05:28:48.141Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (I7O6ge-tcn2IR-IEAAB0)","timestamp":"2026-08-13T05:28:48.144Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (jqBiOG5i9LcXC68UAAB4)","timestamp":"2026-08-13T05:28:48.181Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (Fd6vZ-mRneDIxiPkAAB5)","timestamp":"2026-08-13T05:28:48.187Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (jqBiOG5i9LcXC68UAAB4)","timestamp":"2026-08-13T05:28:50.222Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (nDosvGyxWwhZk-JTAAB7)","timestamp":"2026-08-13T05:29:21.298Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (nDosvGyxWwhZk-JTAAB7)","timestamp":"2026-08-13T05:29:21.373Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (X46EmncpajJldC-jAAB9)","timestamp":"2026-08-13T05:29:21.400Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (iaYw6PbfTaAynJWtAABv)","timestamp":"2026-08-13T05:29:22.764Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (moFgToUfA4jCtk65AABw)","timestamp":"2026-08-13T05:29:22.764Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (Fd6vZ-mRneDIxiPkAAB5)","timestamp":"2026-08-13T05:29:58.259Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T05:30:00.447Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T05:30:00.448Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T05:30:00.453Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T05:30:00.456Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (pKimDYv0rmiV1POoAACA)","timestamp":"2026-08-13T05:30:23.042Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (-9Ys9H9UsM1OFGFAAACB)","timestamp":"2026-08-13T05:30:23.047Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (pKimDYv0rmiV1POoAACA)","timestamp":"2026-08-13T05:30:23.135Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (-9Ys9H9UsM1OFGFAAACB)","timestamp":"2026-08-13T05:30:23.137Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (QmRM7YlnKGqv4OwFAACE)","timestamp":"2026-08-13T05:30:23.159Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (kQIQCBt07sAShADXAACF)","timestamp":"2026-08-13T05:30:23.162Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (bOpsZOTmz6z5jZnDAACI)","timestamp":"2026-08-13T05:30:25.001Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (RwHOApfLceeiw5mVAACJ)","timestamp":"2026-08-13T05:30:25.008Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (bOpsZOTmz6z5jZnDAACI)","timestamp":"2026-08-13T05:30:25.046Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (RwHOApfLceeiw5mVAACJ)","timestamp":"2026-08-13T05:30:25.047Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (V9SQcDNbYWLdIvuRAACM)","timestamp":"2026-08-13T05:30:25.069Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Hy6iJgbfUSNcFLPwAACN)","timestamp":"2026-08-13T05:30:25.072Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (V9SQcDNbYWLdIvuRAACM)","timestamp":"2026-08-13T05:30:29.301Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (byrQqPxhmDpsb9TIAABn)","timestamp":"2026-08-13T05:30:46.571Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (S-ok8AbcvXqm0aXUAABp)","timestamp":"2026-08-13T05:30:46.594Z"}
{"level":"error","message":"[PushService] Error sending push: Received unexpected response code - Body: push subscription has unsubscribed or expired.\n","timestamp":"2026-08-13T05:31:05.869Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (QmRM7YlnKGqv4OwFAACE)","timestamp":"2026-08-13T05:31:08.138Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (kQIQCBt07sAShADXAACF)","timestamp":"2026-08-13T05:31:08.142Z"}
{"level":"error","message":"[PushService] Error sending push: Received unexpected response code - Body: push subscription has unsubscribed or expired.\n","timestamp":"2026-08-13T05:31:25.082Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (7mF9-JOtl9-qmhzVAABZ)","timestamp":"2026-08-13T05:32:44.281Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (cZmdRSF6JoKrhgU6AACP)","timestamp":"2026-08-13T05:32:49.569Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (3uAdvC4ilFcBElJAAACR)","timestamp":"2026-08-13T05:33:05.569Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (8jn5l2Zr3IaSXwa1AACT)","timestamp":"2026-08-13T05:36:39.014Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (8jn5l2Zr3IaSXwa1AACT)","timestamp":"2026-08-13T05:36:39.098Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (oceURjxHqVLBEiKAAACV)","timestamp":"2026-08-13T05:36:39.126Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (bgNteTkmRTxTo4o4AACX)","timestamp":"2026-08-13T05:36:40.259Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (bgNteTkmRTxTo4o4AACX)","timestamp":"2026-08-13T05:36:40.379Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (t4-CnWPEgl5ajKEQAACZ)","timestamp":"2026-08-13T05:36:40.403Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (X46EmncpajJldC-jAAB9)","timestamp":"2026-08-13T05:37:12.540Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (oWy3xl-Sb-K5vYLSAAAV)","timestamp":"2026-08-13T05:37:21.060Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (Ul3uQSp6mLS9RFy8AACb)","timestamp":"2026-08-13T05:39:57.226Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (SsjcYSe0CpZE36GgAABY)","timestamp":"2026-08-13T05:41:28.131Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (cZmdRSF6JoKrhgU6AACP)","timestamp":"2026-08-13T05:41:30.142Z"}
{"level":"info","message":"[Auth] Registered user: kamalkumawat.hipl@gmail.com (role: team-member)","timestamp":"2026-08-13T05:42:07.406Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (Ul3uQSp6mLS9RFy8AACb)","timestamp":"2026-08-13T05:42:15.943Z"}
{"level":"info","message":"[Auth] User logged in: kamalkumawat.hipl@gmail.com (IP: 122.162.240.56)","timestamp":"2026-08-13T05:42:23.582Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (UtFKL9VLH2UdiG4YAACd)","timestamp":"2026-08-13T05:42:23.631Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (-o2RHKk0jN6G2ZsaAACf)","timestamp":"2026-08-13T05:42:23.775Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (ZXU3XVXvVgfAi7AUAACi)","timestamp":"2026-08-13T05:42:58.398Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (aTjZH2f8YUhvUAmaAACj)","timestamp":"2026-08-13T05:42:58.403Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (ZXU3XVXvVgfAi7AUAACi)","timestamp":"2026-08-13T05:42:58.467Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (aTjZH2f8YUhvUAmaAACj)","timestamp":"2026-08-13T05:42:58.468Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (mOLhbEJhMYQQZg8nAACm)","timestamp":"2026-08-13T05:42:58.494Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (ijfF9JjP9_yRstGZAACn)","timestamp":"2026-08-13T05:42:58.496Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (vatMPPy2rUaE7SHtAACp)","timestamp":"2026-08-13T05:43:16.285Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (vatMPPy2rUaE7SHtAACp)","timestamp":"2026-08-13T05:43:16.341Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (3Ct8IdhuUDJHqolrAACr)","timestamp":"2026-08-13T05:43:16.358Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (UtFKL9VLH2UdiG4YAACd)","timestamp":"2026-08-13T05:43:33.663Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (-o2RHKk0jN6G2ZsaAACf)","timestamp":"2026-08-13T05:43:33.737Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (mOLhbEJhMYQQZg8nAACm)","timestamp":"2026-08-13T05:43:43.471Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (ijfF9JjP9_yRstGZAACn)","timestamp":"2026-08-13T05:43:43.471Z"}
{"level":"error","message":"[PushService] Error sending push: Received unexpected response code - Body: push subscription has unsubscribed or expired.\n","timestamp":"2026-08-13T05:44:04.136Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (0aQDKr2-4R2sxx0JAACt)","timestamp":"2026-08-13T05:46:37.467Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (0aQDKr2-4R2sxx0JAACt)","timestamp":"2026-08-13T05:46:50.536Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (AUEu2Ob7omTMUgRsAACv)","timestamp":"2026-08-13T05:46:58.008Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (AUEu2Ob7omTMUgRsAACv)","timestamp":"2026-08-13T05:47:07.270Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (epGolrdlf-_tN0GNAACx)","timestamp":"2026-08-13T05:47:21.488Z"}
{"level":"error","message":"[Error] Team member effective to date cannot be after project end date","method":"PATCH","path":"/api/projects/cmsij485s005vshsy5biuk2k7","stack":"Error: Team member effective to date cannot be after project end date\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.service.js:636:25\n    at async Proxy._transactionWithCallback (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:134:8120)\n    at async exports.updateProject (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.controller.js:69:5)","timestamp":"2026-08-13T05:48:18.306Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (3eYRfnJApMbzKt63AACz)","timestamp":"2026-08-13T05:48:24.227Z"}
{"level":"error","message":"[Error] Team member effective to date cannot be after project end date","method":"PATCH","path":"/api/projects/cmsij485s005vshsy5biuk2k7","stack":"Error: Team member effective to date cannot be after project end date\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.service.js:636:25\n    at async Proxy._transactionWithCallback (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:134:8120)\n    at async exports.updateProject (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.controller.js:69:5)","timestamp":"2026-08-13T05:48:35.439Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (3eYRfnJApMbzKt63AACz)","timestamp":"2026-08-13T05:48:42.363Z"}
{"level":"error","message":"[Error] Team member effective to date cannot be after project end date","method":"PATCH","path":"/api/projects/cmsij485s005vshsy5biuk2k7","stack":"Error: Team member effective to date cannot be after project end date\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.service.js:636:25\n    at async Proxy._transactionWithCallback (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:134:8120)\n    at async exports.updateProject (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.controller.js:69:5)","timestamp":"2026-08-13T05:48:42.781Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (DmzrKPy529v9RPKAAAC1)","timestamp":"2026-08-13T05:49:00.039Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (DmzrKPy529v9RPKAAAC1)","timestamp":"2026-08-13T05:49:05.296Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (ql33UtRxcK1lfEUIAAC3)","timestamp":"2026-08-13T05:49:13.584Z"}
{"level":"error","message":"[Error] Team member effective to date cannot be after project end date","method":"PATCH","path":"/api/projects/cmsij485s005vshsy5biuk2k7","stack":"Error: Team member effective to date cannot be after project end date\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.service.js:636:25\n    at async Proxy._transactionWithCallback (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:134:8120)\n    at async exports.updateProject (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.controller.js:69:5)","timestamp":"2026-08-13T05:49:30.896Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (ql33UtRxcK1lfEUIAAC3)","timestamp":"2026-08-13T05:49:44.335Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (3Ct8IdhuUDJHqolrAACr)","timestamp":"2026-08-13T05:49:44.336Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (ZQobhIJvoIUD51kdAAC6)","timestamp":"2026-08-13T05:49:44.371Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (MeGez4mFAQA1-4xoAAC7)","timestamp":"2026-08-13T05:49:44.381Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (T3cq_VI3pS_GRl-NAAC-)","timestamp":"2026-08-13T05:49:53.903Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (ijMlBvu_Gi7JtPA4AAC_)","timestamp":"2026-08-13T05:49:53.933Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (T3cq_VI3pS_GRl-NAAC-)","timestamp":"2026-08-13T05:49:53.982Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (ijMlBvu_Gi7JtPA4AAC_)","timestamp":"2026-08-13T05:49:53.985Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (ICXUiGyf3ZOicyTcAADC)","timestamp":"2026-08-13T05:49:54.030Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (xUnGJBOc0vkZ64jRAADD)","timestamp":"2026-08-13T05:49:54.034Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (ZQobhIJvoIUD51kdAAC6)","timestamp":"2026-08-13T05:50:29.340Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (MeGez4mFAQA1-4xoAAC7)","timestamp":"2026-08-13T05:50:29.346Z"}
{"level":"error","message":"[Error] Team member effective to date cannot be after project end date","method":"PATCH","path":"/api/projects/cmsij485s005vshsy5biuk2k7","stack":"Error: Team member effective to date cannot be after project end date\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.service.js:636:25\n    at async Proxy._transactionWithCallback (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:134:8120)\n    at async exports.updateProject (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.controller.js:69:5)","timestamp":"2026-08-13T05:51:25.572Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (t4-CnWPEgl5ajKEQAACZ)","timestamp":"2026-08-13T05:52:08.277Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (MHVi8RQz_xEhuPYUAADF)","timestamp":"2026-08-13T05:52:09.100Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (epGolrdlf-_tN0GNAACx)","timestamp":"2026-08-13T05:52:10.792Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (wml0o6nUq1vfB1TIAADH)","timestamp":"2026-08-13T05:52:16.827Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (Q-lTMUJnTqiXF4koAADJ)","timestamp":"2026-08-13T05:53:37.621Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (Q-lTMUJnTqiXF4koAADJ)","timestamp":"2026-08-13T05:53:37.685Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (j6b0b8pWZFygXE4mAADL)","timestamp":"2026-08-13T05:53:37.704Z"}
{"level":"error","message":"[Error] Team member effective dates are not under project date","method":"POST","path":"/api/projects","stack":"Error: Team member effective dates are not under project date\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.service.js:36:25\n    at Proxy._transactionWithCallback (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:134:8126)\n    at async exports.createProject (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.controller.js:6:21)","timestamp":"2026-08-13T05:57:38.043Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (KJHygp3ZiaoMfU3UAABx)","timestamp":"2026-08-13T05:57:42.924Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (g79ZVRqYxgEQNSuoAABu)","timestamp":"2026-08-13T05:57:42.925Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (E0uCf5fr_w_UvZBCAADO)","timestamp":"2026-08-13T05:57:44.606Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (11zJFL2mI6vNkvRyAADP)","timestamp":"2026-08-13T05:57:44.609Z"}
{"level":"error","message":"[Error] Team member effective dates are not under project date","method":"POST","path":"/api/projects","stack":"Error: Team member effective dates are not under project date\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.service.js:36:25\n    at Proxy._transactionWithCallback (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:134:8126)\n    at async exports.createProject (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.controller.js:6:21)","timestamp":"2026-08-13T05:57:56.111Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (wml0o6nUq1vfB1TIAADH)","timestamp":"2026-08-13T05:58:14.166Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (11zJFL2mI6vNkvRyAADP)","timestamp":"2026-08-13T05:58:29.533Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (E0uCf5fr_w_UvZBCAADO)","timestamp":"2026-08-13T05:58:29.533Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (MHVi8RQz_xEhuPYUAADF)","timestamp":"2026-08-13T05:58:33.567Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (j--FWK8Ur6HmkjmHAADS)","timestamp":"2026-08-13T06:01:34.827Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (vhN56JlzejloNhPZAADT)","timestamp":"2026-08-13T06:01:34.843Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (j--FWK8Ur6HmkjmHAADS)","timestamp":"2026-08-13T06:01:34.940Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (vhN56JlzejloNhPZAADT)","timestamp":"2026-08-13T06:01:34.942Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (5jnsvZMOh1QV8exXAADW)","timestamp":"2026-08-13T06:01:35.072Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (n1GMRq_rkvWLaxZLAADX)","timestamp":"2026-08-13T06:01:35.075Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (xUnGJBOc0vkZ64jRAADD)","timestamp":"2026-08-13T06:01:54.816Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (ICXUiGyf3ZOicyTcAADC)","timestamp":"2026-08-13T06:01:54.816Z"}
{"level":"info","message":"[Auth] Password changed for user: kamalkumawat.hipl@gmail.com","timestamp":"2026-08-13T06:07:04.543Z"}
{"level":"error","message":"[Error] Team member effective from date cannot be after effective to date","method":"PATCH","path":"/api/projects/cmsr3xvve006ash6h09thaw10","stack":"Error: Team member effective from date cannot be after effective to date\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.service.js:624:25\n    at async Proxy._transactionWithCallback (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:134:8120)\n    at async exports.updateProject (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/projects/projects.controller.js:69:5)","timestamp":"2026-08-13T06:08:27.387Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-13T06:11:29.405Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-13T06:11:29.956Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-13T06:11:29.979Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-13T06:11:30.026Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-13T06:11:30.029Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-13T06:11:30.030Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-13T06:11:30.031Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-13T06:11:30.034Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-13T06:11:30.034Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-13T06:11:30.034Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-13T06:11:30.034Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-13T06:11:30.035Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-13T06:11:30.039Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-13T06:11:30.042Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-13T06:11:54.389Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-13T06:11:54.844Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-13T06:11:54.874Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-13T06:11:54.923Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-13T06:11:54.929Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-13T06:11:54.930Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-13T06:11:54.935Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-13T06:11:54.935Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-13T06:11:54.936Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-13T06:11:54.936Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-13T06:11:54.937Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-13T06:11:54.941Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-13T06:11:54.944Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-13T06:11:54.949Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-13T06:13:04.972Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-13T06:13:05.277Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-13T06:13:05.297Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-13T06:13:05.326Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-13T06:13:05.327Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-13T06:13:05.328Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-13T06:13:05.328Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-13T06:13:05.330Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-13T06:13:05.331Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-13T06:13:05.331Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-13T06:13:05.331Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-13T06:13:05.331Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-13T06:13:05.333Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-13T06:13:05.336Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-13T06:17:15.792Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-13T06:17:16.248Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-13T06:17:16.268Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-13T06:17:16.298Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-13T06:17:16.300Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-13T06:17:16.301Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-13T06:17:16.301Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-13T06:17:16.303Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-13T06:17:16.304Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-13T06:17:16.304Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-13T06:17:16.304Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-13T06:17:16.304Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-13T06:17:16.306Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-13T06:17:16.310Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (ZZhdFX2ZGtxmopmkAAAC)","timestamp":"2026-08-13T06:17:16.355Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (TN0oThEIMrJqGvUUAAAD)","timestamp":"2026-08-13T06:17:16.363Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (tUaByKoG_JpHXzsCAAAF)","timestamp":"2026-08-13T06:17:17.017Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (FC2U3E39L0Ktqj8IAAAI)","timestamp":"2026-08-13T06:17:18.170Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (LfiBxwTL9nAtB6n4AAAJ)","timestamp":"2026-08-13T06:17:18.174Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (g3AkIN4MTi_BZrENAAAL)","timestamp":"2026-08-13T06:17:18.971Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-13T06:19:39.605Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-13T06:19:39.980Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-13T06:19:40.023Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-13T06:19:40.060Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-13T06:19:40.064Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-13T06:19:40.065Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-13T06:19:40.066Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-13T06:19:40.069Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-13T06:19:40.070Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-13T06:19:40.070Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-13T06:19:40.070Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-13T06:19:40.070Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-13T06:19:40.072Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-13T06:19:40.077Z"}
{"level":"error","message":"[Error] Invalid email or password","method":"POST","path":"/api/auth/login","stack":"Error: Invalid email or password\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.login (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:273:11)\n    at async /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:110:3","timestamp":"2026-08-13T06:19:40.276Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-13T06:19:47.463Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T06:30:00.406Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T06:30:00.408Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T06:30:00.434Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T06:30:00.438Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-13T06:30:10.780Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-13T06:30:11.243Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-13T06:30:11.273Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-13T06:30:11.307Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-13T06:30:11.311Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-13T06:30:11.312Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-13T06:30:11.315Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-13T06:30:11.317Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-13T06:30:11.318Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-13T06:30:11.320Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-13T06:30:11.321Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-13T06:30:11.321Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-13T06:30:11.321Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-13T06:30:11.321Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (5GhubMiNWKSJZQnHAAAI)","timestamp":"2026-08-13T06:30:11.387Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (SgrNCcgSU4PW_9X8AAAJ)","timestamp":"2026-08-13T06:30:11.398Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (ueHxgzYu4UNU_R5tAAAK)","timestamp":"2026-08-13T06:30:11.402Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (GLzTROtSZV8jL9QHAAAL)","timestamp":"2026-08-13T06:30:11.406Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (HaNJ-36Rd1WAwJYqAAAM)","timestamp":"2026-08-13T06:30:11.409Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (EypAsl6oB6tAmhOlAAAN)","timestamp":"2026-08-13T06:30:11.413Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (W5OAVdvb_dbTK9cRAAAO)","timestamp":"2026-08-13T06:30:11.416Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (MNUSEXiKnmw2_PPKAAAP)","timestamp":"2026-08-13T06:30:11.420Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (H64-phqrplSyUCNYAAAS)","timestamp":"2026-08-13T06:30:12.292Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (sz9sFQV-CdyCXcQ1AAAT)","timestamp":"2026-08-13T06:30:12.297Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (PfxaTXUQyNsuZdIoAAAV)","timestamp":"2026-08-13T06:30:12.317Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (_0TlVE5fydj1jzidAAAZ)","timestamp":"2026-08-13T06:30:12.638Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Kx0vOCtMzgiffcTmAAAa)","timestamp":"2026-08-13T06:30:12.646Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 connected (PyFcEpdc-oX8HMjXAAAc)","timestamp":"2026-08-13T06:30:12.937Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Kx0vOCtMzgiffcTmAAAa)","timestamp":"2026-08-13T06:30:13.059Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (_0TlVE5fydj1jzidAAAZ)","timestamp":"2026-08-13T06:30:13.060Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (vpto0jA7bT1i8VQzAAAf)","timestamp":"2026-08-13T06:30:13.383Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (R2gwBV5uoR4_guaiAAAg)","timestamp":"2026-08-13T06:30:13.388Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (sRp-Q3gGy5eOWGIUAAAi)","timestamp":"2026-08-13T06:30:14.699Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (HaNJ-36Rd1WAwJYqAAAM)","timestamp":"2026-08-13T06:30:56.353Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (W5OAVdvb_dbTK9cRAAAO)","timestamp":"2026-08-13T06:30:56.356Z"}
{"level":"info","message":"[Socket.IO] User cmsr3ckda0044sh6hpaich1n1 disconnected (PyFcEpdc-oX8HMjXAAAc)","timestamp":"2026-08-13T06:30:57.910Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (AJO9zD0aWT996on6AAAm)","timestamp":"2026-08-13T06:31:24.299Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (C1gUH2PqhSX3ePURAAAn)","timestamp":"2026-08-13T06:31:24.304Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (C1gUH2PqhSX3ePURAAAn)","timestamp":"2026-08-13T06:31:24.448Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (AJO9zD0aWT996on6AAAm)","timestamp":"2026-08-13T06:31:24.450Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (MVWCQiTlAFpD8rvEAAAq)","timestamp":"2026-08-13T06:31:24.558Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (6uaGABYUDM3qTF0fAAAr)","timestamp":"2026-08-13T06:31:24.562Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (hb_5qxWhLtNAdqNUAAAv)","timestamp":"2026-08-13T06:31:43.630Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (FKaklE0MjIsVrWU3AAAw)","timestamp":"2026-08-13T06:31:43.634Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (FKaklE0MjIsVrWU3AAAw)","timestamp":"2026-08-13T06:31:43.804Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (hb_5qxWhLtNAdqNUAAAv)","timestamp":"2026-08-13T06:31:43.811Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (4F2_vzRruhL0PaM5AAAz)","timestamp":"2026-08-13T06:31:43.848Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (j_Ocu3dTNvNJ4sOlAAA0)","timestamp":"2026-08-13T06:31:43.862Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (5GhubMiNWKSJZQnHAAAI)","timestamp":"2026-08-13T06:31:46.441Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (GLzTROtSZV8jL9QHAAAL)","timestamp":"2026-08-13T06:31:46.445Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (MVWCQiTlAFpD8rvEAAAq)","timestamp":"2026-08-13T06:32:09.521Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (6uaGABYUDM3qTF0fAAAr)","timestamp":"2026-08-13T06:32:09.522Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (EypAsl6oB6tAmhOlAAAN)","timestamp":"2026-08-13T06:33:01.720Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (PfxaTXUQyNsuZdIoAAAV)","timestamp":"2026-08-13T06:33:02.500Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (TOjpUOST_D7kWA2pAAA4)","timestamp":"2026-08-13T06:36:05.206Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (L5rV9BgPUPEEAdmEAAA5)","timestamp":"2026-08-13T06:36:05.212Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (L5rV9BgPUPEEAdmEAAA5)","timestamp":"2026-08-13T06:36:05.329Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (TOjpUOST_D7kWA2pAAA4)","timestamp":"2026-08-13T06:36:05.331Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (W6v4Ec-A3ukRadTBAAA8)","timestamp":"2026-08-13T06:36:05.390Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (GeCQbrF61xe8rgVVAAA9)","timestamp":"2026-08-13T06:36:05.394Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (YEPoTAh-qlmogIKoAABB)","timestamp":"2026-08-13T06:36:23.984Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (QZ-7tAsfvn1wkZOcAABC)","timestamp":"2026-08-13T06:36:23.990Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (YEPoTAh-qlmogIKoAABB)","timestamp":"2026-08-13T06:36:24.141Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (QZ-7tAsfvn1wkZOcAABC)","timestamp":"2026-08-13T06:36:24.155Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (PRfPy8KDpMI3bSCKAABF)","timestamp":"2026-08-13T06:36:24.182Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (_W66fFq0tV5cjkV-AABG)","timestamp":"2026-08-13T06:36:24.199Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (4F2_vzRruhL0PaM5AAAz)","timestamp":"2026-08-13T06:36:39.172Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (j_Ocu3dTNvNJ4sOlAAA0)","timestamp":"2026-08-13T06:36:39.175Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (W6v4Ec-A3ukRadTBAAA8)","timestamp":"2026-08-13T06:36:50.333Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (GeCQbrF61xe8rgVVAAA9)","timestamp":"2026-08-13T06:36:50.347Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (_hknC6aqOMPKF6eYAABK)","timestamp":"2026-08-13T06:36:53.185Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (_IvxuiOb83eI47IIAABL)","timestamp":"2026-08-13T06:36:53.191Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (_IvxuiOb83eI47IIAABL)","timestamp":"2026-08-13T06:36:53.341Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (_hknC6aqOMPKF6eYAABK)","timestamp":"2026-08-13T06:36:53.342Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (UNev6qMODfYmqjgxAABO)","timestamp":"2026-08-13T06:36:53.396Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Fh-dGdeueB6xK3ixAABP)","timestamp":"2026-08-13T06:36:53.439Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (PRfPy8KDpMI3bSCKAABF)","timestamp":"2026-08-13T06:37:34.181Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (_W66fFq0tV5cjkV-AABG)","timestamp":"2026-08-13T06:37:34.183Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (sRp-Q3gGy5eOWGIUAAAi)","timestamp":"2026-08-13T06:38:08.403Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (VWSEbYLDfCM7_k9CAABR)","timestamp":"2026-08-13T06:38:10.495Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (e0rfqOEfS67iEzvBAABV)","timestamp":"2026-08-13T06:38:32.031Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (KSiZjQVPAoaZ3P-YAABW)","timestamp":"2026-08-13T06:38:32.041Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (KSiZjQVPAoaZ3P-YAABW)","timestamp":"2026-08-13T06:38:32.150Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (e0rfqOEfS67iEzvBAABV)","timestamp":"2026-08-13T06:38:32.154Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (1H28LBeVVz-emQHaAABZ)","timestamp":"2026-08-13T06:38:32.245Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (i5KeRFhj561UqxQFAABa)","timestamp":"2026-08-13T06:38:32.251Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (UNev6qMODfYmqjgxAABO)","timestamp":"2026-08-13T06:38:53.462Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Fh-dGdeueB6xK3ixAABP)","timestamp":"2026-08-13T06:38:53.530Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (hkR_ABL2e5QfWevMAABc)","timestamp":"2026-08-13T06:39:12.658Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (hkR_ABL2e5QfWevMAABc)","timestamp":"2026-08-13T06:39:18.567Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (biL8nIaZ0qFvKo4lAABg)","timestamp":"2026-08-13T06:39:27.826Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (nIB5kSmV5jJX2FENAABh)","timestamp":"2026-08-13T06:39:27.832Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (nIB5kSmV5jJX2FENAABh)","timestamp":"2026-08-13T06:39:27.877Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (biL8nIaZ0qFvKo4lAABg)","timestamp":"2026-08-13T06:39:27.878Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (KSbv4-C9O7BdWx_6AABk)","timestamp":"2026-08-13T06:39:27.897Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (hZ6L790Z0SDzPmRgAABl)","timestamp":"2026-08-13T06:39:27.903Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 connected (isujOiJM_sxMhcxlAABn)","timestamp":"2026-08-13T06:39:28.888Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (isujOiJM_sxMhcxlAABn)","timestamp":"2026-08-13T06:39:33.527Z"}
{"level":"info","message":"[Socket.IO] User cmsr12ib70008sh6hdm5e51g7 disconnected (VWSEbYLDfCM7_k9CAABR)","timestamp":"2026-08-13T06:39:33.528Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (wQgYtVhBUZs35GlgAABp)","timestamp":"2026-08-13T06:39:42.976Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (wQgYtVhBUZs35GlgAABp)","timestamp":"2026-08-13T06:39:46.828Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (MNUSEXiKnmw2_PPKAAAP)","timestamp":"2026-08-13T06:39:46.829Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (1H28LBeVVz-emQHaAABZ)","timestamp":"2026-08-13T06:40:07.195Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (i5KeRFhj561UqxQFAABa)","timestamp":"2026-08-13T06:40:07.196Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (a2uq43Tyw7CYqhIzAABt)","timestamp":"2026-08-13T06:44:08.008Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (B0ja3rDss7DfYFNwAABu)","timestamp":"2026-08-13T06:44:08.017Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (B0ja3rDss7DfYFNwAABu)","timestamp":"2026-08-13T06:44:08.077Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (a2uq43Tyw7CYqhIzAABt)","timestamp":"2026-08-13T06:44:08.078Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (DuNNnvAj1cdSfVsXAABx)","timestamp":"2026-08-13T06:44:08.134Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (AeIva3ec6AyyfXXFAABy)","timestamp":"2026-08-13T06:44:08.138Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (IIwInnyFqmC-_9JGAAB2)","timestamp":"2026-08-13T06:44:12.398Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (fCoK4VIcIEyUvIP3AAB3)","timestamp":"2026-08-13T06:44:12.411Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (fCoK4VIcIEyUvIP3AAB3)","timestamp":"2026-08-13T06:44:12.552Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (IIwInnyFqmC-_9JGAAB2)","timestamp":"2026-08-13T06:44:12.555Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Q1LNKBSiQdZ95rM-AAB6)","timestamp":"2026-08-13T06:44:12.869Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (hFe3FYui4hia-U6RAAB7)","timestamp":"2026-08-13T06:44:12.874Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (vpto0jA7bT1i8VQzAAAf)","timestamp":"2026-08-13T06:44:43.955Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (R2gwBV5uoR4_guaiAAAg)","timestamp":"2026-08-13T06:44:43.975Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (KSbv4-C9O7BdWx_6AABk)","timestamp":"2026-08-13T06:44:48.157Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (hZ6L790Z0SDzPmRgAABl)","timestamp":"2026-08-13T06:44:48.157Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (IbG-XEloxPjuD5JeAAB_)","timestamp":"2026-08-13T06:47:11.086Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (yX-uyMxNqBq0k729AACA)","timestamp":"2026-08-13T06:47:11.090Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (IbG-XEloxPjuD5JeAAB_)","timestamp":"2026-08-13T06:47:11.370Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (yX-uyMxNqBq0k729AACA)","timestamp":"2026-08-13T06:47:11.512Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (SEs3N0D5tXCVQgx3AACD)","timestamp":"2026-08-13T06:47:11.518Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (wRPfQtvh-NezAXGQAACE)","timestamp":"2026-08-13T06:47:11.523Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (DuNNnvAj1cdSfVsXAABx)","timestamp":"2026-08-13T06:47:48.373Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (AeIva3ec6AyyfXXFAABy)","timestamp":"2026-08-13T06:47:48.377Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-13T06:49:49.592Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Q5VGcfC-jMgBsF6rAACG)","timestamp":"2026-08-13T06:49:49.634Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (v_ythi6oAsj1wwvGAACI)","timestamp":"2026-08-13T06:49:49.719Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (j7hFT4mGdkqkLEAzAACM)","timestamp":"2026-08-13T06:57:08.893Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (L2567il0dnTglS9AAACN)","timestamp":"2026-08-13T06:57:08.898Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (L2567il0dnTglS9AAACN)","timestamp":"2026-08-13T06:57:09.054Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (j7hFT4mGdkqkLEAzAACM)","timestamp":"2026-08-13T06:57:09.057Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (bW9TVf5OM_pDTUa3AACQ)","timestamp":"2026-08-13T06:57:09.113Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (x0ihV9zA4D2-u778AACR)","timestamp":"2026-08-13T06:57:09.117Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (SEs3N0D5tXCVQgx3AACD)","timestamp":"2026-08-13T06:57:31.831Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (wRPfQtvh-NezAXGQAACE)","timestamp":"2026-08-13T06:57:31.833Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (G2etRbo9o3p6Cx51AACV)","timestamp":"2026-08-13T06:57:40.609Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (p0G5s4O9R4UjecjDAACW)","timestamp":"2026-08-13T06:57:40.613Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (p0G5s4O9R4UjecjDAACW)","timestamp":"2026-08-13T06:57:40.751Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (G2etRbo9o3p6Cx51AACV)","timestamp":"2026-08-13T06:57:40.753Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (se2LWVz1EcQHYxa1AACZ)","timestamp":"2026-08-13T06:57:40.833Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (nn7WeQuSfE9bXViSAACa)","timestamp":"2026-08-13T06:57:40.841Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (bW9TVf5OM_pDTUa3AACQ)","timestamp":"2026-08-13T06:58:19.108Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (x0ihV9zA4D2-u778AACR)","timestamp":"2026-08-13T06:58:19.112Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (PZC0suO-luh4q3PyAACe)","timestamp":"2026-08-13T07:07:28.955Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (9fj4caTS8VVnzMVVAACf)","timestamp":"2026-08-13T07:07:28.959Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (9fj4caTS8VVnzMVVAACf)","timestamp":"2026-08-13T07:07:29.023Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (PZC0suO-luh4q3PyAACe)","timestamp":"2026-08-13T07:07:29.024Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (VS6WZu6pBV_9Knv2AACi)","timestamp":"2026-08-13T07:07:29.041Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (3sySpQxGngW_-8EjAACj)","timestamp":"2026-08-13T07:07:29.061Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (h8Qa2Soi2WHhNO3NAACn)","timestamp":"2026-08-13T07:07:30.909Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (VicwkCDWv3WlA06LAACo)","timestamp":"2026-08-13T07:07:30.912Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (h8Qa2Soi2WHhNO3NAACn)","timestamp":"2026-08-13T07:07:30.940Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (VicwkCDWv3WlA06LAACo)","timestamp":"2026-08-13T07:07:30.942Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (H3EUch4iDxY12ke8AACr)","timestamp":"2026-08-13T07:07:31.018Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (x1qxG1ikCkPBLW8YAACs)","timestamp":"2026-08-13T07:07:31.026Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (O-0fkQ1QR4u1DNqBAACw)","timestamp":"2026-08-13T07:07:45.502Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (FiUGwnsxYwnRnOqbAACx)","timestamp":"2026-08-13T07:07:45.506Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (FiUGwnsxYwnRnOqbAACx)","timestamp":"2026-08-13T07:07:45.584Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (O-0fkQ1QR4u1DNqBAACw)","timestamp":"2026-08-13T07:07:45.593Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (t09f4o6Y7QrUMmjCAAC0)","timestamp":"2026-08-13T07:07:45.610Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (4f_gAWU43DplrcZYAAC1)","timestamp":"2026-08-13T07:07:45.614Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (4jjA0NyfqzjWHf3_AAC5)","timestamp":"2026-08-13T07:07:46.815Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (BNIBurlVNunVAW5eAAC6)","timestamp":"2026-08-13T07:07:46.820Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (4jjA0NyfqzjWHf3_AAC5)","timestamp":"2026-08-13T07:07:46.843Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (BNIBurlVNunVAW5eAAC6)","timestamp":"2026-08-13T07:07:46.844Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (uYjQbWPDe6PEa8UOAAC9)","timestamp":"2026-08-13T07:07:46.870Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (hvbCKfR51ro3NhqGAAC-)","timestamp":"2026-08-13T07:07:46.874Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (nn7WeQuSfE9bXViSAACa)","timestamp":"2026-08-13T07:08:01.406Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (se2LWVz1EcQHYxa1AACZ)","timestamp":"2026-08-13T07:08:01.411Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (VS6WZu6pBV_9Knv2AACi)","timestamp":"2026-08-13T07:08:14.027Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (3sySpQxGngW_-8EjAACj)","timestamp":"2026-08-13T07:08:14.028Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (H3EUch4iDxY12ke8AACr)","timestamp":"2026-08-13T07:08:15.937Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (x1qxG1ikCkPBLW8YAACs)","timestamp":"2026-08-13T07:08:15.939Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (4f_gAWU43DplrcZYAAC1)","timestamp":"2026-08-13T07:08:30.587Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (t09f4o6Y7QrUMmjCAAC0)","timestamp":"2026-08-13T07:08:30.589Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (vejOTrv7UDL5hU_4AADC)","timestamp":"2026-08-13T07:09:05.604Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (tx-3K_9ie0iFEc6CAADD)","timestamp":"2026-08-13T07:09:05.609Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (tx-3K_9ie0iFEc6CAADD)","timestamp":"2026-08-13T07:09:05.664Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (vejOTrv7UDL5hU_4AADC)","timestamp":"2026-08-13T07:09:05.664Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (VD3Aq9GvSdAqggUqAADG)","timestamp":"2026-08-13T07:09:05.680Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (yY8xRlTIMZ40TfZEAADH)","timestamp":"2026-08-13T07:09:05.684Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (xBKyRZZWWvVVxejoAADL)","timestamp":"2026-08-13T07:09:09.874Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (dSYrlWLtJZ7B04PiAADM)","timestamp":"2026-08-13T07:09:09.884Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (xBKyRZZWWvVVxejoAADL)","timestamp":"2026-08-13T07:09:09.985Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (dSYrlWLtJZ7B04PiAADM)","timestamp":"2026-08-13T07:09:10.176Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (zt0enQ3OqnFYHNysAADP)","timestamp":"2026-08-13T07:09:10.244Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (esXV_o_FOrpYV9-uAADQ)","timestamp":"2026-08-13T07:09:10.252Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (SgrNCcgSU4PW_9X8AAAJ)","timestamp":"2026-08-13T07:09:18.927Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (ueHxgzYu4UNU_R5tAAAK)","timestamp":"2026-08-13T07:09:18.927Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (hFe3FYui4hia-U6RAAB7)","timestamp":"2026-08-13T07:09:34.808Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Q1LNKBSiQdZ95rM-AAB6)","timestamp":"2026-08-13T07:09:34.818Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (hvbCKfR51ro3NhqGAAC-)","timestamp":"2026-08-13T07:09:46.944Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (uYjQbWPDe6PEa8UOAAC9)","timestamp":"2026-08-13T07:09:46.947Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (h3vrZGPRp-PmitbDAADU)","timestamp":"2026-08-13T07:13:23.622Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (emph4c7gOB8Ea8tBAADV)","timestamp":"2026-08-13T07:13:23.625Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (emph4c7gOB8Ea8tBAADV)","timestamp":"2026-08-13T07:13:23.735Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (h3vrZGPRp-PmitbDAADU)","timestamp":"2026-08-13T07:13:23.743Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (STykEJnxp2Z-VoczAADY)","timestamp":"2026-08-13T07:13:23.994Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (gm6FYGNxHFYrP9aVAADZ)","timestamp":"2026-08-13T07:13:23.999Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (zt0enQ3OqnFYHNysAADP)","timestamp":"2026-08-13T07:14:05.232Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (esXV_o_FOrpYV9-uAADQ)","timestamp":"2026-08-13T07:14:05.235Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (npA_PxJbfcAG1ZG_AADd)","timestamp":"2026-08-13T07:15:21.894Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (13Z8qyL_V-HfzSK7AADe)","timestamp":"2026-08-13T07:15:21.906Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (npA_PxJbfcAG1ZG_AADd)","timestamp":"2026-08-13T07:15:22.066Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (13Z8qyL_V-HfzSK7AADe)","timestamp":"2026-08-13T07:15:22.094Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Yc_ztq09qU5cCWUBAADh)","timestamp":"2026-08-13T07:15:22.178Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (J2T51ZQb1o4O7nUyAADi)","timestamp":"2026-08-13T07:15:22.182Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (gm6FYGNxHFYrP9aVAADZ)","timestamp":"2026-08-13T07:15:48.842Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (STykEJnxp2Z-VoczAADY)","timestamp":"2026-08-13T07:15:48.847Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (tegP7O7KZ1ACKOqyAADm)","timestamp":"2026-08-13T07:19:34.421Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (g65hu2LNPSKEF2EXAADn)","timestamp":"2026-08-13T07:19:34.437Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (tegP7O7KZ1ACKOqyAADm)","timestamp":"2026-08-13T07:19:34.543Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (g65hu2LNPSKEF2EXAADn)","timestamp":"2026-08-13T07:19:34.608Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (0tBRpr8MmKskkld_AADq)","timestamp":"2026-08-13T07:19:34.679Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (yjGvQKVj76QTUW0DAADr)","timestamp":"2026-08-13T07:19:34.683Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Yc_ztq09qU5cCWUBAADh)","timestamp":"2026-08-13T07:20:17.396Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (J2T51ZQb1o4O7nUyAADi)","timestamp":"2026-08-13T07:20:17.397Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (7uB7WbuodaVFZGNVAADv)","timestamp":"2026-08-13T07:23:55.732Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (GOt_w2WYSPj3ih_BAADw)","timestamp":"2026-08-13T07:23:55.739Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (0tBRpr8MmKskkld_AADq)","timestamp":"2026-08-13T07:24:29.812Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (yjGvQKVj76QTUW0DAADr)","timestamp":"2026-08-13T07:24:29.813Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T07:30:00.189Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T07:30:00.199Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T07:30:00.231Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T07:30:00.237Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (65OlIm8eCN2uJfPPAAD0)","timestamp":"2026-08-13T07:30:04.310Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (fp50vMHKl-PvE2H0AAD1)","timestamp":"2026-08-13T07:30:04.351Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (fp50vMHKl-PvE2H0AAD1)","timestamp":"2026-08-13T07:30:04.558Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (65OlIm8eCN2uJfPPAAD0)","timestamp":"2026-08-13T07:30:04.579Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (6u4ahiTPj5oF6cLnAAD4)","timestamp":"2026-08-13T07:30:04.876Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (MzbXlmQEirNbGKiOAAD5)","timestamp":"2026-08-13T07:30:04.879Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (7uB7WbuodaVFZGNVAADv)","timestamp":"2026-08-13T07:30:31.032Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (GOt_w2WYSPj3ih_BAADw)","timestamp":"2026-08-13T07:30:31.035Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Kl6sRKtYPKxBTcTpAAD9)","timestamp":"2026-08-13T07:37:47.121Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Wwp_MWndJAFEY7p3AAD-)","timestamp":"2026-08-13T07:37:47.126Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Wwp_MWndJAFEY7p3AAD-)","timestamp":"2026-08-13T07:37:47.229Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Kl6sRKtYPKxBTcTpAAD9)","timestamp":"2026-08-13T07:37:47.237Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (B0DG5I2Rv6HU3KANAAEB)","timestamp":"2026-08-13T07:37:47.249Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (_ll9knxrVTxiJpodAAEC)","timestamp":"2026-08-13T07:37:47.260Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (6u4ahiTPj5oF6cLnAAD4)","timestamp":"2026-08-13T07:38:20.149Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (MzbXlmQEirNbGKiOAAD5)","timestamp":"2026-08-13T07:38:20.151Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (FFfnMd5yFzSjX9clAAEF)","timestamp":"2026-08-13T07:46:34.931Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (15TeQrp4a0p6B9YpAAEG)","timestamp":"2026-08-13T07:46:34.935Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (FFfnMd5yFzSjX9clAAEF)","timestamp":"2026-08-13T07:46:34.998Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (15TeQrp4a0p6B9YpAAEG)","timestamp":"2026-08-13T07:46:35.005Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (_IBTxGjQYdkHFy2NAAEJ)","timestamp":"2026-08-13T07:46:35.026Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (-kKvrjHO6OE_v-P2AAEK)","timestamp":"2026-08-13T07:46:35.029Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (v_ythi6oAsj1wwvGAACI)","timestamp":"2026-08-13T07:47:17.791Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Q5VGcfC-jMgBsF6rAACG)","timestamp":"2026-08-13T07:47:17.793Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (_IBTxGjQYdkHFy2NAAEJ)","timestamp":"2026-08-13T07:47:19.450Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (kCAfax1yhTNtBNfTAAEO)","timestamp":"2026-08-13T07:47:27.843Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (QzPCafzZMPITjHXVAAEP)","timestamp":"2026-08-13T07:47:27.850Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (kCAfax1yhTNtBNfTAAEO)","timestamp":"2026-08-13T07:47:27.944Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (QzPCafzZMPITjHXVAAEP)","timestamp":"2026-08-13T07:47:27.950Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (8_r6zgOP95zfikz7AAES)","timestamp":"2026-08-13T07:47:28.005Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (TDQ46BUTkt0XArxKAAET)","timestamp":"2026-08-13T07:47:28.009Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (_ll9knxrVTxiJpodAAEC)","timestamp":"2026-08-13T07:48:07.864Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (B0DG5I2Rv6HU3KANAAEB)","timestamp":"2026-08-13T07:48:07.871Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (H2Zh69ItH5dyQWaqAAEX)","timestamp":"2026-08-13T07:51:10.908Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (3Fo2b5BbhLrzXOCbAAEY)","timestamp":"2026-08-13T07:51:10.920Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (3Fo2b5BbhLrzXOCbAAEY)","timestamp":"2026-08-13T07:51:11.049Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (H2Zh69ItH5dyQWaqAAEX)","timestamp":"2026-08-13T07:51:11.051Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (h0kAvH5FMZNj5UrEAAEb)","timestamp":"2026-08-13T07:51:11.107Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (crYnh2mkdG9SSpEYAAEc)","timestamp":"2026-08-13T07:51:11.114Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (8_r6zgOP95zfikz7AAES)","timestamp":"2026-08-13T07:51:33.120Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (TDQ46BUTkt0XArxKAAET)","timestamp":"2026-08-13T07:51:33.123Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (zSzd0AdsIIb-LcF3AAEg)","timestamp":"2026-08-13T07:52:50.595Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (s4RIBIiqITzSkgNDAAEh)","timestamp":"2026-08-13T07:52:50.601Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (s4RIBIiqITzSkgNDAAEh)","timestamp":"2026-08-13T07:52:50.688Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (zSzd0AdsIIb-LcF3AAEg)","timestamp":"2026-08-13T07:52:50.711Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (ls0UwE1Dvgzo_1gvAAEk)","timestamp":"2026-08-13T07:52:50.795Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (56dGmSsu_Ffr5yKvAAEl)","timestamp":"2026-08-13T07:52:50.856Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (h0kAvH5FMZNj5UrEAAEb)","timestamp":"2026-08-13T07:53:11.162Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (crYnh2mkdG9SSpEYAAEc)","timestamp":"2026-08-13T07:53:11.168Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (gkDrr8pf_FUySVdoAAEp)","timestamp":"2026-08-13T07:54:52.102Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (INzYxZPQpzXl_KF_AAEq)","timestamp":"2026-08-13T07:54:52.106Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (INzYxZPQpzXl_KF_AAEq)","timestamp":"2026-08-13T07:54:52.266Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (gkDrr8pf_FUySVdoAAEp)","timestamp":"2026-08-13T07:54:52.268Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (-noq2h-9sA87prHcAAEt)","timestamp":"2026-08-13T07:54:52.312Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (szKE8txo77liO_zmAAEu)","timestamp":"2026-08-13T07:54:52.316Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (ls0UwE1Dvgzo_1gvAAEk)","timestamp":"2026-08-13T07:55:15.956Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (56dGmSsu_Ffr5yKvAAEl)","timestamp":"2026-08-13T07:55:15.958Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (N-ymo432HZ4VJgiSAAEy)","timestamp":"2026-08-13T07:56:10.193Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (GN51ZaVKovFKePxWAAEz)","timestamp":"2026-08-13T07:56:10.199Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (GN51ZaVKovFKePxWAAEz)","timestamp":"2026-08-13T07:56:10.287Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (N-ymo432HZ4VJgiSAAEy)","timestamp":"2026-08-13T07:56:10.288Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (2q354dbMJq7YgyA3AAE2)","timestamp":"2026-08-13T07:56:10.377Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (BkbGp0BFAukJrk1TAAE3)","timestamp":"2026-08-13T07:56:10.380Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (-noq2h-9sA87prHcAAEt)","timestamp":"2026-08-13T07:56:52.335Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (szKE8txo77liO_zmAAEu)","timestamp":"2026-08-13T07:56:52.337Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Ob9wuTP2EMoJQaCgAAE7)","timestamp":"2026-08-13T07:58:02.413Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (bybZXPs1ZP8-keTdAAE8)","timestamp":"2026-08-13T07:58:02.419Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (bybZXPs1ZP8-keTdAAE8)","timestamp":"2026-08-13T07:58:02.512Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Ob9wuTP2EMoJQaCgAAE7)","timestamp":"2026-08-13T07:58:02.514Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (LnomrkTmXQtac_oOAAE_)","timestamp":"2026-08-13T07:58:02.588Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (-rI_yFCHQPMNg_BGAAFA)","timestamp":"2026-08-13T07:58:02.595Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (2q354dbMJq7YgyA3AAE2)","timestamp":"2026-08-13T07:58:35.455Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (BkbGp0BFAukJrk1TAAE3)","timestamp":"2026-08-13T07:58:35.457Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (wmBz7M9Not18MOzWAAFE)","timestamp":"2026-08-13T07:59:40.332Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (U0lk-xZl8cqis81FAAFF)","timestamp":"2026-08-13T07:59:40.336Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (U0lk-xZl8cqis81FAAFF)","timestamp":"2026-08-13T07:59:40.432Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (wmBz7M9Not18MOzWAAFE)","timestamp":"2026-08-13T07:59:40.434Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (KIUl2tVzbt_pCYZVAAFI)","timestamp":"2026-08-13T07:59:40.450Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (0iKPKzELJSV8ddlTAAFJ)","timestamp":"2026-08-13T07:59:40.458Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (LnomrkTmXQtac_oOAAE_)","timestamp":"2026-08-13T08:00:02.608Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (-rI_yFCHQPMNg_BGAAFA)","timestamp":"2026-08-13T08:00:02.622Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (-kKvrjHO6OE_v-P2AAEK)","timestamp":"2026-08-13T08:01:07.335Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (H64-phqrplSyUCNYAAAS)","timestamp":"2026-08-13T08:11:28.959Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (sz9sFQV-CdyCXcQ1AAAT)","timestamp":"2026-08-13T08:11:28.960Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (yY8xRlTIMZ40TfZEAADH)","timestamp":"2026-08-13T08:11:34.884Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (VD3Aq9GvSdAqggUqAADG)","timestamp":"2026-08-13T08:11:34.885Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (KIUl2tVzbt_pCYZVAAFI)","timestamp":"2026-08-13T08:11:41.016Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (0iKPKzELJSV8ddlTAAFJ)","timestamp":"2026-08-13T08:11:41.017Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T08:30:00.275Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T08:30:00.276Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T08:30:00.315Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T08:30:00.319Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-13T08:59:41.318Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-13T08:59:41.738Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-13T08:59:41.756Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-13T08:59:41.794Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-13T08:59:41.797Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-13T08:59:41.797Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-13T08:59:41.800Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-13T08:59:41.800Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-13T08:59:41.800Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-13T08:59:41.800Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-13T08:59:41.800Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-13T08:59:41.802Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-13T08:59:41.803Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-13T08:59:41.805Z"}
{"level":"error","message":"[Error] Refresh token is required","method":"POST","path":"/api/auth/refresh","stack":"Error: Refresh token is required\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.refresh (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:333:11)\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:138:25\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/utils/asyncHandler.js:6:19\n    at Layer.handle [as handle_request] (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/layer.js:95:5)\n    at next (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/route.js:149:13)\n    at Route.dispatch (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/route.js:119:3)\n    at Layer.handle [as handle_request] (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/layer.js:95:5)\n    at /home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/index.js:284:15\n    at Function.process_params (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/index.js:346:12)\n    at next (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/index.js:280:10)\n    at Function.handle (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/index.js:175:3)\n    at router (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/index.js:47:12)\n    at Layer.handle [as handle_request] (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/layer.js:95:5)\n    at trim_prefix (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/index.js:328:13)\n    at /home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/index.js:286:9","timestamp":"2026-08-13T09:03:24.884Z"}
{"level":"error","message":"[Error] Refresh token is required","method":"POST","path":"/api/auth/refresh","stack":"Error: Refresh token is required\n    at createError (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/errorHandler.js:87:15)\n    at Object.refresh (/home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.service.js:333:11)\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/modules/auth/auth.controller.js:138:25\n    at /home/hiplstaging2/public_html/pms-pro/Backend/src/utils/asyncHandler.js:6:19\n    at Layer.handle [as handle_request] (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/layer.js:95:5)\n    at next (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/route.js:149:13)\n    at Route.dispatch (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/route.js:119:3)\n    at Layer.handle [as handle_request] (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/layer.js:95:5)\n    at /home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/index.js:284:15\n    at Function.process_params (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/index.js:346:12)\n    at next (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/index.js:280:10)\n    at Function.handle (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/index.js:175:3)\n    at router (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/index.js:47:12)\n    at Layer.handle [as handle_request] (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/layer.js:95:5)\n    at trim_prefix (/home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/index.js:328:13)\n    at /home/hiplstaging2/public_html/pms-pro/Backend/node_modules/express/lib/router/index.js:286:9","timestamp":"2026-08-13T09:03:25.334Z"}
{"level":"info","message":"[Auth] User logged in: admin@pms.com (IP: 122.162.240.56)","timestamp":"2026-08-13T09:03:27.536Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (_xfzrwuQ5QzsAkMvAAAO)","timestamp":"2026-08-13T09:03:27.590Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (mx2WRWL9qjXK0-C3AAAR)","timestamp":"2026-08-13T09:03:27.880Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (Odg6bpTTaNswfMZWAAAT)","timestamp":"2026-08-13T09:05:34.109Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (NMyILSTIIlle2V_9AAAX)","timestamp":"2026-08-13T09:07:22.296Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (v9cP30cKdc9iPv6YAAAY)","timestamp":"2026-08-13T09:07:22.330Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (NMyILSTIIlle2V_9AAAX)","timestamp":"2026-08-13T09:07:22.394Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (v9cP30cKdc9iPv6YAAAY)","timestamp":"2026-08-13T09:07:22.434Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (kA3pSjCd4NeowEkRAAAb)","timestamp":"2026-08-13T09:07:22.450Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (w7qK1OhYoMaH2LGlAAAc)","timestamp":"2026-08-13T09:07:22.482Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (xePKZLpTLhJ_Cwg1AAAg)","timestamp":"2026-08-13T09:07:24.162Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (eoBa6KuEaf19Z64gAAAh)","timestamp":"2026-08-13T09:07:24.166Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (xePKZLpTLhJ_Cwg1AAAg)","timestamp":"2026-08-13T09:07:24.224Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (eoBa6KuEaf19Z64gAAAh)","timestamp":"2026-08-13T09:07:24.247Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (GguvfI-px_QY6SN1AAAk)","timestamp":"2026-08-13T09:07:24.256Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (fvoPh3899Ylh3NH4AAAl)","timestamp":"2026-08-13T09:07:24.259Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (BpQd_E_UVhlHb0B1AAAp)","timestamp":"2026-08-13T09:07:26.535Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (fTuMuZlpxei4Rf-CAAAq)","timestamp":"2026-08-13T09:07:26.547Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (fTuMuZlpxei4Rf-CAAAq)","timestamp":"2026-08-13T09:07:26.701Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (BpQd_E_UVhlHb0B1AAAp)","timestamp":"2026-08-13T09:07:26.703Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (gmNgAGLqu8UDh35PAAAt)","timestamp":"2026-08-13T09:07:26.744Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (efAHGnRkUw_k53nIAAAu)","timestamp":"2026-08-13T09:07:26.762Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (_xfzrwuQ5QzsAkMvAAAO)","timestamp":"2026-08-13T09:07:57.829Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (mx2WRWL9qjXK0-C3AAAR)","timestamp":"2026-08-13T09:07:58.009Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (kA3pSjCd4NeowEkRAAAb)","timestamp":"2026-08-13T09:08:07.396Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (w7qK1OhYoMaH2LGlAAAc)","timestamp":"2026-08-13T09:08:07.432Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (GguvfI-px_QY6SN1AAAk)","timestamp":"2026-08-13T09:08:09.228Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (fvoPh3899Ylh3NH4AAAl)","timestamp":"2026-08-13T09:08:09.234Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (rE2i47Zo9VLorrBMAAAy)","timestamp":"2026-08-13T09:14:36.040Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (uxCvHbJRDVxWYbU-AAAz)","timestamp":"2026-08-13T09:14:36.044Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (uxCvHbJRDVxWYbU-AAAz)","timestamp":"2026-08-13T09:14:36.181Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (rE2i47Zo9VLorrBMAAAy)","timestamp":"2026-08-13T09:14:36.185Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (zZBEQt9HNHf2Kr7SAAA2)","timestamp":"2026-08-13T09:14:36.292Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (rNj088bENZTgFhh6AAA3)","timestamp":"2026-08-13T09:14:36.294Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (efAHGnRkUw_k53nIAAAu)","timestamp":"2026-08-13T09:15:17.185Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (gmNgAGLqu8UDh35PAAAt)","timestamp":"2026-08-13T09:15:17.188Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (k0SYwqvyVU-EaoDiAAA7)","timestamp":"2026-08-13T09:17:35.196Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (UwyyWDKM_BNpv_QOAAA8)","timestamp":"2026-08-13T09:17:35.200Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (UwyyWDKM_BNpv_QOAAA8)","timestamp":"2026-08-13T09:17:35.351Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (k0SYwqvyVU-EaoDiAAA7)","timestamp":"2026-08-13T09:17:35.353Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (msQvJDIQzk0jCUvnAAA_)","timestamp":"2026-08-13T09:17:35.408Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (oMlUwWCKLDj5iNr6AABA)","timestamp":"2026-08-13T09:17:35.412Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (EpciWCjjqdLLsDPbAABE)","timestamp":"2026-08-13T09:17:49.396Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (8SCPPSugFh5_GNfrAABF)","timestamp":"2026-08-13T09:17:49.399Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (EpciWCjjqdLLsDPbAABE)","timestamp":"2026-08-13T09:17:49.479Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (8SCPPSugFh5_GNfrAABF)","timestamp":"2026-08-13T09:17:49.484Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (YqyCN93fVOlWExkPAABI)","timestamp":"2026-08-13T09:17:49.526Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (YGi5Ha1BFYkC2ZwFAABJ)","timestamp":"2026-08-13T09:17:49.529Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (zZBEQt9HNHf2Kr7SAAA2)","timestamp":"2026-08-13T09:18:16.475Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (rNj088bENZTgFhh6AAA3)","timestamp":"2026-08-13T09:18:16.476Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (msQvJDIQzk0jCUvnAAA_)","timestamp":"2026-08-13T09:18:20.361Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (oMlUwWCKLDj5iNr6AABA)","timestamp":"2026-08-13T09:18:20.364Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (gFqqsweUGt6jV7xUAABN)","timestamp":"2026-08-13T09:22:29.143Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (-swI4Dy4ayXMnMA4AABO)","timestamp":"2026-08-13T09:22:29.148Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (-swI4Dy4ayXMnMA4AABO)","timestamp":"2026-08-13T09:22:29.195Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (gFqqsweUGt6jV7xUAABN)","timestamp":"2026-08-13T09:22:29.196Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (tsGuisrDO01ZN-26AABR)","timestamp":"2026-08-13T09:22:29.215Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (ZvHNMMN4GOfK_scWAABS)","timestamp":"2026-08-13T09:22:29.219Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (b3C-zVs9AagiQt-LAABY)","timestamp":"2026-08-13T09:22:31.042Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (VJICqQ9M4bRNnpicAABZ)","timestamp":"2026-08-13T09:22:31.049Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (YGi5Ha1BFYkC2ZwFAABJ)","timestamp":"2026-08-13T09:23:09.779Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (YqyCN93fVOlWExkPAABI)","timestamp":"2026-08-13T09:23:09.780Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (tsGuisrDO01ZN-26AABR)","timestamp":"2026-08-13T09:23:14.200Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (ZvHNMMN4GOfK_scWAABS)","timestamp":"2026-08-13T09:23:14.202Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (J1TLLVb4exAyGUxDAABd)","timestamp":"2026-08-13T09:23:42.664Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (GsN9K8EhuhpozDpKAABe)","timestamp":"2026-08-13T09:23:42.668Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (J1TLLVb4exAyGUxDAABd)","timestamp":"2026-08-13T09:23:42.683Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (GsN9K8EhuhpozDpKAABe)","timestamp":"2026-08-13T09:23:42.690Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (EHkE45s4KYWpuqMBAABh)","timestamp":"2026-08-13T09:23:42.697Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (bt3ld2S5RsUR1bB_AABi)","timestamp":"2026-08-13T09:23:42.700Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (b3C-zVs9AagiQt-LAABY)","timestamp":"2026-08-13T09:24:06.083Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (VJICqQ9M4bRNnpicAABZ)","timestamp":"2026-08-13T09:24:06.083Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (1an8CUg1SUsQgOKIAABm)","timestamp":"2026-08-13T09:24:16.427Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (79VA4HrNzQEwqGWSAABn)","timestamp":"2026-08-13T09:24:16.433Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (79VA4HrNzQEwqGWSAABn)","timestamp":"2026-08-13T09:24:16.537Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (1an8CUg1SUsQgOKIAABm)","timestamp":"2026-08-13T09:24:16.538Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (GvFJWxXH98fJGWjXAABq)","timestamp":"2026-08-13T09:24:16.573Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (0YS9-VkHR_76e-UKAABr)","timestamp":"2026-08-13T09:24:16.577Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (EHkE45s4KYWpuqMBAABh)","timestamp":"2026-08-13T09:24:52.722Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (bt3ld2S5RsUR1bB_AABi)","timestamp":"2026-08-13T09:24:52.725Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (iAV13JNH-JLPzQj_AABv)","timestamp":"2026-08-13T09:26:15.420Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (4FDYrR0izIl3I5uaAABw)","timestamp":"2026-08-13T09:26:15.433Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (4FDYrR0izIl3I5uaAABw)","timestamp":"2026-08-13T09:26:15.678Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (iAV13JNH-JLPzQj_AABv)","timestamp":"2026-08-13T09:26:15.679Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (phfaCxRU_M5JbLJwAABz)","timestamp":"2026-08-13T09:26:15.783Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (f0dxWa5AN2p-c98SAAB0)","timestamp":"2026-08-13T09:26:15.796Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (GvFJWxXH98fJGWjXAABq)","timestamp":"2026-08-13T09:26:41.777Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (0YS9-VkHR_76e-UKAABr)","timestamp":"2026-08-13T09:26:41.778Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (vTYHMHfc_tBT1tInAAB4)","timestamp":"2026-08-13T09:29:32.570Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (inA2N-nvtrS4EOd0AAB5)","timestamp":"2026-08-13T09:29:32.576Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (inA2N-nvtrS4EOd0AAB5)","timestamp":"2026-08-13T09:29:32.704Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (vTYHMHfc_tBT1tInAAB4)","timestamp":"2026-08-13T09:29:32.705Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (sd8mVOaOgAUaZCKGAAB8)","timestamp":"2026-08-13T09:29:32.735Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (E8SJCETWmgsO76XiAAB9)","timestamp":"2026-08-13T09:29:32.738Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (HzrLX84H0Z6x5yrRAACB)","timestamp":"2026-08-13T09:29:53.946Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (WsrSv8nJZK_WZGUsAACC)","timestamp":"2026-08-13T09:29:53.952Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (HzrLX84H0Z6x5yrRAACB)","timestamp":"2026-08-13T09:29:54.023Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (WsrSv8nJZK_WZGUsAACC)","timestamp":"2026-08-13T09:29:54.025Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (j1EQqF3VdfgDl2hhAACF)","timestamp":"2026-08-13T09:29:54.046Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (oVYIfOJCXpzy2tssAACG)","timestamp":"2026-08-13T09:29:54.051Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (f0dxWa5AN2p-c98SAAB0)","timestamp":"2026-08-13T09:29:56.161Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (phfaCxRU_M5JbLJwAABz)","timestamp":"2026-08-13T09:29:56.162Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T09:30:00.889Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T09:30:00.889Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T09:30:00.905Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T09:30:00.909Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (sd8mVOaOgAUaZCKGAAB8)","timestamp":"2026-08-13T09:30:17.707Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (E8SJCETWmgsO76XiAAB9)","timestamp":"2026-08-13T09:30:17.711Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (DLciQZ4NGaAArG_iAACK)","timestamp":"2026-08-13T09:32:27.614Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (PTbqTIre5u0Km-GJAACL)","timestamp":"2026-08-13T09:32:27.624Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (PTbqTIre5u0Km-GJAACL)","timestamp":"2026-08-13T09:32:27.733Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (DLciQZ4NGaAArG_iAACK)","timestamp":"2026-08-13T09:32:27.735Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (LJUC0MGxizVzcUVLAACO)","timestamp":"2026-08-13T09:32:27.819Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (D8IihOxC3gDwDco-AACP)","timestamp":"2026-08-13T09:32:27.822Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (oVYIfOJCXpzy2tssAACG)","timestamp":"2026-08-13T09:33:09.192Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (j1EQqF3VdfgDl2hhAACF)","timestamp":"2026-08-13T09:33:09.193Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (lsx0YGAFGv4wEpeEAACT)","timestamp":"2026-08-13T09:34:56.069Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (nr0wOxvY9yaqwRRIAACU)","timestamp":"2026-08-13T09:34:56.075Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (nr0wOxvY9yaqwRRIAACU)","timestamp":"2026-08-13T09:34:56.214Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (lsx0YGAFGv4wEpeEAACT)","timestamp":"2026-08-13T09:34:56.216Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (6nAUtl0grwD6536CAACX)","timestamp":"2026-08-13T09:34:56.282Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (r3IwE0gl-7qavBHzAACY)","timestamp":"2026-08-13T09:34:56.287Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (D8IihOxC3gDwDco-AACP)","timestamp":"2026-08-13T09:35:17.842Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (LJUC0MGxizVzcUVLAACO)","timestamp":"2026-08-13T09:35:17.847Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (L8fLFH6xd2oFoeDbAACc)","timestamp":"2026-08-13T09:37:34.024Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (XWIswRFx7FlgFhfCAACd)","timestamp":"2026-08-13T09:37:34.028Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (XWIswRFx7FlgFhfCAACd)","timestamp":"2026-08-13T09:37:34.135Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (L8fLFH6xd2oFoeDbAACc)","timestamp":"2026-08-13T09:37:34.138Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (gbbidwGHPxHbRDtHAACg)","timestamp":"2026-08-13T09:37:34.210Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (h3YJo7jHz8BsYR2oAACh)","timestamp":"2026-08-13T09:37:34.212Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (r3IwE0gl-7qavBHzAACY)","timestamp":"2026-08-13T09:38:11.344Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (6nAUtl0grwD6536CAACX)","timestamp":"2026-08-13T09:38:11.356Z"}
{"level":"error","message":"[Error] \nInvalid `prisma.user.findUnique()` invocation:\n\n\nTimed out fetching a new connection from the connection pool. More info: http://pris.ly/d/connection-pool (Current connection pool timeout: 10, connection limit: 11)","method":"GET","path":"/api/roles","stack":"PrismaClientKnownRequestError: \nInvalid `prisma.user.findUnique()` invocation:\n\n\nTimed out fetching a new connection from the connection pool. More info: http://pris.ly/d/connection-pool (Current connection pool timeout: 10, connection limit: 11)\n    at ei.handleRequestError (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:125:7268)\n    at ei.handleAndLogRequestError (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:125:6593)\n    at ei.request (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:125:6300)\n    at async a (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:134:9551)\n    at async authenticate (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/authenticate.js:18:18)","timestamp":"2026-08-13T09:47:27.393Z"}
{"level":"error","message":"[Error] \nInvalid `prisma.user.findUnique()` invocation:\n\n\nTimed out fetching a new connection from the connection pool. More info: http://pris.ly/d/connection-pool (Current connection pool timeout: 10, connection limit: 11)","method":"GET","path":"/api/settings/symbols","stack":"PrismaClientKnownRequestError: \nInvalid `prisma.user.findUnique()` invocation:\n\n\nTimed out fetching a new connection from the connection pool. More info: http://pris.ly/d/connection-pool (Current connection pool timeout: 10, connection limit: 11)\n    at ei.handleRequestError (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:125:7268)\n    at ei.handleAndLogRequestError (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:125:6593)\n    at ei.request (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:125:6300)\n    at async a (/home/hiplstaging2/public_html/pms-pro/Backend/src/generated/prisma/runtime/library.js:134:9551)\n    at async authenticate (/home/hiplstaging2/public_html/pms-pro/Backend/src/middlewares/authenticate.js:18:18)","timestamp":"2026-08-13T09:47:27.398Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (Odg6bpTTaNswfMZWAAAT)","timestamp":"2026-08-13T09:47:27.419Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (AC4xfjFGqxpzZR8TAACr)","timestamp":"2026-08-13T09:47:28.004Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (-ohbbREPAhVfvfWvAACs)","timestamp":"2026-08-13T09:47:28.007Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (AC4xfjFGqxpzZR8TAACr)","timestamp":"2026-08-13T09:47:28.735Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (-ohbbREPAhVfvfWvAACs)","timestamp":"2026-08-13T09:47:28.736Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (VdAFU8EOhCVIVKD2AACv)","timestamp":"2026-08-13T09:47:28.831Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (BtzP5aUQx0DPkNPiAACw)","timestamp":"2026-08-13T09:47:28.910Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (gbbidwGHPxHbRDtHAACg)","timestamp":"2026-08-13T09:47:47.401Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (h3YJo7jHz8BsYR2oAACh)","timestamp":"2026-08-13T09:47:47.402Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (VdAFU8EOhCVIVKD2AACv)","timestamp":"2026-08-13T10:17:50.361Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (BtzP5aUQx0DPkNPiAACw)","timestamp":"2026-08-13T10:17:50.365Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (uLWQEeUtY-rpbKMwAAC0)","timestamp":"2026-08-13T10:17:52.563Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (rMWuoKQ2w9Ol5AUiAAC1)","timestamp":"2026-08-13T10:17:52.566Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (uLWQEeUtY-rpbKMwAAC0)","timestamp":"2026-08-13T10:17:52.646Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (rMWuoKQ2w9Ol5AUiAAC1)","timestamp":"2026-08-13T10:17:52.647Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (rb0u2IxL-4cdTvsjAAC4)","timestamp":"2026-08-13T10:17:52.670Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (2wz07uNFvVEaQj6CAAC5)","timestamp":"2026-08-13T10:17:52.674Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (pG7dTfhjt5KYBUdSAAC9)","timestamp":"2026-08-13T10:17:52.937Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (av6ElWzTnfX3UCikAAC-)","timestamp":"2026-08-13T10:17:52.943Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (pG7dTfhjt5KYBUdSAAC9)","timestamp":"2026-08-13T10:17:53.008Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (av6ElWzTnfX3UCikAAC-)","timestamp":"2026-08-13T10:17:53.009Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (bHawXMUm_8FmmcS2AADB)","timestamp":"2026-08-13T10:17:53.195Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (f68Xh82qJkk_-tTHAADC)","timestamp":"2026-08-13T10:17:53.197Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (gzAcLPDb5M0iHyuwAADI)","timestamp":"2026-08-13T10:18:05.638Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (NHGvsUjBOjMA8r5VAADJ)","timestamp":"2026-08-13T10:18:05.642Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (62hbTH7Vonipzki7AADN)","timestamp":"2026-08-13T10:18:05.942Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (RG3haJNIynePOuF7AADO)","timestamp":"2026-08-13T10:18:05.947Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (62hbTH7Vonipzki7AADN)","timestamp":"2026-08-13T10:18:06.041Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (RG3haJNIynePOuF7AADO)","timestamp":"2026-08-13T10:18:06.106Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (r3s_YTh3cJbdkPSCAADR)","timestamp":"2026-08-13T10:18:06.256Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (wJVgy7aq7HnwxDMfAADS)","timestamp":"2026-08-13T10:18:06.261Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (cpHv4tlmNWb90CwuAADY)","timestamp":"2026-08-13T10:18:10.602Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (CKvVeR_mfqo1hnhqAADZ)","timestamp":"2026-08-13T10:18:10.610Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (7_pJTh2yWV3hT09-AADf)","timestamp":"2026-08-13T10:18:12.817Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (_FDJsvK6km7ULEMmAADg)","timestamp":"2026-08-13T10:18:12.821Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (rb0u2IxL-4cdTvsjAAC4)","timestamp":"2026-08-13T10:18:37.649Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (2wz07uNFvVEaQj6CAAC5)","timestamp":"2026-08-13T10:18:37.655Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (bHawXMUm_8FmmcS2AADB)","timestamp":"2026-08-13T10:18:38.013Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (f68Xh82qJkk_-tTHAADC)","timestamp":"2026-08-13T10:18:38.020Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (gzAcLPDb5M0iHyuwAADI)","timestamp":"2026-08-13T10:18:50.612Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (NHGvsUjBOjMA8r5VAADJ)","timestamp":"2026-08-13T10:18:50.614Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (cpHv4tlmNWb90CwuAADY)","timestamp":"2026-08-13T10:18:55.584Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (CKvVeR_mfqo1hnhqAADZ)","timestamp":"2026-08-13T10:18:55.586Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (r3s_YTh3cJbdkPSCAADR)","timestamp":"2026-08-13T10:20:31.129Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (wJVgy7aq7HnwxDMfAADS)","timestamp":"2026-08-13T10:20:31.130Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (7_pJTh2yWV3hT09-AADf)","timestamp":"2026-08-13T10:20:37.875Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (_FDJsvK6km7ULEMmAADg)","timestamp":"2026-08-13T10:20:37.877Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T10:30:00.430Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T10:30:00.431Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T10:30:00.466Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T10:30:00.471Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (9lvaYjKsITHLWjSGAADk)","timestamp":"2026-08-13T10:36:09.020Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (XMD5EsAFclrVBLkpAADl)","timestamp":"2026-08-13T10:36:09.023Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (9lvaYjKsITHLWjSGAADk)","timestamp":"2026-08-13T10:36:09.105Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (XMD5EsAFclrVBLkpAADl)","timestamp":"2026-08-13T10:36:09.108Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (iZ5Iy4pbmOv3myLpAADo)","timestamp":"2026-08-13T10:36:09.132Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np connected (IKtTzW7aGuqURH3FAADp)","timestamp":"2026-08-13T10:36:09.136Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (iZ5Iy4pbmOv3myLpAADo)","timestamp":"2026-08-13T10:36:54.112Z"}
{"level":"info","message":"[Socket.IO] User cms8s9s9f006tshjnh8pdc5np disconnected (IKtTzW7aGuqURH3FAADp)","timestamp":"2026-08-13T10:36:54.114Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T11:30:00.852Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T11:30:00.856Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T11:30:00.898Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T11:30:00.904Z"}
{"level":"info","message":"[Cron] Running missing report reminder","timestamp":"2026-08-13T12:00:00.195Z"}
{"level":"info","message":"[Job:MissingReport] Missing report reminder job - pending notification module integration","timestamp":"2026-08-13T12:00:00.201Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T12:30:00.380Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T12:30:00.383Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T12:30:00.425Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T12:30:00.430Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-13T13:07:22.784Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-13T13:07:23.215Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-13T13:07:23.235Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-13T13:07:23.277Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-13T13:07:23.280Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-13T13:07:23.281Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-13T13:07:23.282Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-13T13:07:23.282Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-13T13:07:23.285Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-13T13:07:23.285Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-13T13:07:23.285Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-13T13:07:23.285Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-13T13:07:23.285Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-13T13:07:23.288Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T13:30:00.947Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T13:30:00.949Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T13:30:00.989Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T13:30:00.994Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T14:30:00.312Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T14:30:00.314Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T14:30:00.354Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T14:30:00.361Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T15:30:00.568Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T15:30:00.569Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T15:30:00.602Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T15:30:00.607Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T16:30:00.811Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T16:30:00.814Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T16:30:00.851Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T16:30:00.860Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T17:30:00.054Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T17:30:00.055Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T17:30:00.088Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T17:30:00.092Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T18:30:00.198Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T18:30:00.200Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T18:30:00.229Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T18:30:00.234Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T19:30:00.558Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T19:30:00.561Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T19:30:00.590Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T19:30:00.594Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T20:30:00.350Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T20:30:00.351Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T20:30:00.383Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T20:30:00.390Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T21:30:00.774Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T21:30:00.793Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T21:30:00.856Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T21:30:00.866Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T22:30:00.100Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T22:30:00.104Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T22:30:00.149Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T22:30:00.159Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-13T23:30:00.465Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-13T23:30:00.469Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-13T23:30:00.508Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-13T23:30:00.515Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-14T08:29:59.189Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-14T08:29:59.717Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-14T08:29:59.748Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-14T08:29:59.801Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-14T08:29:59.803Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-14T08:29:59.807Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-14T08:29:59.808Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-14T08:29:59.808Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-14T08:29:59.811Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-14T08:29:59.812Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-14T08:29:59.812Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-14T08:29:59.812Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-14T08:29:59.812Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-14T08:29:59.816Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-14T08:30:00.725Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-14T08:30:00.726Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-14T08:30:00.742Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-14T08:30:00.752Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-14T09:30:00.095Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-14T09:30:00.097Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-14T09:30:00.124Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-14T09:30:00.129Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-14T10:30:00.455Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-14T10:30:00.457Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-14T10:30:00.495Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-14T10:30:00.500Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-14T11:30:00.706Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-14T11:30:00.708Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-14T11:30:00.754Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-14T11:30:00.765Z"}
{"level":"info","message":"[Cron] Running missing report reminder","timestamp":"2026-08-14T12:00:00.851Z"}
{"level":"info","message":"[Job:MissingReport] Missing report reminder job - pending notification module integration","timestamp":"2026-08-14T12:00:00.853Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-14T12:30:00.970Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-14T12:30:00.971Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-14T12:30:01.012Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-14T12:30:01.018Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-14T13:04:28.558Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-14T13:04:29.127Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-14T13:04:29.162Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-14T13:04:29.218Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-14T13:04:29.222Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-14T13:04:29.223Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-14T13:04:29.224Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-14T13:04:29.225Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-14T13:04:29.228Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-14T13:04:29.229Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-14T13:04:29.229Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-14T13:04:29.229Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-14T13:04:29.229Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-14T13:04:29.234Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-14T13:30:00.115Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-14T13:30:00.127Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-14T13:30:00.184Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-14T13:30:00.191Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-14T14:30:00.498Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-14T14:30:00.500Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-14T14:30:00.527Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-14T14:30:00.533Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-14T15:30:00.766Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-14T15:30:00.767Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-14T15:30:00.797Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-14T15:30:00.802Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-14T16:30:00.985Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-14T16:30:00.987Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-14T16:30:01.017Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-14T16:30:01.026Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-14T17:30:00.156Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-14T17:30:00.160Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-14T17:30:00.203Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-14T17:30:00.208Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-14T20:10:46.701Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-14T20:10:47.200Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-14T20:10:47.219Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-14T20:10:47.269Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-14T20:10:47.271Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-14T20:10:47.272Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-14T20:10:47.273Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-14T20:10:47.275Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-14T20:10:47.276Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-14T20:10:47.276Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-14T20:10:47.276Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-14T20:10:47.276Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-14T20:10:47.278Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-14T20:10:47.281Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-14T20:30:00.683Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-14T20:30:00.685Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-14T20:30:00.709Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-14T20:30:00.721Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-14T21:30:00.206Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-14T21:30:00.287Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-14T21:30:00.413Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-14T21:30:00.447Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-14T22:30:00.609Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-14T22:30:00.610Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-14T22:30:00.647Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-14T22:30:00.662Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-14T23:30:00.861Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-14T23:30:00.863Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-14T23:30:00.879Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-14T23:30:00.886Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T00:30:00.211Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T00:30:00.213Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T00:30:00.239Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T00:30:00.248Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T01:30:00.696Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T01:30:00.698Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T01:30:00.724Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T01:30:00.729Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T02:30:00.943Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T02:30:00.945Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T02:30:00.964Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T02:30:00.978Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T03:30:00.211Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T03:30:00.213Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T03:30:00.240Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T03:30:00.249Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T04:30:00.481Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T04:30:00.482Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T04:30:00.500Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T04:30:00.504Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T05:30:00.767Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T05:30:00.768Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T05:30:00.793Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T05:30:00.797Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T06:30:00.145Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T06:30:00.147Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T06:30:00.173Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T06:30:00.179Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T07:30:00.505Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T07:30:00.507Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T07:30:00.534Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T07:30:00.539Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T08:30:00.843Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T08:30:00.844Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T08:30:00.875Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T08:30:00.878Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T09:30:00.130Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T09:30:00.132Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T09:30:00.169Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T09:30:00.175Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T10:30:00.431Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T10:30:00.433Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T10:30:00.467Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T10:30:00.471Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T11:30:00.768Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T11:30:00.770Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T11:30:00.795Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T11:30:00.802Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T12:30:00.046Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T12:30:00.048Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T12:30:00.081Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T12:30:00.085Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T13:30:00.300Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T13:30:00.302Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T13:30:00.335Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T13:30:00.339Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T14:30:00.598Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T14:30:00.602Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T14:30:00.638Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T14:30:00.641Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T15:30:00.931Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T15:30:00.933Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T15:30:00.968Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T15:30:00.974Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T16:30:00.189Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T16:30:00.191Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T16:30:00.218Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T16:30:00.222Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-15T23:12:44.578Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-15T23:12:45.054Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-15T23:12:45.079Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-15T23:12:45.129Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-15T23:12:45.130Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-15T23:12:45.133Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-15T23:12:45.133Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-15T23:12:45.133Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-15T23:12:45.134Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-15T23:12:45.134Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-15T23:12:45.139Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-15T23:12:45.141Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-15T23:12:45.143Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-15T23:12:45.146Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-15T23:30:00.294Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-15T23:30:00.296Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-15T23:30:00.327Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-15T23:30:00.339Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T00:30:00.599Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T00:30:00.602Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T00:30:00.643Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T00:30:00.651Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T01:30:00.846Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T01:30:00.848Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T01:30:00.892Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T01:30:00.897Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T02:30:00.080Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T02:30:00.083Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T02:30:00.127Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T02:30:00.138Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T03:30:00.305Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T03:30:00.307Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T03:30:00.338Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T03:30:00.343Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T04:30:00.664Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T04:30:00.667Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T04:30:00.709Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T04:30:00.715Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T05:30:00.284Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T05:30:00.286Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T05:30:00.316Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T05:30:00.320Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T06:30:00.497Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T06:30:00.498Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T06:30:00.534Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T06:30:00.540Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T07:30:00.794Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T07:30:00.796Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T07:30:00.828Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T07:30:00.834Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-16T08:32:28.376Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-16T08:32:28.854Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-16T08:32:28.881Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-16T08:32:28.934Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-16T08:32:28.936Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-16T08:32:28.937Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-16T08:32:28.939Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-16T08:32:28.939Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-16T08:32:28.941Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-16T08:32:28.942Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-16T08:32:28.942Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-16T08:32:28.942Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-16T08:32:28.942Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-16T08:32:28.945Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-16T09:43:14.597Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-16T09:43:15.014Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-16T09:43:15.037Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-16T09:43:15.089Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-16T09:43:15.091Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-16T09:43:15.093Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-16T09:43:15.094Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-16T09:43:15.094Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-16T09:43:15.097Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-16T09:43:15.097Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-16T09:43:15.098Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-16T09:43:15.098Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-16T09:43:15.098Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-16T09:43:15.101Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T10:30:00.403Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T10:30:00.406Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T10:30:00.440Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T10:30:00.445Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T11:30:00.672Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T11:30:00.675Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T11:30:00.714Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T11:30:00.724Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-16T13:26:10.713Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-16T13:26:11.193Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-16T13:26:11.213Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-16T13:26:11.254Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-16T13:26:11.264Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-16T13:26:11.266Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-16T13:26:11.267Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-16T13:26:11.267Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-16T13:26:11.269Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-16T13:26:11.270Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-16T13:26:11.270Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-16T13:26:11.270Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-16T13:26:11.270Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-16T13:26:11.273Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T13:30:00.490Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T13:30:00.492Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T13:30:00.510Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T13:30:00.517Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T14:30:00.867Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T14:30:00.870Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T14:30:00.901Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T14:30:00.905Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T15:30:00.138Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T15:30:00.139Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T15:30:00.166Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T15:30:00.170Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-16T17:03:23.901Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-16T17:03:24.301Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-16T17:03:24.323Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-16T17:03:24.369Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-16T17:03:24.372Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-16T17:03:24.373Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-16T17:03:24.374Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-16T17:03:24.375Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-16T17:03:24.378Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-16T17:03:24.379Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-16T17:03:24.379Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-16T17:03:24.379Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-16T17:03:24.379Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-16T17:03:24.384Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T17:30:00.275Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T17:30:00.277Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T17:30:00.314Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T17:30:00.321Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T18:30:00.616Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T18:30:00.626Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T18:30:00.662Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T18:30:00.667Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T19:30:00.977Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T19:30:00.980Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T19:30:01.020Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T19:30:01.028Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T20:30:00.585Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T20:30:00.586Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T20:30:00.626Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T20:30:00.634Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T21:30:00.092Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T21:30:00.112Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T21:30:00.151Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T21:30:00.156Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T22:30:00.511Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T22:30:00.513Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T22:30:00.546Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T22:30:00.553Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-16T23:30:00.812Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-16T23:30:00.814Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-16T23:30:00.849Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-16T23:30:00.855Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-17T00:30:00.061Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-17T00:30:00.068Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-17T00:30:00.102Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-17T00:30:00.108Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-17T01:30:00.288Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-17T01:30:00.290Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-17T01:30:00.320Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-17T01:30:00.323Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-17T02:30:00.482Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-17T02:30:00.492Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-17T02:30:00.527Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-17T02:30:00.533Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-17T03:30:00.736Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-17T03:30:00.739Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-17T03:30:00.773Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-17T03:30:00.780Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-17T04:34:03.790Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-17T04:34:04.330Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-17T04:34:04.348Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-17T04:34:04.389Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-17T04:34:04.390Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-17T04:34:04.392Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-17T04:34:04.392Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-17T04:34:04.394Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-17T04:34:04.394Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-17T04:34:04.395Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-17T04:34:04.395Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-17T04:34:04.395Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-17T04:34:04.396Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-17T04:34:04.400Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-17T05:30:00.407Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-17T05:30:00.409Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-17T05:30:00.445Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-17T05:30:00.453Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-17T06:30:00.852Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-17T06:30:00.853Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-17T06:30:00.882Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-17T06:30:00.886Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-17T07:30:00.506Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-17T07:30:00.508Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-17T07:30:00.554Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-17T07:30:00.567Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-17T16:00:39.037Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-17T16:00:39.508Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-17T16:00:39.532Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-17T16:00:39.591Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-17T16:00:39.593Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-17T16:00:39.598Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-17T16:00:39.598Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-17T16:00:39.603Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-17T16:00:39.603Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-17T16:00:39.604Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-17T16:00:39.604Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-17T16:00:39.604Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-17T16:00:39.607Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-17T16:00:39.613Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-17T16:30:00.673Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-17T16:30:00.675Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-17T16:30:00.703Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-17T16:30:00.714Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-17T20:45:21.953Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-17T20:45:22.476Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-17T20:45:22.504Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-17T20:45:22.574Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-17T20:45:22.576Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-17T20:45:22.579Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-17T20:45:22.580Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-17T20:45:22.580Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-17T20:45:22.583Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-17T20:45:22.583Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-17T20:45:22.583Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-17T20:45:22.583Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-17T20:45:22.583Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-17T20:45:22.589Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-17T21:30:00.969Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-17T21:30:00.973Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-17T21:30:01.034Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-17T21:30:01.046Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-17T22:30:00.344Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-17T22:30:00.346Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-17T22:30:00.382Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-17T22:30:00.390Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-17T23:30:00.710Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-17T23:30:00.712Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-17T23:30:00.751Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-17T23:30:00.760Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T00:30:00.974Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T00:30:00.975Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T00:30:00.998Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T00:30:01.003Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T01:30:00.195Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T01:30:00.197Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T01:30:00.230Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T01:30:00.236Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T02:30:00.429Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T02:30:00.433Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T02:30:00.473Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T02:30:00.478Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T03:30:00.679Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T03:30:00.681Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T03:30:00.705Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T03:30:00.713Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T04:30:00.930Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T04:30:00.934Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T04:30:00.966Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T04:30:00.975Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T05:30:00.202Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T05:30:00.203Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T05:30:00.230Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T05:30:00.234Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T06:30:00.455Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T06:30:00.456Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T06:30:00.485Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T06:30:00.490Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T07:30:00.727Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T07:30:00.729Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T07:30:00.769Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T07:30:00.777Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T08:30:00.224Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T08:30:00.226Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T08:30:00.259Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T08:30:00.264Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T09:30:00.505Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T09:30:00.507Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T09:30:00.539Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T09:30:00.543Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-18T10:55:56.593Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-18T10:55:57.142Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-18T10:55:57.162Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-18T10:55:57.211Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-18T10:55:57.212Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-18T10:55:57.214Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-18T10:55:57.215Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-18T10:55:57.217Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-18T10:55:57.217Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-18T10:55:57.217Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-18T10:55:57.217Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-18T10:55:57.218Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-18T10:55:57.219Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-18T10:55:57.222Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T11:30:00.727Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T11:30:00.730Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T11:30:00.766Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T11:30:00.777Z"}
{"level":"info","message":"[Cron] Running missing report reminder","timestamp":"2026-08-18T12:00:00.933Z"}
{"level":"info","message":"[Job:MissingReport] Missing report reminder job - pending notification module integration","timestamp":"2026-08-18T12:00:00.935Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T12:30:00.146Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T12:30:00.147Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T12:30:00.185Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T12:30:00.190Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T13:30:00.506Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T13:30:00.507Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T13:30:00.536Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T13:30:00.540Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T14:30:00.779Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T14:30:00.780Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T14:30:00.810Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T14:30:00.816Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T15:30:00.012Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T15:30:00.013Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T15:30:00.047Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T15:30:00.053Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T16:30:00.260Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T16:30:00.262Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T16:30:00.292Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T16:30:00.296Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T17:30:00.553Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T17:30:00.558Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T17:30:00.603Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T17:30:00.609Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T18:30:00.820Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T18:30:00.827Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T18:30:00.863Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T18:30:00.868Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T19:30:00.173Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T19:30:00.175Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T19:30:00.202Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T19:30:00.205Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T20:30:00.490Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T20:30:00.492Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T20:30:00.538Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T20:30:00.547Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T21:30:00.270Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T21:30:00.285Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-18T21:30:00.337Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-18T21:30:00.346Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T22:30:00.481Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T22:30:00.490Z"}
{"level":"error","message":"[Job:MarkOverdue] Error: \nInvalid `prisma.milestone.updateMany()` invocation:\n\n\nError occurred during query execution:\nConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(Server(MysqlError { code: 1615, message: \"Prepared statement needs to be re-prepared\", state: \"HY000\" })), transient: false })","timestamp":"2026-08-18T22:30:00.570Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-18T23:30:00.724Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-18T23:30:00.725Z"}
{"level":"error","message":"[Job:MarkOverdue] Error: \nInvalid `prisma.milestone.updateMany()` invocation:\n\n\nError occurred during query execution:\nConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(Server(MysqlError { code: 1615, message: \"Prepared statement needs to be re-prepared\", state: \"HY000\" })), transient: false })","timestamp":"2026-08-18T23:30:00.775Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T00:30:00.916Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T00:30:00.919Z"}
{"level":"error","message":"[Job:MarkOverdue] Error: \nInvalid `prisma.milestone.updateMany()` invocation:\n\n\nError occurred during query execution:\nConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(Server(MysqlError { code: 1615, message: \"Prepared statement needs to be re-prepared\", state: \"HY000\" })), transient: false })","timestamp":"2026-08-19T00:30:00.976Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T01:30:00.276Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T01:30:00.278Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T01:30:00.319Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T01:30:00.338Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T02:30:00.801Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T02:30:00.803Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T02:30:00.831Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T02:30:00.836Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T03:30:00.029Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T03:30:00.031Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T03:30:00.078Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T03:30:00.089Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T04:30:00.167Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T04:30:00.168Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T04:30:00.197Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T04:30:00.203Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-19T07:48:18.835Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-19T07:48:19.484Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-19T07:48:19.517Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-19T07:48:19.580Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-19T07:48:19.582Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-19T07:48:19.584Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-19T07:48:19.585Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-19T07:48:19.588Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-19T07:48:19.588Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-19T07:48:19.589Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-19T07:48:19.589Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-19T07:48:19.589Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-19T07:48:19.591Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-19T07:48:19.596Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T08:30:00.646Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T08:30:00.649Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T08:30:00.689Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T08:30:00.697Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T09:30:00.007Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T09:30:00.012Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T09:30:00.048Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T09:30:00.053Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-19T10:47:51.768Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-19T10:47:52.344Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-19T10:47:52.365Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-19T10:47:52.413Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-19T10:47:52.415Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-19T10:47:52.422Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-19T10:47:52.423Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-19T10:47:52.423Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-19T10:47:52.427Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-19T10:47:52.427Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-19T10:47:52.427Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-19T10:47:52.427Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-19T10:47:52.428Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-19T10:47:52.432Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T11:30:00.589Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T11:30:00.592Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T11:30:00.646Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T11:30:00.658Z"}
{"level":"info","message":"[Cron] Running missing report reminder","timestamp":"2026-08-19T12:00:00.015Z"}
{"level":"info","message":"[Job:MissingReport] Missing report reminder job - pending notification module integration","timestamp":"2026-08-19T12:00:00.017Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T12:30:00.131Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T12:30:00.135Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T12:30:00.182Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T12:30:00.193Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T13:30:00.428Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T13:30:00.442Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T13:30:00.493Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T13:30:00.503Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T14:30:00.769Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T14:30:00.786Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T14:30:00.829Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T14:30:00.836Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T15:30:00.162Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T15:30:00.165Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T15:30:00.221Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T15:30:00.231Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-19T16:10:28.786Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-19T16:10:29.321Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-19T16:10:29.343Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-19T16:10:29.387Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-19T16:10:29.390Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-19T16:10:29.391Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-19T16:10:29.392Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-19T16:10:29.393Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-19T16:10:29.396Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-19T16:10:29.396Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-19T16:10:29.396Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-19T16:10:29.396Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-19T16:10:29.397Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-19T16:10:29.399Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T16:30:00.785Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T16:30:00.788Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T16:30:00.810Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T16:30:00.815Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T17:30:00.135Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T17:30:00.149Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T17:30:00.189Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T17:30:00.198Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T18:30:00.561Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T18:30:00.563Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T18:30:00.609Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T18:30:00.616Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T19:30:00.055Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T19:30:00.058Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T19:30:00.109Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T19:30:00.119Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T20:30:00.561Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T20:30:00.566Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T20:30:00.613Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T20:30:00.621Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-19T21:30:00.298Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-19T21:30:00.331Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-19T21:30:00.395Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-19T21:30:00.405Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-20T05:07:21.004Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-20T05:07:21.762Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-20T05:07:21.792Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-20T05:07:21.858Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-20T05:07:21.860Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-20T05:07:21.864Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-20T05:07:21.865Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-20T05:07:21.869Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-20T05:07:21.869Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-20T05:07:21.870Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-20T05:07:21.870Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-20T05:07:21.870Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-20T05:07:21.873Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-20T05:07:21.879Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-20T05:30:00.619Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-20T05:30:00.622Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 1 milestone(s) as DELAYED","timestamp":"2026-08-20T05:30:00.671Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-20T05:30:00.696Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-20T06:30:00.361Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-20T06:30:00.363Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-20T06:30:00.410Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-20T06:30:00.424Z"}
{"level":"info","message":"[Cron] Running overdue milestone scan","timestamp":"2026-08-20T07:30:00.979Z"}
{"level":"info","message":"[Job:MarkOverdue] Running overdue milestone/task scan...","timestamp":"2026-08-20T07:30:00.981Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 milestone(s) as DELAYED","timestamp":"2026-08-20T07:30:01.002Z"}
{"level":"info","message":"[Job:MarkOverdue] Marked 0 project(s) as DELAYED","timestamp":"2026-08-20T07:30:01.011Z"}
{"level":"info","message":"[PushService] Web push VAPID details configured successfully","timestamp":"2026-08-20T09:14:34.471Z"}
{"level":"info","message":"[Queue] BullMQ workers skipped (not yet configured)","timestamp":"2026-08-20T09:14:35.212Z"}
{"level":"info","message":"[Redis] Connected","timestamp":"2026-08-20T09:14:35.237Z"}
{"level":"info","message":"[Redis] Ready","timestamp":"2026-08-20T09:14:35.289Z"}
{"level":"info","message":"[Socket.IO] Subscribed to Redis channel: notifications","timestamp":"2026-08-20T09:14:35.295Z"}
{"level":"error","message":"[Socket.IO] Failed to parse notification: Cannot destructure property 'userId' of 'JSON.parse(...)' as it is null.","timestamp":"2026-08-20T09:14:35.297Z"}
{"level":"info","message":"[DB] Connected to PostgreSQL via Prisma","timestamp":"2026-08-20T09:14:35.298Z"}
{"level":"warn","message":"[Redis] Could not connect: Redis is already connecting/connected — continuing without Redis","timestamp":"2026-08-20T09:14:35.298Z"}
{"level":"info","message":"🚀 PMS API running","timestamp":"2026-08-20T09:14:35.302Z"}
{"level":"info","message":"Local:   http://localhost:5000","timestamp":"2026-08-20T09:14:35.303Z"}
{"level":"info","message":"Network: http://192.168.1.38:5000","timestamp":"2026-08-20T09:14:35.303Z"}
{"level":"info","message":"Environment: production","timestamp":"2026-08-20T09:14:35.303Z"}
{"level":"info","message":"Health: http://192.168.1.38:5000/health","timestamp":"2026-08-20T09:14:35.303Z"}
{"level":"info","message":"[Socket.IO] Redis adapter attached","timestamp":"2026-08-20T09:14:35.307Z"}
