@cloudbase/cli 2.2.13 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,255 +1,255 @@
1
- /* eslint-disable */
2
- var runtime = require('./runtime')
3
- var util = require('util')
4
-
5
- var initHandlerFault = 'function initialization failed'
6
- var maxRetMsgLen = 6 * 1024 * 1024 // byte
7
- var maxRetMsgLenExceedError = 'body size is too long'
8
- var httpHandler, eventHandler
9
-
10
- var _result, _fault
11
- var _user_exception = false
12
-
13
- function wrapLog(invokeId) {
14
- console.log = console.info = function prettyConsoleLog() {
15
- var message = `${util.format.apply(this, arguments)}`
16
- runtime.console_log(message)
17
- }
18
- console.error = console.warn = function prettyConsoleLogErr() {
19
- var message = `${util.format.apply(this, arguments)}`
20
- runtime.console_log(message, (err = true))
21
- }
22
- }
23
-
24
- function main() {
25
- if (0 != runtime.init()) {
26
- console.log('runtime init failed')
27
- return
28
- }
29
- runtime.log('init succ')
30
-
31
- cleanEnv()
32
-
33
- process.on('beforeExit', () => {
34
- runtime.log('catch exit')
35
- finish(null, null, false)
36
- })
37
- process.on('uncaughtException', err => {
38
- runtime.log('catch exception')
39
- finish(err, null, false)
40
- })
41
-
42
- waitForInvoke()
43
- }
44
-
45
- function cleanEnv() {
46
- var envToDelete = ['SOCKETPATH', 'CONTAINERID']
47
- for (var k in process.env) {
48
- if (k.startsWith('KUBERNETES')) {
49
- envToDelete.push(k)
50
- }
51
- }
52
-
53
- envToDelete.forEach(e => {
54
- delete process.env[e]
55
- })
56
- }
57
-
58
- function waitForInvoke() {
59
- runtime.log('wait for invoke')
60
- var invokeInfo = runtime.wait_for_invoke()
61
- setTimeout(() => {
62
- runtime.log('timed out, invoke')
63
- invoke(invokeInfo)
64
- }, 0)
65
- }
66
-
67
- function invoke(invokeInfo) {
68
- if (invokeInfo.cmd === 'RELOAD') {
69
- runtime.log(`get reload request: ${invokeInfo.context}`)
70
- // 路径中可能包含 . 符号
71
- var ff = invokeInfo.globalHandler.split('.')
72
- initHandler(invokeInfo.filePath + ff[0], ff[1])
73
- runtime.log('handlers reloaded')
74
- _result = 'reload'
75
- finish(null, null, false)
76
- return
77
- }
78
-
79
- _result = undefined
80
- _fault = undefined
81
-
82
- runtime.report_running()
83
-
84
- var ev, ctx
85
- if (invokeInfo.event || invokeInfo.context) {
86
- try {
87
- ev = JSON.parse(invokeInfo.event)
88
- ctx = JSON.parse(invokeInfo.context)
89
- } catch (err) {
90
- _fault = `eval event[${invokeInfo.event}] or context [${invokeInfo.context}] failed\n${err}`
91
- return
92
- }
93
- }
94
-
95
- ctx['environ'].split(';').forEach(e => {
96
- if (e == '') return
97
- var kv = e.split('=', 2)
98
- process.env[kv[0]] = kv[1]
99
- })
100
-
101
- runtime.log(`request[${ctx['request_id']}] invoked`)
102
-
103
- if (!httpHandler && !eventHandler) {
104
- _fault = initHandlerFault
105
- return
106
- }
107
-
108
- wrapLog(ctx['request_id'])
109
- if (invokeInfo.cmd === 'HTTP') {
110
- httpHandler.handle(invokeInfo.sockfd)
111
- } else if (invokeInfo.cmd === 'EVENT') {
112
- eventHandler.handle(ev, ctx)
113
- } else {
114
- _fault = `recv unknown task type: ${invokeInfo.cmd}`
115
- runtime.log(`recv unknown task type: ${invokeInfo.cmd}`)
116
- }
117
-
118
- runtime.log('process finished')
119
- }
120
-
121
- function initHandler(file, func) {
122
- try {
123
- var path = require('path')
124
- var current_path = path.dirname(file)
125
- process.chdir(current_path)
126
- runtime.log(`working directory: ${process.cwd()}`)
127
-
128
- for (var item in require.cache) {
129
- delete require.cache[item]
130
- }
131
- var usermod = require(file)
132
- httpHandler = new HttpHandler(usermod[func])
133
- eventHandler = new EventHandler(usermod[func])
134
- } catch (err) {
135
- runtime.log(`get user function[${file}:${func}] failed`)
136
- runtime.log(err.stack)
137
- initHandlerFault = err.message
138
- _user_exception = true
139
- }
140
- }
141
-
142
- function finish(err, data, wait) {
143
- runtime.log('finish')
144
- runtime.log(wait ? 'wait' : 'not wait')
145
-
146
- if (_result === undefined) {
147
- if (err == null) {
148
- try {
149
- _result = JSON.stringify(data === undefined ? null : data)
150
- } catch (err) {
151
- _result = 'faulted'
152
- _fault = `stringify response to json failed: ${err.message}`
153
- return
154
- }
155
- } else {
156
- _result = 'faulted'
157
- if (err instanceof Error) {
158
- runtime.console_log(err.stack, true)
159
- _fault = err.message
160
- } else {
161
- var errStr = String(err)
162
- _fault = `${errStr}(callback err is not instance of Error)`
163
- }
164
- }
165
- }
166
-
167
- if (wait) {
168
- return
169
- }
170
-
171
- runtime.log(_result)
172
- process.nextTick(() => {
173
- if (_result == 'reload') {
174
- // reload response, do nothing
175
- } else if (_fault !== undefined) {
176
- _user_exception = true
177
- var errType = _user_exception ? 2 : 1
178
- runtime.report_fail(_fault, 0, errType)
179
- } else if (_result.length > maxRetMsgLen) {
180
- runtime.report_fail(maxRetMsgLenExceedError, 0, 1)
181
- } else {
182
- runtime.report_done(_result, 0)
183
- }
184
- waitForInvoke()
185
- })
186
- }
187
-
188
- class HttpHandler {
189
- constructor(func) {
190
- this.realHandler = func
191
- }
192
-
193
- handle(fd) {}
194
- }
195
-
196
- class EventHandler {
197
- constructor(func) {
198
- this.realHandler = func
199
- }
200
-
201
- handle(ev, ctx) {
202
- var called = false
203
- var wait = true
204
- var callback = (err, data) => {
205
- if (called) {
206
- return
207
- }
208
- called = true
209
- finish(err, data, wait)
210
- }
211
-
212
- var ctxx = Object.assign(
213
- {
214
- set callbackWaitsForEmptyEventLoop(value) {
215
- wait = value
216
- },
217
- get callbackWaitsForEmptyEventLoop() {
218
- return wait
219
- },
220
- getContext() {
221
- return ctx
222
- },
223
- done: function(err, data) {
224
- wait = false
225
- callback(err, data)
226
- },
227
- succeed: function(data) {
228
- ctxx.done(null, data)
229
- },
230
- fail: function(err) {
231
- ctxx.done(err, null)
232
- }
233
- },
234
- ctx
235
- )
236
-
237
- try {
238
- _user_exception = false
239
- var ret = this.realHandler(ev, ctxx, callback)
240
- if (
241
- ret &&
242
- ret.then !== undefined &&
243
- typeof ret.then === 'function'
244
- ) {
245
- ret.then(ctxx.succeed, ctxx.fail)
246
- }
247
- } catch (err) {
248
- runtime.console_log(err.stack, true)
249
- _fault = err.stack
250
- _user_exception = true
251
- }
252
- }
253
- }
254
-
255
- main()
1
+ /* eslint-disable */
2
+ var runtime = require('./runtime')
3
+ var util = require('util')
4
+
5
+ var initHandlerFault = 'function initialization failed'
6
+ var maxRetMsgLen = 6 * 1024 * 1024 // byte
7
+ var maxRetMsgLenExceedError = 'body size is too long'
8
+ var httpHandler, eventHandler
9
+
10
+ var _result, _fault
11
+ var _user_exception = false
12
+
13
+ function wrapLog(invokeId) {
14
+ console.log = console.info = function prettyConsoleLog() {
15
+ var message = `${util.format.apply(this, arguments)}`
16
+ runtime.console_log(message)
17
+ }
18
+ console.error = console.warn = function prettyConsoleLogErr() {
19
+ var message = `${util.format.apply(this, arguments)}`
20
+ runtime.console_log(message, (err = true))
21
+ }
22
+ }
23
+
24
+ function main() {
25
+ if (0 != runtime.init()) {
26
+ console.log('runtime init failed')
27
+ return
28
+ }
29
+ runtime.log('init succ')
30
+
31
+ cleanEnv()
32
+
33
+ process.on('beforeExit', () => {
34
+ runtime.log('catch exit')
35
+ finish(null, null, false)
36
+ })
37
+ process.on('uncaughtException', err => {
38
+ runtime.log('catch exception')
39
+ finish(err, null, false)
40
+ })
41
+
42
+ waitForInvoke()
43
+ }
44
+
45
+ function cleanEnv() {
46
+ var envToDelete = ['SOCKETPATH', 'CONTAINERID']
47
+ for (var k in process.env) {
48
+ if (k.startsWith('KUBERNETES')) {
49
+ envToDelete.push(k)
50
+ }
51
+ }
52
+
53
+ envToDelete.forEach(e => {
54
+ delete process.env[e]
55
+ })
56
+ }
57
+
58
+ function waitForInvoke() {
59
+ runtime.log('wait for invoke')
60
+ var invokeInfo = runtime.wait_for_invoke()
61
+ setTimeout(() => {
62
+ runtime.log('timed out, invoke')
63
+ invoke(invokeInfo)
64
+ }, 0)
65
+ }
66
+
67
+ function invoke(invokeInfo) {
68
+ if (invokeInfo.cmd === 'RELOAD') {
69
+ runtime.log(`get reload request: ${invokeInfo.context}`)
70
+ // 路径中可能包含 . 符号
71
+ var ff = invokeInfo.globalHandler.split('.')
72
+ initHandler(invokeInfo.filePath + ff[0], ff[1])
73
+ runtime.log('handlers reloaded')
74
+ _result = 'reload'
75
+ finish(null, null, false)
76
+ return
77
+ }
78
+
79
+ _result = undefined
80
+ _fault = undefined
81
+
82
+ runtime.report_running()
83
+
84
+ var ev, ctx
85
+ if (invokeInfo.event || invokeInfo.context) {
86
+ try {
87
+ ev = JSON.parse(invokeInfo.event)
88
+ ctx = JSON.parse(invokeInfo.context)
89
+ } catch (err) {
90
+ _fault = `eval event[${invokeInfo.event}] or context [${invokeInfo.context}] failed\n${err}`
91
+ return
92
+ }
93
+ }
94
+
95
+ ctx['environ'].split(';').forEach(e => {
96
+ if (e == '') return
97
+ var kv = e.split('=', 2)
98
+ process.env[kv[0]] = kv[1]
99
+ })
100
+
101
+ runtime.log(`request[${ctx['request_id']}] invoked`)
102
+
103
+ if (!httpHandler && !eventHandler) {
104
+ _fault = initHandlerFault
105
+ return
106
+ }
107
+
108
+ wrapLog(ctx['request_id'])
109
+ if (invokeInfo.cmd === 'HTTP') {
110
+ httpHandler.handle(invokeInfo.sockfd)
111
+ } else if (invokeInfo.cmd === 'EVENT') {
112
+ eventHandler.handle(ev, ctx)
113
+ } else {
114
+ _fault = `recv unknown task type: ${invokeInfo.cmd}`
115
+ runtime.log(`recv unknown task type: ${invokeInfo.cmd}`)
116
+ }
117
+
118
+ runtime.log('process finished')
119
+ }
120
+
121
+ function initHandler(file, func) {
122
+ try {
123
+ var path = require('path')
124
+ var current_path = path.dirname(file)
125
+ process.chdir(current_path)
126
+ runtime.log(`working directory: ${process.cwd()}`)
127
+
128
+ for (var item in require.cache) {
129
+ delete require.cache[item]
130
+ }
131
+ var usermod = require(file)
132
+ httpHandler = new HttpHandler(usermod[func])
133
+ eventHandler = new EventHandler(usermod[func])
134
+ } catch (err) {
135
+ runtime.log(`get user function[${file}:${func}] failed`)
136
+ runtime.log(err.stack)
137
+ initHandlerFault = err.message
138
+ _user_exception = true
139
+ }
140
+ }
141
+
142
+ function finish(err, data, wait) {
143
+ runtime.log('finish')
144
+ runtime.log(wait ? 'wait' : 'not wait')
145
+
146
+ if (_result === undefined) {
147
+ if (err == null) {
148
+ try {
149
+ _result = JSON.stringify(data === undefined ? null : data)
150
+ } catch (err) {
151
+ _result = 'faulted'
152
+ _fault = `stringify response to json failed: ${err.message}`
153
+ return
154
+ }
155
+ } else {
156
+ _result = 'faulted'
157
+ if (err instanceof Error) {
158
+ runtime.console_log(err.stack, true)
159
+ _fault = err.message
160
+ } else {
161
+ var errStr = String(err)
162
+ _fault = `${errStr}(callback err is not instance of Error)`
163
+ }
164
+ }
165
+ }
166
+
167
+ if (wait) {
168
+ return
169
+ }
170
+
171
+ runtime.log(_result)
172
+ process.nextTick(() => {
173
+ if (_result == 'reload') {
174
+ // reload response, do nothing
175
+ } else if (_fault !== undefined) {
176
+ _user_exception = true
177
+ var errType = _user_exception ? 2 : 1
178
+ runtime.report_fail(_fault, 0, errType)
179
+ } else if (_result.length > maxRetMsgLen) {
180
+ runtime.report_fail(maxRetMsgLenExceedError, 0, 1)
181
+ } else {
182
+ runtime.report_done(_result, 0)
183
+ }
184
+ waitForInvoke()
185
+ })
186
+ }
187
+
188
+ class HttpHandler {
189
+ constructor(func) {
190
+ this.realHandler = func
191
+ }
192
+
193
+ handle(fd) {}
194
+ }
195
+
196
+ class EventHandler {
197
+ constructor(func) {
198
+ this.realHandler = func
199
+ }
200
+
201
+ handle(ev, ctx) {
202
+ var called = false
203
+ var wait = true
204
+ var callback = (err, data) => {
205
+ if (called) {
206
+ return
207
+ }
208
+ called = true
209
+ finish(err, data, wait)
210
+ }
211
+
212
+ var ctxx = Object.assign(
213
+ {
214
+ set callbackWaitsForEmptyEventLoop(value) {
215
+ wait = value
216
+ },
217
+ get callbackWaitsForEmptyEventLoop() {
218
+ return wait
219
+ },
220
+ getContext() {
221
+ return ctx
222
+ },
223
+ done: function(err, data) {
224
+ wait = false
225
+ callback(err, data)
226
+ },
227
+ succeed: function(data) {
228
+ ctxx.done(null, data)
229
+ },
230
+ fail: function(err) {
231
+ ctxx.done(err, null)
232
+ }
233
+ },
234
+ ctx
235
+ )
236
+
237
+ try {
238
+ _user_exception = false
239
+ var ret = this.realHandler(ev, ctxx, callback)
240
+ if (
241
+ ret &&
242
+ ret.then !== undefined &&
243
+ typeof ret.then === 'function'
244
+ ) {
245
+ ret.then(ctxx.succeed, ctxx.fail)
246
+ }
247
+ } catch (err) {
248
+ runtime.console_log(err.stack, true)
249
+ _fault = err.stack
250
+ _user_exception = true
251
+ }
252
+ }
253
+ }
254
+
255
+ main()