diff options
author | Alex Browne <stephenalexbrowne@gmail.com> | 2018-12-06 03:08:19 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-06 03:08:19 +0800 |
commit | b2dd5495bcf13a9ea71498b5def12c75589b0156 (patch) | |
tree | 0e0d728d540e747c32a083d604d7916a35ea95cf /packages/pipeline/src/scripts/pull_radar_relay_orders.ts | |
parent | 72a30260d88e722a6b076134693360c573f6c70f (diff) | |
parent | e0348f9c044b4909260e4864398b4f50232da620 (diff) | |
download | dexon-sol-tools-b2dd5495bcf13a9ea71498b5def12c75589b0156.tar dexon-sol-tools-b2dd5495bcf13a9ea71498b5def12c75589b0156.tar.gz dexon-sol-tools-b2dd5495bcf13a9ea71498b5def12c75589b0156.tar.bz2 dexon-sol-tools-b2dd5495bcf13a9ea71498b5def12c75589b0156.tar.lz dexon-sol-tools-b2dd5495bcf13a9ea71498b5def12c75589b0156.tar.xz dexon-sol-tools-b2dd5495bcf13a9ea71498b5def12c75589b0156.tar.zst dexon-sol-tools-b2dd5495bcf13a9ea71498b5def12c75589b0156.zip |
Merge pull request #1377 from 0xProject/feature/pipeline-cleanup-mega-rebase
Merge all pipeline code into development
Diffstat (limited to 'packages/pipeline/src/scripts/pull_radar_relay_orders.ts')
-rw-r--r-- | packages/pipeline/src/scripts/pull_radar_relay_orders.ts | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/packages/pipeline/src/scripts/pull_radar_relay_orders.ts b/packages/pipeline/src/scripts/pull_radar_relay_orders.ts new file mode 100644 index 000000000..6c18bcaef --- /dev/null +++ b/packages/pipeline/src/scripts/pull_radar_relay_orders.ts @@ -0,0 +1,53 @@ +// tslint:disable:no-console +import { HttpClient } from '@0x/connect'; +import * as R from 'ramda'; +import 'reflect-metadata'; +import { Connection, ConnectionOptions, createConnection, EntityManager } from 'typeorm'; + +import { createObservedTimestampForOrder, SraOrder } from '../entities'; +import * as ormConfig from '../ormconfig'; +import { parseSraOrders } from '../parsers/sra_orders'; +import { handleError } from '../utils'; + +const RADAR_RELAY_URL = 'https://api.radarrelay.com/0x/v2'; +const ORDERS_PER_PAGE = 10000; // Number of orders to get per request. + +let connection: Connection; + +(async () => { + connection = await createConnection(ormConfig as ConnectionOptions); + await getOrderbookAsync(); + process.exit(0); +})().catch(handleError); + +async function getOrderbookAsync(): Promise<void> { + console.log('Getting all orders...'); + const connectClient = new HttpClient(RADAR_RELAY_URL); + const rawOrders = await connectClient.getOrdersAsync({ + perPage: ORDERS_PER_PAGE, + }); + console.log(`Got ${rawOrders.records.length} orders.`); + console.log('Parsing orders...'); + // Parse the sra orders, then add source url to each. + const orders = R.pipe(parseSraOrders, R.map(setSourceUrl(RADAR_RELAY_URL)))(rawOrders); + // Save all the orders and update the observed time stamps in a single + // transaction. + console.log('Saving orders and updating timestamps...'); + await connection.transaction(async (manager: EntityManager): Promise<void> => { + for (const order of orders) { + await manager.save(SraOrder, order); + const observedTimestamp = createObservedTimestampForOrder(order); + await manager.save(observedTimestamp); + } + }); +} + +const sourceUrlProp = R.lensProp('sourceUrl'); + +/** + * Sets the source url for a single order. Returns a new order instead of + * mutating the given one. + */ +const setSourceUrl = R.curry((sourceURL: string, order: SraOrder): SraOrder => { + return R.set(sourceUrlProp, sourceURL, order); +}); |