⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 monitor.cpp

📁 multiplataform real time Linux 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 + -