package gov.nysenate.openleg.service.log.data;
import com.google.common.collect.Range;
import com.google.common.eventbus.EventBus;
import gov.nysenate.openleg.service.log.event.ApiLogEvent;
import gov.nysenate.openleg.dao.base.LimitOffset;
import gov.nysenate.openleg.dao.base.SortOrder;
import gov.nysenate.openleg.dao.log.data.ApiLogDao;
import gov.nysenate.openleg.model.auth.ApiResponse;
import gov.nysenate.openleg.service.log.event.ApiLogIndexEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.time.LocalDateTime;
import java.util.List;
@Service
public class SqlApiLogDataService implements ApiLogDataService
{
private static final Logger logger = LoggerFactory.getLogger(SqlApiLogDataService.class);
@Autowired protected EventBus eventBus;
@Autowired protected ApiLogDao apiLogDao;
@PostConstruct
public void init() {
this.eventBus.register(this);
}
/** {@inheritDoc} */
@Override
@Async
public void saveApiResponseAsync(ApiLogEvent apiLogEvent, boolean emitSearchEvent) {
try {
if (apiLogEvent != null) {
ApiResponse apiResponse = apiLogEvent.getApiResponse();
apiLogDao.saveApiResponse(apiResponse);
if (emitSearchEvent) {
// This event should be picked up by the log indexer
eventBus.post(new ApiLogIndexEvent(apiResponse));
}
}
} catch (DataAccessException ex) {
logger.error("Error while saving api req/res log.", ex);
}
}
/** {@inheritDoc} */
@Override
public List<ApiResponse> getResponses(Range<LocalDateTime> dateTimeRange, LimitOffset limOff, SortOrder order) {
return apiLogDao.getResponses(dateTimeRange, limOff, order);
}
}