Árvore de páginas

1. Visão geral do Datasul Cloud Monitor


O Datasul Cloud Monitor é um plugin desenvolvido em plataforma JAVA, cujo objetivo é monitorar os produtos Datasul, a saber, Datasul 11 e Datasul EMS. Esta ferramenta é utilizada pelo painel de Monitoramento do 3C para extrair informações sobre a situação de seus sistemas em ambiente cloud. O painel de monitoramento do 3C fornece aos clientes funcionalidades como gestão de incidentes, mudanças, billing, controle de uso, dentre outras métricas de operação dos sistemas. Para maiores detalhes sobre o painel de monitoramento do 3C, acesse https://suporte.totvs.com/centrocontrolecloud.

A arquitetura do 3C é composta por:

  • Ferramentas para gestão e inventário dos ambientes cloud (cadastros do 3C)
    • Base de dados do 3C para armazenar informações como indicadores de contrato, clientes, ambientes físicos, thresholds, dentre outras.
  • Ferramenta de monitoramento (Nagios)
    • Scheduler que obtém a situação dos sistemas por meio de plug-ins especializados para cada linha de produto
  • Plugins de monitoramento (Datasul Cloud Monitor)
    • Ferramentas especializadas para cada linha de produto, cujo objetivo é computar métricas de disponibilidade dos serviços, controle de uso e consumo de storage dos sistemas envolvidos.

 

A imagem a seguir apresenta uma macro-visão da arquitetura do 3C para monitoramento de sistemas da linha Datasul.

O plugin Datasul Cloud Monitor permite o monitoramento das seguintes métricas:

Disponibilidade

  • Bancos de dados: indica se os bancos de dados requeridos pelo ERP Datasul estão acessíveis, incluindo bancos mono e multi empresa configurados no Foundation. Os testes de disponibilidade dos bancos de dados abrangem conexões 4GL e SQL.
  • EAI: verifica se os serviços estão acessíveis através de uma conexão HTTP com o Service Provider do EAI.
  • RPW: indica se os servidores RPW configurados no Foundation estão disponíveis. Quando positivo, é verificado também quais os servidores disponíveis que estão em uso, isto é, executando algum pedido no momento.
  • JBoss: verifica se a instância do JBoss está acessível através de uma conexão HTTP.
  • Appserver: verifica se a instância do Appserver está acessível ao invocar uma procedure via API Progress.
  • Login: simula o processo de login de um determinado usuário. Para o Datasul 11, o processo de login envolve a criação de um contexto de usuário no Josso através do ExternalUserAuthentication.

Storage

  • Banco de dados: calcula o volume de bytes utilizados para armazenar o banco de dados, incluindo binários, dados e logs.
  • RPW: calcula o volume de bytes utilizados nos diretórios de spool de todos os servidores RPW.
  • Usuários: calcula o volume de bytes utilizados nos subdiretórios de spool dos usuários.
  • Binários do produto: calcula o volume de bytes utilizados na estrutura de binários (*.r) do produto e específicos (quando houver).
  • JBoss: calcula o volume de bytes utilizados pela instalação do JBoss. Quando houver ambiente de load balance, será calculado o espaço utilizado em todas as instâncias do JBoss.
  • Appserver: calcula o volume de bytes utilizados na instalação do Appserver Progress e aplicações.
  • Web-Enabled: calcula o volume de bytes utilizados na instalação do Web-Enabled.

2. Arquitetura do Datasul Cloud Monitor

 

O Datasul Cloud Monitor foi desenvolvido utilizando a tecnologia RMI, onde seu funcionamento consiste basicamente em dois aplicativos, seguindo uma arquitetura cliente-servidor. A principal motivação para o uso da tecnologia RMI se deve ao fato do plugin do Nagios ser desenvolvido em Java. Neste caso, o plugin do Nagios irá invocar os serviços especializados para a linha Datasul implementados pelo plugin Datasul Cloud Monitor. Em outras palavras, o plugin do Nagios representa a aplicação cliente na arquitetura proposta, ao passo que o plugin Datasul Cloud Monitor é a aplicação servidora.

Com isto, é possível que o plugin do Nagios identifique a disponibilidade dos produtos Datasul 11, EMS 2 e EMS 5, bem como calcular o volume da bytes consumidos por um determinado ambiente cloud.

2.1 Server 

 

Para iniciar o servidor RMI, é necessário abrir o prompt de comando do SO e localizar o diretório que contenha os arquivos descompactados (Exemplo em Windows: cd c:\temp\cloud-monitor). Após isto deve-se executar o comando abaixo:

java -jar datasul-cloud-monitor-server-1.0-SNAPSHOT.jar <host/ip> <porta>

 

Os parâmetros utilizados em <host/ip> e <porta> deverão ser utilizados também no aplicativo Java Client para estabelecer a pesquisa pelo servidor desejado. Ou seja, o plugin do Nagius deverá estabelecer uma conexão RMI conforme os parâmetros informados no servidor.

2.2 Client 

 

Para ter acesso aos métodos publicados no servidor RMI, é necessário implementar o código abaixo no programa Java Client:

