to functional constants
This commit is contained in:
@@ -1,37 +1,24 @@
|
|||||||
export class PromiseHelpers {
|
export const 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([]));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
sequence: async function(promises: (() => Promise<any>)[]) {
|
||||||
* Return first resolved promise as the result.
|
return promises.reduce((promise, func) =>
|
||||||
*/
|
promise.then(result => func().then(res => result.concat(res))), Promise.resolve([]));
|
||||||
public static async first(promises: Array<Promise<any>>): Promise<any> {
|
},
|
||||||
|
|
||||||
|
first: async function(promises) {
|
||||||
return Promise.all(promises.map(p => {
|
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));
|
return p.then((val) => Promise.reject(val), (err) => Promise.resolve(err));
|
||||||
})).then(
|
})).then(
|
||||||
// If '.all' resolved, we've just got an array of errors.
|
|
||||||
(errors) => Promise.reject(errors),
|
(errors) => Promise.reject(errors),
|
||||||
// If '.all' rejected, we've got the result we wanted.
|
|
||||||
(val) => Promise.resolve(val)
|
(val) => Promise.resolve(val)
|
||||||
);
|
);
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
delay: async function(duration: number) {
|
||||||
* Delay promise
|
return new Promise<void>(resolve => setTimeout(() => resolve(), duration));
|
||||||
*/
|
},
|
||||||
public static async delay(duration: number): Promise<void> {
|
|
||||||
return new Promise((resolve) => setTimeout(() => resolve(), duration));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
timeout: async function(timeoutMs: number, promise, message = 'Timed out') {
|
||||||
* Timeout promise after a set time in ms
|
|
||||||
*/
|
|
||||||
public static async timeout(timeoutMs: number, promise: Promise<any>, message = 'Timed out'): Promise<any> {
|
|
||||||
return Promise.race([
|
return Promise.race([
|
||||||
promise,
|
promise,
|
||||||
new Promise(function (resolve, reject) {
|
new Promise(function (resolve, reject) {
|
||||||
@@ -40,12 +27,9 @@ export class PromiseHelpers {
|
|||||||
}, timeoutMs);
|
}, timeoutMs);
|
||||||
})
|
})
|
||||||
]);
|
]);
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
mostCommonValue: function(array) {
|
||||||
* Return most common value from given array.
|
|
||||||
*/
|
|
||||||
public static mostCommonValue(array: any[]): any {
|
|
||||||
return array.sort((a, b) => array.filter(v => v === a).length - array.filter(v => v === b).length).pop();
|
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";
|
import {BooleanHelpers} from "../../helpers/boolean_helpers";
|
||||||
|
|
||||||
export class CacheConfig {
|
export const cacheConfig = {
|
||||||
public MONGODB_HOST: string = process.env.MONGODB_HOST || 'mongodb';
|
MONGODB_HOST: process.env.MONGODB_HOST || 'mongodb',
|
||||||
public MONGODB_PORT: string = process.env.MONGODB_PORT || '27017';
|
MONGODB_PORT: process.env.MONGODB_PORT || '27017',
|
||||||
public MONGODB_DB: string = process.env.MONGODB_DB || 'knightcrawler';
|
MONGODB_DB: process.env.MONGODB_DB || 'knightcrawler',
|
||||||
public MONGO_INITDB_ROOT_USERNAME: string = process.env.MONGO_INITDB_ROOT_USERNAME || 'mongo';
|
MONGO_INITDB_ROOT_USERNAME: process.env.MONGO_INITDB_ROOT_USERNAME || 'mongo',
|
||||||
public MONGO_INITDB_ROOT_PASSWORD: string = process.env.MONGO_INITDB_ROOT_PASSWORD || 'mongo';
|
MONGO_INITDB_ROOT_PASSWORD: process.env.MONGO_INITDB_ROOT_PASSWORD || 'mongo',
|
||||||
public NO_CACHE: boolean = BooleanHelpers.parseBool(process.env.NO_CACHE, false);
|
NO_CACHE: BooleanHelpers.parseBool(process.env.NO_CACHE, false),
|
||||||
public COLLECTION_NAME: string = process.env.MONGODB_COLLECTION || 'knightcrawler_consumer_collection';
|
COLLECTION_NAME: process.env.MONGODB_COLLECTION || 'knightcrawler_consumer_collection',
|
||||||
|
|
||||||
public get MONGO_URI() {
|
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`;
|
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";
|
import {BooleanHelpers} from "../../helpers/boolean_helpers";
|
||||||
|
|
||||||
export class DatabaseConfig {
|
export const databaseConfig = {
|
||||||
public POSTGRES_HOST: string = process.env.POSTGRES_HOST || 'postgres';
|
POSTGRES_HOST: process.env.POSTGRES_HOST || 'postgres',
|
||||||
public POSTGRES_PORT: number = parseInt(process.env.POSTGRES_PORT || '5432');
|
POSTGRES_PORT: parseInt(process.env.POSTGRES_PORT || '5432'),
|
||||||
public POSTGRES_DB: string = process.env.POSTGRES_DB || 'knightcrawler';
|
POSTGRES_DB: process.env.POSTGRES_DB || 'knightcrawler',
|
||||||
public POSTGRES_USER: string = process.env.POSTGRES_USER || 'postgres';
|
POSTGRES_USER: process.env.POSTGRES_USER || 'postgres',
|
||||||
public POSTGRES_PASSWORD: string = process.env.POSTGRES_PASSWORD || 'postgres';
|
POSTGRES_PASSWORD: process.env.POSTGRES_PASSWORD || 'postgres',
|
||||||
public AUTO_CREATE_AND_APPLY_MIGRATIONS : boolean = BooleanHelpers.parseBool(process.env.AUTO_CREATE_AND_APPLY_MIGRATIONS, false);
|
AUTO_CREATE_AND_APPLY_MIGRATIONS: BooleanHelpers.parseBool(process.env.AUTO_CREATE_AND_APPLY_MIGRATIONS, false),
|
||||||
|
|
||||||
public get POSTGRES_URI() {
|
get POSTGRES_URI() {
|
||||||
return `postgres://${this.POSTGRES_USER}:${this.POSTGRES_PASSWORD}@${this.POSTGRES_HOST}:${this.POSTGRES_PORT}/${this.POSTGRES_DB}`;
|
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";
|
import {BooleanHelpers} from "../../helpers/boolean_helpers";
|
||||||
|
|
||||||
export class JobConfig {
|
export const jobConfig = {
|
||||||
public JOB_CONCURRENCY: number = parseInt(process.env.JOB_CONCURRENCY || "1", 10);
|
JOB_CONCURRENCY: parseInt(process.env.JOB_CONCURRENCY || "1", 10),
|
||||||
public JOBS_ENABLED: boolean = BooleanHelpers.parseBool(process.env.JOBS_ENABLED, true);
|
JOBS_ENABLED: BooleanHelpers.parseBool(process.env.JOBS_ENABLED, true)
|
||||||
}
|
};
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
export class MetadataConfig {
|
export const metadataConfig = {
|
||||||
public IMDB_CONCURRENT: number = parseInt(process.env.IMDB_CONCURRENT || "1", 10);
|
IMDB_CONCURRENT: parseInt(process.env.IMDB_CONCURRENT || "1", 10),
|
||||||
public IMDB_INTERVAL_MS: number = parseInt(process.env.IMDB_INTERVAL_MS || "1000", 10);
|
IMDB_INTERVAL_MS: parseInt(process.env.IMDB_INTERVAL_MS || "1000", 10)
|
||||||
}
|
};
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
export class RabbitConfig {
|
export const rabbitConfig = {
|
||||||
public RABBIT_URI: string = process.env.RABBIT_URI || 'amqp://localhost';
|
RABBIT_URI: process.env.RABBIT_URI || 'amqp://localhost',
|
||||||
public QUEUE_NAME: string = process.env.QUEUE_NAME || 'test-queue';
|
QUEUE_NAME: process.env.QUEUE_NAME || 'test-queue'
|
||||||
}
|
};
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
export class TorrentConfig {
|
export const torrentConfig = {
|
||||||
public MAX_CONNECTIONS_PER_TORRENT: number = parseInt(process.env.MAX_SINGLE_TORRENT_CONNECTIONS || "20", 10);
|
MAX_CONNECTIONS_PER_TORRENT: parseInt(process.env.MAX_SINGLE_TORRENT_CONNECTIONS || "20", 10),
|
||||||
public TIMEOUT: number = parseInt(process.env.TORRENT_TIMEOUT || "30000", 10);
|
TIMEOUT: parseInt(process.env.TORRENT_TIMEOUT || "30000", 10)
|
||||||
}
|
};
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import {BooleanHelpers} from "../../helpers/boolean_helpers";
|
import {BooleanHelpers} from "../../helpers/boolean_helpers";
|
||||||
|
|
||||||
export class TrackerConfig {
|
export const trackerConfig = {
|
||||||
public TRACKERS_URL: string = process.env.TRACKERS_URL || 'https://ngosang.github.io/trackerslist/trackers_all.txt';
|
TRACKERS_URL: process.env.TRACKERS_URL || 'https://ngosang.github.io/trackerslist/trackers_all.txt',
|
||||||
public UDP_ENABLED: boolean = BooleanHelpers.parseBool(process.env.UDP_TRACKERS_ENABLED, false);
|
UDP_ENABLED: BooleanHelpers.parseBool(process.env.UDP_TRACKERS_ENABLED, false)
|
||||||
}
|
};
|
||||||
@@ -1,19 +1,17 @@
|
|||||||
import {RabbitConfig} from "../models/configuration/rabbit_config";
|
import {rabbitConfig} from "../models/configuration/rabbit_config";
|
||||||
import {CacheConfig} from "../models/configuration/cache_config";
|
import {cacheConfig} from "../models/configuration/cache_config";
|
||||||
import {DatabaseConfig} from "../models/configuration/database_config";
|
import {databaseConfig} from "../models/configuration/database_config";
|
||||||
import {JobConfig} from "../models/configuration/job_config";
|
import {jobConfig} from "../models/configuration/job_config";
|
||||||
import {MetadataConfig} from "../models/configuration/metadata_config";
|
import {metadataConfig} from "../models/configuration/metadata_config";
|
||||||
import {TrackerConfig} from "../models/configuration/tracker_config";
|
import {trackerConfig} from "../models/configuration/tracker_config";
|
||||||
import {TorrentConfig} from "../models/configuration/torrent_config";
|
import {torrentConfig} from "../models/configuration/torrent_config";
|
||||||
|
|
||||||
class ConfigurationService {
|
export const configurationService = {
|
||||||
public readonly rabbitConfig = new RabbitConfig();
|
rabbitConfig: rabbitConfig,
|
||||||
public readonly cacheConfig = new CacheConfig();
|
cacheConfig: cacheConfig,
|
||||||
public readonly databaseConfig = new DatabaseConfig();
|
databaseConfig: databaseConfig,
|
||||||
public readonly jobConfig = new JobConfig();
|
jobConfig: jobConfig,
|
||||||
public readonly metadataConfig = new MetadataConfig();
|
metadataConfig: metadataConfig,
|
||||||
public readonly trackerConfig = new TrackerConfig();
|
trackerConfig: trackerConfig,
|
||||||
public readonly torrentConfig = new TorrentConfig();
|
torrentConfig: torrentConfig
|
||||||
}
|
};
|
||||||
|
|
||||||
export const configurationService = new ConfigurationService();
|
|
||||||
|
|||||||
Reference in New Issue
Block a user