This is an automated email from the ASF dual-hosted git repository. wujimin pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit 789593956bb9a396d838b63fa948894417adcc56 Author: yaohaishi <yaohai...@huawei.com> AuthorDate: Sun May 27 01:31:50 2018 +0800 [SCB-616] define new AccessLogPatternParser --- .../vertx/accesslog/parser/AccessLogItemMeta.java | 57 ++++++++++++++++ .../accesslog/parser/AccessLogPatternParser.java | 33 +++++++++ .../parser/VertxRestAccessLogItemCreator.java | 45 ++++++++++++ .../impl/VertxRestAccessLogPatternParser.java | 79 ++++++++++++++++++++++ .../impl/VertxRestAccessLogPatternParserTest.java | 21 ++++++ 5 files changed, 235 insertions(+) diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/accesslog/parser/AccessLogItemMeta.java b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/accesslog/parser/AccessLogItemMeta.java new file mode 100644 index 0000000..131743e --- /dev/null +++ b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/accesslog/parser/AccessLogItemMeta.java @@ -0,0 +1,57 @@ +/* + * 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.servicecomb.transport.rest.vertx.accesslog.parser; + +import org.apache.servicecomb.transport.rest.vertx.accesslog.element.AccessLogItem; + +/** + * The meta data of {@linkplain AccessLogItem}. + */ +public class AccessLogItemMeta { + private String prefix; + + private String suffix; + + /** + * Used for sorting {@linkplain AccessLogItemMeta}. Default value is 0. + * Smaller one has higher priority. + */ + private int order; + + public AccessLogItemMeta(String prefix, String suffix, int order) { + this.prefix = prefix; + this.suffix = suffix; + this.order = order; + } + + public AccessLogItemMeta(String prefix, String suffix) { + this(prefix, suffix, 0); + } + + public String getPrefix() { + return prefix; + } + + public String getSuffix() { + return suffix; + } + + public int getOrder() { + return order; + } +} diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/accesslog/parser/AccessLogPatternParser.java b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/accesslog/parser/AccessLogPatternParser.java new file mode 100644 index 0000000..bc38768 --- /dev/null +++ b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/accesslog/parser/AccessLogPatternParser.java @@ -0,0 +1,33 @@ +/* + * 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.servicecomb.transport.rest.vertx.accesslog.parser; + +import java.util.List; + +import org.apache.servicecomb.transport.rest.vertx.accesslog.element.AccessLogItem; + +/** + * This parser will parse the rawPattern of access log and generate a list of {@link AccessLogItem}, + * which will be used in {@link org.apache.servicecomb.transport.rest.vertx.accesslog.AccessLogGenerator} to generate + * access log content. + * @param <T> the type of {@linkplain org.apache.servicecomb.transport.rest.vertx.accesslog.AccessLogParam#contextData + * AccessLogParam.contextData}, which usually depends on the transport way. + */ +public interface AccessLogPatternParser<T> { + List<AccessLogItem<T>> parsePattern(String rawPattern); +} diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/accesslog/parser/VertxRestAccessLogItemCreator.java b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/accesslog/parser/VertxRestAccessLogItemCreator.java new file mode 100644 index 0000000..f1917eb --- /dev/null +++ b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/accesslog/parser/VertxRestAccessLogItemCreator.java @@ -0,0 +1,45 @@ +/* + * 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.servicecomb.transport.rest.vertx.accesslog.parser; + +import java.util.List; + +import org.apache.servicecomb.transport.rest.vertx.accesslog.element.AccessLogItem; + +import io.vertx.ext.web.RoutingContext; + +/** + * The {@linkplain VertxRestAccessLogItemCreator}s are able to instantiate a group of {@linkplain AccessLogItem}. + */ +public interface VertxRestAccessLogItemCreator { + /** + * @return A list of {@linkplain AccessLogItemMeta} to show that what kinds of {@linkplain AccessLogItem} + * this creator is able to instantiate. + */ + List<AccessLogItemMeta> getAccessLogItemMeta(); + + /** + * Create an instance of {@linkplain AccessLogItem} which is specified by {@linkplain AccessLogItemMeta} and config. + * @param accessLogItemMeta determine which kind of {@linkplain AccessLogItem} is created. + * @param config + * e.g. For {@linkplain org.apache.servicecomb.transport.rest.vertx.accesslog.element.impl.CookieItem CookieItem}, + * the pattern may be "%{varName}C", and it's config is "varName". Some {@linkplain AccessLogItem} with no configurable + * pattern (like "%m") will receive {@code null} as config. + */ + AccessLogItem<RoutingContext> createItem(AccessLogItemMeta accessLogItemMeta, String config); +} diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/accesslog/parser/impl/VertxRestAccessLogPatternParser.java b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/accesslog/parser/impl/VertxRestAccessLogPatternParser.java new file mode 100644 index 0000000..666d9a9 --- /dev/null +++ b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/accesslog/parser/impl/VertxRestAccessLogPatternParser.java @@ -0,0 +1,79 @@ +/* + * 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.servicecomb.transport.rest.vertx.accesslog.parser.impl; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.servicecomb.transport.rest.vertx.accesslog.element.AccessLogItem; +import org.apache.servicecomb.transport.rest.vertx.accesslog.parser.AccessLogItemMeta; +import org.apache.servicecomb.transport.rest.vertx.accesslog.parser.AccessLogPatternParser; +import org.apache.servicecomb.transport.rest.vertx.accesslog.parser.VertxRestAccessLogItemCreator; + +import io.vertx.ext.web.RoutingContext; + +/** + * The parser is used for rest-over-vertx transport. + */ +public class VertxRestAccessLogPatternParser implements AccessLogPatternParser<RoutingContext> { + private List<VertxRestAccessLogItemCreator> creators = new ArrayList<>(); + + /** + * All of the {@linkplain AccessLogItemMeta} will be wrapped into {@linkplain AccessLogItemMetaWrapper}. + */ + private List<AccessLogItemMetaWrapper> accessLogItemMetaWrappers = new ArrayList<>(); + + public VertxRestAccessLogPatternParser() { + for (VertxRestAccessLogItemCreator creator : creators) { + for (AccessLogItemMeta accessLogItemMeta : creator.getAccessLogItemMeta()) { + accessLogItemMetaWrappers.add(new AccessLogItemMetaWrapper(accessLogItemMeta, creator)); + } + } + } + + /** + * @param rawPattern The access log pattern string specified by users. + * @return A list of {@linkplain AccessLogItem} which actually generate the content of access log. + */ + @Override + public List<AccessLogItem<RoutingContext>> parsePattern(String rawPattern) { + List<AccessLogItem<RoutingContext>> itemList = new ArrayList<>(); + // the algorithm is unimplemented. + return itemList; + } + + public static class AccessLogItemMetaWrapper { + private AccessLogItemMeta accessLogItemMeta; + + private VertxRestAccessLogItemCreator vertxRestAccessLogItemCreator; + + public AccessLogItemMetaWrapper(AccessLogItemMeta accessLogItemMeta, + VertxRestAccessLogItemCreator vertxRestAccessLogItemCreator) { + this.accessLogItemMeta = accessLogItemMeta; + this.vertxRestAccessLogItemCreator = vertxRestAccessLogItemCreator; + } + + public AccessLogItemMeta getAccessLogItemMeta() { + return accessLogItemMeta; + } + + public VertxRestAccessLogItemCreator getVertxRestAccessLogItemCreator() { + return vertxRestAccessLogItemCreator; + } + } +} diff --git a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/accesslog/parser/impl/VertxRestAccessLogPatternParserTest.java b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/accesslog/parser/impl/VertxRestAccessLogPatternParserTest.java new file mode 100644 index 0000000..c27503e --- /dev/null +++ b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/accesslog/parser/impl/VertxRestAccessLogPatternParserTest.java @@ -0,0 +1,21 @@ +/* + * 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.servicecomb.transport.rest.vertx.accesslog.parser.impl; + +public class VertxRestAccessLogPatternParserTest { +} \ No newline at end of file -- To stop receiving notification emails like this one, please contact wuji...@apache.org.