2 * Copyright (c) 2019 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
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
8 package org.opendaylight.openflowjava.protocol.impl.core;
10 import static org.opendaylight.infrautils.diagstatus.ServiceState.ERROR;
11 import static org.opendaylight.infrautils.diagstatus.ServiceState.OPERATIONAL;
12 import static org.opendaylight.infrautils.diagstatus.ServiceState.STARTING;
15 import java.util.concurrent.ConcurrentHashMap;
16 import java.util.concurrent.ConcurrentMap;
17 import javax.annotation.PreDestroy;
18 import javax.inject.Inject;
19 import javax.inject.Singleton;
20 import org.opendaylight.infrautils.diagstatus.DiagStatusService;
21 import org.opendaylight.infrautils.diagstatus.ServiceDescriptor;
22 import org.opendaylight.infrautils.diagstatus.ServiceRegistration;
23 import org.opendaylight.infrautils.diagstatus.ServiceState;
24 import org.opendaylight.openflowjava.protocol.api.connection.OpenflowDiagStatusProvider;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
29 public final class DefaultOpenflowDiagStatusProvider implements OpenflowDiagStatusProvider {
30 private static final Logger LOG = LoggerFactory.getLogger(DefaultOpenflowDiagStatusProvider.class);
31 private static final String OPENFLOW_SERVICE = "OPENFLOW";
32 private static final String OPENFLOW_SERVER_6633 = "OPENFLOW_SERVER_6633";
33 private static final String OPENFLOW_SERVER_6653 = "OPENFLOW_SERVER_6653";
34 private static final String OPENFLOW_SERVICE_AGGREGATE = OPENFLOW_SERVICE;
36 private final ConcurrentMap<String, ServiceState> statusMap = new ConcurrentHashMap<>(Map.of(
37 OPENFLOW_SERVICE, STARTING,
38 OPENFLOW_SERVER_6633, STARTING,
39 OPENFLOW_SERVER_6653, STARTING));
40 private final DiagStatusService diagStatusService;
42 private ServiceRegistration reg;
45 public DefaultOpenflowDiagStatusProvider(final DiagStatusService diagStatusService) {
46 this.diagStatusService = diagStatusService;
47 reg = diagStatusService.register(OPENFLOW_SERVICE_AGGREGATE);
59 public void reportStatus(final ServiceState serviceState) {
60 LOG.debug("reporting status as {} for {}", serviceState,OPENFLOW_SERVICE_AGGREGATE);
61 diagStatusService.report(new ServiceDescriptor(OPENFLOW_SERVICE_AGGREGATE, serviceState));
65 public void reportStatus(final String diagStatusIdentifier, final Throwable throwable) {
66 LOG.debug("Reporting error for {} as {}", diagStatusIdentifier, throwable.toString());
67 statusMap.replace(diagStatusIdentifier, ERROR);
68 diagStatusService.report(new ServiceDescriptor(OPENFLOW_SERVICE_AGGREGATE, throwable));
72 public void reportStatus(final String diagStatusIdentifier, final ServiceState serviceState,
73 final String description) {
74 LOG.debug("Reporting status {} for {} and desc {}", serviceState, diagStatusIdentifier, description);
75 diagStatusService.report(new ServiceDescriptor(OPENFLOW_SERVICE_AGGREGATE, serviceState, description));
79 public void reportStatus(final String diagStatusIdentifier, final ServiceState serviceState) {
80 statusMap.replace(diagStatusIdentifier, serviceState);
81 LOG.info("The report status is {} for {}", serviceState, diagStatusIdentifier);
85 public void reportStatus() {
86 if (statusMap.values().stream().allMatch(OPERATIONAL::equals)) {
87 reportStatus(OPERATIONAL);