1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-14 00:19:16 +01:00

fix: convert event-store to typescript (#768)

This commit is contained in:
Ivar Conradi Østhus 2021-03-23 08:46:01 +01:00 committed by GitHub
parent 9bd23dc735
commit 7e7554c0ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 78 additions and 36 deletions

View File

@ -1,15 +1,22 @@
const test = require('ava');
const EventStore = require('./event-store');
const getLogger = require('../../test/fixtures/no-logger');
import test from 'ava';
import knex from 'knex';
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 => {
const store = new EventStore({}, getLogger);
const db = knex({
client: 'pg',
});
const store = new EventStore(db, getLogger);
const events = await store.getEvents();
t.is(events.length, 0);
});
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');
t.truthy(events);
t.is(events.length, 0);

View File

@ -1,7 +1,7 @@
'use strict';
const { EventEmitter } = require('events');
const { DROP_FEATURES } = require('../event-type');
import { EventEmitter } from 'events';
import Knex from 'knex';
import { DROP_FEATURES } from '../event-type';
import { LogProvider, Logger } from '../logger';
const EVENT_COLUMNS = [
'id',
@ -12,16 +12,41 @@ const EVENT_COLUMNS = [
'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';
class EventStore extends EventEmitter {
constructor(db, getLogger) {
private db: Knex;
private logger: Logger;
constructor(db: Knex, getLogger: LogProvider) {
super();
this.db = db;
this.logger = getLogger('lib/db/event-store.js');
}
async store(event) {
async store(event: ICreateEvent): Promise<void> {
try {
const rows = await this.db(TABLE)
.insert(this.eventToDbRow(event))
@ -33,7 +58,7 @@ class EventStore extends EventEmitter {
}
}
async batchStore(events) {
async batchStore(events: ICreateEvent[]): Promise<void> {
try {
const savedRows = await this.db(TABLE)
.insert(events.map(this.eventToDbRow))
@ -47,7 +72,7 @@ class EventStore extends EventEmitter {
}
}
async getEvents() {
async getEvents(): Promise<IEvent[]> {
try {
const rows = await this.db
.select(EVENT_COLUMNS)
@ -61,7 +86,7 @@ class EventStore extends EventEmitter {
}
}
async getEventsFilterByName(name) {
async getEventsFilterByName(name: string): Promise<IEvent[]> {
try {
const rows = await this.db
.select(EVENT_COLUMNS)
@ -83,7 +108,7 @@ class EventStore extends EventEmitter {
}
}
rowToEvent(row) {
rowToEvent(row: IEventTable): IEvent {
return {
id: row.id,
type: row.type,
@ -94,7 +119,7 @@ class EventStore extends EventEmitter {
};
}
eventToDbRow(e) {
eventToDbRow(e: ICreateEvent): any {
return {
type: e.type,
created_by: e.createdBy,
@ -105,3 +130,4 @@ class EventStore extends EventEmitter {
}
module.exports = EventStore;
export default EventStore;

View File

@ -1,18 +1,26 @@
'use strict';
import { configure, getLogger, levels } from 'log4js';
const log4js = require('log4js');
export type LogProvider = (category?: string) => Logger;
function getDefaultLogProvider() {
let level;
export interface Logger {
debug(message: any, ...args: any[]): void;
info(message: any, ...args: any[]): void;
warn(message: any, ...args: any[]): void;
error(message: any, ...args: any[]): void;
fatal(message: any, ...args: any[]): void;
}
function getDefaultLogProvider(): LogProvider {
let level: string;
if (process.env.NODE_ENV === 'production') {
level = log4js.levels.ERROR.levelStr;
level = levels.ERROR.levelStr;
} else if (process.env.NODE_ENV === 'test') {
level = log4js.levels.FATAL.levelStr;
level = levels.FATAL.levelStr;
} else {
level = log4js.levels.DEBUG.levelStr;
level = levels.DEBUG.levelStr;
}
log4js.configure({
configure({
appenders: {
console: { type: 'console' },
},
@ -21,20 +29,16 @@ function getDefaultLogProvider() {
},
});
return log4js.getLogger;
return getLogger;
}
let loggerProvider = getDefaultLogProvider();
function validate(isValid, msg) {
function validate(isValid: boolean, msg: string) {
if (!isValid) {
throw new TypeError(msg);
}
}
module.exports.defaultLogProvider = loggerProvider;
function validateLogProvider(provider) {
export function validateLogProvider(provider: LogProvider): void {
validate(typeof provider === 'function', 'Provider needs to be a function');
const logger = provider('unleash:logger');
@ -44,14 +48,15 @@ function validateLogProvider(provider) {
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
exports.setLoggerProvider = function setLoggerProvider(provider) {
export function setLoggerProvider(provider: LogProvider): void {
validateLogProvider(provider);
loggerProvider = provider;
const logger = provider('unleash:logger');
logger.info(`Your way of configuring a logProvider is deprecated.
See https://docs.getunleash.io/docs/deploy/configuring_unleash for details`);
};
}

View File

@ -1,14 +1,17 @@
/* eslint-disable no-console */
import { Logger } from '../../lib/logger';
let muteError = false;
function noLoggerProvider() {
function noLoggerProvider(): Logger {
// do something with the name
return {
debug: () => {},
info: () => {},
warn: () => {},
error: muteError ? () => {} : console.error,
fatal: console.error,
};
}
@ -17,3 +20,4 @@ noLoggerProvider.setMuteError = mute => {
};
module.exports = noLoggerProvider;
export default noLoggerProvider;