/*******************************************************************************
* LogDruid : Generate charts and reports using data gathered in log files
* Copyright (C) 2016 Frederic Valente (frederic.valente@gmail.com)
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
*******************************************************************************/
package logdruid.data.mine;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
import java.util.Map;
import java.util.ArrayList;
import logdruid.data.ExtendedTimeSeries;
import logdruid.data.Repository;
import logdruid.data.Source;
import logdruid.util.DataMiner;
import org.apache.commons.lang3.time.FastDateFormat;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.jfree.data.time.TimeSeries;
public class MineResult implements Comparable {
private static Logger logger = Logger.getLogger(MineResult.class.getName());
private Date startDate;
private Date endDate;
Source source; // Source source; (tuning data size)
ArrayList<FileRecord> logFiles;
String group;
Map<String, Map<Date,FileLine>> groupFileLineMap = new HashMap<String, Map<Date,FileLine>>();
Map<String, ExtendedTimeSeries> statTimeSeriesMap;
Map<String, ExtendedTimeSeries> eventTimeSeriesMap;
Map<String, long[]> matchingStats; // 0-> sum of time for success matching
// of given recording ; 1-> sum of time
// for failed matching ; 2-> count of
// match attempts, 3->count of success
// attempts
private ArrayList<Object[]> fileDates = new ArrayList<Object[]>();
public MineResult(String _group, FileMineResultSet hm, ArrayList<FileRecord> arrayList, Repository repo, Source _source) {
logFiles = arrayList;
source = _source;
statTimeSeriesMap = hm.statGroupTimeSeries;
eventTimeSeriesMap = hm.eventGroupTimeSeries;
matchingStats = hm.matchingStats;
groupFileLineMap=hm.fileLineDateMap;
startDate = hm.getStartDate();
endDate = hm.getEndDate();
fileDates = hm.getFileDates();
group = _group;
}
public Source getSource() {
return source;
}
public Date getStartDate() {
return startDate;
}
public String getSourceID() {
return source.getSourceName();
}
public ArrayList<FileRecord> getLogFiles() {
return logFiles;
}
public String getGroup() {
return group;
}
public Map<String, ExtendedTimeSeries> getStatTimeseriesMap() {
return statTimeSeriesMap;
}
public Map<String, ExtendedTimeSeries> getEventTimeseriesMap() {
return eventTimeSeriesMap;
}
public Map<String, long[]> getMatchingStats() {
return matchingStats;
}
public Date getEndDate() {
return endDate;
}
public File getFileForDate(Date date) {
Iterator<Object[]> it = fileDates.iterator();
while (it.hasNext()) {
Object[] obj = it.next();
if (logger.isDebugEnabled())
logger.debug("1: " + (Date) obj[0] + "2: " + (Date) obj[1] + "3: " + ((FileRecord) obj[2]).getFile());
if (date.after((Date) obj[0]) && date.before((Date) obj[1]))
return (File) ((FileRecord) obj[2]).getFile();
}
return null;
}
public FileLine getFileLineForDate(Date date,String _group) {
// logger.info(group+","+date);
if (date!=null && _group !=null){
if(groupFileLineMap.containsKey(_group)){
Map<Date,FileLine> map= groupFileLineMap.get(_group);
if(map.containsKey(date)){
return groupFileLineMap.get(_group).get(date);
}
}else
// logger.info("null");
return null;
}
// logger.info("null");
return null;
}
@Override
public int compareTo(Object o) {
String local = source.getSourceName() + group;
String remote = ((MineResult) o).getSourceID() + ((MineResult) o).getGroup();
//return remote.compareTo(local);
return this.getStartDate().compareTo(((MineResult) o).getStartDate());
}
}