/*****************************************************************************
*
* Copyright (C) Zenoss, Inc. 2010, all rights reserved.
*
* This content is made available according to terms specified in
* License.zenoss under the directory where your Zenoss product is installed.
*
****************************************************************************/
package org.zenoss.zep.dao;
import org.zenoss.protobufs.zep.Zep.EventSummary;
import org.zenoss.protobufs.zep.Zep.EventTriggerSubscription;
import org.zenoss.zep.UUIDGenerator;
import java.util.concurrent.TimeUnit;
/**
* Bean class representing a spooled event signal. These spool items are evaluated after the flushTime
* has expired to determine if a signal should be repeated or canceled.
*/
public class EventSignalSpool {
private String uuid;
private String subscriptionUuid;
private String eventSummaryUuid;
private long flushTime;
private long created;
private int eventCount = 1;
private boolean sentSignal;
public EventSignalSpool() {
}
public String getUuid() {
return this.uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getSubscriptionUuid() {
return this.subscriptionUuid;
}
public void setSubscriptionUuid(String subscriptionUuid) {
this.subscriptionUuid = subscriptionUuid;
}
public String getEventSummaryUuid() {
return this.eventSummaryUuid;
}
public void setEventSummaryUuid(String eventSummaryUuid) {
this.eventSummaryUuid = eventSummaryUuid;
}
public long getFlushTime() {
return flushTime;
}
public void setFlushTime(long flushTime) {
this.flushTime = flushTime;
}
public long getCreated() {
return created;
}
public void setCreated(long created) {
this.created = created;
}
public int getEventCount() {
return eventCount;
}
public void setEventCount(int eventCount) {
this.eventCount = eventCount;
}
public boolean isSentSignal() {
return sentSignal;
}
public void setSentSignal(boolean sentSignal) {
this.sentSignal = sentSignal;
}
@Override
public String toString() {
return "EventSignalSpool{" +
"uuid=" + uuid +
", subscriptionUuid=" + subscriptionUuid +
", eventSummaryUuid=" + eventSummaryUuid +
", flushTime=" + flushTime +
", created=" + created +
", eventCount=" + eventCount +
", sentSignal=" + sentSignal +
'}';
}
/**
* Creates a new <code>EventSignalSpool</code> from the subscription and event summary.
*
* @param subscription Event trigger subscription.
* @param summary Event summary.
* @return A new spool item.
*/
public static EventSignalSpool buildSpool(EventTriggerSubscription subscription, EventSummary summary,
UUIDGenerator uuidGenerator) {
final int delaySeconds = subscription.getDelaySeconds();
final int repeatSeconds = subscription.getRepeatSeconds();
final EventSignalSpool spool = new EventSignalSpool();
long created = System.currentTimeMillis();
final long flushTime;
if (delaySeconds > 0) {
flushTime = created + TimeUnit.SECONDS.toMillis(delaySeconds);
}
else if (repeatSeconds > 0) {
flushTime = created + TimeUnit.SECONDS.toMillis(repeatSeconds);
}
else {
flushTime = Long.MAX_VALUE;
}
spool.setCreated(created);
spool.setEventCount(1);
spool.setEventSummaryUuid(summary.getUuid());
spool.setSubscriptionUuid(subscription.getUuid());
spool.setFlushTime(flushTime);
spool.setUuid(uuidGenerator.generate().toString());
return spool;
}
}