Carpincho/src/gui_web/express.js
Exequiel Aramburu 2d4c7b5f36 save
2025-11-16 19:35:43 -03:00

280 lines
10 KiB
JavaScript

/**
* Este archivo es parte del proyecto EMA Libre.
*
* Contiene el codigo fuente, cuya funcion principal
* es presentar una interfaz interactiva en modo WEB
* iniciando un servidor web minimalista y flexible para Node.js
* denominado express permitiendo iniciar, detener y visualizar el estado
* y los registros de EMA Libre Cliente.
*
* LICENSE: This file is part of EMA Libre.
* EMA Libre is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EMA Libre is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EMA Libre. If not, see <http://www.gnu.org/licenses/>.
*
* @copyright Copyright (c) 2019 GUGLER (http://www.gugler.com.ar)
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL License
* @version 3.0
* @link http://www.gugler.com.ar
* @since File available since Release 3.0
*/
// Librerias o Modulos
const express = require('express');
const fsconf = require('fs');
const EMA = require('../core/ema.js'); // Core de EMA.
const PORT = process.env.PORT || 8080; // Puerto por defecto.
const os = require('os');
var app = express();
var server;
// API REST
app.get('/salir', function (req, res)
{
server.close();
res.json('');
//res.sendStatus(200)
});
app.get('/plataforma', function (req, res)
{
const pid = process.pid;
const ppid = process.ppid;
const plataforma = process.platform;
const arquitectura = process.arch;
const version_node = process.version;
res.json([pid,ppid,plataforma,arquitectura,version_node]);
});
app.get('/configGeneralEMA', function (req, res)
{
var configGeneralEMA = null;
configGeneralEMA = eval(fsconf.readFileSync('conf/ConfiguracionGeneral.js')+'');
res.json(configGeneralEMA);
});
app.get('/configGlobalEMA', function (req, res)
{
var configGlobalEMA = null;
configGlobalEMA = eval(fsconf.readFileSync('conf/ConfiguracionGlobal.js')+'');
res.json(configGlobalEMA);
});
app.get('/tamanioArchivos', function (req, res)
{
// Se calcula la Cantidad y tamaño de los Tanques y Debug
if (fsconf.existsSync("logs/registro_diario.log"))
{var estadoarchivoTD = fsconf.statSync("logs/registro_diario.log");
var TamanioenMegaTD = (estadoarchivoTD.size)/ 1000000.0;
}else{var TamanioenMegaTD = 'No Existe';}
if (fsconf.existsSync("logs/TanquePendientes.log"))
{var estadoarchivoTP = fsconf.statSync("logs/TanquePendientes.log");
var TamanioenMegaTP = (estadoarchivoTP.size)/ 1000000.0;
}else{var estadoarchivoTP = 'No Existe';}
if (fsconf.existsSync("logs/debug.log"))
{var estadoarchivoD = fsconf.statSync("logs/debug.log");
var TamanioenMegaD = (estadoarchivoD.size)/ 1000000.0;
}else{var TamanioenMegaD = 'No Existe';}
res.json([TamanioenMegaTD.toFixed(2),TamanioenMegaTP.toFixed(2),TamanioenMegaD.toFixed(2)])
});
// EMA_ESTADO si es [true,''] esta encendida, si no [false,'Motivo del error']
app.get('/EMA_Estado', (req, res) => res.json(EMA.Estado()));
app.get('/EMA_EstadoUSB', function (req, res) {
EMA.EstadoUSB(function(EstadoUSB)
{
res.json(EstadoUSB);
});
});
app.get('/RepeticionesConError', function (req, res) {res.json(EMA.RepeticionesConError());});
app.get('/TiempoActualRecolector', function (req, res) {res.json(EMA.TiempoActualRecolector());});
app.get('/Visor', function (req, res) {
var cantreg = 1;
EMA.Visor(cantreg, function (error, datos) {
if (error != null) {
res.json([error,datos]);
}else{
res.json([null,datos]);
}
});
});
app.get('/IncrementarRepeticionesConError', function (req, res) {
EMA.Configuracion.RepeticionesConError += 1; // Reinicio el contador de errores al iniciar el servidor web
res.json('');
});
app.get('/UltimoPublicado', function (req, res) {res.json(EMA.UltimoPublicado());});
app.get('/UltimoRegistro', function (req, res) {res.json(EMA.UltimoRegistro());});
app.get('/HayPendientes', function (req, res) {res.json(EMA.HayPendientes());});
app.get('/EstadoSensores', function (req, res) {res.json(EMA.EstadoSensores());});
app.get('/iniciar', function (req, res) {EMA.Conectar();res.json('ok'); });
app.get('/detener', function (req, res) {EMA.Detener(); ;res.json('ok'); });
app.get('/purgarDebug', function (req, res)
{
fsconf.writeFile('logs/debug.log', '',{encoding: 'utf8', autoClose: true}, function(err)
{
EMA.RegistrarLog("1|PURGADO|Archivo de Debug");
if (err) { EMA.RegistrarLog('0|ERROR|Depurando archivo registro de logs :' + err); }
});
res.json('ok');
});
app.get('/purgarPendiente', function (req, res)
{
fsconf.writeFile('logs/TanquePendientes.log', JSON.stringify([], null, 4),{encoding: 'utf8', autoClose: true}, function(err)
{
EMA.RegistrarLog("1|PURGADO|Archivo de Pendientes");
if (err) { EMA.RegistrarLog('0|ERROR|Depurando archivo registro de logs :' + err); }
});
res.json('ok');
});
app.get('/GuardarConf/:configuracion_nueva', function (req, res)
{
var configuracion_nueva = '// Configuraciones generales de EMA RECOLECTOR\n\n' + req.params.configuracion_nueva;
fsconf.writeFile('./conf/ConfiguracionGeneral.js', configuracion_nueva, function(err) {
if( err ){
EMA.RegistrarLog("0|CORE|Upps, existió un problema intentando almacenar la configuración.");
}
else{
EMA.Reconfigurar();
EMA.RegistrarLog("0|CORE|Se almaceno correctamente la configuración");
}
});
res.json('ok');
});
app.get('/VerHistorico', function (req, res)
{
var Archivo = fsconf.readFileSync('./logs/registro_diario.log', {encoding: 'utf8', autoClose: true});
res.json(Archivo);
});
app.get('/verLogs', function (req, res)
{
var Archivo = fsconf.readFileSync('./logs/debug.log', {encoding: 'utf8', autoClose: true});
res.json(Archivo);
})
app.get('/interfaces', (req, res) => {
const interfaces = os.networkInterfaces();
res.json(interfaces);
});
app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); next();});
app.use(express.static('gui_web'));
// Bootstrap 4 y librerías necesarias
// CSS
app.use('/css', express.static(__dirname + '/../node_modules/bootstrap/dist/css'));
app.use('/css', express.static(__dirname + '/../node_modules/datatables/media/css'));
app.use('/css', express.static(__dirname + '/../node_modules/nprogress'));
app.use('/css', express.static(__dirname + '/../node_modules/bootstrap-select/dist/css'));
app.use('/css', express.static(__dirname + '/../gui_common/css'));
// IMG
app.use('/images', express.static(__dirname + '/../node_modules/datatables/media/images'));
app.use('/gui_common/iconos', express.static(__dirname + '/../gui_common/iconos'));
app.use('/gui_common/img', express.static(__dirname + '/../gui_common/img'));
// JS
app.use('/js', express.static(__dirname + '/../node_modules/jquery/dist'));
app.use('/js', express.static(__dirname + '/../node_modules/popper.js/dist/umd'));
app.use('/js', express.static(__dirname + '/../node_modules/bootstrap/dist/js'));
app.use('/js', express.static(__dirname + '/../node_modules/bootstrap-select/dist/js'));
app.use('/js', express.static(__dirname + '/../node_modules/datatables/media/js'));
app.use('/js', express.static(__dirname + '/../node_modules/notify-js-lib/dist'));
app.use('/js', express.static(__dirname + '/../node_modules/nprogress'));
app.use('/js', express.static(__dirname + '/../node_modules/datatables-buttons/js'));
app.use('/js', express.static(__dirname + '/../gui_common/libs/RGraph'));
app.use('/controlador', express.static(__dirname + '/../gui_common/controlador'));
app.get('/', function (req, res) {res.sendFile(__dirname + "/index.html");});
// Se levanta el puerto
function EncenderServidoreIniciar() {
// Se espera 5 segundo y se inicia el recolector en modo web
server = app.listen(PORT, () => {
// Obtener todas las interfaces de red
const interfaces = os.networkInterfaces();
console.log("\nServidor disponible en las siguientes direcciones:");
// Recorrer todas las interfaces e IPs
for (const interfaceName in interfaces) {
interfaces[interfaceName].forEach((interface) => {
// Mostrar solo IPv4 y omitir direcciones internas
if (interface.family === 'IPv4') {
console.log(`http://${interface.address}:${PORT}`);
}
});
}
});
setTimeout(function(){console.log("Se inicio el recolector automaticamente.");EMA.Conectar();}, 5000);
}
function EncenderServidor() {
// Se inicia el servidor solamente
server = app.listen(PORT, () => {
// Obtener todas las interfaces de red
const interfaces = os.networkInterfaces();
console.log("\nServidor disponible en las siguientes direcciones:");
// Recorrer todas las interfaces e IPs
for (const interfaceName in interfaces) {
interfaces[interfaceName].forEach((interface) => {
// Mostrar solo IPv4 y omitir direcciones internas
if (interface.family === 'IPv4') {
console.log(`http://${interface.address}:${PORT}`);
}
});
}
});
// Se consulta si esta activado el iniciar automaticamente y si es asi, se prende el recolector
var configGeneralEMA = null;
configGeneralEMA = eval(fsconf.readFileSync('conf/ConfiguracionGeneral.js')+'');
IniciarAutomaticamente = configGeneralEMA.ConfGeneral.inicio_automatico;
console.log("");
if(IniciarAutomaticamente) {
console.log("Configuración de Inicio: "+ IniciarAutomaticamente + " --> Se esta iniciando el recolector automaticamente en 5 segundos...");
setTimeout(function(){EMA.Conectar();}, 5000);
} else {
console.log("Configuración de Inicio: "+ IniciarAutomaticamente);
}
}
function DetenerServidor() {server.close();}
var parametros = process.argv; // Se lee el parametro
if (parametros.indexOf('encender') === -1){}else { EncenderServidoreIniciar();}
if (parametros.indexOf('iniciar') === -1){}else { EncenderServidor();}
if (parametros.indexOf('detener') === -1){}else { DetenerServidor();}