to functional constants
This commit is contained in:
@@ -1,37 +1,24 @@
|
||||
export class PromiseHelpers {
|
||||
public static async sequence(promises: Array<() => Promise<any>>): Promise<any[]> {
|
||||
return promises.reduce((promise: Promise<any[]>, func: () => Promise<any>) =>
|
||||
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<any>>): Promise<any> {
|
||||
sequence: async function(promises: (() => Promise<any>)[]) {
|
||||
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<void> {
|
||||
return new Promise((resolve) => setTimeout(() => resolve(), duration));
|
||||
}
|
||||
delay: async function(duration: number) {
|
||||
return new Promise<void>(resolve => setTimeout(() => resolve(), duration));
|
||||
},
|
||||
|
||||
/**
|
||||
* Timeout promise after a set time in ms
|
||||
*/
|
||||
public static async timeout(timeoutMs: number, promise: Promise<any>, message = 'Timed out'): Promise<any> {
|
||||
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();
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -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`;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -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}`;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -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);
|
||||
}
|
||||
export const jobConfig = {
|
||||
JOB_CONCURRENCY: parseInt(process.env.JOB_CONCURRENCY || "1", 10),
|
||||
JOBS_ENABLED: BooleanHelpers.parseBool(process.env.JOBS_ENABLED, true)
|
||||
};
|
||||
@@ -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);
|
||||
}
|
||||
export const metadataConfig = {
|
||||
IMDB_CONCURRENT: parseInt(process.env.IMDB_CONCURRENT || "1", 10),
|
||||
IMDB_INTERVAL_MS: parseInt(process.env.IMDB_INTERVAL_MS || "1000", 10)
|
||||
};
|
||||
@@ -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';
|
||||
}
|
||||
export const rabbitConfig = {
|
||||
RABBIT_URI: process.env.RABBIT_URI || 'amqp://localhost',
|
||||
QUEUE_NAME: process.env.QUEUE_NAME || 'test-queue'
|
||||
};
|
||||
@@ -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);
|
||||
}
|
||||
export const torrentConfig = {
|
||||
MAX_CONNECTIONS_PER_TORRENT: parseInt(process.env.MAX_SINGLE_TORRENT_CONNECTIONS || "20", 10),
|
||||
TIMEOUT: parseInt(process.env.TORRENT_TIMEOUT || "30000", 10)
|
||||
};
|
||||
@@ -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);
|
||||
}
|
||||
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)
|
||||
};
|
||||
@@ -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
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user