package de.slackspace.alfa.azure;
import java.util.Calendar;
import java.util.TimeZone;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.microsoft.windowsazure.services.core.ServiceException;
import com.microsoft.windowsazure.services.table.TableContract;
import com.microsoft.windowsazure.services.table.models.Filter;
import com.microsoft.windowsazure.services.table.models.QueryEntitiesOptions;
import com.microsoft.windowsazure.services.table.models.QueryEntitiesResult;
import de.slackspace.alfa.domain.TableResultPartial;
public class AzureService {
public static final String WADLOGSTABLE = "WADLogsTable";
public static final String PERFORMANCETABLE = "WADPerformanceCountersTable";
private static final Logger LOGGER = LoggerFactory.getLogger(AzureService.class);
private static final String DEPLOYMENTTABLE = "deployments";
private int maxLogDays;
private TableContract tableContract;
public AzureService(TableContract contract, int maxLogDays) {
this.tableContract = contract;
this.maxLogDays = maxLogDays;
}
public TableResultPartial getEntries(String nextPartitionKey, String nextRowKey, String tableName) {
try {
QueryEntitiesOptions options = constructFilter(nextPartitionKey, nextRowKey);
QueryEntitiesResult result = tableContract.queryEntities(tableName, options);
return new TableResultPartial(result.getEntities(), result.getNextPartitionKey(), result.getNextRowKey());
} catch (Exception e) {
LOGGER.error("Could not query table " + tableName + ". Error was: ", e);
return new TableResultPartial();
}
}
public TableResultPartial getDeploymentEntries() {
try {
QueryEntitiesResult result = tableContract.queryEntities(DEPLOYMENTTABLE);
return new TableResultPartial(result.getEntities(), null, null);
} catch (ServiceException e) {
LOGGER.warn("Could not find optional table " + DEPLOYMENTTABLE + ". Ignoring...", e);
return new TableResultPartial();
}
}
private QueryEntitiesOptions constructFilter(String nextPartitionKey, String nextRowKey) {
QueryEntitiesOptions options = new QueryEntitiesOptions();
if(nextPartitionKey != null && nextRowKey != null) {
options.setNextPartitionKey(nextPartitionKey);
options.setNextRowKey(nextRowKey);
}
else {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.add(Calendar.DAY_OF_MONTH, maxLogDays * -1);
String partitionKey = PartitionCalculator.calculatePartitionKeyFor(cal);
options.setFilter(Filter.queryString("PartitionKey ge '" + partitionKey + "'"));
}
return options;
}
}