MonitoringRestController.java
package sk.iway.iwcm.components.monitoring.rest;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import sk.iway.iwcm.components.monitoring.jpa.MonitoringActualBean;
import sk.iway.iwcm.components.monitoring.jpa.MonitoringEntity;
import sk.iway.iwcm.components.monitoring.jpa.MonitoringRepository;
import sk.iway.iwcm.stat.rest.StatService;
import sk.iway.iwcm.system.datatable.DatatableRestControllerV2;
/**
* REST sluzba pre vratenie hodnot aktualneho stavu monitoringu
*/
@RestController
@RequestMapping("/admin/rest/monitoring")
@PreAuthorize("@WebjetSecurityService.hasPermission('cmp_server_monitoring')")
public class MonitoringRestController extends DatatableRestControllerV2<MonitoringEntity, Long>{
private MonitoringRepository monitoringRepository;
private Date dateFrom;
private Date dateTo;
private Integer maxDataCount = 500;
@Autowired
public MonitoringRestController(MonitoringRepository monitoringRepository) {
super(monitoringRepository);
this.monitoringRepository = monitoringRepository;
}
@Override
public void beforeSave(MonitoringEntity entity) {
throwError("datatables.error.recordIsNotEditable");
}
@Override
public Page<MonitoringEntity> getAllItems(Pageable pageable){
//Generate 14 days date range (dateFrom, dateTo)
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -14);
dateFrom = cal.getTime();
dateTo = new Date();
//If page size is bigger than set constant (in this case maxDataCount = 500) first aggregate data of one month range then return. Or return directly.
if(pageable.getPageSize() >= this.maxDataCount) {
Page<MonitoringEntity> pageableData = monitoringRepository.findAllByDayDateGreaterThanEqualAndDayDateLessThanEqual(pageable, dateFrom, dateTo);
MonitoringManager monitoringManger = new MonitoringManager(pageableData, dateFrom, dateTo);
return new PageImpl<>(monitoringManger.returnAggregatedData());
} else {
Page<MonitoringEntity> pageableData = monitoringRepository.findAll(pageable);
return pageableData;
}
}
@Override
public Page<MonitoringEntity> searchItem(Map<String, String> params, Pageable pageable, MonitoringEntity search) {
String stringRange = "";
//Get dateRange param from map
for (Map.Entry<String, String> entry : params.entrySet()) {
if(entry.getKey().equals("searchDayDate")) {
stringRange = (String) entry.getValue();
stringRange = stringRange.substring("daterange:".length());
break;
}
}
Date[] dateRangeArr = StatService.processDateRangeString(stringRange);
dateFrom = dateRangeArr[0];
dateTo = dateRangeArr[1];
/*If pagination param is set to true or page size is bigger than set constant (in this case maxDataCount = 500) first aggregate data in set date
range then return. Or return data directly withou aggregation.*/
String paggination = params.get("pagination");
if( (paggination != null && paggination.equals("true")) || pageable.getPageSize() >= this.maxDataCount) {
Page<MonitoringEntity> pageableData = monitoringRepository.findAllByDayDateGreaterThanEqualAndDayDateLessThanEqual(pageable, dateFrom, dateTo);
MonitoringManager monitoringManger = new MonitoringManager(pageableData, dateFrom, dateTo);
return new PageImpl<>(monitoringManger.returnAggregatedData());
} else {
return monitoringRepository.findAllByDayDateGreaterThanEqualAndDayDateLessThanEqual(pageable, dateFrom, dateTo);
}
}
@RequestMapping("/actual")
public MonitoringActualBean getActualValues() {
MonitoringActualBean actual = new MonitoringActualBean();
return actual;
}
}