package org.araqne.logdb.cep.query;
import java.util.Arrays;
import java.util.List;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Invalidate;
import org.apache.felix.ipojo.annotations.Requires;
import org.apache.felix.ipojo.annotations.Validate;
import org.araqne.logdb.FieldOrdering;
import org.araqne.logdb.MetadataCallback;
import org.araqne.logdb.MetadataProvider;
import org.araqne.logdb.MetadataService;
import org.araqne.logdb.QueryContext;
import org.araqne.logdb.Row;
import org.araqne.logdb.cep.EventClock;
import org.araqne.logdb.cep.EventClockItem;
import org.araqne.logdb.cep.EventContextService;
import org.araqne.logdb.cep.EventContextStorage;
@Component(name = "cep-clock-meta-provider")
public class CepClockMetadataProvider implements MetadataProvider, FieldOrdering {
@Requires
private MetadataService metadataService;
@Requires
private EventContextService eventContextService;
@Override
public String getType() {
return "cepclocks";
}
@Validate
public void start() {
metadataService.addProvider(this);
}
@Invalidate
public void stop() {
if (metadataService != null)
metadataService.removeProvider(this);
}
@Override
public List<String> getFieldOrder() {
return Arrays.asList("host", "time", "expire_queue_len", "timeout_queue_len");
}
@Override
public void verify(QueryContext context, String queryString) {
}
@Override
public void query(QueryContext context, String queryString, MetadataCallback callback) {
EventContextStorage storage = eventContextService.getDefaultStorage();
for (String host : storage.getHosts()) {
EventClock<? extends EventClockItem> clock = storage.getClock(host);
if (clock == null)
continue;
Row row = new Row();
row.put("host", host);
row.put("time", clock.getTime());
row.put("expire_queue_len", clock.getExpireQueueLength());
row.put("timeout_queue_len", clock.getTimeoutQueueLength());
callback.onPush(row);
}
}
}