UNPKG

2.54 kBtext/coffeescriptView Raw
1Promise = require('bluebird')
2FS = require('fs')
3Http = require('http')
4OS = require('os')
5
6Base = require('../base')
7
8
9debug = Base.logger('client_info')
10
11_deviceData = false
12deviceData = null
13_ec2Data = false
14ec2Data = null
15
16exports.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
46getDeviceData = ->
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
54getDeviceDataHelper = ->
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 # '/factory/serial_number'
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
73getEc2Data = ->
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()