mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-06 21:00:22 +00:00
Share cache parameters
This commit is contained in:
parent
79a3f98ed9
commit
ead14262ff
@ -18,8 +18,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.mainui.datamodel;
|
package org.sleuthkit.autopsy.mainui.datamodel;
|
||||||
|
|
||||||
import com.google.common.cache.Cache;
|
|
||||||
import com.google.common.cache.CacheBuilder;
|
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -31,13 +29,9 @@ import org.sleuthkit.autopsy.mainui.datamodel.events.TreeEvent;
|
|||||||
*/
|
*/
|
||||||
abstract class AbstractDAO {
|
abstract class AbstractDAO {
|
||||||
|
|
||||||
private static final int CACHE_ENTRIES_PER_SUBTYPE = 5; // rule of thumb: 5 entries times number of cached SearchParams sub-types
|
static final int CACHE_SIZE = 5;
|
||||||
private static final long CACHE_DURATION = 2;
|
static final long CACHE_DURATION = 5;
|
||||||
private static final TimeUnit CACHE_DURATION_UNITS = TimeUnit.MINUTES;
|
static final TimeUnit CACHE_DURATION_UNITS = TimeUnit.MINUTES;
|
||||||
|
|
||||||
static final Cache createCache(int subtypeCount) {
|
|
||||||
return CacheBuilder.newBuilder().maximumSize(2).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear any cached data (Due to change in view).
|
* Clear any cached data (Due to change in view).
|
||||||
|
@ -22,6 +22,7 @@ import org.sleuthkit.autopsy.mainui.datamodel.events.AnalysisResultSetEvent;
|
|||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.AnalysisResultEvent;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.AnalysisResultEvent;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
||||||
import com.google.common.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
|
import com.google.common.cache.CacheBuilder;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
@ -150,10 +151,9 @@ public class AnalysisResultDAO extends BlackboardArtifactDAO {
|
|||||||
BlackboardArtifact.Type.TSK_HASHSET_HIT.getTypeID()
|
BlackboardArtifact.Type.TSK_HASHSET_HIT.getTypeID()
|
||||||
);
|
);
|
||||||
|
|
||||||
private static final int SEARCH_SUBTYPE_COUNT = 3; // BlackboardArtifactSearchParam, AnalysisResultSetSearchParam, KeywordHitSearchParam
|
private final Cache<SearchParams<BlackboardArtifactSearchParam>, AnalysisResultTableSearchResultsDTO> analysisResultCache = CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build();
|
||||||
private final Cache<SearchParams<BlackboardArtifactSearchParam>, AnalysisResultTableSearchResultsDTO> analysisResultCache = createCache(SEARCH_SUBTYPE_COUNT);
|
private final Cache<SearchParams<AnalysisResultSetSearchParam>, AnalysisResultTableSearchResultsDTO> setHitCache = CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build();
|
||||||
private final Cache<SearchParams<AnalysisResultSetSearchParam>, AnalysisResultTableSearchResultsDTO> setHitCache = createCache(SEARCH_SUBTYPE_COUNT);
|
private final Cache<SearchParams<KeywordHitSearchParam>, AnalysisResultTableSearchResultsDTO> keywordHitCache = CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build();
|
||||||
private final Cache<SearchParams<KeywordHitSearchParam>, AnalysisResultTableSearchResultsDTO> keywordHitCache = createCache(SEARCH_SUBTYPE_COUNT);
|
|
||||||
|
|
||||||
private final TreeCounts<AnalysisResultEvent> treeCounts = new TreeCounts<>();
|
private final TreeCounts<AnalysisResultEvent> treeCounts = new TreeCounts<>();
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
package org.sleuthkit.autopsy.mainui.datamodel;
|
package org.sleuthkit.autopsy.mainui.datamodel;
|
||||||
|
|
||||||
import com.google.common.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
|
import com.google.common.cache.CacheBuilder;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -41,6 +42,9 @@ import org.sleuthkit.autopsy.casemodule.Case;
|
|||||||
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION_UNITS;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_SIZE;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeDisplayCount;
|
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeDisplayCount;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.CommAccountsEvent;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.CommAccountsEvent;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
||||||
@ -63,8 +67,8 @@ import org.sleuthkit.datamodel.TskCoreException;
|
|||||||
public class CommAccountsDAO extends AbstractDAO {
|
public class CommAccountsDAO extends AbstractDAO {
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(CommAccountsDAO.class.getName());
|
private static final Logger logger = Logger.getLogger(CommAccountsDAO.class.getName());
|
||||||
private static final int CACHE_SIZE = Account.Type.PREDEFINED_ACCOUNT_TYPES.size(); // number of cached SearchParams sub-types
|
private final Cache<SearchParams<CommAccountsSearchParams>, SearchResultsDTO> searchParamsCache =
|
||||||
private final Cache<SearchParams<CommAccountsSearchParams>, SearchResultsDTO> searchParamsCache = createCache(CACHE_SIZE);
|
CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build();
|
||||||
private final TreeCounts<CommAccountsEvent> accountCounts = new TreeCounts<>();
|
private final TreeCounts<CommAccountsEvent> accountCounts = new TreeCounts<>();
|
||||||
|
|
||||||
private static CommAccountsDAO instance = null;
|
private static CommAccountsDAO instance = null;
|
||||||
|
@ -22,6 +22,7 @@ import org.sleuthkit.autopsy.mainui.datamodel.events.DataArtifactEvent;
|
|||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEventUtils;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEventUtils;
|
||||||
import com.google.common.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
|
import com.google.common.cache.CacheBuilder;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -42,6 +43,9 @@ import org.apache.commons.lang3.tuple.Pair;
|
|||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION_UNITS;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_SIZE;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeDisplayCount;
|
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeDisplayCount;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeItemDTO;
|
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeItemDTO;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.TreeEvent;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.TreeEvent;
|
||||||
@ -81,7 +85,8 @@ public class DataArtifactDAO extends BlackboardArtifactDAO {
|
|||||||
return BlackboardArtifactDAO.getIgnoredTreeTypes();
|
return BlackboardArtifactDAO.getIgnoredTreeTypes();
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Cache<SearchParams<BlackboardArtifactSearchParam>, DataArtifactTableSearchResultsDTO> dataArtifactCache = createCache(BlackboardArtifact.ARTIFACT_TYPE.values().length);
|
private final Cache<SearchParams<BlackboardArtifactSearchParam>, DataArtifactTableSearchResultsDTO> dataArtifactCache =
|
||||||
|
CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build();
|
||||||
private final TreeCounts<DataArtifactEvent> treeCounts = new TreeCounts<>();
|
private final TreeCounts<DataArtifactEvent> treeCounts = new TreeCounts<>();
|
||||||
|
|
||||||
private DataArtifactTableSearchResultsDTO fetchDataArtifactsForTable(SearchParams<BlackboardArtifactSearchParam> cacheKey) throws NoCurrentCaseException, TskCoreException {
|
private DataArtifactTableSearchResultsDTO fetchDataArtifactsForTable(SearchParams<BlackboardArtifactSearchParam> cacheKey) throws NoCurrentCaseException, TskCoreException {
|
||||||
@ -110,7 +115,7 @@ public class DataArtifactDAO extends BlackboardArtifactDAO {
|
|||||||
return new DataArtifactRowDTO((DataArtifact) artifact, srcContent, linkedFile, isTimelineSupported, cellValues, id);
|
return new DataArtifactRowDTO((DataArtifact) artifact, srcContent, linkedFile, isTimelineSupported, cellValues, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SearchResultsDTO getDataArtifactsForTable(DataArtifactSearchParam artifactKey, long startItem, Long maxCount) throws ExecutionException, IllegalArgumentException {
|
public DataArtifactTableSearchResultsDTO getDataArtifactsForTable(DataArtifactSearchParam artifactKey, long startItem, Long maxCount) throws ExecutionException, IllegalArgumentException {
|
||||||
BlackboardArtifact.Type artType = artifactKey.getArtifactType();
|
BlackboardArtifact.Type artType = artifactKey.getArtifactType();
|
||||||
|
|
||||||
if (artType == null || artType.getCategory() != BlackboardArtifact.Category.DATA_ARTIFACT
|
if (artType == null || artType.getCategory() != BlackboardArtifact.Category.DATA_ARTIFACT
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
package org.sleuthkit.autopsy.mainui.datamodel;
|
package org.sleuthkit.autopsy.mainui.datamodel;
|
||||||
|
|
||||||
import com.google.common.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
|
import com.google.common.cache.CacheBuilder;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
@ -44,6 +45,9 @@ import org.sleuthkit.autopsy.casemodule.Case;
|
|||||||
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION_UNITS;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_SIZE;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeDisplayCount;
|
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeDisplayCount;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeItemDTO;
|
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeItemDTO;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
||||||
@ -67,12 +71,12 @@ import org.sleuthkit.datamodel.TskData;
|
|||||||
public class EmailsDAO extends AbstractDAO {
|
public class EmailsDAO extends AbstractDAO {
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(EmailsDAO.class.getName());
|
private static final Logger logger = Logger.getLogger(EmailsDAO.class.getName());
|
||||||
private static final int CACHE_SIZE = 15;
|
|
||||||
|
|
||||||
private static final String PATH_DELIMITER = "/";
|
private static final String PATH_DELIMITER = "/";
|
||||||
private static final String ESCAPE_CHAR = "\\";
|
private static final String ESCAPE_CHAR = "\\";
|
||||||
|
|
||||||
private final Cache<SearchParams<EmailSearchParams>, SearchResultsDTO> searchParamsCache = createCache(CACHE_SIZE);
|
private final Cache<SearchParams<EmailSearchParams>, SearchResultsDTO> searchParamsCache =
|
||||||
|
CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build();
|
||||||
|
|
||||||
private final TreeCounts<EmailEvent> emailCounts = new TreeCounts<>();
|
private final TreeCounts<EmailEvent> emailCounts = new TreeCounts<>();
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
package org.sleuthkit.autopsy.mainui.datamodel;
|
package org.sleuthkit.autopsy.mainui.datamodel;
|
||||||
|
|
||||||
import com.google.common.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
|
import com.google.common.cache.CacheBuilder;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -42,6 +43,9 @@ import org.sleuthkit.autopsy.casemodule.events.HostsAddedToPersonEvent;
|
|||||||
import org.sleuthkit.autopsy.casemodule.events.HostsRemovedFromPersonEvent;
|
import org.sleuthkit.autopsy.casemodule.events.HostsRemovedFromPersonEvent;
|
||||||
import org.sleuthkit.autopsy.casemodule.events.HostsUpdatedEvent;
|
import org.sleuthkit.autopsy.casemodule.events.HostsUpdatedEvent;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION_UNITS;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_SIZE;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEventUtils;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEventUtils;
|
||||||
import static org.sleuthkit.autopsy.mainui.datamodel.MediaTypeUtils.getExtensionMediaType;
|
import static org.sleuthkit.autopsy.mainui.datamodel.MediaTypeUtils.getExtensionMediaType;
|
||||||
@ -90,8 +94,6 @@ public class FileSystemDAO extends AbstractDAO {
|
|||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(FileSystemDAO.class.getName());
|
private static final Logger logger = Logger.getLogger(FileSystemDAO.class.getName());
|
||||||
|
|
||||||
private static final int CACHE_SIZE = 15; // rule of thumb: 5 entries times number of cached SearchParams sub-types
|
|
||||||
|
|
||||||
private static final Set<String> HOST_LEVEL_EVTS = ImmutableSet.of(
|
private static final Set<String> HOST_LEVEL_EVTS = ImmutableSet.of(
|
||||||
Case.Events.DATA_SOURCE_ADDED.toString(),
|
Case.Events.DATA_SOURCE_ADDED.toString(),
|
||||||
// this should trigger the case to be reopened
|
// this should trigger the case to be reopened
|
||||||
@ -107,7 +109,8 @@ public class FileSystemDAO extends AbstractDAO {
|
|||||||
Case.Events.HOSTS_REMOVED_FROM_PERSON.toString()
|
Case.Events.HOSTS_REMOVED_FROM_PERSON.toString()
|
||||||
);
|
);
|
||||||
|
|
||||||
private final Cache<SearchParams<?>, BaseSearchResultsDTO> searchParamsCache = createCache(CACHE_SIZE);
|
private final Cache<SearchParams<?>, BaseSearchResultsDTO> searchParamsCache =
|
||||||
|
CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build();
|
||||||
|
|
||||||
private final TreeCounts<DAOEvent> treeCounts = new TreeCounts<>();
|
private final TreeCounts<DAOEvent> treeCounts = new TreeCounts<>();
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.mainui.datamodel;
|
|||||||
|
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
||||||
import com.google.common.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
|
import com.google.common.cache.CacheBuilder;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -37,6 +38,9 @@ import org.python.google.common.collect.ImmutableSet;
|
|||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
||||||
import org.sleuthkit.autopsy.coreutils.TimeZoneUtils;
|
import org.sleuthkit.autopsy.coreutils.TimeZoneUtils;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION_UNITS;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_SIZE;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.OsAccountEvent;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.OsAccountEvent;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.ContentRowDTO.OsAccountRowDTO;
|
import org.sleuthkit.autopsy.mainui.datamodel.ContentRowDTO.OsAccountRowDTO;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.TreeEvent;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.TreeEvent;
|
||||||
@ -61,8 +65,8 @@ import org.sleuthkit.datamodel.TskCoreException;
|
|||||||
"OsAccountsDAO.fileColumns.noDescription=No Description",})
|
"OsAccountsDAO.fileColumns.noDescription=No Description",})
|
||||||
public class OsAccountsDAO extends AbstractDAO {
|
public class OsAccountsDAO extends AbstractDAO {
|
||||||
|
|
||||||
private static final int SEARCH_SUBTYPE_COUNT = 1;
|
private final Cache<SearchParams<?>, SearchResultsDTO> searchParamsCache =
|
||||||
private final Cache<SearchParams<?>, SearchResultsDTO> searchParamsCache = createCache(SEARCH_SUBTYPE_COUNT);
|
CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build();
|
||||||
|
|
||||||
private static final String OS_ACCOUNTS_TYPE_ID = "OS_ACCOUNTS";
|
private static final String OS_ACCOUNTS_TYPE_ID = "OS_ACCOUNTS";
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.mainui.datamodel;
|
|||||||
|
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
||||||
import com.google.common.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
|
import com.google.common.cache.CacheBuilder;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -43,6 +44,9 @@ import org.sleuthkit.autopsy.casemodule.events.ContentTagAddedEvent;
|
|||||||
import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent;
|
import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent;
|
||||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
import org.sleuthkit.autopsy.core.UserPreferences;
|
||||||
import org.sleuthkit.autopsy.coreutils.TimeZoneUtils;
|
import org.sleuthkit.autopsy.coreutils.TimeZoneUtils;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION_UNITS;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_SIZE;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.TagsSearchParams.TagType;
|
import org.sleuthkit.autopsy.mainui.datamodel.TagsSearchParams.TagType;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeItemDTO;
|
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeItemDTO;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.TagsEvent;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.TagsEvent;
|
||||||
@ -81,8 +85,6 @@ import org.sleuthkit.datamodel.TskCoreException;
|
|||||||
"TagsDAO.tagColumns.userNameColLbl=User Name"})
|
"TagsDAO.tagColumns.userNameColLbl=User Name"})
|
||||||
public class TagsDAO extends AbstractDAO {
|
public class TagsDAO extends AbstractDAO {
|
||||||
|
|
||||||
private static final int CACHE_SIZE = 5; // rule of thumb: 5 entries times number of cached SearchParams sub-types
|
|
||||||
|
|
||||||
private static final String USER_NAME_PROPERTY = "user.name"; //NON-NLS
|
private static final String USER_NAME_PROPERTY = "user.name"; //NON-NLS
|
||||||
|
|
||||||
private static final List<ColumnKey> FILE_TAG_COLUMNS = Arrays.asList(
|
private static final List<ColumnKey> FILE_TAG_COLUMNS = Arrays.asList(
|
||||||
@ -120,7 +122,8 @@ public class TagsDAO extends AbstractDAO {
|
|||||||
return new ColumnKey(name, name, Bundle.TagsDAO_fileColumns_noDescription());
|
return new ColumnKey(name, name, Bundle.TagsDAO_fileColumns_noDescription());
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Cache<SearchParams<TagsSearchParams>, SearchResultsDTO> searchParamsCache = createCache(CACHE_SIZE);
|
private final Cache<SearchParams<TagsSearchParams>, SearchResultsDTO> searchParamsCache =
|
||||||
|
CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build();
|
||||||
private final TreeCounts<TagsEvent> treeCounts = new TreeCounts<>();
|
private final TreeCounts<TagsEvent> treeCounts = new TreeCounts<>();
|
||||||
|
|
||||||
public SearchResultsDTO getTags(TagsSearchParams key, long startItem, Long maxCount) throws ExecutionException, IllegalArgumentException {
|
public SearchResultsDTO getTags(TagsSearchParams key, long startItem, Long maxCount) throws ExecutionException, IllegalArgumentException {
|
||||||
|
@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.mainui.datamodel;
|
|||||||
|
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent;
|
||||||
import com.google.common.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
|
import com.google.common.cache.CacheBuilder;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
@ -48,6 +49,9 @@ import org.sleuthkit.autopsy.casemodule.Case;
|
|||||||
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
||||||
import static org.sleuthkit.autopsy.core.UserPreferences.hideKnownFilesInViewsTree;
|
import static org.sleuthkit.autopsy.core.UserPreferences.hideKnownFilesInViewsTree;
|
||||||
import static org.sleuthkit.autopsy.core.UserPreferences.hideSlackFilesInViewsTree;
|
import static org.sleuthkit.autopsy.core.UserPreferences.hideSlackFilesInViewsTree;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION_UNITS;
|
||||||
|
import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_SIZE;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeDisplayCount;
|
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeDisplayCount;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeItemDTO;
|
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeItemDTO;
|
||||||
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEventUtils;
|
import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEventUtils;
|
||||||
@ -77,8 +81,6 @@ public class ViewsDAO extends AbstractDAO {
|
|||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(ViewsDAO.class.getName());
|
private static final Logger logger = Logger.getLogger(ViewsDAO.class.getName());
|
||||||
|
|
||||||
private static final int CACHE_SIZE = 15; // rule of thumb: 5 entries times number of cached SearchParams sub-types
|
|
||||||
|
|
||||||
private static final Map<String, Set<FileExtSearchFilter>> EXTENSION_FILTER_MAP
|
private static final Map<String, Set<FileExtSearchFilter>> EXTENSION_FILTER_MAP
|
||||||
= Stream.of((FileExtSearchFilter[]) FileExtRootFilter.values(), FileExtDocumentFilter.values(), FileExtExecutableFilter.values())
|
= Stream.of((FileExtSearchFilter[]) FileExtRootFilter.values(), FileExtDocumentFilter.values(), FileExtExecutableFilter.values())
|
||||||
.flatMap(arr -> Stream.of(arr))
|
.flatMap(arr -> Stream.of(arr))
|
||||||
@ -100,7 +102,8 @@ public class ViewsDAO extends AbstractDAO {
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Cache<SearchParams<Object>, SearchResultsDTO> searchParamsCache = createCache(1);
|
private final Cache<SearchParams<Object>, SearchResultsDTO> searchParamsCache =
|
||||||
|
CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build();
|
||||||
private final TreeCounts<DAOEvent> treeCounts = new TreeCounts<>();
|
private final TreeCounts<DAOEvent> treeCounts = new TreeCounts<>();
|
||||||
|
|
||||||
private SleuthkitCase getCase() throws NoCurrentCaseException {
|
private SleuthkitCase getCase() throws NoCurrentCaseException {
|
||||||
|
@ -520,13 +520,13 @@ public class TableSearchTest extends NbTestCase {
|
|||||||
accountMgr.newOsAccountInstance(osAccount1, dataSource2, OsAccountInstance.OsAccountInstanceType.LAUNCHED);
|
accountMgr.newOsAccountInstance(osAccount1, dataSource2, OsAccountInstance.OsAccountInstanceType.LAUNCHED);
|
||||||
|
|
||||||
// Add communication accounts
|
// Add communication accounts
|
||||||
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_A, "Test Module", fileA1);
|
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_A, "Test Module", fileA1, null);
|
||||||
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_B, "Test Module", fileA2);
|
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_B, "Test Module", fileA2, null);
|
||||||
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.DEVICE, "devId1", "Test Module", fileA2);
|
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.DEVICE, "devId1", "Test Module", fileA2, null);
|
||||||
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.PHONE, PHONENUM_1, "Test Module", fileA2);
|
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.PHONE, PHONENUM_1, "Test Module", fileA2, null);
|
||||||
|
|
||||||
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_C, "Test Module", customFile);
|
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_C, "Test Module", customFile, null);
|
||||||
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.PHONE, PHONENUM_2, "Test Module", customFile);
|
openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.PHONE, PHONENUM_2, "Test Module", customFile, null);
|
||||||
|
|
||||||
} catch (TestUtilsException | TskCoreException | BlackboardException | TagsManager.TagNameAlreadyExistsException | OsAccountManager.NotUserSIDException ex) {
|
} catch (TestUtilsException | TskCoreException | BlackboardException | TagsManager.TagNameAlreadyExistsException | OsAccountManager.NotUserSIDException ex) {
|
||||||
if (trans != null) {
|
if (trans != null) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user