/** * Save event to target (based on ACTION). * * @param e * current event * @param target * target list * @return if the evetn is stored */ private boolean saveEvent(Event e, Map<String, Map<String, EventSeries>> target) { String key = getKeyDate(e.getTimestamp()); String uid = e.getName(); if (!target.containsKey(key)) { target.put(key, new ConcurrentHashMap<String, EventSeries>()); } if (!target.get(key).containsKey(uid)) { target.get(key).put(uid, new EventSeries(this.queueCapacity)); } return target.get(key).get(uid).add(e); }
/** {@inheritDoc} */ @Override public EventSeries getAuditTrail(EventQueryDefinition q) { EventSeries resultSeries = new EventSeries(10000); for (String currentDay : getCandidateDays(q.getFrom(), q.getTo())) { if (auditTrailEvents.containsKey(currentDay)) { Iterator<Event> iterEvents = auditTrailEvents.get(currentDay).iterator(); while (iterEvents.hasNext()) { Event evt = iterEvents.next(); if (q.match(evt)) { resultSeries.add(evt); } } } } return resultSeries; }
/** TDD. */ @Test public void testLimitEventSeries() throws InterruptedException { EventSeries es = new EventSeries(5); for (int i = 0; i < 10; i++) { Thread.sleep(10); es.add(new Event(SOURCE_JAVA, TARGET_FEATURE, "f1", ACTION_CREATE)); } Assert.assertEquals(5, es.size()); }
/** {@inheritDoc} */ private EventSeries searchEvents(String sqlQuery, long from, long to) { EventSeries es = new EventSeries(); es.addAll(getJdbcTemplate().query(sqlQuery, EVENT_ROWMAPPER, new Timestamp(from), new Timestamp(to))); return es; }
/** * Search event by its id in the eventSeries. * * @param es * current event series * @param uuid * current unique identifier * @return * event if found, null if not */ private Event getFromEventSeries(EventSeries es, String uuid) { if (es == null) return null; Iterator<Event> iterEvents = es.iterator(); while (iterEvents.hasNext()) { Event evt = iterEvents.next(); if (evt.getUuid().equalsIgnoreCase(uuid)) { return evt; } } return null; }
/** {@inheritDoc} */ @Override public EventSeries getAuditTrail(EventQueryDefinition query) { return new EventSeries(); }
/** {@inheritDoc} */ @Override public void purgeAuditTrail(EventQueryDefinition q) { for (String currentDay : getCandidateDays(q.getFrom(), q.getTo())) { if (auditTrailEvents.containsKey(currentDay)) { Iterator<Event> iterEvents = auditTrailEvents.get(currentDay).iterator(); while (iterEvents.hasNext()) { Event evt = iterEvents.next(); if (q.match(evt)) { auditTrailEvents.get(currentDay).remove(evt); } } if (auditTrailEvents.get(currentDay).isEmpty()) { auditTrailEvents.remove(currentDay); } } } }
/** {@inheritDoc} */ @Override public void purgeFeatureUsage(EventQueryDefinition q) { Set<String> candidateDates = getCandidateDays(q.getFrom(), q.getTo()); for (String currentDay : candidateDates) { if (featureUsageEvents.containsKey(currentDay)) { Map<String, EventSeries> currentDayEvents = featureUsageEvents.get(currentDay); for (String currentFeature : currentDayEvents.keySet()) { Iterator<Event> iterEvents = currentDayEvents.get(currentFeature).iterator(); while (iterEvents.hasNext()) { Event evt = iterEvents.next(); if (q.match(evt)) { removeEventIfPresent(currentDayEvents.get(currentFeature), evt); } if (currentDayEvents.get(currentFeature).isEmpty()){ currentDayEvents.remove(currentFeature); } } } // Remove list if empty if (currentDayEvents.isEmpty()) { featureUsageEvents.remove(currentDay); } } } }
/** {@inheritDoc} */ @Override public boolean add(final Event e) { if (capacity > 0 && size() >= capacity) { return false; } return super.add(e); }
/** {@inheritDoc} */ @Override public TimeSeriesChart getFeatureUsageHistory(EventQueryDefinition query, TimeUnit units) { // Create the interval depending on units TimeSeriesChart tsc = new TimeSeriesChart(query.getFrom(), query.getTo(), units); // Search All events Iterator<Event> iterEvent = searchFeatureUsageEvents(query).iterator(); // Dispatch events into time slots while (iterEvent.hasNext()) { tsc.addEvent(iterEvent.next()); } return tsc; }
/** {@inheritDoc} */ @Override public EventSeries searchFeatureUsageEvents(EventQueryDefinition query) { return new EventSeries(); }
/** * Compute average iteself. * * @return */ public double getAverageDuration() { long totalDuration = 0; for(Event evt : this) { totalDuration+= evt.getDuration(); } return totalDuration / size(); }
/** {@inheritDoc} */ @Override public EventSeries searchFeatureUsageEvents(EventQueryDefinition query) { String cqlQuery = getBuilder().cqlAuditFeatureUsage(query); LOGGER.debug("Query " + cqlQuery); ResultSet rs = conn.getSession().execute(cqlQuery); EventSeries es = new EventSeries(); for (Row row : rs.all()) { es.add(CassandraMapper.mapEvent(row)); } return es; }
/** {@inheritDoc} */ @Override public EventSeries searchFeatureUsageEvents(EventQueryDefinition query) { EventSeries es = new EventSeries(1000000); // Dates are the keys of the storage map, compute list of keys and loop over them for (String currentDay : getCandidateDays(query.getFrom(), query.getTo())) { // There are some events with the current date if (featureUsageEvents.containsKey(currentDay)) { Map<String, EventSeries> currentDayEvents = featureUsageEvents.get(currentDay); for (String currentFeature : currentDayEvents.keySet()) { // query can have filters for names, here we limite the number of map to scan if (query.matchName(currentFeature)) { Iterator<Event> iterEvents = currentDayEvents.get(currentFeature).iterator(); while (iterEvents.hasNext()) { Event evt = iterEvents.next(); // use other filter (host, action, timestamp....) if (query.match(evt)) { es.add(evt); } } } } } } return es; }
@Override public TimeSeriesChart getFeatureUsageHistory(EventQueryDefinition query, TimeUnit units) { // Create the interval depending on units TimeSeriesChart tsc = new TimeSeriesChart(query.getFrom(), query.getTo(), units); // Search All events Iterator<Event> iterEvent = searchFeatureUsageEvents(query).iterator(); // Dispatch events into time slots while (iterEvent.hasNext()) { tsc.addEvent(iterEvent.next()); } return tsc; }
/** TDD. */ @Test public void testSaveAuditTrail() throws InterruptedException { long start = System.currentTimeMillis(); // Given Event evt1 = new Event(SOURCE_JAVA, TARGET_FEATURE, "f1", EventConstants.ACTION_CREATE); // When repo.saveEvent(evt1); // Wait for the event to be effectively store Thread.sleep(200); EventQueryDefinition eqd2 = new EventQueryDefinition(start - 200, System.currentTimeMillis()); Assert.assertEquals(1, repo.getAuditTrail(eqd2).size()); }
/** {@inheritDoc} */ private EventSeries searchEvents(String sqlQuery, long from, long to) { Connection sqlConn = null; PreparedStatement ps = null; ResultSet rs = null; EventSeries es = new EventSeries(); try { sqlConn = getDataSource().getConnection(); ps = sqlConn.prepareStatement(sqlQuery); ps.setTimestamp(1, new Timestamp(from)); ps.setTimestamp(2, new Timestamp(to)); rs = ps.executeQuery(); while (rs.next()) { es.add(EVENT_MAPPER.mapEvent(rs)); } } catch (SQLException sqlEX) { throw new IllegalStateException("CANNOT_READ_AUDITTABLE", sqlEX); } finally { closeResultSet(rs); closeStatement(ps); closeConnection(sqlConn); } return es; }
/** {@inheritDoc} */ @Override public TimeSeriesChart getFeatureUsageHistory(EventQueryDefinition query, TimeUnit units) { // Create the interval depending on units TimeSeriesChart tsc = new TimeSeriesChart(query.getFrom(), query.getTo(), units); // Search All events Iterator<Event> iterEvent = searchFeatureUsageEvents(query).iterator(); // Dispatch events into time slots while (iterEvent.hasNext()) { tsc.addEvent(iterEvent.next()); } return tsc; }
/** TDD. */ @Test public void testSaveCheckOff() throws InterruptedException { long start = System.currentTimeMillis(); // Given Event evt1 = new Event(SOURCE_JAVA, TARGET_FEATURE, "f1", ACTION_CHECK_OFF); // When Assert.assertTrue(repo.saveEvent(evt1)); Thread.sleep(100); // Then Assert.assertEquals(0, repo.getFeatureUsageTotalHitCount(new EventQueryDefinition(start, System.currentTimeMillis()))); Assert.assertEquals(0, repo.getAuditTrail(new EventQueryDefinition(start, System.currentTimeMillis())).size()); }