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