1 | Promise = require('bluebird')
|
2 | FS = require('fs')
|
3 | Http = require('http')
|
4 | OS = require('os')
|
5 |
|
6 | Base = require('../base')
|
7 |
|
8 |
|
9 | debug = Base.logger('client_info')
|
10 |
|
11 | _deviceData = false
|
12 | deviceData = null
|
13 | _ec2Data = false
|
14 | ec2Data = null
|
15 |
|
16 | exports.clientInfo = ->
|
17 | info = null
|
18 | getDeviceData()
|
19 | .then (device) ->
|
20 | info = device
|
21 | if Base.env.IX_USE_EC2
|
22 | getEc2Data()
|
23 | else
|
24 | null
|
25 | .then (ec2Data) ->
|
26 | info.ec2Zone = ec2Data.availabilityZone if ec2Data?.availabilityZone
|
27 | info.deviceKey ?= info.key if info.key
|
28 | info.deviceSecret ?= info.secret if info.secret
|
29 | info.process =
|
30 | arch: process.arch
|
31 | pid: process.pid
|
32 | platform: process.platform
|
33 | release: process.release
|
34 | version: process.version
|
35 | versions: process.versions
|
36 | info.os =
|
37 | hostname: OS.hostname()
|
38 | release: OS.release()
|
39 | info.package_versions =
|
40 | node: process.versions.node
|
41 | faas: require('../package.json').version
|
42 | 'socket.io-client': require('socket.io-client/package.json').version
|
43 | 'socket.io-stream': require('socket.io-stream/package.json').version
|
44 | info
|
45 |
|
46 | getDeviceData = ->
|
47 | return Promise.resolve(deviceData) if _deviceData
|
48 | deviceData ?= { secret: Base.env.IX_DEVICE_SECRET }
|
49 | getDeviceDataHelper()
|
50 | .then ->
|
51 | _deviceData = true
|
52 | deviceData
|
53 |
|
54 | getDeviceDataHelper = ->
|
55 | if Base.env.IX_DEVICE_KEY
|
56 | console.log('DEVICE KEY: '+Base.env.IX_DEVICE_KEY)
|
57 | deviceData.key = Base.env.IX_DEVICE_KEY
|
58 | Promise.resolve()
|
59 | else if Base.env.IX_DEVICE_KEY_FILE && Base.env.IX_DEVICE_KEY_FILE != 'NONE'
|
60 | Promise.fromCallback (callback) ->
|
61 |
|
62 | FS.readFile(Base.env.IX_DEVICE_KEY_FILE, { encoding: 'utf8' }, callback)
|
63 | .then (file) ->
|
64 | debug('getDeviceData file:', file)
|
65 | key = file.split(/\n/)[0].trim()
|
66 | console.log('DEVICE KEY: '+key)
|
67 | deviceData.key = key
|
68 | , (err) ->
|
69 | debug('getDeviceData error:', err)
|
70 | else
|
71 | Promise.resolve()
|
72 |
|
73 | getEc2Data = ->
|
74 | return Promise.resolve(ec2Data) if _ec2Data
|
75 | new Promise (resolve, reject) ->
|
76 | myResolve = (val) ->
|
77 | _ec2Data = true
|
78 | ec2Data = val
|
79 | resolve(val)
|
80 | request = Http.get 'http://169.254.169.254/latest/meta-data/placement/availability-zone', (response) ->
|
81 | resp = ''
|
82 | response.on 'data', (chunk) ->
|
83 | resp += chunk
|
84 | response.on 'error', (err) ->
|
85 | myResolve()
|
86 | response.on 'end', ->
|
87 | myResolve({ availabilityZone: resp })
|
88 | request.on 'error', (err) ->
|
89 | debug('ec2 error', err)
|
90 | myResolve()
|