diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..970998a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "minifabric"] + path = minifabric + url = git@github.com:SamYuan1990/minifabric.git diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..eec25ed --- /dev/null +++ b/config.yaml @@ -0,0 +1,36 @@ +# Definition of nodes +peer1: &peer1 + addr: peer1.org0.example.com:7051 + tls_ca_cert: /config/minifabric/vars/keyfiles/peerOrganizations/org0.example.com/msp/tlscacerts/tlsca1.org0.example.com-cert.pem + +peer2: &peer2 + addr: peer1.org1.example.com:7051 + tls_ca_cert: /config/minifabric/vars/keyfiles/peerOrganizations/org1.example.com/msp/tlscacerts/tlsca1.org1.example.com-cert.pem + +orderer1: &orderer1 + addr: orderer1.example.com:7050 + tls_ca_cert: /config/minifabric/vars/keyfiles/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem + +# Nodes to interact with +endorsers: + - *peer1 + - *peer2 +# we might support multi-committer in the future for more complex test scenario, +# i.e. consider tx committed only if it's done on >50% of nodes. But for now, +# it seems sufficient to support single committer. +committer: *peer2 +orderer: *orderer1 + +# Invocation configs +channel: mychannel +chaincode: simple +args: + - query + - a +mspid: org0-example-com + +private_key: /config/minifabric/vars/keyfiles/peerOrganizations/org0.example.com/users/Admin@org0.example.com/msp/keystore/priv_sk +sign_cert: /config/minifabric/vars/keyfiles/peerOrganizations/org0.example.com/users/Admin@org0.example.com/msp/signcerts/Admin@org0.example.com-cert.pem +num_of_conn: 10 +client_per_conn: 10 + diff --git a/lib/libs.js b/lib/libs.js index a6f45a3..5227b08 100644 --- a/lib/libs.js +++ b/lib/libs.js @@ -1,6 +1,8 @@ const fs = require('fs'); const path = require('path'); const parse = require('csv-parse/lib/sync'); +const sleep = require('system-sleep'); +const process = require('child_process'); exports.BatchTimeout = 'BatchTimeout' exports.MaxMessageCount = 'MaxMessageCount' @@ -45,10 +47,74 @@ exports.init = function init(){ } } -exports.run = function run(data){ +exports.appendRS = function appendRS(data){ try { fs.appendFileSync('./data/rs.csv', '\n'+data); } catch (err) { /* 处理错误 */ } -} \ No newline at end of file +} + +/*CmdInfo +Startup +Teardown +Sleep +tapeConfig +tapeCount +*/ +exports.run = function run(CmdInfo,BatchTimeout,MaxMessageCount,AbsoluteMaxBytes,PreferredMaxBytes){ + var tapeCmd = 'docker'; + var startup; + var teardown; + BatchTimeout.forEach(BatchTimeoutElement =>{ + MaxMessageCount.forEach(MaxMessageCountElement => { + AbsoluteMaxBytes.forEach(AbsoluteMaxBytesElement => { + PreferredMaxBytes.forEach(PreferredMaxBytesElement => { + var TurnInfo = { + Chaincode:CmdInfo.Chaincode, + BatchTimeout:BatchTimeoutElement, + MaxMessageCount:MaxMessageCountElement, + AbsoluteMaxBytes:AbsoluteMaxBytesElement, + PreferredMaxBytes:PreferredMaxBytesElement, + } + startup(startup,TurnInfo); + tapeTPS = tapeTPS(CmdInfo,tapeCmd); + TPS = convertTPS(tapeTPS); + teardown(teardown); + //'sample,0.75,10,2,256, 180.038278,' + appendRS(TurnInfo.Chaincode+','+ + TurnInfo.BatchTimeout+','+ + TurnInfo.MaxMessageCountElement+','+ + TurnInfo.AbsoluteMaxBytesElement+','+ + TurnInfo.PreferredMaxBytesElement+','+ + TPS+','); + sleep(CmdInfo.Sleep*1000); + }) + }) + }) + }); +} + +// docker run --name tape -e TAPE_LOGLEVEL=debug --network minifab -v $PWD:/config tape tape /config/config.yaml 500 +exports.tapeTPS = function tapeTPS(CmdInfo,tapeCmd){ + rs = process.spawnSync(tapeCmd,[ + 'run', + '--name', + 'tape', + '-e', + 'TAPE_LOGLEVEL=debug', + '--network', + 'minifab', + '-v', + path.resolve('./')+':/config', + 'tape', + 'tape', + '/config/config.yaml', + 500//CmdInfo.tapeConfig,CmdInfo.tapeCount + ]); + str=rs.output.toString('utf-8',0); + str = str.substring(str.indexOf('tps:')); + str = str.substring(0,str.indexOf('\n')); + str = str.substring(4); + return str; +} diff --git a/minifabric b/minifabric new file mode 160000 index 0000000..76621df --- /dev/null +++ b/minifabric @@ -0,0 +1 @@ +Subproject commit 76621df02a07f95e1113fcc61c41bc9d309e9656 diff --git a/package-lock.json b/package-lock.json index 6469f79..9003ce4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -142,6 +142,14 @@ "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "body-parser": { "version": "1.18.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", @@ -390,6 +398,23 @@ "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.5.1.tgz", "integrity": "sha512-HM0/86Ks8OwFbaYLd495tqTs1NhscZL52dC4ieKYumy8+nawQYC0xZ63w1NqLf0M148T2YLYqowoImc1giPn0g==" }, + "deasync": { + "version": "0.1.20", + "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.20.tgz", + "integrity": "sha512-E1GI7jMI57hL30OX6Ht/hfQU8DO4AuB9m72WFm4c38GNbUD4Q03//XZaOIHZiY+H1xUaomcot5yk2q/qIZQkGQ==", + "requires": { + "bindings": "^1.5.0", + "node-addon-api": "^1.7.1" + } + }, + "deasync-promise": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deasync-promise/-/deasync-promise-1.0.1.tgz", + "integrity": "sha1-KyfeR4Fnr07zS6mYecUuwM7dYcI=", + "requires": { + "deasync": "^0.1.7" + } + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -535,6 +560,11 @@ "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", "dev": true }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, "filelist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz", @@ -1042,6 +1072,11 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1531,6 +1566,14 @@ "has-flag": "^3.0.0" } }, + "system-sleep": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/system-sleep/-/system-sleep-1.3.7.tgz", + "integrity": "sha512-0Bd7sdWpO+UNLwPr7I4fhmaYf5RARbx4LQPgEPHVqU+uYc1C7FMfxyEWZlJXHpcGmtSR7KeR9npNpool+s8TvQ==", + "requires": { + "deasync-promise": "1.0.1" + } + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", diff --git a/package.json b/package.json index 76395fd..34434c6 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,8 @@ "express": "~4.16.1", "http-errors": "~1.6.3", "morgan": "~1.9.1", - "pug": "^3.0.0" + "pug": "^3.0.0", + "system-sleep": "^1.3.7" }, "devDependencies": { "chai": "^4.2.0", diff --git a/routes/api.js b/routes/api.js index 62d404d..cdb7d60 100644 --- a/routes/api.js +++ b/routes/api.js @@ -29,22 +29,22 @@ router.get('/getTPS', function(req, res, next) { router.get('/run', function(req, res, next) { libs.init(); - libs.run('sample,0.75,10,2,256, 180.038278,'); - libs.run('sample,0.75,40,2,256, 291.310916,'); - libs.run('sample,0.75,80,2,256, 333.041573,'); - libs.run('sample,0.75,120,2,256, 351.752320,'); - libs.run('sample,1,10,2,256, 172.872861,'); - libs.run('sample,1,40,2,256, 291.617799,'); - libs.run('sample,1,80,2,256, 337.826232,'); - libs.run('sample,1,120,2,256, 319.039588,'); - libs.run('sample,2,10,2,256, 182.105577,'); - libs.run('sample,2,40,2,256, 260.276446,'); - libs.run('sample,2,80,2,256, 323.542760,'); - libs.run('sample,2,120,2,256, 323.526945,'); - libs.run('sample,1.5,10,2,256, 172.745382,'); - libs.run('sample,1.5,40,2,256, 268.041591,'); - libs.run('sample,1.5,80,2,256, 348.150198,'); - libs.run('sample,1.5,120,2,256, 310.915616,'); + libs.appendRS('sample,0.75,10,2,256, 180.038278,'); + libs.appendRS('sample,0.75,40,2,256, 291.310916,'); + libs.appendRS('sample,0.75,80,2,256, 333.041573,'); + libs.appendRS('sample,0.75,120,2,256, 351.752320,'); + libs.appendRS('sample,1,10,2,256, 172.872861,'); + libs.appendRS('sample,1,40,2,256, 291.617799,'); + libs.appendRS('sample,1,80,2,256, 337.826232,'); + libs.appendRS('sample,1,120,2,256, 319.039588,'); + libs.appendRS('sample,2,10,2,256, 182.105577,'); + libs.appendRS('sample,2,40,2,256, 260.276446,'); + libs.appendRS('sample,2,80,2,256, 323.542760,'); + libs.appendRS('sample,2,120,2,256, 323.526945,'); + libs.appendRS('sample,1.5,10,2,256, 172.745382,'); + libs.appendRS('sample,1.5,40,2,256, 268.041591,'); + libs.appendRS('sample,1.5,80,2,256, 348.150198,'); + libs.appendRS('sample,1.5,120,2,256, 310.915616,'); res.send('success'); }); diff --git a/test/lib.test.js b/test/lib.test.js index bf6feda..30ae52a 100644 --- a/test/lib.test.js +++ b/test/lib.test.js @@ -3,24 +3,35 @@ var expect = require('chai').expect; describe('# libs', function () { - it('run', function(done){ + it('tapeTPS', function(done){ + var CmdInfo = { + tapeConfig:'1', + tapeCount:'1' + } + tapeCmd = 'docker' + rs = libs.tapeTPS(CmdInfo,tapeCmd); + expect(true).to.deep.equal(parseFloat(rs)>0); + done(); + }) + + it('appendRS', function(done){ libs.init(); - libs.run('sample,0.75,10,2,256, 180.038278,'); - libs.run('sample,0.75,40,2,256, 291.310916,'); - libs.run('sample,0.75,80,2,256, 333.041573,'); - libs.run('sample,0.75,120,2,256, 351.752320,'); - libs.run('sample,1,10,2,256, 172.872861,'); - libs.run('sample,1,40,2,256, 291.617799,'); - libs.run('sample,1,80,2,256, 337.826232,'); - libs.run('sample,1,120,2,256, 319.039588,'); - libs.run('sample,2,10,2,256, 182.105577,'); - libs.run('sample,2,40,2,256, 260.276446,'); - libs.run('sample,2,80,2,256, 323.542760,'); - libs.run('sample,2,120,2,256, 323.526945,'); - libs.run('sample,1.5,10,2,256, 172.745382,'); - libs.run('sample,1.5,40,2,256, 268.041591,'); - libs.run('sample,1.5,80,2,256, 348.150198,'); - libs.run('sample,1.5,120,2,256, 310.915616,'); + libs.appendRS('sample,0.75,10,2,256, 180.038278,'); + libs.appendRS('sample,0.75,40,2,256, 291.310916,'); + libs.appendRS('sample,0.75,80,2,256, 333.041573,'); + libs.appendRS('sample,0.75,120,2,256, 351.752320,'); + libs.appendRS('sample,1,10,2,256, 172.872861,'); + libs.appendRS('sample,1,40,2,256, 291.617799,'); + libs.appendRS('sample,1,80,2,256, 337.826232,'); + libs.appendRS('sample,1,120,2,256, 319.039588,'); + libs.appendRS('sample,2,10,2,256, 182.105577,'); + libs.appendRS('sample,2,40,2,256, 260.276446,'); + libs.appendRS('sample,2,80,2,256, 323.542760,'); + libs.appendRS('sample,2,120,2,256, 323.526945,'); + libs.appendRS('sample,1.5,10,2,256, 172.745382,'); + libs.appendRS('sample,1.5,40,2,256, 268.041591,'); + libs.appendRS('sample,1.5,80,2,256, 348.150198,'); + libs.appendRS('sample,1.5,120,2,256, 310.915616,'); done(); })