Repository: ambari Updated Branches: refs/heads/branch-dev-logsearch 3013589a1 -> ea644cc43
http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/DownloadUtil.java ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/DownloadUtil.java b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/DownloadUtil.java new file mode 100644 index 0000000..3fd4b45 --- /dev/null +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/DownloadUtil.java @@ -0,0 +1,176 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.ambari.logsearch.util; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import com.google.common.base.Splitter; +import org.apache.ambari.logsearch.common.LogSearchConstants; +import org.apache.ambari.logsearch.model.request.impl.ServiceLogExportRequest; +import org.apache.ambari.logsearch.model.response.BarGraphData; +import org.apache.ambari.logsearch.model.response.BarGraphDataListResponse; +import org.apache.ambari.logsearch.model.response.NameValueData; +import org.apache.ambari.logsearch.model.response.TemplateData; +import org.apache.commons.lang.StringUtils; +import org.apache.solr.common.SolrDocument; +import org.apache.solr.common.SolrDocumentList; + +import static org.apache.ambari.logsearch.solr.SolrConstants.ServiceLogConstants.LINE_NUMBER; +import static org.apache.ambari.logsearch.solr.SolrConstants.ServiceLogConstants.LOGTIME; +import static org.apache.ambari.logsearch.solr.SolrConstants.ServiceLogConstants.LOG_MESSAGE; +import static org.apache.ambari.logsearch.solr.SolrConstants.ServiceLogConstants.LEVEL; +import static org.apache.ambari.logsearch.solr.SolrConstants.ServiceLogConstants.HOST; +import static org.apache.ambari.logsearch.solr.SolrConstants.ServiceLogConstants.COMPONENT; +import static org.apache.ambari.logsearch.solr.SolrConstants.ServiceLogConstants.LOGGER_NAME; +import static org.apache.ambari.logsearch.solr.SolrConstants.ServiceLogConstants.THREAD_NAME; +import static org.apache.ambari.logsearch.solr.SolrConstants.ServiceLogConstants.FILE; + + +public class DownloadUtil { + + private DownloadUtil() { + throw new UnsupportedOperationException(); + } + + public static void fillModelsForLogFile(SolrDocumentList docList, Map<String, Object> models, ServiceLogExportRequest request, + String format, String from, String to) { + long numLogs = docList.getNumFound(); + List<String> hosts = new ArrayList<>(); + List<String> components = new ArrayList<>(); + List<String> levels = new ArrayList<>(); + List<TemplateData> logData = new ArrayList<>(); + for (SolrDocument doc : docList) { + if (doc != null) { + String hostname = (String) doc.getFieldValue(HOST); + String comp = (String) doc.getFieldValue(COMPONENT); + String level = (String) doc.getFieldValue(LEVEL); + + if (!hosts.contains(hostname)) { + hosts.add(hostname); + } + + if (!components.contains(comp)) { + components.add(comp); + } + + if (!levels.contains(level)) { + levels.add(level); + } + + StringBuffer textToWrite = new StringBuffer(); + + if (doc.getFieldValue(LOGTIME) != null) { + textToWrite.append(doc.getFieldValue(LOGTIME).toString() + " "); + } + if (doc.getFieldValue(LEVEL) != null) { + textToWrite.append(doc.getFieldValue(LEVEL).toString()).append(" "); + } + if (doc.getFieldValue(THREAD_NAME) != null) { + textToWrite.append(doc.getFieldValue(THREAD_NAME).toString().trim()).append(" "); + } + if (doc.getFieldValue(LOGGER_NAME) != null) { + textToWrite.append(doc.getFieldValue(LOGGER_NAME).toString().trim()).append(" "); + } + if (doc.getFieldValue(FILE) != null && doc.getFieldValue(LINE_NUMBER) != null) { + textToWrite + .append(doc.getFieldValue(FILE).toString()) + .append(":") + .append(doc.getFieldValue(LINE_NUMBER).toString()) + .append(" "); + } + if (doc.getFieldValue(LOG_MESSAGE) != null) { + textToWrite.append("- ") + .append(doc.getFieldValue(LOG_MESSAGE).toString()); + } + logData.add(new TemplateData((textToWrite.toString()))); + } + } + models.put("numberOfLogs", numLogs); + models.put("logs", logData); + models.put("hosts", "[ " + StringUtils.join(hosts, " ; ") + " ]"); + models.put("components", "[ " + StringUtils.join(components, " ; ") + " ]"); + models.put("format", format); + models.put("from", from); + models.put("levels", StringUtils.join(levels, ", ")); + models.put("to", to); + String includeString = request.getiMessage(); + if (StringUtils.isBlank(includeString)) { + includeString = "\"\""; + } else { + List<String> include = Splitter.on(request.getiMessage()).splitToList(LogSearchConstants.I_E_SEPRATOR); + includeString = "\"" + StringUtils.join(include, "\", \"") + "\""; + } + models.put("iString", includeString); + + String excludeString = request.geteMessage(); + if (StringUtils.isBlank(excludeString)) { + excludeString = "\"\""; + } else { + List<String> exclude = Splitter.on(request.getiMessage()).splitToList(LogSearchConstants.I_E_SEPRATOR); + excludeString = "\"" + StringUtils.join(exclude, "\", \"") + "\""; + } + models.put("eString", excludeString); + } + + public static void fillUserResourcesModel(Map<String, Object> models, BarGraphDataListResponse vBarUserDataList, BarGraphDataListResponse vBarResourceDataList) { + List<TemplateData> usersDataList = new ArrayList<>(); + List<TemplateData> resourceDataList = new ArrayList<>(); + Collection<BarGraphData> tableUserData = vBarUserDataList.getGraphData(); + for (BarGraphData graphData : tableUserData) { + String userName = graphData.getName().length() > 45 ? graphData.getName().substring(0, 45) : graphData.getName(); + Collection<NameValueData> vnameValueList = graphData.getDataCount(); + usersDataList.add(new TemplateData(appendNameValueData(addBlank(userName), vnameValueList))); + } + Collection<BarGraphData> tableResourceData = vBarResourceDataList.getGraphData(); + for (BarGraphData graphData : tableResourceData) { + String resourceName = graphData.getName().length() > 45 ? graphData.getName().substring(0, 45) : graphData.getName(); + Collection<NameValueData> vnameValueList = graphData.getDataCount(); + resourceDataList.add(new TemplateData(appendNameValueData(addBlank(resourceName), vnameValueList))); + } + models.put("users", usersDataList); + models.put("resources", resourceDataList); + models.put("usersSummary", vBarUserDataList.getGraphData().size()); + models.put("resourcesSummary", vBarResourceDataList.getGraphData().size()); + } + + private static String appendNameValueData(String data, Collection<NameValueData> vnameValueList) { + int count = 0; + String blank = ""; + for (NameValueData vNameValue : vnameValueList) { + data += blank + vNameValue.getName() + " " + vNameValue.getValue(); + if (count == 0) + blank = addBlank(blank); + count++; + } + return data; + } + + private static String addBlank(String field) { + int blanks = 50; + int strSize = field.length(); + String fieldWithBlank = field; + for (int i = 0; i < blanks - strSize; i++) { + fieldWithBlank += " "; + } + return fieldWithBlank; + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/FileUtil.java ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/FileUtil.java b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/FileUtil.java index 505b74d..f7330fa 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/FileUtil.java +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/FileUtil.java @@ -19,19 +19,9 @@ package org.apache.ambari.logsearch.util; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; import java.net.URL; -import java.util.List; -import java.util.Set; -import org.apache.ambari.logsearch.common.MessageEnums; -import org.apache.ambari.logsearch.view.VHost; -import org.apache.ambari.logsearch.view.VSummary; import org.apache.log4j.Logger; public class FileUtil { @@ -40,80 +30,6 @@ public class FileUtil { private FileUtil() { throw new UnsupportedOperationException(); } - - public static Response saveToFile(String text, String fileName, VSummary vsummary) { - String mainExportedFile = ""; - FileOutputStream fis = null; - try { - mainExportedFile = mainExportedFile + "**********************Summary**********************\n"; - mainExportedFile = mainExportedFile + "Number of Logs : " + vsummary.getNumberLogs() + "\n"; - mainExportedFile = mainExportedFile + "From : " + vsummary.getFrom() + "\n"; - mainExportedFile = mainExportedFile + "To : " + vsummary.getTo() + "\n"; - - List<VHost> hosts = vsummary.getHosts(); - String blankCharacterForHost = String.format("%-8s", ""); - int numberHost = 0; - for (VHost host : hosts) { - numberHost += 1; - String h = host.getName(); - String c = ""; - Set<String> comp = host.getComponents(); - boolean zonetar = true; - if (comp != null) { - for (String component : comp) { - if (zonetar) { - c = component; - zonetar = false; - } else { - c = c + ", " + component; - } - } - } - if (numberHost > 9){ - blankCharacterForHost = String.format("%-7s", blankCharacterForHost); - }else if (numberHost > 99){ - blankCharacterForHost = String.format("%-6s", blankCharacterForHost); - }else if (numberHost > 999){ - blankCharacterForHost = String.format("%-5s", blankCharacterForHost); - }else if (numberHost > 9999){ - blankCharacterForHost = String.format("%-4s", blankCharacterForHost); - }else if (numberHost > 99999){ - blankCharacterForHost = String.format("%-3s", blankCharacterForHost); - } - if (numberHost == 1) { - mainExportedFile = mainExportedFile + "Host" + blankCharacterForHost + " : " + h + " [" + c + "] " + "\n"; - } else if (numberHost > 1) { - mainExportedFile = mainExportedFile + "Host_" + numberHost + blankCharacterForHost + " : " + h + " [" + c + "] " + "\n"; - } - - } - mainExportedFile = mainExportedFile + "Levels"+String.format("%-9s", blankCharacterForHost)+": " + vsummary.getLevels() + "\n"; - mainExportedFile = mainExportedFile + "Format"+String.format("%-9s", blankCharacterForHost)+": " + vsummary.getFormat() + "\n"; - mainExportedFile = mainExportedFile + "\n"; - - mainExportedFile = mainExportedFile + "Included String: [" + vsummary.getIncludeString() + "]\n\n"; - mainExportedFile = mainExportedFile + "Excluded String: [" + vsummary.getExcludeString() + "]\n\n"; - mainExportedFile = mainExportedFile + "************************Logs***********************" + "\n"; - mainExportedFile = mainExportedFile + text + "\n"; - File file = File.createTempFile(fileName, vsummary.getFormat()); - fis = new FileOutputStream(file); - fis.write(mainExportedFile.getBytes()); - return Response - .ok(file, MediaType.APPLICATION_OCTET_STREAM) - .header("Content-Disposition", "attachment;filename=" + fileName + vsummary.getFormat()) - .build(); - } catch (Exception e) { - logger.error(e.getMessage()); - throw RESTErrorUtil.createRESTException(e.getMessage(), MessageEnums.ERROR_SYSTEM); - } finally { - if (fis != null) { - try { - fis.close(); - } catch (IOException e) { - } - } - } - } public static File getFileFromClasspath(String filename) { URL fileCompleteUrl = Thread.currentThread().getContextClassLoader().getResource(filename); http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/SolrUtil.java ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/SolrUtil.java b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/SolrUtil.java index 33262f3..c67cf27 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/SolrUtil.java +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/SolrUtil.java @@ -19,146 +19,45 @@ package org.apache.ambari.logsearch.util; -import java.util.Collection; import java.util.HashMap; -import java.util.Locale; +import java.util.Map; import org.apache.ambari.logsearch.common.LogSearchConstants; -import org.apache.ambari.logsearch.dao.SolrDaoBase; +import org.apache.lucene.analysis.core.KeywordTokenizerFactory; +import org.apache.lucene.analysis.path.PathHierarchyTokenizerFactory; +import org.apache.lucene.analysis.standard.StandardTokenizerFactory; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.schema.TrieDoubleField; import org.apache.solr.schema.TrieFloatField; import org.apache.solr.schema.TrieIntField; import org.apache.solr.schema.TrieLongField; -import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; -import org.springframework.util.CollectionUtils; public class SolrUtil { private SolrUtil() { throw new UnsupportedOperationException(); } - - public static String setField(String fieldName, String value) { - if (value == null || value.trim().length() == 0) { - return ""; - } - return fieldName + ":" + value.trim().toLowerCase(Locale.ENGLISH); - } - - public static String inList(String fieldName, int[] values) { - if (ArrayUtils.isEmpty(values)) { - return ""; - } - String expr = ""; - // Add the filter queries - for (int i : values) { - expr += i + " "; - } - if (values.length == 0) { - return fieldName + ":" + expr; - } else { - return fieldName + ":(" + expr + ")"; - } - } - - public static String inList(Collection<Long> values) { - if (CollectionUtils.isEmpty(values)) { - return ""; - } - String expr = ""; - for (Long value : values) { - expr += value.toString() + " "; - } - - if (values.isEmpty()) { - return expr.trim(); - } else { - return "(" + expr.trim() + ")"; - } - - } - - public static String orList(String fieldName, String[] valueList, String wildCard) { - if (ArrayUtils.isEmpty(valueList)) { - return ""; - } - - if (StringUtils.isBlank(wildCard)) { - wildCard = ""; - } - - StringBuilder expr = new StringBuilder(); - int count = -1; - for (String value : valueList) { - count++; - if (count > 0) { - expr.append(" OR "); - } - - expr.append( fieldName + ":"+ wildCard + value + wildCard); - - } - if (valueList.length == 0) { - return expr.toString(); - } else { - return "(" + expr + ")"; - } - - } - - public static String andList(String fieldName, String[] valueList, String wildCard) { - if (ArrayUtils.isEmpty(valueList)) { - return ""; - } - - if (StringUtils.isBlank(wildCard)) { - wildCard = ""; - } - - StringBuilder expr = new StringBuilder(); - int count = -1; - for (String value : valueList) { - count++; - if (count > 0) { - expr.append(" AND "); - } - - expr.append( fieldName + ":"+ wildCard + value + wildCard); - - } - if (valueList.length == 0) { - return expr.toString(); - } else { - return "(" + expr + ")"; - } - - } /** * Copied from Solr ClientUtils.escapeQueryChars and removed escaping * */ public static String escapeQueryChars(String s) { StringBuilder sb = new StringBuilder(); - int prev = 0; if (s != null) { for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); - int ic = (int)c; - if( ic == 10 ) { - if( prev != 13) { - //Let's insert \r - sb.append('\\'); - sb.append((char)13); - } + int ic = (int) c; + if (ic == 10) { + sb.append('\\'); + sb.append((char) 13); } // Note: Remove || c == '*' // These characters are part of the query syntax and must be escaped if (c == '\\' || c == '+' || c == '-' || c == '!' || c == '(' - || c == ')' || c == ':' || c == '^' || c == '[' || c == ']' - || c == '\"' || c == '{' || c == '}' || c == '~' || c == '?' - || c == '|' || c == '&' || c == ';' || c == '/' - || Character.isWhitespace(c)) { + || c == ')' || c == ':' || c == '^' || c == '[' || c == ']' + || c == '\"' || c == '{' || c == '}' || c == '~' || c == '?' + || c == '|' || c == '&' || c == ';' || c == '/' + || Character.isWhitespace(c)) { sb.append('\\'); } sb.append(c); @@ -167,25 +66,6 @@ public class SolrUtil { return sb.toString(); } - private static String escapeForWhiteSpaceTokenizer(String search) { - if (search == null) { - return null; - } - String newString = search.trim(); - String newSearch = escapeQueryChars(newString); - boolean isSingleWord = true; - for (int i = 0; i < search.length(); i++) { - if (Character.isWhitespace(search.charAt(i))) { - isSingleWord = false; - } - } - if (!isSingleWord) { - newSearch = "\"" + newSearch + "\""; - } - - return newSearch; - } - public static String escapeForStandardTokenizer(String search) { if (search == null) { return null; @@ -224,16 +104,14 @@ public class SolrUtil { * This is a special case scenario to handle log_message for wild card * scenarios */ - public static String escapeForLogMessage(String field, String search) { + public static String escapeForLogMessage(String search) { if (search.startsWith("*") && search.endsWith("*")) { - field = LogSearchConstants.SOLR_KEY_LOG_MESSAGE; search = escapeForKeyTokenizer(search); } else { // Use whitespace index - field = LogSearchConstants.SOLR_LOG_MESSAGE; - search = escapeForWhiteSpaceTokenizer(search); + search = escapeForStandardTokenizer(search); } - return field + ":" + search; + return search; } public static String makeSolrSearchString(String search) { @@ -270,11 +148,11 @@ public class SolrUtil { } - public static boolean isSolrFieldNumber(String fieldType,SolrDaoBase solrDaoBase) { + public static boolean isSolrFieldNumber(String fieldType, Map<String, String> schemaFieldsMap) { if (StringUtils.isBlank(fieldType)) { return false; } else { - HashMap<String, Object> typeInfoMap = getFieldTypeInfoMap(fieldType,solrDaoBase); + HashMap<String, Object> typeInfoMap = getFieldTypeInfoMap(fieldType, schemaFieldsMap); if (typeInfoMap == null || typeInfoMap.isEmpty()) { return false; } @@ -294,12 +172,63 @@ public class SolrUtil { return false; } } + + public static String putWildCardByType(String str, String key, Map<String, String> schemaFieldsMap) { + String fieldType = schemaFieldsMap.get(key); + if (!StringUtils.isBlank(fieldType)) { + if (isSolrFieldNumber(fieldType, schemaFieldsMap)) { + String value = putEscapeCharacterForNumber(str, fieldType, schemaFieldsMap); + if (!StringUtils.isBlank(value)) { + return value; + } else { + return null; + } + } else if (checkTokenizer(fieldType, StandardTokenizerFactory.class, schemaFieldsMap)) { + return escapeForStandardTokenizer(str); + } else if (checkTokenizer(fieldType, KeywordTokenizerFactory.class, schemaFieldsMap)|| "string".equalsIgnoreCase(fieldType)) { + return makeSolrSearchStringWithoutAsterisk(str); + } else if (checkTokenizer(fieldType, PathHierarchyTokenizerFactory.class, schemaFieldsMap)) { + return str; + } + } + return str; + } + + private static String putEscapeCharacterForNumber(String str,String fieldType, Map<String, String> schemaFieldsMap) { + if (!StringUtils.isBlank(str)) { + str = str.replace("*", ""); + } + String escapeCharSting = parseInputValueAsPerFieldType(str,fieldType, schemaFieldsMap); + if (escapeCharSting == null || escapeCharSting.isEmpty()) { + return null; + } + escapeCharSting = escapeCharSting.replace("-", "\\-"); + return escapeCharSting; + } + + private static String parseInputValueAsPerFieldType(String str,String fieldType, Map<String, String> schemaFieldsMap) { + try { + HashMap<String, Object> fieldTypeInfoMap = SolrUtil.getFieldTypeInfoMap(fieldType, schemaFieldsMap); + String className = (String) fieldTypeInfoMap.get("class"); + if (className.equalsIgnoreCase(TrieDoubleField.class.getSimpleName())) { + return "" + Double.parseDouble(str); + } else if (className.equalsIgnoreCase(TrieFloatField.class.getSimpleName())) { + return "" + Float.parseFloat(str); + } else if (className.equalsIgnoreCase(TrieLongField.class.getSimpleName())) { + return "" + Long.parseLong(str); + } else { + return "" + Integer.parseInt(str); + } + } catch (Exception e) { + return null; + } + } - public static HashMap<String, Object> getFieldTypeInfoMap(String fieldType,SolrDaoBase solrDaoBase) { - String fieldTypeMetaData = solrDaoBase.schemaFieldTypeMap.get(fieldType); + public static HashMap<String, Object> getFieldTypeInfoMap(String fieldType, Map<String, String> schemaFieldsTypeMap) { + String fieldTypeMetaData = schemaFieldsTypeMap.get(fieldType); HashMap<String, Object> fieldTypeMap = JSONUtil.jsonToMapObject(fieldTypeMetaData); if (fieldTypeMap == null) { - return new HashMap<String, Object>(); + return new HashMap<>(); } String classname = (String) fieldTypeMap.get("class"); if (!StringUtils.isBlank(classname)) { @@ -310,8 +239,7 @@ public class SolrUtil { } //============================================================================================================= - - //Solr Facet Methods + public static void setFacetField(SolrQuery solrQuery, String facetField) { solrQuery.setFacet(true); setRowCount(solrQuery, 0); @@ -319,13 +247,6 @@ public class SolrUtil { setFacetLimit(solrQuery, -1); } - public static void setJSONFacet(SolrQuery solrQuery, String jsonQuery) { - solrQuery.setFacet(true); - setRowCount(solrQuery, 0); - solrQuery.set(LogSearchConstants.FACET_JSON_FIELD, jsonQuery); - setFacetLimit(solrQuery, -1); - } - public static void setFacetSort(SolrQuery solrQuery, String sortType) { solrQuery.setFacet(true); solrQuery.setFacetSort(sortType); @@ -339,50 +260,10 @@ public class SolrUtil { setFacetLimit(solrQuery, -1); } - public static void setFacetDate(SolrQuery solrQuery, String facetField, String from, String to, String unit) { - solrQuery.setFacet(true); - setRowCount(solrQuery, 0); - solrQuery.set(LogSearchConstants.FACET_DATE, facetField); - solrQuery.set(LogSearchConstants.FACET_DATE_START, from); - solrQuery.set(LogSearchConstants.FACET_DATE_END, to); - solrQuery.set(LogSearchConstants.FACET_DATE_GAP, unit); - solrQuery.set(LogSearchConstants.FACET_MINCOUNT, 0); - setFacetLimit(solrQuery, -1); - } - - public static void setFacetRange(SolrQuery solrQuery, String facetField, String from, String to, String unit) { - solrQuery.setFacet(true); - setRowCount(solrQuery, 0); - solrQuery.set(LogSearchConstants.FACET_RANGE, facetField); - solrQuery.set(LogSearchConstants.FACET_RANGE_START, from); - solrQuery.set(LogSearchConstants.FACET_RANGE_END, to); - solrQuery.set(LogSearchConstants.FACET_RANGE_GAP, unit); - solrQuery.set(LogSearchConstants.FACET_MINCOUNT, 0); - setFacetLimit(solrQuery, -1); - } - public static void setFacetLimit(SolrQuery solrQuery, int limit) { solrQuery.set("facet.limit", limit); } - //Solr Group Mehtods - public static void setGroupField(SolrQuery solrQuery, String groupField, int rows) { - solrQuery.set(LogSearchConstants.FACET_GROUP, true); - solrQuery.set(LogSearchConstants.FACET_GROUP_FIELD, groupField); - solrQuery.set(LogSearchConstants.FACET_GROUP_MAIN, true); - setRowCount(solrQuery, rows); - } - - //Main Query - public static void setMainQuery(SolrQuery solrQuery, String query) { - String defalultQuery = "*:*"; - if (StringUtils.isBlank(query)){ - solrQuery.setQuery(defalultQuery); - }else{ - solrQuery.setQuery(query); - } - } - public static void setStart(SolrQuery solrQuery, int start) { int defaultStart = 0; if (start > defaultStart) { @@ -392,7 +273,6 @@ public class SolrUtil { } } - //Set Number of Rows public static void setRowCount(SolrQuery solrQuery, int rows) { if (rows > 0) { solrQuery.setRows(rows); @@ -401,18 +281,28 @@ public class SolrUtil { solrQuery.remove(LogSearchConstants.SORT); } } - - //Solr Facet Methods - public static void setFacetFieldWithMincount(SolrQuery solrQuery, String facetField, int minCount) { - solrQuery.setFacet(true); - setRowCount(solrQuery, 0); - solrQuery.set(LogSearchConstants.FACET_FIELD, facetField); - solrQuery.set(LogSearchConstants.FACET_MINCOUNT, minCount); - setFacetLimit(solrQuery, -1); - } public static void setFl(SolrQuery solrQuery,String field){ solrQuery.set(LogSearchConstants.FL, field); } + + private static boolean checkTokenizer(String fieldType, Class tokenizerFactoryClass, Map<String, String> schemaFieldsMap) { + HashMap<String, Object> fieldTypeMap = SolrUtil.getFieldTypeInfoMap(fieldType ,schemaFieldsMap); + HashMap<String, Object> analyzer = (HashMap<String, Object>) fieldTypeMap.get("analyzer"); + if (analyzer != null) { + HashMap<String, Object> tokenizerMap = (HashMap<String, Object>) analyzer.get("tokenizer"); + if (tokenizerMap != null) { + String tokenizerClass = (String) tokenizerMap.get("class"); + if (!StringUtils.isEmpty(tokenizerClass)) { + tokenizerClass =tokenizerClass.replace("solr.", ""); + if (tokenizerClass.equalsIgnoreCase(tokenizerFactoryClass + .getSimpleName())) { + return true; + } + } + } + } + return false; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchKRBAuthenticationFilter.java ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchKRBAuthenticationFilter.java b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchKRBAuthenticationFilter.java index 8cd435b..29fd5b2 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchKRBAuthenticationFilter.java +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchKRBAuthenticationFilter.java @@ -61,7 +61,6 @@ import org.apache.hadoop.security.authentication.server.KerberosAuthenticationHa import org.apache.hadoop.security.authentication.server.PseudoAuthenticationHandler; import org.apache.hadoop.security.authentication.util.KerberosName; import org.springframework.security.web.authentication.WebAuthenticationDetails; -import org.springframework.stereotype.Component; public class LogsearchKRBAuthenticationFilter extends LogsearchKrbFilter { private static final Logger logger = LoggerFactory.getLogger(LogsearchKRBAuthenticationFilter.class); http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchAuthenticationProvider.java ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchAuthenticationProvider.java b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchAuthenticationProvider.java index 05104b4..d37e545 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchAuthenticationProvider.java +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchAuthenticationProvider.java @@ -27,11 +27,11 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticatio import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.authentication.WebAuthenticationDetails; -import org.springframework.stereotype.Component; import javax.inject.Inject; +import javax.inject.Named; -@Component +@Named public class LogsearchAuthenticationProvider extends LogsearchAbstractAuthenticationProvider { private static final Logger logger = Logger http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java index a89b5dd..7e146ac 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; import javax.inject.Inject; +import javax.inject.Named; import org.apache.ambari.logsearch.common.ExternalServerClient; import org.apache.ambari.logsearch.common.PropertiesHelper; @@ -34,14 +35,13 @@ import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; -import org.springframework.stereotype.Component; /** * * Authentication provider to authenticate user from external-server using REST * call */ -@Component +@Named public class LogsearchExternalServerAuthenticationProvider extends LogsearchAbstractAuthenticationProvider { @@ -152,10 +152,9 @@ public class LogsearchExternalServerAuthenticationProvider extends */ @SuppressWarnings("static-access") private boolean isAllowedRole(String responseJson) { - String allowedRoleList[] = PropertiesHelper - .getPropertyStringList(ALLOWED_ROLE_PROP); + String allowedRoleList[] = PropertiesHelper.getPropertyStringList(ALLOWED_ROLE_PROP); - List<String> values = new ArrayList<String>(); + List<String> values = new ArrayList<>(); JSONUtil.getValuesOfKey(responseJson, PRIVILEGE_INFO.PERMISSION_NAME.toString(), values); if (values.isEmpty()) http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java index dc70b82..51b3547 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java @@ -32,11 +32,11 @@ import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.stereotype.Component; import javax.inject.Inject; +import javax.inject.Named; -@Component +@Named public class LogsearchFileAuthenticationProvider extends LogsearchAbstractAuthenticationProvider { private static Logger logger = Logger.getLogger(LogsearchFileAuthenticationProvider.class); http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchLdapAuthenticationProvider.java ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchLdapAuthenticationProvider.java b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchLdapAuthenticationProvider.java index 52dd66e..ed4d7ef 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchLdapAuthenticationProvider.java +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchLdapAuthenticationProvider.java @@ -30,12 +30,12 @@ import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.ldap.authentication.LdapAuthenticationProvider; import org.springframework.security.ldap.search.FilterBasedLdapUserSearch; -import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.inject.Inject; +import javax.inject.Named; -@Component +@Named public class LogsearchLdapAuthenticationProvider extends LogsearchAbstractAuthenticationProvider { http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java index 17d099b..400361b 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java @@ -27,11 +27,11 @@ import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; -import org.springframework.stereotype.Component; import javax.inject.Inject; +import javax.inject.Named; -@Component +@Named public class LogsearchSimpleAuthenticationProvider extends LogsearchAbstractAuthenticationProvider { private static Logger logger = Logger.getLogger(LogsearchSimpleAuthenticationProvider.class); http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/resources/default.properties ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/resources/default.properties b/ambari-logsearch/ambari-logsearch-portal/src/main/resources/default.properties index 9a44761..c98a482 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/resources/default.properties +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/resources/default.properties @@ -24,4 +24,3 @@ logsearch.logfeeder.include.default.level=FATAL,ERROR,WARN,INFO,DEBUG,TRACE #login config logsearch.login.credentials.file=user_pass.json logsearch.login.ldap.config=logsearch-admin-site.xml -logsearch.solr.warming.cron=0 0/10 * * * ? http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/resources/templates/audit_log_txt.ftl ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/resources/templates/audit_log_txt.ftl b/ambari-logsearch/ambari-logsearch-portal/src/main/resources/templates/audit_log_txt.ftl new file mode 100644 index 0000000..587e366 --- /dev/null +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/resources/templates/audit_log_txt.ftl @@ -0,0 +1,42 @@ +<#-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You 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. +--> +--------------------------------SUMMARY----------------------------------- +Users = ${usersSummary} +Resources = ${resourcesSummary} + + + + +Users Components/Access +-------------------------------------------------------------------------- +<#if users??> + <#list users as user> +${user.data} + </#list> +</#if> + + + + + +Resources Components/Access +-------------------------------------------------------------------------- +<#if resources??> + <#list resources as resource> +${resource.data} + </#list> +</#if> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/resources/templates/service_log_txt.ftl ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/resources/templates/service_log_txt.ftl b/ambari-logsearch/ambari-logsearch-portal/src/main/resources/templates/service_log_txt.ftl new file mode 100644 index 0000000..8a5e19d --- /dev/null +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/resources/templates/service_log_txt.ftl @@ -0,0 +1,36 @@ +<#-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You 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. +--> +**********************Summary********************** +Number of Logs : ${numberOfLogs} +From : ${from} +To : ${to} +Host : ${hosts} +Component : ${components} +Levels : ${levels} +Format : ${format} + +Included String: [${iString}] + +Excluded String: [${eString}] + +************************Logs*********************** +2016-09-26 11:49:19,723 WARN MainThread lock.py:60 - Releasing the lock. +<#if logs??> + <#list logs as log> +${log.data} + </#list> +</#if> http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/collection_bases/VLogListBase.js ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/collection_bases/VLogListBase.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/collection_bases/VLogListBase.js index 08a8271..5fc4bac 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/collection_bases/VLogListBase.js +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/collection_bases/VLogListBase.js @@ -89,7 +89,7 @@ define(['require', return this.constructor.nonCrudOperation.call(this, url, 'GET', options); }, - getTruncatedLogs : function(token, options){ + getTruncatedLogs : function(token, options){ var url = Globals.baseURL + 'service/logs/truncated'; options = _.extend({ http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/utils/ViewUtils.js ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/utils/ViewUtils.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/utils/ViewUtils.js index 4c23290..6d587cd 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/utils/ViewUtils.js +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/utils/ViewUtils.js @@ -57,7 +57,7 @@ define(['require', if (params.bundle_id && !params.start_time && !params.end_time) { var collection = new VNameValueList(); - collection.url = Globals.baseURL + "service/logs/solr/boundarydates"; + collection.url = Globals.baseURL + "service/logs/boundarydates"; collection.modelAttrName = "vNameValues"; _.extend(collection.queryParams, { "bundle_id": params.bundle_id http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/audit/AuditAggregatedView.js ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/audit/AuditAggregatedView.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/audit/AuditAggregatedView.js index ef6dce5..0822051 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/audit/AuditAggregatedView.js +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/audit/AuditAggregatedView.js @@ -98,7 +98,7 @@ define(['require', pageSize: 9999 } }); - this.topUsers.url = Globals.baseURL + "audit/logs/users"; + this.topUsers.url = Globals.baseURL + "audit/logs/resources/10"; this.topUsers.modelAttrName = "graphData"; this.topResources = new VNameValueList([],{ state: { @@ -106,7 +106,7 @@ define(['require', pageSize: 9999 } }); - this.topResources.url = Globals.baseURL + "audit/logs/resources"; + this.topResources.url = Globals.baseURL + "audit/logs/resources/10"; this.topResources.modelAttrName = "graphData"; //initialize colors this.colors = (new d3.scale.category20c().range().slice().reverse()).concat(new d3.scale.category20b().range().slice().reverse()); @@ -408,7 +408,7 @@ define(['require', obj.utcOffset = moment().utcOffset(); obj.startIndex = this.topUsers.state.currentPage * this.topUsers.state.pageSize; var params = $.param(_.extend({},this.topUsers.queryParams,obj)); - var url = "api/v1/audit/logs/users/export?"+ params; + var url = "api/v1/audit/logs/export?"+ params; window.open(url); this.onDialogClosed(); } http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dashboard/LogLevelBoxView.js ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dashboard/LogLevelBoxView.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dashboard/LogLevelBoxView.js index 0e7f1b8..eb73fb8 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dashboard/LogLevelBoxView.js +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/dashboard/LogLevelBoxView.js @@ -62,7 +62,7 @@ define(['require', initialize: function(options) { _.extend(this, _.pick(options,'vent','globalVent','params')); this.logLevelList = new VLogLevelList(); - this.logLevelList.url = Globals.baseURL + "service/logs/levels/counts/namevalues"; + this.logLevelList.url = Globals.baseURL + "service/logs/levels/counts"; this.logLevelList.modelAttrName = "vNameValues"; this.bindEvents(); }, http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/filter/CreateLogfeederFilterView.js ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/filter/CreateLogfeederFilterView.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/filter/CreateLogfeederFilterView.js index 2c7f0aa..9bdf0fa 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/filter/CreateLogfeederFilterView.js +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/filter/CreateLogfeederFilterView.js @@ -211,10 +211,10 @@ define(['require', onEditHost : function(e){ var $el = $(e.currentTarget); $el.hide(); - if($el.data("type") == "host_name"){ - this.showHostSelect2($el.data("component_name")); + if($el.data("type") == "host"){ + this.showHostSelect2($el.data("component")); }else{ - this.showExpiry($el.data("component_name")); + this.showExpiry($el.data("component")); } }, hideHostSelect2 : function(forComponent){ http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/HierarchyTabLayoutView.js ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/HierarchyTabLayoutView.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/HierarchyTabLayoutView.js index 43ee5db..298f401 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/HierarchyTabLayoutView.js +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/tabs/HierarchyTabLayoutView.js @@ -300,6 +300,7 @@ define(['require', eventName: Globals.eventName.serviceLogsExcludeColumns, myFormatData: function (query, searchCollection) { var obj = ViewUtils.replaceColumnNamesWithKeys(searchCollection, Globals.invertedServiceLogMappings, false); + console.log(obj) return { excludeQuery: JSON.stringify(obj), query: query http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/troubleshoot/TroubleShootLayoutView.js ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/troubleshoot/TroubleShootLayoutView.js b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/troubleshoot/TroubleShootLayoutView.js index a6445c6..b19f3ce 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/troubleshoot/TroubleShootLayoutView.js +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/scripts/views/troubleshoot/TroubleShootLayoutView.js @@ -82,7 +82,7 @@ define(['backbone', } }); - this.serviceLogsCollection.url = Globals.baseURL + "service/logs/anygraph"; + this.serviceLogsCollection.url = Globals.baseURL + "service/logs/count/anygraph"; this.serviceLogsCollection.modelAttrName = "graphData"; this.topUsers = new VNameValueList([],{ @@ -91,7 +91,7 @@ define(['backbone', pageSize: 9999 } }); - this.topUsers.url = Globals.baseURL + "audit/logs/users"; + this.topUsers.url = Globals.baseURL + "audit/logs/resources/10"; this.topUsers.modelAttrName = "graphData"; this.serviceLoadCollection = new VLogList([], { @@ -133,7 +133,7 @@ define(['backbone', }, onRender : function(){ var that = this; - this.fetchTopUsers(this.params); + this.fetchTopUsers(_.extend({field : "reqUser"},this.params)); this.serviceLogsCollection.getServicesInfo({ success : function(resp){ Globals.servicesInfo = resp; http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/tabs/LogFileView_tmpl.html ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/tabs/LogFileView_tmpl.html b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/tabs/LogFileView_tmpl.html index f86190c..0f0f143 100644 --- a/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/tabs/LogFileView_tmpl.html +++ b/ambari-logsearch/ambari-logsearch-portal/src/main/webapp/templates/tabs/LogFileView_tmpl.html @@ -15,38 +15,6 @@ limitations under the License. --> <div class="row"> - <!-- div class="col-md-3"> - <div class="row"> - <div class="col-md-12"> - <div class="box"> - <div class="box-header"> - <div class="box-name"> - <span>Search</span> - </div> - <div class="box-icons"> - <a class="collapse-link"> <i class="fa fa-chevron-up"></i> - </a> <a class=""> <i class="fa fa-gear"></i> - </a> <a class="close-link"> <i class="fa fa-close"></i> - </a> - </div> - <div class="no-move"></div> - </div> - <div class="box-content"> - <div class="input-group"> - <input data-id="hierarchySearch" type="text" class="form-control" - placeholder="Search" value="*:*"> <span - class="input-group-btn"> - <button data-id="hierarchySearchBtn" - class="btn btn-default btn-search" type="button"> - <i class="fa fa-search"></i> - </button> - </span> - </div> - </div> - </div> - </div> - </div> - </div--> <div class="col-md-12"> <div class="row topLevelFilter"> <div id="r_LogLevel" class="col-md-5"></div> @@ -54,28 +22,17 @@ <div id="r_LogSnapShot" class="col-md-1 col-sm-2"></div> <div class="row "> <div class="col-md-12 fixedSearchBox hiddeBox"> - <!-- div id="r_VSSearch"></div--> <div class="col-md-6" data-id="r_vsSearchIncCol"></div> <div class="col-md-6" data-id="r_vsSearchExCol"></div> </div> </div> </div> <div class="setHeight_LogFile"></div> -<!-- <div class="row"> - <div class="col-md-12"> - <div id="r_LogLevel"></div> - </div> - </div> --> <div class="row"> <div class="col-md-12"> <div id="r_Histogram"></div> </div> </div> - <!-- <div class="row row-margin-bottom"> - <div class="col-md-12"> - <div id="r_VSSearch"></div> - </div> - </div> --> <div class="row"> <div class="col-md-12"> <div class="box"> @@ -97,17 +54,13 @@ <i class="fa fa-sign-out"></i> </a> <a class="collapse-link"> <i class="fa fa-chevron-up"></i> - </a> - <!-- <a class="expand-link"> <i class="fa fa-expand"></i></a> - <a class="close-link"> <i class="fa fa-close"></i></a> --> - + </a> </div> <div class="no-move"></div> </div> <div class="box-content"> <div class="col-md-4 advance-find"> <div class="input-group"> - <!-- span class="input-group-addon">1 of 40</span --> <span class="input-group-btn"> <button data-id="lock" title="Lock position" class="btn btn-default btn-search no-margin" type="button"><i class="fa fa-unlock"></i> </button></span> @@ -135,7 +88,6 @@ </button> <button data-id="cancelFind" class="btn btn-default btn-search no-margin" style="display:none;">cancel</button> <button style="display:none;" class="no-margin btn-notification pageNotation" type="button"> </button> - <!-- <span class="pageNotation"></span> --> </span> </div> </div> http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/query/converter/BaseServiceLogRequestQueryConverterTest.java ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/query/converter/BaseServiceLogRequestQueryConverterTest.java b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/query/converter/BaseServiceLogRequestQueryConverterTest.java new file mode 100644 index 0000000..91fe5ca --- /dev/null +++ b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/query/converter/BaseServiceLogRequestQueryConverterTest.java @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.ambari.logsearch.query.converter; + +import org.apache.ambari.logsearch.model.request.impl.ServiceLogRequest; +import org.apache.solr.client.solrj.SolrQuery; +import org.easymock.EasyMockRunner; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.data.solr.core.DefaultQueryParser; +import org.springframework.data.solr.core.query.SimpleQuery; + +import java.util.HashMap; +import java.util.Map; + +@RunWith(EasyMockRunner.class) +public class BaseServiceLogRequestQueryConverterTest { + + private BaseServiceLogRequestQueryConverter underTest; + + private Map<String, String> fieldMap = new HashMap<>(); + + private Map<String, String> fieldTypeMap = new HashMap<>(); + + @Before + public void setUp() { + underTest = new BaseServiceLogRequestQueryConverter(); + fieldMap.put("case_id", "key_lower_case"); + fieldMap.put("cluster", "key_lower_case"); + fieldMap.put("bundle_id", "key_lower_case"); + fieldTypeMap.put("key_lower_case", "{\"name\":\"key_lower_case\",\"class\":\"solr.TextField\",\"sortMissingLast\":true," + + "\"omitNorms\":true,\"analyzer\":{\"tokenizer\":{\"class\":\"solr.KeywordTokenizerFactory\"}," + + "\"filters\":[{\"class\":\"solr.LowerCaseFilterFactory\"}]}}"); + } + + @Test + public void testConvertRequest() { + // GIVEN + ServiceLogRequest logRequest = new ServiceLogRequest(); + logRequest.setLevel("FATAL,ERROR,WARN,UNKNOWN"); + logRequest.setStartIndex("0"); + logRequest.setPage("0"); + //logRequest.setPageSize("25"); + logRequest.setFrom("2016-09-13T22:00:01.000Z"); + logRequest.setTo("2016-09-14T22:00:01.000Z"); + logRequest.setMustBe("logsearch_app,secure_log"); + logRequest.setMustNot("hst_agent,system_message"); + logRequest.setFileName("myfile"); + logRequest.setComponentName("component"); + logRequest.setHostName("logsearch.com}"); + + // WHEN + SimpleQuery query = underTest.convert(logRequest); + DefaultQueryParser defaultQueryParser = new DefaultQueryParser(); + SolrQuery solrQuery = defaultQueryParser.doConstructSolrQuery(query); + // THEN + // TODO extends this test case later + } + + +} http://git-wip-us.apache.org/repos/asf/ambari/blob/ea644cc4/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImpl.java index 061c607..eab0c04 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImpl.java @@ -64,7 +64,7 @@ public class LoggingRequestHelperImpl implements LoggingRequestHelper { private static final String LOGSEARCH_QUERY_PATH = "/api/v1/service/logs"; - private static final String LOGSEARCH_GET_LOG_LEVELS_PATH = "/api/v1/service/logs/levels/counts/namevalues"; + private static final String LOGSEARCH_GET_LOG_LEVELS_PATH = "/api/v1/service/logs/levels/counts"; private static final String LOGSEARCH_ADMIN_CREDENTIAL_NAME = "logsearch.admin.credential";