nestlens 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +145 -0
- package/dist/__tests__/api/api.controller.spec.d.ts +2 -0
- package/dist/__tests__/api/api.controller.spec.d.ts.map +1 -0
- package/dist/__tests__/api/api.controller.spec.js +982 -0
- package/dist/__tests__/api/api.controller.spec.js.map +1 -0
- package/dist/__tests__/api/api.guard.spec.d.ts +2 -0
- package/dist/__tests__/api/api.guard.spec.d.ts.map +1 -0
- package/dist/__tests__/api/api.guard.spec.js +572 -0
- package/dist/__tests__/api/api.guard.spec.js.map +1 -0
- package/dist/__tests__/api/dashboard.controller.spec.d.ts +2 -0
- package/dist/__tests__/api/dashboard.controller.spec.d.ts.map +1 -0
- package/dist/__tests__/api/dashboard.controller.spec.js +474 -0
- package/dist/__tests__/api/dashboard.controller.spec.js.map +1 -0
- package/dist/__tests__/api/tag.controller.spec.d.ts +2 -0
- package/dist/__tests__/api/tag.controller.spec.d.ts.map +1 -0
- package/dist/__tests__/api/tag.controller.spec.js +280 -0
- package/dist/__tests__/api/tag.controller.spec.js.map +1 -0
- package/dist/__tests__/collector.service.spec.d.ts +2 -0
- package/dist/__tests__/collector.service.spec.d.ts.map +1 -0
- package/dist/__tests__/collector.service.spec.js +240 -0
- package/dist/__tests__/collector.service.spec.js.map +1 -0
- package/dist/__tests__/core/collector.service.spec.d.ts +2 -0
- package/dist/__tests__/core/collector.service.spec.d.ts.map +1 -0
- package/dist/__tests__/core/collector.service.spec.js +526 -0
- package/dist/__tests__/core/collector.service.spec.js.map +1 -0
- package/dist/__tests__/core/family-hash.service.spec.d.ts +2 -0
- package/dist/__tests__/core/family-hash.service.spec.d.ts.map +1 -0
- package/dist/__tests__/core/family-hash.service.spec.js +1117 -0
- package/dist/__tests__/core/family-hash.service.spec.js.map +1 -0
- package/dist/__tests__/core/pruning.service.spec.d.ts +2 -0
- package/dist/__tests__/core/pruning.service.spec.d.ts.map +1 -0
- package/dist/__tests__/core/pruning.service.spec.js +224 -0
- package/dist/__tests__/core/pruning.service.spec.js.map +1 -0
- package/dist/__tests__/core/storage/sqlite.storage.spec.d.ts +2 -0
- package/dist/__tests__/core/storage/sqlite.storage.spec.d.ts.map +1 -0
- package/dist/__tests__/core/storage/sqlite.storage.spec.js +853 -0
- package/dist/__tests__/core/storage/sqlite.storage.spec.js.map +1 -0
- package/dist/__tests__/core/tag.service.spec.d.ts +2 -0
- package/dist/__tests__/core/tag.service.spec.d.ts.map +1 -0
- package/dist/__tests__/core/tag.service.spec.js +994 -0
- package/dist/__tests__/core/tag.service.spec.js.map +1 -0
- package/dist/__tests__/family-hash.service.spec.d.ts +2 -0
- package/dist/__tests__/family-hash.service.spec.d.ts.map +1 -0
- package/dist/__tests__/family-hash.service.spec.js +325 -0
- package/dist/__tests__/family-hash.service.spec.js.map +1 -0
- package/dist/__tests__/filters/api-filters.spec.d.ts +2 -0
- package/dist/__tests__/filters/api-filters.spec.d.ts.map +1 -0
- package/dist/__tests__/filters/api-filters.spec.js +172 -0
- package/dist/__tests__/filters/api-filters.spec.js.map +1 -0
- package/dist/__tests__/filters/entry-factories.d.ts +20 -0
- package/dist/__tests__/filters/entry-factories.d.ts.map +1 -0
- package/dist/__tests__/filters/entry-factories.js +288 -0
- package/dist/__tests__/filters/entry-factories.js.map +1 -0
- package/dist/__tests__/filters/filter-contract.spec.d.ts +2 -0
- package/dist/__tests__/filters/filter-contract.spec.d.ts.map +1 -0
- package/dist/__tests__/filters/filter-contract.spec.js +230 -0
- package/dist/__tests__/filters/filter-contract.spec.js.map +1 -0
- package/dist/__tests__/filters/filter-test-data.d.ts +26 -0
- package/dist/__tests__/filters/filter-test-data.d.ts.map +1 -0
- package/dist/__tests__/filters/filter-test-data.js +374 -0
- package/dist/__tests__/filters/filter-test-data.js.map +1 -0
- package/dist/__tests__/filters/storage-filters.spec.d.ts +2 -0
- package/dist/__tests__/filters/storage-filters.spec.d.ts.map +1 -0
- package/dist/__tests__/filters/storage-filters.spec.js +699 -0
- package/dist/__tests__/filters/storage-filters.spec.js.map +1 -0
- package/dist/__tests__/filters/test-utils.d.ts +23 -0
- package/dist/__tests__/filters/test-utils.d.ts.map +1 -0
- package/dist/__tests__/filters/test-utils.js +54 -0
- package/dist/__tests__/filters/test-utils.js.map +1 -0
- package/dist/__tests__/nestlens.module.spec.d.ts +2 -0
- package/dist/__tests__/nestlens.module.spec.d.ts.map +1 -0
- package/dist/__tests__/nestlens.module.spec.js +620 -0
- package/dist/__tests__/nestlens.module.spec.js.map +1 -0
- package/dist/__tests__/pruning.service.spec.d.ts +2 -0
- package/dist/__tests__/pruning.service.spec.d.ts.map +1 -0
- package/dist/__tests__/pruning.service.spec.js +142 -0
- package/dist/__tests__/pruning.service.spec.js.map +1 -0
- package/dist/__tests__/setup.d.ts +7 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +24 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/__tests__/tag.service.spec.d.ts +2 -0
- package/dist/__tests__/tag.service.spec.d.ts.map +1 -0
- package/dist/__tests__/tag.service.spec.js +482 -0
- package/dist/__tests__/tag.service.spec.js.map +1 -0
- package/dist/__tests__/watchers/batch.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/batch.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/batch.watcher.spec.js +515 -0
- package/dist/__tests__/watchers/batch.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/cache.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/cache.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/cache.watcher.spec.js +395 -0
- package/dist/__tests__/watchers/cache.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/command.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/command.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/command.watcher.spec.js +598 -0
- package/dist/__tests__/watchers/command.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/dump.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/dump.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/dump.watcher.spec.js +724 -0
- package/dist/__tests__/watchers/dump.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/event.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/event.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/event.watcher.spec.js +316 -0
- package/dist/__tests__/watchers/event.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/exception.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/exception.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/exception.watcher.spec.js +495 -0
- package/dist/__tests__/watchers/exception.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/gate.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/gate.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/gate.watcher.spec.js +683 -0
- package/dist/__tests__/watchers/gate.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/http-client.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/http-client.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/http-client.watcher.spec.js +888 -0
- package/dist/__tests__/watchers/http-client.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/job.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/job.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/job.watcher.spec.js +513 -0
- package/dist/__tests__/watchers/job.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/log.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/log.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/log.watcher.spec.js +428 -0
- package/dist/__tests__/watchers/log.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/mail.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/mail.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/mail.watcher.spec.js +425 -0
- package/dist/__tests__/watchers/mail.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/model.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/model.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/model.watcher.spec.js +675 -0
- package/dist/__tests__/watchers/model.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/notification.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/notification.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/notification.watcher.spec.js +595 -0
- package/dist/__tests__/watchers/notification.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/query/types.spec.d.ts +2 -0
- package/dist/__tests__/watchers/query/types.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/query/types.spec.js +292 -0
- package/dist/__tests__/watchers/query/types.spec.js.map +1 -0
- package/dist/__tests__/watchers/query.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/query.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/query.watcher.spec.js +597 -0
- package/dist/__tests__/watchers/query.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/redis.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/redis.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/redis.watcher.spec.js +634 -0
- package/dist/__tests__/watchers/redis.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/request.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/request.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/request.watcher.spec.js +1017 -0
- package/dist/__tests__/watchers/request.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/schedule.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/schedule.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/schedule.watcher.spec.js +338 -0
- package/dist/__tests__/watchers/schedule.watcher.spec.js.map +1 -0
- package/dist/__tests__/watchers/view.watcher.spec.d.ts +2 -0
- package/dist/__tests__/watchers/view.watcher.spec.d.ts.map +1 -0
- package/dist/__tests__/watchers/view.watcher.spec.js +564 -0
- package/dist/__tests__/watchers/view.watcher.spec.js.map +1 -0
- package/dist/api/api.controller.d.ts +193 -0
- package/dist/api/api.controller.d.ts.map +1 -0
- package/dist/api/api.controller.js +562 -0
- package/dist/api/api.controller.js.map +1 -0
- package/dist/api/api.guard.d.ts +77 -0
- package/dist/api/api.guard.d.ts.map +1 -0
- package/dist/api/api.guard.js +294 -0
- package/dist/api/api.guard.js.map +1 -0
- package/dist/api/dashboard.controller.d.ts +49 -0
- package/dist/api/dashboard.controller.d.ts.map +1 -0
- package/dist/api/dashboard.controller.js +472 -0
- package/dist/api/dashboard.controller.js.map +1 -0
- package/dist/api/index.d.ts +5 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +21 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/tag.controller.d.ts +65 -0
- package/dist/api/tag.controller.d.ts.map +1 -0
- package/dist/api/tag.controller.js +149 -0
- package/dist/api/tag.controller.js.map +1 -0
- package/dist/core/collector.service.d.ts +80 -0
- package/dist/core/collector.service.d.ts.map +1 -0
- package/dist/core/collector.service.js +255 -0
- package/dist/core/collector.service.js.map +1 -0
- package/dist/core/family-hash.service.d.ts +64 -0
- package/dist/core/family-hash.service.d.ts.map +1 -0
- package/dist/core/family-hash.service.js +281 -0
- package/dist/core/family-hash.service.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +20 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/pruning.service.d.ts +16 -0
- package/dist/core/pruning.service.d.ts.map +1 -0
- package/dist/core/pruning.service.js +71 -0
- package/dist/core/pruning.service.js.map +1 -0
- package/dist/core/storage/index.d.ts +3 -0
- package/dist/core/storage/index.d.ts.map +1 -0
- package/dist/core/storage/index.js +19 -0
- package/dist/core/storage/index.js.map +1 -0
- package/dist/core/storage/sqlite.storage.d.ts +60 -0
- package/dist/core/storage/sqlite.storage.d.ts.map +1 -0
- package/dist/core/storage/sqlite.storage.js +929 -0
- package/dist/core/storage/sqlite.storage.js.map +1 -0
- package/dist/core/storage/storage.interface.d.ts +122 -0
- package/dist/core/storage/storage.interface.d.ts.map +1 -0
- package/dist/core/storage/storage.interface.js +5 -0
- package/dist/core/storage/storage.interface.js.map +1 -0
- package/dist/core/tag.service.d.ts +71 -0
- package/dist/core/tag.service.d.ts.map +1 -0
- package/dist/core/tag.service.js +568 -0
- package/dist/core/tag.service.js.map +1 -0
- package/dist/dashboard/public/assets/BatchesPage-DFT4fKlJ.js +1 -0
- package/dist/dashboard/public/assets/CachePage-CRy1Tjb8.js +1 -0
- package/dist/dashboard/public/assets/ClickableBadge-CV5J3THx.js +1 -0
- package/dist/dashboard/public/assets/CommandsPage-DdRnTm-W.js +1 -0
- package/dist/dashboard/public/assets/DashboardPage-CjaRZXYy.js +26 -0
- package/dist/dashboard/public/assets/DataTable-B6o9H8lh.js +88 -0
- package/dist/dashboard/public/assets/DumpsPage-DO8y1RTg.js +1 -0
- package/dist/dashboard/public/assets/EntryDetailPage-By-YcAGL.js +125 -0
- package/dist/dashboard/public/assets/EventsPage-u-r4AiT4.js +1 -0
- package/dist/dashboard/public/assets/ExceptionsPage-DXUcARr1.js +6 -0
- package/dist/dashboard/public/assets/GatesPage-DpeP7CDZ.js +1 -0
- package/dist/dashboard/public/assets/HttpClientPage-BJ4-5E6t.js +1 -0
- package/dist/dashboard/public/assets/JobsPage-Dv3KaX2x.js +1 -0
- package/dist/dashboard/public/assets/LogsPage-D0Q3yDb1.js +1 -0
- package/dist/dashboard/public/assets/MailPage-Bf8C6WF6.js +1 -0
- package/dist/dashboard/public/assets/ModelsPage-BMHncI5y.js +1 -0
- package/dist/dashboard/public/assets/NotificationsPage-D5-I-Oxb.js +1 -0
- package/dist/dashboard/public/assets/QueriesPage-oNp0i6Gt.js +1 -0
- package/dist/dashboard/public/assets/RedisPage-_GeS2OD8.js +1 -0
- package/dist/dashboard/public/assets/RequestsPage-BCwqu9US.js +1 -0
- package/dist/dashboard/public/assets/SchedulePage-CR0P-oX6.js +1 -0
- package/dist/dashboard/public/assets/ViewsPage-Dsy5ECRA.js +1 -0
- package/dist/dashboard/public/assets/calendar-DfK3x-6B.js +6 -0
- package/dist/dashboard/public/assets/circle-check-big-DcsYW8y8.js +6 -0
- package/dist/dashboard/public/assets/format-BFldcnCk.js +1 -0
- package/dist/dashboard/public/assets/index-DmeA1maE.css +1 -0
- package/dist/dashboard/public/assets/index-rkbGYdU7.js +351 -0
- package/dist/dashboard/public/assets/types-Cldoe2db.js +1 -0
- package/dist/dashboard/public/assets/vendor-B2nVRih0.js +43 -0
- package/dist/dashboard/public/assets/zap-DqtRi0JM.js +6 -0
- package/dist/dashboard/public/index.html +15 -0
- package/dist/dashboard/public/nestlens-icon.svg +9 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/nestlens.config.d.ts +216 -0
- package/dist/nestlens.config.d.ts.map +1 -0
- package/dist/nestlens.config.js +57 -0
- package/dist/nestlens.config.js.map +1 -0
- package/dist/nestlens.module.d.ts +10 -0
- package/dist/nestlens.module.d.ts.map +1 -0
- package/dist/nestlens.module.js +211 -0
- package/dist/nestlens.module.js.map +1 -0
- package/dist/types/entry.types.d.ts +368 -0
- package/dist/types/entry.types.d.ts.map +1 -0
- package/dist/types/entry.types.js +3 -0
- package/dist/types/entry.types.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +20 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/request.types.d.ts +9 -0
- package/dist/types/request.types.d.ts.map +1 -0
- package/dist/types/request.types.js +3 -0
- package/dist/types/request.types.js.map +1 -0
- package/dist/types/tag.types.d.ts +32 -0
- package/dist/types/tag.types.d.ts.map +1 -0
- package/dist/types/tag.types.js +3 -0
- package/dist/types/tag.types.js.map +1 -0
- package/dist/watchers/batch.watcher.d.ts +48 -0
- package/dist/watchers/batch.watcher.d.ts.map +1 -0
- package/dist/watchers/batch.watcher.js +185 -0
- package/dist/watchers/batch.watcher.js.map +1 -0
- package/dist/watchers/cache.watcher.d.ts +19 -0
- package/dist/watchers/cache.watcher.d.ts.map +1 -0
- package/dist/watchers/cache.watcher.js +158 -0
- package/dist/watchers/cache.watcher.js.map +1 -0
- package/dist/watchers/command.watcher.d.ts +32 -0
- package/dist/watchers/command.watcher.d.ts.map +1 -0
- package/dist/watchers/command.watcher.js +174 -0
- package/dist/watchers/command.watcher.js.map +1 -0
- package/dist/watchers/dump.watcher.d.ts +52 -0
- package/dist/watchers/dump.watcher.d.ts.map +1 -0
- package/dist/watchers/dump.watcher.js +234 -0
- package/dist/watchers/dump.watcher.js.map +1 -0
- package/dist/watchers/event.watcher.d.ts +20 -0
- package/dist/watchers/event.watcher.d.ts.map +1 -0
- package/dist/watchers/event.watcher.js +123 -0
- package/dist/watchers/event.watcher.js.map +1 -0
- package/dist/watchers/exception.watcher.d.ts +15 -0
- package/dist/watchers/exception.watcher.d.ts.map +1 -0
- package/dist/watchers/exception.watcher.js +117 -0
- package/dist/watchers/exception.watcher.js.map +1 -0
- package/dist/watchers/gate.watcher.d.ts +40 -0
- package/dist/watchers/gate.watcher.d.ts.map +1 -0
- package/dist/watchers/gate.watcher.js +200 -0
- package/dist/watchers/gate.watcher.js.map +1 -0
- package/dist/watchers/http-client.watcher.d.ts +34 -0
- package/dist/watchers/http-client.watcher.d.ts.map +1 -0
- package/dist/watchers/http-client.watcher.js +259 -0
- package/dist/watchers/http-client.watcher.js.map +1 -0
- package/dist/watchers/index.d.ts +19 -0
- package/dist/watchers/index.d.ts.map +1 -0
- package/dist/watchers/index.js +35 -0
- package/dist/watchers/index.js.map +1 -0
- package/dist/watchers/job.watcher.d.ts +27 -0
- package/dist/watchers/job.watcher.d.ts.map +1 -0
- package/dist/watchers/job.watcher.js +190 -0
- package/dist/watchers/job.watcher.js.map +1 -0
- package/dist/watchers/log.watcher.d.ts +26 -0
- package/dist/watchers/log.watcher.d.ts.map +1 -0
- package/dist/watchers/log.watcher.js +122 -0
- package/dist/watchers/log.watcher.js.map +1 -0
- package/dist/watchers/mail.watcher.d.ts +26 -0
- package/dist/watchers/mail.watcher.d.ts.map +1 -0
- package/dist/watchers/mail.watcher.js +154 -0
- package/dist/watchers/mail.watcher.js.map +1 -0
- package/dist/watchers/model.watcher.d.ts +54 -0
- package/dist/watchers/model.watcher.d.ts.map +1 -0
- package/dist/watchers/model.watcher.js +343 -0
- package/dist/watchers/model.watcher.js.map +1 -0
- package/dist/watchers/notification.watcher.d.ts +48 -0
- package/dist/watchers/notification.watcher.d.ts.map +1 -0
- package/dist/watchers/notification.watcher.js +215 -0
- package/dist/watchers/notification.watcher.js.map +1 -0
- package/dist/watchers/query/index.d.ts +3 -0
- package/dist/watchers/query/index.d.ts.map +1 -0
- package/dist/watchers/query/index.js +19 -0
- package/dist/watchers/query/index.js.map +1 -0
- package/dist/watchers/query/query.watcher.d.ts +27 -0
- package/dist/watchers/query/query.watcher.d.ts.map +1 -0
- package/dist/watchers/query/query.watcher.js +167 -0
- package/dist/watchers/query/query.watcher.js.map +1 -0
- package/dist/watchers/query/types.d.ts +60 -0
- package/dist/watchers/query/types.d.ts.map +1 -0
- package/dist/watchers/query/types.js +55 -0
- package/dist/watchers/query/types.js.map +1 -0
- package/dist/watchers/redis.watcher.d.ts +43 -0
- package/dist/watchers/redis.watcher.d.ts.map +1 -0
- package/dist/watchers/redis.watcher.js +225 -0
- package/dist/watchers/redis.watcher.js.map +1 -0
- package/dist/watchers/request.watcher.d.ts +21 -0
- package/dist/watchers/request.watcher.d.ts.map +1 -0
- package/dist/watchers/request.watcher.js +287 -0
- package/dist/watchers/request.watcher.js.map +1 -0
- package/dist/watchers/schedule.watcher.d.ts +25 -0
- package/dist/watchers/schedule.watcher.d.ts.map +1 -0
- package/dist/watchers/schedule.watcher.js +168 -0
- package/dist/watchers/schedule.watcher.js.map +1 -0
- package/dist/watchers/view.watcher.d.ts +51 -0
- package/dist/watchers/view.watcher.d.ts.map +1 -0
- package/dist/watchers/view.watcher.js +219 -0
- package/dist/watchers/view.watcher.js.map +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.TagController = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const tag_service_1 = require("../core/tag.service");
|
|
18
|
+
const nestlens_config_1 = require("../nestlens.config");
|
|
19
|
+
const api_guard_1 = require("./api.guard");
|
|
20
|
+
let TagController = class TagController {
|
|
21
|
+
constructor(tagService) {
|
|
22
|
+
this.tagService = tagService;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get all tags with their counts
|
|
26
|
+
*/
|
|
27
|
+
async getAllTags() {
|
|
28
|
+
const tags = await this.tagService.getAllTags();
|
|
29
|
+
return { data: tags };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get entries by tag(s)
|
|
33
|
+
*/
|
|
34
|
+
async getEntriesByTags(tagsParam, logic, limit) {
|
|
35
|
+
const tags = tagsParam.split(',').map(t => t.trim()).filter(Boolean);
|
|
36
|
+
const entries = await this.tagService.findByTags(tags, logic || 'OR', limit ? parseInt(limit, 10) : 50);
|
|
37
|
+
return { data: entries };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get tags for a specific entry
|
|
41
|
+
*/
|
|
42
|
+
async getEntryTags(id) {
|
|
43
|
+
const tags = await this.tagService.getEntryTags(id);
|
|
44
|
+
return { data: tags };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Add tags to an entry
|
|
48
|
+
*/
|
|
49
|
+
async addTagsToEntry(id, body) {
|
|
50
|
+
await this.tagService.addTags(id, body.tags);
|
|
51
|
+
const tags = await this.tagService.getEntryTags(id);
|
|
52
|
+
return { success: true, data: tags };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Remove tags from an entry
|
|
56
|
+
*/
|
|
57
|
+
async removeTagsFromEntry(id, body) {
|
|
58
|
+
await this.tagService.removeTags(id, body.tags);
|
|
59
|
+
const tags = await this.tagService.getEntryTags(id);
|
|
60
|
+
return { success: true, data: tags };
|
|
61
|
+
}
|
|
62
|
+
// ==================== Monitored Tags ====================
|
|
63
|
+
/**
|
|
64
|
+
* Get all monitored tags
|
|
65
|
+
*/
|
|
66
|
+
async getMonitoredTags() {
|
|
67
|
+
const tags = await this.tagService.getMonitoredTagsWithCounts();
|
|
68
|
+
return { data: tags };
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Add a monitored tag
|
|
72
|
+
*/
|
|
73
|
+
async addMonitoredTag(body) {
|
|
74
|
+
const tag = await this.tagService.addMonitoredTag(body.tag);
|
|
75
|
+
return { success: true, data: tag };
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Remove a monitored tag
|
|
79
|
+
*/
|
|
80
|
+
async removeMonitoredTag(tag) {
|
|
81
|
+
await this.tagService.removeMonitoredTag(tag);
|
|
82
|
+
return { success: true };
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
exports.TagController = TagController;
|
|
86
|
+
__decorate([
|
|
87
|
+
(0, common_1.Get)(),
|
|
88
|
+
__metadata("design:type", Function),
|
|
89
|
+
__metadata("design:paramtypes", []),
|
|
90
|
+
__metadata("design:returntype", Promise)
|
|
91
|
+
], TagController.prototype, "getAllTags", null);
|
|
92
|
+
__decorate([
|
|
93
|
+
(0, common_1.Get)('entries'),
|
|
94
|
+
__param(0, (0, common_1.Query)('tags')),
|
|
95
|
+
__param(1, (0, common_1.Query)('logic')),
|
|
96
|
+
__param(2, (0, common_1.Query)('limit')),
|
|
97
|
+
__metadata("design:type", Function),
|
|
98
|
+
__metadata("design:paramtypes", [String, String, String]),
|
|
99
|
+
__metadata("design:returntype", Promise)
|
|
100
|
+
], TagController.prototype, "getEntriesByTags", null);
|
|
101
|
+
__decorate([
|
|
102
|
+
(0, common_1.Get)('entry/:id'),
|
|
103
|
+
__param(0, (0, common_1.Param)('id', common_1.ParseIntPipe)),
|
|
104
|
+
__metadata("design:type", Function),
|
|
105
|
+
__metadata("design:paramtypes", [Number]),
|
|
106
|
+
__metadata("design:returntype", Promise)
|
|
107
|
+
], TagController.prototype, "getEntryTags", null);
|
|
108
|
+
__decorate([
|
|
109
|
+
(0, common_1.Post)('entry/:id'),
|
|
110
|
+
__param(0, (0, common_1.Param)('id', common_1.ParseIntPipe)),
|
|
111
|
+
__param(1, (0, common_1.Body)()),
|
|
112
|
+
__metadata("design:type", Function),
|
|
113
|
+
__metadata("design:paramtypes", [Number, Object]),
|
|
114
|
+
__metadata("design:returntype", Promise)
|
|
115
|
+
], TagController.prototype, "addTagsToEntry", null);
|
|
116
|
+
__decorate([
|
|
117
|
+
(0, common_1.Delete)('entry/:id'),
|
|
118
|
+
__param(0, (0, common_1.Param)('id', common_1.ParseIntPipe)),
|
|
119
|
+
__param(1, (0, common_1.Body)()),
|
|
120
|
+
__metadata("design:type", Function),
|
|
121
|
+
__metadata("design:paramtypes", [Number, Object]),
|
|
122
|
+
__metadata("design:returntype", Promise)
|
|
123
|
+
], TagController.prototype, "removeTagsFromEntry", null);
|
|
124
|
+
__decorate([
|
|
125
|
+
(0, common_1.Get)('monitored'),
|
|
126
|
+
__metadata("design:type", Function),
|
|
127
|
+
__metadata("design:paramtypes", []),
|
|
128
|
+
__metadata("design:returntype", Promise)
|
|
129
|
+
], TagController.prototype, "getMonitoredTags", null);
|
|
130
|
+
__decorate([
|
|
131
|
+
(0, common_1.Post)('monitored'),
|
|
132
|
+
__param(0, (0, common_1.Body)()),
|
|
133
|
+
__metadata("design:type", Function),
|
|
134
|
+
__metadata("design:paramtypes", [Object]),
|
|
135
|
+
__metadata("design:returntype", Promise)
|
|
136
|
+
], TagController.prototype, "addMonitoredTag", null);
|
|
137
|
+
__decorate([
|
|
138
|
+
(0, common_1.Delete)('monitored/:tag'),
|
|
139
|
+
__param(0, (0, common_1.Param)('tag')),
|
|
140
|
+
__metadata("design:type", Function),
|
|
141
|
+
__metadata("design:paramtypes", [String]),
|
|
142
|
+
__metadata("design:returntype", Promise)
|
|
143
|
+
], TagController.prototype, "removeMonitoredTag", null);
|
|
144
|
+
exports.TagController = TagController = __decorate([
|
|
145
|
+
(0, common_1.Controller)(`${nestlens_config_1.NESTLENS_API_PREFIX}/api/tags`),
|
|
146
|
+
(0, common_1.UseGuards)(api_guard_1.NestLensGuard),
|
|
147
|
+
__metadata("design:paramtypes", [tag_service_1.TagService])
|
|
148
|
+
], TagController);
|
|
149
|
+
//# sourceMappingURL=tag.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag.controller.js","sourceRoot":"","sources":["../../src/api/tag.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { OnModuleDestroy } from '@nestjs/common';
|
|
2
|
+
import { Entry, EntryType } from '../types';
|
|
3
|
+
import { StorageInterface } from './storage/storage.interface';
|
|
4
|
+
import { TagService } from './tag.service';
|
|
5
|
+
import { FamilyHashService } from './family-hash.service';
|
|
6
|
+
import { NestLensConfig } from '../nestlens.config';
|
|
7
|
+
export declare class CollectorService implements OnModuleDestroy {
|
|
8
|
+
private readonly storage;
|
|
9
|
+
private readonly config;
|
|
10
|
+
private readonly tagService?;
|
|
11
|
+
private readonly familyHashService?;
|
|
12
|
+
private readonly logger;
|
|
13
|
+
private buffer;
|
|
14
|
+
private flushTimer;
|
|
15
|
+
private readonly BUFFER_SIZE;
|
|
16
|
+
private readonly FLUSH_INTERVAL;
|
|
17
|
+
private isPaused;
|
|
18
|
+
private pausedAt?;
|
|
19
|
+
private pauseReason?;
|
|
20
|
+
constructor(storage: StorageInterface, config: NestLensConfig, tagService?: TagService | undefined, familyHashService?: FamilyHashService | undefined);
|
|
21
|
+
/**
|
|
22
|
+
* Apply filter to an entry
|
|
23
|
+
*/
|
|
24
|
+
private applyFilter;
|
|
25
|
+
/**
|
|
26
|
+
* Pause recording
|
|
27
|
+
*/
|
|
28
|
+
pause(reason?: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Resume recording
|
|
31
|
+
*/
|
|
32
|
+
resume(): void;
|
|
33
|
+
/**
|
|
34
|
+
* Get recording status
|
|
35
|
+
*/
|
|
36
|
+
getRecordingStatus(): {
|
|
37
|
+
isPaused: boolean;
|
|
38
|
+
pausedAt?: Date;
|
|
39
|
+
pauseReason?: string;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Collect an entry
|
|
43
|
+
* Uses discriminated union pattern - the type parameter determines the expected payload type
|
|
44
|
+
*/
|
|
45
|
+
collect<T extends EntryType>(type: T, payload: Extract<Entry, {
|
|
46
|
+
type: T;
|
|
47
|
+
}>['payload'], requestId?: string): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Collect and save immediately (for critical entries like exceptions)
|
|
50
|
+
* Uses discriminated union pattern - the type parameter determines the expected payload type
|
|
51
|
+
*/
|
|
52
|
+
collectImmediate<T extends EntryType>(type: T, payload: Extract<Entry, {
|
|
53
|
+
type: T;
|
|
54
|
+
}>['payload'], requestId?: string): Promise<Entry | null>;
|
|
55
|
+
/**
|
|
56
|
+
* Apply auto-tagging and family hash to a saved entry
|
|
57
|
+
*/
|
|
58
|
+
private applyAutoTagging;
|
|
59
|
+
/**
|
|
60
|
+
* Save entries with retry logic
|
|
61
|
+
*/
|
|
62
|
+
private saveWithRetry;
|
|
63
|
+
/**
|
|
64
|
+
* Flush buffer to storage
|
|
65
|
+
*/
|
|
66
|
+
flush(): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Start periodic flush timer
|
|
69
|
+
*/
|
|
70
|
+
private startFlushTimer;
|
|
71
|
+
/**
|
|
72
|
+
* Stop flush timer and flush remaining entries
|
|
73
|
+
*/
|
|
74
|
+
shutdown(): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Lifecycle hook - cleanup on module destroy
|
|
77
|
+
*/
|
|
78
|
+
onModuleDestroy(): Promise<void>;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=collector.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector.service.d.ts","sourceRoot":"","sources":["../../src/core/collector.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,eAAe,EAAY,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAW,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAmB,MAAM,oBAAoB,CAAC;AAErE,qBACa,gBAAiB,YAAW,eAAe;IAYpD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAjBrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAO;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAO;IACxB,OAAO,CAAC,WAAW,CAAC,CAAS;gBAIV,OAAO,EAAE,gBAAgB,EAEzB,MAAM,EAAE,cAAc,EAEtB,UAAU,CAAC,EAAE,UAAU,YAAA,EAEvB,iBAAiB,CAAC,EAAE,iBAAiB,YAAA;IAKxD;;OAEG;YACW,WAAW;IAWzB;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAS5B;;OAEG;IACH,MAAM,IAAI,IAAI;IASd;;OAEG;IACH,kBAAkB,IAAI;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;IAQlF;;;OAGG;IACG,OAAO,CAAC,CAAC,SAAS,SAAS,EAC/B,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,SAAS,CAAC,EAC/C,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IA2BhB;;;OAGG;IACG,gBAAgB,CAAC,CAAC,SAAS,SAAS,EACxC,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,SAAS,CAAC,EAC/C,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgCxB;;OAEG;YACW,gBAAgB;IAuB9B;;OAEG;YACW,aAAa;IAiB3B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ/B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvC"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var CollectorService_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.CollectorService = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const storage_interface_1 = require("./storage/storage.interface");
|
|
19
|
+
const tag_service_1 = require("./tag.service");
|
|
20
|
+
const family_hash_service_1 = require("./family-hash.service");
|
|
21
|
+
const nestlens_config_1 = require("../nestlens.config");
|
|
22
|
+
let CollectorService = CollectorService_1 = class CollectorService {
|
|
23
|
+
constructor(storage, config, tagService, familyHashService) {
|
|
24
|
+
this.storage = storage;
|
|
25
|
+
this.config = config;
|
|
26
|
+
this.tagService = tagService;
|
|
27
|
+
this.familyHashService = familyHashService;
|
|
28
|
+
this.logger = new common_1.Logger(CollectorService_1.name);
|
|
29
|
+
this.buffer = [];
|
|
30
|
+
this.flushTimer = null;
|
|
31
|
+
this.BUFFER_SIZE = 100;
|
|
32
|
+
this.FLUSH_INTERVAL = 1000; // 1 second
|
|
33
|
+
this.isPaused = false;
|
|
34
|
+
this.startFlushTimer();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Apply filter to an entry
|
|
38
|
+
*/
|
|
39
|
+
async applyFilter(entry) {
|
|
40
|
+
if (!this.config.filter)
|
|
41
|
+
return true;
|
|
42
|
+
try {
|
|
43
|
+
const result = this.config.filter(entry);
|
|
44
|
+
return result instanceof Promise ? await result : result;
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
this.logger.warn(`Filter callback error: ${error}`);
|
|
48
|
+
return true; // Fail-open - don't block collection on filter errors
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Pause recording
|
|
53
|
+
*/
|
|
54
|
+
pause(reason) {
|
|
55
|
+
if (!this.isPaused) {
|
|
56
|
+
this.isPaused = true;
|
|
57
|
+
this.pausedAt = new Date();
|
|
58
|
+
this.pauseReason = reason;
|
|
59
|
+
this.logger.log(`Recording paused${reason ? `: ${reason}` : ''}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Resume recording
|
|
64
|
+
*/
|
|
65
|
+
resume() {
|
|
66
|
+
if (this.isPaused) {
|
|
67
|
+
this.isPaused = false;
|
|
68
|
+
this.pausedAt = undefined;
|
|
69
|
+
this.pauseReason = undefined;
|
|
70
|
+
this.logger.log('Recording resumed');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get recording status
|
|
75
|
+
*/
|
|
76
|
+
getRecordingStatus() {
|
|
77
|
+
return {
|
|
78
|
+
isPaused: this.isPaused,
|
|
79
|
+
pausedAt: this.pausedAt,
|
|
80
|
+
pauseReason: this.pauseReason,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Collect an entry
|
|
85
|
+
* Uses discriminated union pattern - the type parameter determines the expected payload type
|
|
86
|
+
*/
|
|
87
|
+
async collect(type, payload, requestId) {
|
|
88
|
+
// Skip collection if paused
|
|
89
|
+
if (this.isPaused) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// Entry construction is type-safe: type and payload are correlated via the generic constraint
|
|
93
|
+
const entry = {
|
|
94
|
+
type,
|
|
95
|
+
payload,
|
|
96
|
+
requestId,
|
|
97
|
+
};
|
|
98
|
+
// Apply filter
|
|
99
|
+
const shouldCollect = await this.applyFilter(entry);
|
|
100
|
+
if (!shouldCollect) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
this.buffer.push(entry);
|
|
104
|
+
// Flush if buffer is full
|
|
105
|
+
if (this.buffer.length >= this.BUFFER_SIZE) {
|
|
106
|
+
await this.flush();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Collect and save immediately (for critical entries like exceptions)
|
|
111
|
+
* Uses discriminated union pattern - the type parameter determines the expected payload type
|
|
112
|
+
*/
|
|
113
|
+
async collectImmediate(type, payload, requestId) {
|
|
114
|
+
// Skip collection if paused
|
|
115
|
+
if (this.isPaused) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
// Entry construction is type-safe: type and payload are correlated via the generic constraint
|
|
119
|
+
const entry = {
|
|
120
|
+
type,
|
|
121
|
+
payload,
|
|
122
|
+
requestId,
|
|
123
|
+
};
|
|
124
|
+
// Apply filter
|
|
125
|
+
const shouldCollect = await this.applyFilter(entry);
|
|
126
|
+
if (!shouldCollect) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
const savedEntry = await this.storage.save(entry);
|
|
131
|
+
// Apply auto-tagging and family hash after saving
|
|
132
|
+
await this.applyAutoTagging(savedEntry);
|
|
133
|
+
return savedEntry;
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
this.logger.error(`Failed to save entry: ${error}`);
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Apply auto-tagging and family hash to a saved entry
|
|
142
|
+
*/
|
|
143
|
+
async applyAutoTagging(entry) {
|
|
144
|
+
if (!entry.id)
|
|
145
|
+
return;
|
|
146
|
+
try {
|
|
147
|
+
// Generate and save family hash
|
|
148
|
+
if (this.familyHashService) {
|
|
149
|
+
const familyHash = this.familyHashService.generateFamilyHash(entry);
|
|
150
|
+
if (familyHash) {
|
|
151
|
+
await this.storage.updateFamilyHash(entry.id, familyHash);
|
|
152
|
+
entry.familyHash = familyHash;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Auto-tag the entry
|
|
156
|
+
if (this.tagService) {
|
|
157
|
+
await this.tagService.autoTag(entry);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
// Don't fail the save if tagging fails
|
|
162
|
+
this.logger.warn(`Failed to apply auto-tagging to entry ${entry.id}: ${error}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Save entries with retry logic
|
|
167
|
+
*/
|
|
168
|
+
async saveWithRetry(entries, maxRetries = 3) {
|
|
169
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
170
|
+
try {
|
|
171
|
+
return await this.storage.saveBatch(entries);
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
if (attempt === maxRetries) {
|
|
175
|
+
this.logger.error(`Failed to save entries after ${maxRetries} attempts`, error);
|
|
176
|
+
throw error;
|
|
177
|
+
}
|
|
178
|
+
this.logger.warn(`Save attempt ${attempt} failed, retrying...`);
|
|
179
|
+
await new Promise(r => setTimeout(r, 100 * attempt));
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// This should never be reached, but TypeScript needs it
|
|
183
|
+
throw new Error('Unreachable code');
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Flush buffer to storage
|
|
187
|
+
*/
|
|
188
|
+
async flush() {
|
|
189
|
+
if (this.buffer.length === 0)
|
|
190
|
+
return;
|
|
191
|
+
let entries = [...this.buffer];
|
|
192
|
+
this.buffer = [];
|
|
193
|
+
// Apply batch filter if configured
|
|
194
|
+
if (this.config.filterBatch) {
|
|
195
|
+
try {
|
|
196
|
+
const result = this.config.filterBatch(entries);
|
|
197
|
+
entries = result instanceof Promise ? await result : result;
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
this.logger.warn(`Batch filter callback error: ${error}`);
|
|
201
|
+
// Fail-open - continue with original entries on filter error
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// Skip if all entries were filtered out
|
|
205
|
+
if (entries.length === 0)
|
|
206
|
+
return;
|
|
207
|
+
try {
|
|
208
|
+
const savedEntries = await this.saveWithRetry(entries);
|
|
209
|
+
// Optimized: Apply auto-tagging in parallel instead of sequentially
|
|
210
|
+
await Promise.all(savedEntries.map(entry => this.applyAutoTagging(entry)));
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
this.logger.error(`Failed to flush entries: ${error}`);
|
|
214
|
+
// Put entries back in buffer
|
|
215
|
+
this.buffer = [...entries, ...this.buffer];
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Start periodic flush timer
|
|
220
|
+
*/
|
|
221
|
+
startFlushTimer() {
|
|
222
|
+
this.flushTimer = setInterval(() => {
|
|
223
|
+
this.flush().catch((err) => {
|
|
224
|
+
this.logger.error(`Flush timer error: ${err}`);
|
|
225
|
+
});
|
|
226
|
+
}, this.FLUSH_INTERVAL);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Stop flush timer and flush remaining entries
|
|
230
|
+
*/
|
|
231
|
+
async shutdown() {
|
|
232
|
+
if (this.flushTimer) {
|
|
233
|
+
clearInterval(this.flushTimer);
|
|
234
|
+
this.flushTimer = null;
|
|
235
|
+
}
|
|
236
|
+
await this.flush();
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Lifecycle hook - cleanup on module destroy
|
|
240
|
+
*/
|
|
241
|
+
async onModuleDestroy() {
|
|
242
|
+
await this.shutdown();
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
exports.CollectorService = CollectorService;
|
|
246
|
+
exports.CollectorService = CollectorService = CollectorService_1 = __decorate([
|
|
247
|
+
(0, common_1.Injectable)(),
|
|
248
|
+
__param(0, (0, common_1.Inject)(storage_interface_1.STORAGE)),
|
|
249
|
+
__param(1, (0, common_1.Inject)(nestlens_config_1.NESTLENS_CONFIG)),
|
|
250
|
+
__param(2, (0, common_1.Optional)()),
|
|
251
|
+
__param(3, (0, common_1.Optional)()),
|
|
252
|
+
__metadata("design:paramtypes", [Object, Object, tag_service_1.TagService,
|
|
253
|
+
family_hash_service_1.FamilyHashService])
|
|
254
|
+
], CollectorService);
|
|
255
|
+
//# sourceMappingURL=collector.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector.service.js","sourceRoot":"","sources":["../../src/core/collector.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Entry } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Service for generating family hashes to group similar entries
|
|
4
|
+
*
|
|
5
|
+
* Family hashes allow grouping similar exceptions, queries, etc.
|
|
6
|
+
* to identify recurring issues and reduce noise in the dashboard.
|
|
7
|
+
*/
|
|
8
|
+
export declare class FamilyHashService {
|
|
9
|
+
private readonly logger;
|
|
10
|
+
/**
|
|
11
|
+
* Generate a family hash for an entry
|
|
12
|
+
* Returns undefined if no meaningful hash can be generated
|
|
13
|
+
*/
|
|
14
|
+
generateFamilyHash(entry: Entry): string | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Hash an exception based on name, file, and line number
|
|
17
|
+
*/
|
|
18
|
+
private hashException;
|
|
19
|
+
/**
|
|
20
|
+
* Hash a query based on normalized SQL
|
|
21
|
+
*/
|
|
22
|
+
private hashQuery;
|
|
23
|
+
/**
|
|
24
|
+
* Hash a log entry based on context and message pattern
|
|
25
|
+
*/
|
|
26
|
+
private hashLog;
|
|
27
|
+
/**
|
|
28
|
+
* Hash a command based on command name and handler
|
|
29
|
+
*/
|
|
30
|
+
private hashCommand;
|
|
31
|
+
/**
|
|
32
|
+
* Hash a gate based on gate name, action, and subject type
|
|
33
|
+
*/
|
|
34
|
+
private hashGate;
|
|
35
|
+
/**
|
|
36
|
+
* Hash a batch operation based on name and operation
|
|
37
|
+
*/
|
|
38
|
+
private hashBatch;
|
|
39
|
+
/**
|
|
40
|
+
* Extract file and line information from stack trace
|
|
41
|
+
*/
|
|
42
|
+
private extractStackInfo;
|
|
43
|
+
/**
|
|
44
|
+
* Normalize file path to remove node_modules and project root
|
|
45
|
+
*/
|
|
46
|
+
private normalizeFilePath;
|
|
47
|
+
/**
|
|
48
|
+
* Normalize SQL query by removing specific values
|
|
49
|
+
*/
|
|
50
|
+
private normalizeQuery;
|
|
51
|
+
/**
|
|
52
|
+
* Normalize error message by removing specific values
|
|
53
|
+
*/
|
|
54
|
+
private normalizeErrorMessage;
|
|
55
|
+
/**
|
|
56
|
+
* Normalize subject by removing IDs and specific values
|
|
57
|
+
*/
|
|
58
|
+
private normalizeSubject;
|
|
59
|
+
/**
|
|
60
|
+
* Create SHA256 hash of input, truncated to 16 characters
|
|
61
|
+
*/
|
|
62
|
+
private hash;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=family-hash.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"family-hash.service.d.ts","sourceRoot":"","sources":["../../src/core/family-hash.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC;;;;;GAKG;AACH,qBACa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAE7D;;;OAGG;IACH,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS;IAmBpD;;OAEG;IACH,OAAO,CAAC,aAAa;IAmBrB;;OAEG;IACH,OAAO,CAAC,SAAS;IAejB;;OAEG;IACH,OAAO,CAAC,OAAO;IAoBf;;OAEG;IACH,OAAO,CAAC,WAAW;IAanB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAgBhB;;OAEG;IACH,OAAO,CAAC,SAAS;IAYjB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,IAAI;CAOb"}
|