//NOTE: this script require node.js v8+ to run (native async/await) var uuid = require('uuid'); var client = require('../src/client'); var conn = client.createConnection({}, 'tcp://localhost:1113'); conn.on('connected', onConnected); var batchSize = parseInt(process.argv[2], 10) || 500; const MB = 1024*1024; const adminCreds = new client.UserCredentials("admin", "changeit"); const nbEvents = 50000; const events = []; const streams = []; const writeOneStream = 'testWrite-' + uuid.v4(); for(var i = 0; i < nbEvents; i++) { streams.push('testWrite-' + uuid.v4()); events.push(client.createJsonEventData(uuid.v4(), {a:i, b:i+1, c:i+2}, null, 'myEvent')) } conn.connect(); function rssMB() { return (process.memoryUsage().rss / MB).toFixed(2); } function reportResult(action, nbEvents, elapsedMs) { console.log(action, nbEvents, 'events took', elapsedMs, 'ms, avg', (nbEvents/(elapsedMs/1000)).toFixed(2), '/s'); console.log('Memory usage:', rssMB(), 'MB\n'); } async function testWriteOneStreamAnyVersion(batchSize) { console.log(`Test Write One Stream Any Version (batchSize = ${batchSize})...`); const start = Date.now(); const promises = []; for(let i = 0; i < nbEvents; i += batchSize) { promises.push(conn.appendToStream(writeOneStream, client.expectedVersion.any, events.slice(i, i + batchSize))) } await Promise.all(promises); var diff = Date.now() - start; reportResult("Writing", nbEvents, diff) } async function testWriteOneStreamWithVersion(batchSize) { console.log(`Test Write One Stream With Version (batchSize = ${batchSize})...`); const writeStream = 'testWrite-' + uuid.v4(); const start = Date.now(); const promises = []; for(let i = 0; i < nbEvents; i += batchSize) { promises.push(conn.appendToStream(writeStream, i-1, events.slice(i, i + batchSize))) } await Promise.all(promises); var diff = Date.now() - start; reportResult("Writing", nbEvents, diff) } async function testWriteMultipleStream() { console.log('Test Write Multiple Streams...'); var start = Date.now(); var promises = []; for(var i = 0; i < nbEvents; i++) { promises.push(conn.appendToStream(streams[i], client.expectedVersion.emptyStream, events[i])) } await Promise.all(promises); const diff = Date.now() - start; reportResult("Writing", nbEvents, diff) } async function testRead(batchSize) { console.log(`Test Read One Stream (batchSize = ${batchSize})...`); const start = Date.now(); const promises = []; for(let i = 0; i < nbEvents; i += batchSize) { promises.push(conn.readStreamEventsForward(writeOneStream, i, batchSize, false)); } const results = await Promise.all(promises); const diff = Date.now() - start; const readEvents = results.reduce((x,y) => x + y.events.length, 0); reportResult("Reading", readEvents, diff) } async function testReadAll(batchSize) { console.log(`Test Read from $all (batchSize = ${batchSize})...`); const start = Date.now(); let pos = client.positions.start; let eventsCount = 0; for(;;) { var result = await conn.readAllEventsForward(pos, batchSize, false, adminCreds); pos = result.nextPosition; eventsCount += result.events.length; if (result.isEndOfStream) break; } const diff = Date.now() - start; reportResult("Reading", eventsCount, diff) } async function onConnected() { try { await testWriteOneStreamAnyVersion(1); await testWriteOneStreamAnyVersion(batchSize); await testWriteOneStreamWithVersion(1); await testWriteOneStreamWithVersion(batchSize); await testWriteMultipleStream(); await testRead(1); await testRead(batchSize); await testReadAll(batchSize); conn.close(); } catch (e) { console.log('ERROR', e); } }