package cassandra.metadata; import cassandra.cql.Row; import com.fasterxml.jackson.annotation.JsonIgnore; import java.net.InetAddress; import java.util.Date; import java.util.List; import java.util.Map; import java.util.UUID; public abstract class TraceMetadata extends MetadataEntity { private UUID sessionId; private InetAddress coordinator; private int duration; private Map<String, String> parameters; private String request; private Date startedAt; private List<Event> events; public UUID getSessionId() { return sessionId; } protected void setSessionId(UUID sessionId) { this.sessionId = sessionId; } public InetAddress getCoordinator() { initTrace(); return coordinator; } protected void setCoordinator(InetAddress coordinator) { this.coordinator = coordinator; } public int getDuration() { initTrace(); return duration; } protected void setDuration(int duration) { this.duration = duration; } public Map<String, String> getParameters() { initTrace(); return parameters; } protected void setParameters(Map<String, String> parameters) { this.parameters = parameters; } public String getRequest() { initTrace(); return request; } protected void setRequest(String request) { this.request = request; } public Date getStartedAt() { initTrace(); return startedAt; } protected void setStartedAt(Date startedAt) { this.startedAt = startedAt; } @JsonIgnore public List<Event> getEvents() { initEvent(); return events; } protected void setEvents(List<Event> events) { this.events = events; } protected abstract void initTrace(); protected abstract void initEvent(); public static class Event extends MetadataEntity { private final UUID sessionId; private final UUID eventId; private final String activity; private final InetAddress source; private final int sourceElapsed; private final String thread; private final long timestamp; public Event(Row row) { sessionId = row.getUUID("session_id"); eventId = row.getUUID("event_id"); activity = row.getString("activity"); source = row.getInet("source"); sourceElapsed = row.getInt("source_elapsed"); thread = row.getString("thread"); if (!row.isNull("timestamp")) { timestamp = row.getLong("timestamp"); } else { timestamp = 0; } } public UUID getSessionId() { return sessionId; } public UUID getEventId() { return eventId; } @JsonIgnore public long getTimestamp() { return timestamp; } public String getActivity() { return activity; } public InetAddress getSource() { return source; } public int getSourceElapsed() { return sourceElapsed; } public String getThread() { return thread; } } }