Programa RMI Client
StringBuilder rmiStrConnection = new StringBuilder();

RMICloudService cloudService = null;

rmiStrConnection.append("rmi://");
rmiStrConnection.append(<host/ip>);
rmiStrConnection.append(":");
rmiStrConnection.append(<porta>);

rmiStrConnection.append("/DatasulCloudMonitor");

try
{
    cloudService = (RMICloudService) Naming.lookup(rmiStrConnection.toString());

    /*A partir daqui é possível chamar o método desejado
disponível pela variável cloud service*/

} catch (MalformedURLException e1) {
    e1.printStackTrace();
} catch (RemoteException e1) {
    e1.printStackTrace();
} catch (NotBoundException e1) {
    e1.printStackTrace();
}

 

3. Utilização dos métodos para o produto Datasul 11

 

Com base na implementação do item 2.2, para o Datasul 11, entre os seus itens de disponibilidade, é possível verificar a disponibilidade de:

3.1     Disponibilidade de conexão SQL

 

Método publicado no servidor: availabilitySQL

Parâmetros: List<AvailabilityParamsSQL>

A classe AvailabilityParamsSQL é composta pelos atributos:

Atributo

Descrição

Formato

databaseType

Tipo de banco (SQLServer ou OpenEdge)

String

dbName

Nome do banco

String

urlConnection

Conexão URL

String

userName

Nome do usuário

String

passWord

Senha

String

Exemplo de utilização - availabilitySQL
List<AvailabilityDatabaseItem> returnValue = null;

List<AvailabilityParamsSQL> availabilityParamsSQLs = new ArrayList<AvailabilityParamsSQL>();              

AvailabilityParamsSQL availabilityParamsSQL = new AvailabilityParamsSQL();
availabilityParamsSQL.setDatabaseType("OpenEdge");
availabilityParamsSQL.setDbName("emsfnd");
availabilityParamsSQL.setUserName("pub");
availabilityParamsSQL.setPassWord("pub");
availabilityParamsSQL.setUrlConnection("jdbc:datadirect:openedge://totvsjoi-gcad04:5096;databaseName=emsfnd");
availabilityParamsSQLs.add(availabilityParamsSQL);          

returnValue = cloudService.availabilitySQL(availabilityParamsSQLs);
 
for (AvailabilityDatabaseItem item : returnValue) {
    System.out.println(item.getItemName() + "\n");
    System.out.println(item.getStatus() + "\n");
}

Retorno: List<AvailabilityDatabaseItem>  

A classe AvailabilityDatabaseItem é composta pelos atributos:

Atributo

Descrição

Formato

itemName

Nome do Item

String

status

Status do item

String

 

3.2 Disponibilidade do AppServer Datasul


Método publicado no servidor: availabilityAppServer

Parâmetros: AvailabilityParamsDatasul

A classe AvailabilityParamsDatasul é composta pelos atributos:

Atributo

Descrição

Formato

appServerName

Nome do servidor AppServer

String

appServerPort

Porta do AppServer

String

appServerApp

Instância do AppServer

String

Exemplo utilização - availabilityAppServer
AvailabilityParamsDatasul paramsDatasul = new AvailabilityParamsDatasul();
paramsDatasul.setAppServerName("localhost");
paramsDatasul.setAppServerPort("5162");
paramsDatasul.setAppServerApp("cordas8180");

AvailabilityAppServerItem appServerItem = cloudService.availabilityAppServer(paramsDatasul);

System.out.println("<<App Server>>");
System.out.println("Nome: " + appServerItem.getAppServerName());
System.out.println("Porta: " + appServerItem.getAppServerPort());
System.out.println("Instancia: " + appServerItem.getAppServerApp());
System.out.println("Status: " + appServerItem.getAppServerStatus());


Retorno: List< AvailabilityAppServerItem> 

A classe AvailabilityAppServerItem é composta pelos atributos:

Atributo

Descrição

Formato

appServerName

Nome do servidor AppServer

String

appServerPort

Porta do AppServer

String

appServerApp

Instância do AppServer

String

appServerStatus

Status do AppServer

String

3.3 Disponibilidade de bancos

 

Método publicado no servidor: availabilityDatasulDatabases

Parâmetros: AvailabilityParamsDatasulDatabases 

A classe AvailabilityParamsDatasulDatabases é composta pelos atributos: 

Atributo

Descrição

Formato

appServerName

Nome do servidor AppServer

String

appServerPort

Porta do AppServer

String

appServerApp

Instância do AppServer

String

dbNames

Nomes dos bancos

String[]

Exemplo de utilização - availabilityDatasulDatabases
List<AvailabilityDatabaseItem> avalItems = null;


AvailabilityParamsDatasulDatabases paramsDatasulDatabases = new AvailabilityParamsDatasulDatabases();

paramsDatasulDatabases.setAppServerName("localhost");
paramsDatasulDatabases.setAppServerPort("5162");
paramsDatasulDatabases.setAppServerApp("cordas8180");
String[] dbNames = {"emsfnd","emsdev"};
paramsDatasulDatabases.setDbNames(dbNames);

