/* * Copyright 2012 Will Benedict, Felix Berger and Roger Kapsi * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.ardverk.gibson.dashboard; import org.ardverk.gibson.Event; import org.ardverk.gibson.EventUtils; import javax.inject.Inject; import javax.inject.Singleton; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; @Singleton class DefaultEventService implements EventService { @Inject private EventDAO eventDAO; @Inject private TrendService trendService; @Override public void drop() { eventDAO.clear(); } @Override public TypeItems getTypeItems() { List<String> typeNames = eventDAO.getTypeNames(); List<TypeItem> dst = new ArrayList<TypeItem>(typeNames.size()); long total = 0L; for (String typeName : typeNames) { Trend trend = trendService.getTrendForType(typeName); dst.add(new TypeItem(typeName, trend)); total += trend.count; } Collections.sort(dst, Countable.DESCENDING); return new TypeItems(dst, total); } @Override public EventItems getEventItems(String typeName) { List<String> signatures = eventDAO.getEvents(typeName); List<EventItem> dst = new ArrayList<EventItem>(signatures.size()); long total = 0L; for (String signature : signatures) { Event event = eventDAO.getEvent(typeName, signature); long count = eventDAO.getEventCount(signature); Trend trend = trendService.getTrendForEvent(event); dst.add(new EventItem(event, trend)); total += count; } Collections.sort(dst, Countable.DESCENDING); return new EventItems(typeName, dst, total); } @Override public EventItem getEvent(String typeName, String signature) { Event event = eventDAO.getEvent(typeName, signature); if (event == null) { return null; } // Get all distinct (!) keywords and hostnames under that signature. event.setKeywords(new ArrayList<String>(eventDAO.getKeywords(signature))); Set<String> hostnames = eventDAO.getHostnames(signature); Trend trend = trendService.getTrendForEvent(event); return new EventItem(event, new ArrayList<String>(hostnames), trend); } @Override public long getEventCount(Event event) { return eventDAO.getEventCount(event.getSignature()); } @Override public SearchItems query(String query) { Set<String> keywords = EventUtils.keywords(query); if (keywords == null || keywords.isEmpty()) { return SearchItems.notFound(query); } List<String> signatures = eventDAO.search(keywords); if (signatures == null || signatures.isEmpty()) { return SearchItems.notFound(query); } List<SearchItem> dst = new ArrayList<SearchItem>(signatures.size()); long total = 0L; for (String signature : signatures) { Event event = eventDAO.getEvent(signature); long count = eventDAO.getEventCount(signature); // Get all distinct (!) keywords under that signature. Set<String> everything = eventDAO.getKeywords(signature); everything.retainAll(keywords); dst.add(new SearchItem(everything, event, count)); total += count; } Collections.sort(dst, Countable.DESCENDING); return new SearchItems(query, keywords, dst, total); } @Override public void delete(String signature) { eventDAO.delete(signature); } }