Springboot 2.0 upgrade
[so.git] / adapters / mso-requests-db-adapter / src / main / java / org / onap / so / adapters / requestsdb / ArchiveInfraRequestsScheduler.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Modifications Copyright (C) 2018 IBM.
8  * ================================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  * 
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  * 
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.so.adapters.requestsdb;
24
25 import java.util.ArrayList;
26 import java.util.Calendar;
27 import java.util.Date;
28 import java.util.List;
29
30 import org.onap.so.db.request.beans.ArchivedInfraRequests;
31 import org.onap.so.db.request.beans.InfraActiveRequests;
32 import org.onap.so.db.request.data.repository.ArchivedInfraRequestsRepository;
33 import org.onap.so.db.request.data.repository.InfraActiveRequestsRepository;
34 import org.onap.so.logger.MessageEnum;
35 import org.onap.so.logger.MsoLogger;
36 import org.springframework.beans.factory.annotation.Autowired;
37 import org.springframework.beans.factory.annotation.Value;
38 import org.springframework.data.domain.PageRequest;
39 import org.springframework.scheduling.annotation.Scheduled;
40 import org.springframework.stereotype.Component;
41
42 import net.javacrumbs.shedlock.core.SchedulerLock;
43
44 @Component
45 public class ArchiveInfraRequestsScheduler {
46         
47         private static MsoLogger logger = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA, ArchiveInfraRequestsScheduler.class);
48         
49         @Autowired
50         private InfraActiveRequestsRepository infraActiveRepo;
51         @Autowired 
52         private ArchivedInfraRequestsRepository archivedInfraRepo;
53         
54         @Value("${mso.infra-requests.archived.period}")
55         private int archivedPeriod;
56         
57         /**
58          * Runs the scheduler nightly
59          * [Seconds] [Minutes] [Hours] [Day of month] [Month] [Day of week] [Year]
60          */
61         @Scheduled(cron="0 0 1 * * ?")
62         @SchedulerLock(name = "archiveInfraRequestsScheduler")
63         public void infraRequestsScheduledTask() {
64                 logger.debug("Start of archiveInfraRequestsScheduler");
65                 
66                 Date currentDate= new Date();
67                 Calendar calendar = Calendar.getInstance();
68                 calendar.setTime(currentDate);
69                 calendar.add(Calendar.DATE, -archivedPeriod);
70                 Date archivingDate = calendar.getTime();
71                 
72                 logger.debug("Date before 6 months: "+ (calendar.get(Calendar.MONTH) + 1) + "-"
73                                         + calendar.get(Calendar.DATE) + "-" + calendar.get(Calendar.YEAR));
74                 
75                 List<InfraActiveRequests> requestsByEndTime = new ArrayList<>();
76                 PageRequest pageRequest = new PageRequest(0, 100);
77                 do {
78                         requestsByEndTime = infraActiveRepo.findByEndTimeLessThan(archivingDate, pageRequest);
79                         logger.debug(requestsByEndTime.size() + " requests to be archived based on End Time" );
80                         archiveInfraRequests(requestsByEndTime);
81                 } while(!requestsByEndTime.isEmpty());
82                 
83                 List<InfraActiveRequests> requestsByStartTime = new ArrayList<>();
84                 do {
85                         requestsByStartTime = infraActiveRepo.findByStartTimeLessThanAndEndTime(archivingDate, null, pageRequest);
86                         logger.debug(requestsByEndTime.size() + " requests to be archived based on Start Time" );
87                         archiveInfraRequests(requestsByStartTime);
88                 } while(!requestsByStartTime.isEmpty());
89                 
90                 logger.debug("End of archiveInfraRequestsScheduler");
91         }
92         
93         protected void archiveInfraRequests(List<InfraActiveRequests> requests) {
94                 List<ArchivedInfraRequests> newArchivedReqs = new ArrayList<>();
95                 List<InfraActiveRequests> oldInfraReqs = new ArrayList<>();
96                 
97                 for(InfraActiveRequests iar: requests) {
98                         ArchivedInfraRequests archivedInfra = new ArchivedInfraRequests();
99                         try {
100                                 archivedInfra.setAaiServiceId(iar.getAaiServiceId());
101                                 archivedInfra.setAction(iar.getAction());
102                                 archivedInfra.setAicCloudRegion(iar.getAicCloudRegion());
103                                 archivedInfra.setAicNodeClli(iar.getAicNodeClli());
104                                 archivedInfra.setCallBackUrl(iar.getCallBackUrl());
105                                 archivedInfra.setClientRequestId(iar.getClientRequestId());
106                                 archivedInfra.setConfigurationId(iar.getConfigurationId());
107                                 archivedInfra.setConfigurationName(iar.getConfigurationName());
108                                 archivedInfra.setCorrelator(iar.getCorrelator());
109                                 archivedInfra.setEndTime(iar.getEndTime());
110                                 archivedInfra.setLastModifiedBy(iar.getLastModifiedBy());
111                                 archivedInfra.setNetworkId(iar.getNetworkId());
112                                 archivedInfra.setNetworkName(iar.getNetworkName());
113                                 archivedInfra.setNetworkType(iar.getNetworkType());
114                                 archivedInfra.setOperationalEnvId(iar.getOperationalEnvId());
115                                 archivedInfra.setOperationalEnvName(iar.getOperationalEnvName());
116                                 archivedInfra.setProgress(iar.getProgress());
117                                 archivedInfra.setProvStatus(iar.getProvStatus());
118                                 archivedInfra.setRequestAction(iar.getRequestAction());
119                                 archivedInfra.setRequestBody(iar.getRequestBody());
120                                 archivedInfra.setRequestId(iar.getRequestId());
121                                 archivedInfra.setRequestorId(iar.getRequestorId());
122                                 archivedInfra.setRequestScope(iar.getRequestScope());
123                                 archivedInfra.setRequestStatus(iar.getRequestStatus());
124                                 archivedInfra.setRequestType(iar.getRequestType());
125                                 archivedInfra.setResponseBody(iar.getResponseBody());
126                                 archivedInfra.setServiceInstanceId(iar.getServiceInstanceId());
127                                 archivedInfra.setServiceInstanceName(iar.getServiceInstanceName());
128                                 archivedInfra.setServiceType(iar.getServiceType());
129                                 archivedInfra.setSource(iar.getSource());
130                                 archivedInfra.setStartTime(iar.getStartTime());
131                                 archivedInfra.setStatusMessage(iar.getStatusMessage());
132                                 archivedInfra.setTenantId(iar.getTenantId());
133                                 archivedInfra.setVfModuleId(iar.getVfModuleId());
134                                 archivedInfra.setVfModuleModelName(iar.getVfModuleModelName());
135                                 archivedInfra.setVfModuleName(iar.getVfModuleName());
136                                 archivedInfra.setVnfId(iar.getVnfId());
137                                 archivedInfra.setVnfName(iar.getVnfName());
138                                 archivedInfra.setVnfOutputs(iar.getVnfOutputs());
139                                 archivedInfra.setVnfParams(iar.getVnfParams());
140                                 archivedInfra.setVnfType(iar.getVnfType());
141                                 archivedInfra.setVolumeGroupId(iar.getVolumeGroupId());
142                                 archivedInfra.setVolumeGroupName(iar.getVolumeGroupName());
143                                 
144                                 newArchivedReqs.add(archivedInfra);
145                                 oldInfraReqs.add(iar);
146                         } catch(Exception e) {
147                                 logger.error(e);
148                                 logger.error(MessageEnum.RA_GENERAL_EXCEPTION, "", "", MsoLogger.ErrorCode.UnknownError, e.getMessage());
149                         }
150                 }
151                 
152                 logger.info("Creating archivedInfraRequest records: " + newArchivedReqs.size());
153                 archivedInfraRepo.saveAll(newArchivedReqs);
154                 
155                 logger.info("Deleting InfraActiveRequest records:  "+ oldInfraReqs.size());
156                 infraActiveRepo.deleteAll(oldInfraReqs);
157         }
158 }