diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 21bd2db995b..dac7928e94c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -10,6 +10,9 @@ on: # The only commits that will contain changes to the masterlist will be releases paths: - 'MASTERLIST.md' + pull_request: + branches: + - 'main' concurrency: group: deploy-and-release @@ -36,7 +39,7 @@ jobs: name: Create ECR for ${{ matrix.adapter.shortName }} runs-on: ubuntu-latest needs: [calculate-changes] - if: needs.calculate-changes.outputs.adapter-list != '{"adapter":[]}' + if: false permissions: # These are needed for the configure-aws-credentials action id-token: write contents: read @@ -67,7 +70,7 @@ jobs: permissions: contents: read id-token: write - needs: [calculate-changes, create-ecr] + needs: [calculate-changes] strategy: max-parallel: 20 matrix: ${{ fromJson(needs.calculate-changes.outputs.adapter-list) }} @@ -83,7 +86,7 @@ jobs: docker-image-tag-override: ${{ matrix.adapter.version }} docker-manifest-additional-tags: latest docker-push: true - environment: release + #environment: release git-sha: ${{ github.sha }} github-event-name: ${{ github.event_name }} github-ref-name: ${{ github.ref_name }} @@ -97,6 +100,7 @@ jobs: deploy: name: Trigger infra deployment + if: false permissions: id-token: write contents: read diff --git a/packages/sources/the-network-firm/package.json b/packages/sources/the-network-firm/package.json index e9ee8194884..5468db89785 100644 --- a/packages/sources/the-network-firm/package.json +++ b/packages/sources/the-network-firm/package.json @@ -24,7 +24,7 @@ "prepack": "yarn build", "build": "tsc -b", "server": "node -e 'require(\"./index.js\").server()'", - "server:dist": "node -e 'require(\"./dist/index.js\").server()'", + "server:dist": "node --inspect=0.0.0.0:9229 --expose-gc -e 'require(\"./dist/index.js\").server()'", "start": "yarn server:dist" }, "devDependencies": { diff --git a/packages/sources/the-network-firm/src/endpoint/heapdump.ts b/packages/sources/the-network-firm/src/endpoint/heapdump.ts new file mode 100644 index 00000000000..9a2bc8a7378 --- /dev/null +++ b/packages/sources/the-network-firm/src/endpoint/heapdump.ts @@ -0,0 +1,24 @@ +import { AdapterEndpoint } from '@chainlink/external-adapter-framework/adapter' +import { InputParameters } from '@chainlink/external-adapter-framework/validation' +import { config } from '../config' +import { customTransport } from '../transport/heapdump' + +export const inputParameters = new InputParameters({}, [{}]) + +export type BaseEndpointTypes = { + Parameters: typeof inputParameters.definition + Response: { + Data: { + snapshot: string + } + Result: null + } + Settings: typeof config.settings +} + +export const endpoint = new AdapterEndpoint({ + name: 'heapdump', + aliases: [], + transport: customTransport, + inputParameters, +}) diff --git a/packages/sources/the-network-firm/src/endpoint/index.ts b/packages/sources/the-network-firm/src/endpoint/index.ts index 15bd0945d30..5774589af5c 100644 --- a/packages/sources/the-network-firm/src/endpoint/index.ts +++ b/packages/sources/the-network-firm/src/endpoint/index.ts @@ -2,6 +2,7 @@ export { endpoint as backed } from './backed' export { endpoint as emgemx } from './emgemx' export { endpoint as eurr } from './eurr' export { endpoint as gift } from './gift' +export { endpoint as heapdump } from './heapdump' export { endpoint as mco2 } from './mco2' export { endpoint as reserve } from './reserve' export { endpoint as stbt } from './stbt' diff --git a/packages/sources/the-network-firm/src/index.ts b/packages/sources/the-network-firm/src/index.ts index d11f0ab7d34..21aec0ee48c 100644 --- a/packages/sources/the-network-firm/src/index.ts +++ b/packages/sources/the-network-firm/src/index.ts @@ -1,13 +1,24 @@ import { expose, ServerInstance } from '@chainlink/external-adapter-framework' import { PoRAdapter } from '@chainlink/external-adapter-framework/adapter/por' import { config } from './config' -import { backed, emgemx, eurr, gift, mco2, reserve, stbt, uranium, usdr } from './endpoint' +import { + backed, + emgemx, + eurr, + gift, + heapdump, + mco2, + reserve, + stbt, + uranium, + usdr, +} from './endpoint' export const adapter = new PoRAdapter({ defaultEndpoint: mco2.name, name: 'THE_NETWORK_FIRM', config, - endpoints: [backed, emgemx, eurr, gift, mco2, stbt, uranium, usdr, reserve], + endpoints: [backed, emgemx, eurr, gift, mco2, stbt, uranium, usdr, reserve, heapdump], rateLimiting: { tiers: { default: { diff --git a/packages/sources/the-network-firm/src/transport/heapdump.ts b/packages/sources/the-network-firm/src/transport/heapdump.ts new file mode 100644 index 00000000000..0c1431870ed --- /dev/null +++ b/packages/sources/the-network-firm/src/transport/heapdump.ts @@ -0,0 +1,55 @@ +import { ResponseCache } from '@chainlink/external-adapter-framework/cache/response' +import { Transport, TransportDependencies } from '@chainlink/external-adapter-framework/transports' +import { AdapterRequest, AdapterResponse } from '@chainlink/external-adapter-framework/util' +import { Requester } from '@chainlink/external-adapter-framework/util/requester' +import v8 from 'v8' +import { BaseEndpointTypes, inputParameters } from '../endpoint/heapdump' + +export type CustomTransportTypes = BaseEndpointTypes & { + Provider: { + RequestBody: never + ResponseBody: any + } +} +export class CustomTransport implements Transport { + name!: string + responseCache!: ResponseCache + requester!: Requester + + async initialize( + dependencies: TransportDependencies, + _adapterSettings: CustomTransportTypes['Settings'], + _endpointName: string, + transportName: string, + ): Promise { + this.responseCache = dependencies.responseCache + this.requester = dependencies.requester + this.name = transportName + } + async foregroundExecute( + _: AdapterRequest, + ): Promise> { + const chunks: Buffer[] = [] + const stream = v8.getHeapSnapshot() + for await (const chunk of stream) { + chunks.push(chunk instanceof Buffer ? chunk : Buffer.from(chunk)) + } + + const response = { + data: { + snapshot: Buffer.concat(chunks).toString('base64'), + }, + statusCode: 200, + result: null, + timestamps: { + providerDataRequestedUnixMs: Date.now(), + providerDataReceivedUnixMs: Date.now(), + providerIndicatedTimeUnixMs: undefined, + }, + } + + return response + } +} + +export const customTransport = new CustomTransport()