📄 monitor.cpp
字号:
/* LiMon-Server| Copyright (C) 2006 Marcelo Busico|| Author: Marcelo Busico marcelobusico@gmail.com|| This program is free software which I release under the GNU General Public| License. You may redistribute and/or modify this program under the terms| of that license as published by the Free Software Foundation; either| version 2 of the License, or (at your option) any later version.|| This program 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. Version 2 is in the| LICENSE.txt file in the top level directory of this distribution.| | To get a copy of the GNU General Puplic License, write to the Free Software| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA*//* Implementacion de Monitor.h */#include "mensajes.h"#include "monitor.h"#include "socket.h"#include "cabecera.h"#include "micro.h"#include "memoria.h"#include "swap.h"#include "uptime.h"#include "temp.h"#include "servers.h"#include "disco.h"#include "fecha.h"#include "hora.h"#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h> #include <sys/un.h>#include <netdb.h>#include <unistd.h>#include <errno.h>#include <stdio.h>//Constructor por defectoMonitorServidor::MonitorServidor(){ sockfd=-1; strcpy(password,"");}//Parametro: Socket File Descriptor - Tipo: Int, password char[32]MonitorServidor::MonitorServidor(int sfd, char* pass){ sockfd=sfd; strcpy(password, pass);}void MonitorServidor::setSockfd(int sfd){ sockfd=sfd;}/** * Esta funcion es llamada una vez establecida la conexion, * espera mensajes desde el cliente * y le envia la respuesta solicitada. * debug = 1: Muesta informacion en pantalla */void MonitorServidor::monitorear(int debug){ if(debug) puts("Monitoreando Servidor..."); int conexionActiva=1; Cabecera cabecera; /* Bucle hasta que cierra la conexion el cliente */ while(conexionActiva) { //Recibe la cabecera del cliente cabecera=recibirCabecera(sockfd); if(debug) puts("Cabecera de Peticion Leida"); //Comprueba la contraseña en la cabecera if(strcmp(cabecera.password,password)!=0) { //No coinciden las contraseñas if(debug) puts("Contraseña incorrecta"); // Se rellena la cabecera cabecera.identificador = IdPasswordIncorrecta; strcpy(cabecera.password,""); // Se envia la notificacion al cliente enviarCabecera(sockfd, cabecera); if(debug) puts("Cabecera de contraseña incorrecta enviada"); return; } if(debug) printf("Identificador leido: %i\n",cabecera.identificador); switch (cabecera.identificador) { /* El cliente pide el estado del Microprocesador */ case IdPedirEstadoMicro: { MensajeDevolverEstadoMicro mensaje; if(debug) puts("El cliente solicito envio de estado del microprocesador"); //Obtiene los datos del sistema EstadoMicroprocesador emicro; mensaje.usoSistema=htonl(emicro.getUsoSistema()); mensaje.usoUsuario=htonl(emicro.getUsoUsuario()); // Se rellena la cabecera cabecera.identificador = IdDevolverEstadoMicro; // Se envía primero la cabecera y luego el mensaje enviarCabecera(sockfd, cabecera); if(debug) puts("Cabecera de estado del microprocesador enviada"); write (sockfd, &mensaje, sizeof(mensaje)); if(debug) puts("Mensaje de estado del microprocesador enviado"); break; } /* El cliente pide el estado de la Memoria Fisica */ case IdPedirEstadoMemoria: { MensajeDevolverEstadoMemoria mensaje; if(debug) puts("El cliente solicito envio de estado de la memoria fisica"); //Obtiene los datos del sistema EstadoMemoria ememo; mensaje.usada=htonl(ememo.getUsada()); mensaje.libre=htonl(ememo.getLibre()); mensaje.buffer=htonl(ememo.getBuffer()); // Se rellena la cabecera cabecera.identificador = IdDevolverEstadoMemoria; // Se envía primero la cabecera y luego el mensaje enviarCabecera(sockfd, cabecera); if(debug) puts("Cabecera de estado de la memoria fisica enviada"); write (sockfd, &mensaje, sizeof(mensaje)); if(debug) puts("Mensaje de estado de la memoria fisica enviado"); break; } /* El cliente pide el estado de la Memoria de Intercambio */ case IdPedirEstadoIntercambio: { MensajeDevolverEstadoIntercambio mensaje; if(debug) puts("El cliente solicito envio de estado de la memoria de intercambio"); //Obtiene los datos del sistema EstadoIntercambio eswap; mensaje.usada=htonl(eswap.getUsada()); mensaje.libre=htonl(eswap.getLibre()); // Se rellena la cabecera cabecera.identificador = IdDevolverEstadoIntercambio; // Se envía primero la cabecera y luego el mensaje enviarCabecera(sockfd, cabecera); if(debug) puts("Cabecera de estado de la memoria de intercambio enviada"); write (sockfd, &mensaje, sizeof(mensaje)); if(debug) puts("Mensaje de estado de la memoria de intercambio enviado"); break; } /* El cliente pide el Tiempo en Servicio */ case IdPedirUpTime: { MensajeDevolverUpTime mensaje; if(debug) puts("El cliente solicito envio del Tiempo en Servicio"); //Obtiene los datos del sistema UpTime ut; mensaje.tiempo=htonl(ut.getTiempo()); //Tiempo en segundos /* Se rellena la cabecera */ cabecera.identificador = IdDevolverUpTime; /* Se envía primero la cabecera y luego el mensaje */ enviarCabecera(sockfd, cabecera); if(debug) puts("Cabecera de Tiempo en Servicio enviada"); write (sockfd, &mensaje, sizeof(mensaje)); if(debug) puts("Mensaje de Tiempo en Servicio enviado"); break; } /* El cliente pide la Temperatura de la PC */ case IdPedirTemperatura: { MensajeDevolverTemperatura mensaje; if(debug) puts("El cliente solicito envio de la Temperatura de la PC"); //Obtiene los datos del sistema Temperatura temp; mensaje.sistema=htonl(temp.getSistema()); //Temperatura en Grados Celsius mensaje.cpu=htonl(temp.getCPU()); //Temperatura en Grados Celsius mensaje.hd=htonl(temp.getHD()); //Temperatura en Grados Celsius /* Se rellena la cabecera */ cabecera.identificador = IdDevolverTemperatura; /* Se envía primero la cabecera y luego el mensaje */ enviarCabecera(sockfd, cabecera); if(debug) puts("Cabecera de Temperatura enviada"); write (sockfd, &mensaje, sizeof(mensaje)); if(debug) puts("Mensaje de Temperatura enviado"); break; } /* El cliente pide el estado de los Servidores */ case IdPedirEstadoServidores: { MensajeDevolverEstadoServidores mensaje; if(debug) puts("El cliente solicito envio del Estado de los Servidores"); //Obtiene los datos del sistema EstadoServidores eserv; mensaje.web=htonl(eserv.getEstadoWeb()); mensaje.correo=htonl(eserv.getEstadoMail()); mensaje.ssh=htonl(eserv.getEstadoSSH()); mensaje.ftp=htonl(eserv.getEstadoFTP()); mensaje.samba=htonl(eserv.getEstadoSamba()); /* Se rellena la cabecera */ cabecera.identificador = IdDevolverEstadoServidores; /* Se envía primero la cabecera y luego el mensaje */ enviarCabecera(sockfd, cabecera); if(debug) puts("Cabecera de Estado Servidores enviada"); write (sockfd, &mensaje, sizeof(mensaje)); if(debug) puts("Mensaje de Estado Servidores enviado"); break; } /* El cliente pide el estado de las Particiones del Disco */ case IdPedirEstadoDisco: { MensajeDevolverEstadoDisco mensaje; if(debug) puts("El cliente solicito envio del Estado de las particiones del disco"); //Obtiene los datos del sistema EstadoDisco edisco; mensaje.raizTotal=htonl(edisco.getRaizTotal()); mensaje.raizUsado=htonl(edisco.getRaizUsado()); mensaje.raizLibre=htonl(edisco.getRaizLibre()); mensaje.homeTotal=htonl(edisco.getHomeTotal()); mensaje.homeUsado=htonl(edisco.getHomeUsado()); mensaje.homeLibre=htonl(edisco.getHomeLibre()); /* Se rellena la cabecera */ cabecera.identificador = IdDevolverEstadoDisco; /* Se envía primero la cabecera y luego el mensaje */ enviarCabecera(sockfd, cabecera); if(debug) puts("Cabecera de Estado Disco enviada"); write (sockfd, &mensaje, sizeof(mensaje)); if(debug) puts("Mensaje de Estado Disco enviado"); break; } /* El cliente pide la Hora del sistema */ case IdPedirHora: { MensajeDevolverHora mensaje; if(debug) puts("El cliente solicito envio de la hora del sistema"); //Obtiene los datos del sistema HoraSistema hora; mensaje.horas=htonl(hora.getHoras()); mensaje.minutos=htonl(hora.getMinutos()); mensaje.segundos=htonl(hora.getSegundos()); /* Se rellena la cabecera */ cabecera.identificador = IdDevolverHora; /* Se envía primero la cabecera y luego el mensaje */ enviarCabecera(sockfd, cabecera); if(debug) puts("Cabecera de Hora del sistema enviada"); write (sockfd, &mensaje, sizeof(mensaje)); if(debug) puts("Mensaje de Hora del sistema enviado"); break; } /* El cliente pide la Fecha del sistema */ case IdPedirFecha: { MensajeDevolverFecha mensaje; if(debug) puts("El cliente solicito envio de la fecha del sistema"); //Obtiene los datos del sistema FechaSistema fecha; mensaje.anio=htonl(fecha.getAnio()); mensaje.mes=htonl(fecha.getMes()); mensaje.dia=htonl(fecha.getDia()); /* Se rellena la cabecera */ cabecera.identificador = IdDevolverFecha; /* Se envía primero la cabecera y luego el mensaje */ enviarCabecera(sockfd, cabecera); if(debug) puts("Cabecera de Fecha del sistema enviada"); write (sockfd, &mensaje, sizeof(mensaje)); if(debug) puts("Mensaje de Fecha del sistema enviado"); break; } /* El cliente pide la desconexion */ case IdDesconexion: { /* Sale del bucle de conexion */ if(debug) puts("El cliente pide el cierre de la conexion"); conexionActiva=0; break; } /* El cliente pide confirmacion de contraseña valida */ case IdConfirmaPassword: { if(debug) puts("El cliente pide confirmar contraseña correcta"); // Se rellena la cabecera cabecera.identificador = IdPasswordCorrecta; strcpy(cabecera.password,""); // Se envia la notificacion al cliente enviarCabecera(sockfd, cabecera); if(debug) puts("Cabecera de contraseña correcta enviada"); break; } default: { conexionActiva=0; } } /* Fin Switch */ } /* Fin while */} /* Fin Funcion monitorear */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -