StatisticsRemote.java
package access.stats;
import access.remote.RestTemplateFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.net.URI;
import java.util.List;
@SuppressWarnings("unchecked")
@Component
@ConditionalOnProperty(
prefix = "statistics",
name = "enabled",
havingValue = "true"
)
public class StatisticsRemote implements Statistics {
private final RestTemplate restTemplate;
private final String baseUrl;
@Autowired
public StatisticsRemote(@Value("${statistics.user}") String user,
@Value("${statistics.password}") String password,
@Value("${statistics.url}") String baseUrl) {
this.restTemplate = RestTemplateFactory.buildRestTemplate(user, password);
this.baseUrl = baseUrl;
}
public List<Object> loginTimeFrame(long from, long to, String scale, String idpEntityId, String spEntityId, boolean includeUnique) {
UriComponentsBuilder builder = baseBuilder("/public/login_time_frame", idpEntityId)
.queryParam("from", from)
.queryParam("to", to)
.queryParam("scale", scale)
.queryParam("include_unique", includeUnique)
.queryParam("epoch", "ms");
if (StringUtils.hasText(spEntityId)) {
builder.queryParam("sp_id", spEntityId);
}
URI uri = builder.build().encode().toUri();
return restTemplate.getForEntity(uri, List.class).getBody();
}
public List<Object> loginAggregated(String period, String idpEntityId, String spEntityId, String groupBy) {
UriComponentsBuilder builder = baseBuilder("/public/login_aggregated", idpEntityId)
.queryParam("period", period)
.queryParam("group_by", groupBy);
if (StringUtils.hasText(spEntityId)) {
builder.queryParam("sp_id", spEntityId);
}
URI uri = builder.build().encode().toUri();
return restTemplate.getForEntity(uri, List.class).getBody();
}
public List<Object> uniqueLoginCount(long from, long to, String idpEntityId, String spEntityId) {
UriComponentsBuilder builder = baseBuilder("/public/unique_login_count", idpEntityId)
.queryParam("from", from)
.queryParam("to", to)
.queryParam("epoch", "ms")
.queryParam("sp_id", spEntityId);
URI uri = builder.build().encode().toUri();
return restTemplate.getForEntity(uri, List.class).getBody();
}
private UriComponentsBuilder baseBuilder(String path, String idpEntityId) {
UriComponentsBuilder builder = UriComponentsBuilder
.fromUriString(baseUrl)
.path(path);
if (StringUtils.hasText(idpEntityId)) {
builder.queryParam("idp_id", idpEntityId);
}
return builder;
}
}