package com.sequenceiq.cloudbreak.controller;
import static java.time.ZoneId.systemDefault;
import java.time.LocalDate;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.sequenceiq.cloudbreak.api.endpoint.UsageEndpoint;
import com.sequenceiq.cloudbreak.api.model.CloudbreakFlexUsageJson;
import com.sequenceiq.cloudbreak.api.model.CloudbreakUsageJson;
import com.sequenceiq.cloudbreak.domain.CbUsageFilterParameters;
import com.sequenceiq.cloudbreak.domain.CbUser;
import com.sequenceiq.cloudbreak.facade.CloudbreakUsagesFacade;
import com.sequenceiq.cloudbreak.logger.MDCBuilder;
@Component
public class CloudbreakUsageController implements UsageEndpoint {
@Autowired
private CloudbreakUsagesFacade cloudbreakUsagesFacade;
@Autowired
private AuthenticatedUserService authenticatedUserService;
@Override
public List<CloudbreakUsageJson> getDeployer(
Long since,
Long filterEndDate,
String userId,
String accountId,
String cloud,
String zone) {
CbUser user = authenticatedUserService.getCbUser();
MDCBuilder.buildUserMdcContext(user);
CbUsageFilterParameters params = new CbUsageFilterParameters.Builder().setAccount(accountId).setOwner(userId)
.setSince(since).setCloud(cloud).setRegion(zone).setFilterEndDate(filterEndDate).build();
return cloudbreakUsagesFacade.getUsagesFor(params);
}
public List<CloudbreakUsageJson> getAccount(
Long since,
Long filterEndDate,
String userId,
String cloud,
String zone) {
CbUser user = authenticatedUserService.getCbUser();
MDCBuilder.buildUserMdcContext(user);
CbUsageFilterParameters params = new CbUsageFilterParameters.Builder().setAccount(user.getAccount()).setOwner(userId)
.setSince(since).setCloud(cloud).setRegion(zone).setFilterEndDate(filterEndDate).build();
return cloudbreakUsagesFacade.getUsagesFor(params);
}
@Override
public List<CloudbreakUsageJson> getUser(
Long since,
Long filterEndDate,
String cloud,
String zone) {
CbUser user = authenticatedUserService.getCbUser();
MDCBuilder.buildUserMdcContext(user);
CbUsageFilterParameters params = new CbUsageFilterParameters.Builder().setAccount(user.getAccount()).setOwner(user.getUserId())
.setSince(since).setCloud(cloud).setRegion(zone).setFilterEndDate(filterEndDate).build();
return cloudbreakUsagesFacade.getUsagesFor(params);
}
@Override
public List<CloudbreakFlexUsageJson> getDailyFlexUsages() {
long fromDate = LocalDate.now()
.minusDays(1)
.atStartOfDay(systemDefault())
.toInstant()
.toEpochMilli();
long endDate = LocalDate.now()
.atStartOfDay(systemDefault())
.toInstant()
.toEpochMilli();
CbUsageFilterParameters cbUsageFilterParameters = new CbUsageFilterParameters.Builder()
.setSince(fromDate)
.setFilterEndDate(endDate)
.build();
return cloudbreakUsagesFacade.getFlexUsagesFor(cbUsageFilterParameters);
}
@Override
public List<CloudbreakFlexUsageJson> getLatestFlexUsages() {
long fromDate = LocalDate.now()
.atStartOfDay(systemDefault())
.toInstant()
.toEpochMilli();
CbUsageFilterParameters cbUsageFilterParameters = new CbUsageFilterParameters.Builder()
.setSince(fromDate)
.build();
return cloudbreakUsagesFacade.getFlexUsagesFor(cbUsageFilterParameters);
}
}