avalItems = cloudService.availabilityDatasulDatabases(paramsDatasulDatabases);

if (avalItems != null) {
	for (AvailabilityDatabaseItem item : avalItems) {
		System.out.println("DatabaseName: " + item.getItemName());
		System.out.println("Status: " + item.getStatus() + "\n");
	}
}


Retorno: List<AvailabilityDatabaseItem> 

A classe AvailabilityDatabaseItem é composta pelos atributos:  

Atributo

Descrição

Formato

itemName

Nome do Item

String

status

Status do item

String

 

3.4 Disponibilidade de servidores RPW Datasul

 

Método publicado no servidor: availabilityRPWDatasul

Parâmetros: AvailabilityParamsDatasul

A classe AvailabilityParamsDatasul é composta pelos atributos:

Atributo

Descrição

Formato

appServerName

Nome do servidor AppServer

String

appServerPort

Porta do AppServer

String

appServerApp

Instância do AppServer

String

Exemplo de utilização - availabilityRPWDatasul
AvailabilityParamsDatasul paramsRPWDatasul = new AvailabilityParamsDatasul();
paramsRPWDatasul.setAppServerName("localhost");
paramsRPWDatasul.setAppServerPort("5162");
paramsRPWDatasul.setAppServerApp("cordas8180");

List<AvailabilityRPWItem> avalRPWList = cloudService.availabilityRPWDatasul(paramsRPWDatasul);
	
for (AvailabilityRPWItem item : avalRPWList) {
	System.out.println("Cod. Servidor RPW: " + item.getServerCode());
	System.out.println("Des. Servidor RPW: " + item.getServerDesc());
	System.out.println("Estado: " + item.getState());
	if (item.getState().equals("ativo")) {
		System.out.println("Executando? " + item.getExecution());
	}
}


Retorno: List<AvailabilityRPWItem> 

A classe AvailabilityRPWItem é composta pelos atributos:

Atributo

Descrição

Formato

serverCode

Código do servidor RPW

String

serverDesc

Descrição do servidor RPW

String

state

Estado do servidor (Ativo, Inativo ou Bloqueado)

String

execution

Indica se está em execução

Boolean

 

3.5 Disponibilidade JBoss

 

Método publicado no servidor: availabilityJboss

Parâmetros: AvailabilityParamsJboss 

A classe AvailabilityParamsJboss é composta pelos atributos: 

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

host

Nome do servidor JBoss

String

port

Porta da instância

String

Exemplo de utilização - availabilityJboss
AvailabilityParamsJboss paramsJboss = new AvailabilityParamsJboss();
paramsJboss.setProtocol("http");
paramsJboss.setHost("cordas");
paramsJboss.setPort("8180");

AvailabilityJbossItem jbossItem = cloudService.availabilityJboss(paramsJboss);

System.out.println("<< JBoss >>");
System.out.println(jbossItem.getHost());
System.out.println(jbossItem.getPort());
System.out.println(jbossItem.getStatus());

 

Retorno: AvailabilityJbossItem 

A classe AvailabilityJbossItem é composta pelos atributos:

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

host

Nome do servidor JBoss

String

port

Porta da instância

String

status

Status do JBoss

String

 

3.6 Disponibilidade do EAI 1

 

Método publicado no servidor: availabilityEAI1

Parâmetros: AvailabilityParamsEAI1 

A classe AvailabilityParamsEAI1 é composta pelos atributos:

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

server

Nome do servidor EAI 1

String

port

Porta

String

axisContextName

Nome do contexto axis

String

Exemplo de utilização - availabilityEAI1
AvailabilityParamsEAI1 paramsEAI1 = new AvailabilityParamsEAI1();
paramsEAI1.setProtocol("http");
paramsEAI1.setServer("bomjesus");
paramsEAI1.setPort("8080");
paramsEAI1.setAxisContextName("axis506gens");
	
AvailabilityEAI1Item eai1Item = cloudService.availabilityEAI1(paramsEAI1);
	
System.out.println("<<EAI 1>>");
System.out.println("Protocolo: " + eai1Item.getProtocol());
System.out.println("Server: " + eai1Item.getServer());
System.out.println("Port: " + eai1Item.getPort());
System.out.println("Nome contexto axis: " + eai1Item.getAxisContextName());
System.out.println("Status: " + eai1Item.getStatus());

 

Retorno: AvailabilityEAI1Item 

A classe AvailabilityEAI1Item é composta pelos atributos:

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

server

Nome do servidor EAI 1

String

port

Porta

String

axisContextName

Nome do contexto axis

String

status

Status do EAI 1

String

 

3.7 Disponibilidade do EAI 2

 

Método publicado no servidor: availabilityEAI2

Parâmetros: AvailabilityParamsEAI2 

A classe AvailabilityParamsEAI2 é composta pelos atributos: 

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

server

Nome do servidor EAI 2

String

port

Porta

String

