Summary Table

Categories Total Count
PII 0
URL 0
DNS 0
EKL 0
IP 0
PORT 0
VsID 0
CF 0
AI 0
VPD 0
PL 0
Other 0

File Content

package gov.va.med.ars.service.impl;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import gov.va.med.ars.dao.ars.ARSMetadataStorageRepository;
import gov.va.med.ars.dao.ars.ArsAttachmentsStorageRepository;
import gov.va.med.ars.model.response.MetaDataResponse;
import gov.va.med.ars.service.IDashboardService;
import gov.va.med.domain.ars.ArsAttachmentsStorage;
import gov.va.med.domain.ars.ArsMetadataStorage;

@Service
public class DashboardServiceImpl implements IDashboardService {
private static final Logger logger=LogManager.getLogger(DashboardServiceImpl.class);
private static final String CURRENT_DATE_FORMAT = "MM/dd/yyyy";
SimpleDateFormat format = new SimpleDateFormat(CURRENT_DATE_FORMAT);
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
@Autowired
ARSMetadataStorageRepository metaDataRepository;

@Autowired
ArsAttachmentsStorageRepository attachmentRepository;


@Override
public MetaDataResponse getMetaDataDetails() {
List<BigDecimal> usedStorageStatistic;
List<BigDecimal> totalStorageStatistic;
BigDecimal peakUsage;
BigDecimal averageUsage;

logger.info("Result Count : metaDataRepository");
MetaDataResponse response = new MetaDataResponse();
try{
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DATE, -6);
Date dateBefore7Days = cal.getTime();

cal.setTime(new Date());
cal.add(Calendar.DATE, +1);
Date currentDate = cal.getTime();

logger.info("From Date " + formatter.parse(formatter.format(dateBefore7Days) )+ " To Date " + formatter.parse(formatter.format(currentDate)));
// Fetch all the details
List<ArsMetadataStorage> recordDetails=metaDataRepository.getRecords(formatter.parse(formatter.format(dateBefore7Days)),formatter.parse(formatter.format(currentDate)));

for(ArsMetadataStorage record:recordDetails){
logger.info("getTotalStorage"+ record.getTotalStorage() + " getAvailableStorage " + record.getAvailableStorage() + "getUsedStorage " +record.getUsedStorage() + "getStorageDate " +record.getStorageDate());
//logger.info("getTotalStorage"+ record.getTotalStorage());
}
logger.info("Size of record fetched " +recordDetails.size());
List<ArsMetadataStorage> weeklyDetails =new ArrayList<ArsMetadataStorage>();
if(recordDetails.size()<=7){
int count=0;
for(int recordCount=0;recordCount<recordDetails.size();recordCount++){
ArsMetadataStorage record=recordDetails.get(recordCount);
cal.setTime(new Date());
cal.add(Calendar.DATE, -(6-count));
String specificDay = format.format(cal.getTime());
String recordDate = format.format(record.getStorageDate());
if(recordDate.equals(specificDay)){
weeklyDetails.add(record);
}
else{
ArsMetadataStorage noData=new ArsMetadataStorage();
noData.setTotalStorage(new BigDecimal(0));
noData.setAvailableStorage(new BigDecimal(0));
noData.setUsedStorage(new BigDecimal(0));
noData.setStorageDate(format.parse(format.format(cal.getTime())));
weeklyDetails.add(noData);
if(count<6)
recordCount--;
}
count++;

}
//Find the days for which data is not present and insert data in those
/* ArsMetadataStorage noData=new ArsMetadataStorage();
noData.setTotalStorage(new BigDecimal(0));
noData.setAvailableStorage(new BigDecimal(0));
noData.setUsedStorage(new BigDecimal(0));
for(int missingcount=0;missingcount<=(7-weeklyDetails.size());missingcount++){
weeklyDetails.add(0, noData);
}*/

if(count<7){
while(count<7){
cal.setTime(new Date());
cal.add(Calendar.DATE, -(6-count));
ArsMetadataStorage noData=new ArsMetadataStorage();
noData.setTotalStorage(new BigDecimal(0));
noData.setAvailableStorage(new BigDecimal(0));
noData.setUsedStorage(new BigDecimal(0));
noData.setStorageDate(format.parse(format.format(cal.getTime())));
weeklyDetails.add(noData);
count++;
}
}
}

logger.info("Size of record modified " +weeklyDetails.size());

usedStorageStatistic=new ArrayList<BigDecimal>();
totalStorageStatistic=new ArrayList<BigDecimal>();
peakUsage=new BigDecimal(0);
averageUsage=new BigDecimal(0);
for(ArsMetadataStorage record:weeklyDetails){
usedStorageStatistic.add(record.getUsedStorage());
totalStorageStatistic.add(record.getTotalStorage());
if(peakUsage.compareTo(record.getUsedStorage())==-1){
peakUsage=record.getUsedStorage();
}
// averageUsage=averageUsage.add(record.getUsedStorage());
logger.info("getTotalStorage"+ record.getTotalStorage() + " getAvailableStorage " + record.getAvailableStorage() + "getUsedStorage " +record.getUsedStorage() + "getStorageDate " +record.getStorageDate());
}
cal.setTime(new Date());
cal.add(Calendar.DATE, -7);
Date dateBeforeWeek = cal.getTime();
logger.info("dateBeforeWeek "+dateBeforeWeek);
ArsMetadataStorage recordBeforeWeek = metaDataRepository.recordBeforeWeek(formatter.format(dateBeforeWeek));
if(recordBeforeWeek==null){
averageUsage=weeklyDetails.get(weeklyDetails.size()-1).getUsedStorage().divide(new BigDecimal(7),2,RoundingMode.HALF_UP);
}
else
{
averageUsage=weeklyDetails.get(weeklyDetails.size()-1).getUsedStorage().subtract(recordBeforeWeek.getUsedStorage()).divide(new BigDecimal(7),2,RoundingMode.HALF_UP);
}
response.setTotalStorage(weeklyDetails.get(weeklyDetails.size()-1).getTotalStorage());
response.setAvailableStorage(weeklyDetails.get(weeklyDetails.size()-1).getAvailableStorage());
response.setUsedStorage(weeklyDetails.get(weeklyDetails.size()-1).getUsedStorage());
response.setPeakUsage(peakUsage);
response.setAverage(averageUsage);
String fromDate = format.format(dateBefore7Days);
String toDate = format.format(new Date());
logger.info("Formatted from date " + fromDate);
response.setFromDate(fromDate);
response.setToDate(toDate);
response.setTotalStorageStatistic(totalStorageStatistic);
response.setUsedStorageStatistic(usedStorageStatistic);
if(averageUsage.compareTo(new BigDecimal(0))<=0)
response.setWeeksUntilFull(new BigDecimal(25));
else
response.setWeeksUntilFull(weeklyDetails.get(weeklyDetails.size()-1).getAvailableStorage().divide(averageUsage,2,RoundingMode.HALF_UP).divide(new BigDecimal(7),0,RoundingMode.HALF_UP));
}
catch(Exception e ){
return null;
}
return response;
}
@Override
public MetaDataResponse getAttachmentsDetails() {
List<BigDecimal> usedStorageStatistic;
List<BigDecimal> totalStorageStatistic;
BigDecimal peakUsage;
BigDecimal averageUsage;
BigDecimal last7DaysUsage;

logger.info("Result Count : attachmentRepository");
MetaDataResponse response = new MetaDataResponse();
try{
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DATE, -6);
Date dateBefore7Days = cal.getTime();

cal.setTime(new Date());
cal.add(Calendar.DATE, +1);
Date currentDate = cal.getTime();


logger.info("From Date " + formatter.parse(formatter.format(dateBefore7Days) )+ " To Date " + formatter.parse(formatter.format(currentDate)));

// Fetch all the details
List<ArsAttachmentsStorage> recordDetails=attachmentRepository.getRecords(formatter.parse(formatter.format(dateBefore7Days)),formatter.parse(formatter.format(currentDate)));

for(ArsAttachmentsStorage record:recordDetails){
logger.info("getTotalStorage"+ record.getTotalStorage() + " getAvailableStorage " + record.getAvailableStorage() + "getUsedStorage " +record.getUsedStorage() + "getStorageDate " +record.getStorageDate());
//logger.info("getTotalStorage"+ record.getTotalStorage());
}
List<ArsAttachmentsStorage> weeklyDetails =new ArrayList<ArsAttachmentsStorage>();
logger.info("Size of record fetched " +recordDetails.size());
if(recordDetails.size()<=7){
int count=0;
for(int recordCount=0;recordCount<recordDetails.size();recordCount++){
ArsAttachmentsStorage record=recordDetails.get(recordCount);
cal.setTime(new Date());
cal.add(Calendar.DATE, -(6-count));
String specificDay = format.format(cal.getTime());
String recordDate = format.format(record.getStorageDate());
logger.info("specificDay :" + specificDay+"recordDate:"+recordDate);
if(recordDate.equals(specificDay)){
weeklyDetails.add(record);
}
else{
ArsAttachmentsStorage noData=new ArsAttachmentsStorage();
noData.setTotalStorage(new BigDecimal(0));
noData.setAvailableStorage(new BigDecimal(0));
noData.setUsedStorage(new BigDecimal(0));
noData.setTotalAttachments(new BigDecimal(0));
noData.setAverageAttachmentsSize(new BigDecimal(0));
noData.setStorageDate(format.parse(format.format(cal.getTime())));
weeklyDetails.add(noData);
if(count<6)
recordCount--;
}
count++;
}
if(count<7){
while(count<7){
cal.setTime(new Date());
cal.add(Calendar.DATE, -(6-count));
ArsAttachmentsStorage noData=new ArsAttachmentsStorage();
noData.setTotalStorage(new BigDecimal(0));
noData.setAvailableStorage(new BigDecimal(0));
noData.setUsedStorage(new BigDecimal(0));
noData.setTotalAttachments(new BigDecimal(0));
noData.setAverageAttachmentsSize(new BigDecimal(0));
noData.setStorageDate(format.parse(format.format(cal.getTime())));
weeklyDetails.add(noData);
count++;
}
}
/*ArsAttachmentsStorage noData=new ArsAttachmentsStorage();
noData.setTotalStorage(new BigDecimal(0));
noData.setAvailableStorage(new BigDecimal(0));
noData.setUsedStorage(new BigDecimal(0));
noData.setTotalAttachments(new BigDecimal(0));
noData.setAverageAttachmentsSize(new BigDecimal(0));
for(int missingcount=0;missingcount<=(7-weeklyDetails.size());missingcount++){
weeklyDetails.add(0, noData);
}*/
}

logger.info("Size of record modified " +weeklyDetails.size());

usedStorageStatistic=new ArrayList<BigDecimal>();
totalStorageStatistic=new ArrayList<BigDecimal>();
peakUsage=new BigDecimal(0);
averageUsage=new BigDecimal(0);
last7DaysUsage=new BigDecimal(0);
for(ArsAttachmentsStorage record:weeklyDetails){
usedStorageStatistic.add(record.getUsedStorage());
logger.info("usedStorageStatistic"+ usedStorageStatistic);
totalStorageStatistic.add(record.getTotalStorage());
if(peakUsage.compareTo(record.getUsedStorage())==-1){
peakUsage=record.getUsedStorage();
}
//record.getAvailableStorage X 7 / usedStorageStatistic----- I think ??????
// averageUsage=averageUsage.add(record.getUsedStorage());
logger.info("getTotalStorage"+ record.getTotalStorage() + " getAvailableStorage " + record.getAvailableStorage() + "getUsedStorage " +record.getUsedStorage() + "getStorageDate " +record.getStorageDate());
//logger.info("getTotalStorage"+ record.getTotalStorage());
}

last7DaysUsage= usedStorageStatistic.get(usedStorageStatistic.size()-1).subtract(usedStorageStatistic.get(0));
logger.info("last7DaysUsage: "+last7DaysUsage);


cal.setTime(new Date());
cal.add(Calendar.DATE, -7);
Date dateBeforeWeek = cal.getTime();
logger.info("dateBeforeWeek "+formatter.format(dateBeforeWeek));
ArsAttachmentsStorage recordBeforeWeek = attachmentRepository.recordBeforeWeek(formatter.format(dateBeforeWeek));
if(recordBeforeWeek==null){
logger.info("recordBeforeWeek: is null");
averageUsage=weeklyDetails.get(weeklyDetails.size()-1).getUsedStorage().divide(new BigDecimal(7),2,RoundingMode.HALF_UP);
}
else
{
averageUsage=weeklyDetails.get(weeklyDetails.size()-1).getUsedStorage().subtract(recordBeforeWeek.getUsedStorage()).divide(new BigDecimal(7),2,RoundingMode.HALF_UP);
}
logger.info("averageUsage "+ averageUsage);
response.setTotalStorage(weeklyDetails.get(weeklyDetails.size()-1).getTotalStorage());
response.setAvailableStorage(weeklyDetails.get(weeklyDetails.size()-1).getAvailableStorage());
response.setUsedStorage(weeklyDetails.get(weeklyDetails.size()-1).getUsedStorage());
response.setPeakUsage(peakUsage);
response.setAverage(averageUsage);
String fromDate = format.format(dateBefore7Days);
String toDate = format.format(new Date());
logger.info("Formatted from date " + fromDate);
response.setFromDate(fromDate);
response.setToDate(toDate);
response.setTotalStorageStatistic(totalStorageStatistic);
response.setUsedStorageStatistic(usedStorageStatistic);

// For attachment report
response.setTotalAttachments(weeklyDetails.get(weeklyDetails.size()-1).getTotalAttachments());
response.setAverageAttachmentSize(weeklyDetails.get(weeklyDetails.size()-1).getAverageAttachmentsSize());

if(last7DaysUsage.compareTo(new BigDecimal(0))<=0)
{
response.setWeeksUntilFull(new BigDecimal(26));
logger.info("last7DaysUsage was 0.0 or less");
}else{

BigDecimal tempVariable = new BigDecimal(0);
tempVariable= (weeklyDetails.get(weeklyDetails.size()-1).getAvailableStorage().multiply(new BigDecimal(7))).divide(last7DaysUsage,2,RoundingMode.HALF_UP);
tempVariable=tempVariable.divide(new BigDecimal(7),0,RoundingMode.HALF_UP);
logger.info("tempVariable: "+tempVariable);
if(tempVariable.compareTo(new BigDecimal(25))<=0)
{
response.setWeeksUntilFull(tempVariable);
logger.info("last7DaysUsage was more than 0 or less than 25");

}else{
response.setWeeksUntilFull(new BigDecimal(26));

}

}


/*if(averageUsage.compareTo(new BigDecimal(0))<=0)
{
response.setWeeksUntilFull(new BigDecimal(25));
}else
{
response.setWeeksUntilFull((weeklyDetails.get(weeklyDetails.size()-1).getAvailableStorage().divide(averageUsage,2,RoundingMode.HALF_EVEN)).divide(new BigDecimal(7),2,RoundingMode.HALF_EVEN));
}*/
}
catch(Exception e){
return null;
}

logger.info(response.getTotalStorage());
return response;
}

}