package br.gov.servicos.piwik;
import br.gov.servicos.config.PiwikConfig;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import java.net.URI;
import java.util.List;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
import static java.util.stream.Collectors.toList;
import static org.springframework.web.util.UriComponentsBuilder.fromHttpUrl;
@Slf4j
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
public class PiwikClient {
RestTemplate restTemplate;
PiwikConfig config;
@Autowired
public PiwikClient(RestTemplate restTemplate, PiwikConfig config) {
this.restTemplate = restTemplate;
this.config = config;
}
public List<PiwikPage> getPageUrls(String period, String date) {
if (!config.isEnabled()) {
return emptyList();
}
return pageUrlsRequest(period, date)
.stream()
.flatMap(PiwikPage::flattened)
.collect(toList());
}
private List<PiwikPage> pageUrlsRequest(String period, String date) {
URI uri = buildURI(period, date);
log.debug("Fazendo requisição fora do cache ao Piwik: {}", uri);
ResponseEntity<PiwikPage[]> entity = restTemplate.getForEntity(uri, PiwikPage[].class);
log.debug("Resposta fora do cache do Piwik: {}", entity.getStatusCode());
return asList(entity.getBody());
}
private URI buildURI(String period, String date) {
return fromHttpUrl(config.getUrl())
.queryParam("module", "API")
.queryParam("format", "json")
.queryParam("idSite", config.getSite())
.queryParam("token_auth", config.getToken())
.queryParam("method", "Actions.getPageUrls")
.queryParam("period", period)
.queryParam("date", date)
.queryParam("expanded", 1)
.build()
.toUri();
}
}