Comparing version 0.1.1 to 0.1.2
@@ -11,5 +11,5 @@ /** | ||
NW.init( function(){ | ||
}); | ||
exports.NodeAgent = NW; |
@@ -131,2 +131,5 @@ /** | ||
"trace_service_port_enabled" : false, | ||
//2017.05.02 AUTO ONAME | ||
"auto_oname_prefix" : "nodejs", | ||
"auto_oname_reset" : 0, | ||
"log_pack_data" : false | ||
@@ -133,0 +136,0 @@ }; |
@@ -51,5 +51,4 @@ /** | ||
if(err) { | ||
console.error("no license file"); | ||
if(cb) { | ||
return cb('no license file'); | ||
return cb(new Error('no license file')); | ||
} | ||
@@ -99,3 +98,3 @@ } else { | ||
}); | ||
Logger.print("WHATAP-203", "Config file reloaded", true); | ||
require('../logger').print("WHATAP-203", "Config file reloaded", true); | ||
} | ||
@@ -143,3 +142,5 @@ | ||
if(self._propertyFilePath) { | ||
if(cb) cb(null, self._propertyFilePath); | ||
if(cb) { | ||
cb(null, self._propertyFilePath); | ||
} | ||
} | ||
@@ -217,3 +218,3 @@ | ||
Configuration.prototype.setProperty = function(key, value) { | ||
if(this[key] == value) return; | ||
if(this[key] == value) { return; } | ||
this[key] = value; | ||
@@ -220,0 +221,0 @@ this.emit(key, value); |
@@ -62,3 +62,3 @@ /** | ||
if(fs.existsSync(dir_name)) { | ||
conf['app.root'] = root; | ||
Configuration['app.root'] = root; | ||
return; | ||
@@ -73,3 +73,3 @@ } | ||
if(fs.existsSync(dir_name)) { | ||
conf['app.root'] = root; | ||
Configuration['app.root'] = root; | ||
return; | ||
@@ -89,6 +89,6 @@ } | ||
self.findRoot(); | ||
if(conf['app.root'] == null || conf['app.root'].length == 0) { | ||
if(Configuration['app.root'] == null || Configuration['app.root'].length == 0) { | ||
return Logger.print("WHATAP-001", "Can not find application root directory", true); | ||
} | ||
Logger.initializer.process(); | ||
@@ -100,209 +100,7 @@ NodeUtil.getPackageJson(); | ||
self._conf.init(this._userOpt , function(e) { | ||
if(e) return; | ||
Logger.print('WHATAP-101', 'Finish initialize configuration...', true); | ||
self._securityMaster.run( function (err) { | ||
if(err) { | ||
Logger.printError('WHATAP-104', 'Failed to connect to whatap server', err, true); | ||
return; | ||
} | ||
self.connect(function (err) { | ||
if(err) { | ||
Logger.printError('WHATAP-105', 'Failed to connect to whatap server', err, true); | ||
return; | ||
} | ||
Logger.ONAME = secu.ONAME; | ||
Logger.initializer.reset(); | ||
TraceContextManager.initialized = true; | ||
DataTextAgent.reset(); | ||
var param = new ParamPack(); | ||
param.putString("whatap.version", NodeUtil.getVersion()+' '+ NodeUtil.getReleaseDate()); | ||
param.putString("os.name", os.platform()); | ||
param.putString("os.arch", os.arch()); | ||
param.putString('os.release', os.release()); | ||
param.putString('node.version', process.version); | ||
param.putString('node.uptime', (new Date()).toString()); | ||
param.putString('node.name', NodeUtil.getName()); | ||
param.putString('user.timezone', NodeUtil.getTimeZone()); | ||
param.putString('user.home', os.homedir()); | ||
param.putString('user.hostname', os.hostname()) | ||
DataPackSender.sendBoot(param); | ||
self._counterManager = new CounterManager(self); | ||
self._counterManager.run(); | ||
WhatapUtil.printWhatap(); | ||
PluginLoaderManager.start(); | ||
if(cb) cb(); | ||
}); | ||
}); | ||
}); | ||
self.loadObserves(); | ||
return this; | ||
}; | ||
NodeAgent.prototype.connect = function (cb) { | ||
Logger.print("WHATAP-170", "[WhaTap Agent] now waiting for starting......", true) | ||
var self = this; | ||
self._tcpsession = new TcpSession(); | ||
setTimeout(function () { | ||
if(Configuration['whatap.port'] == null) { | ||
self.connect(cb); | ||
if(e) { | ||
Logger.printError("WHATAP-002", "Configuataion initialize error", e, true); | ||
return; | ||
} | ||
self._tcpsession.open(function(err) { | ||
if(err) { | ||
Logger.printError("WHTAP-11", "TCP SESSION OPEN ERROR", err ,true); | ||
return; | ||
}; | ||
if(cb) cb(); | ||
}); | ||
}, 10000); | ||
}; | ||
NodeAgent.prototype.loadObserves = function(){ | ||
var agent = this; | ||
var observes = []; | ||
observes.push(HttpObserver); | ||
observes.push(NetObserver); | ||
observes.push(ClusterObserver); | ||
observes.push(MysqlObserver); | ||
observes.push(SocketioObserver); | ||
observes.push(ExpressObserver); | ||
observes.push(FileObserver); | ||
observes.push(MongoObserver); | ||
observes.push(MongooseObserver); | ||
observes.push(RedisObserver); | ||
observes.push(MssqlObserver); | ||
observes.push(CustomObserver); | ||
var packageToObserve = {}; | ||
observes.forEach(function(observeObj) { | ||
var observe = new observeObj(agent); | ||
observe.packages.forEach(function(pkg){ | ||
if(!packageToObserve[pkg]){ | ||
packageToObserve[pkg] = []; | ||
} | ||
packageToObserve[pkg].push( observe ); | ||
}); | ||
}); | ||
agent.aop.after(module.__proto__, 'require', function(obj, args, result) { | ||
// PackageCtrHelper.addPackage(args[0], obj.id, result); | ||
var observes = packageToObserve[args[0]]; | ||
if(observes) { | ||
observes.forEach(function(observe){ | ||
observe.inject(result, args[0]); | ||
}); | ||
} | ||
}); | ||
new ProcessObserver(agent).inject(process, 'process'); | ||
new GlobalObserver(agent).inject(global, 'global'); | ||
}; | ||
exports.NodeAgent = NodeAgent;/** | ||
* Copyright 2016 the WHATAP project authors. All rights reserved. | ||
* Use of this source code is governed by a license that | ||
* can be found in the LICENSE file. | ||
*/ | ||
var os = require('os'), | ||
fs = require('fs'), | ||
path = require('path'); | ||
var Interceptor = require('./interceptor').Interceptor, | ||
HttpObserver = require('../observers/http-observer').HttpObserver, | ||
NetObserver = require('../observers/net-observer').NetObserver, | ||
ClusterObserver = require('../observers/cluster-observer').ClusterObserver, | ||
ExpressObserver = require('../observers/express-observer').ExpressObserver, | ||
GlobalObserver = require('../observers/global-observer').GlobalObserver, | ||
MysqlObserver = require('../observers/mysql-observer').MysqlObserver, | ||
SocketioObserver = require('../observers/socket.io-observer').SocketIOObserver, | ||
ProcessObserver = require('../observers/process-observer').ProcessObserver, | ||
FileObserver = require('../observers/file-observer').FileObserver, | ||
MongoObserver = require('../observers/mongo-observer').MongoObserver, | ||
MongooseObserver = require('../observers/mongoose-observer').MongooseObserver, | ||
RedisObserver = require('../observers/redis-observer').RedisObserver, | ||
MssqlObserver = require('../observers/mssql-observer').MssqlObserver, | ||
CustomObserver = require('../observers/custom-observer').CustomObserver; | ||
var Configuration = require('./../conf/configure'), | ||
SecurityMaster = require('./../net/security-master'), | ||
TcpSession = require('./../net/tcp-session'), | ||
PackageCtrHelper = require('./../control/packagectr-helper'), | ||
DataPackSender = require('../data/datapack-sender'), | ||
CounterManager = require('./../counter/counter-manager'), | ||
NodeUtil = require('./../util/nodeutil'), | ||
WhatapUtil = require('./../util'), | ||
ParamPack = require('../pack/param-pack').ParamPack, | ||
PluginLoaderManager = require('../plugin/plugin-loadermanager'), | ||
TraceContextManager = require('../trace/trace-context-manager'), | ||
DataTextAgent = require('../data/datatext-agent').agent, | ||
Logger = require('../logger'); | ||
require('../stat/stat-tranx'); | ||
require('../stat/stat-sql'); | ||
require('../stat/stat-httpc'); | ||
require('../stat/stat-remoteip'); | ||
require('../stat/stat-useragent'); | ||
require('../stat/timingsender'); | ||
var NodeAgent = function(opt) { | ||
this._userOpt = opt; | ||
this._initialized = false; | ||
this.aop = new Interceptor(this); | ||
this._conf = Configuration; | ||
this._securityMaster = SecurityMaster; | ||
this._tcpsession = null; | ||
this._counterManager = null; | ||
}; | ||
NodeAgent.prototype.findRoot = function () { | ||
var root = process.cwd(); | ||
while(root.length > 1) { | ||
var dir_name = path.join(root, 'node_modules'); | ||
if(fs.existsSync(dir_name)) { | ||
conf['app.root'] = root; | ||
return; | ||
} | ||
root = path.join(root, '..'); | ||
} | ||
root = path.dirname(require.main.filename); | ||
while(root.length > 1) { | ||
var dir_name = path.join(root, 'node_modules'); | ||
if(fs.existsSync(dir_name)) { | ||
conf['app.root'] = root; | ||
return; | ||
} | ||
root = path.join(root, '..'); | ||
} | ||
}; | ||
NodeAgent.prototype.init = function(cb) { | ||
var self = this; | ||
if(self._initialized) { | ||
return; | ||
} | ||
self._initialized = true; | ||
self.starttime = Date.now(); | ||
self.findRoot(); | ||
if(conf['app.root'] == null || conf['app.root'].length == 0) { | ||
return Logger.print("WHATAP-001", "Can not find application root directory", true); | ||
} | ||
Logger.initializer.process(); | ||
NodeUtil.getPackageJson(); | ||
PackageCtrHelper.dynamicHook(); | ||
Logger.print('WHATAP-100', 'Start initialize configuration...', true); | ||
self._conf.init(this._userOpt , function(e) { | ||
if(e) return; | ||
Logger.print('WHATAP-101', 'Finish initialize configuration...', true); | ||
@@ -321,3 +119,3 @@ self._securityMaster.run( function (err) { | ||
Logger.ONAME = secu.ONAME; | ||
Logger.ONAME = self._securityMaster.ONAME; | ||
Logger.initializer.reset(); | ||
@@ -372,5 +170,5 @@ | ||
}); | ||
}, 10000); | ||
}, 5000); | ||
}; | ||
NodeAgent.prototype.loadObserves = function(){ | ||
NodeAgent.prototype.loadObserves = function() { | ||
var agent = this; | ||
@@ -377,0 +175,0 @@ var observes = []; |
@@ -21,2 +21,3 @@ /** | ||
NetFlag.KEY_RESET = 0xff; | ||
NetFlag.PREPARE_AGENT = 0xfc; | ||
@@ -23,0 +24,0 @@ NetFlag.getSecureMask = function(code){ |
@@ -67,3 +67,3 @@ /** | ||
}else{ | ||
OidUtil.setType(Configuration.getProperty("whatap.type", "NODE"+ Configuration.getProperty('node.clusterId') ) ); | ||
OidUtil.setType(Configuration.getProperty("whatap.type", "NODE" + Configuration.getProperty('node.clusterId') ) ); | ||
} | ||
@@ -80,3 +80,29 @@ | ||
}, | ||
setAgentOnameOid :function (oname, myIp) { | ||
var Configuration = require('./../conf/configure'); | ||
Configuration.setProperty('whatap.ip', myIp); | ||
this.IP = DataInputX.toInt(IPUtil.toBytes(myIp), 0); | ||
var port = Configuration.getProperty("whatap.port"); | ||
OidUtil.setIp(IPUtil.toString(this.IP)); | ||
OidUtil.setPort(port); | ||
OidUtil.setPid(process.pid); | ||
OidUtil.setHostName(require('os').hostname()); | ||
if(require('cluster').isMaster){ | ||
OidUtil.setType(Configuration.getProperty("whatap.type", "NODE")); | ||
}else{ | ||
OidUtil.setType(Configuration.getProperty("whatap.type", "NODE"+ Configuration.getProperty('node.clusterId') ) ); | ||
} | ||
OidUtil.setCmd(Configuration.getProperty("sun.java.command")); | ||
this.ONAME = oname | ||
this.OID = OidUtil.mkOid(this.ONAME); | ||
if (lastOid != this.OID) { | ||
lastOid = this.OID; | ||
require('../logger').print('WHATAP-168', "OID: " + this.OID + " ONAME: " + this.ONAME + " IP: " + IPUtil.toString(this.IP), true); | ||
} | ||
}, | ||
getClusterId: function(cb){ | ||
var conf = require('./../conf/configure'); | ||
if(cluster.isMaster){ | ||
@@ -83,0 +109,0 @@ conf.setProperty('node.clusterId', ''); |
@@ -7,4 +7,4 @@ /** | ||
var net = require('net'); | ||
netflag = require('./netflag').NetFlag, | ||
var net = require('net'), | ||
netflag = require('./netflag').NetFlag, | ||
netsrc = require('./netflag').NetSrc, | ||
@@ -18,2 +18,3 @@ secu = require('./security-master'), | ||
Receiver = require('./receiver'), | ||
OidUtil = require('../util/oidutil'), | ||
Logger = require('../logger'), | ||
@@ -36,2 +37,4 @@ Long = require('long'); | ||
var self = this; | ||
self.auto_oname_reset = conf.auto_oname_reset; | ||
if(this.isOpen()) { cb(new Error('Already connected..')); } | ||
@@ -56,10 +59,14 @@ | ||
Logger.print('WHATAP-180', "[Try to connect to] " + JSON.stringify(options), true); | ||
this.out = net.connect(options, function(err) { | ||
if(err) { | ||
Logger.printError('WHATAP-181', 'Failed to connect to server', err, true); | ||
cb(err); | ||
return; | ||
this.out = net.connect(options, function() { | ||
var localAddr = (this.localAddress || IPUtil.getIp()); | ||
if(conf.auto_oname_enabled == true) { | ||
var oname = conf["whatap.oname"]; | ||
if((oname == null || oname.length == 0) | ||
&& self.auto_oname_reset == conf.auto_oname_reset) { | ||
self.prepareAutoOnameByServer(localAddr); | ||
return; | ||
} | ||
} | ||
var localAddr = (this.localAddress || IPUtil.getIp()); | ||
secu.decideAgentOnameOid(localAddr); | ||
@@ -83,2 +90,29 @@ if(conf.cipher_net_enabled){ | ||
this.out.on('data', function(data){ | ||
if(self.PREPARE_AGENT) { | ||
var din = new DataInputX(data); | ||
var source = din.readByte(); | ||
var code = din.readByte(); | ||
var pcode = din.readLong(); | ||
var oid = din.readInt(); | ||
var transfer_key = din.readInt(); | ||
var _data = din.readIntBytes(8 * 1024 * 1024); | ||
if (conf.cypher_level > 0) { | ||
_data = secu.cypher.decrypt(_data); | ||
} | ||
var oname = new DataInputX(_data).readText(); | ||
var localAddr = (this.localAddress || IPUtil.getIp()); | ||
secu.setAgentOnameOid(oname, localAddr); | ||
self.PREPARE_AGENT = false; | ||
if(conf.cipher_net_enabled) { | ||
try { | ||
self.out.write( self.keyReset() ); | ||
} catch(e) { | ||
Logger.printError("WHATAP-125", "KeyReset " + host + ":" + port, e, true); | ||
} | ||
} | ||
return; | ||
} | ||
if(firstReceived) { | ||
@@ -105,3 +139,2 @@ self.read(data); | ||
}; | ||
TcpSession.prototype.send = function(code , b ){ | ||
@@ -152,3 +185,3 @@ try{ | ||
var msg = new DataOutputX().writeText("hello").writeText(secu.ONAME).writeInt8(secu.IP).toByteArray(); | ||
if( conf.cipher_net_enabled ){ | ||
if( conf.cypher_level > 0 ){ | ||
msg = secu.cypher.encrypt(msg); | ||
@@ -188,3 +221,42 @@ } | ||
}; | ||
TcpSession.prototype.prepareAutoOnameByServer = function (localAddr) { | ||
var self = this; | ||
try { | ||
var auto_oname_prefix = conf.auto_oname_prefix; | ||
if(auto_oname_prefix.indexOf('{') >= 0) { | ||
OidUtil.setIp(localAddr); | ||
OidUtil.setPort(port); | ||
OidUtil.setPid(process.pid); | ||
OidUtil.setHostName(require('os').hostname()); | ||
auto_oname_prefix = OidUtil.mkOname(conf.auto_oname_prefix); | ||
} | ||
var pout = new DataOutputX(); | ||
pout.writeText(auto_oname_prefix); | ||
pout.writeInt(IPUtil.toBytes(localAddr)); | ||
var msg = pout.toByteArray(); | ||
var trkey = 0; | ||
if(conf.cypher_level > 0) { | ||
msg = secu.cypher.encrypt(msg); | ||
var b0 = 1; | ||
var b1 = (conf.cypher_level / 8); | ||
trkey = DataInputX.toInt([b0, b1, 0, 0], 0); | ||
} | ||
var out = new DataOutputX(); | ||
out.writeByte(netsrc.AGENT_JAVA_EMBED); | ||
out.writeByte(netflag.PREPARE_AGENT); | ||
out.writeLong(secu.PCODE); | ||
out.writeInt(0); | ||
out.writeInt(trkey); | ||
out.writeIntBytes(msg); | ||
self.PREPARE_AGENT = true; | ||
self.out.write(out.toByteArray()); | ||
} catch(e) { | ||
Logger.printError("WHATAP-003", "Prepare oname error", e, true); | ||
} | ||
}; | ||
module.exports = TcpSession; |
@@ -30,2 +30,3 @@ /** | ||
var now = DateUtil.currentTime(); | ||
var conf = require('../conf/configure'); | ||
if(conf.stat_enabled) { | ||
@@ -32,0 +33,0 @@ StatTranx.send(now); |
@@ -42,5 +42,5 @@ /** | ||
TraceContextManager.start = function () { | ||
if(TraceContextManager.initialized == false) { return null; } | ||
var conf = require('../conf/configure'); | ||
@@ -47,0 +47,0 @@ if(TraceContextManager.size() > conf.trx_profile_max_count) { return null; } |
@@ -15,3 +15,2 @@ /** | ||
this.BLOCK = conf.cypher_level / 8; | ||
this.key = cypherKey = Cypher.padding(cypherKey); | ||
@@ -62,3 +61,2 @@ this.enc = crypto.createCipheriv("AES-128-ECB", cypherKey, ''); | ||
this.enc = crypto.createCipheriv("AES-128-ECB", this.key, ''); | ||
var len = data.length; | ||
@@ -69,11 +67,14 @@ var remainder = len % 16; | ||
buf = data; | ||
}else{ | ||
buf = new Buffer( ( Math.floor(len / 16) +1) * 16); | ||
} else { | ||
buf = new Buffer( (Math.floor(len / 16) +1) * 16 ); | ||
buf.fill(0); | ||
DataOutputX.set(buf, 0, data ); | ||
} | ||
try{ | ||
return Buffer.concat([this.enc.update(buf), this.enc.final()]); | ||
}catch(e){ | ||
console.error(e); | ||
try { | ||
if(data.length <= 16) { | ||
return Buffer.concat([this.enc.update(buf)]); | ||
} else { | ||
return Buffer.concat([this.enc.update(buf), this.enc.final()]); | ||
} | ||
} catch(e) { | ||
} | ||
@@ -91,6 +92,6 @@ return null; | ||
}catch(e){ | ||
console.log(e); | ||
} | ||
return null; | ||
}; | ||
module.exports = Cypher; |
@@ -7,7 +7,7 @@ /** | ||
var fs = require('fs'), | ||
path = require('path'); | ||
var fs = require('fs'), | ||
path = require('path'); | ||
function getPackageJson(){ | ||
var appDir = conf['app.root']; | ||
var appDir = require('../conf/configure')['app.root']; | ||
try { | ||
@@ -22,3 +22,3 @@ var whatap_path = path.join( | ||
} catch(e) { | ||
} | ||
@@ -29,3 +29,3 @@ NodeUtil.packageJson = {}; | ||
if(fullPath === undefined) return; | ||
if(fullPath && fullPath.length < 3 ) { | ||
@@ -32,0 +32,0 @@ if(cb) return cb('root'); |
{ | ||
"name": "whatap", | ||
"homepage": "http://www.whatap.io", | ||
"version": "0.1.1", | ||
"releaseDate": "20170502", | ||
"version": "0.1.2", | ||
"releaseDate": "20170510", | ||
"description": "Monitoring and Profiling Service", | ||
@@ -7,0 +7,0 @@ "main": "index.js", |
Unidentified License
License(Experimental) Something that seems like a license was found, but its contents could not be matched with a known license.
Found 2 instances in 1 package
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 1 instance in 1 package
Unidentified License
License(Experimental) Something that seems like a license was found, but its contents could not be matched with a known license.
Found 2 instances in 1 package
21
954357
188
13926