Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dashboard changes #38

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,20 @@ private LAConstants() {
public static final String LOG_TIMESTAMP = "@timestamp";
public static final String LOG_TIMESTAMP_LONG = "@timestamp_long";
public static final String DAS_TIMESTAMP_FIELD = "_timestamp";
public static final String LOGSTREAM = "logstream";
public static final String TIMESTAMP_FIELD = "_eventTimeStamp";

public static final long EPOCH_DAYGAP = 86400000;

public static final String EVENT_STREAM_PERSIST_ADMINSERVICE = "EventStreamPersistenceAdminService";

//Date format constants
public static final String TIMESTAMP_PATTERN = "yyyy-MM-dd";
public static final String DAY_PATTERN = "yyyy-MM-dd";
public static final String WEEK_PATTERN = "Y/MM:W";
public static final String MONTH_PATTERN = "Y-MM";
public static final String YEAR_PATTERN = "YYYY";

// Data-set upload configurations
public static final String UPLOAD_SETTINGS = "dataUploadSettings";
public static final String UPLOAD_LOCATION = "uploadLocation";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,31 @@ public class QueryBean {

private long timeTo;

private String facetPath;

private String str_timeFrom;
private String str_timeTo;

public String getStr_timeFrom(){ return str_timeFrom; }

public void setStr_timeFrom(String str_timeFrom) {
this.str_timeFrom = str_timeFrom;
}

public void setStr_timeTo(String str_timeTo){
this.str_timeTo = str_timeTo;
}

public String getStr_timeTo(){ return str_timeTo; }

public int getLength() {
return length;
}

public String getFacetPath(){return facetPath;}

public void setFacetPath(String facetPath){this.facetPath=facetPath;}

public void setLength(int length) {
this.length = length;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package org.wso2.carbon.la.core.impl;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.analytics.api.AnalyticsDataAPI;
import org.wso2.carbon.analytics.dataservice.commons.AnalyticsDataResponse;
import org.wso2.carbon.analytics.dataservice.commons.AnalyticsDrillDownRequest;
import org.wso2.carbon.analytics.dataservice.commons.SearchResultEntry;
import org.wso2.carbon.analytics.dataservice.commons.exception.AnalyticsIndexException;
import org.wso2.carbon.analytics.datasource.commons.Record;
import org.wso2.carbon.analytics.datasource.commons.RecordGroup;
import org.wso2.carbon.analytics.datasource.commons.exception.AnalyticsException;
import org.wso2.carbon.la.core.utils.LACoreServiceValueHolder;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
* Created by vithulan on 3/4/16.
*/
public class DrilldownController {
private static final Log log = LogFactory.getLog(DrilldownController.class);
private AnalyticsDrillDownRequest analyticsDrillDownRequest;
private AnalyticsDataAPI analyticsDataAPI;
private AnalyticsDataResponse analyticsDataResponse;
public DrilldownController(){
analyticsDrillDownRequest = new AnalyticsDrillDownRequest();
analyticsDataAPI = LACoreServiceValueHolder.getInstance().getAnalyticsDataAPI();
}

/**
* @param tableName Table name of LogAnalyzer
* @param searchQuery Search query appended with timestamp
* @param length number of elements to be retrieved
* @param start starting point
* @param categoryPath facet path of logstream
* @param username username of user
* @param columnList List of columns that data has to be retrieved from
* @return list of iterators of search result.
*/
public List<Iterator<Record>> getResults(String tableName, String searchQuery, int length, int start,
Map<String, List<String>> categoryPath, String username, List<String> columnList){
List<SearchResultEntry> searchResultEntries = null;
try {
searchResultEntries = drillDownSearch(tableName,searchQuery,length,start,categoryPath,username);
} catch (AnalyticsIndexException e) {
String msg = String.format("Error occurred while drilldown searching");
log.error(msg,e);
}
List<String> ids = getRecordIds(searchResultEntries);
try {
analyticsDataResponse = analyticsDataAPI.get(username, tableName, 1, columnList, ids);
} catch (AnalyticsException e) {
String msg = String.format("Error occurred while filtering using column list");
log.error(msg,e);
}
List<Iterator<Record>> iterators = new ArrayList<>();
for (RecordGroup recordGroup : analyticsDataResponse.getRecordGroups()) {
try {
iterators.add(analyticsDataAPI.readRecords(analyticsDataResponse.getRecordStoreName(), recordGroup));
} catch (AnalyticsException e) {
String msg = String.format("Error occurred while getting record lists");
log.error(msg,e);
}
}

return iterators;
}

/**
*
* @param tableName Table name of LogAnalyzer
* @param searchQuery Search query with timestamp appended
* @param length number of entries to be returned
* @param start starting entry
* @param categoryPath facet path
* @param username username of user
* @return List of ids of search result entry
* @throws AnalyticsIndexException
*/
private List<SearchResultEntry> drillDownSearch(String tableName, String searchQuery, int length, int start,
Map<String, List<String>> categoryPath,
String username) throws AnalyticsIndexException {
analyticsDrillDownRequest.setTableName(tableName);
analyticsDrillDownRequest.setQuery(searchQuery);
analyticsDrillDownRequest.setRecordCount(length);
analyticsDrillDownRequest.setRecordStartIndex(start);
analyticsDrillDownRequest.setCategoryPaths(categoryPath);
return analyticsDataAPI.drillDownSearch(username, analyticsDrillDownRequest);

}

private List<String> getRecordIds(List<SearchResultEntry> searchResultEntries){
List<String> ids = new ArrayList<>();
for (SearchResultEntry searchResult : searchResultEntries) {
ids.add(searchResult.getId());
}
return ids;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,50 @@
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.analytics.api.AnalyticsDataAPI;
import org.wso2.carbon.analytics.dataservice.commons.AnalyticsDataResponse;
import org.wso2.carbon.analytics.dataservice.commons.AnalyticsDrillDownRequest;
import org.wso2.carbon.analytics.dataservice.commons.SearchResultEntry;
import org.wso2.carbon.analytics.dataservice.core.AnalyticsDataServiceUtils;
import org.wso2.carbon.analytics.datasource.commons.Record;
import org.wso2.carbon.analytics.datasource.commons.exception.AnalyticsException;
import org.wso2.carbon.la.commons.constants.LAConstants;
import org.wso2.carbon.la.commons.domain.QueryBean;
import org.wso2.carbon.la.commons.domain.RecordBean;
import org.wso2.carbon.la.core.utils.LACoreServiceValueHolder;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SearchController {

private static final Log log = LogFactory.getLog(SearchController.class);

private final String logstream = LAConstants.LOGSTREAM;
public List<RecordBean> search(QueryBean query, String username) throws AnalyticsException {
AnalyticsDrillDownRequest analyticsDrillDownRequest = new AnalyticsDrillDownRequest();

AnalyticsDataAPI analyticsDataService = LACoreServiceValueHolder.getInstance().getAnalyticsDataAPI();
if (query != null) {
String facetPath = query.getFacetPath();
Map<String,List<String>> categoryPath = new HashMap<>();
List<String> pathList = new ArrayList<>();
if(facetPath.equals("None")){
categoryPath.put(logstream,pathList);
}
else {
String pathArray[] = facetPath.split(",");
for (String path : pathArray) {
pathList.add(path);
}
categoryPath.put(logstream, pathList);
}
analyticsDrillDownRequest.setTableName(query.getTableName());
query.setQuery(appendTimeRangeToSearchQuery(query.getQuery(), query.getTimeFrom(), query.getTimeTo()));
List<SearchResultEntry> searchResults = analyticsDataService.search(username,query.getTableName(),
query.getQuery(),query.getStart(), query.getLength());
analyticsDrillDownRequest.setQuery(query.getQuery());
analyticsDrillDownRequest.setRecordCount(query.getLength());
analyticsDrillDownRequest.setRecordStartIndex(query.getStart());
analyticsDrillDownRequest.setCategoryPaths(categoryPath);
List<SearchResultEntry> searchResults = analyticsDataService.drillDownSearch(username,analyticsDrillDownRequest);
List<String> ids = getRecordIds(searchResults);
AnalyticsDataResponse resp = analyticsDataService.get(username, query.getTableName(), 1, null, ids);

Expand Down Expand Up @@ -93,7 +116,6 @@ public static RecordBean createRecordBean(Record record) {
recordBean.setValues(record.getValues());
return recordBean;
}

public int getRecordCount(String userName, QueryBean query) throws AnalyticsException {
AnalyticsDataAPI analyticsDataService = LACoreServiceValueHolder.getInstance().getAnalyticsDataAPI();
if(query!=null){
Expand Down
Loading