Commit d193a6ad authored by Franz Huayta's avatar Franz Huayta

Merge branch 'master' into 'master'

Agregando funcionalidad de guardado de logs en sistema de archivos

See merge request !2
parents d547873a 990a9b83
......@@ -7,8 +7,11 @@ alias.sh
src/common/config/db.js
src/common/config/mail.js
src/common/config/openid.js
src/common/config/logs.js
src/common/lib/event-bus
logs/
deploy/roles/backend/files/base-backend
deploy/roles/frontend/files/base-backend
......
......@@ -44,15 +44,16 @@ $ npm run instalar
## Configuraciones
1. Copiar archivos de configuración
1. Copiar archivos de configuración y modificarlos según necesidad.
```sh
$ cp src/common/config/db.js.sample src/common/config/db.js
$ cp src/common/config/mail.js.sample src/common/config/mail.js
$ cp src/common/config/openid.js.sample src/common/config/openid.js
$ cp src/common/config/logs.js.sample src/common/config/logs.js
```
2. Configurar URL, client, client_params `nano src/common/config/openid.js`
2. Si se usa ciudadanía digital, configurar URL, client, client_params `nano src/common/config/openid.js`
```js
const openid = {
......@@ -103,6 +104,29 @@ const db = {
};
```
5. Para configurar los logs del sistema `nano src/common/config/logs.js`
```js
const logsConfig = {
// Donde guardar los logs?
// - 'database': Guardar en la base de datos (se usa db.js para acceder)
// - 'filesystem': Guardar en sistema de archivos
storage: 'filesystem',
// Las siguientes opciones solo se toman en cuenta si storage = 'filesystem'
// para mostrar los logs tambien en la consola
console: process.env.NODE_ENV === 'production' ? false : true,
// directorio con los logs
outputDirectory: './logs',
// nombre de archivo de logs
outputFilename: 'logs.log',
// formato de logs
format: 'combined',
// nivel de verbosidad, posibles: error, info, warning, debug
level: 'info'
};
```
## Inicializar la base de datos
1. Ejecutar lo siguiente para crear las tablas, esto eliminará las tablas y los datos de estas para reescribirlos.
......@@ -117,6 +141,8 @@ $ env NODE_ENV=production npm run setup
$ env NODE_ENV=production npm run seeders
```
> Los seeders ponen 123456 como contraseña de los usuarios.
## Iniciar el servicio con pm2
```sh
......
......@@ -41,7 +41,7 @@
"amqplib": "^0.5.5",
"apollo-server-express": "^2.9.12",
"app-iop": "git+https://gitlab.softwarelibre.gob.bo/agetic/app-iop.git",
"app-logs": "^1.1.5",
"app-logs": "git+ssh://git@github.com/strymsg/app-logs.git",
"app-notificaciones": "git+https://gitlab.softwarelibre.gob.bo/agetic/app-notificaciones.git",
"app-params": "^0.2.5",
"asyncawait": "^3.0.0",
......
'use strict';
const debug = require('debug')('app:controller:auth');
const config = require('../../../../common/config');
module.exports = function setupAuthController (services) {
const { AuthService, UsuarioService } = services;
......@@ -23,6 +24,10 @@ module.exports = function setupAuthController (services) {
}
user = user.data;
respuesta = await UsuarioService.getResponse(user, req.ipInfo);
// adicional para el modulo logs
if (respuesta.permisos.hasOwnProperty('logs:read')) {
respuesta.logsType = config.logs.storage;
}
} catch (e) {
return next(e);
}
......
'use strict';
const debug = require('debug')('app:controller:token');
const { userData, generateTokenInfinite } = require('../../../lib/auth');
module.exports = function setupLogsController (services) {
const { TokenService, Log } = services;
async function listarLogs (req, res, next) {
debug('listando logs (sistema de archivos)');
let user = await userData(req, services);
let data = req.body;
try {
let result = await Log.findAll(data);
// preparando el tipo de respuesta
let respuesta;
if (Log.logsConfig) {
if (Log.logsConfig.storage == 'filesystem') {
respuesta = {
datos: {
count: result.data.count,
datos: result.data.rows
}
};
} else {
respuesta = {
count: result.data.count,
datos: {
logs: result.data.rows
}
};
}
} else {
respuesta = {
count: result.count,
datos: {
logs: result.rows
}
};
}
res.send(respuesta);
} catch (e) {
return next(e);
}
};
return {
listarLogs
};
};
'use strict';
const guard = require('express-jwt-permissions')();
module.exports = function setupUsuario (api, controllers) {
const { LogsController } = controllers;
api.get('/logs/listar', guard.check(['logs:read']), LogsController.listarLogs);
return api;
};
......@@ -18,7 +18,11 @@ module.exports = async function setupModule (settings = { iop: true }) {
services.Parametro = await Params(config.db);
// Agregando Logs a los servicios
services.Log = await Logs(config.db);
if (config.logs.storage === 'database') {
services.Log = await Logs(config.db);
} else if (config.logs.storage === 'filesystem') {
services.Log = await Logs({ logsConfig: config.logs });
}
// Cargando GRAPHQL
let graphql = Graphql(services);
......
......@@ -4,10 +4,12 @@ const db = require('./db');
const mail = require('./mail');
const auth = require('./auth');
const openid = require('./openid');
const logs = require('./logs');
module.exports = {
db,
mail,
auth,
openid
openid,
logs
};
'use strict';
const debug = require('debug')('base-backend:logs');
const logsConfig = {
// Donde guardar los logs?
// - 'database': Guardar en la base de datos (se usa db.js para acceder)
// - 'filesystem': Guardar en sistema de archivos
storage: 'database',
// Las siguientes opciones solo se toman en cuenta si storage = 'filesystem'
// para mostrar los logs tambien en la consola
console: process.env.NODE_ENV === 'production' ? false : true,
// directorio con los logs
outputDirectory: './logs',
// nombre de archivo de logs
outputFilename: 'logs.log',
// formato de logs
format: 'combined',
// nivel de verbosidad, posibles: error, info, warning, debug
level: 'info'
};
module.exports = logsConfig;
\ No newline at end of file
'use strict';
const debug = require('debug')('apostilla:correo');
const debug = require('debug')('base-backend:correo');
const correoConfig = {
origen: process.env.EMAIL_SENDER || 'info@midominio.gob.bo',
......
......@@ -23,7 +23,13 @@ module.exports = async function initDomain (settings = { iop: true }) {
}
// Iniciando el módulo de logs
const logs = await Logs(config.db).catch(errors.handleFatalError);
let logs;
if (config.logs.storage === 'database') {
logs = await Logs(config.db).catch(errors.handleFatalError);
} else if(config.logs.storage === 'filesystem') {
logs = await Logs({ logsConfig: config.logs }).catch(errors.handleFatalError);
}
repositories.Log = logs;
// Cargando Value Objects que se encuentran en la carpeta value-object
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment