You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
1.8 KiB

// logan.js
// Copyright (C) 2023 DTP Technologies, LLC
// License: Apache-2.0
'use strict';
const { SiteService } = require('../../lib/site-lib');
class LoganService extends SiteService {
constructor (dtp) {
super(dtp, module.exports);
}
async start ( ) {
await super.start();
const { LoganClient } = await import('dtp-logan-api');
this.log.info('creating Logan client');
this.logan = new LoganClient();
this.log.info('initializing Logan client');
await this.logan.initialize({
log: this.log,
api: {
enabled: process.env.DTP_LOGAN === 'enabled',
key: process.env.DTP_LOGAN_API_KEY,
scheme: process.env.DTP_LOGAN_SCHEME,
host: process.env.DTP_LOGAN_HOST,
},
request: {
userField: 'user',
userIdField: '_id',
usernameField: 'username',
},
flags: {
includeHostname: true,
includeClientIpAddress: true,
includeUser: true,
},
queue: {
enabled: true,
name: process.env.DTP_LOGAN_QUEUE_NAME || 'logan',
redis: {
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT,
username: process.env.REDIS_USERNAME, // requires Redis >= 6
password: process.env.REDIS_PASSWORD,
keyPrefix: process.env.REDIS_PREFIX,
},
defaultJobOptions: {
attempts: 3,
removeOnComplete: true,
removeOnFail: true,
},
},
});
}
async sendRequestEvent (component, req, event) {
return this.logan.sendRequestEvent(component, req, event);
}
async sendEvent (component, event) {
return this.logan.sendEvent(component, event);
}
}
module.exports = {
logId: 'logan',
index: 'logan',
className: 'LoganService',
create: (dtp) => { return new LoganService(dtp); },
};