Added: #1436 Missing deployment_configuration.cpp/h files.
parent
17aded8877
commit
a00d451e09
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,255 @@
|
||||
/** \file deployment_configuration.h
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef DEPLOYMENT_CONFIGURATION_H
|
||||
#define DEPLOYMENT_CONFIGURATION_H
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// include
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// nel
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/misc/common.h"
|
||||
#include "nel/misc/sstring.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// namespace DEPCFG
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
namespace DEPCFG
|
||||
{
|
||||
//-----------------------------------------------------------------------------
|
||||
// some handy constants
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#define defaultDeploymentConfigurationFileName "server_park_database.txt"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// some handy typedefs for identifiers, map keys, etc
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
typedef NLMISC::CSString TDomainName;
|
||||
typedef NLMISC::CSString TShardName;
|
||||
typedef NLMISC::CSString THostName;
|
||||
typedef NLMISC::CSString TAppName;
|
||||
|
||||
typedef NLMISC::CVectorSString TDomainNames;
|
||||
typedef NLMISC::CVectorSString TShardNames;
|
||||
typedef NLMISC::CVectorSString THostNames;
|
||||
typedef NLMISC::CVectorSString TAppNames;
|
||||
|
||||
typedef NLMISC::CSString TCmdLine;
|
||||
typedef NLMISC::CSString TCfgFile;
|
||||
typedef NLMISC::CVectorSString TDataPacks;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// struct SDomainDescription
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
struct SDomainDescription
|
||||
{
|
||||
//-------------------------------------------------------------------------
|
||||
// identifying the domain
|
||||
TDomainName DomainName;
|
||||
//-------------------------------------------------------------------------
|
||||
// the set of shards and apps belonging to this domain and their hosts
|
||||
TShardNames Shards;
|
||||
THostNames Hosts;
|
||||
TAppNames Apps;
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// a handy 'clear()' method
|
||||
void clear()
|
||||
{
|
||||
DomainName.clear();
|
||||
Shards.clear();
|
||||
Hosts.clear();
|
||||
Apps.clear();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// struct SShardDescription
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
struct SShardDescription
|
||||
{
|
||||
//-------------------------------------------------------------------------
|
||||
// identifying the shard by name and domain
|
||||
TDomainName DomainName;
|
||||
TShardName ShardName;
|
||||
//-------------------------------------------------------------------------
|
||||
// the set of hosts and apps used by this shard
|
||||
THostNames Hosts;
|
||||
TAppNames Apps;
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// a handy 'clear()' method
|
||||
void clear()
|
||||
{
|
||||
DomainName.clear();
|
||||
ShardName.clear();
|
||||
Hosts.clear();
|
||||
Apps.clear();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// struct SHostDescription
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
struct SHostDescription
|
||||
{
|
||||
//-------------------------------------------------------------------------
|
||||
// identifying the host (machine's network name)
|
||||
THostName HostName;
|
||||
//-------------------------------------------------------------------------
|
||||
// the set of domains that refference this host
|
||||
TDomainNames Domains;
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// a handy 'clear()' method
|
||||
void clear()
|
||||
{
|
||||
HostName.clear();
|
||||
Domains.clear();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// struct SAppDescription
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
struct SAppDescription
|
||||
{
|
||||
//-------------------------------------------------------------------------
|
||||
// identifying the app, the shard it belongs to, machine it runs on, etc
|
||||
TDomainName DomainName;
|
||||
TShardName ShardName;
|
||||
THostName HostName;
|
||||
TAppName AppName;
|
||||
NLMISC::CSString StartOrder;
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// some real data
|
||||
TCmdLine CmdLine; // the command line to execute the app
|
||||
TCfgFile CfgFile; // the cfg file contents for the app
|
||||
TDataPacks DataPacks; // the set of data packs for the app
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// a handy 'clear()' method
|
||||
void clear()
|
||||
{
|
||||
DomainName.clear();
|
||||
ShardName.clear();
|
||||
HostName.clear();
|
||||
AppName.clear();
|
||||
StartOrder.clear();
|
||||
CmdLine.clear();
|
||||
CfgFile.clear();
|
||||
DataPacks.clear();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class CDeploymentConfiguration
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
class CDeploymentConfiguration
|
||||
{
|
||||
public :
|
||||
//-------------------------------------------------------------------------
|
||||
// this is a singleton so we have a getInstance() method
|
||||
// remaining methods are pure virtuals...
|
||||
|
||||
// get hold of the instance of the singleton that derives from CDeploymentConfiguration
|
||||
static CDeploymentConfiguration& getInstance();
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// methods for reading / serialising deployment configuration
|
||||
|
||||
// read the deployment configuration from a specified file
|
||||
//
|
||||
// file format is line base with the following format:
|
||||
// '//'... comment to end of line
|
||||
// 'define' <block_name> // define a new block
|
||||
// 'domain' <domain_name> // flag this block as a domain and give it a name
|
||||
// 'shard' <domain_name> // flag this block as a shard and give it a name
|
||||
// 'use' <block_name> // add a child block to this block
|
||||
// 'name' <block_name> // set the unique name to use for the executables derived from this block
|
||||
// 'cmdLine' <cmd_line> // setup the command line to use for exes derived from this block
|
||||
// 'host' <host_name> // assign the exes derived from this block to a given host
|
||||
// 'cfg' <cfg_line> // add a line to be included in the cfg file of executables derived from this block
|
||||
// 'cfgAfter' <cfg_line> // as above but cfg lines appended at end of cfg file (not at start)
|
||||
// 'data' <data_name> // add dependency on a given data block to exes derived from this block
|
||||
//
|
||||
virtual bool read(const NLMISC::CSString& fileName) =0;
|
||||
|
||||
// write the info blocks out to a file (in no particular order)
|
||||
// the output file can be re-read via the 'read()' method
|
||||
virtual void write(const NLMISC::CSString& fileName) =0;
|
||||
|
||||
// serialise the deployment configuration, for dispatch to / reception from other apps
|
||||
virtual void serial(NLMISC::IStream& stream) =0;
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// read accessors - getting sets of names
|
||||
|
||||
// get the complete set of hosts (machines on which we have apps running)
|
||||
virtual void getHostNames(THostNames& result) const =0;
|
||||
|
||||
// get the complete set of domains
|
||||
virtual void getDomainNames(TDomainNames& result) const =0;
|
||||
|
||||
// get the shards for a given domain
|
||||
virtual void getShardNames(const TDomainName& domainName,TShardNames& result) const =0;
|
||||
|
||||
// get the apps for a given host and domain
|
||||
virtual void getAppNames(const THostName& hostName,const TDomainName& domainName,TAppNames& result) const =0;
|
||||
|
||||
// get the apps for a given host, domain and shard
|
||||
virtual void getAppNames(const THostName& hostName,const TDomainName& domainName,const TShardName& shardName,TAppNames& result) const =0;
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// read accessors - getting info structure for a named object
|
||||
|
||||
// get a named host
|
||||
virtual void getHost(const THostName& hostName,SHostDescription& result) const =0;
|
||||
|
||||
// get a named domains
|
||||
virtual void getDomain(const TDomainName& domainName, SDomainDescription& result) const =0;
|
||||
|
||||
// get a named shard for a given domain
|
||||
virtual void getShard(const TDomainName& domainName,const TShardName& shardName,SShardDescription& result) const =0;
|
||||
|
||||
// get a named app for a given domain
|
||||
virtual void getApp(const TDomainName& domainName,const TAppName& appName,SAppDescription& result) const =0;
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// methods for dumping info to a given log
|
||||
|
||||
// dump raw information (organised by info block, not by domain or host)
|
||||
virtual void dumpInfoBlocks(NLMISC::CLog& log) const =0;
|
||||
|
||||
// dump info organised by domain
|
||||
virtual void dumpDomains(NLMISC::CLog& log) const =0;
|
||||
};
|
||||
|
||||
} // end of namespace
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
#endif
|
Loading…
Reference in New Issue