-
Notifications
You must be signed in to change notification settings - Fork 1
/
dispose.js
252 lines (247 loc) · 12.1 KB
/
dispose.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
import _ from 'lodash'
import keymirror from 'keymirror'
import { splitLinkConfig, splitJobConfig, splitSubmissionConfig } from './utils'
export const hasoopMethodTypes = keymirror({
// version
getVersion: null,
// driver
getDriver: null,
// connector
getConnectorAll: null,
getConnectorByConnectorName: null,
// link
getLinkAll: null,
getLinkByConnectorName: null,
getLinkByLinkName: null,
createLink: null,
updateLinkConfig: null,
updateLinkEnable: null,
updateLinkDisable: null,
deleteLink: null,
deleteLinkAll: null,
// job
getJobAll: null,
getJobByJobName: null,
getJobByConnectorName: null,
createJob: null,
updateJobConfig: null,
updateJobEnable: null,
updateJobDisable: null,
deleteJob: null,
deleteJobAll: null,
// submission
startJob: null,
stopJob: null,
jobStatus: null,
getSubmissionAll: null,
getSubmissionByJobNam: null
})
function getVersionDispose (responseJson, responseHeaders) {
const isOk = _.get(responseJson, 'api-versions[0]') === 'v1'
return {isRight: isOk, data: responseJson, headers: responseHeaders}
}
function getDriverDispose (responseJson, responseHeaders) {
const isOk = responseJson.version === '1' && _.get(responseJson, ['all-config-resources', 'jarConfig.label']) === 'Classpath configuration'
return {isRight: isOk, data: responseJson, headers: responseHeaders}
}
function getConnectorAllDispose (responseJson, responseHeaders) {
const connectorNames = _.map(responseJson.connectors, 'name')
const isOk = responseJson.connectors.length === 7 && _.includes(connectorNames, 'generic-jdbc-connector')
const data = isOk ? responseJson.connectors : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function getConnectorByConnectorNameDispose (responseJson, responseHeaders, connectorName) {
const isOk = _.get(responseJson, 'connectors[0].name') === connectorName
const data = isOk ? responseJson.connectors[0] : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function getLinkAllDispose (responseJson, responseHeaders, linkName) {
return {isRight: true, data: responseJson.links, headers: responseHeaders}
}
function getLinkByConnectorNameDispose (responseJson, responseHeaders) {
const data = _.map(responseJson.links, linkObject => splitLinkConfig({links: [linkObject]}))
return {isRight: true, data, headers: responseHeaders}
}
function getLinkByLinkNameDispose (responseJson, responseHeaders, linkName) {
const linkConfig = splitLinkConfig(responseJson)
const linkConfigKeys = _.keys(linkConfig)
const isOk = linkConfig.name === linkName && _.includes(linkConfigKeys, 'id') && _.includes(linkConfigKeys, 'enabled') && _.includes(linkConfigKeys, 'connectorName')
const data = isOk ? linkConfig : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function createLinkDispose (responseJson, responseHeaders, linkName) {
const isOk = _.isEqual(responseJson, {name: linkName, 'validation-result': [{}]})
const data = isOk ? responseJson.name : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function updateLinkConfigDispose (responseJson, responseHeaders) {
const isOk = _.isEqual(responseJson, {'validation-result': [{}]})
const data = isOk ? {} : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function updateLinkEnableDispose (responseJson, responseHeaders) {
const isOk = _.isEqual(responseJson, {})
const data = isOk ? {} : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function updateLinkDisableDispose (responseJson, responseHeaders) {
const isOk = _.isEqual(responseJson, {})
const data = isOk ? {} : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function deleteLinkDispose (responseJson, responseHeaders) {
const isOk = _.isEqual(responseJson, {})
const data = isOk ? {} : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function deleteLinkAllDispose (responseJson, responseHeaders) {
const isOk = _.isEqual(responseJson, {})
const data = isOk ? {} : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function getJobAllDispose (responseJson, responseHeaders) {
const jobConfigs = _.map(responseJson.jobs, jobObject => splitJobConfig({jobs: [jobObject]}))
return {isRight: true, data: jobConfigs, headers: responseHeaders}
}
function getJobByJobNameDispose (responseJson, responseHeaders, jobName) {
const jobConfig = splitJobConfig(responseJson)
const jobConfigKeys = _.keys(jobConfig)
const isOK = jobConfig.topName === jobName && _.includes(jobConfigKeys, 'topName') && _.includes(jobConfigKeys, 'topEnabled') && _.includes(jobConfigKeys, 'topFromLinkName') && _.includes(jobConfigKeys, 'topToLinkName')
const data = isOK ? jobConfig : responseJson
return {isRight: isOK, data: data, headers: responseHeaders}
}
function getJobByConnectorNameDispose (responseJson, responseHeaders, connectorName) {
const jobConfigs = _.map(responseJson.jobs, jobObject => splitJobConfig({jobs: [jobObject]}))
return {isRight: true, data: jobConfigs, headers: responseHeaders}
}
function createJobDispose (responseJson, responseHeaders, jobName) {
const isOk = _.isEqual(responseJson, { name: jobName, 'validation-result': [ {}, {}, {} ] })
const data = isOk ? responseJson.name : responseJson
return {isRight: isOk, data: data, headers: responseHeaders}
}
function updateJobConfigDispose (responseJson, responseHeaders) {
const isOk = _.isEqual(responseJson, {'validation-result': [{}, {}, {}]})
const data = isOk ? {} : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function updateJobEnableDispose (responseJson, responseHeaders) {
const isOk = _.isEqual(responseJson, {})
const data = isOk ? {} : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function updateJobDisableDispose (responseJson, responseHeaders) {
const isOk = _.isEqual(responseJson, {})
const data = isOk ? {} : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function deleteJobDispose (responseJson, responseHeaders) {
const isOk = _.isEqual(responseJson, {})
const data = isOk ? {} : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function deleteJobAllDispose (responseJson, responseHeaders) {
const isOk = _.isEqual(responseJson, {})
const data = isOk ? {} : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function startJobDispose (responseJson, responseHeaders, jobName) {
const submissionConfig = splitSubmissionConfig(responseJson)
const isOk = submissionConfig.topConfig.jobName === jobName && _.includes(['BOOTING', 'RUNNING', 'SUCCEEDED'], submissionConfig.topConfig.status) && submissionConfig.fromSchemaConfig.columns.length > 0
const data = isOk ? submissionConfig : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function stopJobDispose (responseJson, responseHeaders, jobName) {
const submissionConfig = splitSubmissionConfig(responseJson)
const isOk = submissionConfig.topConfig.jobName === jobName && submissionConfig.topConfig.status === 'FAILED' && submissionConfig.topConfig.errorDetails === 'Application killed by user.'
const data = isOk ? submissionConfig : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function jobStatusDispose (responseJson, responseHeaders, jobName) {
const submissionConfig = splitSubmissionConfig(responseJson)
const isOk = submissionConfig.topConfig.jobName === jobName && _.includes(['BOOTING', 'FAILURE_ON_SUBMIT', 'RUNNING', 'SUCCEEDED', 'FAILED', 'NEVER_EXECUTED', 'UNKNOWN'], submissionConfig.topConfig.status)
const data = isOk ? submissionConfig : responseJson
return {isRight: isOk, data, headers: responseHeaders}
}
function getSubmissionAllDispose (responseJson, responseHeaders) {
// TODO
return {isRight: true, data: responseJson, headers: responseHeaders}
}
function getSubmissionByJobNameDispose (responseJson, responseHeaders) {
// TODO
return {isRight: true, data: responseJson, headers: responseHeaders}
}
export const isRightFromHeaders = res => res.headers.get('sqoop-error-code') === '1000' && res.headers.get('sqoop-error-message') === 'OK'
export const getResponseHeaders = res => ({
sqoopErrorCode: res.headers.get('sqoop-error-code'),
sqoopErrorMessage: res.headers.get('sqoop-error-message'),
sqoopInternalErrorCode: res.headers.get('sqoop-internal-error-code') || null,
sqoopInternalErrorMessage: res.headers.get('sqoop-internal-error-message') || null
})
export async function hasoopRequestDispose (methodName, res, ...params) {
if (!Object.keys(hasoopMethodTypes).includes(methodName)) {
throw new Error(`hasoop method ${methodName} is not supported`)
}
const responseJson = await res.json()
const responseHeaders = getResponseHeaders(res)
if (!isRightFromHeaders(res)) {
return {isRight: false, data: responseJson, headers: responseHeaders}
}
switch (methodName) {
case hasoopMethodTypes.getVersion:
return getVersionDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.getDriver:
return getDriverDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.getConnectorAll:
return getConnectorAllDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.getConnectorByConnectorName:
return getConnectorByConnectorNameDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.getLinkAll:
return getLinkAllDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.getLinkByConnectorName:
return getLinkByConnectorNameDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.getLinkByLinkName:
return getLinkByLinkNameDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.createLink:
return createLinkDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.updateLinkConfig:
return updateLinkConfigDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.updateLinkEnable:
return updateLinkEnableDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.updateLinkDisable:
return updateLinkDisableDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.deleteLink:
return deleteLinkDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.deleteLinkAll:
return deleteLinkAllDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.getJobAll:
return getJobAllDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.getJobByJobName:
return getJobByJobNameDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.getJobByConnectorName:
return getJobByConnectorNameDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.createJob:
return createJobDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.updateJobConfig:
return updateJobConfigDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.updateJobEnable:
return updateJobEnableDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.updateJobDisable:
return updateJobDisableDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.deleteJob:
return deleteJobDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.deleteJobAll:
return deleteJobAllDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.startJob:
return startJobDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.stopJob:
return stopJobDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.jobStatus:
return jobStatusDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.getSubmissionAll:
return getSubmissionAllDispose(responseJson, responseHeaders, ...params)
case hasoopMethodTypes.getSubmissionByJobName:
return getSubmissionByJobNameDispose(responseJson, responseHeaders, ...params)
default:
throw new Error(`hasoop method ${methodName} is not supported`)
}
}