diff --git a/apps/tasks/package.json b/apps/tasks/package.json index 1b12522cd..c82f97af4 100644 --- a/apps/tasks/package.json +++ b/apps/tasks/package.json @@ -33,7 +33,8 @@ "@homarr/analytics": "workspace:^0.1.0", "dotenv": "^16.4.5", "node-cron": "^3.0.3", - "superjson": "2.2.1" + "superjson": "2.2.1", + "undici": "6.18.2" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", diff --git a/apps/tasks/src/main.ts b/apps/tasks/src/main.ts index 16327cd16..b428b019a 100644 --- a/apps/tasks/src/main.ts +++ b/apps/tasks/src/main.ts @@ -1,3 +1,6 @@ +// This import has to be the first import in the file so that the agent is overridden before any other modules are imported. +import "./undici-log-agent-override"; + import { jobs } from "./jobs"; import { seedServerSettingsAsync } from "./seed-server-settings"; diff --git a/apps/tasks/src/undici-log-agent-override.ts b/apps/tasks/src/undici-log-agent-override.ts new file mode 100644 index 000000000..8dfe9e8a3 --- /dev/null +++ b/apps/tasks/src/undici-log-agent-override.ts @@ -0,0 +1,20 @@ +import type { Dispatcher } from "undici"; +import { Agent, setGlobalDispatcher } from "undici"; + +import { logger } from "@homarr/log"; + +class LoggingAgent extends Agent { + constructor(...props: ConstructorParameters) { + super(...props); + } + + dispatch(options: Dispatcher.DispatchOptions, handler: Dispatcher.DispatchHandlers): boolean { + logger.info( + `Dispatching request ${options.method} ${options.origin as string}${options.path} (${Object.keys(options.headers as object).length} headers)`, + ); + return super.dispatch(options, handler); + } +} + +const agent = new LoggingAgent(); +setGlobalDispatcher(agent); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3fd792f2d..c4f911fce 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -297,6 +297,9 @@ importers: superjson: specifier: 2.2.1 version: 2.2.1 + undici: + specifier: 6.18.2 + version: 6.18.2 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -6171,6 +6174,10 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici@6.18.2: + resolution: {integrity: sha512-o/MQLTwRm9IVhOqhZ0NQ9oXax1ygPjw6Vs+Vq/4QRjbOAC3B1GCHy7TYxxbExKlb7bzDRzt9vBWU6BDz0RFfYg==} + engines: {node: '>=18.17'} + universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} @@ -11914,6 +11921,8 @@ snapshots: undici-types@5.26.5: {} + undici@6.18.2: {} + universalify@0.2.0: {} universalify@2.0.1: {}