Skip to content

Commit 1dda52a

Browse files
authored
Send single event to share experiment to Studio (#3422)
1 parent b48c80d commit 1dda52a

File tree

2 files changed

+43
-78
lines changed

2 files changed

+43
-78
lines changed

extension/src/patch.ts

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,14 @@ type ExperimentDetails = {
2424
params: ValueTreeRoot
2525
}
2626

27-
type BaseRequestBody = {
27+
type RequestBody = {
2828
client: 'vscode'
2929
repo_url: string
3030
name: string
3131
baseline_sha: string
32-
}
33-
34-
type StartRequestBody = BaseRequestBody & { type: 'start' }
35-
36-
type DoneRequestBody = BaseRequestBody & { type: 'done' }
37-
38-
type DataRequestBody = BaseRequestBody & {
3932
metrics: ValueTreeRoot
4033
params: ValueTreeRoot
41-
plots: ValueTreeRoot
42-
step: number
43-
type: 'data'
34+
type: 'done'
4435
}
4536

4637
const collectExperiment = (data: ExperimentFields) => {
@@ -96,7 +87,7 @@ const collectExperimentDetails = (
9687

9788
const sendPostRequest = (
9889
studioAccessToken: string,
99-
body: StartRequestBody | DataRequestBody | DoneRequestBody
90+
body: RequestBody
10091
): Promise<FetchResponse> =>
10192
fetch(STUDIO_ENDPOINT, {
10293
body: JSON.stringify(body),
@@ -124,42 +115,32 @@ const shareWithProgress = (
124115
): Thenable<unknown> =>
125116
Toast.showProgress('Sharing Experiment', async progress => {
126117
const { metrics, params, baselineSha, name } = experimentDetails
127-
const base: BaseRequestBody = {
128-
baseline_sha: baselineSha,
129-
client: 'vscode',
130-
name,
131-
repo_url: repoUrl
132-
}
133118

134119
progress.report({
135120
increment: 0,
136121
message: 'Initializing experiment...'
137122
})
123+
124+
progress.report({ increment: 50, message: 'Sending data...' })
138125
const response = await sendPostRequest(studioAccessToken, {
139-
...base,
140-
type: 'start'
126+
baseline_sha: baselineSha,
127+
client: 'vscode',
128+
metrics: metrics || {},
129+
name,
130+
params: params || {},
131+
repo_url: repoUrl,
132+
type: 'done'
141133
})
142134

135+
progress.report({ increment: 25, message: 'Response received...' })
136+
143137
if (response.status === 401) {
144-
progress.report({ increment: 100, message: 'Access unauthorized' })
138+
progress.report({ increment: 25, message: 'Access unauthorized' })
145139
void showUnauthorized()
146140
return Toast.delayProgressClosing()
147141
}
148142

149-
progress.report({ increment: 33, message: 'Sending data...' })
150-
await sendPostRequest(studioAccessToken, {
151-
...base,
152-
metrics: metrics || {},
153-
params: params || {},
154-
plots: {},
155-
step: 0,
156-
type: 'data'
157-
})
158-
159-
progress.report({ increment: 33, message: 'Completing process...' })
160-
await sendPostRequest(studioAccessToken, { ...base, type: 'done' })
161-
162-
progress.report({ increment: 33, message: 'Done' })
143+
progress.report({ increment: 25, message: 'Done' })
163144

164145
return Toast.delayProgressClosing()
165146
})

extension/src/test/suite/patch.test.ts

Lines changed: 27 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -58,50 +58,30 @@ suite('Patch Test Suite', () => {
5858

5959
expect(mockGetRemoteUrl).to.be.calledOnce
6060
expect(mockExpShow).to.be.calledOnce
61-
expect(mockFetch).to.be.calledThrice
61+
expect(mockFetch).to.be.calledOnce
6262

6363
const { metrics, name, params } = expShowFixture[
6464
'53c3851f46955fa3e2b8f6e1c52999acc8c9ea77'
6565
]['4fb124aebddb2adf1545030907687fa9a4c80e70'].data as ExperimentFields
6666

67-
const baseBody = {
68-
baseline_sha: '53c3851f46955fa3e2b8f6e1c52999acc8c9ea77',
69-
client: 'vscode',
70-
name,
71-
repo_url: mockRepoUrl
72-
}
73-
const headers = {
74-
Authorization: `token ${mockStudioAccessToken}`,
75-
'Content-type': 'application/json'
76-
}
77-
78-
expect(mockFetch).to.be.calledWithExactly(STUDIO_ENDPOINT, {
79-
body: JSON.stringify({ ...baseBody, type: 'start' }),
80-
headers,
81-
method: 'POST'
82-
})
83-
8467
expect(mockFetch).to.be.calledWithExactly(STUDIO_ENDPOINT, {
8568
body: JSON.stringify({
86-
...baseBody,
69+
baseline_sha: '53c3851f46955fa3e2b8f6e1c52999acc8c9ea77',
70+
client: 'vscode',
8771
metrics,
8872
name,
8973
params: {
9074
'params.yaml': params?.['params.yaml']?.data,
9175
[join('nested', 'params.yaml')]:
9276
params?.[join('nested', 'params.yaml')]?.data
9377
},
94-
plots: {},
95-
step: 0,
96-
type: 'data'
78+
repo_url: mockRepoUrl,
79+
type: 'done'
9780
}),
98-
headers,
99-
method: 'POST'
100-
})
101-
102-
expect(mockFetch).to.be.calledWithExactly(STUDIO_ENDPOINT, {
103-
body: JSON.stringify({ ...baseBody, type: 'done' }),
104-
headers,
81+
headers: {
82+
Authorization: `token ${mockStudioAccessToken}`,
83+
'Content-type': 'application/json'
84+
},
10585
method: 'POST'
10686
})
10787
})
@@ -145,24 +125,28 @@ suite('Patch Test Suite', () => {
145125
RegisteredCommands.CONNECT_SHOW
146126
)
147127

148-
const { name } = expShowFixture[
128+
const { metrics, params, name } = expShowFixture[
149129
'53c3851f46955fa3e2b8f6e1c52999acc8c9ea77'
150130
]['4fb124aebddb2adf1545030907687fa9a4c80e70'].data as ExperimentFields
151131

152-
const baseBody = {
153-
baseline_sha: '53c3851f46955fa3e2b8f6e1c52999acc8c9ea77',
154-
client: 'vscode',
155-
name,
156-
repo_url: mockRepoUrl
157-
}
158-
const headers = {
159-
Authorization: `token ${mockStudioAccessToken}`,
160-
'Content-type': 'application/json'
161-
}
162-
163132
expect(mockFetch).to.be.calledWithExactly(STUDIO_ENDPOINT, {
164-
body: JSON.stringify({ ...baseBody, type: 'start' }),
165-
headers,
133+
body: JSON.stringify({
134+
baseline_sha: '53c3851f46955fa3e2b8f6e1c52999acc8c9ea77',
135+
client: 'vscode',
136+
metrics,
137+
name,
138+
params: {
139+
'params.yaml': params?.['params.yaml']?.data,
140+
[join('nested', 'params.yaml')]:
141+
params?.[join('nested', 'params.yaml')]?.data
142+
},
143+
repo_url: mockRepoUrl,
144+
type: 'done'
145+
}),
146+
headers: {
147+
Authorization: `token ${mockStudioAccessToken}`,
148+
'Content-type': 'application/json'
149+
},
166150
method: 'POST'
167151
})
168152
})

0 commit comments

Comments
 (0)