--- /dev/null
+FROM anapsix/alpine-java:8_jdk\r
+ADD cmso-0.1.0-SNAPSHOT.jar app.jar\r
+ADD startService.sh /startService.sh\r
+RUN chmod 700 /startService.sh\r
+ENTRYPOINT ./startService.sh \r
--- /dev/null
+#!/bin/sh\r
+app_args=-Dspring.config.location=${APP_CONFIG_HOME}\r
+echo "app_args ="${app_args}\r
+java -Djava.security.egd=file:/dev/./urandom ${app_args} -Xms1024m -Xmx1024m -jar /app.jar\r
--- /dev/null
+/*\r
+ * Copyright © 2017-2018 AT&T Intellectual Property.\r
+ * Modifications Copyright © 2018 IBM.\r
+ * \r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * \r
+ * \r
+ * Unless otherwise specified, all documentation contained herein is licensed\r
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");\r
+ * you may not use this documentation except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ * https://creativecommons.org/licenses/by/4.0/\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, documentation\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+*/\r
+\r
+package org.onap.optf.cmso;\r
+\r
+import java.net.InetAddress;\r
+import java.util.TimeZone;\r
+import javax.annotation.PostConstruct;\r
+import org.apache.catalina.connector.Connector;\r
+import org.onap.optf.cmso.common.LogMessages;\r
+import org.slf4j.MDC;\r
+import org.springframework.beans.factory.annotation.Value;\r
+import org.springframework.boot.SpringApplication;\r
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;\r
+import org.springframework.boot.autoconfigure.SpringBootApplication;\r
+import org.springframework.boot.builder.SpringApplicationBuilder;\r
+import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;\r
+import org.springframework.boot.web.servlet.server.ServletWebServerFactory;\r
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;\r
+import org.springframework.context.annotation.Bean;\r
+import org.springframework.context.annotation.ComponentScan;\r
+import org.springframework.scheduling.annotation.EnableAsync;\r
+import com.att.eelf.configuration.Configuration;\r
+import com.att.eelf.configuration.EELFLogger;\r
+import com.att.eelf.configuration.EELFManager;\r
+\r
+@SpringBootApplication\r
+@ComponentScan(basePackages = {"org.onap.optf.cmso"})\r
+@EnableAsync\r
+@EnableAutoConfiguration(exclude = { /*DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class*/ })\r
+public class Application extends SpringBootServletInitializer {\r
+\r
+ private static EELFLogger log = EELFManager.getInstance().getLogger(Application.class);\r
+\r
+ @Override\r
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {\r
+ return application.sources(Application.class);\r
+ }\r
+\r
+ @Value("${server.dispatchPort:8089}")\r
+ private String dispatchPort;\r
+\r
+ @PostConstruct\r
+ void started() {\r
+ // Make sure all datetimes are stored in UTC format.\r
+ TimeZone.setDefault(TimeZone.getTimeZone("UTC"));\r
+ }\r
+\r
+ public static void main(String[] args) {\r
+ initMDCData();\r
+ SpringApplication.run(Application.class, args);\r
+ }\r
+\r
+ protected static void initMDCData() {\r
+ MDC.clear();\r
+ try {\r
+ MDC.put(Configuration.MDC_SERVER_FQDN, InetAddress.getLocalHost().getHostName());\r
+ MDC.put("hostname", InetAddress.getLocalHost().getCanonicalHostName());\r
+ MDC.put("serviceName", System.getProperty("info.build.artifact"));\r
+ MDC.put("version", System.getProperty("info.build.version"));\r
+ MDC.put(Configuration.MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress());\r
+ } catch (Exception e) {\r
+ log.error(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage());\r
+ }\r
+ }\r
+\r
+ @Bean\r
+ public ServletWebServerFactory servletContainer() {\r
+ TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();\r
+ int port = Integer.parseInt(dispatchPort);\r
+ tomcat.addAdditionalTomcatConnectors(createStandardConnector(port));\r
+ return tomcat;\r
+ }\r
+\r
+ private Connector createStandardConnector(int port) {\r
+ Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");\r
+ connector.setScheme("http");\r
+ connector.setPort(port);\r
+ return connector;\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ * Copyright © 2017-2018 AT&T Intellectual Property.\r
+ * Modifications Copyright © 2018 IBM.\r
+ * \r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * \r
+ * \r
+ * Unless otherwise specified, all documentation contained herein is licensed\r
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");\r
+ * you may not use this documentation except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ * https://creativecommons.org/licenses/by/4.0/\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, documentation\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+*/\r
+\r
+package org.onap.optf.cmso;\r
+\r
+import org.quartz.spi.TriggerFiredBundle;\r
+import org.springframework.beans.factory.config.AutowireCapableBeanFactory;\r
+import org.springframework.context.ApplicationContext;\r
+import org.springframework.context.ApplicationContextAware;\r
+import org.springframework.scheduling.quartz.SpringBeanJobFactory;\r
+import com.att.eelf.configuration.EELFLogger;\r
+import com.att.eelf.configuration.EELFManager;\r
+\r
+/**\r
+ * This class makes it possible to use @Autowired references in QuartzJobBeans.\r
+ * \r
+ * Also enables @Autowire of the SchedulerFactoryBean the add Triggers\r
+ * for @Autowired QuartzJobBeans for ChangeManagement events. Making a big\r
+ * investment in SpringBoot Quartz. It had better work ;-)\r
+ *\r
+ */\r
+public final class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware {\r
+ private static EELFLogger log = EELFManager.getInstance().getLogger(AutowiringSpringBeanJobFactory.class);\r
+\r
+ private transient AutowireCapableBeanFactory beanFactory;\r
+\r
+ @Override\r
+ public void setApplicationContext(final ApplicationContext context) {\r
+ beanFactory = context.getAutowireCapableBeanFactory();\r
+ }\r
+\r
+ @Override\r
+ protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception {\r
+ final Object job = super.createJobInstance(bundle);\r
+ log.info("create job instance");\r
+ beanFactory.autowireBean(job);\r
+ return job;\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ * Copyright © 2017-2018 AT&T Intellectual Property.\r
+ * Modifications Copyright © 2018 IBM.\r
+ * \r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * \r
+ * \r
+ * Unless otherwise specified, all documentation contained herein is licensed\r
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");\r
+ * you may not use this documentation except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ * https://creativecommons.org/licenses/by/4.0/\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, documentation\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+*/\r
+\r
+package org.onap.optf.cmso;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+import org.onap.optf.cmso.common.PropertiesManagement;\r
+import org.springframework.boot.SpringApplication;\r
+import org.springframework.boot.env.EnvironmentPostProcessor;\r
+import org.springframework.core.env.ConfigurableEnvironment;\r
+import org.springframework.core.env.MapPropertySource;\r
+import org.springframework.core.env.MutablePropertySources;\r
+\r
+public class CMSEnvironmentPostProcessor implements EnvironmentPostProcessor {\r
+\r
+ @Override\r
+ public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {\r
+ String pwd = environment.getProperty("cmso.database.password");\r
+ if (pwd != null) {\r
+ pwd = PropertiesManagement.getDecryptedValue(pwd);\r
+ Map<String, Object> map = new HashMap<String, Object>();\r
+ map.put("spring.datasource.password", pwd);\r
+ MapPropertySource propertySource = new MapPropertySource("abc", map);\r
+ MutablePropertySources proeprtySources = environment.getPropertySources();\r
+ proeprtySources.addLast(propertySource);\r
+ }\r
+ }\r
+\r
+}\r
--- /dev/null
+/*\r
+ * Copyright © 2017-2018 AT&T Intellectual Property.\r
+ * Modifications Copyright © 2018 IBM.\r
+ * \r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * \r
+ * \r
+ * Unless otherwise specified, all documentation contained herein is licensed\r
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");\r
+ * you may not use this documentation except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ * https://creativecommons.org/licenses/by/4.0/\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, documentation\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+*/\r
+\r
+package org.onap.optf.cmso;\r
+\r
+import org.onap.optf.cmso.eventq.CmQuartzJob;\r
+import org.onap.optf.cmso.optimizer.OptimizerQuartzJob;\r
+import org.onap.optf.cmso.sostatus.ScheduleStatusJob;\r
+import org.quartz.spi.JobFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.context.ApplicationContext;\r
+import org.springframework.context.annotation.Bean;\r
+import org.springframework.context.annotation.ComponentScan;\r
+import org.springframework.context.annotation.Configuration;\r
+import org.springframework.core.env.Environment;\r
+import org.springframework.scheduling.quartz.JobDetailFactoryBean;\r
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;\r
+import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;\r
+import org.springframework.transaction.annotation.EnableTransactionManagement;\r
+\r
+@Configuration\r
+@ComponentScan({"org.onap.optf.cmso"})\r
+@EnableTransactionManagement\r
+public class CMSQuartzConfiguration {\r
+\r
+ @Autowired\r
+ Environment env;\r
+\r
+ @Bean\r
+ public SimpleTriggerFactoryBean eventqTriggerFactoryBean() {\r
+\r
+ Integer interval = env.getProperty("cmso.cm.polling.job.interval.ms", Integer.class, 60000);\r
+ SimpleTriggerFactoryBean stFactory = new SimpleTriggerFactoryBean();\r
+ stFactory.setJobDetail(eventqDetailFactoryBean().getObject());\r
+ stFactory.setStartDelay(3000);\r
+ stFactory.setRepeatInterval(interval);\r
+ // Indefinitely\r
+ return stFactory;\r
+ }\r
+\r
+ @Bean\r
+ public JobDetailFactoryBean eventqDetailFactoryBean() {\r
+ JobDetailFactoryBean factory = new JobDetailFactoryBean();\r
+ factory.setJobClass(CmQuartzJob.class);\r
+ return factory;\r
+ }\r
+\r
+ @Bean\r
+ public SimpleTriggerFactoryBean statusTriggerFactoryBean() {\r
+\r
+ Integer interval = env.getProperty("cmso.status.job.interval.ms", Integer.class, 60000);\r
+ SimpleTriggerFactoryBean stFactory = new SimpleTriggerFactoryBean();\r
+ stFactory.setJobDetail(statusDetailFactoryBean().getObject());\r
+ stFactory.setStartDelay(3000);\r
+ stFactory.setRepeatInterval(interval);\r
+ // Indefinitely\r
+ return stFactory;\r
+ }\r
+\r
+ @Bean\r
+ public JobDetailFactoryBean statusDetailFactoryBean() {\r
+ JobDetailFactoryBean factory = new JobDetailFactoryBean();\r
+ factory.setJobClass(ScheduleStatusJob.class);\r
+ return factory;\r
+ }\r
+\r
+ @Bean\r
+ public SimpleTriggerFactoryBean optimizerTriggerFactoryBean() {\r
+\r
+ Integer interval = env.getProperty("cmso.optimizer.job.interval.ms", Integer.class, 60000);\r
+ SimpleTriggerFactoryBean stFactory = new SimpleTriggerFactoryBean();\r
+ stFactory.setJobDetail(optimizerDetailFactoryBean().getObject());\r
+ stFactory.setStartDelay(3000);\r
+ stFactory.setRepeatInterval(interval);\r
+ // Indefinitely\r
+ return stFactory;\r
+ }\r
+\r
+ @Bean\r
+ public JobDetailFactoryBean optimizerDetailFactoryBean() {\r
+ JobDetailFactoryBean factory = new JobDetailFactoryBean();\r
+ factory.setJobClass(OptimizerQuartzJob.class);\r
+ return factory;\r
+ }\r
+\r
+ @Bean\r
+ public JobFactory jobFactory(ApplicationContext applicationContext) {\r
+ AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();\r
+ jobFactory.setApplicationContext(applicationContext);\r
+ return jobFactory;\r
+ }\r
+\r
+ @Bean\r
+ public SchedulerFactoryBean cmsoFactoryBean(JobFactory jobFactory) {\r
+ SchedulerFactoryBean cmso = new SchedulerFactoryBean();\r
+ cmso.setJobFactory(jobFactory);\r
+ cmso.setTriggers(eventqTriggerFactoryBean().getObject(), optimizerTriggerFactoryBean().getObject(),\r
+ statusTriggerFactoryBean().getObject());\r
+ return cmso;\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ * Copyright © 2017-2018 AT&T Intellectual Property.\r
+ * Modifications Copyright © 2018 IBM.\r
+ * \r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * \r
+ * \r
+ * Unless otherwise specified, all documentation contained herein is licensed\r
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");\r
+ * you may not use this documentation except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ * https://creativecommons.org/licenses/by/4.0/\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, documentation\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+*/\r
+\r
+package org.onap.optf.cmso;\r
+\r
+import java.util.logging.Logger;\r
+import javax.ws.rs.ApplicationPath;\r
+import javax.ws.rs.client.Client;\r
+import javax.ws.rs.client.ClientBuilder;\r
+import org.glassfish.jersey.client.ClientConfig;\r
+import org.glassfish.jersey.logging.LoggingFeature;\r
+import org.glassfish.jersey.server.ResourceConfig;\r
+import org.glassfish.jersey.servlet.ServletProperties;\r
+import org.onap.optf.cmso.dispatcher.rs.DispatcherServiceImpl;\r
+import org.onap.optf.cmso.filters.CMSOContainerFilters;\r
+import org.onap.optf.cmso.service.rs.AdminToolImpl;\r
+import org.onap.optf.cmso.service.rs.CMSCallbackImpl;\r
+import org.onap.optf.cmso.service.rs.CMSOServiceImpl;\r
+import org.onap.optf.cmso.service.rs.HealthCheckImpl;\r
+import org.onap.optf.cmso.test.loopback.SchedulerTestLoopbackServiceImpl;\r
+import org.onap.optf.cmso.test.loopback.TicketMgtLoopbackServiceImpl;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.context.annotation.Bean;\r
+import org.springframework.context.annotation.Primary;\r
+import org.springframework.stereotype.Component;\r
+import com.fasterxml.jackson.annotation.JsonInclude;\r
+import com.fasterxml.jackson.databind.DeserializationFeature;\r
+import com.fasterxml.jackson.databind.MapperFeature;\r
+import com.fasterxml.jackson.databind.ObjectMapper;\r
+import com.fasterxml.jackson.databind.SerializationFeature;\r
+\r
+@Component\r
+@ApplicationPath("/")\r
+public class JerseyConfiguration extends ResourceConfig {\r
+ private static final Logger log = Logger.getLogger(JerseyConfiguration.class.getName());\r
+\r
+ @Bean\r
+ @Primary\r
+ public ObjectMapper objectMapper() {\r
+ ObjectMapper objectMapper = new ObjectMapper();\r
+ objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);\r
+ objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);\r
+ objectMapper.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES);\r
+ objectMapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);\r
+ return objectMapper;\r
+ }\r
+\r
+ @Autowired\r
+ public JerseyConfiguration( /* LogRequestFilter lrf */ ) {\r
+ register(CMSOServiceImpl.class);\r
+ register(CMSCallbackImpl.class);\r
+ register(SchedulerTestLoopbackServiceImpl.class);\r
+ register(TicketMgtLoopbackServiceImpl.class);\r
+ register(HealthCheckImpl.class);\r
+ register(AdminToolImpl.class);\r
+ register(DispatcherServiceImpl.class);\r
+ property(ServletProperties.FILTER_FORWARD_ON_404, true);\r
+ // TODO: ONAP Conversion identify appropriate ONAP logging filters if any\r
+ // register(lrf, 6001);\r
+ // register(LogResponseFilter.class, 6004);\r
+\r
+ // TODO: Examine which logging features to enable\r
+ register(new LoggingFeature(log));\r
+ register(CMSOContainerFilters.class);\r
+ }\r
+\r
+ @Bean\r
+ public Client jerseyClient() {\r
+ ClientConfig client = new ClientConfig();\r
+\r
+ // TODO: ONAP Conversion identify appropriate ONAP logging filters if any\r
+ // client.register(TransactionIdRequestFilter.class);\r
+ // client.register(TransactionIdResponseFilter.class);\r
+ // client.register(DateTimeParamConverterProvider.class);\r
+\r
+ return ClientBuilder.newClient(client);\r
+ }\r
+}\r
--- /dev/null
+#-------------------------------------------------------------------------------\r
+# Copyright © 2017-2018 AT&T Intellectual Property.\r
+# Modifications Copyright © 2018 IBM.\r
+# \r
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+# \r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+# \r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# \r
+# \r
+# Unless otherwise specified, all documentation contained herein is licensed\r
+# under the Creative Commons License, Attribution 4.0 Intl. (the â??Licenseâ?\9d);\r
+# you may not use this documentation except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+# \r
+# https://creativecommons.org/licenses/by/4.0/\r
+# \r
+# Unless required by applicable law or agreed to in writing, documentation\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+#-------------------------------------------------------------------------------\r
+\r
+info.build.artifact=@project.artifactId@\r
+info.build.name=@project.name@\r
+info.build.description=@project.description@\r
+info.build.version=@project.version@\r
+\r
+spring.jersey.type=filter\r
+spring.mvc.urls=swagger,docs,prometheus\r
+server.contextPath=/cmso\r
+\r
+#This property is used to set the Tomcat connector attributes.developers can define multiple attributes separated by comma\r
+#tomcat.connector.attributes=allowTrace-true\r
+\r
+#The max number of active threads in this pool\r
+server.tomcat.max-threads=200\r
+\r
+#The minimum number of threads always kept alive\r
+server.tomcat.min-spare-threads=25\r
+\r
+# External API port \r
+server.port=8080\r
+# Internal dispatch port \r
+server.dispatchPort=8089\r
+\r
+kubernetes.namespace=org.onap.optf.cmso\r
--- /dev/null
+#-----------------------------------------------------------\r
+ ____ ____ ____________ ________ ________ ____ \r
+ / __ \/ __ \/_ __/ ____/ / ____/ |/ / ___// __ \\r
+ / / / / /_/ / / / / /_ / / / /|_/ /\__ \/ / / /\r
+ / /_/ / ____/ / / / __/ / /___/ / / /___/ / /_/ / \r
+ \____/_/ /_/ /_/ \____/_/ /_//____/\____/ \r
+\r
+${archetype.name}-Version:${archetype.version}\r
+\r
+#-----------------------------------------------------------
\ No newline at end of file
--- /dev/null
+<!--\r
+ Copyright © 2017-2018 AT&T Intellectual Property.\r
+ Modifications Copyright © 2018 IBM.\r
+ \r
+ Licensed under the Apache License, Version 2.0 (the "License");\r
+ you may not use this file except in compliance with the License.\r
+ You may obtain a copy of the License at\r
+ \r
+ http://www.apache.org/licenses/LICENSE-2.0\r
+ \r
+ Unless required by applicable law or agreed to in writing, software\r
+ distributed under the License is distributed on an "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ See the License for the specific language governing permissions and\r
+ limitations under the License.\r
+ \r
+ \r
+ Unless otherwise specified, all documentation contained herein is licensed\r
+ under the Creative Commons License, Attribution 4.0 Intl. (the "License");\r
+ you may not use this documentation except in compliance with the License.\r
+ You may obtain a copy of the License at\r
+ \r
+ https://creativecommons.org/licenses/by/4.0/\r
+ \r
+ Unless required by applicable law or agreed to in writing, documentation\r
+ distributed under the License is distributed on an "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ See the License for the specific language governing permissions and\r
+ limitations under the License.\r
+-->\r
+\r
+<configuration scan="true" scanPeriod="3 seconds" debug="false">\r
+\r
+ <statusListener class="ch.qos.logback.core.status.NopStatusListener" />\r
+ <property resource="application.properties" />\r
+ <property name="namespace" value="${kubernetes.namespace}"></property>\r
+ <!-- directory path for all other type logs -->\r
+ <property name="logDir" value="logs" />\r
+ <!-- directory path for debugging type logs -->\r
+ <property name="debugDir" value="debug-logs" />\r
+ <property name="logDirectory" value="${logDir}" />\r
+ <property name="debugLogDirectory" value="${debugDir}" />\r
+ <!-- log file names -->\r
+ <property name="generalLogName" value="application" />\r
+ <property name="securityLogName" value="security" />\r
+ <property name="performanceLogName" value="performance" />\r
+ <property name="serverLogName" value="server" />\r
+ <property name="policyLogName" value="policy" />\r
+ <property name="errorLogName" value="error" />\r
+ <property name="metricsLogName" value="metrics" />\r
+ <property name="auditLogName" value="audit" />\r
+ <property name="debugLogName" value="debug" />\r
+\r
+ <property name="defaultPattern"\r
+ value="%d{yyyy-MM-dd HH:mm:ss.SSS} $ version: %X{version} threadId: {PID:- } %-5level namespace:${namespace} %logger{20} [ hostname: %X{hostname} serviceName: %X{serviceName} version: %X{version} transactionId: %X{transactionId} requestTimeStamp: %X{requestTimestamp} responseTimeStamp: %X{responseTimestamp} duration: %X{duration}] %m%n" />\r
+\r
+ <property name="performanceandAuditpattern"\r
+ value="%date{ISO8601,UTC}|%thread|%.-5level|namespace:${namespace}|%logger{20}|%X{ServerIPAddress}|%X{ServerFQDN}|%X{serviceName}| %msg%n" />\r
+\r
+ <property name="auditLoggerPattern"\r
+ value="%X{BeginTimestamp}|%X{EndTimestamp}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{PartnerName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDescription}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{ElapsedTime}|%X{ServerFQDN}|%X{RemoteHost}|%X{ClassName}|%X{Unused}|%X{ProcessKey}|%X{CustomField1}|%X{CustomField2}|%X{CustomField3}|%X{CustomField4}| %msg%n" />\r
+\r
+ <property name="metricsLoggerPattern"\r
+ value="%X{BeginTimestamp}|%X{EndTimestamp}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDescription}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{ElapsedTime}|%X{ServerFQDN}|%X{RemoteHost}|%X{ClassName}|%X{Unused}|%X{ProcessKey}|%X{TargetVirtualEntity}|%X{CustomField1}|%X{CustomField2}|%X{CustomField3}|%X{CustomField4}| %msg%n" />\r
+\r
+ <property name="errorLoggerPattern"\r
+ value="%date{ISO8601,UTC}|%X{RequestId}|%thread|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%.-5level|%X{ErrorCode}|%X{ErrorDescription}| %msg%n" />\r
+\r
+ <property name="debugLoggerPattern"\r
+ value="%date{ISO8601,UTC}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{ServerFQDN}|%X{RemoteHost}|%X{ClassName}|%X{Timer}| %msg%n" />\r
+\r
+ <appender name="STDOUT"\r
+ class="ch.qos.logback.core.ConsoleAppender">\r
+ <encoder>\r
+ <pattern>${defaultPattern}</pattern>\r
+ </encoder>\r
+ </appender>\r
+\r
+ <!-- ============================================================================ -->\r
+ <!-- EELF Appenders -->\r
+ <!-- ============================================================================ -->\r
+\r
+ <!-- The EELFAppender is used to record events to the general application \r
+ log -->\r
+\r
+ <appender name="EELF"\r
+ class="ch.qos.logback.core.rolling.RollingFileAppender">\r
+ <file>${logDirectory}/${generalLogName}.log</file>\r
+ <rollingPolicy\r
+ class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">\r
+ <fileNamePattern>${logDirectory}/${generalLogName}.%i.log.zip\r
+ </fileNamePattern>\r
+ <minIndex>1</minIndex>\r
+ <maxIndex>9</maxIndex>\r
+ </rollingPolicy>\r
+ <triggeringPolicy\r
+ class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">\r
+ <maxFileSize>5MB</maxFileSize>\r
+ </triggeringPolicy>\r
+ <encoder>\r
+ <pattern>${defaultPattern}</pattern>\r
+ </encoder>\r
+ </appender>\r
+\r
+ <appender name="asyncEELF"\r
+ class="ch.qos.logback.classic.AsyncAppender">\r
+ <queueSize>256</queueSize>\r
+ <appender-ref ref="EELF" />\r
+ </appender>\r
+\r
+ <!-- EELF Security Appender. This appender is used to record security events \r
+ to the security log file. Security events are separate from other loggers \r
+ in EELF so that security log records can be captured and managed in a secure \r
+ way separate from the other logs. This appender is set to never discard any \r
+ events. -->\r
+ <appender name="EELFSecurity"\r
+ class="ch.qos.logback.core.rolling.RollingFileAppender">\r
+ <file>${logDirectory}/${securityLogName}.log</file>\r
+ <rollingPolicy\r
+ class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">\r
+ <fileNamePattern>${logDirectory}/${securityLogName}.%i.log.zip\r
+ </fileNamePattern>\r
+ <minIndex>1</minIndex>\r
+ <maxIndex>9</maxIndex>\r
+ </rollingPolicy>\r
+ <triggeringPolicy\r
+ class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">\r
+ <maxFileSize>5MB</maxFileSize>\r
+ </triggeringPolicy>\r
+ <encoder>\r
+ <pattern>${defaultPattern}</pattern>\r
+ </encoder>\r
+ </appender>\r
+\r
+ <appender name="asyncEELFSecurity"\r
+ class="ch.qos.logback.classic.AsyncAppender">\r
+ <queueSize>256</queueSize>\r
+ <discardingThreshold>0</discardingThreshold>\r
+ <appender-ref ref="EELFSecurity" />\r
+ </appender>\r
+\r
+ <!-- EELF Performance Appender. This appender is used to record performance \r
+ records. -->\r
+ <appender name="EELFPerformance"\r
+ class="ch.qos.logback.core.rolling.RollingFileAppender">\r
+ <file>${logDirectory}/${performanceLogName}.log</file>\r
+ <rollingPolicy\r
+ class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">\r
+ <fileNamePattern>${logDirectory}/${performanceLogName}.%i.log.zip\r
+ </fileNamePattern>\r
+ <minIndex>1</minIndex>\r
+ <maxIndex>9</maxIndex>\r
+ </rollingPolicy>\r
+ <triggeringPolicy\r
+ class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">\r
+ <maxFileSize>5MB</maxFileSize>\r
+ </triggeringPolicy>\r
+ <encoder>\r
+ <pattern>${defaultPattern}</pattern>\r
+ </encoder>\r
+ </appender>\r
+ <appender name="asyncEELFPerformance"\r
+ class="ch.qos.logback.classic.AsyncAppender">\r
+ <queueSize>256</queueSize>\r
+ <appender-ref ref="EELFPerformance" />\r
+ </appender>\r
+\r
+ <!-- EELF Server Appender. This appender is used to record Server related \r
+ logging events. The Server logger and appender are specializations of the \r
+ EELF application root logger and appender. This can be used to segregate \r
+ Server events from other components, or it can be eliminated to record these \r
+ events as part of the application root log. -->\r
+ <appender name="EELFServer"\r
+ class="ch.qos.logback.core.rolling.RollingFileAppender">\r
+ <file>${logDirectory}/${serverLogName}.log</file>\r
+ <rollingPolicy\r
+ class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">\r
+ <fileNamePattern>${logDirectory}/${serverLogName}.%i.log.zip\r
+ </fileNamePattern>\r
+ <minIndex>1</minIndex>\r
+ <maxIndex>9</maxIndex>\r
+ </rollingPolicy>\r
+ <triggeringPolicy\r
+ class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">\r
+ <maxFileSize>5MB</maxFileSize>\r
+ </triggeringPolicy>\r
+ <encoder>\r
+ <pattern>${defaultPattern}</pattern>\r
+ </encoder>\r
+ </appender>\r
+ <appender name="asyncEELFServer"\r
+ class="ch.qos.logback.classic.AsyncAppender">\r
+ <queueSize>256</queueSize>\r
+ <appender-ref ref="EELFServer" />\r
+ </appender>\r
+\r
+\r
+ <!-- EELF Policy Appender. This appender is used to record Policy engine \r
+ related logging events. The Policy logger and appender are specializations \r
+ of the EELF application root logger and appender. This can be used to segregate \r
+ Policy engine events from other components, or it can be eliminated to record \r
+ these events as part of the application root log. -->\r
+ <appender name="EELFPolicy"\r
+ class="ch.qos.logback.core.rolling.RollingFileAppender">\r
+ <file>${logDirectory}/${policyLogName}.log</file>\r
+ <rollingPolicy\r
+ class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">\r
+ <fileNamePattern>${logDirectory}/${policyLogName}.%i.log.zip\r
+ </fileNamePattern>\r
+ <minIndex>1</minIndex>\r
+ <maxIndex>9</maxIndex>\r
+ </rollingPolicy>\r
+ <triggeringPolicy\r
+ class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">\r
+ <maxFileSize>5MB</maxFileSize>\r
+ </triggeringPolicy>\r
+ <encoder>\r
+ <pattern>${defaultPattern}</pattern>\r
+ </encoder>\r
+ </appender>\r
+ <appender name="asyncEELFPolicy"\r
+ class="ch.qos.logback.classic.AsyncAppender">\r
+ <queueSize>256</queueSize>\r
+ <appender-ref ref="EELFPolicy" />\r
+ </appender>\r
+\r
+\r
+ <!-- EELF Audit Appender. This appender is used to record audit engine related \r
+ logging events. The audit logger and appender are specializations of the \r
+ EELF application root logger and appender. This can be used to segregate \r
+ Policy engine events from other components, or it can be eliminated to record \r
+ these events as part of the application root log. -->\r
+\r
+ <appender name="EELFAudit"\r
+ class="ch.qos.logback.core.rolling.RollingFileAppender">\r
+ <file>${logDirectory}/${auditLogName}.log</file>\r
+ <rollingPolicy\r
+ class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">\r
+ <fileNamePattern>${logDirectory}/${auditLogName}.%i.log.zip\r
+ </fileNamePattern>\r
+ <minIndex>1</minIndex>\r
+ <maxIndex>9</maxIndex>\r
+ </rollingPolicy>\r
+ <triggeringPolicy\r
+ class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">\r
+ <maxFileSize>5MB</maxFileSize>\r
+ </triggeringPolicy>\r
+ <encoder>\r
+ <pattern>${auditLoggerPattern}</pattern>\r
+ </encoder>\r
+ </appender>\r
+ <appender name="asyncEELFAudit"\r
+ class="ch.qos.logback.classic.AsyncAppender">\r
+ <queueSize>256</queueSize>\r
+ <appender-ref ref="EELFAudit" />\r
+ </appender>\r
+\r
+ <appender name="EELFMetrics"\r
+ class="ch.qos.logback.core.rolling.RollingFileAppender">\r
+ <file>${logDirectory}/${metricsLogName}.log</file>\r
+ <rollingPolicy\r
+ class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">\r
+ <fileNamePattern>${logDirectory}/${metricsLogName}.%i.log.zip\r
+ </fileNamePattern>\r
+ <minIndex>1</minIndex>\r
+ <maxIndex>9</maxIndex>\r
+ </rollingPolicy>\r
+ <triggeringPolicy\r
+ class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">\r
+ <maxFileSize>5MB</maxFileSize>\r
+ </triggeringPolicy>\r
+ <encoder>\r
+ <pattern>${metricsLoggerPattern}</pattern>\r
+ </encoder>\r
+ </appender>\r
+\r
+\r
+ <appender name="asyncEELFMetrics"\r
+ class="ch.qos.logback.classic.AsyncAppender">\r
+ <queueSize>256</queueSize>\r
+ <appender-ref ref="EELFMetrics" />\r
+ </appender>\r
+\r
+ <appender name="EELFError"\r
+ class="ch.qos.logback.core.rolling.RollingFileAppender">\r
+ <file>${logDirectory}/${errorLogName}.log</file>\r
+ <rollingPolicy\r
+ class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">\r
+ <fileNamePattern>${logDirectory}/${errorLogName}.%i.log.zip\r
+ </fileNamePattern>\r
+ <minIndex>1</minIndex>\r
+ <maxIndex>9</maxIndex>\r
+ </rollingPolicy>\r
+ <triggeringPolicy\r
+ class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">\r
+ <maxFileSize>5MB</maxFileSize>\r
+ </triggeringPolicy>\r
+ <encoder>\r
+ <pattern>${errorLoggerPattern}</pattern>\r
+ </encoder>\r
+ </appender>\r
+\r
+ <appender name="asyncEELFError"\r
+ class="ch.qos.logback.classic.AsyncAppender">\r
+ <queueSize>256</queueSize>\r
+ <appender-ref ref="EELFError" />\r
+ </appender>\r
+\r
+ <appender name="EELFDebug"\r
+ class="ch.qos.logback.core.rolling.RollingFileAppender">\r
+ <file>${debugLogDirectory}/${debugLogName}.log</file>\r
+ <rollingPolicy\r
+ class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">\r
+ <fileNamePattern>${debugLogDirectory}/${debugLogName}.%i.log.zip\r
+ </fileNamePattern>\r
+ <minIndex>1</minIndex>\r
+ <maxIndex>9</maxIndex>\r
+ </rollingPolicy>\r
+ <triggeringPolicy\r
+ class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">\r
+ <maxFileSize>5MB</maxFileSize>\r
+ </triggeringPolicy>\r
+ <encoder>\r
+ <pattern>${debugLoggerPattern}</pattern>\r
+ </encoder>\r
+ </appender>\r
+\r
+ <appender name="asyncEELFDebug"\r
+ class="ch.qos.logback.classic.AsyncAppender">\r
+ <queueSize>256</queueSize>\r
+ <appender-ref ref="EELFDebug" />\r
+ <includeCallerData>true</includeCallerData>\r
+ </appender>\r
+\r
+\r
+ <!-- ============================================================================ -->\r
+ <!-- EELF loggers -->\r
+ <!-- ============================================================================ -->\r
+ <logger name="com.att.eelf" level="${EELF_LEVEL:-info}" additivity="false">\r
+ <appender-ref ref="asyncEELF" />\r
+ </logger>\r
+ <logger name="com.att.eelf.security" level="${DECURITY_LEVEL:-info}" additivity="false">\r
+ <appender-ref ref="asyncEELFSecurity" />\r
+ </logger>\r
+ <logger name="com.att.eelf.perf" level="${PERF_LEVEL:-info}" additivity="false">\r
+ <appender-ref ref="asyncEELFPerformance" />\r
+ </logger>\r
+ <logger name="com.att.eelf.server" level="${SERVER_LEVEL:-info}" additivity="false">\r
+ <appender-ref ref="asyncEELFServer" />\r
+ </logger>\r
+ <logger name="com.att.eelf.policy" level="${POLICY_LEVEL:-info}" additivity="false">\r
+ <appender-ref ref="asyncEELFPolicy" />\r
+ </logger>\r
+ <logger name="com.att.eelf.audit" level="${AUDIT_LEVEL:-info}" additivity="false">\r
+ <appender-ref ref="asyncEELFAudit" />\r
+ </logger>\r
+\r
+ <logger name="com.att.eelf.metrics" level="${METRICS_LEVEL:-info}" additivity="false">\r
+ <appender-ref ref="asyncEELFMetrics" />\r
+ </logger>\r
+\r
+ <logger name="com.att.eelf.error" level="${ERROR_LEVEL:-error}"\r
+ additivity="false">\r
+ <appender-ref ref="asyncEELFError" />\r
+ </logger>\r
+\r
+ <logger name="com.att.eelf.debug" level="${DEBUG_LEVEL:-debug}"\r
+ additivity="false">\r
+ <appender-ref ref="asyncEELFDebug" />\r
+ </logger>\r
+\r
+ <root level="${ROOT_LEVEL:-INFO}">\r
+ <!-- appender-ref ref="STDOUT" / -->\r
+ <appender-ref ref="asyncEELF" />\r
+ </root>\r
+\r
+</configuration>\r
--- /dev/null
+#-------------------------------------------------------------------------------\r
+# Copyright © 2017-2018 AT&T Intellectual Property.\r
+# Modifications Copyright © 2018 IBM.\r
+# \r
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+# \r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+# \r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# \r
+# \r
+# Unless otherwise specified, all documentation contained herein is licensed\r
+# under the Creative Commons License, Attribution 4.0 Intl. (the â??Licenseâ?\9d);\r
+# you may not use this documentation except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+# \r
+# https://creativecommons.org/licenses/by/4.0/\r
+# \r
+# Unless required by applicable law or agreed to in writing, documentation\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+#-------------------------------------------------------------------------------\r
+\r
+# Generated from org.onap.optf.cmso.common.LogMessages\r
+SEARCH_SCHEDULE_REQUEST_DETAILS SEARCH_SCHEDULE_REQUEST_DETAILS|Search Schedule Request Details {0} from {1}: {2}|No resolution needed|No action is required\r
+SEARCH_SCHEDULE_REQUEST SEARCH_SCHEDULE_REQUEST|Search Schedule Request {0} from {1}: {2} : {3}|No resolution needed|No action is required\r
+CREATE_SCHEDULE_REQUEST CREATE_SCHEDULE_REQUEST|Create Schedule Request {0} from {1}: {2} : {3}|No resolution needed|No action is required\r
+DELETE_SCHEDULE_REQUEST DELETE_SCHEDULE_REQUEST|Delete Schedule Request {0} from {1}: {2} : {3}|No resolution needed|No action is required\r
+GET_SCHEDULE_REQUEST_INFO GET_SCHEDULE_REQUEST_INFO|Get Schedule Request Info {0} from {1}: {2} : {3}|No resolution needed|No action is required\r
+PROCESS_OPTIMIZER_CALLBACK PROCESS_OPTIMIZER_CALLBACK|Change management optimizer callback {0} from {1}: {2} |No resolution needed|No action is required\r
+APPROVE_SCHEDULE_REQUEST APPROVE_SCHEDULE_REQUEST|Approve Schedule Request {0} from {1}: {2} : {3}|No resolution needed|No action is required\r
+SCHEDULE_ALREADY_EXISTS SCHEDULE_ALREADY_EXISTS|Schedule already exists domain={0} schedule id={1}|No resolution needed|No action is required\r
+SCHEDULE_NOT_FOUND SCHEDULE_NOT_FOUND|Schedule not found domain={0} schedule id={1}|No resolution needed|No action is required\r
+INVALID_ATTRIBUTE INVALID_ATTRIBUTE|Invalid attribute {0}={1}|No resolution needed|No action is required\r
+MISSING_REQUIRED_ATTRIBUTE MISSING_REQUIRED_ATTRIBUTE|Missing required attribute '{0}'|No resolution needed|No action is required\r
+INVALID_REQUEST INVALID_REQUEST|The input data structure is incorrect|No resolution needed|No action is required\r
+REQUEST_TIMED_OUT REQUEST_TIMED_OUT|Request timed out.|No resolution needed|No action is required\r
+UNEXPECTED_EXCEPTION UNEXPECTED_EXCEPTION|Unexpected exception encountered during processing. Please contact support : {0}|No resolution needed|No action is required\r
+AUTHORIZATION_FAILED AUTHORIZATION_FAILED|Authorization Failed|No resolution needed|No action is required\r
+UNDEFINED_DOMAIN_DATA_ATTRIBUTE UNDEFINED_DOMAIN_DATA_ATTRIBUTE|Domain data attribute not defined domain={0} name={1} value={2}|No resolution needed|No action is required\r
+UNDEFINED_FILTER_ATTRIBUTE UNDEFINED_FILTER_ATTRIBUTE|Undefined filter attribute {0}|No resolution needed|No action is required\r
+INVALID_DATE_FILTER INVALID_DATE_FILTER|Invalid date filter provided {0}=(1}|No resolution needed|No action is required\r
+OPTIMIZER_QUARTZ_JOB OPTIMIZER_QUARTZ_JOB|Quartz scheduling of OptimizerQuartzJob: {0}|No resolution needed|No action is required\r
+OPTIMIZER_EXCEPTION OPTIMIZER_EXCEPTION|Exception making client call to optimizer {0}|No resolution needed|No action is required\r
+OPTIMIZER_CALLBACK_STATE_ERROR OPTIMIZER_CALLBACK_STATE_ERROR|Optimizer callback on schedule in invalid state. Should be {0} but was {1}.|No resolution needed|No action is required\r
+CHANGE_MANAGEMENT_GROUP_NOT_FOUND CHANGE_MANAGEMENT_GROUP_NOT_FOUND|ChangeManagementGroup not found on optimizer callback scheduleId={0} groupId={1}|No resolution needed|No action is required\r
+UNABLE_TO_ALLOCATE_VNF_TIMESLOTS UNABLE_TO_ALLOCATE_VNF_TIMESLOTS|Unable to allocate VNF timeslots with Optimizer results startTime={0}, latestStartTime={1}, totalDuration={2}, concurrency={3} nvfs={4}|No resolution needed|No action is required\r
+UNABLE_TO_LOCATE_SCHEDULE_DETAIL UNABLE_TO_LOCATE_SCHEDULE_DETAIL|Unable to locate ChangeManagementSchedule for VNF. scheduleId={0}, groupId={1}, vnfName={2}|No resolution needed|No action is required\r
+CM_JOB CM_JOB|Quartz scheduling of CmJob: {0}|No resolution needed|No action is required\r
+CM_QUARTZ_JOB CM_QUARTZ_JOB|Quartz scheduling of CmQuartzJob: {0}|No resolution needed|No action is required\r
+NOT_PENDING_APPROVAL NOT_PENDING_APPROVAL|Approval request received for schedule that is not in Pending Approval state: domain={0} scheduleId={1} state={3}|No resolution needed|No action is required\r
+SCHEDULE_PAST_DUE SCHEDULE_PAST_DUE|Attempt to dispatch an event that is Past due scheduleId={0}, vnf={1}, now={2}, startTime={3}|No resolution needed|No action is required\r
+MSO_POLLING_MISSING_SCHEDULE MSO_POLLING_MISSING_SCHEDULE|Attempt to poll MSO for request id {1} for missing ChangeManagementSchedule id={0}|No resolution needed|No action is required\r
+MSO_STATUS_JOB MSO_STATUS_JOB|Polling MSO {0} for requestId={1} for id={2}|No resolution needed|No action is required\r
+UNEXPECTED_RESPONSE UNEXPECTED_RESPONSE|Unexpected response from {0} HTTP Status={1} : {2}|No resolution needed|No action is required\r
+SCHEDULE_STATUS_JOB SCHEDULE_STATUS_JOB|Quartz scheduling of ScheduleStatusJob: {0}|No resolution needed|No action is required\r
+CM_TICKET_NOT_APPROVED CM_TICKET_NOT_APPROVED|Attempt to dispatch a change management event that has no TM Ticket approved. scheduleId={0} VNF Name={1} TM ChangeId={2} Status={3} Approval Status={4}|No resolution needed|No action is required\r
+MULTIPLE_GROUPS_NOT_SUPPORTED MULTIPLE_GROUPS_NOT_SUPPORTED|Multiple groups not supported on immediate requests|No resolution needed|No action is required\r
+TM_CREATE_CHANGE_RECORD TM_CREATE_CHANGE_RECORD|TM Create Change Record:{0} : Schedule ID: {1}|No resolution needed|No action is required\r
+TM_LIST TM_LIST|TM list:{0} : URL : {1}|No resolution needed|No action is required\r
+TM_API TM_API|TM API Call: URL : {0}|No resolution needed|No action is required\r
+UNABLE_TO_CREATE_CHANGE_TICKET UNABLE_TO_CREATE_CHANGE_TICKET|Unable to create change ticket in TM: Schedule ID: {0} : Reason : {1}|No resolution needed|No action is required\r
+TM_UPDATE_CHECKLIST TM_UPDATE_CHECKLIST|TM Fetch Checklist:{0} : Schedule ID: {1} : Change Id : {2} : URL : {3}|No resolution needed|No action is required\r
+OPTIMIZER_REQUEST OPTIMIZER_REQUEST|Optimi Request:{0} : Schedule ID: {1} : URL : {2}|No resolution needed|No action is required\r
+TM_CLOSE_CHANGE_RECORD TM_CLOSE_CHANGE_RECORD|TM Close Change Record:{0} : Schedule ID: {1} : Change Id : {2}|No resolution needed|No action is required\r
+UNABLE_TO_CLOSE_CHANGE_TICKET UNABLE_TO_CLOSE_CHANGE_TICKET|Unable to close change ticket in TM: Schedule ID: {0} : changeid: {1} : Reason: {2}|No resolution needed|No action is required\r
+CANNOT_CANCEL_IN_PROGRESS CANNOT_CANCEL_IN_PROGRESS|Cannot delete/cancel a schedule with events in progress.|No resolution needed|No action is required\r
+UNABLE_TO_PARSE_SCHEDULING_INFO UNABLE_TO_PARSE_SCHEDULING_INFO|Cannot parse scheduling info.|No resolution needed|No action is required\r
+UNABLE_TO_LOCATE_CHANGE_RECORD UNABLE_TO_LOCATE_CHANGE_RECORD|Unable to locate TM change record {2} to check status before displacth of {1} for schedulId={0}|No resolution needed|No action is required\r
+INVALID_CHANGE_WINDOW INVALID_CHANGE_WINDOW|Change window end time {1} must be after start time {0}|No resolution needed|No action is required\r
+NODE_LIST_CONTAINS_EMTPY_NODE NODE_LIST_CONTAINS_EMTPY_NODE|vnfDetails node list contains at least one empty node.|No resolution needed|No action is required\r
+SO_API SO_API|SO Poll Request {0}|No resolution needed|No action is required\r
+EXPECTED_EXCEPTION EXPECTED_EXCEPTION|Expected exception encountered during processing. Make Sonar happy: {0}|No resolution needed|No action is required\r
+TM_UPDATE_CHANGE_RECORD TM_UPDATE_CHANGE_RECORD|TM Update Change Record:{0} : Schedule ID: {1} : Change Id : {2} : URL : {3}|No resolution needed|No action is required\r
+UNABLE_TO_UPDATE_CHANGE_TICKET UNABLE_TO_UPDATE_CHANGE_TICKET|Unable to update change ticket in TM: Schedule ID: {0} : changeid: {1} : Reason: {2}|No resolution needed|No action is required\r
--- /dev/null
+{\r
+ "swagger" : "2.0",\r
+ "info" : {\r
+ "version" : "0.1.0-SNAPSHOT",\r
+ "title" : "cmso"\r
+ },\r
+ "basePath" : "/cmso",\r
+ "paths" : {\r
+ "/{apiVersion}/admin/{id}" : {\r
+ "get" : {\r
+ "summary" : "",\r
+ "description" : "Returns encrypted value of id.",\r
+ "operationId" : "exec",\r
+ "produces" : [ "text/plain" ],\r
+ "parameters" : [ {\r
+ "name" : "apiVersion",\r
+ "in" : "path",\r
+ "description" : "v1|v2",\r
+ "required" : true,\r
+ "type" : "string",\r
+ "default" : "v1"\r
+ }, {\r
+ "name" : "id",\r
+ "in" : "path",\r
+ "description" : "Identifier",\r
+ "required" : true,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "csv"\r
+ } ],\r
+ "responses" : {\r
+ "200" : {\r
+ "description" : "OK",\r
+ "schema" : {\r
+ "type" : "string"\r
+ }\r
+ },\r
+ "400" : {\r
+ "description" : "Request failed"\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "/{apiVersion}/health" : {\r
+ "get" : {\r
+ "summary" : "",\r
+ "description" : "Returns health status of server.",\r
+ "operationId" : "healthCheck",\r
+ "produces" : [ "application/json" ],\r
+ "parameters" : [ {\r
+ "name" : "apiVersion",\r
+ "in" : "path",\r
+ "description" : "v1",\r
+ "required" : true,\r
+ "type" : "string",\r
+ "default" : "v1"\r
+ }, {\r
+ "name" : "checkInterfaces",\r
+ "in" : "query",\r
+ "description" : "Check Interfaces",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "boolean",\r
+ "default" : true\r
+ },\r
+ "collectionFormat" : "multi"\r
+ } ],\r
+ "responses" : {\r
+ "200" : {\r
+ "description" : "OK",\r
+ "schema" : {\r
+ "$ref" : "#/definitions/HealthCheckMessage"\r
+ }\r
+ },\r
+ "400" : {\r
+ "description" : "Not healthy",\r
+ "schema" : {\r
+ "$ref" : "#/definitions/HealthCheckMessage"\r
+ }\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "/{apiVersion}/optimizerCallback" : {\r
+ "post" : {\r
+ "summary" : "",\r
+ "description" : "Processes optimizer results callback to a Pending Optimization schedule.",\r
+ "operationId" : "sniroCallback",\r
+ "produces" : [ "application/json" ],\r
+ "parameters" : [ {\r
+ "name" : "apiVersion",\r
+ "in" : "path",\r
+ "description" : "v1",\r
+ "required" : true,\r
+ "type" : "string",\r
+ "default" : "v1"\r
+ }, {\r
+ "in" : "body",\r
+ "name" : "body",\r
+ "description" : "Return schedules > lastScheduleId",\r
+ "required" : false,\r
+ "schema" : {\r
+ "$ref" : "#/definitions/Response from schedule optimizer"\r
+ }\r
+ } ],\r
+ "responses" : {\r
+ "200" : {\r
+ "description" : "OK"\r
+ },\r
+ "500" : {\r
+ "description" : "Unexpected Runtime error"\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "/{apiVersion}/schedules" : {\r
+ "get" : {\r
+ "summary" : "",\r
+ "description" : "Returns a list of Scheduler Requests based upon the filter criteria.",\r
+ "operationId" : "searchScheduleRequests",\r
+ "produces" : [ "application/json" ],\r
+ "parameters" : [ {\r
+ "name" : "apiVersion",\r
+ "in" : "path",\r
+ "description" : "v1",\r
+ "required" : true,\r
+ "type" : "string",\r
+ "default" : "v1"\r
+ }, {\r
+ "name" : "includeDetails",\r
+ "in" : "query",\r
+ "description" : "Include details",\r
+ "required" : false,\r
+ "type" : "boolean",\r
+ "default" : false\r
+ }, {\r
+ "name" : "scheduleId",\r
+ "in" : "query",\r
+ "description" : "Schedule identifier",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "scheduleName",\r
+ "in" : "query",\r
+ "description" : "Schedule name",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "userId",\r
+ "in" : "query",\r
+ "description" : "SCheduler creator User id of ",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "status",\r
+ "in" : "query",\r
+ "description" : "Schedule status",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "createDateTime",\r
+ "in" : "query",\r
+ "description" : "Creation date and time (<low date>[,<hi date>])",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "optimizerStatus",\r
+ "in" : "query",\r
+ "description" : "Optimizer status",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "WorkflowName",\r
+ "in" : "query",\r
+ "description" : "Workflow",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ } ],\r
+ "responses" : {\r
+ "200" : {\r
+ "description" : "OK",\r
+ "schema" : {\r
+ "type" : "array",\r
+ "items" : {\r
+ "$ref" : "#/definitions/Schedule"\r
+ }\r
+ }\r
+ },\r
+ "404" : {\r
+ "description" : "No records found",\r
+ "schema" : {\r
+ "$ref" : "#/definitions/CMSRequestError"\r
+ }\r
+ },\r
+ "500" : {\r
+ "description" : "Unexpected Runtime error"\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "/{apiVersion}/schedules/scheduleDetails" : {\r
+ "get" : {\r
+ "summary" : "",\r
+ "description" : "Returns a list of Schedule request details based upon the filter criteria.",\r
+ "operationId" : "searchScheduleRequestDetails",\r
+ "produces" : [ "application/json" ],\r
+ "parameters" : [ {\r
+ "name" : "apiVersion",\r
+ "in" : "path",\r
+ "description" : "v1",\r
+ "required" : true,\r
+ "type" : "string",\r
+ "default" : "v1"\r
+ }, {\r
+ "name" : "request.scheduleId",\r
+ "in" : "query",\r
+ "description" : "Schedule identifier",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "request.scheduleName",\r
+ "in" : "query",\r
+ "description" : "Schedule name",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "request.userId",\r
+ "in" : "query",\r
+ "description" : "Scheduler creator User id of ",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "request.status",\r
+ "in" : "query",\r
+ "description" : "Schedule status",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "request.createDateTime",\r
+ "in" : "query",\r
+ "description" : "Creation date and time (<low date>[,<hi date>])",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "request.optimizerStatus",\r
+ "in" : "query",\r
+ "description" : "Optimizer status",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "request.approvalUserId",\r
+ "in" : "query",\r
+ "description" : "Request Approval user id",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "request.approvalStatus",\r
+ "in" : "query",\r
+ "description" : "Request Approval status",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "request.approvalType",\r
+ "in" : "query",\r
+ "description" : "Request Approval type",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "WorkflowName",\r
+ "in" : "query",\r
+ "description" : "Workflow",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "vnfName",\r
+ "in" : "query",\r
+ "description" : "VNF Name",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "vnfId",\r
+ "in" : "query",\r
+ "description" : "VNF Id",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "vnfStatus",\r
+ "in" : "query",\r
+ "description" : "VNF Status",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "startTime",\r
+ "in" : "query",\r
+ "description" : "Start time <low>,<high>",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "finishTime",\r
+ "in" : "query",\r
+ "description" : "Finish time <low>,<high>",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "lastInstanceTime",\r
+ "in" : "query",\r
+ "description" : "Last instance start time <low>,<high>",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "tmChangeId",\r
+ "in" : "query",\r
+ "description" : "TM Change Ticket Change Id",\r
+ "required" : false,\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ },\r
+ "collectionFormat" : "multi"\r
+ }, {\r
+ "name" : "maxSchedules",\r
+ "in" : "query",\r
+ "description" : "Maximum number of schedules to return",\r
+ "required" : false,\r
+ "type" : "integer",\r
+ "format" : "int32"\r
+ }, {\r
+ "name" : "lastScheduleId",\r
+ "in" : "query",\r
+ "description" : "Return schedules > lastScheduleId",\r
+ "required" : false,\r
+ "type" : "string"\r
+ }, {\r
+ "name" : "request.concurrencyLimit",\r
+ "in" : "query",\r
+ "description" : "Return concurrencyLimit",\r
+ "required" : false,\r
+ "type" : "integer",\r
+ "format" : "int32"\r
+ } ],\r
+ "responses" : {\r
+ "200" : {\r
+ "description" : "OK",\r
+ "schema" : {\r
+ "type" : "array",\r
+ "items" : {\r
+ "$ref" : "#/definitions/CmDetailsMessage"\r
+ }\r
+ }\r
+ },\r
+ "404" : {\r
+ "description" : "No records found",\r
+ "schema" : {\r
+ "$ref" : "#/definitions/CMSRequestError"\r
+ }\r
+ },\r
+ "500" : {\r
+ "description" : "Unexpected Runtime error"\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "/{apiVersion}/schedules/{scheduleId}" : {\r
+ "get" : {\r
+ "summary" : "",\r
+ "description" : "Retrieve the schedule request for scheduleId",\r
+ "operationId" : "getScheduleRequestInfo",\r
+ "produces" : [ "application/json" ],\r
+ "parameters" : [ {\r
+ "name" : "apiVersion",\r
+ "in" : "path",\r
+ "description" : "v1",\r
+ "required" : true,\r
+ "type" : "string",\r
+ "default" : "v1"\r
+ }, {\r
+ "name" : "scheduleId",\r
+ "in" : "path",\r
+ "description" : "Schedule id to uniquely identify the schedule info being retrieved.",\r
+ "required" : true,\r
+ "type" : "string"\r
+ } ],\r
+ "responses" : {\r
+ "200" : {\r
+ "description" : "OK",\r
+ "schema" : {\r
+ "$ref" : "#/definitions/Schedule"\r
+ }\r
+ },\r
+ "404" : {\r
+ "description" : "No record found"\r
+ },\r
+ "500" : {\r
+ "description" : "Unexpected Runtime error"\r
+ }\r
+ }\r
+ },\r
+ "post" : {\r
+ "summary" : "",\r
+ "description" : "Creates a schedule request for scheduleId",\r
+ "operationId" : "createScheduleRequest",\r
+ "produces" : [ "application/json" ],\r
+ "parameters" : [ {\r
+ "name" : "apiVersion",\r
+ "in" : "path",\r
+ "description" : "v1",\r
+ "required" : true,\r
+ "type" : "string",\r
+ "default" : "v1"\r
+ }, {\r
+ "name" : "scheduleId",\r
+ "in" : "path",\r
+ "description" : "Schedule id to uniquely identify the schedule request being created.",\r
+ "required" : true,\r
+ "type" : "string"\r
+ }, {\r
+ "in" : "body",\r
+ "name" : "body",\r
+ "description" : "Data for creating a schedule request for the given schedule id",\r
+ "required" : false,\r
+ "schema" : {\r
+ "$ref" : "#/definitions/CMSMessage"\r
+ }\r
+ } ],\r
+ "responses" : {\r
+ "202" : {\r
+ "description" : "Schedule request accepted for optimization."\r
+ },\r
+ "409" : {\r
+ "description" : "Schedule request already exists for this schedule id.",\r
+ "schema" : {\r
+ "$ref" : "#/definitions/CMSRequestError"\r
+ }\r
+ },\r
+ "500" : {\r
+ "description" : "Unexpected Runtime error"\r
+ }\r
+ }\r
+ },\r
+ "delete" : {\r
+ "summary" : "",\r
+ "description" : "Cancels the schedule request for scheduleId",\r
+ "operationId" : "deleteScheduleRequest",\r
+ "produces" : [ "application/json" ],\r
+ "parameters" : [ {\r
+ "name" : "apiVersion",\r
+ "in" : "path",\r
+ "description" : "v1",\r
+ "required" : true,\r
+ "type" : "string",\r
+ "default" : "v1"\r
+ }, {\r
+ "name" : "scheduleId",\r
+ "in" : "path",\r
+ "description" : "Schedule id to uniquely identify the schedule request being deleted.",\r
+ "required" : true,\r
+ "type" : "string"\r
+ } ],\r
+ "responses" : {\r
+ "204" : {\r
+ "description" : "Delete successful"\r
+ },\r
+ "404" : {\r
+ "description" : "No record found",\r
+ "schema" : {\r
+ "$ref" : "#/definitions/CMSRequestError"\r
+ }\r
+ },\r
+ "500" : {\r
+ "description" : "Unexpected Runtime error"\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "/{apiVersion}/schedules/{scheduleId}/approvals" : {\r
+ "post" : {\r
+ "summary" : "",\r
+ "description" : "Adds an accept/reject approval status to the schedule request identified by scheduleId",\r
+ "operationId" : "approveScheduleRequest",\r
+ "produces" : [ "application/json" ],\r
+ "parameters" : [ {\r
+ "name" : "apiVersion",\r
+ "in" : "path",\r
+ "description" : "v1",\r
+ "required" : true,\r
+ "type" : "string",\r
+ "default" : "v1"\r
+ }, {\r
+ "name" : "scheduleId",\r
+ "in" : "path",\r
+ "description" : "Schedule id to uniquely identify the schedule request being accepted or rejected.",\r
+ "required" : true,\r
+ "type" : "string"\r
+ }, {\r
+ "in" : "body",\r
+ "name" : "body",\r
+ "description" : "Accept or reject approval message",\r
+ "required" : false,\r
+ "schema" : {\r
+ "$ref" : "#/definitions/Schedule Approval Request"\r
+ }\r
+ } ],\r
+ "responses" : {\r
+ "200" : {\r
+ "description" : "OK"\r
+ },\r
+ "404" : {\r
+ "description" : "No record found"\r
+ },\r
+ "500" : {\r
+ "description" : "Unexpected Runtime error"\r
+ }\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "definitions" : {\r
+ "CMSMessage" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "domain" : {\r
+ "type" : "string",\r
+ "description" : "Schedule domain : ChangeManagement"\r
+ },\r
+ "scheduleId" : {\r
+ "type" : "string",\r
+ "description" : "Schedule id that must be unique within the domain. Use of UUID is highly recommended."\r
+ },\r
+ "scheduleName" : {\r
+ "type" : "string",\r
+ "description" : "User provided name of the schedule (deaults to scheduleId"\r
+ },\r
+ "userId" : {\r
+ "type" : "string",\r
+ "description" : "ATTUID of the user requesting the schedule."\r
+ },\r
+ "domainData" : {\r
+ "type" : "array",\r
+ "description" : "Domain data as name value/pairs. (i.e. CallbackUrl, CallbackData, WorkflowName)",\r
+ "items" : {\r
+ "type" : "object",\r
+ "additionalProperties" : {\r
+ "type" : "string"\r
+ }\r
+ }\r
+ },\r
+ "schedulingInfo" : {\r
+ "$ref" : "#/definitions/Change Management Scheduling Info"\r
+ }\r
+ }\r
+ },\r
+ "CMSRequestError" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "requestError" : {\r
+ "$ref" : "#/definitions/RequestError"\r
+ }\r
+ }\r
+ },\r
+ "CMSchedule" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "groupId" : {\r
+ "type" : "string"\r
+ },\r
+ "startTime" : {\r
+ "type" : "string"\r
+ },\r
+ "finishTime" : {\r
+ "type" : "string"\r
+ },\r
+ "latestInstanceStartTime" : {\r
+ "type" : "string"\r
+ },\r
+ "node" : {\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "Change Management Group" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "finishTime" : {\r
+ "type" : "string",\r
+ "description" : "Date/time by which all of the workflows should be completed."\r
+ },\r
+ "groupId" : {\r
+ "type" : "string",\r
+ "description" : "Name of the group of VNFs to be scheduled"\r
+ },\r
+ "lastInstanceStartTime" : {\r
+ "type" : "string",\r
+ "description" : "The latest date/time by which a workflow is to be started."\r
+ },\r
+ "startTime" : {\r
+ "type" : "string",\r
+ "description" : "The date/time when workflows are to be started."\r
+ },\r
+ "additionalDurationInSecs" : {\r
+ "type" : "integer",\r
+ "format" : "int32",\r
+ "description" : "Time added to the workflow interval to allow for rollback in case of failure."\r
+ },\r
+ "concurrencyLimit" : {\r
+ "type" : "integer",\r
+ "format" : "int32",\r
+ "description" : "The maximum number of workflows that should be started simultaneiously."\r
+ },\r
+ "normalDurationInSecs" : {\r
+ "type" : "integer",\r
+ "format" : "int32",\r
+ "description" : "Expected duration of a successful workflow execution."\r
+ },\r
+ "policyId" : {\r
+ "type" : "string",\r
+ "description" : "The name of the schedule optimization policy used by the change management schedule optimizer."\r
+ },\r
+ "changeManagementSchedules" : {\r
+ "type" : "array",\r
+ "description" : "The list of VNF workflows scheduled.",\r
+ "items" : {\r
+ "$ref" : "#/definitions/Change Management Schedule"\r
+ }\r
+ }\r
+ },\r
+ "description" : "Scheduling critirea for a group of VNFs"\r
+ },\r
+ "Change Management Schedule" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "tmChangeId" : {\r
+ "type" : "string",\r
+ "description" : "TM Change Id"\r
+ },\r
+ "tmStatus" : {\r
+ "type" : "string",\r
+ "description" : "TM ticket status",\r
+ "enum" : [ "<null>", "Closed" ]\r
+ },\r
+ "tmApprovalStatus" : {\r
+ "type" : "string",\r
+ "description" : "TM ticket approval status",\r
+ "enum" : [ "<null>", "Approved" ]\r
+ },\r
+ "finishTime" : {\r
+ "type" : "string",\r
+ "description" : "Anticipated time of completion based upon start time and duration"\r
+ },\r
+ "startTime" : {\r
+ "type" : "string",\r
+ "description" : "Start time of this VNF workflow assigned by Scheduler based upon the group start time returned by the optimizer and concurrency."\r
+ },\r
+ "status" : {\r
+ "type" : "string",\r
+ "description" : "Status of the VNF.",\r
+ "enum" : [ "See CMSStatusEnum" ]\r
+ },\r
+ "vnfName" : {\r
+ "type" : "string",\r
+ "description" : "Name of the VNF."\r
+ },\r
+ "dispatchTime" : {\r
+ "type" : "string",\r
+ "description" : "Actual time the VNF workflow was dispatched."\r
+ },\r
+ "executionCompletedTime" : {\r
+ "type" : "string",\r
+ "description" : "Actual time the VNF workflow execution was completed as reported by MSO."\r
+ },\r
+ "msoRequestId" : {\r
+ "type" : "string",\r
+ "description" : "MSO Request ID of the workflow returned at dispatch time."\r
+ },\r
+ "msoStatus" : {\r
+ "type" : "string",\r
+ "description" : "Final MSO status.",\r
+ "enum" : [ "COMPLETED", "FAILED" ]\r
+ },\r
+ "msoMessage" : {\r
+ "type" : "string",\r
+ "description" : "MSO final status message."\r
+ },\r
+ "statusMessage" : {\r
+ "type" : "string",\r
+ "description" : "Scheduler status message."\r
+ },\r
+ "msoTime" : {\r
+ "type" : "string",\r
+ "description" : "Time of last poll for MSO status."\r
+ }\r
+ },\r
+ "description" : "VNF details for Change Management Schedule"\r
+ },\r
+ "Change Management Scheduling Info" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "normalDurationInSeconds" : {\r
+ "type" : "integer",\r
+ "format" : "int32",\r
+ "description" : "Expected duration (in seconds) of a successful execution of a single VNF change."\r
+ },\r
+ "additionalDurationInSeconds" : {\r
+ "type" : "integer",\r
+ "format" : "int32",\r
+ "description" : "Additional duration (in seconds) to be added to support backout of an unsuccessful VNF change."\r
+ },\r
+ "concurrencyLimit" : {\r
+ "type" : "integer",\r
+ "format" : "int32",\r
+ "description" : "Maximum number of VNF changes to schedule concurrently"\r
+ },\r
+ "policyId" : {\r
+ "type" : "string",\r
+ "description" : "Name of schedule optimization policy used by the change management cmso optimizer to determine available time slot"\r
+ },\r
+ "vnfDetails" : {\r
+ "type" : "array",\r
+ "description" : "Lists of the VNFs to be changed and the desired change windows",\r
+ "items" : {\r
+ "$ref" : "#/definitions/VNF Details"\r
+ }\r
+ }\r
+ },\r
+ "description" : "Details of schedule being requested"\r
+ },\r
+ "Change Window" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "startTime" : {\r
+ "type" : "string",\r
+ "description" : "Earliest time that a set of changes may begin."\r
+ },\r
+ "endTime" : {\r
+ "type" : "string",\r
+ "description" : "Latest time by which all changes must be completed"\r
+ }\r
+ },\r
+ "description" : "Time window within which the scheduler optimizer can schedule the changes for the group of NVFs"\r
+ },\r
+ "CmDetailsMessage" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "vnfName" : {\r
+ "type" : "string",\r
+ "description" : "Name of the VNF."\r
+ },\r
+ "status" : {\r
+ "type" : "string",\r
+ "description" : "Status of the VNF.",\r
+ "enum" : [ "See CMSStatusEnum" ]\r
+ },\r
+ "tmChangeId" : {\r
+ "type" : "string",\r
+ "description" : "TM Change Id"\r
+ },\r
+ "tmStatus" : {\r
+ "type" : "string",\r
+ "description" : "TM ticket status",\r
+ "enum" : [ "<null>", "Closed" ]\r
+ },\r
+ "tmApprovalStatus" : {\r
+ "type" : "string",\r
+ "description" : "TM ticket approval status",\r
+ "enum" : [ "<null>", "Approved" ]\r
+ },\r
+ "startTime" : {\r
+ "type" : "string",\r
+ "description" : "Start time of this VNF workflow assigned by Scheduler based upon the group start time returned by the optimizer and concurrency."\r
+ },\r
+ "finishTime" : {\r
+ "type" : "string",\r
+ "description" : "Anticipated time of completion based upon start time and duration"\r
+ },\r
+ "groupId" : {\r
+ "type" : "string",\r
+ "description" : "Name of the group of VNFs to be scheduled"\r
+ },\r
+ "lastInstanceStartTime" : {\r
+ "type" : "string",\r
+ "description" : "The latest date/time by which a workflow is to be started."\r
+ },\r
+ "policyId" : {\r
+ "type" : "string",\r
+ "description" : "Time of last poll for MSO status."\r
+ },\r
+ "dispatchTime" : {\r
+ "type" : "string",\r
+ "description" : "Actual time the VNF workflow was dispatched."\r
+ },\r
+ "executionCompletedTime" : {\r
+ "type" : "string",\r
+ "description" : "Actual time the VNF workflow execution was completed as reported by MSO."\r
+ },\r
+ "msoRequestId" : {\r
+ "type" : "string",\r
+ "description" : "MSO Request ID of the workflow returned at dispatch time."\r
+ },\r
+ "msoStatus" : {\r
+ "type" : "string",\r
+ "description" : "Final MSO status.",\r
+ "enum" : [ "COMPLETED", "FAILED" ]\r
+ },\r
+ "msoMessage" : {\r
+ "type" : "string",\r
+ "description" : "MSO final status message."\r
+ },\r
+ "statusMessage" : {\r
+ "type" : "string",\r
+ "description" : "Scheduler status message."\r
+ },\r
+ "msoTime" : {\r
+ "type" : "string",\r
+ "description" : "Time of last poll for MSO status."\r
+ },\r
+ "scheduleRequest" : {\r
+ "$ref" : "#/definitions/Schedule"\r
+ },\r
+ "approvals" : {\r
+ "type" : "array",\r
+ "items" : {\r
+ "$ref" : "#/definitions/Schedule Approval Request"\r
+ }\r
+ },\r
+ "schedulesId" : {\r
+ "type" : "integer",\r
+ "format" : "int32"\r
+ }\r
+ }\r
+ },\r
+ "Domain data" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "name" : {\r
+ "type" : "string"\r
+ },\r
+ "value" : {\r
+ "type" : "string"\r
+ }\r
+ },\r
+ "description" : "Domain specific data represented as name/value pairs"\r
+ },\r
+ "HealthCheckComponent" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "name" : {\r
+ "type" : "string"\r
+ },\r
+ "url" : {\r
+ "type" : "string"\r
+ },\r
+ "status" : {\r
+ "type" : "string"\r
+ },\r
+ "healthy" : {\r
+ "type" : "boolean"\r
+ }\r
+ }\r
+ },\r
+ "HealthCheckMessage" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "healthy" : {\r
+ "type" : "boolean"\r
+ },\r
+ "buildInfo" : {\r
+ "type" : "string"\r
+ },\r
+ "currentTime" : {\r
+ "type" : "string"\r
+ },\r
+ "hostname" : {\r
+ "type" : "string"\r
+ },\r
+ "components" : {\r
+ "type" : "array",\r
+ "items" : {\r
+ "$ref" : "#/definitions/HealthCheckComponent"\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "RequestError" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "messageId" : {\r
+ "type" : "string"\r
+ },\r
+ "text" : {\r
+ "type" : "string"\r
+ },\r
+ "variables" : {\r
+ "type" : "array",\r
+ "items" : {\r
+ "type" : "string"\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "Response from schedule optimizer" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "transactionId" : {\r
+ "type" : "string",\r
+ "description" : "Unique id of optimization request."\r
+ },\r
+ "scheduleId" : {\r
+ "type" : "string",\r
+ "description" : "Schedule id for which the optimization request was executed."\r
+ },\r
+ "requestState" : {\r
+ "type" : "string",\r
+ "description" : "State of the request as reported by the optimizer."\r
+ },\r
+ "status" : {\r
+ "type" : "string",\r
+ "description" : "Status of the request."\r
+ },\r
+ "description" : {\r
+ "type" : "string",\r
+ "description" : "Description of the request status."\r
+ },\r
+ "schedule" : {\r
+ "type" : "array",\r
+ "description" : "List of schedules returned, one per group. Only 1 group supported at this time.",\r
+ "items" : {\r
+ "$ref" : "#/definitions/CMSchedule"\r
+ }\r
+ }\r
+ },\r
+ "description" : "Asynchronous response to schedule oprimizer request."\r
+ },\r
+ "Schedule" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "createDateTime" : {\r
+ "type" : "string",\r
+ "description" : "Date/time schedule was created."\r
+ },\r
+ "optimizerDateTime" : {\r
+ "type" : "string"\r
+ },\r
+ "optimizerMessage" : {\r
+ "type" : "string"\r
+ },\r
+ "optimizerStatus" : {\r
+ "type" : "string"\r
+ },\r
+ "optimizerReturnDateTime" : {\r
+ "type" : "string"\r
+ },\r
+ "optimizerTransactionId" : {\r
+ "type" : "string"\r
+ },\r
+ "schedule" : {\r
+ "type" : "string"\r
+ },\r
+ "scheduleName" : {\r
+ "type" : "string"\r
+ },\r
+ "scheduleInfo" : {\r
+ "type" : "string"\r
+ },\r
+ "status" : {\r
+ "type" : "string"\r
+ },\r
+ "userId" : {\r
+ "type" : "string"\r
+ },\r
+ "domain" : {\r
+ "type" : "string"\r
+ },\r
+ "deleteDateTime" : {\r
+ "type" : "string"\r
+ },\r
+ "domainData" : {\r
+ "type" : "array",\r
+ "items" : {\r
+ "$ref" : "#/definitions/Domain data"\r
+ }\r
+ },\r
+ "scheduleApprovals" : {\r
+ "type" : "array",\r
+ "items" : {\r
+ "$ref" : "#/definitions/Schedule Approval"\r
+ }\r
+ },\r
+ "groups" : {\r
+ "type" : "array",\r
+ "items" : {\r
+ "$ref" : "#/definitions/Change Management Group"\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "Schedule Approval" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "approvalDateTime" : {\r
+ "type" : "string",\r
+ "description" : "Date/time schedule time slot was accepted/rejected."\r
+ },\r
+ "status" : {\r
+ "type" : "string",\r
+ "description" : "Approval status.",\r
+ "enum" : [ "Accepted", "Rejected" ]\r
+ },\r
+ "userId" : {\r
+ "type" : "string",\r
+ "description" : "ATTUID of the user accepting/rejecting the time slot."\r
+ }\r
+ },\r
+ "description" : "Details of a schedule approval/rejection."\r
+ },\r
+ "Schedule Approval Request" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "approvalUserId" : {\r
+ "type" : "string",\r
+ "description" : "ATTUID of the user accepting/rejecting the time slot."\r
+ },\r
+ "approvalStatus" : {\r
+ "type" : "string",\r
+ "description" : "Approval status.",\r
+ "enum" : [ "Accepted", "Rejected" ]\r
+ },\r
+ "approvalType" : {\r
+ "type" : "string",\r
+ "description" : "Type of approval.",\r
+ "enum" : [ "Tier 2" ]\r
+ },\r
+ "approvalDateTime" : {\r
+ "type" : "string",\r
+ "format" : "date-time"\r
+ }\r
+ },\r
+ "description" : "Request to accept or reject an optimized time slot."\r
+ },\r
+ "VNF Details" : {\r
+ "type" : "object",\r
+ "properties" : {\r
+ "groupId" : {\r
+ "type" : "string",\r
+ "description" : "Name of the list of VNFs to be changed as a group"\r
+ },\r
+ "node" : {\r
+ "type" : "array",\r
+ "description" : "Lists of the VNF names to be changed",\r
+ "items" : {\r
+ "type" : "string"\r
+ }\r
+ },\r
+ "changeWindow" : {\r
+ "type" : "array",\r
+ "description" : "Lists of desired change windows that the optimizer can select from. (Only 1 change window supported at this time)",\r
+ "items" : {\r
+ "$ref" : "#/definitions/Change Window"\r
+ }\r
+ }\r
+ },\r
+ "description" : "Details and scheduling criteria for the VNFs to be changed."\r
+ }\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+#-------------------------------------------------------------------------------\r
+# Copyright © 2017-2018 AT&T Intellectual Property.\r
+# Modifications Copyright © 2018 IBM.\r
+# \r
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+# \r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+# \r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+# \r
+# \r
+# Unless otherwise specified, all documentation contained herein is licensed\r
+# under the Creative Commons License, Attribution 4.0 Intl. (the â??Licenseâ?\9d);\r
+# you may not use this documentation except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+# \r
+# https://creativecommons.org/licenses/by/4.0/\r
+# \r
+# Unless required by applicable law or agreed to in writing, documentation\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+#-------------------------------------------------------------------------------\r
+\r
+# If the environment property system_properties_path contains a path to a file, \r
+# System properties created using the file. If the environment variable not present\r
+# system.properties in the class path is used for system property creation \r
+\r
+com.att.eelf.logging.file=logback.xml\r
+\r
+# change as per logback.xml path\r
+com.att.eelf.logging.path=\r
+logging.config=\r
+\r
+spring.config.location=etc/config/\r
+spring.config.name=application,cmso,optimizer,ticketmgt\r
+\r
+# Default parameters during application startup.\r
+info.build.artifact=@project.artifactId@\r
+info.build.name=@project.name@\r
+info.build.version=@project.version@\r