From 5cc81aa195625df3484eef58d236607036da055d Mon Sep 17 00:00:00 2001 From: Scott Bigelow Date: Wed, 27 Jun 2018 16:03:11 -0700 Subject: [PATCH 01/16] 0.2.13 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 831852be5..2081d3406 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "augur-node", - "version": "0.2.12", + "version": "0.2.13", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 477e1da8f..b3ce91a39 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "augur-node", - "version": "0.2.12", + "version": "0.2.13", "description": "Augur Node", "author": "The Augur Developers ", "license": "MIT", From fae7342cfd5ac6c8e43fa0aeb903e9538f7c9cc8 Mon Sep 17 00:00:00 2001 From: Scott Bigelow Date: Wed, 27 Jun 2018 16:10:40 -0700 Subject: [PATCH 02/16] 0.2.14 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2081d3406..9bc5e7429 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "augur-node", - "version": "0.2.13", + "version": "0.2.14", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index b3ce91a39..86fb299d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "augur-node", - "version": "0.2.13", + "version": "0.2.14", "description": "Augur Node", "author": "The Augur Developers ", "license": "MIT", From 6fd036cd24af4e398ce362c6ba860dd51fb8d333 Mon Sep 17 00:00:00 2001 From: Scott Bigelow Date: Fri, 29 Jun 2018 09:14:36 -0700 Subject: [PATCH 03/16] augur.js@4.12.0-15 --- package-lock.json | 22 +++++++++++----------- package.json | 2 +- yarn.lock | 6 +++--- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9bc5e7429..33419eacc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -664,9 +664,9 @@ } }, "augur.js": { - "version": "4.12.0-14", - "resolved": "https://registry.npmjs.org/augur.js/-/augur.js-4.12.0-14.tgz", - "integrity": "sha512-8qznweP8Hid/EskPEFooc7HkbSGQjVehJNq5t6ec765jiOMaO43D8F/OwXW0gtmFgrnPYKczLXJyOdtz0+FySg==", + "version": "4.12.0-15", + "resolved": "https://registry.npmjs.org/augur.js/-/augur.js-4.12.0-15.tgz", + "integrity": "sha512-EM6b94adxiuGoI8JRrfiwc1GBH4nu9Dwh7IU3LTQwj2JklyL7tBH4D4wwyEKFk/wkvQsCsGdJNSX2VUxa2UHwg==", "requires": { "async": "1.5.2", "augur-core": "1.0.0-16", @@ -7994,9 +7994,9 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, "prettier": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.6.tgz", - "integrity": "sha512-p5eqCNiohWZN++7aJXUVj0JgLqHCPLf9GLIcLBHGNWs4Y9FJOPs6+KNO2WT0udJIQJTbeZFrJkjzjcb8fkAYYQ==" + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.7.tgz", + "integrity": "sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w==" }, "pretty-bytes": { "version": "4.0.2", @@ -11089,7 +11089,7 @@ "chalk": "2.4.1", "cross-spawn": "6.0.5", "diff": "3.5.0", - "enhanced-resolve": "4.0.0", + "enhanced-resolve": "4.1.0", "envinfo": "5.10.0", "glob-all": "3.1.0", "global-modules": "1.0.0", @@ -11105,7 +11105,7 @@ "mkdirp": "0.5.1", "p-each-series": "1.0.0", "p-lazy": "1.0.0", - "prettier": "1.13.6", + "prettier": "1.13.7", "supports-color": "5.4.0", "v8-compile-cache": "2.0.0", "webpack-addons": "1.1.5", @@ -11162,9 +11162,9 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, "enhanced-resolve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz", - "integrity": "sha512-jox/62b2GofV1qTUQTMPEJSDIGycS43evqYzD/KVtEb9OCoki9cnacUPxCrZa7JfPzZSYOCZhu9O9luaMxAX8g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "requires": { "graceful-fs": "4.1.11", "memory-fs": "0.4.1", diff --git a/package.json b/package.json index 627b182eb..7e2b01e2c 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "@types/uuid": "3.4.3", "@types/ws": "3.0.2", "async": "2.6.0", - "augur.js": "4.12.0-14", + "augur.js": "4.12.0-15", "bignumber.js": "6.0.0", "chalk": "2.3.2", "express": "4.16.2", diff --git a/yarn.lock b/yarn.lock index 806c7e4b7..03622b7da 100644 --- a/yarn.lock +++ b/yarn.lock @@ -558,9 +558,9 @@ augur-core@1.0.0-16: solidity-coverage "0.5.4" yargs "11.0.0" -augur.js@4.12.0-14: - version "4.12.0-14" - resolved "https://registry.yarnpkg.com/augur.js/-/augur.js-4.12.0-14.tgz#290900c00c748c8019a5dc4c2b39eeb767edbc41" +augur.js@4.12.0-15: + version "4.12.0-15" + resolved "https://registry.yarnpkg.com/augur.js/-/augur.js-4.12.0-15.tgz#03f028b366a3afdb23d26e10ddde12bbc0b5345b" dependencies: async "1.5.2" augur-core "1.0.0-16" From 5a2ee58b1a50909a85afd9eebae2fbb76a29565f Mon Sep 17 00:00:00 2001 From: Scott Bigelow Date: Fri, 29 Jun 2018 11:03:33 -0700 Subject: [PATCH 04/16] Get rid of the "isRemoved" concept from orders, just get rid of it Causes issues with upsert of isRemoved row --- .../log-processors/order-created.ts | 2 +- src/migrations/20171005123242_orders.ts | 1 - src/server/getters/get-all-orders.ts | 1 - src/server/getters/get-better-worse-orders.ts | 2 +- src/server/getters/get-orders.ts | 1 - .../log-processors/order-canceled.js | 2 -- .../log-processors/order-created.js | 24 +------------------ .../log-processors/order-filled/index.js | 4 ---- 8 files changed, 3 insertions(+), 34 deletions(-) diff --git a/src/blockchain/log-processors/order-created.ts b/src/blockchain/log-processors/order-created.ts index 8d2f89683..acfa6be9c 100644 --- a/src/blockchain/log-processors/order-created.ts +++ b/src/blockchain/log-processors/order-created.ts @@ -70,7 +70,7 @@ export function processOrderCreatedLog(db: Knex, augur: Augur, log: FormattedEve } export function processOrderCreatedLogRemoval(db: Knex, augur: Augur, log: FormattedEventLog, callback: ErrorCallback): void { - db.from("orders").where("orderId", log.orderId).update({ isRemoved: 1 }).asCallback((err: Error|null): void => { + db.from("orders").where("orderId", log.orderId).delete().asCallback((err: Error|null): void => { if (err) return callback(err); augurEmitter.emit("OrderCreated", log); callback(null); diff --git a/src/migrations/20171005123242_orders.ts b/src/migrations/20171005123242_orders.ts index 02d2fe656..31ac02e8a 100644 --- a/src/migrations/20171005123242_orders.ts +++ b/src/migrations/20171005123242_orders.ts @@ -22,7 +22,6 @@ exports.up = async (knex: Knex): Promise => { table.specificType("tokensEscrowed", "varchar(255) NOT NULL CONSTRAINT nonnegativeTokensEscrowed CHECK (ltrim(\"tokensEscrowed\", '-') = \"tokensEscrowed\")"); table.specificType("sharesEscrowed", "varchar(255) NOT NULL CONSTRAINT nonnegativeSharesEscrowed CHECK (ltrim(\"sharesEscrowed\", '-') = \"sharesEscrowed\")"); table.string("tradeGroupId", 42); - table.integer("isRemoved").nullable(); }); }); }; diff --git a/src/server/getters/get-all-orders.ts b/src/server/getters/get-all-orders.ts index 841d89b3a..11898af27 100644 --- a/src/server/getters/get-all-orders.ts +++ b/src/server/getters/get-all-orders.ts @@ -9,7 +9,6 @@ export interface AllOrders { export function getAllOrders(db: Knex, account: Address, callback: (err: Error|null, result?: AllOrders) => void): void { const query = db.select(["orderId", "tokensEscrowed", "sharesEscrowed", "marketId"]).from("orders") .where("orderCreator", account) - .whereNull("isRemoved") .where("orderState", "OPEN"); query.asCallback((err: Error|null, allOrders?: Array>): void => { if (err) return callback(err); diff --git a/src/server/getters/get-better-worse-orders.ts b/src/server/getters/get-better-worse-orders.ts index 59923fe30..9fd1ebf3d 100644 --- a/src/server/getters/get-better-worse-orders.ts +++ b/src/server/getters/get-better-worse-orders.ts @@ -17,7 +17,7 @@ interface OrderRow { export function getBetterWorseOrders(db: Knex, marketId: Address, outcome: number, orderType: string, price: string, callback: (err?: Error|null, result?: BetterWorseResult) => void): void { if (marketId == null || outcome == null || orderType == null || price == null) return callback(new Error("Must provide marketId, outcome, orderType, and price")); if (orderType !== "buy" && orderType !== "sell") return callback(new Error(`orderType must be either "buy" or "sell"`)); - const ordersQuery = db("orders").select("orderId", "price").where({ orderState: "OPEN", marketId, outcome, orderType }).whereNull("isRemoved"); + const ordersQuery = db("orders").select("orderId", "price").where({ orderState: "OPEN", marketId, outcome, orderType }); ordersQuery.asCallback((err: Error|null, orders: Array) => { if (err) return callback(err); const priceBN = new BigNumber(price); diff --git a/src/server/getters/get-orders.ts b/src/server/getters/get-orders.ts index a5c4291e2..ae189f5d4 100644 --- a/src/server/getters/get-orders.ts +++ b/src/server/getters/get-orders.ts @@ -37,7 +37,6 @@ export function getOrders(db: Knex, universe: Address|null, marketId: Address|nu query.where(queryData); if (earliestCreationTime != null) query.where("creationTime", ">=", earliestCreationTime); if (latestCreationTime != null) query.where("creationTime", "<=", latestCreationTime); - query.whereNull("isRemoved"); if (orderState != null && orderState !== OrderState.ALL) query.where("orderState", orderState); queryModifier(db, query, "volume", "desc", sortBy, isSortDescending, limit, offset, (err: Error|null, ordersRows?: Array): void => { if (err) return callback(err); diff --git a/test/unit/blockchain/log-processors/order-canceled.js b/test/unit/blockchain/log-processors/order-canceled.js index 1e932e572..adf9a61bb 100644 --- a/test/unit/blockchain/log-processors/order-canceled.js +++ b/test/unit/blockchain/log-processors/order-canceled.js @@ -77,7 +77,6 @@ describe("blockchain/log-processors/order-canceled", () => { tokensEscrowed: new BigNumber("0.7", 10), sharesEscrowed: new BigNumber("0", 10), tradeGroupId: null, - isRemoved: null, }); assert.deepEqual(records.orderCanceled, { blockNumber: 1400101, @@ -108,7 +107,6 @@ describe("blockchain/log-processors/order-canceled", () => { tokensEscrowed: new BigNumber("0.7", 10), sharesEscrowed: new BigNumber("0", 10), tradeGroupId: null, - isRemoved: null, }); assert.isUndefined(records.orderCanceled); }, diff --git a/test/unit/blockchain/log-processors/order-created.js b/test/unit/blockchain/log-processors/order-created.js index 199db9862..917dde551 100644 --- a/test/unit/blockchain/log-processors/order-created.js +++ b/test/unit/blockchain/log-processors/order-created.js @@ -77,33 +77,11 @@ describe("blockchain/log-processors/order-created", () => { tokensEscrowed: new BigNumber("2.25", 10), sharesEscrowed: new BigNumber("0", 10), tradeGroupId: "TRADE_GROUP_ID", - isRemoved: null, }]); }, onRemoved: (err, records) => { assert.ifError(err); - assert.deepEqual(records, [{ - orderId: "ORDER_ID", - transactionHash: "0x0000000000000000000000000000000000000000000000000000000000000B00", - logIndex: 0, - marketId: "0x0000000000000000000000000000000000000001", - outcome: 0, - shareToken: "0x0100000000000000000000000000000000000000", - orderType: "buy", - orderCreator: "CREATOR_ADDRESS", - orderState: "OPEN", - blockNumber: 1400100, - fullPrecisionPrice: new BigNumber("0.75", 10), - fullPrecisionAmount: new BigNumber("3", 10), - originalFullPrecisionAmount: new BigNumber("3", 10), - price: new BigNumber("0.75", 10), - amount: new BigNumber("3", 10), - originalAmount: new BigNumber("3", 10), - tokensEscrowed: new BigNumber("2.25", 10), - sharesEscrowed: new BigNumber("0", 10), - tradeGroupId: "TRADE_GROUP_ID", - isRemoved: 1, - }]); + assert.deepEqual(records, []); }, }, }); diff --git a/test/unit/blockchain/log-processors/order-filled/index.js b/test/unit/blockchain/log-processors/order-filled/index.js index d732bc12b..065ff06e5 100644 --- a/test/unit/blockchain/log-processors/order-filled/index.js +++ b/test/unit/blockchain/log-processors/order-filled/index.js @@ -126,7 +126,6 @@ describe("blockchain/log-processors/order-filled", () => { tokensEscrowed: new BigNumber("0.7", 10), sharesEscrowed: new BigNumber("0", 10), tradeGroupId: null, - isRemoved: null, }]); assert.deepEqual(records.trades, [{ orderId: "0x1000000000000000000000000000000000000000000000000000000000000000", @@ -278,7 +277,6 @@ describe("blockchain/log-processors/order-filled", () => { tokensEscrowed: new BigNumber("0.7", 10), sharesEscrowed: new BigNumber("0", 10), tradeGroupId: null, - isRemoved: null, }]); assert.deepEqual(records.trades, []); assert.deepEqual(records.markets, { @@ -474,7 +472,6 @@ describe("blockchain/log-processors/order-filled", () => { tokensEscrowed: new BigNumber("0.7", 10), sharesEscrowed: new BigNumber("0", 10), tradeGroupId: null, - isRemoved: null, }]); assert.deepEqual(records.trades, [{ orderId: "0x1000000000000000000000000000000000000000000000000000000000000000", @@ -626,7 +623,6 @@ describe("blockchain/log-processors/order-filled", () => { tokensEscrowed: new BigNumber("0.7", 10), sharesEscrowed: new BigNumber("0", 10), tradeGroupId: null, - isRemoved: null, }]); assert.deepEqual(records.trades, []); assert.deepEqual(records.markets, { From 8091c89787a243be940a8f12b132be4eeb6c75ce Mon Sep 17 00:00:00 2001 From: Scott Bigelow Date: Fri, 29 Jun 2018 20:19:44 -0700 Subject: [PATCH 05/16] augur.js@4.12.0-16 --- package-lock.json | 22 +++++++++++----------- package.json | 2 +- yarn.lock | 22 +++++++++++----------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index 33419eacc..8f3c06a9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -624,9 +624,9 @@ "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=" }, "augur-core": { - "version": "1.0.0-16", - "resolved": "https://registry.npmjs.org/augur-core/-/augur-core-1.0.0-16.tgz", - "integrity": "sha512-sRAt/tTq4OlzcX3f+scNPOI2bczR1sC+9Sts//n00/vI9DH3behETtjCEInd9adhNtT5OeHxbExvHd8qpFlThg==", + "version": "1.0.0-17", + "resolved": "https://registry.npmjs.org/augur-core/-/augur-core-1.0.0-17.tgz", + "integrity": "sha512-EvFDJ7TbAH+P2wSPa7AWClq12lnN8EmhhpgDbMTs6z+XHn00AqWeOspOiScP9xyUlQVRg1MeoXmFmzq6NjXApA==", "requires": { "@types/get-port": "3.2.0", "@types/mkdirp": "0.5.1", @@ -637,7 +637,7 @@ "binascii": "0.0.1", "bn.js": "4.11.8", "copy-dir": "0.3.0", - "crypto-promise": "2.1.0", + "crypto-promise": "2.0.0", "ethereumjs-testrpc": "6.0.3", "ethjs-abi": "0.2.1", "ethjs-account": "0.1.4", @@ -664,12 +664,12 @@ } }, "augur.js": { - "version": "4.12.0-15", - "resolved": "https://registry.npmjs.org/augur.js/-/augur.js-4.12.0-15.tgz", - "integrity": "sha512-EM6b94adxiuGoI8JRrfiwc1GBH4nu9Dwh7IU3LTQwj2JklyL7tBH4D4wwyEKFk/wkvQsCsGdJNSX2VUxa2UHwg==", + "version": "4.12.0-16", + "resolved": "https://registry.npmjs.org/augur.js/-/augur.js-4.12.0-16.tgz", + "integrity": "sha512-GQMZv/biT/xGohDZirEdFSeMqd2PZU6VP9KTAkh7HMgMpDEa7P2QIvPbrCG/ZmxNhQ/H+om2v9ASfZR1w4rauA==", "requires": { "async": "1.5.2", - "augur-core": "1.0.0-16", + "augur-core": "1.0.0-17", "bignumber.js": "6.0.0", "clone": "2.1.1", "columnify": "1.5.4", @@ -2539,9 +2539,9 @@ "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=" }, "crypto-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/crypto-promise/-/crypto-promise-2.1.0.tgz", - "integrity": "sha512-jkfCVhLJKVfFjgCntWzbPL5FOZk2KqlJMMVsdu+tGwgtQCRahX6YbQ6LtDDNcehnlRc6yOyrQBfuQOUro8Oyuw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-promise/-/crypto-promise-2.0.0.tgz", + "integrity": "sha1-HLxHRlG7vhOH21BlqD/6HX4HTHQ=", "requires": { "es6-denodeify": "0.1.5", "stream-concat-promise": "1.0.2" diff --git a/package.json b/package.json index 7e2b01e2c..c2f7034f5 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "@types/uuid": "3.4.3", "@types/ws": "3.0.2", "async": "2.6.0", - "augur.js": "4.12.0-15", + "augur.js": "4.12.0-16", "bignumber.js": "6.0.0", "chalk": "2.3.2", "express": "4.16.2", diff --git a/yarn.lock b/yarn.lock index 03622b7da..a78b6e720 100644 --- a/yarn.lock +++ b/yarn.lock @@ -57,7 +57,7 @@ "@types/express-serve-static-core" "*" "@types/serve-static" "*" -"@types/get-port@^3.2.0": +"@types/get-port@3.2.0": version "3.2.0" resolved "https://registry.yarnpkg.com/@types/get-port/-/get-port-3.2.0.tgz#f9e0a11443cc21336470185eae3dfba4495d29bc" @@ -527,11 +527,11 @@ atob@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" -augur-core@1.0.0-16: - version "1.0.0-16" - resolved "https://registry.yarnpkg.com/augur-core/-/augur-core-1.0.0-16.tgz#1ccb62115de88be8a8384ef88bd87446be606b90" +augur-core@1.0.0-17: + version "1.0.0-17" + resolved "https://registry.yarnpkg.com/augur-core/-/augur-core-1.0.0-17.tgz#41794db6d5f7217c6f9edf23d6c7fd92cb085ec8" dependencies: - "@types/get-port" "^3.2.0" + "@types/get-port" "3.2.0" "@types/mkdirp" "0.5.1" "@types/node" "9.6.7" "@types/yargs" "11.0.0" @@ -540,7 +540,7 @@ augur-core@1.0.0-16: binascii "0.0.1" bn.js "4.11.8" copy-dir "0.3.0" - crypto-promise "^2.0.0" + crypto-promise "2.0.0" ethereumjs-testrpc "6.0.3" ethjs-abi "0.2.1" ethjs-account "0.1.4" @@ -558,12 +558,12 @@ augur-core@1.0.0-16: solidity-coverage "0.5.4" yargs "11.0.0" -augur.js@4.12.0-15: - version "4.12.0-15" - resolved "https://registry.yarnpkg.com/augur.js/-/augur.js-4.12.0-15.tgz#03f028b366a3afdb23d26e10ddde12bbc0b5345b" +augur.js@4.12.0-16: + version "4.12.0-16" + resolved "https://registry.yarnpkg.com/augur.js/-/augur.js-4.12.0-16.tgz#7574829577090686cce9df0b4fc5a3981ea7142d" dependencies: async "1.5.2" - augur-core "1.0.0-16" + augur-core "1.0.0-17" bignumber.js "6.0.0" clone "2.1.1" columnify "1.5.4" @@ -1968,7 +1968,7 @@ crypto-js@^3.1.4: version "3.1.8" resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.1.8.tgz#715f070bf6014f2ae992a98b3929258b713f08d5" -crypto-promise@^2.0.0: +crypto-promise@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/crypto-promise/-/crypto-promise-2.0.0.tgz#1cbc474651bbbe1387db5065a83ffa1d7e074c74" dependencies: From a0afc99b2f4e806aaceac99a11251f04f0aaedc1 Mon Sep 17 00:00:00 2001 From: Jack Peterson Date: Mon, 2 Jul 2018 15:41:50 -0700 Subject: [PATCH 06/16] Added wildcard to augur db in gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7d1bbd765..de516b47c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,5 @@ node_modules/ coverage/ build/ definitions/ -augur.db +augur*.db tags From 09e36a46aee289c257175b17c5a4ca07deff9e27 Mon Sep 17 00:00:00 2001 From: Justin <328965+justinbarry@users.noreply.github.com> Date: Tue, 3 Jul 2018 10:48:28 -0700 Subject: [PATCH 07/16] Justinbarry/ch13147/add logging to augur app (#484) * Add wallaby.js file for tests written in typescript * Allow tests to be written in typescript * Add Logger to send logs to multiple destinations (file, console, etc) --- package-lock.json | 119 ++++++++++++++++++ package.json | 4 +- .../bulk-sync-augur-node-with-blockchain.ts | 7 +- src/blockchain/download-augur-logs.ts | 5 +- src/blockchain/process-block.ts | 8 +- src/blockchain/process-queue.ts | 3 +- src/controller.ts | 25 ++-- src/runServer.ts | 5 +- src/server/dispatch-json-rpc-request.ts | 3 +- src/server/run-server.ts | 8 +- src/server/run-websocket-server.ts | 16 +-- src/setup/check-and-initialize-augur-db.ts | 5 +- src/utils/log-error.ts | 4 +- src/utils/logger/StandardLogger.ts | 19 +++ src/utils/logger/index.ts | 8 ++ src/utils/logger/logger.ts | 35 ++++++ test/mocha.opts | 1 + test/unit/utils/logger.ts | 37 ++++++ wallaby.conf.js | 16 +++ 19 files changed, 293 insertions(+), 35 deletions(-) create mode 100644 src/utils/logger/StandardLogger.ts create mode 100644 src/utils/logger/index.ts create mode 100644 src/utils/logger/logger.ts create mode 100644 test/unit/utils/logger.ts create mode 100644 wallaby.conf.js diff --git a/package-lock.json b/package-lock.json index 8f3c06a9c..3c4fa0cfd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,15 @@ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==" }, + "@sinonjs/formatio": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", + "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", + "dev": true, + "requires": { + "samsam": "1.3.0" + } + }, "@types/async": { "version": "2.0.43", "resolved": "https://registry.npmjs.org/@types/async/-/async-2.0.43.tgz", @@ -143,6 +152,12 @@ "@types/mime": "2.0.0" } }, + "@types/sinon": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-5.0.1.tgz", + "integrity": "sha512-yxzBCIjE3lp9lYjfBbIK/LRCoXgCLLbIIBIje7eNCcUIIR2CZZtyX5uto2hVoMSMqLrsRrT6mwwUEd0yFgOwpA==", + "dev": true + }, "@types/sqlite3": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@types/sqlite3/-/sqlite3-3.1.1.tgz", @@ -6056,6 +6071,12 @@ "verror": "1.10.0" } }, + "just-extend": { + "version": "1.1.27", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-1.1.27.tgz", + "integrity": "sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g==", + "dev": true + }, "keccak": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.2.0.tgz", @@ -6481,6 +6502,12 @@ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, "log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", @@ -6533,6 +6560,12 @@ } } }, + "lolex": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.0.tgz", + "integrity": "sha512-uJkH2e0BVfU5KOJUevbTOtpDduooSarH5PopO+LfM/vZf8Z9sJzODqKev804JYM2i++ktJfUmC1le4LwFQ1VMg==", + "dev": true + }, "long": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", @@ -7057,6 +7090,36 @@ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==" }, + "nise": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.2.tgz", + "integrity": "sha512-BxH/DxoQYYdhKgVAfqVy4pzXRZELHOIewzoesxpjYvpU+7YOalQhGNPf7wAx8pLrTNPrHRDlLOkAl8UI0ZpXjw==", + "dev": true, + "requires": { + "@sinonjs/formatio": "2.0.0", + "just-extend": "1.1.27", + "lolex": "2.7.0", + "path-to-regexp": "1.7.0", + "text-encoding": "0.6.4" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + } + } + }, "node-abi": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.4.3.tgz", @@ -8775,6 +8838,12 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "samsam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", + "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", + "dev": true + }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -8963,6 +9032,44 @@ "simple-concat": "1.0.0" } }, + "sinon": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-6.0.1.tgz", + "integrity": "sha512-rfszhNcfamK2+ofIPi9XqeH89pH7KGDcAtM+F9CsjHXOK3jzWG99vyhyD2V+r7s4IipmWcWUFYq4ftZ9/Eu2Wg==", + "dev": true, + "requires": { + "@sinonjs/formatio": "2.0.0", + "diff": "3.5.0", + "lodash.get": "4.4.2", + "lolex": "2.7.0", + "nise": "1.4.2", + "supports-color": "5.4.0", + "type-detect": "4.0.8" + }, + "dependencies": { + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -10192,6 +10299,12 @@ } } }, + "text-encoding": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", + "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", + "dev": true + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -10442,6 +10555,12 @@ "prelude-ls": "1.1.2" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, "type-is": { "version": "1.6.16", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", diff --git a/package.json b/package.json index c2f7034f5..2bd740f92 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "start": "node ./build/runServer", "debug": "node --inspect-brk ./build/runServer", "test": "mocha test/unit", - "test:integration": "mocha -r ts-node/register 'test/integration/**/*.ts'", + "test:integration": "mocha 'test/integration/**/*.ts'", "test:integration:docker": "docker-compose up --force-recreate --abort-on-container-exit", "lint": "tslint -c tslint.json -p . ./src/*.ts ./src/**/*.ts ./src/**/**/*.ts ./src/**/**/**/*.ts && eslint test/unit", "build": "tsc", @@ -76,6 +76,7 @@ "@types/chai": "^4.1.3", "@types/knex": "0.14.8", "@types/mocha": "^5.2.2", + "@types/sinon": "^5.0.1", "chai": "3.5.0", "coveralls": "3.0.1", "eslint": "3.17.1", @@ -87,6 +88,7 @@ "proxyquire": "1.7.11", "replace-in-file": "3.0.0", "shared-git-hooks": "1.2.1", + "sinon": "^6.0.1", "tslint": "5.7.0", "tslint-eslint-rules": "4.1.1", "typescript": "2.9.2" diff --git a/src/blockchain/bulk-sync-augur-node-with-blockchain.ts b/src/blockchain/bulk-sync-augur-node-with-blockchain.ts index c7549bf0e..9e7476ead 100644 --- a/src/blockchain/bulk-sync-augur-node-with-blockchain.ts +++ b/src/blockchain/bulk-sync-augur-node-with-blockchain.ts @@ -3,6 +3,7 @@ import * as Knex from "knex"; import { promisify } from "util"; import { downloadAugurLogs } from "./download-augur-logs"; import { augurEmitter } from "../events"; +import { logger } from "../utils/logger"; const BLOCKSTREAM_HANDOFF_BLOCKS = 5; let syncFinished = false; @@ -27,7 +28,7 @@ export async function bulkSyncAugurNodeWithBlockchain(db: Knex, augur: Augur): P const highestBlockNumber: number = parseInt(augur.rpc.getCurrentBlock().number, 16); let fromBlock: number; if (uploadBlockNumber > highestBlockNumber) { - console.log(`Synchronization started at (${uploadBlockNumber}), which exceeds the current block from the ethereum node (${highestBlockNumber}), starting from 0 instead`); + logger.info(`Synchronization started at (${uploadBlockNumber}), which exceeds the current block from the ethereum node (${highestBlockNumber}), starting from 0 instead`); fromBlock = 0; } else { fromBlock = lastSyncBlockNumber == null ? uploadBlockNumber : lastSyncBlockNumber + 1; @@ -38,11 +39,11 @@ export async function bulkSyncAugurNodeWithBlockchain(db: Knex, augur: Augur): P if (handoffBlockNumber > highestBlockNumber) { throw new Error(`Not enough blocks to start blockstream reliably, wait at least ${BLOCKSTREAM_HANDOFF_BLOCKS} from ${fromBlock}. Current Block: ${highestBlockNumber}`); } - console.warn(`Not leaving at least ${BLOCKSTREAM_HANDOFF_BLOCKS} between batch download and blockstream hand off during re-org can cause data quality issues`); + logger.warn(`Not leaving at least ${BLOCKSTREAM_HANDOFF_BLOCKS} between batch download and blockstream hand off during re-org can cause data quality issues`); } await promisify(downloadAugurLogs)(db, augur, fromBlock, handoffBlockNumber); setSyncFinished(); await db.insert({ highestBlockNumber }).into("blockchain_sync_history"); - console.log(`Finished batch load from ${fromBlock} to ${handoffBlockNumber}`); + logger.info(`Finished batch load from ${fromBlock} to ${handoffBlockNumber}`); return handoffBlockNumber; } diff --git a/src/blockchain/download-augur-logs.ts b/src/blockchain/download-augur-logs.ts index 1a786c9a8..a4e61b9e7 100644 --- a/src/blockchain/download-augur-logs.ts +++ b/src/blockchain/download-augur-logs.ts @@ -6,6 +6,7 @@ import { BlockDetail, ErrorCallback, FormattedEventLog } from "../types"; import { processLog } from "./process-logs"; import { logProcessors } from "./log-processors"; import { processBlockByBlockDetails } from "./process-block"; +import { logger } from "../utils/logger"; const BLOCK_DOWNLOAD_PARALLEL_LIMIT = 15; @@ -42,7 +43,7 @@ function processBatchOfLogs(db: Knex, augur: Augur, allAugurLogs: Array): void => { if (!batchOfAugurLogs) return ; batchLogProcessQueue.push( (nextBatch) => processBatchOfLogs(db, augur, batchOfAugurLogs, nextBatch )); diff --git a/src/blockchain/process-block.ts b/src/blockchain/process-block.ts index b4aebc480..951bf5fec 100644 --- a/src/blockchain/process-block.ts +++ b/src/blockchain/process-block.ts @@ -8,6 +8,7 @@ import { BlockDetail, BlocksRow, AsyncCallback, ErrorCallback, MarketsContractAd import { updateActiveFeeWindows, updateMarketState } from "./log-processors/database"; import { processQueue, logQueueProcess } from "./process-queue"; import { getMarketsWithReportingState } from "../server/getters/database"; +import { logger } from "../utils/logger"; interface MarketIdUniverseFeeWindow extends MarketsContractAddressRow { universe: Address; @@ -88,7 +89,7 @@ export function processBlockByBlockDetails(db: Knex, augur: Augur, block: BlockD const blockHash = block.hash; blockHeadTimestamp = parseInt(block.timestamp, 16); const timestamp = getOverrideTimestamp() || blockHeadTimestamp; - console.log("new block:", blockNumber, timestamp); + logger.info("new block:", `${blockNumber}`, `${timestamp}`); db.transaction((trx: Knex.Transaction): void => { insertBlockRow(trx, blockNumber, blockHash, timestamp, (err: Error|null) => { if (err) { @@ -117,7 +118,7 @@ export function processBlockByBlockDetails(db: Knex, augur: Augur, block: BlockD function _processBlockRemoval(db: Knex, block: BlockDetail, callback: ErrorCallback): void { const blockNumber = parseInt(block.number, 16); - console.log("block removed:", blockNumber); + logger.info("block removed:", `${blockNumber}`); db.transaction((trx: Knex.Transaction): void => { const blockHash = block.hash; logQueueProcess(trx, blockHash, (err: Error|null) => { @@ -125,7 +126,8 @@ function _processBlockRemoval(db: Knex, block: BlockDetail, callback: ErrorCallb trx.rollback(err); return callback(err); } - // TODO: un-advance time + // TODO: un-advan + // ce time db("blocks").transacting(trx).where({ blockNumber }).del().asCallback((err: Error|null): void => { if (err) { trx.rollback(err); diff --git a/src/blockchain/process-queue.ts b/src/blockchain/process-queue.ts index 61ed84f37..f3fdbd329 100644 --- a/src/blockchain/process-queue.ts +++ b/src/blockchain/process-queue.ts @@ -1,6 +1,7 @@ import * as async from "async"; import { ErrorCallback } from "../types"; import * as Knex from "knex"; +import { logger } from "../utils/logger"; interface LogQueue { [blockHash: string]: Array; @@ -34,7 +35,7 @@ export function logQueuePop(blockHash: string): Array { export function logQueueProcess(db: Knex, blockHash: string, callback: ErrorCallback): void { const logCallbacks = logQueuePop(blockHash); - if (logCallbacks.length > 0) console.log(`Processing ${logCallbacks.length} logs`); + if (logCallbacks.length > 0) logger.info(`Processing ${logCallbacks.length} logs`); async.eachSeries(logCallbacks, (logCallback: LogProcessCallback, next: ErrorCallback) => logCallback(db, (err) => next(err)), callback); diff --git a/src/controller.ts b/src/controller.ts index a4b0bea4d..4bcb6de77 100644 --- a/src/controller.ts +++ b/src/controller.ts @@ -10,6 +10,8 @@ import { processQueue } from "./blockchain/process-queue"; import { ErrorCallback } from "./types"; import { EventEmitter } from "events"; import { ControlMessageType } from "./constants"; +import { logger } from "./utils/logger"; +import { LoggerInterface } from "./utils/logger/logger"; export interface SyncedBlockInfo { lastSyncBlockNumber: number; @@ -20,12 +22,13 @@ export interface SyncedBlockInfo { export class AugurNodeController { private augur: Augur; private networkConfig: NetworkConfiguration; - private databaseDir: string|undefined; + private databaseDir: string | undefined; private running: boolean; private controlEmitter: EventEmitter; - private db: Knex|undefined; - private serverResult: RunServerResult|undefined; - private errorCallback: ErrorCallback|undefined; + private db: Knex | undefined; + private serverResult: RunServerResult | undefined; + private errorCallback: ErrorCallback | undefined; + private logger = logger; constructor(augur: Augur, networkConfig: NetworkConfiguration, databaseDir?: string) { this.augur = augur; @@ -35,14 +38,14 @@ export class AugurNodeController { this.controlEmitter = new EventEmitter(); } - public async start(errorCallback: ErrorCallback|undefined) { + public async start(errorCallback: ErrorCallback | undefined) { this.running = true; this.errorCallback = errorCallback; this.db = await createDbAndConnect(this.augur, this.networkConfig, this.databaseDir); this.controlEmitter.emit(ControlMessageType.BulkSyncStarted); const handoffBlockNumber = await bulkSyncAugurNodeWithBlockchain(this.db, this.augur); this.controlEmitter.emit(ControlMessageType.BulkSyncFinished); - console.log("Bulk sync with blockchain complete."); + this.logger.info("Bulk sync with blockchain complete."); this.serverResult = runServer(this.db, this.augur, this.controlEmitter); startAugurListeners(this.db, this.augur, handoffBlockNumber + 1, this.shutdownCallback); } @@ -50,7 +53,7 @@ export class AugurNodeController { public shutdown() { if (!this.running) return; this.running = false; - console.log("Stopping Augur Node Server"); + this.logger.info("Stopping Augur Node Server"); processQueue.pause(); if (this.serverResult !== undefined) { const servers = this.serverResult.servers; @@ -79,9 +82,13 @@ export class AugurNodeController { return ({ lastSyncBlockNumber, uploadBlockNumber, highestBlockNumber }); } - private shutdownCallback(err: Error|null) { + public addLogger(logger: LoggerInterface) { + this.logger.addLogger(logger); + } + + private shutdownCallback(err: Error | null) { if (err == null) return; - console.error("Fatal Error, shutting down servers", err); + this.logger.error("Fatal Error, shutting down servers", err); if (this.errorCallback) this.errorCallback(err); if (this.serverResult !== undefined) shutdownServers(this.serverResult.servers); process.exit(1); diff --git a/src/runServer.ts b/src/runServer.ts index 5315903f0..f9929c082 100644 --- a/src/runServer.ts +++ b/src/runServer.ts @@ -1,6 +1,7 @@ import Augur from "augur.js"; import { NetworkConfiguration } from "augur-core"; import { AugurNodeController } from "./controller"; +import { logger } from "./utils/logger"; const networkName = process.argv[2] || "environment"; const networkConfig = NetworkConfiguration.create(networkName); @@ -11,13 +12,13 @@ const augurNodeController = new AugurNodeController(augur, networkConfig); augur.rpc.setDebugOptions({ broadcast: false }); augur.events.nodes.ethereum.on("disconnect", (event) => { - console.warn("Disconnected from Ethereum node", event); + logger.warn("Disconnected from Ethereum node", event); augurNodeController.shutdown(); throw new Error("Disconnected from Ethereum node"); }); const errorCallback = (err: any) => { - console.error("Fatal Error:", err); + logger.error("Fatal Error:", err); process.exit(1); }; diff --git a/src/server/dispatch-json-rpc-request.ts b/src/server/dispatch-json-rpc-request.ts index ee6c7372e..d206a602c 100644 --- a/src/server/dispatch-json-rpc-request.ts +++ b/src/server/dispatch-json-rpc-request.ts @@ -30,9 +30,10 @@ import { getReportingFees } from "./getters/get-reporting-fees"; import { getUniversesInfo } from "./getters/get-universes-info"; import { getProfitLoss } from "./getters/get-profit-loss"; import { getWinningBalance } from "./getters/get-winning-balance"; +import { logger } from "../utils/logger"; export function dispatchJsonRpcRequest(db: Knex, request: JsonRpcRequest, augur: Augur, callback: (err?: Error|null, result?: any) => void): void { - console.log(request); + logger.info(JSON.stringify(request)); switch (request.method) { case "getAccountTransferHistory": return getAccountTransferHistory(db, request.params.account, request.params.token, request.params.isInternalTransfer, request.params.earliestCreationTime, request.params.latestCreationTime, request.params.sortBy, request.params.isSortDescending, request.params.limit, request.params.offset, callback); diff --git a/src/server/run-server.ts b/src/server/run-server.ts index 48346101e..5f1653fc2 100644 --- a/src/server/run-server.ts +++ b/src/server/run-server.ts @@ -29,7 +29,7 @@ export function runServer(db: Knex, augur: Augur, controlEmitter: EventEmitter = const networkId: string = augur.rpc.getNetworkID(); const universe: Address = augur.contracts.addresses[networkId].Universe; - getMarkets(db, universe, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, (err: Error|null, result?: any): void => { + getMarkets(db, universe, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, (err: Error | null, result?: any): void => { if (err || result.length === 0) { res.send({ status: "down", reason: err || "No markets found", universe }); } else { @@ -47,7 +47,11 @@ export function runServer(db: Knex, augur: Augur, controlEmitter: EventEmitter = res.status(422).send({ error: "Bad value for max_pending_transactions, must be an integer in base 10" }); } else { const waitingClientsCount = db.client.pool.pendingAcquires.length; - res.send({ status: (maxPendingTransactions > waitingClientsCount) ? "up" : "down", maxPendingTransactions, pendingTransactions: waitingClientsCount }); + res.send({ + status: (maxPendingTransactions > waitingClientsCount) ? "up" : "down", + maxPendingTransactions, + pendingTransactions: waitingClientsCount, + }); } }); diff --git a/src/server/run-websocket-server.ts b/src/server/run-websocket-server.ts index 0a8e40ee2..1cbc8175a 100644 --- a/src/server/run-websocket-server.ts +++ b/src/server/run-websocket-server.ts @@ -17,22 +17,22 @@ import * as http from "http"; import * as path from "path"; import { EventEmitter } from "events"; import { ControlMessageType } from "../constants"; +import { logger } from "../utils/logger"; function safeSend( websocket: WebSocket, payload: string) { if (websocket.readyState !== WebSocket.OPEN ) { - console.warn("Client disconnected during request, ignoring response"); + logger.warn("Client disconnected during request, ignoring response"); return; } websocket.send(payload); } export function runWebsocketServer(db: Knex, app: express.Application, augur: Augur, webSocketConfigs: WebSocketConfigs, controlEmitter: EventEmitter = new EventEmitter()): ServersData { - const servers: Array = []; const httpServers: Array = []; if ( webSocketConfigs.wss != null ) { - console.log("Starting websocket secure server on port", webSocketConfigs.wss.port); + logger.info("Starting websocket secure server on port", webSocketConfigs.wss.port); const httpsOptions: https.ServerOptions = { cert: fs.readFileSync(path.join(__dirname, "..", "..", webSocketConfigs.wss.certificateFile)), key: fs.readFileSync(path.join(__dirname, "..", "..", webSocketConfigs.wss.certificateKeyFile)), @@ -44,7 +44,7 @@ export function runWebsocketServer(db: Knex, app: express.Application, augur: Au } if ( webSocketConfigs.ws != null ) { - console.log("Starting websocket server on port", webSocketConfigs.ws.port); + logger.info("Starting websocket server on port", webSocketConfigs.ws.port); const server = http.createServer(app); httpServers.push(server); server.listen(webSocketConfigs.ws.port); @@ -61,7 +61,7 @@ export function runWebsocketServer(db: Knex, app: express.Application, augur: Au let message: any; try { message = JSON.parse(data as string, addressFormatReviver); - if (!isJsonRpcRequest(message)) return console.error("bad json rpc message received:", message); + if (!isJsonRpcRequest(message)) return logger.error("bad json rpc message received:", message); } catch (exc) { return safeSend(websocket, makeJsonRpcError("-1", JsonRpcErrorCode.ParseError, "Bad JSON RPC Message Received", { originalText: data as string })); } @@ -85,7 +85,7 @@ export function runWebsocketServer(db: Knex, app: express.Application, augur: Au } else { dispatchJsonRpcRequest(db, message as JsonRpcRequest, augur, (err: Error|null, result?: any): void => { if (err) { - console.error("getter error: ", err); + logger.error("getter error: ", err); safeSend(websocket, makeJsonRpcError(message.id, JsonRpcErrorCode.InvalidParams, err.message, false)); } else { safeSend(websocket, makeJsonRpcResponse(message.id, result || null)); @@ -104,13 +104,13 @@ export function runWebsocketServer(db: Knex, app: express.Application, augur: Au }); websocket.on("error", (err) => { - console.error(err); + logger.error(err); controlEmitter.emit(ControlMessageType.WebsocketError, err); }); }); server.on("error", (err: Error): void => { - console.log("websocket error:", err); + logger.error("websocket error:", err); controlEmitter.emit(ControlMessageType.ServerError, err); // TODO reconnect }); diff --git a/src/setup/check-and-initialize-augur-db.ts b/src/setup/check-and-initialize-augur-db.ts index f4020f458..e7941fe72 100644 --- a/src/setup/check-and-initialize-augur-db.ts +++ b/src/setup/check-and-initialize-augur-db.ts @@ -8,6 +8,7 @@ import { NetworkConfiguration } from "augur-core"; import { setOverrideTimestamp } from "../blockchain/process-block"; import { postProcessDatabaseResults } from "../server/post-process-database-results"; import { monitorEthereumNodeHealth } from "../blockchain/monitor-ethereum-node-health"; +import { logger } from "../utils/logger"; interface NetworkIdRow { networkId: string; @@ -20,7 +21,7 @@ function getDatabasePathFromNetworkId(networkId: string, databaseDir: string|und function createKnex(networkId: string, databaseDir?: string): Knex { const augurDbPath = getDatabasePathFromNetworkId(networkId, databaseDir); - console.log(augurDbPath); + logger.info(augurDbPath); if (process.env.DATABASE_URL) { // Be careful about non-serializable transactions. We expect database writes to be processed from the blockchain, serially, in block order. return Knex({ @@ -89,7 +90,7 @@ async function moveDatabase(db: Knex, networkId: string, databaseDir?: string): db.destroy(); const augurDbPath = getDatabasePathFromNetworkId(networkId, databaseDir); const backupDbPath = getDatabasePathFromNetworkId(networkId, databaseDir, `backup-augur-%s-${new Date().getTime()}.db`); - console.log("move", augurDbPath, backupDbPath); + logger.info("move", augurDbPath, backupDbPath); await promisify(rename)(augurDbPath, backupDbPath); return createKnex(networkId); } diff --git a/src/utils/log-error.ts b/src/utils/log-error.ts index 6bd962d49..bf77c388a 100644 --- a/src/utils/log-error.ts +++ b/src/utils/log-error.ts @@ -1,3 +1,5 @@ +import { logger } from "./logger"; + export function logError(err?: Error|null): void { - if (err != null) console.error(err); + if (err != null) logger.error(err); } diff --git a/src/utils/logger/StandardLogger.ts b/src/utils/logger/StandardLogger.ts new file mode 100644 index 000000000..cf614c51b --- /dev/null +++ b/src/utils/logger/StandardLogger.ts @@ -0,0 +1,19 @@ +import { LoggerInterface } from "./logger"; + +export class StandardLogger implements LoggerInterface { + public error(...err: Array): void { + console.error(...err); + } + + public warn(...msg: Array): void { + console.warn(...msg); + } + + public info(...msg: Array): void { + console.info(...msg); + } + + public debug(...msg: Array): void { + console.debug(...msg); + } +} diff --git a/src/utils/logger/index.ts b/src/utils/logger/index.ts new file mode 100644 index 000000000..2ae47b4af --- /dev/null +++ b/src/utils/logger/index.ts @@ -0,0 +1,8 @@ +import { StandardLogger } from "./StandardLogger"; +import { Logger } from "./logger"; + +const standardLogger = new StandardLogger(); + +// Export as singleton. +export const logger = new Logger(); +logger.addLogger(standardLogger); diff --git a/src/utils/logger/logger.ts b/src/utils/logger/logger.ts new file mode 100644 index 000000000..80d522dd1 --- /dev/null +++ b/src/utils/logger/logger.ts @@ -0,0 +1,35 @@ +export interface LoggerInterface { + error(...err: Array): void; + + warn(...msg: Array): void; + + info(...msg: Array): void; + + info(...msg: Array): void; + + debug(...msg: Array): void; +} + +export class Logger { + private loggers: Array = []; + + public addLogger(logger: LoggerInterface): void { + this.loggers.push(logger); + } + + public error(...err: Array): void { + this.loggers.forEach((logger) => logger.error(...err)); + } + + public warn(...msg: Array): void { + this.loggers.forEach((logger) => logger.warn(...msg)); + } + + public info(...msg: Array): void { + this.loggers.forEach((logger) => logger.info(...msg)); + } + + public debug(...msg: Array): void { + this.loggers.forEach((logger) => logger.debug(...msg)); + } +} diff --git a/test/mocha.opts b/test/mocha.opts index 594bbda42..ec98f9b1d 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -1,2 +1,3 @@ --recursive +--require ts-node/register --require ./test/unit/test.bootstrap diff --git a/test/unit/utils/logger.ts b/test/unit/utils/logger.ts new file mode 100644 index 000000000..9602f26b6 --- /dev/null +++ b/test/unit/utils/logger.ts @@ -0,0 +1,37 @@ +import { describe, it } from "mocha"; +import { assert } from "chai"; +import * as sinon from "sinon"; +import { Logger, LoggerInterface } from "../../../src/utils/logger/logger"; + +describe("utils/logger", () => { + class ExampleLogger implements LoggerInterface { + public error(...err: Array) { + } + + public warn(...msg: Array) { + } + + public info(...msg: Array) { + } + + public debug(...msg: Array) { + } + } + + ["error", "info", "warn", "debug"].map((method: keyof LoggerInterface) => { + const exampleLogger = new ExampleLogger(); + const spy = sinon.spy(exampleLogger, method); + + const exampleMsg = "Some example message"; + + const logger = new Logger(); + logger.addLogger(exampleLogger); + + describe(`${method} method`, () => { + it(`should call the ${method} method of passed logger`, () => { + logger[method].call(logger, exampleMsg); + assert.isOk(spy.calledWith(exampleMsg), `${method} was not called with message`); + }); + }); + }); +}); diff --git a/wallaby.conf.js b/wallaby.conf.js new file mode 100644 index 000000000..451b86c17 --- /dev/null +++ b/wallaby.conf.js @@ -0,0 +1,16 @@ +module.exports = function (wallaby) { // eslint-disable-line + return { + files: [ + "build/**/*", + "src/**/*", + "*.js", + ], + tests: [ + "test/**/*.ts", + ], + env: { + type: "node", + }, + testFramework: "mocha", + }; +}; From 1180e4a15f7a8de6199e10999e53254cb683f8e1 Mon Sep 17 00:00:00 2001 From: Tom Haile Date: Tue, 3 Jul 2018 13:42:17 -0500 Subject: [PATCH 08/16] 0.2.15 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3c4fa0cfd..6692d3911 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "augur-node", - "version": "0.2.14", + "version": "0.2.15", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 2bd740f92..07ac65534 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "augur-node", - "version": "0.2.14", + "version": "0.2.15", "description": "Augur Node", "author": "The Augur Developers ", "license": "MIT", From d3af73e2fbfc3fc82d2b363322c41d5217fe2ee5 Mon Sep 17 00:00:00 2001 From: Tom Haile Date: Tue, 3 Jul 2018 14:39:27 -0500 Subject: [PATCH 09/16] 0.2.16 (#487) --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6692d3911..0d7c88957 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "augur-node", - "version": "0.2.15", + "version": "0.2.16", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 07ac65534..5a7821353 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "augur-node", - "version": "0.2.15", + "version": "0.2.16", "description": "Augur Node", "author": "The Augur Developers ", "license": "MIT", From e680a86591adb5d01b2a33044ac212db9e6982e4 Mon Sep 17 00:00:00 2001 From: Scott Bigelow Date: Tue, 3 Jul 2018 14:50:17 -0700 Subject: [PATCH 10/16] augur.js@4.12.0-17 --- package-lock.json | 63 +++++++++++++++++++++++++---------- package.json | 2 +- yarn.lock | 83 ++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 122 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0d7c88957..b59e4c66e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -628,6 +628,11 @@ "resolved": "https://registry.npmjs.org/async-mkdirp/-/async-mkdirp-1.2.0.tgz", "integrity": "sha512-ib4xHF0HBKjr0gpJvXE9LrhJSlGs+AAuwj/Lo0v6oMbZ0bITO/NDYgq3WkTRIdFcp2MXIDjxO+oJkGP99/095Q==" }, + "async-parallel": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/async-parallel/-/async-parallel-1.2.3.tgz", + "integrity": "sha1-C5BVCu/7ejZdjO6IHrBhj2VqNFA=" + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -639,9 +644,9 @@ "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=" }, "augur-core": { - "version": "1.0.0-17", - "resolved": "https://registry.npmjs.org/augur-core/-/augur-core-1.0.0-17.tgz", - "integrity": "sha512-EvFDJ7TbAH+P2wSPa7AWClq12lnN8EmhhpgDbMTs6z+XHn00AqWeOspOiScP9xyUlQVRg1MeoXmFmzq6NjXApA==", + "version": "1.0.0-19", + "resolved": "https://registry.npmjs.org/augur-core/-/augur-core-1.0.0-19.tgz", + "integrity": "sha512-Rhk2M6mPGSoKneNEZs23m6neL2/F4hNdP42754n/x2ZGzwE0GvmDP6jy8pr7m8mJgiUdMUniIoA8ClQ3f3gXrA==", "requires": { "@types/get-port": "3.2.0", "@types/mkdirp": "0.5.1", @@ -649,6 +654,7 @@ "@types/yargs": "11.0.0", "async-file": "2.0.2", "async-mkdirp": "1.2.0", + "async-parallel": "1.2.3", "binascii": "0.0.1", "bn.js": "4.11.8", "copy-dir": "0.3.0", @@ -679,12 +685,12 @@ } }, "augur.js": { - "version": "4.12.0-16", - "resolved": "https://registry.npmjs.org/augur.js/-/augur.js-4.12.0-16.tgz", - "integrity": "sha512-GQMZv/biT/xGohDZirEdFSeMqd2PZU6VP9KTAkh7HMgMpDEa7P2QIvPbrCG/ZmxNhQ/H+om2v9ASfZR1w4rauA==", + "version": "4.12.0-17", + "resolved": "https://registry.npmjs.org/augur.js/-/augur.js-4.12.0-17.tgz", + "integrity": "sha512-RLW1gqQhb9qPWgotF8aez3W4HdoJj3wrcsr06xN6F9NKkNHu2cOD5CF81z6FbW3Y9/bbvi0Yv93Eprtu4c9oXg==", "requires": { "async": "1.5.2", - "augur-core": "1.0.0-17", + "augur-core": "1.0.0-19", "bignumber.js": "6.0.0", "clone": "2.1.1", "columnify": "1.5.4", @@ -5020,9 +5026,9 @@ } }, "got": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.1.tgz", - "integrity": "sha512-tiLX+bnYm5A56T5N/n9Xo89vMaO1mrS9qoDqj3u/anVooqGozvY/HbXzEpDfbNeKsHCBpK40gSbz8wGYSp3i1w==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", "requires": { "@sindresorhus/is": "0.7.0", "cacheable-request": "2.1.4", @@ -6684,15 +6690,15 @@ } }, "mem-fs-editor": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-4.0.2.tgz", - "integrity": "sha512-QHvdXLLNmwJXxKdf7x27aNUren6IoPxwcM8Sfd+S6/ddQQMcYdEtVKsh6ilpqMrU18VQuKZEaH0aCGt3JDbA0g==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-4.0.3.tgz", + "integrity": "sha512-tgWmwI/+6vwu6POan82dTjxEpwAoaj0NAFnghtVo/FcLK2/7IhPUtFUUYlwou4MOY6OtjTUJtwpfH1h+eSUziw==", "requires": { "commondir": "1.0.1", - "deep-extend": "0.5.1", + "deep-extend": "0.6.0", "ejs": "2.6.1", "glob": "7.1.2", - "globby": "8.0.1", + "globby": "7.1.1", "isbinaryfile": "3.0.2", "mkdirp": "0.5.1", "multimatch": "2.1.0", @@ -6706,6 +6712,29 @@ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "requires": { + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "glob": "7.1.2", + "ignore": "3.3.8", + "pify": "3.0.0", + "slash": "1.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, "replace-ext": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", @@ -11212,7 +11241,7 @@ "envinfo": "5.10.0", "glob-all": "3.1.0", "global-modules": "1.0.0", - "got": "8.3.1", + "got": "8.3.2", "import-local": "1.0.0", "inquirer": "5.2.0", "interpret": "1.1.0", @@ -11686,7 +11715,7 @@ "istextorbinary": "2.2.1", "lodash": "4.17.10", "make-dir": "1.3.0", - "mem-fs-editor": "4.0.2", + "mem-fs-editor": "4.0.3", "minimist": "1.2.0", "pretty-bytes": "4.0.2", "read-chunk": "2.1.0", diff --git a/package.json b/package.json index 5a7821353..ae090f6b7 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "@types/uuid": "3.4.3", "@types/ws": "3.0.2", "async": "2.6.0", - "augur.js": "4.12.0-16", + "augur.js": "4.12.0-17", "bignumber.js": "6.0.0", "chalk": "2.3.2", "express": "4.16.2", diff --git a/yarn.lock b/yarn.lock index a78b6e720..e1f9fb197 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13,6 +13,12 @@ version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" +"@sinonjs/formatio@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-2.0.0.tgz#84db7e9eb5531df18a8c5e0bfb6e449e55e654b2" + dependencies: + samsam "1.3.0" + "@types/async@2.0.43": version "2.0.43" resolved "https://registry.yarnpkg.com/@types/async/-/async-2.0.43.tgz#0d6fce7e11a582b4251a4bf5439399428c79e387" @@ -106,6 +112,10 @@ "@types/express-serve-static-core" "*" "@types/mime" "*" +"@types/sinon@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-5.0.1.tgz#a15b36ec42f1f53166617491feabd1734cb03e21" + "@types/sqlite3@3.1.1": version "3.1.1" resolved "https://registry.yarnpkg.com/@types/sqlite3/-/sqlite3-3.1.1.tgz#f9b707c574e8d2f73d6c41aaa86e28b6ef85a324" @@ -509,6 +519,10 @@ async-mkdirp@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/async-mkdirp/-/async-mkdirp-1.2.0.tgz#bf231d5975a748ce44134b189446d0618f970fc4" +async-parallel@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/async-parallel/-/async-parallel-1.2.3.tgz#0b90550aeffb7a365d8cee881eb0618f656a3450" + async@1.5.2, async@1.x, async@^1.4.0, async@^1.5.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -527,9 +541,9 @@ atob@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" -augur-core@1.0.0-17: - version "1.0.0-17" - resolved "https://registry.yarnpkg.com/augur-core/-/augur-core-1.0.0-17.tgz#41794db6d5f7217c6f9edf23d6c7fd92cb085ec8" +augur-core@1.0.0-19: + version "1.0.0-19" + resolved "https://registry.yarnpkg.com/augur-core/-/augur-core-1.0.0-19.tgz#74b95074cc324a64092a1f5853ff9d2bfa638050" dependencies: "@types/get-port" "3.2.0" "@types/mkdirp" "0.5.1" @@ -537,6 +551,7 @@ augur-core@1.0.0-17: "@types/yargs" "11.0.0" async-file "2.0.2" async-mkdirp "1.2.0" + async-parallel "1.2.3" binascii "0.0.1" bn.js "4.11.8" copy-dir "0.3.0" @@ -558,12 +573,12 @@ augur-core@1.0.0-17: solidity-coverage "0.5.4" yargs "11.0.0" -augur.js@4.12.0-16: - version "4.12.0-16" - resolved "https://registry.yarnpkg.com/augur.js/-/augur.js-4.12.0-16.tgz#7574829577090686cce9df0b4fc5a3981ea7142d" +augur.js@4.12.0-17: + version "4.12.0-17" + resolved "https://registry.yarnpkg.com/augur.js/-/augur.js-4.12.0-17.tgz#5fc3b467ddfe652b8884474618f5baafbaaaee1e" dependencies: async "1.5.2" - augur-core "1.0.0-17" + augur-core "1.0.0-19" bignumber.js "6.0.0" clone "2.1.1" columnify "1.5.4" @@ -4100,6 +4115,10 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +just-extend@^1.1.27: + version "1.1.27" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-1.1.27.tgz#ec6e79410ff914e472652abfa0e603c03d60e905" + keccak@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/keccak/-/keccak-1.2.0.tgz#b53618fc7961b642f6e73f1546eec3329f7effe0" @@ -4315,6 +4334,10 @@ lodash.assign@^4.0.3, lodash.assign@^4.0.6: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + lodash@4.17.10, lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.10, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" @@ -4342,6 +4365,10 @@ log-update@^1.0.2: ansi-escapes "^1.0.0" cli-cursor "^1.0.2" +lolex@^2.3.2, lolex@^2.4.2: + version "2.7.0" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.7.0.tgz#9c087a69ec440e39d3f796767cf1b2cdc43d5ea5" + long@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" @@ -4731,6 +4758,16 @@ nice-try@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" +nise@^1.3.3: + version "1.4.2" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.4.2.tgz#a9a3800e3994994af9e452333d549d60f72b8e8c" + dependencies: + "@sinonjs/formatio" "^2.0.0" + just-extend "^1.1.27" + lolex "^2.3.2" + path-to-regexp "^1.7.0" + text-encoding "^0.6.4" + node-abi@^2.2.0: version "2.4.1" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.4.1.tgz#7628c4d4ec4e9cd3764ceb3652f36b2e7f8d4923" @@ -5246,6 +5283,12 @@ path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" +path-to-regexp@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + dependencies: + isarray "0.0.1" + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -6023,6 +6066,10 @@ safe-regex@^1.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" +samsam@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.3.0.tgz#8d1d9350e25622da30de3e44ba692b5221ab7c50" + sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -6195,6 +6242,18 @@ simple-get@^2.7.0: once "^1.3.1" simple-concat "^1.0.0" +sinon@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-6.1.0.tgz#9ee3d3900616333078464aa3969ba5688456fea3" + dependencies: + "@sinonjs/formatio" "^2.0.0" + diff "^3.5.0" + lodash.get "^4.4.2" + lolex "^2.4.2" + nise "^1.3.3" + supports-color "^5.4.0" + type-detect "^4.0.8" + slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" @@ -6580,7 +6639,7 @@ supports-color@^4.0.0, supports-color@^4.2.1: dependencies: has-flag "^2.0.0" -supports-color@^5.3.0: +supports-color@^5.3.0, supports-color@^5.4.0: version "5.4.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" dependencies: @@ -6675,6 +6734,10 @@ term-size@^0.1.0: dependencies: execa "^0.4.0" +text-encoding@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19" + text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -6842,6 +6905,10 @@ type-detect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" +type-detect@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + type-is@~1.6.15: version "1.6.16" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" From af0f9d7aa2d08964bffc155084616dbcc9c89877 Mon Sep 17 00:00:00 2001 From: Scott Bigelow Date: Tue, 3 Jul 2018 14:53:26 -0700 Subject: [PATCH 11/16] 0.2.17 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index b59e4c66e..09a1a3ca9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "augur-node", - "version": "0.2.16", + "version": "0.2.17", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ae090f6b7..c6849fb5a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "augur-node", - "version": "0.2.16", + "version": "0.2.17", "description": "Augur Node", "author": "The Augur Developers ", "license": "MIT", From 925dc62d48d4c403f81ce881f1653e93d14cd445 Mon Sep 17 00:00:00 2001 From: Tom Haile Date: Tue, 3 Jul 2018 22:12:37 -0500 Subject: [PATCH 12/16] ignore cert files when processing ts/js files (#489) * ignore cert files when processing ts/js files * added file types in wrong section --- tsconfig.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index de4862acf..48e8a3f75 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,6 +26,10 @@ ] }, "include": [ - "src/**/*" + "src/**/*", + ], + "exclude": [ + "**/*.pem", + "**/*.key", ] } From e404c8f199d9d0210d6d7e9b3314ff4f88ca55be Mon Sep 17 00:00:00 2001 From: Jack Peterson Date: Wed, 4 Jul 2018 14:07:15 -0700 Subject: [PATCH 13/16] Removed migrate step from npm reinstall --- scripts/reinstall.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/reinstall.sh b/scripts/reinstall.sh index 7cf2c03ec..642085d22 100755 --- a/scripts/reinstall.sh +++ b/scripts/reinstall.sh @@ -25,7 +25,6 @@ npm run build npm run lint npm test -npm run migrate npm start cd "$PWD" From fd7205886be1f14167e5b1f82cb4cfc11b12af95 Mon Sep 17 00:00:00 2001 From: nuevoalex Date: Wed, 4 Jul 2018 16:05:14 -0700 Subject: [PATCH 14/16] fix logger shutdown, old contracts, and starting after shutdown --- src/controller.ts | 7 +++++++ src/setup/check-and-initialize-augur-db.ts | 24 +++++++++++++++++++++- src/utils/logger/logger.ts | 4 ++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/controller.ts b/src/controller.ts index 4bcb6de77..59fa01ac0 100644 --- a/src/controller.ts +++ b/src/controller.ts @@ -46,8 +46,10 @@ export class AugurNodeController { const handoffBlockNumber = await bulkSyncAugurNodeWithBlockchain(this.db, this.augur); this.controlEmitter.emit(ControlMessageType.BulkSyncFinished); this.logger.info("Bulk sync with blockchain complete."); + processQueue.kill(); this.serverResult = runServer(this.db, this.augur, this.controlEmitter); startAugurListeners(this.db, this.augur, handoffBlockNumber + 1, this.shutdownCallback); + processQueue.resume(); } public shutdown() { @@ -67,6 +69,11 @@ export class AugurNodeController { clearOverrideTimestamp(); // When we have real shutdown feature in augur.js and ethrpc, implement here. this.augur = new Augur(); + this.logger.clear(); + } + + public isRunning() { + return this.running && this.db != null; } public async requestLatestSyncedBlock(): Promise { diff --git a/src/setup/check-and-initialize-augur-db.ts b/src/setup/check-and-initialize-augur-db.ts index e7941fe72..2b76af2be 100644 --- a/src/setup/check-and-initialize-augur-db.ts +++ b/src/setup/check-and-initialize-augur-db.ts @@ -3,7 +3,7 @@ import * as Knex from "knex"; import * as path from "path"; import * as sqlite3 from "sqlite3"; import { promisify, format } from "util"; -import { rename } from "fs"; +import { rename, fstat, existsSync, unlinkSync, readFileSync, writeFileSync } from "fs"; import { NetworkConfiguration } from "augur-core"; import { setOverrideTimestamp } from "../blockchain/process-block"; import { postProcessDatabaseResults } from "../server/post-process-database-results"; @@ -19,6 +19,10 @@ function getDatabasePathFromNetworkId(networkId: string, databaseDir: string|und return path.join(databaseDir || path.join(__dirname, "../../"), format(filenameTemplate, networkId)); } +function getUploadBlockPathFromNetworkId(networkId: string, databaseDir: string|undefined, filenameTemplate: string = "upload-block-%s") { + return path.join(databaseDir || path.join(__dirname, "../../"), format(filenameTemplate, networkId)); +} + function createKnex(networkId: string, databaseDir?: string): Knex { const augurDbPath = getDatabasePathFromNetworkId(networkId, databaseDir); logger.info(augurDbPath); @@ -50,6 +54,7 @@ export async function createDbAndConnect(augur: Augur, network: NetworkConfigura if (networkId == null) return reject(new Error("could not get networkId")); try { monitorEthereumNodeHealth(augur); + await checkAndUpdateContractUploadBlock(augur, networkId); const db = await checkAndInitializeAugurDb(augur, networkId, databaseDir); resolve(db); } catch (err) { @@ -59,6 +64,23 @@ export async function createDbAndConnect(augur: Augur, network: NetworkConfigura }); } +async function checkAndUpdateContractUploadBlock(augur: Augur, networkId: string, databaseDir?: string): Promise { + const oldUploadBlockNumberFile = getUploadBlockPathFromNetworkId(networkId, databaseDir); + let oldUploadBlockNumber = 0; + if (existsSync(oldUploadBlockNumberFile)) { + oldUploadBlockNumber = Number(readFileSync(oldUploadBlockNumberFile)); + } + const currentUploadBlockNumber = augur.contracts.uploadBlockNumbers[augur.rpc.getNetworkID()]; + if (currentUploadBlockNumber != oldUploadBlockNumber) { + console.log(`Deleting existing DB for this configuration as the upload block number is not equal: OLD: ${oldUploadBlockNumber} NEW: ${currentUploadBlockNumber}`); + const dbPath = getDatabasePathFromNetworkId(networkId, databaseDir); + if (existsSync(dbPath)) { + unlinkSync(dbPath); + } + writeFileSync(oldUploadBlockNumberFile, currentUploadBlockNumber); + } +} + async function isDatabaseDamaged(db: Knex): Promise { try { const errorRow: { error: undefined|null|string } = await db("network_id").first(["error"]).whereNotNull("error"); diff --git a/src/utils/logger/logger.ts b/src/utils/logger/logger.ts index 80d522dd1..f59e4ff14 100644 --- a/src/utils/logger/logger.ts +++ b/src/utils/logger/logger.ts @@ -32,4 +32,8 @@ export class Logger { public debug(...msg: Array): void { this.loggers.forEach((logger) => logger.debug(...msg)); } + + public clear(): void { + this.loggers = []; + } } From f1617338c04b62d50f23d67f44da4e382c7919e9 Mon Sep 17 00:00:00 2001 From: nuevoalex Date: Wed, 4 Jul 2018 16:09:08 -0700 Subject: [PATCH 15/16] version bump and lint --- package-lock.json | 2 +- package.json | 2 +- src/setup/check-and-initialize-augur-db.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 09a1a3ca9..d00eb978f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "augur-node", - "version": "0.2.17", + "version": "0.2.18", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c6849fb5a..d60dce0ab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "augur-node", - "version": "0.2.17", + "version": "0.2.18", "description": "Augur Node", "author": "The Augur Developers ", "license": "MIT", diff --git a/src/setup/check-and-initialize-augur-db.ts b/src/setup/check-and-initialize-augur-db.ts index 2b76af2be..c5565c3a1 100644 --- a/src/setup/check-and-initialize-augur-db.ts +++ b/src/setup/check-and-initialize-augur-db.ts @@ -71,7 +71,7 @@ async function checkAndUpdateContractUploadBlock(augur: Augur, networkId: string oldUploadBlockNumber = Number(readFileSync(oldUploadBlockNumberFile)); } const currentUploadBlockNumber = augur.contracts.uploadBlockNumbers[augur.rpc.getNetworkID()]; - if (currentUploadBlockNumber != oldUploadBlockNumber) { + if (currentUploadBlockNumber !== oldUploadBlockNumber) { console.log(`Deleting existing DB for this configuration as the upload block number is not equal: OLD: ${oldUploadBlockNumber} NEW: ${currentUploadBlockNumber}`); const dbPath = getDatabasePathFromNetworkId(networkId, databaseDir); if (existsSync(dbPath)) { From c5fb5fcdd47db54c46872243ebd0b3a61b168bd9 Mon Sep 17 00:00:00 2001 From: nuevoalex Date: Wed, 4 Jul 2018 16:15:10 -0700 Subject: [PATCH 16/16] ver bump again --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index d00eb978f..7ffbe05f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "augur-node", - "version": "0.2.18", + "version": "0.2.19", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index d60dce0ab..8259ccbb1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "augur-node", - "version": "0.2.18", + "version": "0.2.19", "description": "Augur Node", "author": "The Augur Developers ", "license": "MIT",