fix(core): update
This commit is contained in:
@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@pushrocks/smartclickhouse',
|
||||
version: '2.0.4',
|
||||
version: '2.0.5',
|
||||
description: 'an odm for talking to clickhouse'
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ export interface IClickhouseConstructorOptions {
|
||||
|
||||
export class SmartClickHouseDb {
|
||||
public options: IClickhouseConstructorOptions;
|
||||
public defaultClient: plugins.clickhouse.ClickHouseClient;
|
||||
public clickhouseClient: plugins.clickhouse.ClickHouseClient;
|
||||
|
||||
constructor(optionsArg: IClickhouseConstructorOptions) {
|
||||
@ -32,23 +33,38 @@ export class SmartClickHouseDb {
|
||||
// the password
|
||||
this.options.password ? defaultOptions.password = this.options.password : null;
|
||||
// lets connect
|
||||
const defaultClient = new plugins.clickhouse.ClickHouseClient({
|
||||
this.defaultClient = new plugins.clickhouse.ClickHouseClient({
|
||||
...defaultOptions,
|
||||
database: 'default',
|
||||
});
|
||||
await this.pingDatabaseUntilAvailable();
|
||||
console.log(`Create database ${this.options.database}, if it does not exist...`);
|
||||
if (dropOld) {
|
||||
await defaultClient.queryPromise(`DROP DATABASE IF EXISTS ${this.options.database}`);
|
||||
}
|
||||
await defaultClient.queryPromise(`CREATE DATABASE IF NOT EXISTS ${this.options.database}`);
|
||||
await this.createDatabase(dropOld);
|
||||
|
||||
console.log(`Ensured database. Now connecting to wanted database: ${this.options.database}`);
|
||||
this.clickhouseClient = new plugins.clickhouse.ClickHouseClient({
|
||||
...defaultOptions
|
||||
});
|
||||
console.log(`trying to ping database...`);
|
||||
const result = await this.clickhouseClient.ping();
|
||||
console.log(`Ping successfull?: ${result}`);
|
||||
}
|
||||
|
||||
public async createDatabase(dropOld: boolean = false) {
|
||||
if (dropOld) {
|
||||
await this.defaultClient.queryPromise(`DROP DATABASE IF EXISTS ${this.options.database}`);
|
||||
}
|
||||
await this.defaultClient.queryPromise(`CREATE DATABASE IF NOT EXISTS ${this.options.database}`);
|
||||
}
|
||||
|
||||
public async pingDatabaseUntilAvailable() {
|
||||
let available = false;
|
||||
while(!available) {
|
||||
available = await this.defaultClient.ping().catch(err => {
|
||||
return false;
|
||||
});
|
||||
if (!available) {
|
||||
console.log(`NOT OK: tried pinging ${this.options.url}... Trying again in 5 seconds.`);
|
||||
await plugins.smartdelay.delayFor(5000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -66,6 +66,7 @@ export class TimeDataTable {
|
||||
}
|
||||
|
||||
// INSTANCE
|
||||
public healingDeferred: plugins.smartpromise.Deferred<any>;
|
||||
public smartClickHouseDbRef: SmartClickHouseDb;
|
||||
public options: ITimeDataTableOptions;
|
||||
|
||||
@ -92,6 +93,7 @@ export class TimeDataTable {
|
||||
* stores a json and tries to map it to the nested syntax
|
||||
*/
|
||||
public async addData(dataArg: any) {
|
||||
|
||||
// the storageJson
|
||||
let storageJson: { [key: string]: any } = {};
|
||||
|
||||
@ -164,7 +166,18 @@ export class TimeDataTable {
|
||||
|
||||
const result = await this.smartClickHouseDbRef.clickhouseClient.insertPromise(this.options.tableName, [
|
||||
storageJson,
|
||||
]);
|
||||
]).catch(async () => {
|
||||
if (this.healingDeferred) {
|
||||
return;
|
||||
}
|
||||
this.healingDeferred = plugins.smartpromise.defer();
|
||||
console.log(`Ran into an error. Trying to set up things properly again.`);
|
||||
await this.smartClickHouseDbRef.pingDatabaseUntilAvailable();
|
||||
await this.smartClickHouseDbRef.createDatabase();
|
||||
this.columns = [];
|
||||
this.healingDeferred.resolve();
|
||||
this.healingDeferred = null;
|
||||
});
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,13 @@
|
||||
// @pushrocks scope
|
||||
import * as smartdelay from '@pushrocks/smartdelay';
|
||||
import * as smartobject from '@pushrocks/smartobject';
|
||||
import * as smartpromise from '@pushrocks/smartpromise';
|
||||
import * as smarturl from '@pushrocks/smarturl';
|
||||
|
||||
export {
|
||||
smartdelay,
|
||||
smartobject,
|
||||
smartpromise,
|
||||
smarturl
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user