aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/pnfsimulator/simulator/scheduler
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/onap/pnfsimulator/simulator/scheduler')
-rw-r--r--src/main/java/org/onap/pnfsimulator/simulator/scheduler/EventJob.java99
-rw-r--r--src/main/java/org/onap/pnfsimulator/simulator/scheduler/EventScheduler.java120
-rw-r--r--src/main/java/org/onap/pnfsimulator/simulator/scheduler/QuartzConfiguration.java38
3 files changed, 257 insertions, 0 deletions
diff --git a/src/main/java/org/onap/pnfsimulator/simulator/scheduler/EventJob.java b/src/main/java/org/onap/pnfsimulator/simulator/scheduler/EventJob.java
new file mode 100644
index 0000000..a467370
--- /dev/null
+++ b/src/main/java/org/onap/pnfsimulator/simulator/scheduler/EventJob.java
@@ -0,0 +1,99 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 Nokia. 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.pnfsimulator.simulator.scheduler;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import org.onap.pnfsimulator.simulator.KeywordsHandler;
+import org.onap.pnfsimulator.simulator.client.HttpClientAdapter;
+import org.onap.pnfsimulator.simulator.client.HttpClientAdapterImpl;
+import org.onap.pnfsimulator.simulator.client.utils.ssl.SslAuthenticationHelper;
+import org.quartz.Job;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.security.GeneralSecurityException;
+import java.util.Optional;
+
+public class EventJob implements Job {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EventJob.class);
+
+ static final String TEMPLATE_NAME = "TEMPLATE_NAME";
+ static final String VES_URL = "VES_URL";
+ static final String BODY = "BODY";
+ static final String CLIENT_ADAPTER = "CLIENT_ADAPTER";
+ static final String KEYWORDS_HANDLER = "KEYWORDS_HANDLER";
+ static final String EVENT_ID = "EVENT_ID";
+
+ @Override
+ public void execute(JobExecutionContext jobExecutionContext) {
+ JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
+ String templateName = jobDataMap.getString(TEMPLATE_NAME);
+ String vesUrl = jobDataMap.getString(VES_URL);
+ JsonObject body = (JsonObject) jobDataMap.get(BODY);
+ String id = jobDataMap.getString(EVENT_ID);
+ Optional<HttpClientAdapter> httpClientAdapter = getHttpClientAdapter(jobDataMap, vesUrl);
+
+ if (httpClientAdapter.isPresent()) {
+ KeywordsHandler keywordsHandler = (KeywordsHandler) jobDataMap.get(KEYWORDS_HANDLER);
+ JsonElement processedBody = keywordsHandler.substituteKeywords(body, id);
+ String processedBodyString = processedBody.toString();
+ String jobKey = jobExecutionContext.getJobDetail().getKey().toString();
+
+ logEventDetails(templateName, vesUrl, body.toString(), jobKey);
+ httpClientAdapter.get().send(processedBodyString);
+ } else {
+ LOGGER.error("Could not send event as client is not available");
+ }
+ }
+
+ private Optional<HttpClientAdapter> getHttpClientAdapter(JobDataMap jobDataMap, String vesUrl) {
+ HttpClientAdapter adapter = null;
+ try {
+ adapter = (HttpClientAdapter) (jobDataMap.containsKey(CLIENT_ADAPTER) ? jobDataMap.get(CLIENT_ADAPTER)
+ : new HttpClientAdapterImpl(vesUrl, new SslAuthenticationHelper()));
+ adapter = (HttpClientAdapter) (
+ jobDataMap.containsKey(CLIENT_ADAPTER)
+ ? jobDataMap.get(CLIENT_ADAPTER)
+ : new HttpClientAdapterImpl(vesUrl, new SslAuthenticationHelper())
+ );
+ } catch (MalformedURLException e) {
+ LOGGER.error("Invalid format of vesServerUr: {}", vesUrl);
+ } catch (IOException | GeneralSecurityException e) {
+ LOGGER.error("Invalid configuration of client certificate");
+ }
+ return Optional.ofNullable(adapter);
+ }
+
+ private void logEventDetails(String templateName, String vesUrl, String body, String jobKey) {
+ LOGGER.info("Job {}:Sending event to {} from template {}",
+ jobKey, vesUrl, templateName);
+ if (LOGGER.isDebugEnabled()) {
+ LOGGER.debug("Job {}: Request body {}", jobKey, body);
+ }
+ }
+
+}
diff --git a/src/main/java/org/onap/pnfsimulator/simulator/scheduler/EventScheduler.java b/src/main/java/org/onap/pnfsimulator/simulator/scheduler/EventScheduler.java
new file mode 100644
index 0000000..5584cb1
--- /dev/null
+++ b/src/main/java/org/onap/pnfsimulator/simulator/scheduler/EventScheduler.java
@@ -0,0 +1,120 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 Nokia. 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.pnfsimulator.simulator.scheduler;
+
+
+import com.google.gson.JsonObject;
+import org.onap.pnfsimulator.simulator.KeywordsHandler;
+import org.onap.pnfsimulator.simulator.client.HttpClientAdapterImpl;
+import org.onap.pnfsimulator.simulator.client.utils.ssl.SslAuthenticationHelper;
+import org.quartz.JobBuilder;
+import org.quartz.JobDataMap;
+import org.quartz.JobDetail;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobKey;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.SimpleTrigger;
+import org.quartz.TriggerBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.security.GeneralSecurityException;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import static org.onap.pnfsimulator.simulator.scheduler.EventJob.BODY;
+import static org.onap.pnfsimulator.simulator.scheduler.EventJob.CLIENT_ADAPTER;
+import static org.onap.pnfsimulator.simulator.scheduler.EventJob.EVENT_ID;
+import static org.onap.pnfsimulator.simulator.scheduler.EventJob.KEYWORDS_HANDLER;
+import static org.onap.pnfsimulator.simulator.scheduler.EventJob.TEMPLATE_NAME;
+import static org.onap.pnfsimulator.simulator.scheduler.EventJob.VES_URL;
+import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
+
+@Component
+public class EventScheduler {
+
+
+ private final Scheduler scheduler;
+ private final KeywordsHandler keywordsHandler;
+ private final SslAuthenticationHelper sslAuthenticationHelper;
+
+ @Autowired
+ public EventScheduler(Scheduler scheduler, KeywordsHandler keywordsHandler, SslAuthenticationHelper sslAuthenticationHelper) {
+ this.scheduler = scheduler;
+ this.keywordsHandler = keywordsHandler;
+ this.sslAuthenticationHelper = sslAuthenticationHelper;
+ }
+
+ public String scheduleEvent(String vesUrl, Integer repeatInterval, Integer repeatCount,
+ String templateName, String eventId, JsonObject body)
+ throws SchedulerException, IOException, GeneralSecurityException {
+
+ JobDetail jobDetail = createJobDetail(vesUrl, templateName, eventId, body);
+ SimpleTrigger trigger = createTrigger(repeatInterval, repeatCount);
+
+ scheduler.scheduleJob(jobDetail, trigger);
+ return jobDetail.getKey().getName();
+ }
+
+ public boolean cancelAllEvents() throws SchedulerException {
+ List<JobKey> jobKeys = getActiveJobsKeys();
+ return scheduler.deleteJobs(jobKeys);
+ }
+
+ public boolean cancelEvent(String jobName) throws SchedulerException {
+ Optional<JobKey> activeJobKey = getActiveJobsKeys().stream().filter(e -> e.getName().equals(jobName)).findFirst();
+ return activeJobKey.isPresent() && scheduler.deleteJob(activeJobKey.get());
+ }
+
+ private SimpleTrigger createTrigger(int interval, int repeatCount) {
+ return TriggerBuilder.newTrigger()
+ .withSchedule(simpleSchedule()
+ .withIntervalInSeconds(interval)
+ .withRepeatCount(repeatCount - 1))
+ .build();
+ }
+
+ private JobDetail createJobDetail(String vesUrl, String templateName, String eventId, JsonObject body) throws IOException, GeneralSecurityException {
+ JobDataMap jobDataMap = new JobDataMap();
+ jobDataMap.put(TEMPLATE_NAME, templateName);
+ jobDataMap.put(VES_URL, vesUrl);
+ jobDataMap.put(EVENT_ID, eventId);
+ jobDataMap.put(KEYWORDS_HANDLER, keywordsHandler);
+ jobDataMap.put(BODY, body);
+ jobDataMap.put(CLIENT_ADAPTER, new HttpClientAdapterImpl(vesUrl, sslAuthenticationHelper));
+
+ return JobBuilder
+ .newJob(EventJob.class)
+ .withDescription(templateName)
+ .usingJobData(jobDataMap)
+ .build();
+ }
+
+ private List<JobKey> getActiveJobsKeys() throws SchedulerException {
+ return scheduler.getCurrentlyExecutingJobs()
+ .stream()
+ .map(JobExecutionContext::getJobDetail)
+ .map(JobDetail::getKey)
+ .collect(Collectors.toList());
+ }
+}
diff --git a/src/main/java/org/onap/pnfsimulator/simulator/scheduler/QuartzConfiguration.java b/src/main/java/org/onap/pnfsimulator/simulator/scheduler/QuartzConfiguration.java
new file mode 100644
index 0000000..2beb9dc
--- /dev/null
+++ b/src/main/java/org/onap/pnfsimulator/simulator/scheduler/QuartzConfiguration.java
@@ -0,0 +1,38 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 Nokia. 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.pnfsimulator.simulator.scheduler;
+
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.impl.StdSchedulerFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+class QuartzConfiguration {
+
+ @Bean
+ Scheduler provideScheduler() throws SchedulerException {
+ StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();
+ Scheduler scheduler = stdSchedulerFactory.getScheduler();
+ scheduler.start();
+ return scheduler;
+ }
+}