Exemplo de utilização - availabilityEAI2
AvailabilityParamsEAI2 paramsEAI2 = new AvailabilityParamsEAI2();
paramsEAI2.setProtocol("http");
paramsEAI2.setServer("cordas");
paramsEAI2.setPort("8180");

AvailabilityEAI2Item eai2Item = cloudService.availabilityEAI2(paramsEAI2);

System.out.println("<<EAI 2>>");
System.out.println("Protocolo: " + eai2Item.getProtocol());
System.out.println("Server: " + eai2Item.getServer());
System.out.println("Port: " + eai2Item.getPort());
System.out.println("Status: " + eai2Item.getStatus());

 

Retorno: AvailabilityEAI2Item 

A classe AvailabilityEAI2Item é composta pelos atributos:

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

server

Nome do servidor EAI 2

String

port

Porta

String

status

Status do servidor EAI 2

String

 

3.8 Disponibilidade de login

 

Método publicado no servidor: availabilityLoginDatasul

Parâmetros: AvailabilityParamsLoginDatasul 

A classe AvailabilityParamsLoginDatasul é composta pelos atributos: 

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

server

Nome do servidor JBoss

String

port

Porta da instância

String

userName

Usuário

String

passWord

Senha

String

remoteServerName

Nome do servidor remoto (WebEnabled)

String

remoteServerPort

Porta do servidor remoto (WebEnabled)

int

Exemplo de utilização - availabilityLoginDatasul
AvailabilityParamsLoginDatasul paramsLoginDatasul = new AvailabilityParamsLoginDatasul();
paramsLoginDatasul.setProtocol("http");
paramsLoginDatasul.setHost("cordas");
paramsLoginDatasul.setPort("8180");
paramsLoginDatasul.setUserName("super");
paramsLoginDatasul.setPassWord("super@123");
paramsLoginDatasul.setRemoteServerName("cordas.jv01.local");
paramsLoginDatasul.setRemoteServerPort(39080);

AvailabilityLoginDatasulItem loginDatasulItem = cloudService.availabilityLoginDatasul(paramsLoginDatasul);
	
System.out.println("<<Login Datasul>>");
System.out.println("Protocolo: " + paramsLoginDatasul.getProtocol());
System.out.println("Host: " + paramsLoginDatasul.getHost());
System.out.println("Porta: " + paramsLoginDatasul.getPort());
System.out.println("Usuario: " + paramsLoginDatasul.getUserName());
System.out.println("Senha: " + paramsLoginDatasul.getPassWord());
System.out.println("Servidor remoto (WebEnabled): " + paramsLoginDatasul.getRemoteServerName());
System.out.println("Port do servidor remoto (WebEnabled): " + paramsLoginDatasul.getRemoteServerPort());
System.out.println("Status: " + loginDatasulItem.getStatus());


Retorno: AvailabilityLoginDatasulItem  

A classe AvailabilityLoginDatasulItem é composta pelos atributos:

Atributo

Descrição

Formato

status

Status do login

String

 

3.9 Disponibilidade Datasul

 

Método publicado no servidor: verifyDatasulAvailabilities 

Parâmetros: List<AvailabilityParamsSQL>, AvailabilityParamsDatasulDatabases, AvailabilityParamsEAI1, AvailabilityParamsEAI2, AvailabilityParamsDatasul, AvailabilityParamsJboss, AvailabilityParamsLoginDatasul 

A classe AvailabilityParamsSQL é composta pelos atributos: 

Atributo

Descrição

Formato

databaseType

Tipo de banco (SQLServer ou OpenEdge)

String

dbName

Nome do banco

String

urlConnection

Conexão URL

String

userName

Nome do usuário

String

passWord

Senha

String

A classe AvailabilityParamsDatasulDatabases é composta pelos atributos:

Atributo

Descrição

Formato

appServerName

Nome do servidor AppServer

String

appServerPort

Porta do AppServer

String

appServerApp

Instância do AppServer

String

dbNames

Bancos para consulta

String[]

A classe AvailabilityParamsEAI1 é composta pelos atributos:

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

server

Nome do servidor EAI 1

String

port

Porta

String

axisContextName

Nome do contexto axis

String

A classe AvailabilityParamsEAI2 é composta pelos atributos:

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

server

Nome do servidor EAI 2

String

port

Porta

String

A classe AvailabilityParamsDatasul é composta pelos atributos:

Atributo

Descrição

Formato

appServerName

Nome do servidor AppServer

String

appServerPort

Porta do AppServer

String

appServerApp

Instância do AppServer

String

A classe AvailabilityParamsJboss é composta pelos atributos:

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

host

Nome do servidor JBoss

String

port

Porta da instância

String

A classe AvailabilityParamsLoginDatasul é compostapelos atributos:

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

server

Nome do servidor JBoss

String

port

Porta da instância

String

userName

Usuário

String

passWord

Senha

String

remoteServerName

Nome do servidor remoto (WebEnabled)

String

remoteServerPort

Porta do servidor remoto (WebEnabled)

Int

