diff --git a/src/node/consumer/src/lib/helpers/promises_helpers.ts b/src/node/consumer/src/lib/helpers/promises_helpers.ts index 3837d19..366ec24 100644 --- a/src/node/consumer/src/lib/helpers/promises_helpers.ts +++ b/src/node/consumer/src/lib/helpers/promises_helpers.ts @@ -1,37 +1,24 @@ -export class PromiseHelpers { - public static async sequence(promises: Array<() => Promise>): Promise { - return promises.reduce((promise: Promise, func: () => Promise) => - promise.then(result => func().then(res => result.concat(res))), Promise.resolve([])); - } +export const PromiseHelpers = { - /** - * Return first resolved promise as the result. - */ - public static async first(promises: Array>): Promise { + sequence: async function(promises: (() => Promise)[]) { + return promises.reduce((promise, func) => + promise.then(result => func().then(res => result.concat(res))), Promise.resolve([])); + }, + + first: async function(promises) { return Promise.all(promises.map(p => { - // If a request fails, count that as a resolution so it will keep - // waiting for other possible successes. If a request succeeds, - // treat it as a rejection so Promise.all immediately bails out. return p.then((val) => Promise.reject(val), (err) => Promise.resolve(err)); })).then( - // If '.all' resolved, we've just got an array of errors. (errors) => Promise.reject(errors), - // If '.all' rejected, we've got the result we wanted. (val) => Promise.resolve(val) ); - } + }, - /** - * Delay promise - */ - public static async delay(duration: number): Promise { - return new Promise((resolve) => setTimeout(() => resolve(), duration)); - } + delay: async function(duration: number) { + return new Promise(resolve => setTimeout(() => resolve(), duration)); + }, - /** - * Timeout promise after a set time in ms - */ - public static async timeout(timeoutMs: number, promise: Promise, message = 'Timed out'): Promise { + timeout: async function(timeoutMs: number, promise, message = 'Timed out') { return Promise.race([ promise, new Promise(function (resolve, reject) { @@ -40,12 +27,9 @@ export class PromiseHelpers { }, timeoutMs); }) ]); - } + }, - /** - * Return most common value from given array. - */ - public static mostCommonValue(array: any[]): any { + mostCommonValue: function(array) { return array.sort((a, b) => array.filter(v => v === a).length - array.filter(v => v === b).length).pop(); } -} +}; \ No newline at end of file diff --git a/src/node/consumer/src/lib/models/configuration/cache_config.ts b/src/node/consumer/src/lib/models/configuration/cache_config.ts index 1ca735b..0e2c927 100644 --- a/src/node/consumer/src/lib/models/configuration/cache_config.ts +++ b/src/node/consumer/src/lib/models/configuration/cache_config.ts @@ -1,15 +1,15 @@ import {BooleanHelpers} from "../../helpers/boolean_helpers"; -export class CacheConfig { - public MONGODB_HOST: string = process.env.MONGODB_HOST || 'mongodb'; - public MONGODB_PORT: string = process.env.MONGODB_PORT || '27017'; - public MONGODB_DB: string = process.env.MONGODB_DB || 'knightcrawler'; - public MONGO_INITDB_ROOT_USERNAME: string = process.env.MONGO_INITDB_ROOT_USERNAME || 'mongo'; - public MONGO_INITDB_ROOT_PASSWORD: string = process.env.MONGO_INITDB_ROOT_PASSWORD || 'mongo'; - public NO_CACHE: boolean = BooleanHelpers.parseBool(process.env.NO_CACHE, false); - public COLLECTION_NAME: string = process.env.MONGODB_COLLECTION || 'knightcrawler_consumer_collection'; - - public get MONGO_URI() { +export const cacheConfig = { + MONGODB_HOST: process.env.MONGODB_HOST || 'mongodb', + MONGODB_PORT: process.env.MONGODB_PORT || '27017', + MONGODB_DB: process.env.MONGODB_DB || 'knightcrawler', + MONGO_INITDB_ROOT_USERNAME: process.env.MONGO_INITDB_ROOT_USERNAME || 'mongo', + MONGO_INITDB_ROOT_PASSWORD: process.env.MONGO_INITDB_ROOT_PASSWORD || 'mongo', + NO_CACHE: BooleanHelpers.parseBool(process.env.NO_CACHE, false), + COLLECTION_NAME: process.env.MONGODB_COLLECTION || 'knightcrawler_consumer_collection', + + get MONGO_URI() { return `mongodb://${this.MONGO_INITDB_ROOT_USERNAME}:${this.MONGO_INITDB_ROOT_PASSWORD}@${this.MONGODB_HOST}:${this.MONGODB_PORT}/${this.MONGODB_DB}?authSource=admin`; } -} \ No newline at end of file +}; \ No newline at end of file diff --git a/src/node/consumer/src/lib/models/configuration/database_config.ts b/src/node/consumer/src/lib/models/configuration/database_config.ts index 754cd85..8e5dccd 100644 --- a/src/node/consumer/src/lib/models/configuration/database_config.ts +++ b/src/node/consumer/src/lib/models/configuration/database_config.ts @@ -1,14 +1,14 @@ import {BooleanHelpers} from "../../helpers/boolean_helpers"; -export class DatabaseConfig { - public POSTGRES_HOST: string = process.env.POSTGRES_HOST || 'postgres'; - public POSTGRES_PORT: number = parseInt(process.env.POSTGRES_PORT || '5432'); - public POSTGRES_DB: string = process.env.POSTGRES_DB || 'knightcrawler'; - public POSTGRES_USER: string = process.env.POSTGRES_USER || 'postgres'; - public POSTGRES_PASSWORD: string = process.env.POSTGRES_PASSWORD || 'postgres'; - public AUTO_CREATE_AND_APPLY_MIGRATIONS : boolean = BooleanHelpers.parseBool(process.env.AUTO_CREATE_AND_APPLY_MIGRATIONS, false); - - public get POSTGRES_URI() { +export const databaseConfig = { + POSTGRES_HOST: process.env.POSTGRES_HOST || 'postgres', + POSTGRES_PORT: parseInt(process.env.POSTGRES_PORT || '5432'), + POSTGRES_DB: process.env.POSTGRES_DB || 'knightcrawler', + POSTGRES_USER: process.env.POSTGRES_USER || 'postgres', + POSTGRES_PASSWORD: process.env.POSTGRES_PASSWORD || 'postgres', + AUTO_CREATE_AND_APPLY_MIGRATIONS: BooleanHelpers.parseBool(process.env.AUTO_CREATE_AND_APPLY_MIGRATIONS, false), + + get POSTGRES_URI() { return `postgres://${this.POSTGRES_USER}:${this.POSTGRES_PASSWORD}@${this.POSTGRES_HOST}:${this.POSTGRES_PORT}/${this.POSTGRES_DB}`; } -} \ No newline at end of file +}; \ No newline at end of file diff --git a/src/node/consumer/src/lib/models/configuration/job_config.ts b/src/node/consumer/src/lib/models/configuration/job_config.ts index 9ebbf90..57cb6ad 100644 --- a/src/node/consumer/src/lib/models/configuration/job_config.ts +++ b/src/node/consumer/src/lib/models/configuration/job_config.ts @@ -1,6 +1,6 @@ import {BooleanHelpers} from "../../helpers/boolean_helpers"; -export class JobConfig { - public JOB_CONCURRENCY: number = parseInt(process.env.JOB_CONCURRENCY || "1", 10); - public JOBS_ENABLED: boolean = BooleanHelpers.parseBool(process.env.JOBS_ENABLED, true); -} \ No newline at end of file +export const jobConfig = { + JOB_CONCURRENCY: parseInt(process.env.JOB_CONCURRENCY || "1", 10), + JOBS_ENABLED: BooleanHelpers.parseBool(process.env.JOBS_ENABLED, true) +}; \ No newline at end of file diff --git a/src/node/consumer/src/lib/models/configuration/metadata_config.ts b/src/node/consumer/src/lib/models/configuration/metadata_config.ts index 2debe48..32b4e33 100644 --- a/src/node/consumer/src/lib/models/configuration/metadata_config.ts +++ b/src/node/consumer/src/lib/models/configuration/metadata_config.ts @@ -1,4 +1,4 @@ -export class MetadataConfig { - public IMDB_CONCURRENT: number = parseInt(process.env.IMDB_CONCURRENT || "1", 10); - public IMDB_INTERVAL_MS: number = parseInt(process.env.IMDB_INTERVAL_MS || "1000", 10); -} \ No newline at end of file +export const metadataConfig = { + IMDB_CONCURRENT: parseInt(process.env.IMDB_CONCURRENT || "1", 10), + IMDB_INTERVAL_MS: parseInt(process.env.IMDB_INTERVAL_MS || "1000", 10) +}; \ No newline at end of file diff --git a/src/node/consumer/src/lib/models/configuration/rabbit_config.ts b/src/node/consumer/src/lib/models/configuration/rabbit_config.ts index d864f46..b06ff9f 100644 --- a/src/node/consumer/src/lib/models/configuration/rabbit_config.ts +++ b/src/node/consumer/src/lib/models/configuration/rabbit_config.ts @@ -1,4 +1,4 @@ -export class RabbitConfig { - public RABBIT_URI: string = process.env.RABBIT_URI || 'amqp://localhost'; - public QUEUE_NAME: string = process.env.QUEUE_NAME || 'test-queue'; -} \ No newline at end of file +export const rabbitConfig = { + RABBIT_URI: process.env.RABBIT_URI || 'amqp://localhost', + QUEUE_NAME: process.env.QUEUE_NAME || 'test-queue' +}; \ No newline at end of file diff --git a/src/node/consumer/src/lib/models/configuration/torrent_config.ts b/src/node/consumer/src/lib/models/configuration/torrent_config.ts index 5f0f6c7..33ea6c6 100644 --- a/src/node/consumer/src/lib/models/configuration/torrent_config.ts +++ b/src/node/consumer/src/lib/models/configuration/torrent_config.ts @@ -1,4 +1,4 @@ -export class TorrentConfig { - public MAX_CONNECTIONS_PER_TORRENT: number = parseInt(process.env.MAX_SINGLE_TORRENT_CONNECTIONS || "20", 10); - public TIMEOUT: number = parseInt(process.env.TORRENT_TIMEOUT || "30000", 10); -} \ No newline at end of file +export const torrentConfig = { + MAX_CONNECTIONS_PER_TORRENT: parseInt(process.env.MAX_SINGLE_TORRENT_CONNECTIONS || "20", 10), + TIMEOUT: parseInt(process.env.TORRENT_TIMEOUT || "30000", 10) +}; \ No newline at end of file diff --git a/src/node/consumer/src/lib/models/configuration/tracker_config.ts b/src/node/consumer/src/lib/models/configuration/tracker_config.ts index 275dfa3..8b31fff 100644 --- a/src/node/consumer/src/lib/models/configuration/tracker_config.ts +++ b/src/node/consumer/src/lib/models/configuration/tracker_config.ts @@ -1,6 +1,6 @@ import {BooleanHelpers} from "../../helpers/boolean_helpers"; -export class TrackerConfig { - public TRACKERS_URL: string = process.env.TRACKERS_URL || 'https://ngosang.github.io/trackerslist/trackers_all.txt'; - public UDP_ENABLED: boolean = BooleanHelpers.parseBool(process.env.UDP_TRACKERS_ENABLED, false); -} \ No newline at end of file +export const trackerConfig = { + TRACKERS_URL: process.env.TRACKERS_URL || 'https://ngosang.github.io/trackerslist/trackers_all.txt', + UDP_ENABLED: BooleanHelpers.parseBool(process.env.UDP_TRACKERS_ENABLED, false) +}; \ No newline at end of file diff --git a/src/node/consumer/src/lib/services/configuration_service.ts b/src/node/consumer/src/lib/services/configuration_service.ts index 9bef6d3..32b56ca 100644 --- a/src/node/consumer/src/lib/services/configuration_service.ts +++ b/src/node/consumer/src/lib/services/configuration_service.ts @@ -1,19 +1,17 @@ -import {RabbitConfig} from "../models/configuration/rabbit_config"; -import {CacheConfig} from "../models/configuration/cache_config"; -import {DatabaseConfig} from "../models/configuration/database_config"; -import {JobConfig} from "../models/configuration/job_config"; -import {MetadataConfig} from "../models/configuration/metadata_config"; -import {TrackerConfig} from "../models/configuration/tracker_config"; -import {TorrentConfig} from "../models/configuration/torrent_config"; +import {rabbitConfig} from "../models/configuration/rabbit_config"; +import {cacheConfig} from "../models/configuration/cache_config"; +import {databaseConfig} from "../models/configuration/database_config"; +import {jobConfig} from "../models/configuration/job_config"; +import {metadataConfig} from "../models/configuration/metadata_config"; +import {trackerConfig} from "../models/configuration/tracker_config"; +import {torrentConfig} from "../models/configuration/torrent_config"; -class ConfigurationService { - public readonly rabbitConfig = new RabbitConfig(); - public readonly cacheConfig = new CacheConfig(); - public readonly databaseConfig = new DatabaseConfig(); - public readonly jobConfig = new JobConfig(); - public readonly metadataConfig = new MetadataConfig(); - public readonly trackerConfig = new TrackerConfig(); - public readonly torrentConfig = new TorrentConfig(); -} - -export const configurationService = new ConfigurationService(); +export const configurationService = { + rabbitConfig: rabbitConfig, + cacheConfig: cacheConfig, + databaseConfig: databaseConfig, + jobConfig: jobConfig, + metadataConfig: metadataConfig, + trackerConfig: trackerConfig, + torrentConfig: torrentConfig +};