|
|
|
/*
|
|
|
|
KSysGuard, the KDE System Guard
|
|
|
|
|
|
|
|
Copyright (c) 2001 Tobias Koenig <tokoe@kde.org>
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of version 2 of the GNU General Public
|
|
|
|
License as published by the Free Software Foundation.
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include "Command.h"
|
|
|
|
|
|
|
|
#include "conf.h"
|
|
|
|
|
|
|
|
CONTAINER LogFileList = 0;
|
|
|
|
CONTAINER SensorList = 0;
|
|
|
|
char* RegisterDomain = 0;
|
|
|
|
|
|
|
|
void LogFileList_cleanup( void *ptr );
|
|
|
|
void freeConfigFile( void );
|
|
|
|
|
|
|
|
void LogFileList_cleanup( void *ptr )
|
|
|
|
{
|
|
|
|
if ( ptr ) {
|
|
|
|
if ( ((ConfigLogFile*)ptr)->name )
|
|
|
|
free( ((ConfigLogFile*)ptr)->name );
|
|
|
|
|
|
|
|
free( ptr );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void freeConfigFile( void )
|
|
|
|
{
|
|
|
|
destr_ctnr( LogFileList, LogFileList_cleanup );
|
|
|
|
destr_ctnr( SensorList, free );
|
|
|
|
}
|
|
|
|
|
|
|
|
void parseConfigFile( const char *filename )
|
|
|
|
{
|
|
|
|
FILE* config;
|
|
|
|
char line[ 2048 ];
|
|
|
|
char *begin, *token, *tmp;
|
|
|
|
ConfigLogFile *confLog;
|
|
|
|
|
|
|
|
LogFileList = new_ctnr();
|
|
|
|
SensorList = new_ctnr();
|
|
|
|
|
|
|
|
if ( ( config = fopen( filename, "r" ) ) == NULL ) {
|
|
|
|
log_error( "can't open config file '%s'", filename );
|
|
|
|
|
|
|
|
/**
|
|
|
|
If we can't open a config file we have to add the
|
|
|
|
available sensors manually
|
|
|
|
*/
|
|
|
|
push_ctnr( SensorList, strdup( "ProcessList" ) );
|
|
|
|
push_ctnr( SensorList, strdup( "Memory" ) );
|
|
|
|
push_ctnr( SensorList, strdup( "Stat" ) );
|
|
|
|
push_ctnr( SensorList, strdup( "NetDev" ) );
|
|
|
|
push_ctnr( SensorList, strdup( "NetStat" ) );
|
|
|
|
push_ctnr( SensorList, strdup( "Apm" ) );
|
|
|
|
push_ctnr( SensorList, strdup( "Acpi" ) );
|
|
|
|
push_ctnr( SensorList, strdup( "CpuInfo" ) );
|
|
|
|
push_ctnr( SensorList, strdup( "LoadAvg" ) );
|
|
|
|
push_ctnr( SensorList, strdup( "LmSensors" ) );
|
|
|
|
push_ctnr( SensorList, strdup( "DiskStat" ) );
|
|
|
|
push_ctnr( SensorList, strdup( "LogFile" ) );
|
|
|
|
push_ctnr( SensorList, strdup( "DellLaptop" ) );
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
while ( fgets( line, sizeof( line ), config ) != NULL ) {
|
|
|
|
if ( ( line[ 0 ] == '#') || ( strlen( line ) == 0 ) )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if ( strchr( line, '#' ) )
|
|
|
|
*( strchr( line, '#' ) ) = '\0';
|
|
|
|
|
|
|
|
if ( line[ strlen( line ) - 1 ] == '\n' )
|
|
|
|
line[ strlen( line ) - 1 ] = '\0';
|
|
|
|
|
|
|
|
if ( !strncmp( line, "RegisterDomain",14) && (begin = strchr( line, '=' )) ) RegisterDomain=strdup(begin+1);
|
|
|
|
|
|
|
|
if ( !strncmp( line, "LogFiles", 8 ) && (begin = strchr( line, '=' )) ) {
|
|
|
|
begin++;
|
|
|
|
|
|
|
|
for ( token = strtok( begin, "," ); token; token = strtok( NULL, "," ) ) {
|
|
|
|
if ( ( confLog = (ConfigLogFile *)malloc( sizeof( ConfigLogFile ) ) ) == NULL ) {
|
|
|
|
log_error( "malloc() no free memory avail" );
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
confLog->name = strdup( token );
|
|
|
|
tmp = strchr( confLog->name, ':' );
|
|
|
|
*tmp = '\0';
|
|
|
|
confLog->path = tmp;
|
|
|
|
confLog->path++;
|
|
|
|
|
|
|
|
push_ctnr( LogFileList, confLog );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( !strncmp( line, "Sensors", 7 ) && (begin = strchr( line, '=' )) ) {
|
|
|
|
begin++;
|
|
|
|
|
|
|
|
for ( token = strtok( begin, ","); token; token = strtok( NULL, "," ) )
|
|
|
|
push_ctnr( SensorList, strdup( token ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fclose( config );
|
|
|
|
}
|
|
|
|
|
|
|
|
int sensorAvailable( const char *sensor )
|
|
|
|
{
|
|
|
|
char* name;
|
|
|
|
|
|
|
|
for ( name = first_ctnr( SensorList ); name; name = next_ctnr( SensorList ) ) {
|
|
|
|
if ( !strcmp( name, sensor ) )
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|