Exemplo de utilização - verifyDatasulAvailabilities
AvailabilityItem result = null;
/* Montando parametros de disponibilidade SQL */
List<AvailabilityParamsSQL> availabilityParamsSQLs = new ArrayList<AvailabilityParamsSQL>();
AvailabilityParamsSQL paramsSQL = null;
			
paramsSQL = new AvailabilityParamsSQL();
paramsSQL.setDatabaseType("SQLServer");
paramsSQL.setDbName("emsfnd");
paramsSQL.setUserName("datasul1154");
paramsSQL.setPassWord("datasul1154");	
paramsSQL.setUrlConnection("jdbc:sqlserver://moitas:1433;databaseName=emsfnd1154");
availabilityParamsSQLs.add(paramsSQL);

/* Montando parametros de disponibilidade de bancos do Datasul */
AvailabilityParamsDatasulDatabases paramsDatasulDatabases = new AvailabilityParamsDatasulDatabases();
paramsDatasulDatabases.setAppServerName("moitas");
paramsDatasulDatabases.setAppServerPort("5162");
paramsDatasulDatabases.setAppServerApp("cordas8480");
String[] dbNames = {"emsfnd"};
paramsDatasulDatabases.setDbNames(dbNames);

/* Montando parametros de disponibilidade EAI 1 */
AvailabilityParamsEAI1 paramsEAI1 = new AvailabilityParamsEAI1();
paramsEAI1.setProtocol("http");
paramsEAI1.setServer("bomjesus");
paramsEAI1.setPort("8080");
paramsEAI1.setAxisContextName("axis506gens");

/* Montando parametros de disponibilidade EAI 2 */
AvailabilityParamsEAI2 paramsEAI2 = new AvailabilityParamsEAI2();
paramsEAI2.setProtocol("http");
paramsEAI2.setServer("cordas");
paramsEAI2.setPort("8480");

/* Montando parametros de disponibilidade AppServer Datasul */
AvailabilityParamsDatasul paramsDatasul = new AvailabilityParamsDatasul();
paramsDatasul.setAppServerName("moitas");
paramsDatasul.setAppServerPort("5162");
paramsDatasul.setAppServerApp("cordas8480");
	
/* Montando parametros de disponibilidade JBoss */
AvailabilityParamsJboss paramsJboss = new AvailabilityParamsJboss();
paramsJboss.setProtocol("http");
paramsJboss.setHost("cordas");
paramsJboss.setPort("8480");

/* Montando parametros de disponibilidade Login Datasul */
AvailabilityParamsLoginDatasul paramsLoginDatasul = new AvailabilityParamsLoginDatasul();
paramsLoginDatasul.setProtocol("http");
paramsLoginDatasul.setHost("cordas");
paramsLoginDatasul.setPort("8480");
paramsLoginDatasul.setUserName("super");
paramsLoginDatasul.setPassWord("super");
paramsLoginDatasul.setRemoteServerName("cordas.jv01.local");
paramsLoginDatasul.setRemoteServerPort(39080);
	
result = cloudService.verifyDatasulAvailabilities(availabilityParamsSQLs, paramsDatasulDatabases, paramsEAI1, paramsEAI2, paramsDatasul, paramsJboss, paramsLoginDatasul);
if (result != null) {
	System.out.println("Status: " + result.getStatus() + "\n Mensagem: " + result.getMessage());
}

 

Retorno: AvailabilityItem  

A classe AvailabilityItem é composta pelos atributos:

Atributo

Descrição

Formato

status

Status da verificação

String

message

Mensagem

String

 

4. Utilização dos métodos para o produto EMS

 

Com base na implementação do item 2.2, para o EMS, entre os seus itens de disponibilidade, é possível verificar a disponibilidade de:

4.1 Disponibilidade dos bancos

 

Método publicado no servidor: availabilityEMSDatabases

Parâmetros: AvailabilityParamsEMSDatabases 

A classe AvailabilityParamsEMSDatabases é composta pelos atributos: 

Atributo

Descrição

Formato

dlcPath

Diretório do prowin32.exe

String

pfPath

Diretório do arquivo .pf

String

iniPath

Diretório do arquivo .ini

String

dbNames

Nomes dos bancos

String[]

Exemplo utilização - availabilityEMSDatabases
List<AvailabilityDatabaseItem> avalItems = null;


AvailabilityParamsEMSDatabases paramsEMSDatabases = new AvailabilityParamsEMSDatabases();
paramsEMSDatabases.setDlcPath("c:\\dlc102b\\bin\\prowin32.exe");
paramsEMSDatabases.setPfPath("c:\\ambientes\\2.06B\\EMS206BMULTI-PSC101B-SUP\\connect.pf");
paramsEMSDatabases.setIniPath("c:\\ambientes\\2.06B\\EMS206BMULTI-PSC101B-SUP\\progresc.ini");
String[] dbNames = {"mgadm","mguni","movfis"};
paramsEMSDatabases.setDbNames(dbNames);

avalItems = cloudService.availabilityEMSDatabases(paramsEMSDatabases);
	
