Skip to content

Commit

Permalink
Merge pull request #78 from docknetwork/DCKA-1135-logs
Browse files Browse the repository at this point in the history
Request logger
  • Loading branch information
osinakayah authored Nov 7, 2022
2 parents 48a5450 + 41aab1d commit 784b0b1
Show file tree
Hide file tree
Showing 7 changed files with 138 additions and 2 deletions.
15 changes: 15 additions & 0 deletions packages/core/lib/core/realm-schemas.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,18 @@ export const Account = {
},
primaryKey: 'id',
};

export const RequestLog = {
name: 'RequestLog',
properties: {
id: 'string',
url: 'string',
status: 'int',
method: 'string',
headers: 'string',
body: 'string',
response: 'string',
createdAt: 'date',
},
primaryKey: 'id',
};
4 changes: 2 additions & 2 deletions packages/core/lib/core/realm.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import Realm from 'realm';
import {Account, TokenPrice} from './realm-schemas';
import {Account, TokenPrice, RequestLog} from './realm-schemas';

let realm;

const schema = [TokenPrice, Account];
const schema = [TokenPrice, Account, RequestLog];

export function addSchema(item) {
schema.push(item);
Expand Down
5 changes: 5 additions & 0 deletions packages/request-logger/.watchmanconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"ignore_dirs": [
"node_modules"
]
}
Empty file.
49 changes: 49 additions & 0 deletions packages/request-logger/lib/request-logger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import {getRealm} from '@docknetwork/wallet-sdk-core/lib/core/realm';
import assert from 'assert';
import {v4 as uuidv4} from 'uuid';
export const RequestLogger = (function () {
const exportLog = () => {
const realm = getRealm();
return realm.objects('RequestLog').toJSON();
};
const logRequest = ({
status,
url,
method,
headers = {},
body = {},
response,
}) => {
assert(typeof url === 'string', 'invalid url');
assert(typeof method === 'string', 'invalid method');
const id = uuidv4();
const realm = getRealm();

const log = {
id,
url,
method,
status,
headers: JSON.stringify(headers),
body: JSON.stringify(body),
response: JSON.stringify(response),
createdAt: new Date().toISOString(),
};

realm.write(() => {
realm.create('RequestLog', log);
});
return id;
};
const clearLogs = () => {
const realm = getRealm();
realm.write(() => {
realm.delete(realm.objects('RequestLog'));
});
};
return {
exportLog,
logRequest,
clearLogs,
};
})();
10 changes: 10 additions & 0 deletions packages/request-logger/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"name": "@docknetwork/wallet-sdk-request-logger",
"version": "0.0.1",
"dependencies": {
"uuid": "^9.0.0"
},
"devDependencies": {

}
}
57 changes: 57 additions & 0 deletions packages/request-logger/tests/request-logger.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import {RequestLogger} from '../lib/request-logger';
import {getRealm} from '@docknetwork/wallet-sdk-core/lib/core/realm';
jest.mock('@docknetwork/wallet-sdk-core/lib/core/realm', () => {
const realmFunctions = {
write: jest.fn(callback => {
callback();
}),
create: jest.fn(),
delete: jest.fn(),
objects: jest.fn(() => ({
filtered: jest.fn(),
toJSON: jest.fn(),
})),
};
return {
getRealm: () => realmFunctions,
addSchema: jest.fn(),
clearCacheData: jest.fn(),
};
});
describe('Request logger', () => {
it('expect to log request', () => {
const realm = getRealm();
const mockLog = {
url: 'http://localhost',
method: 'get',
headers: {},
body: {},
response: {},
status: 200,
};
RequestLogger.logRequest(mockLog);
expect(realm.write).toBeCalled();
expect(realm.create).toBeCalledWith('RequestLog', {
id: expect.any(String),
createdAt: expect.any(String),
url: 'http://localhost',
method: 'get',
headers: '{}',
body: '{}',
response: '{}',
status: 200,
});
});
it('expect to export log request', () => {
const realm = getRealm();
RequestLogger.exportLog();
expect(realm.objects).toBeCalledWith('RequestLog');
});
it('expect to delete logs', () => {
const realm = getRealm();
RequestLogger.clearLogs();
expect(realm.write).toBeCalled();
expect(realm.delete).toBeCalled();
expect(realm.objects).toBeCalledWith('RequestLog');
});
});

0 comments on commit 784b0b1

Please sign in to comment.