mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-19 00:15:43 +01:00
fix: convert event-store to typescript (#768)
This commit is contained in:
parent
9bd23dc735
commit
7e7554c0ae
@ -1,15 +1,22 @@
|
|||||||
const test = require('ava');
|
import test from 'ava';
|
||||||
const EventStore = require('./event-store');
|
import knex from 'knex';
|
||||||
const getLogger = require('../../test/fixtures/no-logger');
|
import EventStore from './event-store';
|
||||||
|
import getLogger from '../../test/fixtures/no-logger';
|
||||||
|
|
||||||
test('Trying to get events if db fails should yield empty list', async t => {
|
test('Trying to get events if db fails should yield empty list', async t => {
|
||||||
const store = new EventStore({}, getLogger);
|
const db = knex({
|
||||||
|
client: 'pg',
|
||||||
|
});
|
||||||
|
const store = new EventStore(db, getLogger);
|
||||||
const events = await store.getEvents();
|
const events = await store.getEvents();
|
||||||
t.is(events.length, 0);
|
t.is(events.length, 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Trying to get events by name if db fails should yield empty list', async t => {
|
test('Trying to get events by name if db fails should yield empty list', async t => {
|
||||||
const store = new EventStore({}, getLogger);
|
const db = knex({
|
||||||
|
client: 'pg',
|
||||||
|
});
|
||||||
|
const store = new EventStore(db, getLogger);
|
||||||
const events = await store.getEventsFilterByName('application-created');
|
const events = await store.getEventsFilterByName('application-created');
|
||||||
t.truthy(events);
|
t.truthy(events);
|
||||||
t.is(events.length, 0);
|
t.is(events.length, 0);
|
@ -1,7 +1,7 @@
|
|||||||
'use strict';
|
import { EventEmitter } from 'events';
|
||||||
|
import Knex from 'knex';
|
||||||
const { EventEmitter } = require('events');
|
import { DROP_FEATURES } from '../event-type';
|
||||||
const { DROP_FEATURES } = require('../event-type');
|
import { LogProvider, Logger } from '../logger';
|
||||||
|
|
||||||
const EVENT_COLUMNS = [
|
const EVENT_COLUMNS = [
|
||||||
'id',
|
'id',
|
||||||
@ -12,16 +12,41 @@ const EVENT_COLUMNS = [
|
|||||||
'tags',
|
'tags',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
interface IEventTable {
|
||||||
|
id: number;
|
||||||
|
type: string;
|
||||||
|
created_by: string;
|
||||||
|
created_at: Date;
|
||||||
|
data: any;
|
||||||
|
tags: [];
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ICreateEvent {
|
||||||
|
type: string;
|
||||||
|
createdBy: string;
|
||||||
|
data?: any;
|
||||||
|
tags?: Array<string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IEvent extends ICreateEvent {
|
||||||
|
id: number;
|
||||||
|
createdAt: Date;
|
||||||
|
}
|
||||||
|
|
||||||
const TABLE = 'events';
|
const TABLE = 'events';
|
||||||
|
|
||||||
class EventStore extends EventEmitter {
|
class EventStore extends EventEmitter {
|
||||||
constructor(db, getLogger) {
|
private db: Knex;
|
||||||
|
|
||||||
|
private logger: Logger;
|
||||||
|
|
||||||
|
constructor(db: Knex, getLogger: LogProvider) {
|
||||||
super();
|
super();
|
||||||
this.db = db;
|
this.db = db;
|
||||||
this.logger = getLogger('lib/db/event-store.js');
|
this.logger = getLogger('lib/db/event-store.js');
|
||||||
}
|
}
|
||||||
|
|
||||||
async store(event) {
|
async store(event: ICreateEvent): Promise<void> {
|
||||||
try {
|
try {
|
||||||
const rows = await this.db(TABLE)
|
const rows = await this.db(TABLE)
|
||||||
.insert(this.eventToDbRow(event))
|
.insert(this.eventToDbRow(event))
|
||||||
@ -33,7 +58,7 @@ class EventStore extends EventEmitter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async batchStore(events) {
|
async batchStore(events: ICreateEvent[]): Promise<void> {
|
||||||
try {
|
try {
|
||||||
const savedRows = await this.db(TABLE)
|
const savedRows = await this.db(TABLE)
|
||||||
.insert(events.map(this.eventToDbRow))
|
.insert(events.map(this.eventToDbRow))
|
||||||
@ -47,7 +72,7 @@ class EventStore extends EventEmitter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async getEvents() {
|
async getEvents(): Promise<IEvent[]> {
|
||||||
try {
|
try {
|
||||||
const rows = await this.db
|
const rows = await this.db
|
||||||
.select(EVENT_COLUMNS)
|
.select(EVENT_COLUMNS)
|
||||||
@ -61,7 +86,7 @@ class EventStore extends EventEmitter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async getEventsFilterByName(name) {
|
async getEventsFilterByName(name: string): Promise<IEvent[]> {
|
||||||
try {
|
try {
|
||||||
const rows = await this.db
|
const rows = await this.db
|
||||||
.select(EVENT_COLUMNS)
|
.select(EVENT_COLUMNS)
|
||||||
@ -83,7 +108,7 @@ class EventStore extends EventEmitter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rowToEvent(row) {
|
rowToEvent(row: IEventTable): IEvent {
|
||||||
return {
|
return {
|
||||||
id: row.id,
|
id: row.id,
|
||||||
type: row.type,
|
type: row.type,
|
||||||
@ -94,7 +119,7 @@ class EventStore extends EventEmitter {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
eventToDbRow(e) {
|
eventToDbRow(e: ICreateEvent): any {
|
||||||
return {
|
return {
|
||||||
type: e.type,
|
type: e.type,
|
||||||
created_by: e.createdBy,
|
created_by: e.createdBy,
|
||||||
@ -105,3 +130,4 @@ class EventStore extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = EventStore;
|
module.exports = EventStore;
|
||||||
|
export default EventStore;
|
@ -1,18 +1,26 @@
|
|||||||
'use strict';
|
import { configure, getLogger, levels } from 'log4js';
|
||||||
|
|
||||||
const log4js = require('log4js');
|
export type LogProvider = (category?: string) => Logger;
|
||||||
|
|
||||||
function getDefaultLogProvider() {
|
export interface Logger {
|
||||||
let level;
|
debug(message: any, ...args: any[]): void;
|
||||||
if (process.env.NODE_ENV === 'production') {
|
info(message: any, ...args: any[]): void;
|
||||||
level = log4js.levels.ERROR.levelStr;
|
warn(message: any, ...args: any[]): void;
|
||||||
} else if (process.env.NODE_ENV === 'test') {
|
error(message: any, ...args: any[]): void;
|
||||||
level = log4js.levels.FATAL.levelStr;
|
fatal(message: any, ...args: any[]): void;
|
||||||
} else {
|
|
||||||
level = log4js.levels.DEBUG.levelStr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log4js.configure({
|
function getDefaultLogProvider(): LogProvider {
|
||||||
|
let level: string;
|
||||||
|
if (process.env.NODE_ENV === 'production') {
|
||||||
|
level = levels.ERROR.levelStr;
|
||||||
|
} else if (process.env.NODE_ENV === 'test') {
|
||||||
|
level = levels.FATAL.levelStr;
|
||||||
|
} else {
|
||||||
|
level = levels.DEBUG.levelStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
configure({
|
||||||
appenders: {
|
appenders: {
|
||||||
console: { type: 'console' },
|
console: { type: 'console' },
|
||||||
},
|
},
|
||||||
@ -21,20 +29,16 @@ function getDefaultLogProvider() {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
return log4js.getLogger;
|
return getLogger;
|
||||||
}
|
}
|
||||||
|
|
||||||
let loggerProvider = getDefaultLogProvider();
|
function validate(isValid: boolean, msg: string) {
|
||||||
|
|
||||||
function validate(isValid, msg) {
|
|
||||||
if (!isValid) {
|
if (!isValid) {
|
||||||
throw new TypeError(msg);
|
throw new TypeError(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports.defaultLogProvider = loggerProvider;
|
export function validateLogProvider(provider: LogProvider): void {
|
||||||
|
|
||||||
function validateLogProvider(provider) {
|
|
||||||
validate(typeof provider === 'function', 'Provider needs to be a function');
|
validate(typeof provider === 'function', 'Provider needs to be a function');
|
||||||
|
|
||||||
const logger = provider('unleash:logger');
|
const logger = provider('unleash:logger');
|
||||||
@ -44,14 +48,15 @@ function validateLogProvider(provider) {
|
|||||||
validate(typeof logger.error === 'function', 'Logger must implement error');
|
validate(typeof logger.error === 'function', 'Logger must implement error');
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.validateLogProvider = validateLogProvider;
|
// Deprecated (TODO: remove this in v4)
|
||||||
|
let loggerProvider = getDefaultLogProvider();
|
||||||
|
export const defaultLogProvider = loggerProvider;
|
||||||
|
|
||||||
// Deprecated
|
export function setLoggerProvider(provider: LogProvider): void {
|
||||||
exports.setLoggerProvider = function setLoggerProvider(provider) {
|
|
||||||
validateLogProvider(provider);
|
validateLogProvider(provider);
|
||||||
|
|
||||||
loggerProvider = provider;
|
loggerProvider = provider;
|
||||||
const logger = provider('unleash:logger');
|
const logger = provider('unleash:logger');
|
||||||
logger.info(`Your way of configuring a logProvider is deprecated.
|
logger.info(`Your way of configuring a logProvider is deprecated.
|
||||||
See https://docs.getunleash.io/docs/deploy/configuring_unleash for details`);
|
See https://docs.getunleash.io/docs/deploy/configuring_unleash for details`);
|
||||||
};
|
}
|
@ -1,14 +1,17 @@
|
|||||||
/* eslint-disable no-console */
|
/* eslint-disable no-console */
|
||||||
|
|
||||||
|
import { Logger } from '../../lib/logger';
|
||||||
|
|
||||||
let muteError = false;
|
let muteError = false;
|
||||||
|
|
||||||
function noLoggerProvider() {
|
function noLoggerProvider(): Logger {
|
||||||
// do something with the name
|
// do something with the name
|
||||||
return {
|
return {
|
||||||
debug: () => {},
|
debug: () => {},
|
||||||
info: () => {},
|
info: () => {},
|
||||||
warn: () => {},
|
warn: () => {},
|
||||||
error: muteError ? () => {} : console.error,
|
error: muteError ? () => {} : console.error,
|
||||||
|
fatal: console.error,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -17,3 +20,4 @@ noLoggerProvider.setMuteError = mute => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.exports = noLoggerProvider;
|
module.exports = noLoggerProvider;
|
||||||
|
export default noLoggerProvider;
|
Loading…
Reference in New Issue
Block a user