UrlsController/src/main/java/eu/openaire/urls_controller/controllers/StatsController.java

79 lines
3.4 KiB
Java
Raw Normal View History

package eu.openaire.urls_controller.controllers;
import eu.openaire.urls_controller.configuration.ImpalaConnector;
import eu.openaire.urls_controller.services.StatsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* This controller returns statistics for the database.
*/
@RestController
@RequestMapping("/stats")
public class StatsController {
private static final Logger logger = LoggerFactory.getLogger(StatsController.class);
@Autowired
private StatsService statsService;
/**
* This endpoint returns the total number of payloads existing in the database, independently of the way they were aggregated.
* This includes the payloads created by other pieces of software, before the PDF-Aggregation-Service was created.
* */
@GetMapping("getNumberOfAllPayloads")
public ResponseEntity<?> getNumberOfAllPayloads() {
logger.info("Received a \"getNumberOfAllPayloads\" request.");
final String getPayloadsNumberQuery = "select count(id) from " + ImpalaConnector.databaseName + ".payload";
return statsService.getNumberOfPayloads(getPayloadsNumberQuery, "");
}
/**
* This endpoint returns the number of payloads aggregated by the PDF-Aggregated-Service itself.
* It excludes the payloads aggregated by other methods, by applying a Date-filter for the records created in 2021 or later.
* */
@GetMapping("getNumberOfPayloadsAggregatedByService")
public ResponseEntity<?> getNumberOfPayloadsAggregatedByService() {
logger.info("Received a \"getNumberOfPayloadsAggregatedByService\" request.");
String getPayloadsAggregatedQuery = "select count(id) from " + ImpalaConnector.databaseName + ".payload where `date` >= cast(cast('2021-01-01' as timestamp) as bigint)";
return statsService.getNumberOfPayloads(getPayloadsAggregatedQuery, "retrieved by the PDF Aggregation Service");
}
/**
* This endpoint returns the number of payloads related to the given datasourceID.
* */
@GetMapping("getNumberOfPayloadsForDatasource")
public ResponseEntity<?> getNumberOfPayloadsForDatasource(@RequestParam String datasourceId) {
logger.info("Received a \"getNumberOfPayloadsForDatasource\" request.");
final String getPayloadsNumberForDatasourceQuery =
"select count(p.id) from " + ImpalaConnector.databaseName + ".payload p\n" +
" join " + ImpalaConnector.databaseName + ".publication pu on pu.id=p.id and pu.datasourceid=\"" + datasourceId + "\"";
logger.trace("getPayloadsNumberForDatasourceQuery:\n" + getPayloadsNumberForDatasourceQuery);
return statsService.getNumberOfPayloads(getPayloadsNumberForDatasourceQuery, "related to datasourceId \"" + datasourceId + "\"");
}
/**
* This endpoint returns the number of records inspected by the PDF-Aggregation-Service.
* */
@GetMapping("getNumberOfRecordsInspected")
public ResponseEntity<?> getNumberOfRecordsInspected()
{
return statsService.getNumberOfRecordsInspected();
}
}