use of org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionInput in project netconf by opendaylight.
the class CreateSubscription method handleWithNoSubsequentOperations.
@Override
protected Element handleWithNoSubsequentOperations(final Document document, final XmlElement operationElement) throws DocumentedException {
operationElement.checkName(CREATE_SUBSCRIPTION);
operationElement.checkNamespace(CreateSubscriptionInput.QNAME.getNamespace().toString());
// FIXME reimplement using CODEC_REGISTRY and parse everything into generated class instance
// Binding doesn't support anyxml nodes yet, so filter could not be retrieved
// xml -> normalized node -> CreateSubscriptionInput conversion could be slower than current approach
final Optional<XmlElement> filter = operationElement.getOnlyChildElementWithSameNamespaceOptionally("filter");
// Replay not supported
final Optional<XmlElement> startTime = operationElement.getOnlyChildElementWithSameNamespaceOptionally("startTime");
checkArgument(startTime.isEmpty(), "StartTime element not yet supported");
// Stop time not supported
final Optional<XmlElement> stopTime = operationElement.getOnlyChildElementWithSameNamespaceOptionally("stopTime");
checkArgument(stopTime.isEmpty(), "StopTime element not yet supported");
final StreamNameType streamNameType = parseStreamIfPresent(operationElement);
requireNonNull(netconfSession);
// Premature streams are allowed (meaning listener can register even if no provider is available yet)
if (!notifications.isStreamAvailable(streamNameType)) {
LOG.warn("Registering premature stream {}. No publisher available yet for session {}", streamNameType, getNetconfSessionIdForReporting());
}
final NotificationListenerRegistration notificationListenerRegistration = notifications.registerNotificationListener(streamNameType, new NotificationSubscription(netconfSession, filter));
subscriptions.add(notificationListenerRegistration);
return document.createElement(XmlNetconfConstants.OK);
}
use of org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionInput in project netconf by opendaylight.
the class MountedDeviceListener method trackNotificationsPerformance.
private void trackNotificationsPerformance(final YangInstanceIdentifier path) {
// 1. get nodeId from the path
final String nodeId = TestUtils.getNodeId(path).get();
// 2. extract needed services from the mount point
final DOMMountPoint mountPoint = mountPointService.getMountPoint(path).orElseThrow(() -> new RuntimeException("Unable to get mountpoint"));
final DOMRpcService rpcService = mountPoint.getService(DOMRpcService.class).orElseThrow(() -> new RuntimeException("Unable to get RPC Service from the mountpoint"));
final DOMNotificationService notificationService = mountPoint.getService(DOMNotificationService.class).orElseThrow(() -> new RuntimeException("Unable to get NotificationService from the mountpoint"));
// 3. create a listener for the notifications
listeners.put(path, notificationService.registerNotificationListener(new NotificationsCounter(nodeId, serializer), Absolute.of(VrfRouteNotification.QNAME)));
// 4. send 'create-subscription' request to the device
final StreamNameType streamNameType = new StreamNameType(STREAM_DEFAULT_NAME);
final CreateSubscriptionInputBuilder subscriptionInputBuilder = new CreateSubscriptionInputBuilder();
subscriptionInputBuilder.setStream(streamNameType);
final CreateSubscriptionInput input = subscriptionInputBuilder.build();
final ContainerNode inputNode = serializer.toNormalizedNodeRpcData(input);
final ListenableFuture<? extends DOMRpcResult> resultFuture = rpcService.invokeRpc(CREATE_SUBSCRIPTION_QNAME, inputNode);
Futures.addCallback(resultFuture, new FutureCallback<DOMRpcResult>() {
@Override
public void onSuccess(@Nullable final DOMRpcResult rpcResult) {
LOG.info("Notification stream subscription succesfully completed");
}
@Override
public void onFailure(final Throwable throwable) {
LOG.error("Notification stream subscription failed");
}
}, MoreExecutors.directExecutor());
}
Aggregations