/* * 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_rascontrol_help.hh * * MODULE: rasmgr * CLASS: RasControl * * PURPOSE: * Decodes, verifies and executes the help commands * * COMMENTS: * Logicaly it's part of rasmgr_rascontrol.cc, but compilation unit was split * */ // this file is a temporary file, used to keep rasmgr_rascontrol things as long as we check each one // here are the unchecked things!! #include "debug.hh" #include "rasmgr_rascontrol.hh" void RasControl::helpCommand() { const char *what = argc==1 ? RASMGRCMD_HELP:token[1].take(); if (strcasecmp(what,RASMGRCMD_LIST)==0) listHelp(); else if(strcasecmp(what,RASMGRCMD_DEFINE )==0) defineHelp(); else if(strcasecmp(what,RASMGRCMD_REMOVE)==0) removeHelp(); else if(strcasecmp(what,RASMGRCMD_CHANGE)==0) changeHelp(); else if(strcasecmp(what,RASMGRCMD_UP)==0) upHelp(); else if(strcasecmp(what,RASMGRCMD_DOWN)==0) downHelp(); else if(strcasecmp(what,RASMGRCMD_SAVE)==0) saveHelp(); else if(strcasecmp(what,RASMGRCMD_CHECK)==0) checkHelp(); else if(strcasecmp(what,RASMGRCMD_EXIT)==0) exitHelp(); else if(strcasecmp(what,RASMGRCMD_QUIT)==0) exitHelp(); else if(strcasecmp(what,RASMGRCMD_BYE)==0) exitHelp(); else helpHelp(); // no help for version and licence - they have no further params } void RasControl::helpHelp() { sprintf(answBuffer,"Help for rascontrol command language\r\n" "rasdaman uses the following terms:\r\n" " host (server host) - a computer running a RasManager (rasmgr), with or without currently active servers\r\n" " srv (server) - the rasdaman server (rasserver)\r\n" " dbh (data base host) - a computer running the database software\r\n" " db (database) - the rasdaman database, hosted by the underlying database instance\r\n" " user - a person registered by rasdaman through user name and password\r\n" "\r\nThe rascontrol utility allows to configure and do run-time administration work for the rasdaman system\r\n" "Commands:\r\n" " >help ...this help\r\n" " >exit ...exit rascontrol\r\n" " >list ...list information about the current status of the system\r\n" " >up ...start servers\r\n" " >down ...stop servers and rasmanagers\r\n" " >define ...define a new object\r\n" " >remove ...remove an object\r\n" " >change ...change parameters of objects\r\n" " >save ...make changes permanent\r\n" " >check ...checks the current status of a slave rasmgr\r\n" "Type 'help command' to get specific information about command\r\n" ); } void RasControl::listHelp() { checkPermission(admR_info); sprintf(answBuffer," The list command:\r\n" "list srv [ s | -host h | -all ] [-p] \r\n" " - list information about 'server s' or 'all servers on host h' or 'all defined servers' (default)\r\n" " '-p' prints configuration information; default: runtime status information\r\n" "list host\r\n" " - list information about server hosts\r\n" "list dbh\r\n" " - list information about database hosts\r\n" "list db [ d | -dbh h | -all ] \r\n" " - list information about 'database s' or all 'databases on database host h' or 'all defined databases'\r\n" "list user [ -rights]\r\n" " - list the defined users\r\n" " '-rights' additionally lists each user's rights\r\n" "list [ license | licencce ]\r\n" " - lists license information\r\n" "list version\r\n" " - list version information" ); } void RasControl::defineHelp() { sprintf(answBuffer," The define command:\r\n" "define dbh 'dbhname' -connect 'connectstring'\r\n" " - define database host with symbolic name 'dbhname'\r\n" " 'connectstring' is the string used to connect a client to the underlying database instance\r\n" " (example: user/passwd@hostaddress)\r\n" "define db 'dbname' -dbh 'dbhname'\r\n" " - define database 'dbname' on database host 'dbhname'\r\n" " ('dbname' is not a symbolic name, it is the real name of the rasdaman database)\r\n" "define host 'hostname' -net 'netaddress' [-port 'portnumber']\r\n" " - define server host with symbolic name 'hostname', located at address 'netaddress:portnumber'\r\n" " ('portnumber' defaults to 7001)\r\n" "define srv 'srvname' -host 'hostname' -dbh 'dbhname' -type 'servertype' -port 'portnumber' \r\n" " [-autorestart on|off] [-countdown 'number'] [-xp 'options']\r\n" " - define server with symbolic name 'srvname' on server host 'hostname' connected to database host 'dbhname'\r\n" " 'servertype' can be 'r' (RPC) or 'h' (HTTP) or 'n' (RNP)\r\n" " 'portnumber' is the IP port number for HTTP servers / the 'prognum' for RPC/RNP servers\r\n" " -autorestart (default: on): the server will autorestart after an unexpected termination\r\n" " -countdown 'number' (default: 1000): the server will be restarted after 'number' transactions\r\n" " -xp 'options': extra parameter string 'options' that will be passed to the server at startup \r\n" " (default: \"\", see documentation for valid 'options')\r\n" " this option has to be the last, because anything after it and until end of line is considered to be 'options'\r\n" "define user 'username' [-passwd 'password'] [-rights 'rightsstring']\r\n" " - define user account with symbolic name 'username'\r\n" " 'password' defaults to 'username' (use the raspasswd utility to change)\r\n" " -rights 'rightsstring': the rights granted to the user (default: none; see documentation for valid rights)\r\n" ); } void RasControl::removeHelp() { sprintf(answBuffer," The remove command:\r\n" "remove dbh 'dbhname'\r\n" " - remove database host 'dbhname'\r\n" "remove db 'dbname' -dbh 'dbhname'\r\n" " - remove database 'dbname' from database host 'dbhname'\r\n" " (the database itself is not deleted, only the name is removed from the config tables)\r\n" "remove host 'hostname' \r\n" " - remove server host 'hostname'\r\n" "remove srv 'srvname'\r\n" " - remove server 'srvname'\r\n" "remove user 'username'\r\n" " - remove the user 'username'\r\n" ); } void RasControl::changeHelp() { sprintf(answBuffer," The change command:\r\n" "change dbh 'dbhname' [-name 'newname'] [-connect 'newconnectstring']\r\n" "change db 'dbname' [-name 'newname']\r\n" "change host 'hostname' [-name 'newname'] [-net 'newnetaddress'] [-port 'newportnumber']\r\n" "change srv 'servername' [-name 'newname'][-dbh 'newdbhname'] [-type 'newservertype'] [-port 'newportnumber'] [-autorestart on|off] [-countdown 'newnumber'] [-xp 'newoptions']\r\n" "change user 'username' [-name 'newname'] [-passwd 'newpasswd] [-rights 'rightsstring']\r\n" " - see the help for the define command for option description\r\n" ); } void RasControl::upHelp() { sprintf(answBuffer," The up command:\r\n" "up srv [ s | -host h | -all]\r\n" " - start 'server s' or 'all servers on host h' or 'all defined servers'\r\n" ); } void RasControl::downHelp() {sprintf(answBuffer," The down command:\r\n" "down srv [ s | -host h | -all] [ -force] [-kill]\r\n" " - stops 'server s' or 'all started servers on host h' or 'all started servers'\r\n" " -force: stops the 'server s' without waiting to complete the current transaction (using SIGTERM)\r\n" " -kill: instantly stops the 'server s' (using SIGKILL)\r\n" " (without -force or -kill the server completes the current transaction and exits)\r\n" "down host [ h | -all]\r\n" " - stops the rasmgr on 'host h' or all started rasmgr\r\n" ); } void RasControl::checkHelp() { sprintf(answBuffer," The check command\r\n" "check host 'hostname'\r\n" " - checks the status of the slave rasmgr located on server host 'hostname'\r\n" " (use this command if the master rasmgr started after the slave rasmgr for synchronising them)\r\n" ); } void RasControl::saveHelp() { sprintf(answBuffer," The save command\r\n" "save\r\n" " - saves the current configuration information\r\n" " (upon changes the files will be saved automatically to rescue files next to the config files when exiting rasmgr)\r\n" ); } void RasControl::exitHelp() { sprintf(answBuffer," The exit command\r\n" "exit | quit | bye\r\n" " - finish this rascontrol session\r\n" ); } //### ########### ############# ################ ############## /* obsolete in v1.1, but who knows, in future void RasControl::disconnectCommand() { const char *what = argc==1 ? RASMGRCMD_HELP:token[1].take(); if (strcasecmp(what,"srv")==0) disconnectRasServerFromDBH(); else if(strcasecmp(what,"db")==0) disconnectDatabaseFromDBH(); else if(strcasecmp(what,RASMGRCMD_HELP)==0) disconnectHelp(); else errorInCommand("Wrong DISCONNECT command"); } void RasControl::disconnectRasServerFromDBH() { CHECK(admR_config); const char *serverName=getValueOf("srv"); if(!serverName) { errorInCommand("Server name missing."); return; } RasServer &r=rasManager[serverName]; if(!r.isValid()) { errorInCommand("Invalid server name."); return; } if(r.isUp()) { errorInCommand("Cannot disconnet a running server."); return; } const char *dbHost=r.getDBHostName(); if(strcasecmp(dbHost,"noDBHost!")!=0) { sprintf(answBuffer,"Server %s isn't connected to any database host",serverName); return; } if(r.disconnectFromDBHost()) { sprintf(answBuffer,"Disconnecting server %s from database host %s",serverName,dbHost); } errorInCommand("Internal error during disconnect."); } void RasControl::disconnectDatabaseFromDBH() { CHECK(admR_config); const char *dbName=getValueOf("db"); if(!dbName) { errorInCommand("Database name missing."); return; } const char *dbHost=getValueOf("-dbh"); if(!dbHost) { errorInCommand("Database host name missing."); return; } Database &r=dbManager[dbName]; DatabaseHost &d=dbHostManager[dbHost]; if(!r.isValid()) { errorInCommand("Invalid database name."); return; } if(!d.isValid()) { errorInCommand("Invalid database host name."); return; } if(r.disconnectFromDBHost(dbHost)) { sprintf(answBuffer,"Disconnecting database %s from database host %s",dbName,dbHost); } else { sprintf(answBuffer,"Database %s is not connected to database host %s",dbName,dbHost); } } void RasControl::disconnectHelp() { sprintf(answBuffer,"Disconnect usage: -sorry, help not available yet"); } //-------------------------------------------------------------- void RasControl::connectCommand() { const char *what = argc==1 ? RASMGRCMD_HELP:token[1].take(); if (strcasecmp(what,"srv")==0) connectRasServerToDBH(); else if(strcasecmp(what,"db")==0) connectDatabaseToDBH(); else if(strcasecmp(what,RASMGRCMD_HELP)==0) connectHelp(); else errorInCommand("Wrong CONNECT command"); } void RasControl::connectRasServerToDBH() { CHECK(admR_config); const char *serverName=getValueOf("srv"); if(!serverName) { errorInCommand("Server name missing."); return; } const char *dbHost=getValueOf("-dbh"); if(!dbHost) { errorInCommand("Database host name missing."); return; } RasServer &r=rasManager[serverName]; DatabaseHost &d=dbHostManager[dbHost]; if(!r.isValid()) { errorInCommand("Invalid server name."); return; } if(!d.isValid()) { errorInCommand("Invalid database host name."); return; } // const char *connStr=getValueOf("-conn"); // if(!connStr) connStr="\\"; if(r.connectToDBHost(dbHost))//,connStr)) { sprintf(answBuffer,"Connecting server %s to database host %s",serverName,dbHost); } else { sprintf(answBuffer,"Server %s already connected to database host %s",serverName,dbHost); } } void RasControl::connectDatabaseToDBH() { CHECK(admR_config); const char *dbName=getValueOf("db"); if(!dbName) { errorInCommand("Database name missing."); return; } const char *dbHost=getValueOf("-dbh"); if(!dbHost) { errorInCommand("Database host name missing."); return; } Database &r=dbManager[dbName]; DatabaseHost &d=dbHostManager[dbHost]; if(!r.isValid()) { errorInCommand("Invalid database name."); } if(!d.isValid()) { errorInCommand("Invalid database host name."); } if(r.connectToDBHost(dbHost)) { sprintf(answBuffer,"Connecting database %s to database host %s",dbName,dbHost); } else { sprintf(answBuffer,"Database %s already connected to database host %s",dbName,dbHost); } } void RasControl::connectHelp() { sprintf(answBuffer,"Connect usage: -sorry, help not available yet"); } void RasControl::listRasServersDatabase(const char *dbName) { CHECK(admR_info); if(dbName) { sprintf(answBuffer,"List of servers connected to database %s:",dbName); Database &db = dbManager[dbName]; if(db.isValid()==false) { sprintf(answBuffer+strlen(answBuffer),"\r\nNo such database"); return; } int crnt=0; for(int i=0;i