You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
232 lines
7.0 KiB
C++
232 lines
7.0 KiB
C++
/***************************************************************************
|
|
* Copyright (C) gempa GmbH *
|
|
* All rights reserved. *
|
|
* Contact: gempa GmbH (seiscomp-dev@gempa.de) *
|
|
* *
|
|
* GNU Affero General Public License Usage *
|
|
* This file may be used under the terms of the GNU Affero *
|
|
* Public License version 3.0 as published by the Free Software Foundation *
|
|
* and appearing in the file LICENSE included in the packaging of this *
|
|
* file. Please review the following information to ensure the GNU Affero *
|
|
* Public License version 3.0 requirements will be met: *
|
|
* https://www.gnu.org/licenses/agpl-3.0.html. *
|
|
* *
|
|
* Other Usage *
|
|
* Alternatively, this file may be used in accordance with the terms and *
|
|
* conditions contained in a signed written agreement between you and *
|
|
* gempa GmbH. *
|
|
***************************************************************************/
|
|
|
|
|
|
#ifndef SEISCOMP_SEISCOMPINIT_H
|
|
#define SEISCOMP_SEISCOMPINIT_H
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
#include <fstream>
|
|
#include <memory>
|
|
|
|
#include <seiscomp/core.h>
|
|
#include <seiscomp/config/config.h>
|
|
|
|
namespace Seiscomp {
|
|
|
|
class SC_SYSTEM_CORE_API Environment {
|
|
public:
|
|
enum ConfigStage {
|
|
CS_UNDEFINED = -1,
|
|
CS_FIRST = 0,
|
|
CS_DEFAULT_GLOBAL = 0,
|
|
CS_DEFAULT_APP = 1,
|
|
CS_CONFIG_GLOBAL = 2,
|
|
CS_CONFIG_APP = 3,
|
|
CS_USER_GLOBAL = 4,
|
|
CS_USER_APP = 5,
|
|
CS_LAST = 5,
|
|
CS_QUANTITY = 6
|
|
};
|
|
|
|
|
|
// ----------------------------------------------------------------------
|
|
// X'truction
|
|
// ----------------------------------------------------------------------
|
|
private:
|
|
Environment();
|
|
|
|
public:
|
|
~Environment();
|
|
|
|
|
|
// ----------------------------------------------------------------------
|
|
// Public interface
|
|
// ----------------------------------------------------------------------
|
|
public:
|
|
//! Returns an instance of Environment
|
|
static Environment* Instance();
|
|
|
|
//! Returns the home directory path
|
|
const std::string& homeDir() const;
|
|
|
|
//! Returns the seiscomp user configuration path
|
|
const std::string& configDir() const;
|
|
|
|
//! Returns the 2nd level seiscomp configuration path
|
|
const std::string &appConfigDir() const;
|
|
|
|
//! Returns the global seiscomp configuration path
|
|
const std::string &globalConfigDir() const;
|
|
|
|
//! Returns the directory where the application, libraries and
|
|
//! data files have been installed
|
|
const std::string& installDir() const;
|
|
|
|
//! Returns the default shared data directory
|
|
const std::string& shareDir() const;
|
|
|
|
//! Returns the logging directory
|
|
const std::string& logDir() const;
|
|
|
|
//! Returns the path to the users configuration for the given name
|
|
std::string configFileName(const std::string& programname) const;
|
|
|
|
//! Returns the path to the 2nd level configuration for the given name
|
|
std::string appConfigFileName(const std::string& programname) const;
|
|
|
|
//! Returns the path to the 2nd level configuration for the given name
|
|
std::string globalConfigFileName(const std::string& programname) const;
|
|
|
|
//! Returns a name for a logfile in the logging directory
|
|
//! logDir + "/" + name + ".log"
|
|
std::string logFile(const std::string& name) const;
|
|
|
|
std::string absolutePath(const std::string& name) const;
|
|
std::string resolvePath(const std::string& name) const;
|
|
|
|
std::string configFileLocation(const std::string& name, int stage) const;
|
|
|
|
/** Confenience method to fill the symboltable.
|
|
* Following files will be read:
|
|
* SEISCOMP_ROOT/etc/global.cfg
|
|
* SEISCOMP_ROOT/etc/<programname>.cfg
|
|
* SEISCOMP_ROOT/config/global.cfg
|
|
* SEISCOMP_ROOT/config/<programname>.cfg
|
|
* ~/.seiscomp/global.cfg
|
|
* ~/.seiscomp/<programname>.cfg
|
|
*/
|
|
bool initConfig(Config::Config *config, const std::string& name,
|
|
int fromStage = CS_FIRST,
|
|
int toStage = CS_LAST,
|
|
bool standalone = false) const;
|
|
|
|
|
|
// ----------------------------------------------------------------------
|
|
// Private interface
|
|
// ----------------------------------------------------------------------
|
|
private:
|
|
bool init();
|
|
|
|
//! Creates a directory if it is not still existing
|
|
bool createDir( const std::string& dir ) const;
|
|
|
|
|
|
// ----------------------------------------------------------------------
|
|
// Implementation
|
|
// ----------------------------------------------------------------------
|
|
private:
|
|
//! Home directory path
|
|
std::string _homeDir;
|
|
|
|
//! Path of of the seiscomp home directory
|
|
std::string _localConfigDir;
|
|
|
|
//! Seiscomp log directory
|
|
std::string _logDir;
|
|
|
|
//! Seiscomp install directory
|
|
std::string _installDir;
|
|
|
|
//! Seiscomp plugin directory
|
|
std::string _shareDir;
|
|
|
|
//! Suffix of the clients archive file
|
|
std::string _archiveFileName;
|
|
|
|
std::string _appConfigDir;
|
|
std::string _globalConfigDir;
|
|
|
|
static std::unique_ptr<Environment> _instance;
|
|
};
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------
|
|
// Inline methods
|
|
//-------------------------------------------------------------------------
|
|
|
|
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
inline const std::string& Environment::configDir() const {
|
|
return _localConfigDir;
|
|
}
|
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
|
|
|
|
|
|
|
|
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
inline const std::string &Environment::appConfigDir() const {
|
|
return _appConfigDir;
|
|
}
|
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
|
|
|
|
|
|
|
|
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
inline const std::string &Environment::globalConfigDir() const {
|
|
return _globalConfigDir;
|
|
}
|
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
|
|
|
|
|
|
|
|
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
inline const std::string& Environment::homeDir() const {
|
|
return _homeDir;
|
|
}
|
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
|
|
|
|
|
|
|
|
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
inline const std::string& Environment::installDir() const {
|
|
return _installDir;
|
|
}
|
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
|
|
|
|
|
|
|
|
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
inline const std::string& Environment::shareDir() const {
|
|
return _shareDir;
|
|
}
|
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
|
|
|
|
|
|
|
|
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
inline const std::string& Environment::logDir() const {
|
|
return _logDir;
|
|
}
|
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
|
|
|
|
|
|
|
|
} // namespace Seiscomp
|
|
|
|
#endif
|