if (avalItems != null) {
	for (AvailabilityDatabaseItem item : avalItems) {
		System.out.println("DatabaseName: " + item.getItemName());
		System.out.println("Status: " + item.getStatus() + "\n");
	}
}

 

Retorno: List<AvailabilityDatabaseItem>

A classe AvailabilityDatabaseItem é composta pelos atributos:

Atributo

Descrição

Formato

itemName

Nome do Item

String

status

Status do item

String

 

4.2 Disponibilidade de servidores RPW


Método publicado no servidor: availabilityRPWEMS

Parâmetros: AvailabilityParamsRPWEMS 

A classe AvailabilityParamsRPWEMS é composta pelos atributos: 

Atributo

Descrição

Formato

dlcPath

Diretório do prowin32.exe

String

pfPath

Diretório do arquivo .pf

String

iniPath

Diretório do arquivo .ini

String

fndDbName

Nome do banco do Foundation

String

Exemplo utilização - availabilityRPWEMS
AvailabilityParamsRPWEMS paramsRPWEMS = new AvailabilityParamsRPWEMS();
paramsRPWEMS.setDlcPath("c:\\dlc102b\\bin\\prowin32.exe");
paramsRPWEMS.setPfPath("c:\\ambientes\\2.06B\\EMS206BMULTI-PSC101B-SUP\\connect.pf");
paramsRPWEMS.setIniPath("c:\\ambientes\\2.06B\\EMS206BMULTI-PSC101B-SUP\\progresc.ini");
paramsRPWEMS.setFndDbName("mguni");


List<AvailabilityRPWItem> avalRPWList;

avalRPWList = cloudService.availabilityRPWEMS(paramsRPWEMS);

for (AvailabilityRPWItem item : avalRPWList) {
	System.out.println("Cod. Servidor RPW: " + item.getServerCode());
	System.out.println("Des. Servidor RPW: " + item.getServerDesc());
	System.out.println("Estado: " + item.getState());
	if (item.getState().equals("ativo")) {
			String execution = item.getExecution() ? "Sim" : "Não";
			System.out.println("Executando? " + execution);
	}
}

 

Retorno: List<AvailabilityRPWItem> 

A classe AvailabilityRPWItem é composta pelos atributos:

Atributo

Descrição

Formato

serverCode

Código do servidor RPW

String

serverDesc

Descrição do servidor RPW

String

state

Estado do servidor (Ativo, Inativo ou Bloqueado)

String

execution

Indica se está em execução

Boolean

 

4.3 Disponibilidade do EAI 1

 

Método publicado no servidor: availabilityEAI1

Parâmetros: AvailabilityParamsEAI1 

A classe AvailabilityParamsEAI1 é composta pelos atributos: 

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

server

Nome do servidor EAI 1

String

port

Porta

String

axisContextName

Nome do contexto axis

String

Exemplo utilização - availabilyEAI1
AvailabilityParamsEAI1 paramsEAI1 = new AvailabilityParamsEAI1();
paramsEAI1.setProtocol("http");
paramsEAI1.setServer("bomjesus");
paramsEAI1.setPort("8080");
paramsEAI1.setAxisContextName("axis506gens");
	
AvailabilityEAI1Item eai1Item = cloudService.availabilityEAI1(paramsEAI1);

System.out.println("<<EAI 1>>");
System.out.println("Protocolo: " + eai1Item.getProtocol());
System.out.println("Server: " + eai1Item.getServer());
System.out.println("Port: " + eai1Item.getPort());
System.out.println("Nome contexto axis: " + eai1Item.getAxisContextName());
System.out.println("Status: " + eai1Item.getStatus());

 

Retorno: AvailabilityEAI1Item 

A classe AvailabilityEAI1Item é composta pelos atributos:

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

server

Nome do servidor EAI 1

String

port

Porta

String

axisContextName

Nome do contexto axis

String

status

Status do EAI 1

String

 

4.4 Disponibilidade do EAI 2

 

Método publicado no servidor: availabilityEAI2

Parâmetros: AvailabilityParamsEAI2 

A classe AvailabilityParamsEAI2 é composta pelos atributos:

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

server

Nome do servidor EAI 2

String

port

Porta

String

Exemplo utilização - availabilityEAI2
AvailabilityParamsEAI2 paramsEAI2 = new AvailabilityParamsEAI2();
paramsEAI2.setProtocol("http");
paramsEAI2.setServer("cordas");
paramsEAI2.setPort("8180");

AvailabilityEAI2Item eai2Item = cloudService.availabilityEAI2(paramsEAI2);

System.out.println("<<EAI 2>>");
System.out.println("Protocolo: " + eai2Item.getProtocol());
System.out.println("Server: " + eai2Item.getServer());
System.out.println("Port: " + eai2Item.getPort());
System.out.println("Status: " + eai2Item.getStatus());

 

Retorno: AvailabilityEAI2Item 

A classe AvailabilityEAI2Item é compostapelos atributos:

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

server

Nome do servidor EAI 2

String

port

Porta

String

status

Status do servidor EAI 2

String

 

4.5 Disponibilidade de login

 

