diff options
author | Lianhao Lu <lianhao.lu@intel.com> | 2018-11-07 11:46:28 +0800 |
---|---|---|
committer | Lianhao Lu <lianhao.lu@intel.com> | 2018-11-09 08:52:23 +0800 |
commit | 3bd15a55aeb69c1caad1a1f32175cb3b7797733a (patch) | |
tree | d35c28de481e537b8c03c8baea6039e0bb807200 | |
parent | f4d9fe1838b5f5eac942c3d31d92e8304ecc36ee (diff) |
S3P: added FileSystemReceptionHandler plugin
For S3P test, we need to add a new FileSystemRecpetionHandler plugin
which monitors a local directory for newly come csar files.
This patch added the plugin code as well as the configuration file for
s3p to use.
Change-Id: I8f1e65489abde15ae32c54d819bbc6e7cbdf36d0
Issue-ID: POLICY-837
Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
7 files changed, 316 insertions, 4 deletions
diff --git a/packages/policy-distribution-docker/pom.xml b/packages/policy-distribution-docker/pom.xml index ae0ce979..45a4621d 100644 --- a/packages/policy-distribution-docker/pom.xml +++ b/packages/policy-distribution-docker/pom.xml @@ -26,7 +26,7 @@ <parent> <groupId>org.onap.policy.distribution</groupId> <artifactId>packages</artifactId> - <version>2.0.1-SNAPSHOT</version> + <version>2.1.0-SNAPSHOT</version> </parent> <packaging>pom</packaging> diff --git a/packages/policy-distribution-docker/src/main/docker/policy-dist.sh b/packages/policy-distribution-docker/src/main/docker/policy-dist.sh index a6366c05..ebb6b8d2 100644 --- a/packages/policy-distribution-docker/src/main/docker/policy-dist.sh +++ b/packages/policy-distribution-docker/src/main/docker/policy-dist.sh @@ -22,10 +22,17 @@ JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ POLICY_DISTRIBUTION_HOME=/opt/app/policy/distribution -CONFIG_FILE=$1 +if [ "$#" -eq 1 ]; then + CONFIG_FILE=$1 +else + CONFIG_FILE=${CONFIG_FILE} +fi + if [ -z "$CONFIG_FILE" ] then - CONFIG_FILE=$POLICY_DISTRIBUTION_HOME/etc/defaultConfig.json + CONFIG_FILE="$POLICY_DISTRIBUTION_HOME/etc/defaultConfig.json" fi +echo "Policy distribution config file: $CONFIG_FILE" + $JAVA_HOME/bin/java -cp "$POLICY_DISTRIBUTION_HOME/etc:$POLICY_DISTRIBUTION_HOME/lib/*" org.onap.policy.distribution.main.startstop.Main -c $CONFIG_FILE diff --git a/packages/policy-distribution-tarball/pom.xml b/packages/policy-distribution-tarball/pom.xml index 7e23a147..b67f4f9d 100644 --- a/packages/policy-distribution-tarball/pom.xml +++ b/packages/policy-distribution-tarball/pom.xml @@ -24,7 +24,7 @@ <parent> <groupId>org.onap.policy.distribution</groupId> <artifactId>packages</artifactId> - <version>2.0.1-SNAPSHOT</version> + <version>2.1.0-SNAPSHOT</version> </parent> <artifactId>policy-distribution-tarball</artifactId> diff --git a/packages/policy-distribution-tarball/src/main/resources/etc/s3pConfig.json b/packages/policy-distribution-tarball/src/main/resources/etc/s3pConfig.json new file mode 100644 index 00000000..6124ffb0 --- /dev/null +++ b/packages/policy-distribution-tarball/src/main/resources/etc/s3pConfig.json @@ -0,0 +1,68 @@ +{ + "name":"SDCDistributionGroup", + "restServerParameters":{ + "host":"0.0.0.0", + "port":6969, + "userName":"healthcheck", + "password":"zb!XztG34" + }, + "receptionHandlerParameters":{ + "S3PReceptionHandler":{ + "receptionHandlerType":"S3P", + "receptionHandlerClassName":"org.onap.policy.distribution.reception.handling.sdc.FileSystemReceptionHandler", + "receptionHandlerConfigurationName":"fileConfiguration", + "pluginHandlerParameters":{ + "policyDecoders":{ + "CsarDecoder":{ + "decoderType":"CsarDecoder", + "decoderClassName":"org.onap.policy.distribution.reception.decoding.pdpx.PolicyDecoderCsarPdpx", + "decoderConfigurationName": "csarToOptimizationPolicyConfiguration" + } + }, + "policyForwarders":{ + "PAPEngineForwarder":{ + "forwarderType":"PAPEngine", + "forwarderClassName":"org.onap.policy.distribution.forwarding.xacml.pdp.XacmlPdpPolicyForwarder", + "forwarderConfigurationName": "xacmlPdpConfiguration" + } + } + } + } + }, + "receptionHandlerConfigurationParameters":{ + "fileConfiguration":{ + "parameterClassName":"org.onap.policy.distribution.reception.handling.sdc.FileSystemReceptionHandlerConfigurationParameterGroup", + "parameters":{ + "watchPath": "/tmp/policy_distribution/csar/" + } + } + }, + "policyDecoderConfigurationParameters":{ + "csarToOptimizationPolicyConfiguration":{ + "parameterClassName":"org.onap.policy.distribution.reception.decoding.pdpx.PolicyDecoderCsarPdpxConfigurationParameterGroup", + "parameters":{ + "policyNamePrefix": "oofCasablanca", + "onapName": "OOF", + "version": "1.0", + "priority": "3", + "riskType": "Test", + "riskLevel": "2" + } + } + }, + "policyForwarderConfigurationParameters":{ + "xacmlPdpConfiguration":{ + "parameterClassName":"org.onap.policy.distribution.forwarding.xacml.pdp.XacmlPdpPolicyForwarderParameterGroup", + "parameters":{ + "useHttps": true, + "hostname": "pdp", + "port": 8081, + "userName": "testpdp", + "password": "alpha123", + "clientAuth": "cHl0aG9uOnRlc3Q=", + "isManaged": true, + "pdpGroup": "default" + } + } + } +} diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandler.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandler.java new file mode 100644 index 00000000..3434f816 --- /dev/null +++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandler.java @@ -0,0 +1,105 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel Corp. All rights reserved. + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.distribution.reception.handling.sdc; + +import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE; + +import java.io.IOException; +import java.io.File; +import java.nio.file.FileSystems; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.WatchEvent; +import java.nio.file.WatchKey; +import java.nio.file.WatchService; + +import org.onap.policy.common.logging.flexlogger.FlexLogger; +import org.onap.policy.common.logging.flexlogger.Logger; + +import org.onap.policy.common.parameters.ParameterService; +import org.onap.policy.distribution.model.Csar; +import org.onap.policy.distribution.reception.decoding.PolicyDecodingException; +import org.onap.policy.distribution.reception.handling.AbstractReceptionHandler; + +/** + * Handles reception of inputs from File System which can be used to decode policies. + */ +public class FileSystemReceptionHandler extends AbstractReceptionHandler { + private boolean running = true; + private static final Logger LOGGER = FlexLogger.getLogger(FileSystemReceptionHandler.class); + + @Override + protected void initializeReception(final String parameterGroupName) { + LOGGER.debug("FileSystemReceptionHandler init..."); + try { + final FileSystemReceptionHandlerConfigurationParameterGroup handlerParameters = + ParameterService.get(parameterGroupName); + main(handlerParameters.getWatchPath()); + } catch (final PolicyDecodingException ex) { + ex.printStackTrace(); + } + } + + @Override + public void destroy() { + // Tear down subscription etc + running = false; + } + + @SuppressWarnings("unchecked") + public void main(String watchPath) throws PolicyDecodingException { + try { + final WatchService watcher = FileSystems.getDefault().newWatchService(); + final Path dir = Paths.get(watchPath); + + dir.register(watcher, ENTRY_CREATE); + LOGGER.debug("Watch Service registered for dir: " + dir.getFileName()); + while (running) { + WatchKey key; + try { + key = watcher.take(); + } catch (final InterruptedException ex) { + ex.printStackTrace(); + return; + } + for (final WatchEvent<?> event : key.pollEvents()) { + final WatchEvent.Kind<?> kind = event.kind(); + final WatchEvent<Path> ev = (WatchEvent<Path>) event; + final Path fileName = ev.context(); + LOGGER.debug("new CSAR found: " + kind.name() + ": " + fileName); + createPolicyInputAndCallHandler(dir.toString() + File.separator + fileName.toString()); + LOGGER.debug("CSAR complete: " + kind.name() + ": " + fileName); + } + final boolean valid = key.reset(); + if (!valid) { + break; + } + } + } catch (final Exception ex) { + LOGGER.error(ex); + } + } + + private void createPolicyInputAndCallHandler(final String fileName) throws PolicyDecodingException { + final Csar csarObject = new Csar(fileName); + inputReceived(csarObject); + } +} diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterBuilder.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterBuilder.java new file mode 100644 index 00000000..b017cae6 --- /dev/null +++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterBuilder.java @@ -0,0 +1,54 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel Corp. All rights reserved. + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.distribution.reception.handling.sdc; + +import java.util.List; + +/** + * This class builds an instance of {@link FileSystemReceptionHandlerConfigurationParameterGroup} class. + * + */ +public class FileSystemReceptionHandlerConfigurationParameterBuilder { + + private String watchPath; + + /** + * Set watchPath to this {@link FileSystemReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param watchPath the watchPath + */ + public FileSystemReceptionHandlerConfigurationParameterBuilder setWatchPath(final String watchPath) { + this.watchPath = watchPath; + return this; + } + + + /** + * Returns the watchPath of this {@link FileSystemReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the watchPath + */ + public String getWatchPath() { + return watchPath; + } +} + + diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterGroup.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterGroup.java new file mode 100644 index 00000000..79f6c208 --- /dev/null +++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterGroup.java @@ -0,0 +1,78 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. All rights reserved. + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.distribution.reception.handling.sdc; + +import java.io.File; + +import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.distribution.reception.parameters.ReceptionHandlerConfigurationParameterGroup; + +/** + * This class handles reading, parsing and validating of the Policy SDC Service Distribution parameters from Json + * format, which strictly adheres to the interface:IConfiguration, defined by SDC SDK. + */ +public class FileSystemReceptionHandlerConfigurationParameterGroup extends ReceptionHandlerConfigurationParameterGroup { + + private String watchPath; + + /** + * The constructor for instantiating {@link FileSystemReceptionHandlerConfigurationParameterGroup} class. + * + * @param builder the SDC configuration builder + */ + public FileSystemReceptionHandlerConfigurationParameterGroup( + final FileSystemReceptionHandlerConfigurationParameterBuilder builder) { + watchPath = builder.getWatchPath(); + } + + public String getWatchPath() { + return watchPath; + } + + /** + * {@inheritDoc} + */ + @Override + public GroupValidationResult validate() { + final GroupValidationResult validationResult = new GroupValidationResult(this); + validatePathElement(validationResult, watchPath, "watchPath"); + return validationResult; + } + + + /** + * Validate the string element. + * + * @param validationResult the result object + * @param element the element to validate + * @param elementName the element name for error message + */ + private void validatePathElement(final GroupValidationResult validationResult, final String element, + final String elementName) { + File f = new File(element); + if (!(f.exists() && f.isDirectory())) { + validationResult.setResult(elementName, ValidationStatus.INVALID, + elementName + " must be a valid directory"); + } + } +} + |