Java tutorial
/* * Copyright 2014 by SCSK Corporation. * * This file is part of PrimeCloud Controller(TM). * * PrimeCloud Controller(TM) 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 2 of the License, or * (at your option) any later version. * * PrimeCloud Controller(TM) 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 PrimeCloud Controller(TM). If not, see <http://www.gnu.org/licenses/>. */ package jp.primecloud.auto.process.zabbix; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import jp.primecloud.auto.common.constant.PCCConstant; import jp.primecloud.auto.common.status.ZabbixInstanceStatus; import jp.primecloud.auto.config.Config; import jp.primecloud.auto.entity.crud.AwsLoadBalancer; import jp.primecloud.auto.entity.crud.ComponentType; import jp.primecloud.auto.entity.crud.Farm; import jp.primecloud.auto.entity.crud.Image; import jp.primecloud.auto.entity.crud.LoadBalancer; import jp.primecloud.auto.entity.crud.User; import jp.primecloud.auto.exception.AutoException; import jp.primecloud.auto.log.EventLogger; import jp.primecloud.auto.process.ProcessLogger; import jp.primecloud.auto.service.ServiceSupport; import jp.primecloud.auto.util.MessageUtils; import jp.primecloud.auto.zabbix.model.hostgroup.Hostgroup; import jp.primecloud.auto.zabbix.model.proxy.Proxy; import jp.primecloud.auto.zabbix.model.template.Template; /** * <p> * TODO: * </p> * */ public class ElbZabbixHostProcess extends ServiceSupport { protected ZabbixProcessClientFactory zabbixProcessClientFactory; protected EventLogger eventLogger; protected ProcessLogger processLogger; public void startHost(Long loadBalancerNo) { //ELB?????? LoadBalancer loadBalancer = loadBalancerDao.read(loadBalancerNo); AwsLoadBalancer awsLoadbalancer = awsLoadBalancerDao.read(loadBalancerNo); // if (log.isInfoEnabled()) { log.info(MessageUtils.getMessage("IPROCESS-100328", loadBalancerNo, awsLoadbalancer.getName())); } ZabbixProcessClient zabbixProcessClient = zabbixProcessClientFactory.createZabbixProcessClient(); String hostid = awsLoadbalancer.getHostid(); //??? String hostname = getHostName(loadBalancer.getFqdn()); //ZabbixID? String proxyHostid = getProxyHostid(zabbixProcessClient); if (StringUtils.isEmpty(hostid)) { List<Hostgroup> hostgroups = getInitHostgroups(zabbixProcessClient, loadBalancer.getFarmNo()); // ? // ELB?IP?????(DNS??)??IP??NULL hostid = zabbixProcessClient.createHost(hostname, loadBalancer.getFqdn(), hostgroups, true, false, null, proxyHostid); // processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, null, null, "ZabbixRegist", new Object[] { loadBalancer.getFqdn(), hostid }); // ? awsLoadbalancer.setHostid(hostid); awsLoadbalancer.setStatus(ZabbixInstanceStatus.MONITORING.toString()); awsLoadBalancerDao.update(awsLoadbalancer); } else { // ? // ELB?IP?????(DNS??)??IP??NULL zabbixProcessClient.updateHost(hostid, hostname, loadBalancer.getFqdn(), null, true, false, null, proxyHostid); // ? awsLoadbalancer.setStatus(ZabbixInstanceStatus.MONITORING.toString()); awsLoadBalancerDao.update(awsLoadbalancer); // processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, null, null, "ZabbixStart", new Object[] { loadBalancer.getFqdn(), hostid }); } // ?? Image useImage = null; List<Image> images = imageDao.readByPlatformNo(loadBalancer.getPlatformNo()); for (Image image : images) { if (PCCConstant.IMAGE_NAME_ELB.equals(image.getImageName())) { useImage = image; break; } } String templateName = useImage.getZabbixTemplate(); if (StringUtils.isEmpty(templateName)) { // TODO: ?????????? templateName = Config.getProperty("zabbix.basetemplate"); } Template template = zabbixProcessClient.getTemplateByName(templateName); boolean ret = zabbixProcessClient.addTemplate(hostid, template); if (ret) { // processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, null, null, "ZabbixTemplateAdd", new Object[] { loadBalancer.getFqdn(), templateName }); } // if (log.isInfoEnabled()) { log.info(MessageUtils.getMessage("IPROCESS-100329", loadBalancerNo, awsLoadbalancer.getName())); } } public void stopHost(Long loadBalancerNo) { //ELB?????? LoadBalancer loadBalancer = loadBalancerDao.read(loadBalancerNo); AwsLoadBalancer awsLoadbalancer = awsLoadBalancerDao.read(loadBalancerNo); // if (log.isInfoEnabled()) { log.info(MessageUtils.getMessage("IPROCESS-100330", loadBalancerNo, awsLoadbalancer.getName())); } ZabbixProcessClient zabbixProcessClient = zabbixProcessClientFactory.createZabbixProcessClient(); // ? try { //??? String hostname = getHostName(loadBalancer.getFqdn()); //ZabbixID? String proxyHostid = getProxyHostid(zabbixProcessClient); zabbixProcessClient.updateHost(awsLoadbalancer.getHostid(), hostname, loadBalancer.getFqdn(), null, false, false, null, proxyHostid); // processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, null, null, "ZabbixStop", new Object[] { loadBalancer.getFqdn(), awsLoadbalancer.getHostid() }); // ? awsLoadbalancer.setStatus(ZabbixInstanceStatus.UN_MONITORING.toString()); awsLoadBalancerDao.update(awsLoadbalancer); } catch (AutoException ignore) { // ??????? log.warn(ignore.getMessage()); } // if (log.isInfoEnabled()) { log.info(MessageUtils.getMessage("IPROCESS-100331", loadBalancerNo, awsLoadbalancer.getName())); } } public void startTemplate(Long loadBalancerNo) { LoadBalancer loadBalancer = loadBalancerDao.read(loadBalancerNo); AwsLoadBalancer awsLoadbalancer = awsLoadBalancerDao.read(loadBalancerNo); if (StringUtils.isEmpty(awsLoadbalancer.getHostid())) { // ?????? throw new AutoException("EPROCESS-000405", loadBalancerNo); } // if (log.isInfoEnabled()) { log.info(MessageUtils.getMessage("IPROCESS-100332", loadBalancerNo, awsLoadbalancer.getName())); } ZabbixProcessClient zabbixProcessClient = zabbixProcessClientFactory.createZabbixProcessClient(); // ? startTemplateHostgroup(zabbixProcessClient, loadBalancer, awsLoadbalancer, awsLoadbalancer.getHostid()); // ? String templateName = null; List<ComponentType> componentTypes = componentTypeDao.readAll(); for (ComponentType type : componentTypes) { if ("elb".equals(type.getComponentTypeName())) { templateName = type.getZabbixTemplate(); } } if (StringUtils.isNotEmpty(templateName)) { // ? Template template = zabbixProcessClient.getTemplateByName(templateName); // ? boolean ret = zabbixProcessClient.addTemplate(awsLoadbalancer.getHostid(), template); if (ret) { // processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, null, null, "ZabbixTemplateAdd", new Object[] { loadBalancer.getFqdn(), templateName }); } // ????? boolean ret2 = zabbixProcessClient.enableItems(awsLoadbalancer.getHostid(), template.getTemplateid()); if (ret2) { // processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, null, null, "ZabbixItemEnable", new Object[] { loadBalancer.getFqdn(), templateName }); } } // if (log.isInfoEnabled()) { log.info(MessageUtils.getMessage("IPROCESS-100333", loadBalancerNo, awsLoadbalancer.getName())); } } public void stopTemplate(Long loadBalancerNo) { LoadBalancer loadBalancer = loadBalancerDao.read(loadBalancerNo); AwsLoadBalancer awsLoadbalancer = awsLoadBalancerDao.read(loadBalancerNo); if (StringUtils.isEmpty(awsLoadbalancer.getHostid())) { // ?????? throw new AutoException("EPROCESS-000405", loadBalancerNo); } String templateName = null; List<ComponentType> componentTypes = componentTypeDao.readAll(); for (ComponentType type : componentTypes) { if ("elb".equals(type.getComponentTypeName())) { templateName = type.getZabbixTemplate(); } } if (StringUtils.isEmpty(templateName)) { // ????????????? return; } // if (log.isInfoEnabled()) { log.info(MessageUtils.getMessage("IPROCESS-100332", loadBalancerNo, awsLoadbalancer.getName())); } ZabbixProcessClient zabbixProcessClient = zabbixProcessClientFactory.createZabbixProcessClient(); // ? Template template = zabbixProcessClient.getTemplateByName(templateName); // ????? boolean ret = zabbixProcessClient.disableItems(awsLoadbalancer.getHostid(), template.getTemplateid()); if (ret) { // processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, null, null, "ZabbixItemDisable", new Object[] { loadBalancer.getFqdn(), templateName }); } // if (log.isInfoEnabled()) { log.info(MessageUtils.getMessage("IPROCESS-100333", loadBalancerNo, awsLoadbalancer.getName())); } } public void removeTemplate(Long loadBalancerNo) { LoadBalancer loadBalancer = loadBalancerDao.read(loadBalancerNo); AwsLoadBalancer awsLoadbalancer = awsLoadBalancerDao.read(loadBalancerNo); if (StringUtils.isEmpty(awsLoadbalancer.getHostid())) { // ?????????? return; } String templateName = null; List<ComponentType> componentTypes = componentTypeDao.readAll(); for (ComponentType type : componentTypes) { if ("elb".equals(type.getComponentTypeName())) { templateName = type.getZabbixTemplate(); } } if (StringUtils.isEmpty(templateName)) { // ???????? return; } // if (log.isInfoEnabled()) { log.info(MessageUtils.getMessage("IPROCESS-100332", loadBalancerNo, awsLoadbalancer.getName())); } ZabbixProcessClient zabbixProcessClient = zabbixProcessClientFactory.createZabbixProcessClient(); // ? Template template = zabbixProcessClient.getTemplateByName(templateName); // boolean ret = zabbixProcessClient.removeTemplate(awsLoadbalancer.getHostid(), template); if (ret) { // processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, null, null, "ZabbixTemplateRemove", new Object[] { loadBalancer.getFqdn(), templateName }); } // boolean ret2 = zabbixProcessClient.deleteItems(awsLoadbalancer.getHostid(), template.getTemplateid()); if (ret2) { // processLogger.writeLogSupport(ProcessLogger.LOG_DEBUG, null, null, "ZabbixItemDelete", new Object[] { loadBalancer.getFqdn(), templateName }); } // ? removeTemplateHostgroup(zabbixProcessClient, loadBalancer, awsLoadbalancer.getHostid()); // if (log.isInfoEnabled()) { log.info(MessageUtils.getMessage("IPROCESS-100333", loadBalancerNo, awsLoadbalancer.getName())); } } public void createElbHostgroup(Long loadBalancerNo) { LoadBalancer loadBalancer = loadBalancerDao.read(loadBalancerNo); AwsLoadBalancer awsLoadbalancer = awsLoadBalancerDao.read(loadBalancerNo); Farm farm = farmDao.read(loadBalancer.getFarmNo()); User user = userDao.read(farm.getUserNo()); String hostgroupName = getHostgroupName(user, farm, awsLoadbalancer); ZabbixProcessClient zabbixProcessClient = zabbixProcessClientFactory.createZabbixProcessClient(); Hostgroup hostgroup = zabbixProcessClient.getHostgroupByName(hostgroupName); if (hostgroup != null) { // ??????????? return; } zabbixProcessClient.createHostgroup(hostgroupName); } public void createFarmHostgroup(Long farmNo) { Farm farm = farmDao.read(farmNo); User user = userDao.read(farm.getUserNo()); String hostgroupName = getHostgroupName(user, farm); ZabbixProcessClient zabbixProcessClient = zabbixProcessClientFactory.createZabbixProcessClient(); Hostgroup hostgroup = zabbixProcessClient.getHostgroupByName(hostgroupName); if (hostgroup != null) { // ??????????? return; } zabbixProcessClient.createHostgroup(hostgroupName); } public void deleteFarmHostgroup(Long farmNo) { Farm farm = farmDao.read(farmNo); User user = userDao.read(farm.getUserNo()); String hostgroupName = user.getUsername() + "_" + farm.getFarmName(); ZabbixProcessClient zabbixProcessClient = zabbixProcessClientFactory.createZabbixProcessClient(); Hostgroup hostgroup = zabbixProcessClient.getHostgroupByName(hostgroupName); if (hostgroup != null) { // ???? zabbixProcessClient.deleteHostgroup(hostgroup.getGroupid(), hostgroupName); } // ????? String prefix = hostgroupName + "_"; List<Hostgroup> hostgroups = zabbixProcessClient.getHostgroups(); for (Hostgroup hostgroup2 : hostgroups) { if (StringUtils.startsWith(hostgroup2.getName(), prefix)) { zabbixProcessClient.deleteHostgroup(hostgroup2.getGroupid(), hostgroup2.getName()); } } } protected String getHostgroupName(User user) { return getHostgroupName(user, null); } protected String getHostgroupName(User user, Farm farm) { return getHostgroupName(user, farm, null); } protected String getHostgroupName(User user, Farm farm, AwsLoadBalancer awsLoadbalancer) { String delimiter = "_"; StringBuilder sb = new StringBuilder(); sb.append(user.getUsername()); if (farm != null) { sb.append(delimiter); sb.append(farm.getFarmName()); } if (awsLoadbalancer != null) { sb.append(delimiter); sb.append(awsLoadbalancer.getName()); } // 64?? // TODO: Zabbix??? if (sb.length() <= 64) { return sb.toString(); } else { return sb.substring(0, 64); } } protected List<Hostgroup> getInitHostgroups(ZabbixProcessClient zabbixProcessClient, Long farmNo) { Farm farm = farmDao.read(farmNo); User user = userDao.read(farm.getUserNo()); List<Hostgroup> hostgroups = new ArrayList<Hostgroup>(); // ??? String hostgroupName = getHostgroupName(user); Hostgroup hostgroup = zabbixProcessClient.getHostgroupByName(hostgroupName); if (hostgroup != null) { hostgroups.add(hostgroup); } // ??? String hostgroupName2 = getHostgroupName(user, farm); Hostgroup hostgroup2 = zabbixProcessClient.getHostgroupByName(hostgroupName2); if (hostgroup2 != null) { hostgroups.add(hostgroup2); } return hostgroups; } protected void startTemplateHostgroup(ZabbixProcessClient zabbixProcessClient, LoadBalancer loadbalancer, AwsLoadBalancer awsLoadbalancer, String hostid) { // ???? List<Hostgroup> hostgroups = zabbixProcessClient.getHostgroupsByHostid(hostid); List<String> groupids = new ArrayList<String>(); for (Hostgroup hostgroup : hostgroups) { groupids.add(hostgroup.getGroupid()); } // ?????? Farm farm = farmDao.read(loadbalancer.getFarmNo()); User user = userDao.read(farm.getUserNo()); String hostgroupName = getHostgroupName(user, farm, awsLoadbalancer); Hostgroup hostgroup = zabbixProcessClient.getHostgroupByName(hostgroupName); // ??????????? if (hostgroup != null && !groupids.contains(hostgroup.getGroupid())) { hostgroups.add(hostgroup); //??? String hostname = getHostName(loadbalancer.getFqdn()); //ZabbixID? String proxyHostid = getProxyHostid(zabbixProcessClient); zabbixProcessClient.updateHost(hostid, hostname, loadbalancer.getFqdn(), hostgroups, null, false, null, proxyHostid); } } protected void removeTemplateHostgroup(ZabbixProcessClient zabbixProcessClient, LoadBalancer loadbalancer, String hostid) { // ???? List<Hostgroup> hostgroups = zabbixProcessClient.getHostgroupsByHostid(hostid); List<String> groupids = new ArrayList<String>(); for (Hostgroup hostgroup : hostgroups) { groupids.add(hostgroup.getGroupid()); } // ??????? Farm farm = farmDao.read(loadbalancer.getFarmNo()); User user = userDao.read(farm.getUserNo()); String hostgroupName = getHostgroupName(user, farm); // ? Hostgroup hostgroup = zabbixProcessClient.getHostgroupByName(hostgroupName); // ???????? if (hostgroup != null && groupids.contains(hostgroup.getGroupid())) { for (int i = 0; i < hostgroups.size(); i++) { if (StringUtils.equals(hostgroup.getGroupid(), hostgroups.get(i).getGroupid())) { hostgroups.remove(i); break; } } //??? String hostname = getHostName(loadbalancer.getFqdn()); //ZabbixID? String proxyHostid = getProxyHostid(zabbixProcessClient); zabbixProcessClient.updateHost(hostid, hostname, loadbalancer.getFqdn(), hostgroups, null, false, null, proxyHostid); } } private String getHostName(String fqdn) { // Zabbix?????? prefix + _ + FQDN ?? // prefix?config.properties?? String hostname = fqdn; if (StringUtils.isNotEmpty(Config.getProperty("zabbix.prefix"))) { //pretix??????? //????????FQDN hostname = Config.getProperty("zabbix.prefix") + "-" + fqdn; } return hostname; } private String getProxyHostid(ZabbixProcessClient zabbixProcessClient) { String proxyName = Config.getProperty("zabbix.proxy"); String proxyHostid = null; if (StringUtils.isNotEmpty(proxyName)) { Proxy proxy = zabbixProcessClient.getProxy(proxyName); if (proxy != null) { proxyHostid = proxy.getProxyid(); } } return proxyHostid; } /** * zabbixProcessClientFactory??? * * @param zabbixProcessClientFactory zabbixProcessClientFactory */ public void setZabbixProcessClientFactory(ZabbixProcessClientFactory zabbixProcessClientFactory) { this.zabbixProcessClientFactory = zabbixProcessClientFactory; } /** * eventLogger??? * * @param eventLogger eventLogger */ public void setEventLogger(EventLogger eventLogger) { this.eventLogger = eventLogger; } /** * processLogger??? * * @param processLogger processLogger */ public void setProcessLogger(ProcessLogger processLogger) { this.processLogger = processLogger; } }