Método publicado no servidor: availabilityLoginEMS

Parâmetros: AvailabilityParamsLoginEMS 

A classe AvailabilityParamsLoginEMS é composta pelos atributos: 

Atributo

Descrição

Formato

dlcPath

Diretório do prowin32.exe

String

pfPath

Diretório do arquivo .pf

String

iniPath

Diretório do arquivo .ini

String

fndDbName

Nome do banco do Foundation

String

userName

Usuário

String

passWord

Senha

String

Exemplo utilização - availabilityLoginEMS
AvailabilityParamsLoginEMS paramsLoginEMS = new AvailabilityParamsLoginEMS();
paramsLoginEMS.setDlcPath("c:\\dlc102b\\bin\\prowin32.exe");
paramsLoginEMS.setPfPath("c:\\ambientes\\2.06B\\EMS206BMULTI-PSC101B-SUP\\connect.pf");
paramsLoginEMS.setIniPath("c:\\ambientes\\2.06B\\EMS206BMULTI-PSC101B-SUP\\progresc.ini");
paramsLoginEMS.setFndDbName("mguni");
paramsLoginEMS.setUserName("super");
paramsLoginEMS.setPassWord("super");

AvailabilityLoginEMSItem loginEMSItem = cloudService.availabilityLoginEMS(paramsLoginEMS);
 
if (loginEMSItem != null ) {
	System.out.println("<<Login EMS>>");
	System.out.println("Banco FND: " + paramsLoginEMS.getFndDbName());
	System.out.println("Usuario: " + paramsLoginEMS.getUserName());
	System.out.println("Senha: " + paramsLoginEMS.getPassWord());
	System.out.println("Status: " + loginEMSItem.getStatus());
}

 

Retorno: AvailabilityLoginEMSItem  

AvailabilityLoginEMSItem é composta pelos atributos:

Atributo

Descrição

Formato

status

Status do login

String

 

4.6 Disponibilidade EMS

 

Método publicado no servidor: verifyEMSAvailabilities

Parâmetros: AvailabilityParamsEMSDatabases, AvailabilityParamsEAI1, AvailabilityParamsEAI2, AvailabilityParamsRPWEMS, AvailabilityParamsLoginEMS 

A classe AvailabilityParamsEMSDatabases é composta pelos atributos: 

Atributo

Descrição

Formato

dlcPath

Diretório do prowin32.exe

String

pfPath

Diretório do arquivo .pf

String

iniPath

Diretório do arquivo .ini

String

dbNames

Nomes dos bancos

String[]

A classe AvailabilityParamsEAI1 é composta pelos atributos:

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

server

Nome do servidor EAI 1

String

port

Porta

String

axisContextName

Nome do contexto axis

String

A classe AvailabilityParamsEAI2 é composta pelos atributos:

Atributo

Descrição

Formato

protocol

Protocolo (http ou https)

String

server

Nome do servidor EAI 2

String

port

Porta

String

A classe AvailabilityParamsRPWEMS é composta pelos atributos:

Atributo

Descrição

Formato

dlcPath

Diretório do prowin32.exe

String

pfPath

Diretório do arquivo .pf

String

iniPath

Diretório do arquivo .ini

String

fndDbName

Nome do banco do Foundation

String

A classe AvailabilityParamsLoginEMS é composta pelos atributos:

Atributo

Descrição

Formato

dlcPath

Diretório do prowin32.exe

String

pfPath

Diretório do arquivo .pf

String

iniPath

Diretório do arquivo .ini

String

fndDbName

Nome do banco do Foundation

String

userName

Usuário

String

passWord

Senha

String

Exemplo utilização - verifyEMSAvailabilities
AvailabilityItem result = null;

/* Montando parametros de disponibilidade de bancos do EMS */
AvailabilityParamsEMSDatabases paramsEMSDatabases = new AvailabilityParamsEMSDatabases();
paramsEMSDatabases.setDlcPath("c:\\dlc102b\\bin\\prowin32.exe");paramsEMSDatabases.setPfPath("c:\\ambientes\\2.06B\\EMS206BMULTI-PSC101B-SUP\\connect.pf");
paramsEMSDatabases.setIniPath("c:\\ambientes\\2.06B\\EMS206BMULTI-PSC101B-SUP\\progresc.ini");			
String[] dbNames = {"mgadm","mguni","movadm"};
paramsEMSDatabases.setDbNames(dbNames);

/* Montando parametros de disponibilidade EAI 1 */
AvailabilityParamsEAI1 paramsEAI1 = new AvailabilityParamsEAI1();
paramsEAI1.setProtocol("http");
paramsEAI1.setServer("bomjesus");
paramsEAI1.setPort("8080");
paramsEAI1.setAxisContextName("axis506gens");
/* Montando parametros de disponibilidade EAI 2 */
AvailabilityParamsEAI2 paramsEAI2 = new AvailabilityParamsEAI2();
paramsEAI2.setProtocol("http");
paramsEAI2.setServer("cordas");
paramsEAI2.setPort("8180");

