package cassandra.cql; import cassandra.CassandraSession; import cassandra.metadata.TraceMetadata; import java.util.ArrayList; import java.util.List; import java.util.UUID; public class Trace extends TraceMetadata { private final CassandraSession session; private boolean traceInitDone, eventInitDone; public Trace(CassandraSession session, UUID id) { if (session == null) { throw new NullPointerException("session"); } if (id == null) { throw new NullPointerException("id"); } this.session = session; setSessionId(id); } @Override protected void initTrace() { if (traceInitDone) { return; } synchronized (this) { if (traceInitDone) { return; } ResultSet rs = session.execute(String.format("SELECT * FROM system_traces.sessions WHERE session_id=%s", getSessionId())); if (rs.hasNext()) { Row row = rs.next(); setCoordinator(row.getInet("coordinator")); setDuration(row.getInt("duration")); setParameters(row.getMap("parameters", String.class, String.class)); setRequest(row.getString("request")); setStartedAt(row.getDate("started_at")); traceInitDone = true; } } } @Override protected void initEvent() { if (eventInitDone) { return; } synchronized (this) { if (eventInitDone) { return; } List<Event> events; ResultSet rs = session.execute(String.format("SELECT session_id, event_id, unixTimestampOf(event_id) AS timestamp, activity, source, source_elapsed, thread FROM system_traces.events WHERE session_id=%s", getSessionId())); if (rs.hasNext()) { events = new ArrayList<Event>(); while (rs.hasNext()) { events.add(new Event(rs.next())); } setEvents(events); eventInitDone = true; } } } }