+++ /dev/null
-/*
- * Copyright © 2017 AT&T and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.transportpce.olm;
-
-import com.google.common.base.Optional;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.MountPointService;
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.transportpce.olm.power.PowerMgmt;
-import org.opendaylight.transportpce.olm.spanloss.RoadmLinks;
-import org.opendaylight.transportpce.olm.spanloss.SpanLoss;
-import org.opendaylight.transportpce.renderer.mapping.PortMapping;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.CurrentPmlist;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.current.pm.Measurements;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.currentpmlist.CurrentPm;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev161014.PmNamesEnum;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.GetPmInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.GetPmOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.GetPmOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.OlmService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerSetupInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerSetupOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerSetupOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerTurndownInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerTurndownOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerTurndownOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.get.pm.output.MeasurementsBuilder;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The Class OlmPowerSetupImpl.
- */
-public class OlmPowerSetupImpl implements OlmService {
-
- /** The Constant LOG. */
- private static final Logger LOG = LoggerFactory.getLogger(OlmPowerSetupImpl.class);
-
- /** The db. */
- private final DataBroker db;
-
- /** The mps. */
- private final MountPointService mps;
-
- /**
- * Instantiates a new olm power setup impl.
- *
- * @param db
- * the db
- * @param mps
- * the mps
- */
- public OlmPowerSetupImpl(DataBroker db, MountPointService mps) {
- this.db = db;
- this.mps = mps;
- }
-
- /**
- * This method is the implementation of the 'get-pm' RESTCONF service, which
- * is one of the external APIs into the olm application.
- *
- * <p>
- * 1. get-pm This operation traverse through current PM list and gets PM for
- * given NodeId and Resource name
- *
- * <p>
- * The signature for this method was generated by yang tools from the
- * renderer API model.
- *
- * @param input
- * Input parameter from the olm yang model
- *
- * @return Result of the request
- */
- @Override
- public Future<RpcResult<GetPmOutput>> getPm(GetPmInput input) {
- LOG.info("Getting PM Data for NodeId: {} ResouceType: {} ResourceName: {}",
- input.getNodeId(),input.getResourceType(),input.getResourceName());
- new PortMapping(db, mps, input.getNodeId());
- DataBroker deviceDb = PortMapping.getDeviceDataBroker(input.getNodeId(), mps);
- InstanceIdentifier<CurrentPmlist> currentPmsIID = InstanceIdentifier.create(CurrentPmlist.class);
- ReadOnlyTransaction rtx = deviceDb.newReadOnlyTransaction();
- Optional<CurrentPmlist> currentPmList;
- String methodName = "";
- List<CurrentPm> currentPms = new ArrayList<>();
- GetPmOutputBuilder pmOutputBuilder = new GetPmOutputBuilder();
- List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.get.pm.output.Measurements>
- measrements = new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418
- .get.pm.output.Measurements>();
- try {
- currentPmList = rtx.read(LogicalDatastoreType.OPERATIONAL, currentPmsIID).get();
- if (currentPmList.isPresent()) {
- currentPms.addAll(currentPmList.get().getCurrentPm());
- for (CurrentPm pm : currentPms) {
- MeasurementsBuilder measurement = new MeasurementsBuilder();
- if (pm.getResource().getResourceType().getType().toString().equals(input.getResourceType())) {
-
- switch (pm.getResource().getResourceType().getType()) {
- case CircuitPack:
- methodName = "getCircuitPackName";
- break;
- case Connection:
- methodName = "getConnectionNumber";
- break;
- case Degree:
- methodName = "getDegreeNumber";
- break;
- case Interface:
- methodName = "getInterfaceName";
- break;
- case InternalLink:
- methodName = "getInternalLinkName";
- break;
- case PhysicalLink:
- methodName = "getPhysicalLinkName";
- break;
- case Service:
- methodName = "getServiceName";
- break;
- case Shelf:
- methodName = "getShelfName";
- break;
- case SharedRiskGroup:
- methodName = "getSrgNumber";
- break;
- default:
- methodName = "getPort";
- break;
- }
- try {
-
- String pmResourceId = pm.getResource().getResource().getResource().getImplementedInterface()
- .getMethod(methodName).invoke(pm.getResource().getResource().getResource()).toString();
- if (pmResourceId.equals(input.getResourceName()) && pm.getGranularity() != null) {
- if (pm.getGranularity().getName().equals(input.getGranularity())) {
- for (Measurements measure : pm.getMeasurements()) {
- if (!measure.getMeasurement().getPmParameterName().getType().equals(
- PmNamesEnum.VendorExtension)) {
- measurement.setPmparameterName(measure.getMeasurement().getPmParameterName()
- .getType().toString());
- measurement.setPmparameterValue(measure.getMeasurement()
- .getPmParameterValue().getDecimal64().toString());
- measrements.add(measurement.build());
- }
- }
- }
- }
-
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
- | NoSuchMethodException | SecurityException ex) {
- LOG.warn("Unable to find PM for NodeID: {} ResourceName: {} ",input.getNodeId(),
- input.getResourceName(),ex);
- }
- }
- }
- if (measrements.size() > 0) {
- pmOutputBuilder.setNodeId(input.getNodeId()).setResourceType(input.getResourceType()).setResourceId(
- input.getResourceName()).setGranularity(input.getGranularity()).setMeasurements(measrements);
- }
-
- } else {
- LOG.info("Device PM Data is not available");
- }
-
- } catch (InterruptedException | ExecutionException ex) {
- LOG.warn("Unable to get currentPmList for NodeID: {}",input.getNodeId(),ex);
- }
- LOG.info("PM Data found successfully for {}-{}",pmOutputBuilder.getNodeId(),pmOutputBuilder.getResourceId());
- return RpcResultBuilder.success(pmOutputBuilder).buildFuture();
- }
-
-
- /**
- * This method is the implementation of the 'service-power-setup' RESTCONF service, which
- * is one of the external APIs into the olm application.
- *
- * <p>
- * 1. service-power-setup: This operation performs following steps:
- * Step1: Calculate Spanloss on all links which are part of service.
- * TODO Step2: Calculate power levels for each Tp-Id
- * TODO Step3: Post power values on roadm connections
- *
- * <p>
- * The signature for this method was generated by yang tools from the
- * renderer API model.
- *
- * @param input
- * Input parameter from the olm yang model
- * Input will contain nodeId and termination point
- *
- * @return Result of the request
- */
- @Override
- public Future<org.opendaylight.yangtools.yang.common.RpcResult<ServicePowerSetupOutput>> servicePowerSetup(
- ServicePowerSetupInput input) {
- List<RoadmLinks> roadmLinks = new ArrayList<RoadmLinks>();
- ServicePowerSetupOutputBuilder output = new ServicePowerSetupOutputBuilder();
- //Finds degree TpID from node and generates a list of links
- for (int i = 0; i < input.getNodes().size(); i++) {
- if (input.getNodes().get(i).getDestTp().toLowerCase().contains("deg")) {
- RoadmLinks rdmLink = new RoadmLinks();
- rdmLink.setSrcNodeId(input.getNodes().get(i).getNodeId());
- rdmLink.setSrcTpId(input.getNodes().get(i).getDestTp());
- rdmLink.setDestNodeId(input.getNodes().get(i + 1).getNodeId());
- rdmLink.setDestTpid(input.getNodes().get(i + 1).getSrcTp());
- roadmLinks.add(rdmLink);
- }
- }
- boolean successValSpanCalculation = new SpanLoss(db, mps).getLinkSpanloss(roadmLinks);
- boolean successValPowerCalculation = new PowerMgmt(db,mps).setPower(input);
-
- if (successValSpanCalculation && successValPowerCalculation) {
- output.setResult("Success");
- } else {
- output.setResult("Failed");
- }
-
- return RpcResultBuilder.success(output).buildFuture();
- }
-
-
- /**
- * This method is the implementation of the 'service-power-trundown' RESTCONF service, which
- * is one of the external APIs into the olm application.
- *
- * <p>
- * 1. service-power-turndown: This operation performs following steps:
- * Step1: For each TP within Node sets interface outofservice .
- * Step2: For each roam-connection sets power to -60dbm
- * Step3: Turns power mode off
- *
- * <p>
- * The signature for this method was generated by yang tools from the
- * renderer API model.
- *
- * @param input
- * Input parameter from the olm yang model
- * Input will contain nodeId and termination point
- *
- * @return Result of the request
- */
- @Override
- public Future<RpcResult<ServicePowerTurndownOutput>> servicePowerTurndown(ServicePowerTurndownInput input) {
- ServicePowerTurndownOutputBuilder output = new ServicePowerTurndownOutputBuilder();
- if (new PowerMgmt(db,mps).powerTurnDown(input)) {
- output.setResult("Success");
- } else {
- output.setResult("Failed");
- }
- return RpcResultBuilder.success(output).buildFuture();
- }
-}
\ No newline at end of file