/* Montando parametros de disponibilidade RPW EMS */
AvailabilityParamsRPWEMS paramsRPWEMS = new AvailabilityParamsRPWEMS();
paramsRPWEMS.setDlcPath("c:\\dlc102b\\bin\\prowin32.exe");
paramsRPWEMS.setPfPath("c:\\ambientes\\2.06B\\EMS206BMULTI-PSC101B-SUP\\connect.pf");
paramsRPWEMS.setIniPath("c:\\ambientes\\2.06B\\EMS206BMULTI-PSC101B-SUP\\progresc.ini");
paramsRPWEMS.setFndDbName("mguni");

/* Montando parametros de disponibilidade Login EMS */
AvailabilityParamsLoginEMS paramsLoginEMS = new AvailabilityParamsLoginEMS();
paramsLoginEMS.setDlcPath("c:\\dlc102b\\bin\\prowin32.exe");
paramsLoginEMS.setPfPath("c:\\ambientes\\2.06B\\EMS206BMULTI-PSC101B-SUP\\connect.pf");	paramsLoginEMS.setIniPath("c:\\ambientes\\2.06B\\EMS206BMULTI-PSC101B-SUP\\progresc.ini");
paramsLoginEMS.setFndDbName("mguni");
paramsLoginEMS.setUserName("super");
paramsLoginEMS.setPassWord("super");

result = cloudService.verifyEMSAvailabilities(paramsEMSDatabases, paramsEAI1, paramsEAI2, paramsRPWEMS, paramsLoginEMS);

if (result != null) {
	System.out.println("Status: " + result.getStatus() + "\n Mensagem: " + result.getMessage());
}

 

Retorno: AvailabilityItem  

A classe AvailabilityItem é composta pelos atributos:

Atributo

Descrição

Formato

status

Status da verificação

String

message

Mensagem

String


5. Utilização do método de verificação do tamanho de diretórios


Para verificar o tamanho de um diretório ou arquivo utilizado pelo cliente nos servidores do Cloud, foi desenvolvido um método para atender a esta necessidade no Datasul Cloud Monitor (a implementação deste método requer a implementação do item 2.2).

 

Método publicado no servidor: getStorageDirItems 

Parâmetros: List<StorageParamsDirItem>  

A classe StorageParamsDirItem é composta pelos atributos:  

Atributo

Descrição

Formato

dirName

Nome do diretório

String

pathDir

Caminho do diretório ou arquivo

String


Exemplo utilização - getStorageDirItems
List<StorageParamsDirItem> storageList = new ArrayList<StorageParamsDirItem>();

StorageParamsDirItem storageParamItem = new StorageParamsDirItem();
storageParamItem.setDirName("Log AppServer");
storageParamItem.setPathDir("C:\\appserver\\cassino8180\\log");
			
storageList.add(storageParamItem);
			
storageParamItem = new StorageParamsDirItem();
storageParamItem.setDirName("JBoss log");
storageParamItem.setPathDir("c:\\java\\jboss-4.2.3.GA\\server\\cassino-8180\\log");
			
storageList.add(storageParamItem);
			
List<StorageDirItem> result = cloudService.getStorageDirItems(storageList);

System.out.println("<<Diretorios>>");
for (StorageDirItem item : result) {
	System.out.println("---");
	System.out.println("Nome: " + item.getDirName());
	System.out.println("Diretorio: " + item.getPathDir());
	System.out.println("Tamanho: " + item.getSizeDir());
}

 

Retorno: List<StorageDirItem>  

A classe StorageDirItem é composta pelos atributos:  

Atributo

Descrição

Formato

dirName

Nome do diretório

String

pathDir

Caminho do diretório ou arquivo

String

sizeDir

Tamanho do diretório ou arquivo

String


6. Mapeamento da dependência no projeto Java Client

 

Para utilizar o arquivo datasul-cloud-monitor-server-client-1.0-SNAPSHOT.jar (onde contém todas as classes e interfaces para implementação e utilização do serviço) no projeto Java client pode-se utilizar a dependência maven abaixo no arquivo pom.xml:

 

Dependência Maven do Datasul Cloud Monitor
<dependency>
	<groupId>com.totvs.framework</groupId>
	<artifactId>datasul-cloud-monitor-server-client</artifactId>
	<version>1.0-SNAPSHOT</version>
</dependency>

Download do arquivo pom.xml para utilizar como referência no projeto Java Client:

http://tdn.totvs.com.br/download/attachments/140968166/pom.xml

7. Datasul Cloud Monitor Release 1.0-SNAPSHOT

 

O arquivo datasul-cloud-monitor.zip, anexo a este documento, contém o arquivo datasul-cloud-monitor-server-1.0-SNAPSHOT.jar e as bibliotecas necessárias para monitorar os produtos Datasul e EMS.

É necessário seguir os passos citados nos itens 2.1 e 2.2 deste documento para fins de utilização.

Download do arquivo datasul-cloud-monitor.zip:

http://tdn.totvs.com.br/download/attachments/140968166/datasul-cloud-monitor.zip

  • Sem rótulos