[ https://issues.apache.org/jira/browse/METRON-503?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15854985#comment-15854985 ]
ASF GitHub Bot commented on METRON-503: --------------------------------------- Github user merrimanr commented on a diff in the pull request: https://github.com/apache/incubator-metron/pull/316#discussion_r99714082 --- Diff: metron-interface/metron-rest/src/main/java/org/apache/metron/rest/service/impl/GrokServiceImpl.java --- @@ -0,0 +1,112 @@ +/** + * 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.metron.rest.service.impl; + +import oi.thekraken.grok.api.Grok; +import oi.thekraken.grok.api.Match; +import org.apache.directory.api.util.Strings; +import org.apache.hadoop.fs.Path; +import org.apache.metron.rest.RestException; +import org.apache.metron.rest.model.GrokValidation; +import org.apache.metron.rest.service.GrokService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.StringReader; +import java.util.Map; + +import static org.apache.metron.rest.MetronRestConstants.GROK_TEMP_PATH_SPRING_PROPERTY; + +@Service +public class GrokServiceImpl implements GrokService { + + private Environment environment; + + private Grok commonGrok; + + @Autowired + public GrokServiceImpl(Environment environment, Grok commonGrok) { + this.environment = environment; + this.commonGrok = commonGrok; + } + + @Override + public Map<String, String> getCommonGrokPatterns() { + return commonGrok.getPatterns(); + } + + @Override + public GrokValidation validateGrokStatement(GrokValidation grokValidation) throws RestException { + Map<String, Object> results; + try { + String statement = Strings.isEmpty(grokValidation.getStatement()) ? "" : grokValidation.getStatement(); + + Grok grok = new Grok(); + grok.addPatternFromReader(new InputStreamReader(getClass().getResourceAsStream("/patterns/common"))); + grok.addPatternFromReader(new StringReader(statement)); + String patternLabel = statement.substring(0, statement.indexOf(" ")); + String grokPattern = "%{" + patternLabel + "}"; + grok.compile(grokPattern); + Match gm = grok.match(grokValidation.getSampleData()); + gm.captures(); + results = gm.toMap(); + results.remove(patternLabel); + } catch (StringIndexOutOfBoundsException e) { + throw new RestException("A pattern label must be included (eg. PATTERN_LABEL %{PATTERN:field} ...)", e.getCause()); + } catch (Exception e) { + throw new RestException(e); + } + grokValidation.setResults(results); + return grokValidation; + } + + @Override + public File saveTemporary(String statement, String name) throws RestException { + if (statement != null) { + try { + File grokDirectory = new File(getTemporaryGrokRootPath()); + if (!grokDirectory.exists()) { + grokDirectory.mkdirs(); + } + File path = new File(grokDirectory, name); + FileWriter fileWriter = new FileWriter(new File(grokDirectory, name)); --- End diff -- Both the user name and the sensor name are included in the path so there shouldn't be conflicts. Was a little apprehensive about using File.createTempFile just because we have less control over where the file is actually created. Is it worth switching to that instead? > Metron REST API > --------------- > > Key: METRON-503 > URL: https://issues.apache.org/jira/browse/METRON-503 > Project: Metron > Issue Type: New Feature > Reporter: Ryan Merriman > Assignee: Ryan Merriman > Attachments: Metron REST API.docx > > > As discussed on the dev list ([DISCUSS] Metron REST API Requirements), this > Jira includes adding a REST API to Metron. -- This message was sent by Atlassian JIRA (v6.3.15#6346)