From 4758e919c59c2f342a5b5f3e4c1e02494f860040 Mon Sep 17 00:00:00 2001 From: Udo Walter Date: Fri, 15 Mar 2019 04:47:09 +0000 Subject: [server/log] add log lib --- server/api/log.js | 19 +++++++++ server/lib/log.js | 21 ++++++++++ server/migrations/20190304043012-create-log.js | 58 ++++++++++++++++++++++++++ server/models/log.js | 26 ++++++++++++ webapp/src/components/LogModule.vue | 2 +- 5 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 server/api/log.js create mode 100644 server/lib/log.js create mode 100644 server/migrations/20190304043012-create-log.js create mode 100644 server/models/log.js diff --git a/server/api/log.js b/server/api/log.js new file mode 100644 index 0000000..05fe801 --- /dev/null +++ b/server/api/log.js @@ -0,0 +1,19 @@ +/* global __appdir */ +var path = require('path') +var db = require(path.join(__appdir, 'lib', 'sequelize')) +var express = require('express') +const { decorateApp } = require('@awaitjs/express') +var router = decorateApp(express.Router()) + +// ############################################################################ +// ########################### GET requests ################################# + +router.getAsync('', async (req, res) => { + const log = await db.log.findAll({ order: [['timestamp', 'DESC']] }) + res.send(log) +}) + +// ############################################################################ +// ############################################################################ + +module.exports.router = router diff --git a/server/lib/log.js b/server/lib/log.js new file mode 100644 index 0000000..22ce264 --- /dev/null +++ b/server/lib/log.js @@ -0,0 +1,21 @@ +/* global __appdir */ +const path = require('path') +var db = require(path.join(__appdir, 'lib', 'sequelize')) + +async function log ({ category, description, groupId, clientId, userId }) { + const entry = db.log.build({ + category, + description, + timestamp: Date.now() / 1000, + groupId, + clientId, + userId + }) + if (groupId) entry.groupSnapshot = await db.group.findOne({ where: { id: groupId }}) + if (clientId) entry.clientSnapshot = await db.client.findOne({ where: { id: clientId }}) + if (userId) entry.userSnapshot = await db.user.findOne({ where: { id: userId }}) + await entry.save() + return entry +} + +module.exports = log \ No newline at end of file diff --git a/server/migrations/20190304043012-create-log.js b/server/migrations/20190304043012-create-log.js new file mode 100644 index 0000000..a7f9c25 --- /dev/null +++ b/server/migrations/20190304043012-create-log.js @@ -0,0 +1,58 @@ +'use strict' +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.createTable('log', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + timestamp: { + type: Sequelize.BIGINT + }, + category: { + type: Sequelize.STRING + }, + description: { + type: Sequelize.STRING(2048) + }, + groupId: { + type: Sequelize.INTEGER, + onDelete: 'SET NULL', + references: { + model: 'groups', + key: 'id' + } + }, + groupSnapshot: { + type: Sequelize.JSON + }, + clientId: { + type: Sequelize.INTEGER, + onDelete: 'SET NULL', + references: { + model: 'clients', + key: 'id' + } + }, + clientSnapshot: { + type: Sequelize.JSON + }, + userId: { + type: Sequelize.INTEGER, + onDelete: 'SET NULL', + references: { + model: 'users', + key: 'id' + } + }, + userSnapshot: { + type: Sequelize.JSON + } + }) + }, + down: (queryInterface, Sequelize) => { + return queryInterface.dropTable('log') + } +} diff --git a/server/models/log.js b/server/models/log.js new file mode 100644 index 0000000..36fdf20 --- /dev/null +++ b/server/models/log.js @@ -0,0 +1,26 @@ +'use strict' +module.exports = (sequelize, DataTypes) => { + var log = sequelize.define('log', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: DataTypes.INTEGER + }, + timestamp: DataTypes.BIGINT, + category: DataTypes.STRING, + description: DataTypes.STRING(2048), + groupSnapshot: DataTypes.JSON, + clientSnapshot: DataTypes.JSON, + userSnapshot: DataTypes.JSON + }, { + timestamps: false, + freezeTableName: true + }) + log.associate = function (models) { + log.belongsTo(models.group) + log.belongsTo(models.client) + log.belongsTo(models.user) + } + return log +} diff --git a/webapp/src/components/LogModule.vue b/webapp/src/components/LogModule.vue index c78475c..05e9a30 100644 --- a/webapp/src/components/LogModule.vue +++ b/webapp/src/components/LogModule.vue @@ -250,7 +250,7 @@ export default { } if (options.time !== false) { if (result !== '') result += ' ' - result += pad(date.getHours()) + ':' + pad(date.getMinutes() + 1) + result += pad(date.getHours()) + ':' + pad(date.getMinutes()) if (options.seconds !== false) result += ':' + pad(date.getSeconds()) } return result -- cgit v1.2.3-55-g7522