diff options
Diffstat (limited to 'vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io')
7 files changed, 0 insertions, 494 deletions
diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/CrudService.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/CrudService.java deleted file mode 100644 index b9d7f1bb..00000000 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/CrudService.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.fd.honeycomb.lcmapi; - -import io.fd.honeycomb.translate.read.ReadFailedException; -import io.fd.honeycomb.translate.write.WriteFailedException; -import java.util.List; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -/** - * Example of an aggregated access interface. - * <p/> - * Shared by all the customizers hiding the ugly details of our data management. - * - * TODO update javadoc - */ -public interface CrudService<T extends DataObject> { - - /** - * Perform write of provided data. - */ - void writeData(@Nonnull final InstanceIdentifier<T> identifier, @Nonnull final T data) - throws WriteFailedException; - - - /** - * Perform delete of existing data. - */ - void deleteData(@Nonnull final InstanceIdentifier<T> identifier, @Nonnull final T data) - throws WriteFailedException; - - /** - * Perform update of existing data. - */ - void updateData(@Nonnull final InstanceIdentifier<T> identifier, @Nonnull final T dataOld, - @Nonnull final T dataNew) - throws WriteFailedException; - - /** - * Read data identified by provided identifier. - */ - T readSpecific(@Nonnull final InstanceIdentifier<T> identifier) throws ReadFailedException; - - /** - * Read all nodes of type {@link T}. - */ - List<T> readAll() throws ReadFailedException; -} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ElementCrudService.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ElementCrudService.java deleted file mode 100644 index fa6a31d5..00000000 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ElementCrudService.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Modifications copyright (c) 2019 AT&T Intellectual Property - */ - -package io.fd.honeycomb.lcmapi; - -import io.fd.honeycomb.translate.read.ReadFailedException; -import io.fd.honeycomb.translate.write.WriteFailedException; -import java.util.Collections; -import java.util.List; -import javax.annotation.Nonnull; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCountState; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.StreamsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamNum; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Simple example of class handling Crud operations for plugin. - * <p/> - * No real handling, serves just as an illustration. - * - * TODO update javadoc - */ -final class ElementCrudService implements CrudService<Streams> { - - private static final Logger LOG = LoggerFactory.getLogger(ElementCrudService.class); - - @Override - public void writeData(@Nonnull final InstanceIdentifier<Streams> identifier, @Nonnull final Streams data) - throws WriteFailedException { - if (data != null) { - - // Performs any logic needed for persisting such data - LOG.info("Writing path[{}] / data [{}]", identifier, data); - } else { - throw new WriteFailedException.CreateFailedException(identifier, data, - new NullPointerException("Provided data are null")); - } - } - - @Override - public void deleteData(@Nonnull final InstanceIdentifier<Streams> identifier, @Nonnull final Streams data) - throws WriteFailedException { - if (data != null) { - - // Performs any logic needed for persisting such data - LOG.info("Removing path[{}] / data [{}]", identifier, data); - } else { - throw new WriteFailedException.DeleteFailedException(identifier, - new NullPointerException("Provided data are null")); - } - } - - @Override - public void updateData(@Nonnull final InstanceIdentifier<Streams> identifier, @Nonnull final Streams dataOld, - @Nonnull final Streams dataNew) throws WriteFailedException { - if (dataOld != null && dataNew != null) { - - // Performs any logic needed for persisting such data - LOG.info("Update path[{}] from [{}] to [{}]", identifier, dataOld, dataNew); - } else { - throw new WriteFailedException.DeleteFailedException(identifier, - new NullPointerException("Provided data are null")); - } - } - - @Override - public Streams readSpecific(@Nonnull final InstanceIdentifier<Streams> identifier) throws ReadFailedException { - - // load data by this key - // *Key class will always contain key of entity, in this case long value - - return new StreamsBuilder() - .setActiveStreams(new StreamNum(1L)) - .build(); - } - - @Override - public List<Streams> readAll() throws ReadFailedException { - // read all data under parent node,in this case {@link ModuleState} - return Collections.singletonList( - readSpecific(InstanceIdentifier.create(StreamCountState.class).child(Streams.class))); - } -} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/Module.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/Module.java deleted file mode 100644 index 05109db3..00000000 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/Module.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Modifications copyright (c) 2019 AT&T Intellectual Property - */ - -package io.fd.honeycomb.lcmapi; - -import static io.fd.honeycomb.lcmapi.ModuleConfiguration.ELEMENT_SERVICE_NAME; - -import com.google.inject.AbstractModule; -import com.google.inject.TypeLiteral; -import com.google.inject.multibindings.Multibinder; -import com.google.inject.name.Names; -import io.fd.honeycomb.lcmapi.init.ConfigDataInitializer; -import io.fd.honeycomb.lcmapi.write.ModuleWriterFactory; -import io.fd.honeycomb.data.init.DataTreeInitializer; -import io.fd.honeycomb.translate.write.WriterFactory; -import net.jmob.guice.conf.core.ConfigurationModule; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams; - -/** - * Module class instantiating stream-count plugin components. - */ -public final class Module extends AbstractModule { - - // TODO This initiates all the plugin components, but it still needs to be registered/wired into an integration - // module producing runnable distributions. There is one such distribution in honeycomb project: - // vpp-integration/minimal-distribution - // In order to integrate this plugin with the distribution: - // 1. Add a dependency on this maven module to the the distribution's pom.xml - // 2. Add an instance of this module into the distribution in its Main class - - @Override - protected void configure() { - // requests injection of properties - install(ConfigurationModule.create()); - requestInjection(ModuleConfiguration.class); - - // creates binding for interface implementation by name - bind(new TypeLiteral<CrudService<Streams>>(){}) - .annotatedWith(Names.named(ELEMENT_SERVICE_NAME)) - .to(ElementCrudService.class); - - // create writer factory binding - // can hold multiple binding for separate yang modules - final Multibinder<WriterFactory> writerFactoryBinder = Multibinder.newSetBinder(binder(), WriterFactory.class); - writerFactoryBinder.addBinding().to(ModuleWriterFactory.class); - - // create initializer binding - // can hold multiple binding for separate yang modules - final Multibinder<DataTreeInitializer> initializerBinder = - Multibinder.newSetBinder(binder(), DataTreeInitializer.class); - initializerBinder.addBinding().to(ConfigDataInitializer.class); - } -} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ModuleConfiguration.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ModuleConfiguration.java deleted file mode 100644 index c574b3ef..00000000 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ModuleConfiguration.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.fd.honeycomb.lcmapi; - -import net.jmob.guice.conf.core.BindConfig; -import net.jmob.guice.conf.core.InjectConfig; -import net.jmob.guice.conf.core.Syntax; - -/** - * Class containing static configuration for stream-count module,<br> - * either loaded from property file stream-count.json from classpath. - * <p/> - * Further documentation for the configuration injection can be found at: - * https://github.com/yyvess/gconf - */ -@BindConfig(value = "stream-count", syntax = Syntax.JSON) -public final class ModuleConfiguration { - - // TODO change the sample property to real plugin configuration - // If there is no such configuration, remove this, stream-count.json resource and its wiring from Module class - - /** - * Sample property that's injected from external json configuration file. - */ - @InjectConfig("sample-prop") - public String sampleProp; - - /** - * Constant name used to identify stream-count plugin specific components during dependency injection. - */ - public static final String ELEMENT_SERVICE_NAME = "element-service"; -} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/init/ConfigDataInitializer.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/init/ConfigDataInitializer.java deleted file mode 100644 index 16edd1bc..00000000 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/init/ConfigDataInitializer.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Modifications copyright (c) 2019 AT&T Intellectual Property - */ - -package io.fd.honeycomb.lcmapi.init; - -import io.fd.honeycomb.data.init.AbstractDataTreeConverter; -import com.google.inject.Inject; -import com.google.inject.name.Named; -import javax.annotation.Nonnull; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCount; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCountBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCountState; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -/** - * Initialize configuration data based on operational data. - * <p/> - * Very useful when a plugin is initiated but the underlying layer already contains some operation state. - * Deriving the configuration from existing operational state enables reconciliation in case when Honeycomb's persistence - * is not available to do the work for us. - */ -public final class ConfigDataInitializer extends AbstractDataTreeConverter<StreamCountState, StreamCount> { - - @Inject - public ConfigDataInitializer(@Named("honeycomb-initializer") @Nonnull final DataBroker bindingDataBroker) { - super(bindingDataBroker, InstanceIdentifier.create(StreamCountState.class), InstanceIdentifier.create(StreamCount.class)); - } - - @Override - public StreamCount convert(final StreamCountState operationalData) { - // Transfer all the operational data into configuration - return new StreamCountBuilder() - .setStreams(operationalData.getStreams()) - .build(); - } -} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ElementCustomizer.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ElementCustomizer.java deleted file mode 100644 index 740ffdf7..00000000 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ElementCustomizer.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Modifications copyright (c) 2019 AT&T Intellectual Property - */ - -package io.fd.honeycomb.lcmapi.write; - -import io.fd.honeycomb.lcmapi.CrudService; -import io.fd.honeycomb.translate.spi.write.WriterCustomizer; -import io.fd.honeycomb.translate.write.WriteContext; -import io.fd.honeycomb.translate.write.WriteFailedException; - -import java.io.IOException; - -import javax.annotation.Nonnull; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Writer for {@link Element} list node from our YANG model. - */ - -public final class ElementCustomizer implements WriterCustomizer<Streams> { - - private static final Logger LOG = LoggerFactory.getLogger(ElementCustomizer.class); - - private final CrudService<Streams> crudService; - - public ElementCustomizer(@Nonnull final CrudService<Streams> crudService) { - this.crudService = crudService; - } - - @Override - public void writeCurrentAttributes(@Nonnull final InstanceIdentifier<Streams> id, @Nonnull final Streams dataAfter, - @Nonnull final WriteContext writeContext) throws WriteFailedException { - //perform write of data,or throw exception - //invoked by PUT operation,if provided data doesn't exist in Config data - crudService.writeData(id, dataAfter); - try { - runScript(dataAfter.getActiveStreams().getValue()); - } - catch (IOException e) { - String message = "Write operation failed " + e; - LOG.error(message); - } - } - - @Override - public void updateCurrentAttributes(@Nonnull final InstanceIdentifier<Streams> id, - @Nonnull final Streams dataBefore, - @Nonnull final Streams dataAfter, @Nonnull final WriteContext writeContext) - throws WriteFailedException { - //invoked by PUT operation,if provided data does exist in Config data - crudService.updateData(id, dataBefore, dataAfter); - try { - runScript(dataAfter.getActiveStreams().getValue()); - } - catch (IOException e) { - String message = "Write operation failed " + e; - LOG.error(message); - } - } - - @Override - public void deleteCurrentAttributes(@Nonnull final InstanceIdentifier<Streams> id, - @Nonnull final Streams dataBefore, - @Nonnull final WriteContext writeContext) throws WriteFailedException { - //perform delete of data,or throw exception - // Not supported, throw exception - throw new WriteFailedException.DeleteFailedException(id, - new UnsupportedOperationException("Delete operation not supported")); - } - - //Update the number of running streams running a custom script that uses the old vPacketGen REST APIs - private void runScript(long streams) throws IOException { - - String script = new String("bash /opt/update_running_streams.sh " + streams); - Runtime.getRuntime().exec(script); - String message = "Number of running streams updated to " + streams; - LOG.info(message); - } -} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ModuleWriterFactory.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ModuleWriterFactory.java deleted file mode 100644 index 1de39761..00000000 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ModuleWriterFactory.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Modifications copyright (c) 2019 AT&T Intellectual Property - */ - -package io.fd.honeycomb.lcmapi.write; - -import static io.fd.honeycomb.lcmapi.ModuleConfiguration.ELEMENT_SERVICE_NAME; - -import com.google.inject.Inject; -import com.google.inject.name.Named; -import io.fd.honeycomb.lcmapi.CrudService; -import io.fd.honeycomb.translate.impl.write.GenericWriter; -import io.fd.honeycomb.translate.write.WriterFactory; -import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; -import javax.annotation.Nonnull; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCount; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -/** - * Factory producing writers for stream-count plugin's data. - */ -public final class ModuleWriterFactory implements WriterFactory { - - private static final InstanceIdentifier<StreamCount> ROOT_CONTAINER_ID = InstanceIdentifier.create(StreamCount.class); - - /** - * Injected crud service to be passed to customizers instantiated in this factory. - */ - @Inject - @Named(ELEMENT_SERVICE_NAME) - private CrudService<Streams> crudService; - - @Override - public void init(@Nonnull final ModifiableWriterRegistryBuilder registry) { - - //adds writer for child node - //no need to add writers for empty nodes - registry.add(new GenericWriter<>(ROOT_CONTAINER_ID.child(Streams.class), new ElementCustomizer(crudService))); - } -} |