Skip to content

Commit e2a4330

Browse files
authored
Add worker metadata to init response (#613)
1 parent 8669352 commit e2a4330

File tree

2 files changed

+39
-15
lines changed

2 files changed

+39
-15
lines changed

src/eventHandlers/WorkerInitHandler.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import { access, constants } from 'fs';
55
import * as path from 'path';
66
import { AzureFunctionsRpcMessages as rpc } from '../../azure-functions-language-worker-protobuf/src/rpc';
7+
import { version as workerVersion } from '../constants';
78
import { startApp } from '../startApp';
89
import { isError } from '../utils/ensureErrorType';
910
import { nonNullProp } from '../utils/nonNull';
@@ -19,7 +20,14 @@ export class WorkerInitHandler extends EventHandler<'workerInitRequest', 'worker
1920
readonly responseName = 'workerInitResponse';
2021

2122
getDefaultResponse(_msg: rpc.IWorkerInitRequest): rpc.IWorkerInitResponse {
22-
return {};
23+
return {
24+
workerMetadata: {
25+
runtimeName: 'node',
26+
runtimeVersion: process.version,
27+
workerBitness: process.arch,
28+
workerVersion,
29+
},
30+
};
2331
}
2432

2533
async handleEvent(channel: WorkerChannel, msg: rpc.IWorkerInitRequest): Promise<rpc.IWorkerInitResponse> {

test/eventHandlers/WorkerInitHandler.test.ts

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,34 @@ export namespace Msg {
2727
};
2828
}
2929

30-
export const response: rpc.IStreamingMessage = {
31-
requestId: 'id',
32-
workerInitResponse: {
33-
capabilities: {
34-
RpcHttpBodyOnly: 'true',
35-
RpcHttpTriggerMetadataRemoved: 'true',
36-
IgnoreEmptyValuedRpcHttpHeaders: 'true',
37-
UseNullableValueDictionaryForHttp: 'true',
38-
WorkerStatus: 'true',
39-
TypedDataCollection: 'true',
40-
},
41-
result: {
42-
status: rpc.StatusResult.Status.Success,
30+
const workerMetadataRegExps = {
31+
'workerInitResponse.workerMetadata.runtimeVersion': /^v[0-9]+\.[0-9]+\.[0-9]+$/,
32+
'workerInitResponse.workerMetadata.workerBitness': /^(x64|ia32|arm64)$/,
33+
'workerInitResponse.workerMetadata.workerVersion': /^3\.[0-9]+\.[0-9]+$/,
34+
};
35+
36+
export const response = new RegExpStreamingMessage(
37+
{
38+
requestId: 'id',
39+
workerInitResponse: {
40+
capabilities: {
41+
RpcHttpBodyOnly: 'true',
42+
RpcHttpTriggerMetadataRemoved: 'true',
43+
IgnoreEmptyValuedRpcHttpHeaders: 'true',
44+
UseNullableValueDictionaryForHttp: 'true',
45+
WorkerStatus: 'true',
46+
TypedDataCollection: 'true',
47+
},
48+
result: {
49+
status: rpc.StatusResult.Status.Success,
50+
},
51+
workerMetadata: {
52+
runtimeName: 'node',
53+
},
4354
},
4455
},
45-
};
56+
workerMetadataRegExps
57+
);
4658

4759
export function failedResponse(fileName: string, errorMessage: string): RegExpStreamingMessage {
4860
const expectedMsg: rpc.IStreamingMessage = {
@@ -54,12 +66,16 @@ export namespace Msg {
5466
message: errorMessage,
5567
},
5668
},
69+
workerMetadata: {
70+
runtimeName: 'node',
71+
},
5772
},
5873
};
5974
return new RegExpStreamingMessage(expectedMsg, {
6075
'workerInitResponse.result.exception.stackTrace': new RegExp(
6176
`Error: ${escapeStringRegexp(errorMessage)}\\s*at`
6277
),
78+
...workerMetadataRegExps,
6379
});
6480
}
6581

0 commit comments

Comments
 (0)