package bosdk;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import com.crystaldecisions.sdk.framework.CrystalEnterprise;
import com.crystaldecisions.sdk.framework.IEnterpriseSession;
import com.crystaldecisions.sdk.framework.ISessionMgr;
import com.crystaldecisions.sdk.occa.infostore.IInfoObjects;
import com.crystaldecisions.sdk.occa.infostore.IInfoStore;
import com.crystaldecisions.sdk.plugin.desktop.server.ExpectedRunState;
import com.crystaldecisions.sdk.plugin.desktop.server.IServer;
import com.crystaldecisions.sdk.plugin.desktop.server.ServerState;
public class ServerStatus {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
// Process the input parameter
Map<String, String> m_args = null;
if (args.length > 0) {
m_args = new HashMap();
parseArgs(args, m_args);
} else {
System.err.println(
"Arguments not passed. Usage:-cms <cms> -username <username> -password <password> -mode <modeid> and -authentication <authentication> Note: authentication argument is optional");
System.exit(0);
}
String cms = (String) m_args.get("cms");
String username = (String) m_args.get("username");
String password = (String) m_args.get("password");
String modeid = (String) m_args.get("mode");
if ((username == null) || (password == null) || (cms == null) || (modeid == null) || (username.length() == 0)
|| (password.length() == 0) || (cms.length() == 0) || (modeid.length() == 0)) {
System.err.println(
"Arguments not passed. Usage:-cms <cms> -username <username> -password <password> -mode <modeid> and -authentication <authentication> Note: authentication argument is optional");
System.exit(0);
}
String authentication = (String) m_args.get("authentication");
if ((authentication == null) || (authentication.length() <= 0)) {
authentication = "secEnterprise";
}
if (modeid.equals("0"))
{
getServerStatus(username, password, cms, authentication);
}
else if (modeid.equals("1"))
{
changeServerStatus(username, password, cms, authentication);
}
else if (modeid.equals("2"))
{
rollbackServerStatus(username, password, cms, authentication);
}
else
{
System.err.println(
"Mode is incorrect. Expect value is 0 for list server status, 1 for change server status, 2 for revert to the original status");
System.exit(0);
}
}
// list current server status
private static void getServerStatus(String username, String password, String cms, String authentication)
{
try
{
IEnterpriseSession enterpriseSession = null;
ISessionMgr enterpriseSessionMgr;
// Login and get the server infoobject
enterpriseSessionMgr = CrystalEnterprise.getSessionMgr();
enterpriseSession = enterpriseSessionMgr.logon(username, password, cms, authentication);
IInfoStore infostore = (IInfoStore) enterpriseSession.getService("InfoStore");
String serverQuery = "select * from CI_SYSTEMOBJECTS where SI_KIND='server'";
IInfoObjects servers = infostore.query(serverQuery);
for (int i = 0; i < servers.size(); i++)
{
IServer server = (IServer) infostore.query(serverQuery).get(i);
// Get the server status
if (server.getServerKind().equals("aps") || server.getServerKind().equals("fileserver"))
{
System.out.println("Server: " + server.getTitle() + ", Autostart: " + server.getAutoBoot() + ", IsCMSorFRS: True.");
}
else
{
System.out.println("Server: " + server.getTitle() + ", Autostart: " + server.getAutoBoot() + ", IsCMSorFRS: False.");
}
}
enterpriseSession.logoff();
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
// change server status to make other servers (expect CMS and FRS) stopped and not auto-start with SIA
private static void changeServerStatus(String username, String password, String cms, String authentication)
{
try
{
File changelog = new File("changelog.txt");
if (changelog.exists())
{
System.err.println(
"Changelog already exists. You cannot do the operation now.");
System.exit(0);
}
IEnterpriseSession enterpriseSession = null;
ISessionMgr enterpriseSessionMgr;
// Login and get the server infoobject
enterpriseSessionMgr = CrystalEnterprise.getSessionMgr();
enterpriseSession = enterpriseSessionMgr.logon(username, password, cms, authentication);
IInfoStore infostore = (IInfoStore) enterpriseSession.getService("InfoStore");
String serverQuery = "select * from CI_SYSTEMOBJECTS where SI_KIND='server'";
IInfoObjects servers = infostore.query(serverQuery);
// create changelog.txt file
// log format is 3 columns, split by comma
// first column is server's SI_ID
// second column: 1 means server is auto-start with SIA, otherwise it is blank
// third column: RUNNING means server is not stopped status, otherwise it is blank
changelog.createNewFile();
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(changelog), "UTF-8");
for (int i = 0; i < servers.size(); i++)
{
IServer server = (IServer) infostore.query(serverQuery).get(i);
// For servers which is not CMS or FRS, stop them and change to not auto-start
if ((server.getServerKind().equals("aps") || server.getServerKind().equals("fileserver")) != true)
{
if (server.getAutoBoot() == false && server.getState() == ServerState.STOPPED)
{
// no change is needed
System.out.println("Server: " + server.getTitle() + ", ID: " + server.getID() + ": no change is required.");
}
else if (server.getAutoBoot() == false)
{
// save the current status to log file
writer.write(server.getID() + ",,RUNNING\r\n");
// change server as Stopped
server.setExpectedRunState(ExpectedRunState.STOPPED);
server.save();
System.out.println("Server: " + server.getTitle() + ", ID: " + server.getID() + ": server is stopped.");
}
else if (server.getState() == ServerState.STOPPED)
{
// save the current status to log file
writer.write(server.getID() + ",1,\r\n");
// change server as not auto-start
server.setAutoBoot(false);
server.save();
System.out.println("Server: " + server.getTitle() + ", ID: " + server.getID() + ": server is set as not auto-start with SIA.");
}
else
{
// save the current status to log file
writer.write(server.getID() + ",1," + server.getState().toString() + "\r\n");
// change server as Stopped and not auto-start
server.setAutoBoot(false);
server.setExpectedRunState(ExpectedRunState.STOPPED);
server.save();
System.out.println("Server: " + server.getTitle() + ", ID: " + server.getID() + ": server is stopped and set as not auto-start with SIA.");
}
}
}
writer.close();
enterpriseSession.logoff();
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
// revert changes
private static void rollbackServerStatus(String username, String password, String cms, String authentication)
{
try
{
File changelog = new File("changelog.txt");
if (changelog.exists() == false)
{
System.err.println(
"Changelog didn't exists. You cannot do the operation now.");
System.exit(0);
}
IEnterpriseSession enterpriseSession = null;
ISessionMgr enterpriseSessionMgr;
// Login and get the server infoobject
enterpriseSessionMgr = CrystalEnterprise.getSessionMgr();
enterpriseSession = enterpriseSessionMgr.logon(username, password, cms, authentication);
IInfoStore infostore = (IInfoStore) enterpriseSession.getService("InfoStore");
String serverQuery = "select * from CI_SYSTEMOBJECTS where SI_KIND='server'";
IInfoObjects servers = infostore.query(serverQuery);
InputStreamReader reader = new InputStreamReader(new FileInputStream(changelog), "UTF-8");
BufferedReader br = new BufferedReader(reader);
ArrayList<String[]> changelist = new ArrayList<String[]>();
String line = "";
while((line=br.readLine())!= null)
{
String[] tmp = line.split(",");
changelist.add(tmp);
}
br.close();
reader.close();
for (int i = 0; i < servers.size(); i++)
{
IServer server = (IServer) infostore.query(serverQuery).get(i);
// For servers which is not CMS or FRS, stop them and change to not auto-start
if ((server.getServerKind().equals("aps") || server.getServerKind().equals("fileserver")) != true)
{
for (int j = 0; j < changelist.size(); j++)
{
if (changelist.get(j)[0].equals(String.valueOf(server.getID())))
{
if (changelist.get(j)[1].equals("1") == true)
{
// need to rollback as auto-start
server.setAutoBoot(true);
System.out.println("Server: " + server.getTitle() + ", ID: " + server.getID() + ": change back as auto-start with SIA.");
}
if (changelist.get(j)[2] != null && changelist.get(j)[2].equals("") == false)
{
// need to rollback as Running
server.setExpectedRunState(ExpectedRunState.RUNNING);
System.out.println("Server: " + server.getTitle() + ", ID: " + server.getID() + ": change back as Running.");
}
server.save();
break;
}
}
}
}
changelog.delete();
enterpriseSession.logoff();
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
// process input parameters
private static void parseArgs(String[] args, Map<String, String> m_args) {
for (int i = 0; i < args.length; i++) {
if (args[i].startsWith("-")) {
String arg = trimArg(args[i]);
if (arg.length() != 0) {
i++;
String value = "";
if (i < args.length) {
value = args[i];
if (value.startsWith("-")) {
value = "";
i--;
}
}
m_args.put(arg, value);
}
}
}
}
private static String trimArg(String arg) {
if (arg == null) {
return arg;
}
int i = 0;
for (i = 0; i < arg.length(); i++) {
if (arg.charAt(i) != '-') {
break;
}
}
String trimmedArg = arg.substring(i);
return trimmedArg;
}
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
13 | |
10 | |
10 | |
9 | |
7 | |
6 | |
5 | |
5 | |
5 | |
4 |