/*
* This file is part of rasdaman community.
*
* Rasdaman community 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.
*
* Rasdaman community 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 rasdaman community. If not, see .
*
* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
rasdaman GmbH.
*
* For more information please see
* or contact Peter Baumann via .
/
/**
* SOURCE: rasmgr_config.hh
*
* MODULE: rasmgr
* CLASS: Configuration, RasmgrLicense
*
* PURPOSE:
* Config info from commandline, environment and license
*
* COMMENTS:
* none
*
*/
#ifndef RASMGR_CONFIG_HH
#define RASMGR_CONFIG_HH
#include
#include
#include
#include // PATH_MAX
#include "commline/cmlparser.hh"
// default rasmgr listen port polling frequency [secs]
// must be longer than the OS specific time to release TIM_WAIT sockets
const int DEFAULT_POLLING_FREQUENCY = 200;
// #define helps to avoid multiple defs in different .cc files:
#define DEFAULT_POLLING_FREQUENCY_STR "200"
/// host/domain name size (See man gethostname)
#define HOSTNAME_SIZE 255
/**
* \ingroup Rasmgrs
*/
class Configuration
{
public:
Configuration();
bool interpretArguments(int argc, char **argv,char **envp);
bool readConfigFile();
bool saveOrigConfigFile();
bool saveAltConfigFile();
const char *getAltConfigFileName();
const struct tm *getExpirationDate();
const char * getHostName();
const char * getPublicHostName();
int getListenPort();
const char * getMasterName();
int getMasterPort();
int getPollFrequency();
const char * getSlaveName();
bool isTestModus();
bool isDebugSupport();
bool isVerbose();
bool allowMultipleWriteTransactions();
void printStatus();
private:
void printHelp();
char hostName[HOSTNAME_SIZE];
char publicHostName[HOSTNAME_SIZE]; // usually ==hostName, but you might want to publish IP address or hostname.domainname instead
int listenPort;
// name of configuration file
char configFileName[PATH_MAX];
// name of alternate configuration file for rescue save, generated by saveAltConfigFile()
char altConfigFileName[PATH_MAX];
// if slave
char masterName[HOSTNAME_SIZE];
int masterPort;
char slaveName[HOSTNAME_SIZE]; //my name, when I'm slave and no HIGHLANDER
int pollFrequency; // listen port polling frequency in seconds
bool testModus;
bool debugSupport;
bool verbose;
bool slave;
bool saveConfigFile();
bool rtHlTest;
bool allowMultiWT;
//interface program
CommandLineParser &cmlInter;
CommandLineParameter &cmlHelp, &cmlHostName, &cmlPort, &cmlPollFrequ;
CommandLineParameter &cmlMaster, &cmlMasterPort, &cmlName, &cmlQuiet;
#ifdef RMANDEBUG
CommandLineParameter &cmlTest, &cmlDSup, &cmlRandTest, &cmlRth, &cmlMultiWT;
#endif
};
extern Configuration config;
/**
* \ingroup Rasmgrs
*/
class BenchmarkTimer
{
public:
BenchmarkTimer(const char *text);
~BenchmarkTimer();
void result();
private:
int timeval_subtract(timeval *result,timeval *x,timeval *y);
struct timeval start;
struct timeval end;
char* text;
};
#endif