Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package br.com.mysqlmonitor.monitor; import br.com.mysqlmonitor.dao.ConexaoJDBC; import br.com.mysqlmonitor.dao.GrupoServidorDAO; import br.com.mysqlmonitor.dao.JPAUtil; import br.com.mysqlmonitor.dao.UsuarioDAO; import com.mysqlmonitor.entidade.GrupoServidor; import com.mysqlmonitor.entidade.Servidor; import com.mysqlmonitor.entidade.Usuario; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import javax.persistence.EntityManager; import org.apache.commons.mail.DefaultAuthenticator; import org.apache.commons.mail.HtmlEmail; /** * * @author orlando */ public class Monitor { private final GrupoServidorDAO grupoServidorDAO; private final UsuarioDAO usuarioDAO; private final ConexaoJDBC conexaoJDBC = new ConexaoJDBC(); private StringBuilder logs; { EntityManager em = new JPAUtil().getEntityManager(); grupoServidorDAO = new GrupoServidorDAO(em); usuarioDAO = new UsuarioDAO(em); } public void excutarConferencia(GrupoServidor grupoServidor) { try { logs = new StringBuilder(); Servidor servidorMaster = grupoServidorDAO.findMaster(grupoServidor); List<Servidor> servidoresSlaves = grupoServidorDAO.findSlave(grupoServidor); List<Tabela> tabelasServidorMaster = carregarTabelas(servidorMaster); System.out.println("Iniciando verificao..."); for (Servidor servidorSlave : servidoresSlaves) { List<Tabela> tabelasServidorSlave = carregarTabelas(servidorSlave); comparar(tabelasServidorMaster, tabelasServidorSlave); } enviarEmailDBA(); System.out.println("Fim verificacao..."); } catch (Exception ex) { ex.printStackTrace(); } } private List<Tabela> carregarTabelas(Servidor servidor) { List<Tabela> listaTabela = new ArrayList<Tabela>(); try { StringBuilder query = new StringBuilder("SHOW TABLES"); Connection con = conexaoJDBC.iniciarConexao(servidor); Statement stm = con.createStatement(); ResultSet rs = stm.executeQuery(query.toString()); while (rs.next()) { Tabela tabela = new Tabela( rs.getString("Tables_in_" + servidor.getGrupoServidor().getBancoDados())); tabela.setCampos(carregarCamposTabela(servidor, new Tabela(rs.getString("Tables_in_" + servidor.getGrupoServidor().getBancoDados())))); listaTabela.add(tabela); } stm.close(); con.close(); } catch (SQLException ex) { ex.printStackTrace(); } return listaTabela; } private List<Campo> carregarCamposTabela(Servidor servidor, Tabela tabela) { List<Campo> listaCampo = new ArrayList<Campo>(); try { StringBuilder query = new StringBuilder("DESC ").append(tabela.getNomeTabela()); Connection con = conexaoJDBC.iniciarConexao(servidor); Statement stm = con.createStatement(); ResultSet rs = stm.executeQuery(query.toString()); while (rs.next()) { Campo campo = new Campo(); campo.setNome(rs.getString("Field")); campo.setTipo(rs.getString("Type")); campo.setPermiteNull(rs.getString("Null")); campo.setKey(rs.getString("Key")); campo.setValorDefault(rs.getString("Default")); campo.setExtra(rs.getString("Extra")); listaCampo.add(campo); } stm.close(); con.close(); } catch (SQLException ex) { ex.printStackTrace(); } return listaCampo; } private void comparar(List<Tabela> tabelasServidorMaster, List<Tabela> tabelasServidorSlave) { Tabela master; Tabela slave; Campo campoMaster; Campo campoSlave; System.out.println("Iniciada conferncia..."); if (tabelasServidorMaster.size() != tabelasServidorSlave.size()) { adicionarLog("Qtde Tabelas Diferente: Master(" + tabelasServidorMaster.size() + "), Slave(" + tabelasServidorSlave.size() + ")"); return; } for (int i = 0; i < tabelasServidorMaster.size(); i++) { master = tabelasServidorMaster.get(i); slave = tabelasServidorSlave.get(i); System.out.println("Conferindo tabela: " + master.getNomeTabela()); if (!master.getNomeTabela().equals(slave.getNomeTabela())) { adicionarLog("Tabela com NOME diferente: Master(" + master.getNomeTabela() + "), Slave(" + slave.getNomeTabela() + ")"); } if (master.getCampos().size() != slave.getCampos().size()) { adicionarLog("Qtde Campos na tabela " + master.getNomeTabela() + " so diferente: Master(" + master.getCampos().size() + "), Slave(" + slave.getCampos().size() + ")"); continue; } for (int j = 0; j < master.getCampos().size(); j++) { campoMaster = master.getCampos().get(j); campoSlave = slave.getCampos().get(j); if (!campoMaster.getNome().equals(campoSlave.getNome())) { adicionarLog("Tabela (" + master.getNomeTabela() + ") com CAMPO diferente: Master(" + campoMaster.getNome() + "), Slave(" + campoSlave.getNome() + ")"); } if (!campoMaster.getTipo().equals(campoSlave.getTipo())) { adicionarLog("Tabela (" + master.getNomeTabela() + ") com TIPO/TAMANHO diferente: Master(" + campoMaster.getTipo() + "), Slave(" + campoSlave.getTipo() + ")"); } if (!campoMaster.getPermiteNull().equals(campoSlave.getPermiteNull())) { adicionarLog("Tabela (" + master.getNomeTabela() + ") com PERMITENULL diferente: Master(" + campoMaster.getPermiteNull() + "), Slave(" + campoSlave.getPermiteNull() + ")"); } if (!campoMaster.getKey().equals(campoSlave.getKey())) { adicionarLog("Tabela (" + master.getNomeTabela() + ") com KEY diferente: Master(" + campoMaster.getKey() + "), Slave(" + campoSlave.getKey() + ")"); } if (campoMaster.getValorDefault() != null && !campoMaster.getValorDefault().equals(campoSlave.getValorDefault())) { adicionarLog("Tabela (" + master.getNomeTabela() + ") com VALOR DEFAULT diferente: Master(" + campoMaster.getValorDefault() + "), Slave(" + campoSlave.getValorDefault() + ")"); } if (campoMaster.getExtra() != null && !campoMaster.getExtra().equals(campoSlave.getExtra())) { adicionarLog("Tabela (" + master.getNomeTabela() + ") com EXTRA diferente: Master(" + campoMaster.getExtra() + "), Slave(" + campoSlave.getExtra() + ")"); } } } } private void adicionarLog(String descricao) { try { logs.append(descricao + "<br/>"); Connection con = conexaoJDBC.iniciarConexaoLocal(); PreparedStatement pst = con .prepareStatement("INSERT INTO log_agente (DESCRICAO, DATA) values (?, now())"); pst.setString(1, descricao); pst.execute(); pst.close(); con.close(); } catch (Exception ex) { ex.printStackTrace(); } } private void enviarEmailDBA() { try { if (logs.length() != 0) { System.out.println("Divergencias: " + logs); for (Usuario usuario : usuarioDAO.findAll()) { System.out.println("Enviando email para: " + usuario.getNome()); HtmlEmail email = new HtmlEmail(); email.setHostName("smtp.googlemail.com"); email.setSmtpPort(465); email.setAuthenticator(new DefaultAuthenticator("mysqlmonitorsuporte", "4rgvr6RM")); email.setSSL(true); email.setFrom("mysqlmonitorsuporte@gmail.com"); email.setSubject("Log Mysql Monitor"); email.setHtmlMsg(logs.toString()); email.addTo(usuario.getEmail()); email.send(); } } } catch (Exception ex) { ex.printStackTrace(); } } }