2 * Copyright (C) 2014 Red Hat, Inc.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.neutron.transcriber;
11 import java.lang.reflect.Method;
12 import java.util.ArrayList;
13 import java.util.HashSet;
14 import java.util.List;
15 import java.util.Map.Entry;
17 import java.util.concurrent.ConcurrentHashMap;
18 import java.util.concurrent.ConcurrentMap;
20 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
21 import org.opendaylight.neutron.spi.INeutronLoadBalancerHealthMonitorCRUD;
22 import org.opendaylight.neutron.spi.NeutronLoadBalancerHealthMonitor;
23 import org.opendaylight.neutron.spi.Neutron_ID;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.HealthmonitorAttrs.Type;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Healthmonitor;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitor.Healthmonitors;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitor.HealthmonitorsBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
34 public class NeutronLoadBalancerHealthMonitorInterface extends AbstractNeutronInterface<Healthmonitors, NeutronLoadBalancerHealthMonitor> implements INeutronLoadBalancerHealthMonitorCRUD {
35 private static final Logger logger = LoggerFactory.getLogger(NeutronLoadBalancerHealthMonitorInterface.class);
36 private ConcurrentMap<String, NeutronLoadBalancerHealthMonitor> loadBalancerHealthMonitorDB = new ConcurrentHashMap<String, NeutronLoadBalancerHealthMonitor>();
39 NeutronLoadBalancerHealthMonitorInterface(ProviderContext providerContext) {
40 super(providerContext);
43 // this method uses reflection to update an object from it's delta.
45 private boolean overwrite(Object target, Object delta) {
46 Method[] methods = target.getClass().getMethods();
48 for (Method toMethod : methods) {
49 if (toMethod.getDeclaringClass().equals(target.getClass())
50 && toMethod.getName().startsWith("set")) {
52 String toName = toMethod.getName();
53 String fromName = toName.replace("set", "get");
56 Method fromMethod = delta.getClass().getMethod(fromName);
57 Object value = fromMethod.invoke(delta, (Object[]) null);
59 toMethod.invoke(target, value);
61 } catch (Exception e) {
71 public boolean neutronLoadBalancerHealthMonitorExists(String uuid) {
72 return loadBalancerHealthMonitorDB.containsKey(uuid);
76 public NeutronLoadBalancerHealthMonitor getNeutronLoadBalancerHealthMonitor(String uuid) {
77 if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
78 logger.debug("No LoadBalancerHealthMonitor has Been Defined");
81 return loadBalancerHealthMonitorDB.get(uuid);
85 public List<NeutronLoadBalancerHealthMonitor> getAllNeutronLoadBalancerHealthMonitors() {
86 Set<NeutronLoadBalancerHealthMonitor> allLoadBalancerHealthMonitors = new HashSet<NeutronLoadBalancerHealthMonitor>();
87 for (Entry<String, NeutronLoadBalancerHealthMonitor> entry : loadBalancerHealthMonitorDB.entrySet()) {
88 NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor = entry.getValue();
89 allLoadBalancerHealthMonitors.add(loadBalancerHealthMonitor);
91 logger.debug("Exiting getLoadBalancerHealthMonitors, Found {} OpenStackLoadBalancerHealthMonitor", allLoadBalancerHealthMonitors.size());
92 List<NeutronLoadBalancerHealthMonitor> ans = new ArrayList<NeutronLoadBalancerHealthMonitor>();
93 ans.addAll(allLoadBalancerHealthMonitors);
98 public boolean addNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor input) {
99 if (neutronLoadBalancerHealthMonitorExists(input.getLoadBalancerHealthMonitorID())) {
102 loadBalancerHealthMonitorDB.putIfAbsent(input.getLoadBalancerHealthMonitorID(), input);
103 //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkCreated on them
108 public boolean removeNeutronLoadBalancerHealthMonitor(String uuid) {
109 if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
112 loadBalancerHealthMonitorDB.remove(uuid);
113 //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkDeleted on them
118 public boolean updateNeutronLoadBalancerHealthMonitor(String uuid, NeutronLoadBalancerHealthMonitor delta) {
119 if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
122 NeutronLoadBalancerHealthMonitor target = loadBalancerHealthMonitorDB.get(uuid);
123 return overwrite(target, delta);
127 public boolean neutronLoadBalancerHealthMonitorInUse(String loadBalancerHealthMonitorUUID) {
128 return !neutronLoadBalancerHealthMonitorExists(loadBalancerHealthMonitorUUID);
132 protected Healthmonitors toMd(String uuid) {
133 HealthmonitorsBuilder healthmonitorsBuilder = new HealthmonitorsBuilder();
134 healthmonitorsBuilder.setId(toUuid(uuid));
135 return healthmonitorsBuilder.build();
139 protected InstanceIdentifier<Healthmonitors> createInstanceIdentifier(
140 Healthmonitors healthMonitors) {
141 return InstanceIdentifier.create(Neutron.class)
142 .child(Healthmonitor.class )
143 .child(Healthmonitors.class, healthMonitors.getKey());
147 protected Healthmonitors toMd(NeutronLoadBalancerHealthMonitor healthMonitor) {
148 HealthmonitorsBuilder healthmonitorsBuilder = new HealthmonitorsBuilder();
149 healthmonitorsBuilder.setAdminStateUp(healthMonitor.getLoadBalancerHealthMonitorAdminStateIsUp());
150 if (healthMonitor.getLoadBalancerHealthMonitorDelay() != null) {
151 healthmonitorsBuilder.setDelay(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorDelay()));
153 if (healthMonitor.getLoadBalancerHealthMonitorExpectedCodes() != null) {
154 healthmonitorsBuilder.setExpectedCodes(healthMonitor.getLoadBalancerHealthMonitorExpectedCodes());
156 if (healthMonitor.getLoadBalancerHealthMonitorHttpMethod() != null) {
157 healthmonitorsBuilder.setHttpMethod(healthMonitor.getLoadBalancerHealthMonitorHttpMethod());
159 if (healthMonitor.getLoadBalancerHealthMonitorMaxRetries() != null) {
160 healthmonitorsBuilder.setMaxRetries(Integer.valueOf(healthMonitor.getLoadBalancerHealthMonitorMaxRetries()));
162 if (healthMonitor.getLoadBalancerHealthMonitorPools() != null) {
163 List<Uuid> listUuid = new ArrayList<Uuid>();
164 for (Neutron_ID neutron_id : healthMonitor.getLoadBalancerHealthMonitorPools()) {
165 listUuid.add(toUuid(neutron_id.getID()));
167 healthmonitorsBuilder.setPools(listUuid);
169 if (healthMonitor.getLoadBalancerHealthMonitorTenantID() != null) {
170 healthmonitorsBuilder.setTenantId(toUuid(healthMonitor.getLoadBalancerHealthMonitorTenantID()));
172 if (healthMonitor.getLoadBalancerHealthMonitorTimeout() != null) {
173 healthmonitorsBuilder.setTimeout(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorTimeout()));
175 if (healthMonitor.getLoadBalancerHealthMonitorType() != null) {
176 healthmonitorsBuilder.setType(Type.valueOf(healthMonitor.getLoadBalancerHealthMonitorType()));
178 if (healthMonitor.getLoadBalancerHealthMonitorUrlPath() != null) {
179 healthmonitorsBuilder.setUrlPath(healthMonitor.getLoadBalancerHealthMonitorUrlPath());
181 if (healthMonitor.getLoadBalancerHealthMonitorID() != null) {
182 healthmonitorsBuilder.setId(toUuid(healthMonitor.getLoadBalancerHealthMonitorID()));
184 logger.warn("Attempting to write neutron laod balancer health monitor without UUID");
186 return healthmonitorsBuilder.build();