You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@eagle.apache.org by ha...@apache.org on 2015/11/19 11:47:50 UTC

[43/55] [abbrv] [partial] incubator-eagle git commit: [EAGLE-46] Rename package name as "org.apache.eagle"

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-process/src/test/resources/unittest.conf
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-process/src/test/resources/unittest.conf b/eagle-core/eagle-alert/eagle-alert-process/src/test/resources/unittest.conf
index c82c20b..12a55fe 100644
--- a/eagle-core/eagle-alert/eagle-alert-process/src/test/resources/unittest.conf
+++ b/eagle-core/eagle-alert/eagle-alert-process/src/test/resources/unittest.conf
@@ -16,7 +16,7 @@
     "zkConnectionTimeoutMS" : 15000,
     "consumerGroupId" : "EagleConsumer",
     "fetchSize" : 1048586,
-    "deserializerClass" : "eagle.security.auditlog.HdfsAuditLogKafkaDeserializer",
+    "deserializerClass" : "org.apache.eagle.security.auditlog.HdfsAuditLogKafkaDeserializer",
     "transactionZKServers" : "localhost",
     "transactionZKPort" : 2181,
     "transactionZKRoot" : "/brokers/topics",
@@ -25,7 +25,7 @@
   "alertExecutorConfigs" : {
      "hdfsAuditLogAlertExecutor" : {
        "parallelism" : 2,
-       "partitioner" : "eagle.alert.policy.DefaultPolicyPartitioner"
+       "partitioner" : "org.apache.eagle.alert.policy.DefaultPolicyPartitioner"
        "needValidation" : "true"
      }
   },

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/AlertPolicyValidateProvider.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/AlertPolicyValidateProvider.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/AlertPolicyValidateProvider.java
deleted file mode 100644
index 9d490c8..0000000
--- a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/AlertPolicyValidateProvider.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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 eagle.service.alert;
-
-import java.util.List;
-
-import eagle.log.entity.GenericServiceAPIResponseEntity;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-import com.fasterxml.jackson.databind.Module;
-
-@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", visible=true)
-@JsonIgnoreProperties(ignoreUnknown = true)
-public abstract class AlertPolicyValidateProvider {
-	public String type;
-
-	public abstract GenericServiceAPIResponseEntity<String> validate();
-	
-	public abstract String PolicyType();
-	
-	public abstract List<Module> BindingModules();
-}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/PolicyValidateResource.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/PolicyValidateResource.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/PolicyValidateResource.java
deleted file mode 100644
index 01c2e8a..0000000
--- a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/PolicyValidateResource.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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 eagle.service.alert;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ServiceLoader;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import eagle.dataproc.core.JsonSerDeserUtils;
-import eagle.log.entity.GenericServiceAPIResponseEntity;
-import com.fasterxml.jackson.databind.Module;
-
-@Path("/policy/validate")
-public class PolicyValidateResource {
-		
-	public static Logger LOG = LoggerFactory.getLogger(PolicyValidateResource.class);
-	
-	@SuppressWarnings({"rawtypes"})
-	@POST
-	@Consumes(MediaType.APPLICATION_JSON)
-	@Produces(MediaType.APPLICATION_JSON)
-	public GenericServiceAPIResponseEntity validatePolicy(String policyToValidate) {
-        ServiceLoader<AlertPolicyValidateProvider> loader = ServiceLoader.load(AlertPolicyValidateProvider.class);
-        Iterator<AlertPolicyValidateProvider> iter = loader.iterator();
-        List<Module> modules = new ArrayList<Module>();
-        while(iter.hasNext()) {
-        	AlertPolicyValidateProvider factory = iter.next();
-            LOG.info("Supported policy type : " + factory.PolicyType());
-            modules.addAll(factory.BindingModules());
-        }
-        AlertPolicyValidateProvider policyValidate = null;
-        try {
-        	policyValidate = JsonSerDeserUtils.deserialize(policyToValidate, AlertPolicyValidateProvider.class, modules);    		
-        }
-        catch (Exception ex) {
-        	LOG.error("Fail consutructing AlertPolicyValidateProvider ", ex);
-        }
-        return policyValidate.validate();
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/SiddhiAlertPolicyValidateProvider.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/SiddhiAlertPolicyValidateProvider.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/SiddhiAlertPolicyValidateProvider.java
deleted file mode 100644
index f707f78..0000000
--- a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/SiddhiAlertPolicyValidateProvider.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * 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 eagle.service.alert;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import eagle.service.generic.GenericEntityServiceResource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.wso2.siddhi.core.ExecutionPlanRuntime;
-import org.wso2.siddhi.core.SiddhiManager;
-
-import eagle.alert.common.AlertConstants;
-import eagle.alert.entity.AlertStreamSchemaEntity;
-import eagle.alert.siddhi.AttributeType;
-import eagle.log.entity.GenericServiceAPIResponseEntity;
-import eagle.common.DateTimeUtil;
-import com.fasterxml.jackson.databind.Module;
-import com.fasterxml.jackson.databind.jsontype.NamedType;
-import com.fasterxml.jackson.databind.module.SimpleModule;
-
-public class SiddhiAlertPolicyValidateProvider extends AlertPolicyValidateProvider{
-
-	public String type;
-	public List<String> streamNames;
-	public String policyDefinition;	
-	public static Logger LOG = LoggerFactory.getLogger(PolicyValidateResource.class);
-	public static final String EXECUTION_PLAN_NAME = "query";
-	
-	@SuppressWarnings({"unchecked"})
-	public String getStreamDef(String streamName) {
-		GenericEntityServiceResource resource = new GenericEntityServiceResource();
-		String startTime = "1969-01-01 00:00:00";
-		String endTime = DateTimeUtil.millisecondsToHumanDateWithSeconds(Long.MAX_VALUE);
-		int pageSize = 1000;
-		String query = AlertConstants.ALERT_STREAM_SCHEMA_SERVICE_ENDPOINT_NAME + "[@streamName=\"" + streamName + "\"]{*}";
-		GenericServiceAPIResponseEntity<AlertStreamSchemaEntity> streamResponse = resource.search(query, startTime, endTime, pageSize, null, false, false, 0L, 0, true, 0, null, false);
-		List<AlertStreamSchemaEntity> list = streamResponse.getObj();
-		
-		Map<String, String> map = new HashMap<String, String>();
-		for(AlertStreamSchemaEntity entity : list){
-			map.put(entity.getTags().get("attrName"), entity.getAttrType());
-		}
-		StringBuilder sb = new StringBuilder();
-		sb.append("dataobj object,");
-		for(Map.Entry<String, String> entry : map.entrySet()){
-			String attrName = entry.getKey();
-			sb.append(attrName);
-			sb.append(" ");
-			String attrType = entry.getValue();
-			if(attrType.equalsIgnoreCase(AttributeType.STRING.name())){
-				sb.append("string");
-			}else if(attrType.equalsIgnoreCase(AttributeType.INTEGER.name())){
-				sb.append("int");
-			}else if(attrType.equalsIgnoreCase(AttributeType.LONG.name())){
-				sb.append("long");
-			}else if(attrType.equalsIgnoreCase(AttributeType.BOOL.name())){
-				sb.append("bool");
-			}else{
-				LOG.error("AttrType is not recognized, ignore : " + attrType);
-			}
-			sb.append(",");
-		}
-		if(sb.length() > 0){
-			sb.deleteCharAt(sb.length()-1);
-		}
-		
-		String siddhiStreamDefFormat = "define stream " + streamName + " (" + "%s" + ");";
-		String streamDef = String.format(siddhiStreamDefFormat, sb.toString());
-		return streamDef;
-	}
-	
-	@SuppressWarnings({ "rawtypes", "unchecked" })
-	@Override
-	public GenericServiceAPIResponseEntity validate() {
-		GenericServiceAPIResponseEntity result = new GenericServiceAPIResponseEntity();
-		SiddhiManager siddhiManager = new SiddhiManager();
-		ExecutionPlanRuntime executionPlanRuntime = null;
-		try {				
-			String streamDefs = new String();
-			for(String streamName : streamNames){
-				//String streamDef = SiddhiStreamMetadataUtils.convertToStreamDef(streamName);
-				//We don't use SiddhiStreamMetadataUtils, for it only consume one dataSource
-				String streamDef = getStreamDef(streamName);
-				LOG.info("Siddhi stream definition : " + streamDef);
-				streamDefs += streamDef;
-			}		
-			
-			String executionPlan = streamDefs + " @info(name = '" + EXECUTION_PLAN_NAME + "') " +  policyDefinition;
-			executionPlanRuntime = siddhiManager.createExecutionPlanRuntime(executionPlan);
-		}
-		catch (Exception ex) {
-			result.setSuccess(false);
-			result.setException(ex);
-			return result;
-		}
-		finally {
-			if (executionPlanRuntime != null) {
-				executionPlanRuntime.shutdown();
-			}
-		}
-		result.setSuccess(true);
-		return result;
-	}
-	
-	@Override
-	public String PolicyType() {
-		return "siddhiCEPEngine";
-	}
-	
-	@Override
-	public List<Module> BindingModules() {
-		Module module = new SimpleModule("policyValidate").registerSubtypes(new NamedType(SiddhiAlertPolicyValidateProvider.class, PolicyType()));
-		return Arrays.asList(module);	
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolvable.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolvable.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolvable.java
deleted file mode 100644
index f8258cc..0000000
--- a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolvable.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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 eagle.service.alert.resolver;
-
-import java.util.List;
-
-/**
- * @param <R>
- * @param <V>
- * @since 6/16/15
- */
-public interface AttributeResolvable<R extends GenericAttributeResolveRequest, V> {
-    /**
-     * @param request request type
-     * @return List&lt;V&gt;
-     * @throws AttributeResolveException
-     */
-    List<V> resolve(R request) throws AttributeResolveException;
-
-    /**
-     * validate request
-     * @throws BadAttributeResolveRequestException
-     */
-    void validateRequest(R request) throws BadAttributeResolveRequestException;
-
-    /**
-     * @return Class&lt;R&gt;
-     */
-    Class<R> getRequestClass();
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolveException.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolveException.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolveException.java
deleted file mode 100644
index 7b1d6f5..0000000
--- a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolveException.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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 eagle.service.alert.resolver;
-
-/**
- * @since 6/16/15
- */
-public class AttributeResolveException extends Exception {
-    public AttributeResolveException(String s, Exception e) { super(s,e); }
-    public AttributeResolveException(Exception e) { super(e); }
-    public AttributeResolveException(String s) { super(s); }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolveResource.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolveResource.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolveResource.java
deleted file mode 100644
index 3a87d32..0000000
--- a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolveResource.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * 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 eagle.service.alert.resolver;
-
-import eagle.log.entity.GenericServiceAPIResponseEntity;
-import eagle.service.common.EagleExceptionWrapper;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import javax.ws.rs.*;
-import java.io.InputStream;
-import java.util.List;
-
-/**
- * @since 6/17/15
- */
-@Path("/stream")
-public class AttributeResolveResource {
-    @POST
-    @Path("attributeresolve")
-    @Consumes({"application/json"})
-    @Produces({"application/json"})
-    public GenericServiceAPIResponseEntity attributeResolve(InputStream request,
-                                                            @QueryParam("resolver") String resolver){
-        GenericServiceAPIResponseEntity response = new GenericServiceAPIResponseEntity();
-        try {
-            if(resolver == null) throw new AttributeResolveException("resolver is null");
-            AttributeResolvable resolvable = AttributeResolverFactory.getAttributeResolver(resolver);
-            ObjectMapper objectMapper = new ObjectMapper();
-            Class<?> resolveRequestClass = resolvable.getRequestClass();
-            if(resolveRequestClass == null) throw new AttributeResolveException("Request class is null for resolver "+resolver);
-            GenericAttributeResolveRequest resolveRequest = (GenericAttributeResolveRequest) objectMapper.readValue(request, resolvable.getRequestClass());
-            resolvable.validateRequest(resolveRequest);
-            List result = resolvable.resolve(resolveRequest);
-            response.setSuccess(true);
-            response.setObj(result);
-        } catch (Exception e) {
-            response.setSuccess(false);
-            response.setException(EagleExceptionWrapper.wrap(e));
-            return response;
-        }
-        return response;
-    }
-
-    @GET
-    @Path("attributeresolve")
-    @Produces({"application/json"})
-    public GenericServiceAPIResponseEntity attributeResolver(
-            @QueryParam("resolver") String resolver, @QueryParam("site") String site, @QueryParam("query") String query){
-        GenericServiceAPIResponseEntity response = new GenericServiceAPIResponseEntity();
-        try {
-            if(resolver == null) throw new AttributeResolveException("resolver is null");
-            AttributeResolvable resolvable = AttributeResolverFactory.getAttributeResolver(resolver);
-            Class<?> resolveRequestClass = resolvable.getRequestClass();
-            if(resolveRequestClass == null) throw new AttributeResolveException("Request class is null for resolver "+resolver);
-            GenericAttributeResolveRequest resolveRequest = new GenericAttributeResolveRequest(query,site);
-            resolvable.validateRequest(resolveRequest);
-            List result = resolvable.resolve(resolveRequest);
-            response.setSuccess(true);
-            response.setObj(result);
-        } catch (Exception e) {
-            response.setSuccess(false);
-            response.setException(EagleExceptionWrapper.wrap(e));
-            return response;
-        }
-        return response;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolveResponse.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolveResponse.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolveResponse.java
deleted file mode 100644
index 9b70a29..0000000
--- a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolveResponse.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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 eagle.service.alert.resolver;
-
-import java.util.List;
-
-public class AttributeResolveResponse<V> {
-    private String exception;
-    private List<V> values;
-
-    public List<V> getValues() {
-        return values;
-    }
-
-    public void setValues(List<V> values) {
-        this.values = values;
-    }
-
-    public String getException() {
-        return exception;
-    }
-
-    public void setException(String exception) {
-        this.exception = exception;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolverFactory.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolverFactory.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolverFactory.java
deleted file mode 100644
index 1771d0f..0000000
--- a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/AttributeResolverFactory.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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 eagle.service.alert.resolver;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
-* @since 6/16/15
-*/
-public final class AttributeResolverFactory {
-    private final static Map<String,AttributeResolvable> fieldResolvableCache = Collections.synchronizedMap(new HashMap<String,AttributeResolvable>());
-    public static AttributeResolvable getAttributeResolver(String fieldResolverName) throws AttributeResolveException {
-        AttributeResolvable instance;
-        if(fieldResolvableCache.containsKey(fieldResolverName)){
-            instance = fieldResolvableCache.get(fieldResolverName);
-        } else {
-            try {
-                instance = (AttributeResolvable) Class.forName(fieldResolverName).newInstance();
-                fieldResolvableCache.put(fieldResolverName, instance);
-            } catch (ClassNotFoundException e) {
-                throw new AttributeResolveException("Attribute Resolver in type of "+fieldResolverName+" is not found",e);
-            } catch (InstantiationException | IllegalAccessException e) {
-                throw new AttributeResolveException(e);
-            }
-        }
-        return instance;
-    }
-
-    public static List resolve(String resolver, GenericAttributeResolveRequest request) throws AttributeResolveException {
-        AttributeResolvable fieldResolver = getAttributeResolver(resolver);
-        return fieldResolver.resolve(request);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/BadAttributeResolveRequestException.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/BadAttributeResolveRequestException.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/BadAttributeResolveRequestException.java
deleted file mode 100644
index 47b26bf..0000000
--- a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/BadAttributeResolveRequestException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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 eagle.service.alert.resolver;
-
-public class BadAttributeResolveRequestException extends Exception {
-    public BadAttributeResolveRequestException(Exception ex){
-        super(ex);
-    }
-
-    public BadAttributeResolveRequestException(String msg){
-        super(msg);
-    }
-
-    public BadAttributeResolveRequestException(String msg, Exception ex){
-        super(msg, ex);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/GenericAttributeResolveRequest.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/GenericAttributeResolveRequest.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/GenericAttributeResolveRequest.java
deleted file mode 100644
index ca561e0..0000000
--- a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/GenericAttributeResolveRequest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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 eagle.service.alert.resolver;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-/**
- * @since 6/16/15
- */
-public class GenericAttributeResolveRequest {
-    /**
-     * @param query whatever is in input box of attribute
-     * @param site which site this policy belongs to
-     */
-    @JsonCreator
-    public GenericAttributeResolveRequest(@JsonProperty("query") String query, @JsonProperty("site") String site){
-        this.query  = query;
-        this.site = site;
-    }
-
-    public String getQuery() {
-        return query;
-    }
-
-    public void setQuery(String query) {
-        this.query = query;
-    }
-
-    public String getSite() {
-        return site;
-    }
-
-    public void setSite(String site) {
-        this.site = site;
-    }
-
-    private String site;
-    private String query;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/impl/BooleanAttributeResolver.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/impl/BooleanAttributeResolver.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/impl/BooleanAttributeResolver.java
deleted file mode 100644
index 7a4a7c5..0000000
--- a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/impl/BooleanAttributeResolver.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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 eagle.service.alert.resolver.impl;
-
-import eagle.service.alert.resolver.AttributeResolveException;
-import eagle.service.alert.resolver.GenericAttributeResolveRequest;
-import eagle.service.alert.resolver.AttributeResolvable;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * @since 6/16/15
- */
-public class BooleanAttributeResolver implements AttributeResolvable<GenericAttributeResolveRequest,String> {
-    @Override
-    public List<String> resolve(GenericAttributeResolveRequest request) throws AttributeResolveException {
-        return Arrays.asList("true", "false");
-    }
-
-    @Override
-    public void validateRequest(GenericAttributeResolveRequest request){
-    }
-
-    @Override
-    public Class<GenericAttributeResolveRequest> getRequestClass() {
-        return GenericAttributeResolveRequest.class;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/impl/EntityAttributeResolver.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/impl/EntityAttributeResolver.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/impl/EntityAttributeResolver.java
deleted file mode 100644
index 1d288e2..0000000
--- a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/eagle/service/alert/resolver/impl/EntityAttributeResolver.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * 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 eagle.service.alert.resolver.impl;
-
-import eagle.log.entity.GenericServiceAPIResponseEntity;
-import eagle.log.base.taggedlog.TaggedLogAPIEntity;
-import eagle.log.entity.meta.EntityDefinition;
-import eagle.log.entity.meta.EntityDefinitionManager;
-import eagle.service.alert.resolver.AttributeResolvable;
-import eagle.service.alert.resolver.AttributeResolveException;
-import eagle.service.alert.resolver.BadAttributeResolveRequestException;
-import eagle.service.alert.resolver.GenericAttributeResolveRequest;
-import eagle.service.generic.GenericEntityServiceResource;
-import eagle.common.DateTimeUtil;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import org.apache.commons.lang3.StringUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @since 6/16/15
- */
-public class EntityAttributeResolver implements AttributeResolvable<EntityAttributeResolver.EntityAttributeResolveRequest,String> {
-
-    private final static GenericEntityServiceResource entityServiceResource = new GenericEntityServiceResource();
-
-    @Override
-    public List<String> resolve(EntityAttributeResolveRequest request) throws AttributeResolveException {
-        if(request.getFieldName()==null){
-            throw new AttributeResolveException("fieldName is required");
-        }
-        String attributeName = request.getFieldName();
-        EntityDefinition entityDefinition;
-        try {
-            if(request.getServiceName()!=null){
-                entityDefinition = EntityDefinitionManager.getEntityByServiceName(request.getServiceName());
-            }else if (request.getEntityClassName()!=null){
-                Class<? extends TaggedLogAPIEntity> entityClass = (Class<? extends TaggedLogAPIEntity>) Class.forName(request.getEntityClassName());
-                entityDefinition = EntityDefinitionManager.getEntityDefinitionByEntityClass(entityClass);
-            }else {
-                throw new AttributeResolveException("At least serviceName or entityClassName is required, but neither found");
-            }
-        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
-            throw new AttributeResolveException(e);
-        }
-        List<String> filterCondition = new ArrayList<>();
-        if(request.getTags()!=null){
-            for(Map.Entry<String,String> tag:request.getTags().entrySet()) {
-                filterCondition.add("@" + tag.getKey() + " = \"" + tag.getValue() + "\"");
-            }
-        }
-        if(request.getQuery() != null) {
-            filterCondition.add("@" + attributeName + "~= \".*" + request.getQuery()+".*\"");
-        }
-        String query = entityDefinition.getService() + "[" + StringUtils.join(filterCondition, " AND ") + "]<@" + attributeName + ">{count}";
-        return aggregateQuery(query, DateTimeUtil.millisecondsToHumanDateWithSeconds(0), DateTimeUtil.millisecondsToHumanDateWithSeconds(System.currentTimeMillis()),request.getMetricName());
-    }
-
-    @Override
-    public Class<EntityAttributeResolveRequest> getRequestClass() {
-        return EntityAttributeResolveRequest.class;
-    }
-
-    @Override
-    public void validateRequest(EntityAttributeResolver.EntityAttributeResolveRequest request) throws BadAttributeResolveRequestException {
-
-    }
-
-    private List<String> aggregateQuery(String query,String startTime,String endTime,String metricName) throws AttributeResolveException {
-        List<String> result = new ArrayList<>();
-        GenericServiceAPIResponseEntity response = entityServiceResource.search(query, startTime, endTime, Integer.MAX_VALUE, null, false, false, 0, Integer.MAX_VALUE, true, 0, metricName, false);
-        if(response.isSuccess()){
-            List objs = response.getObj();
-            for(Object item:objs){
-                // TODO: get keys as result
-                throw new IllegalArgumentException("not implemented yet");
-            }
-        }else{
-            throw new AttributeResolveException(response.getException());
-        }
-        return result;
-    }
-
-    public static class EntityAttributeResolveRequest extends GenericAttributeResolveRequest {
-        public Map<String, String> getTags() {
-            return tags;
-        }
-        private final Map<String, String> tags;
-        public String getMetricName() {
-            return metricName;
-        }
-        private final String metricName;
-        @JsonCreator
-        public EntityAttributeResolveRequest(
-                @JsonProperty("query") String query,
-                @JsonProperty("site") String site,
-                @JsonProperty("serviceName") String serviceName,
-                @JsonProperty("entityClassName") String entityClassName,
-                @JsonProperty("metricName") String metricName,
-                @JsonProperty("fieldName") String fieldName,
-                @JsonProperty("tags") Map<String, String> tags
-        ){
-            super(query, site);
-            this.serviceName = serviceName;
-            this.entityClassName = entityClassName;
-            this.fieldName = fieldName;
-            this.metricName = metricName;
-            this.tags =  tags;
-        }
-
-        private final String serviceName;
-        public String getEntityClassName() {
-            return entityClassName;
-        }
-        public String getServiceName() {
-            return serviceName;
-        }
-        public String getFieldName() {
-            return fieldName;
-        }
-        private final String entityClassName;
-        private final String fieldName;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/AlertPolicyValidateProvider.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/AlertPolicyValidateProvider.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/AlertPolicyValidateProvider.java
new file mode 100644
index 0000000..47ddcb9
--- /dev/null
+++ b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/AlertPolicyValidateProvider.java
@@ -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.
+ */
+package org.apache.eagle.service.alert;
+
+import java.util.List;
+
+import org.apache.eagle.log.entity.GenericServiceAPIResponseEntity;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.databind.Module;
+
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", visible=true)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public abstract class AlertPolicyValidateProvider {
+	public String type;
+
+	public abstract GenericServiceAPIResponseEntity<String> validate();
+	
+	public abstract String PolicyType();
+	
+	public abstract List<Module> BindingModules();
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/PolicyValidateResource.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/PolicyValidateResource.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/PolicyValidateResource.java
new file mode 100644
index 0000000..e4c19d6
--- /dev/null
+++ b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/PolicyValidateResource.java
@@ -0,0 +1,64 @@
+/*
+ * 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.eagle.service.alert;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ServiceLoader;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.eagle.dataproc.core.JsonSerDeserUtils;
+import org.apache.eagle.log.entity.GenericServiceAPIResponseEntity;
+import com.fasterxml.jackson.databind.Module;
+
+@Path("/policy/validate")
+public class PolicyValidateResource {
+		
+	public static Logger LOG = LoggerFactory.getLogger(PolicyValidateResource.class);
+	
+	@SuppressWarnings({"rawtypes"})
+	@POST
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Produces(MediaType.APPLICATION_JSON)
+	public GenericServiceAPIResponseEntity validatePolicy(String policyToValidate) {
+        ServiceLoader<AlertPolicyValidateProvider> loader = ServiceLoader.load(AlertPolicyValidateProvider.class);
+        Iterator<AlertPolicyValidateProvider> iter = loader.iterator();
+        List<Module> modules = new ArrayList<Module>();
+        while(iter.hasNext()) {
+        	AlertPolicyValidateProvider factory = iter.next();
+            LOG.info("Supported policy type : " + factory.PolicyType());
+            modules.addAll(factory.BindingModules());
+        }
+        AlertPolicyValidateProvider policyValidate = null;
+        try {
+        	policyValidate = JsonSerDeserUtils.deserialize(policyToValidate, AlertPolicyValidateProvider.class, modules);    		
+        }
+        catch (Exception ex) {
+        	LOG.error("Fail consutructing AlertPolicyValidateProvider ", ex);
+        }
+        return policyValidate.validate();
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/SiddhiAlertPolicyValidateProvider.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/SiddhiAlertPolicyValidateProvider.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/SiddhiAlertPolicyValidateProvider.java
new file mode 100644
index 0000000..7c7d5bc
--- /dev/null
+++ b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/SiddhiAlertPolicyValidateProvider.java
@@ -0,0 +1,133 @@
+/*
+ * 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.eagle.service.alert;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.eagle.service.generic.GenericEntityServiceResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.wso2.siddhi.core.ExecutionPlanRuntime;
+import org.wso2.siddhi.core.SiddhiManager;
+
+import org.apache.eagle.alert.common.AlertConstants;
+import org.apache.eagle.alert.entity.AlertStreamSchemaEntity;
+import org.apache.eagle.alert.siddhi.AttributeType;
+import org.apache.eagle.log.entity.GenericServiceAPIResponseEntity;
+import org.apache.eagle.common.DateTimeUtil;
+import com.fasterxml.jackson.databind.Module;
+import com.fasterxml.jackson.databind.jsontype.NamedType;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+
+public class SiddhiAlertPolicyValidateProvider extends AlertPolicyValidateProvider{
+
+	public String type;
+	public List<String> streamNames;
+	public String policyDefinition;	
+	public static Logger LOG = LoggerFactory.getLogger(PolicyValidateResource.class);
+	public static final String EXECUTION_PLAN_NAME = "query";
+	
+	@SuppressWarnings({"unchecked"})
+	public String getStreamDef(String streamName) {
+		GenericEntityServiceResource resource = new GenericEntityServiceResource();
+		String startTime = "1969-01-01 00:00:00";
+		String endTime = DateTimeUtil.millisecondsToHumanDateWithSeconds(Long.MAX_VALUE);
+		int pageSize = 1000;
+		String query = AlertConstants.ALERT_STREAM_SCHEMA_SERVICE_ENDPOINT_NAME + "[@streamName=\"" + streamName + "\"]{*}";
+		GenericServiceAPIResponseEntity<AlertStreamSchemaEntity> streamResponse = resource.search(query, startTime, endTime, pageSize, null, false, false, 0L, 0, true, 0, null, false);
+		List<AlertStreamSchemaEntity> list = streamResponse.getObj();
+		
+		Map<String, String> map = new HashMap<String, String>();
+		for(AlertStreamSchemaEntity entity : list){
+			map.put(entity.getTags().get("attrName"), entity.getAttrType());
+		}
+		StringBuilder sb = new StringBuilder();
+		sb.append("dataobj object,");
+		for(Map.Entry<String, String> entry : map.entrySet()){
+			String attrName = entry.getKey();
+			sb.append(attrName);
+			sb.append(" ");
+			String attrType = entry.getValue();
+			if(attrType.equalsIgnoreCase(AttributeType.STRING.name())){
+				sb.append("string");
+			}else if(attrType.equalsIgnoreCase(AttributeType.INTEGER.name())){
+				sb.append("int");
+			}else if(attrType.equalsIgnoreCase(AttributeType.LONG.name())){
+				sb.append("long");
+			}else if(attrType.equalsIgnoreCase(AttributeType.BOOL.name())){
+				sb.append("bool");
+			}else{
+				LOG.error("AttrType is not recognized, ignore : " + attrType);
+			}
+			sb.append(",");
+		}
+		if(sb.length() > 0){
+			sb.deleteCharAt(sb.length()-1);
+		}
+		
+		String siddhiStreamDefFormat = "define stream " + streamName + " (" + "%s" + ");";
+		String streamDef = String.format(siddhiStreamDefFormat, sb.toString());
+		return streamDef;
+	}
+	
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	@Override
+	public GenericServiceAPIResponseEntity validate() {
+		GenericServiceAPIResponseEntity result = new GenericServiceAPIResponseEntity();
+		SiddhiManager siddhiManager = new SiddhiManager();
+		ExecutionPlanRuntime executionPlanRuntime = null;
+		try {				
+			String streamDefs = new String();
+			for(String streamName : streamNames){
+				//String streamDef = SiddhiStreamMetadataUtils.convertToStreamDef(streamName);
+				//We don't use SiddhiStreamMetadataUtils, for it only consume one dataSource
+				String streamDef = getStreamDef(streamName);
+				LOG.info("Siddhi stream definition : " + streamDef);
+				streamDefs += streamDef;
+			}		
+			
+			String executionPlan = streamDefs + " @info(name = '" + EXECUTION_PLAN_NAME + "') " +  policyDefinition;
+			executionPlanRuntime = siddhiManager.createExecutionPlanRuntime(executionPlan);
+		}
+		catch (Exception ex) {
+			result.setSuccess(false);
+			result.setException(ex);
+			return result;
+		}
+		finally {
+			if (executionPlanRuntime != null) {
+				executionPlanRuntime.shutdown();
+			}
+		}
+		result.setSuccess(true);
+		return result;
+	}
+	
+	@Override
+	public String PolicyType() {
+		return "siddhiCEPEngine";
+	}
+	
+	@Override
+	public List<Module> BindingModules() {
+		Module module = new SimpleModule("policyValidate").registerSubtypes(new NamedType(SiddhiAlertPolicyValidateProvider.class, PolicyType()));
+		return Arrays.asList(module);	
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolvable.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolvable.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolvable.java
new file mode 100644
index 0000000..ecfd47f
--- /dev/null
+++ b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolvable.java
@@ -0,0 +1,44 @@
+/*
+ * 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.eagle.service.alert.resolver;
+
+import java.util.List;
+
+/**
+ * @param <R>
+ * @param <V>
+ * @since 6/16/15
+ */
+public interface AttributeResolvable<R extends GenericAttributeResolveRequest, V> {
+    /**
+     * @param request request type
+     * @return List&lt;V&gt;
+     * @throws AttributeResolveException
+     */
+    List<V> resolve(R request) throws AttributeResolveException;
+
+    /**
+     * validate request
+     * @throws BadAttributeResolveRequestException
+     */
+    void validateRequest(R request) throws BadAttributeResolveRequestException;
+
+    /**
+     * @return Class&lt;R&gt;
+     */
+    Class<R> getRequestClass();
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolveException.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolveException.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolveException.java
new file mode 100644
index 0000000..56cd942
--- /dev/null
+++ b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolveException.java
@@ -0,0 +1,26 @@
+/*
+ * 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.eagle.service.alert.resolver;
+
+/**
+ * @since 6/16/15
+ */
+public class AttributeResolveException extends Exception {
+    public AttributeResolveException(String s, Exception e) { super(s,e); }
+    public AttributeResolveException(Exception e) { super(e); }
+    public AttributeResolveException(String s) { super(s); }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolveResource.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolveResource.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolveResource.java
new file mode 100644
index 0000000..68995d1
--- /dev/null
+++ b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolveResource.java
@@ -0,0 +1,81 @@
+/*
+ * 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.eagle.service.alert.resolver;
+
+import org.apache.eagle.log.entity.GenericServiceAPIResponseEntity;
+import org.apache.eagle.service.common.EagleExceptionWrapper;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import javax.ws.rs.*;
+import java.io.InputStream;
+import java.util.List;
+
+/**
+ * @since 6/17/15
+ */
+@Path("/stream")
+public class AttributeResolveResource {
+    @POST
+    @Path("attributeresolve")
+    @Consumes({"application/json"})
+    @Produces({"application/json"})
+    public GenericServiceAPIResponseEntity attributeResolve(InputStream request,
+                                                            @QueryParam("resolver") String resolver){
+        GenericServiceAPIResponseEntity response = new GenericServiceAPIResponseEntity();
+        try {
+            if(resolver == null) throw new AttributeResolveException("resolver is null");
+            AttributeResolvable resolvable = AttributeResolverFactory.getAttributeResolver(resolver);
+            ObjectMapper objectMapper = new ObjectMapper();
+            Class<?> resolveRequestClass = resolvable.getRequestClass();
+            if(resolveRequestClass == null) throw new AttributeResolveException("Request class is null for resolver "+resolver);
+            GenericAttributeResolveRequest resolveRequest = (GenericAttributeResolveRequest) objectMapper.readValue(request, resolvable.getRequestClass());
+            resolvable.validateRequest(resolveRequest);
+            List result = resolvable.resolve(resolveRequest);
+            response.setSuccess(true);
+            response.setObj(result);
+        } catch (Exception e) {
+            response.setSuccess(false);
+            response.setException(EagleExceptionWrapper.wrap(e));
+            return response;
+        }
+        return response;
+    }
+
+    @GET
+    @Path("attributeresolve")
+    @Produces({"application/json"})
+    public GenericServiceAPIResponseEntity attributeResolver(
+            @QueryParam("resolver") String resolver, @QueryParam("site") String site, @QueryParam("query") String query){
+        GenericServiceAPIResponseEntity response = new GenericServiceAPIResponseEntity();
+        try {
+            if(resolver == null) throw new AttributeResolveException("resolver is null");
+            AttributeResolvable resolvable = AttributeResolverFactory.getAttributeResolver(resolver);
+            Class<?> resolveRequestClass = resolvable.getRequestClass();
+            if(resolveRequestClass == null) throw new AttributeResolveException("Request class is null for resolver "+resolver);
+            GenericAttributeResolveRequest resolveRequest = new GenericAttributeResolveRequest(query,site);
+            resolvable.validateRequest(resolveRequest);
+            List result = resolvable.resolve(resolveRequest);
+            response.setSuccess(true);
+            response.setObj(result);
+        } catch (Exception e) {
+            response.setSuccess(false);
+            response.setException(EagleExceptionWrapper.wrap(e));
+            return response;
+        }
+        return response;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolveResponse.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolveResponse.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolveResponse.java
new file mode 100644
index 0000000..0ec9cf4
--- /dev/null
+++ b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolveResponse.java
@@ -0,0 +1,40 @@
+/*
+ * 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.eagle.service.alert.resolver;
+
+import java.util.List;
+
+public class AttributeResolveResponse<V> {
+    private String exception;
+    private List<V> values;
+
+    public List<V> getValues() {
+        return values;
+    }
+
+    public void setValues(List<V> values) {
+        this.values = values;
+    }
+
+    public String getException() {
+        return exception;
+    }
+
+    public void setException(String exception) {
+        this.exception = exception;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolverFactory.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolverFactory.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolverFactory.java
new file mode 100644
index 0000000..4015fb7
--- /dev/null
+++ b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/AttributeResolverFactory.java
@@ -0,0 +1,50 @@
+/*
+ * 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.eagle.service.alert.resolver;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+* @since 6/16/15
+*/
+public final class AttributeResolverFactory {
+    private final static Map<String,AttributeResolvable> fieldResolvableCache = Collections.synchronizedMap(new HashMap<String,AttributeResolvable>());
+    public static AttributeResolvable getAttributeResolver(String fieldResolverName) throws AttributeResolveException {
+        AttributeResolvable instance;
+        if(fieldResolvableCache.containsKey(fieldResolverName)){
+            instance = fieldResolvableCache.get(fieldResolverName);
+        } else {
+            try {
+                instance = (AttributeResolvable) Class.forName(fieldResolverName).newInstance();
+                fieldResolvableCache.put(fieldResolverName, instance);
+            } catch (ClassNotFoundException e) {
+                throw new AttributeResolveException("Attribute Resolver in type of "+fieldResolverName+" is not found",e);
+            } catch (InstantiationException | IllegalAccessException e) {
+                throw new AttributeResolveException(e);
+            }
+        }
+        return instance;
+    }
+
+    public static List resolve(String resolver, GenericAttributeResolveRequest request) throws AttributeResolveException {
+        AttributeResolvable fieldResolver = getAttributeResolver(resolver);
+        return fieldResolver.resolve(request);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/BadAttributeResolveRequestException.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/BadAttributeResolveRequestException.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/BadAttributeResolveRequestException.java
new file mode 100644
index 0000000..5a2d7e6
--- /dev/null
+++ b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/BadAttributeResolveRequestException.java
@@ -0,0 +1,31 @@
+/*
+ * 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.eagle.service.alert.resolver;
+
+public class BadAttributeResolveRequestException extends Exception {
+    public BadAttributeResolveRequestException(Exception ex){
+        super(ex);
+    }
+
+    public BadAttributeResolveRequestException(String msg){
+        super(msg);
+    }
+
+    public BadAttributeResolveRequestException(String msg, Exception ex){
+        super(msg, ex);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/GenericAttributeResolveRequest.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/GenericAttributeResolveRequest.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/GenericAttributeResolveRequest.java
new file mode 100644
index 0000000..97899b7
--- /dev/null
+++ b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/GenericAttributeResolveRequest.java
@@ -0,0 +1,54 @@
+/*
+ * 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.eagle.service.alert.resolver;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * @since 6/16/15
+ */
+public class GenericAttributeResolveRequest {
+    /**
+     * @param query whatever is in input box of attribute
+     * @param site which site this policy belongs to
+     */
+    @JsonCreator
+    public GenericAttributeResolveRequest(@JsonProperty("query") String query, @JsonProperty("site") String site){
+        this.query  = query;
+        this.site = site;
+    }
+
+    public String getQuery() {
+        return query;
+    }
+
+    public void setQuery(String query) {
+        this.query = query;
+    }
+
+    public String getSite() {
+        return site;
+    }
+
+    public void setSite(String site) {
+        this.site = site;
+    }
+
+    private String site;
+    private String query;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/impl/BooleanAttributeResolver.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/impl/BooleanAttributeResolver.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/impl/BooleanAttributeResolver.java
new file mode 100644
index 0000000..3dc70e1
--- /dev/null
+++ b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/impl/BooleanAttributeResolver.java
@@ -0,0 +1,43 @@
+/*
+ * 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.eagle.service.alert.resolver.impl;
+
+import org.apache.eagle.service.alert.resolver.AttributeResolveException;
+import org.apache.eagle.service.alert.resolver.GenericAttributeResolveRequest;
+import org.apache.eagle.service.alert.resolver.AttributeResolvable;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @since 6/16/15
+ */
+public class BooleanAttributeResolver implements AttributeResolvable<GenericAttributeResolveRequest,String> {
+    @Override
+    public List<String> resolve(GenericAttributeResolveRequest request) throws AttributeResolveException {
+        return Arrays.asList("true", "false");
+    }
+
+    @Override
+    public void validateRequest(GenericAttributeResolveRequest request){
+    }
+
+    @Override
+    public Class<GenericAttributeResolveRequest> getRequestClass() {
+        return GenericAttributeResolveRequest.class;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/impl/EntityAttributeResolver.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/impl/EntityAttributeResolver.java b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/impl/EntityAttributeResolver.java
new file mode 100644
index 0000000..9758863
--- /dev/null
+++ b/eagle-core/eagle-alert/eagle-alert-service/src/main/java/org/apache/eagle/service/alert/resolver/impl/EntityAttributeResolver.java
@@ -0,0 +1,142 @@
+/*
+ * 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.eagle.service.alert.resolver.impl;
+
+import org.apache.eagle.log.entity.GenericServiceAPIResponseEntity;
+import org.apache.eagle.log.base.taggedlog.TaggedLogAPIEntity;
+import org.apache.eagle.log.entity.meta.EntityDefinition;
+import org.apache.eagle.log.entity.meta.EntityDefinitionManager;
+import org.apache.eagle.service.alert.resolver.AttributeResolvable;
+import org.apache.eagle.service.alert.resolver.AttributeResolveException;
+import org.apache.eagle.service.alert.resolver.BadAttributeResolveRequestException;
+import org.apache.eagle.service.alert.resolver.GenericAttributeResolveRequest;
+import org.apache.eagle.service.generic.GenericEntityServiceResource;
+import org.apache.eagle.common.DateTimeUtil;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @since 6/16/15
+ */
+public class EntityAttributeResolver implements AttributeResolvable<EntityAttributeResolver.EntityAttributeResolveRequest,String> {
+
+    private final static GenericEntityServiceResource entityServiceResource = new GenericEntityServiceResource();
+
+    @Override
+    public List<String> resolve(EntityAttributeResolveRequest request) throws AttributeResolveException {
+        if(request.getFieldName()==null){
+            throw new AttributeResolveException("fieldName is required");
+        }
+        String attributeName = request.getFieldName();
+        EntityDefinition entityDefinition;
+        try {
+            if(request.getServiceName()!=null){
+                entityDefinition = EntityDefinitionManager.getEntityByServiceName(request.getServiceName());
+            }else if (request.getEntityClassName()!=null){
+                Class<? extends TaggedLogAPIEntity> entityClass = (Class<? extends TaggedLogAPIEntity>) Class.forName(request.getEntityClassName());
+                entityDefinition = EntityDefinitionManager.getEntityDefinitionByEntityClass(entityClass);
+            }else {
+                throw new AttributeResolveException("At least serviceName or entityClassName is required, but neither found");
+            }
+        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
+            throw new AttributeResolveException(e);
+        }
+        List<String> filterCondition = new ArrayList<>();
+        if(request.getTags()!=null){
+            for(Map.Entry<String,String> tag:request.getTags().entrySet()) {
+                filterCondition.add("@" + tag.getKey() + " = \"" + tag.getValue() + "\"");
+            }
+        }
+        if(request.getQuery() != null) {
+            filterCondition.add("@" + attributeName + "~= \".*" + request.getQuery()+".*\"");
+        }
+        String query = entityDefinition.getService() + "[" + StringUtils.join(filterCondition, " AND ") + "]<@" + attributeName + ">{count}";
+        return aggregateQuery(query, DateTimeUtil.millisecondsToHumanDateWithSeconds(0), DateTimeUtil.millisecondsToHumanDateWithSeconds(System.currentTimeMillis()),request.getMetricName());
+    }
+
+    @Override
+    public Class<EntityAttributeResolveRequest> getRequestClass() {
+        return EntityAttributeResolveRequest.class;
+    }
+
+    @Override
+    public void validateRequest(EntityAttributeResolver.EntityAttributeResolveRequest request) throws BadAttributeResolveRequestException {
+
+    }
+
+    private List<String> aggregateQuery(String query,String startTime,String endTime,String metricName) throws AttributeResolveException {
+        List<String> result = new ArrayList<>();
+        GenericServiceAPIResponseEntity response = entityServiceResource.search(query, startTime, endTime, Integer.MAX_VALUE, null, false, false, 0, Integer.MAX_VALUE, true, 0, metricName, false);
+        if(response.isSuccess()){
+            List objs = response.getObj();
+            for(Object item:objs){
+                // TODO: get keys as result
+                throw new IllegalArgumentException("not implemented yet");
+            }
+        }else{
+            throw new AttributeResolveException(response.getException());
+        }
+        return result;
+    }
+
+    public static class EntityAttributeResolveRequest extends GenericAttributeResolveRequest {
+        public Map<String, String> getTags() {
+            return tags;
+        }
+        private final Map<String, String> tags;
+        public String getMetricName() {
+            return metricName;
+        }
+        private final String metricName;
+        @JsonCreator
+        public EntityAttributeResolveRequest(
+                @JsonProperty("query") String query,
+                @JsonProperty("site") String site,
+                @JsonProperty("serviceName") String serviceName,
+                @JsonProperty("entityClassName") String entityClassName,
+                @JsonProperty("metricName") String metricName,
+                @JsonProperty("fieldName") String fieldName,
+                @JsonProperty("tags") Map<String, String> tags
+        ){
+            super(query, site);
+            this.serviceName = serviceName;
+            this.entityClassName = entityClassName;
+            this.fieldName = fieldName;
+            this.metricName = metricName;
+            this.tags =  tags;
+        }
+
+        private final String serviceName;
+        public String getEntityClassName() {
+            return entityClassName;
+        }
+        public String getServiceName() {
+            return serviceName;
+        }
+        public String getFieldName() {
+            return fieldName;
+        }
+        private final String entityClassName;
+        private final String fieldName;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/resources/META-INF/services/eagle.service.alert.AlertPolicyValidateProvider
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/resources/META-INF/services/eagle.service.alert.AlertPolicyValidateProvider b/eagle-core/eagle-alert/eagle-alert-service/src/main/resources/META-INF/services/eagle.service.alert.AlertPolicyValidateProvider
deleted file mode 100644
index be6e2c7..0000000
--- a/eagle-core/eagle-alert/eagle-alert-service/src/main/resources/META-INF/services/eagle.service.alert.AlertPolicyValidateProvider
+++ /dev/null
@@ -1 +0,0 @@
-eagle.service.alert.SiddhiAlertPolicyValidateProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/main/resources/META-INF/services/org.apache.eagle.service.alert.AlertPolicyValidateProvider
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/main/resources/META-INF/services/org.apache.eagle.service.alert.AlertPolicyValidateProvider b/eagle-core/eagle-alert/eagle-alert-service/src/main/resources/META-INF/services/org.apache.eagle.service.alert.AlertPolicyValidateProvider
new file mode 100644
index 0000000..1f92d71
--- /dev/null
+++ b/eagle-core/eagle-alert/eagle-alert-service/src/main/resources/META-INF/services/org.apache.eagle.service.alert.AlertPolicyValidateProvider
@@ -0,0 +1 @@
+org.apache.eagle.service.alert.SiddhiAlertPolicyValidateProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/test/resources/META-INF/services/eagle.service.alert.AlertPolicyValidateProvider
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/test/resources/META-INF/services/eagle.service.alert.AlertPolicyValidateProvider b/eagle-core/eagle-alert/eagle-alert-service/src/test/resources/META-INF/services/eagle.service.alert.AlertPolicyValidateProvider
deleted file mode 100644
index be6e2c7..0000000
--- a/eagle-core/eagle-alert/eagle-alert-service/src/test/resources/META-INF/services/eagle.service.alert.AlertPolicyValidateProvider
+++ /dev/null
@@ -1 +0,0 @@
-eagle.service.alert.SiddhiAlertPolicyValidateProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-alert/eagle-alert-service/src/test/resources/META-INF/services/org.apache.eagle.service.alert.AlertPolicyValidateProvider
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert/eagle-alert-service/src/test/resources/META-INF/services/org.apache.eagle.service.alert.AlertPolicyValidateProvider b/eagle-core/eagle-alert/eagle-alert-service/src/test/resources/META-INF/services/org.apache.eagle.service.alert.AlertPolicyValidateProvider
new file mode 100644
index 0000000..1f92d71
--- /dev/null
+++ b/eagle-core/eagle-alert/eagle-alert-service/src/test/resources/META-INF/services/org.apache.eagle.service.alert.AlertPolicyValidateProvider
@@ -0,0 +1 @@
+org.apache.eagle.service.alert.SiddhiAlertPolicyValidateProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-data-process/eagle-job-common/src/main/java/eagle/job/DefaultJobPartitionerImpl.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-data-process/eagle-job-common/src/main/java/eagle/job/DefaultJobPartitionerImpl.java b/eagle-core/eagle-data-process/eagle-job-common/src/main/java/eagle/job/DefaultJobPartitionerImpl.java
deleted file mode 100644
index b9cf642..0000000
--- a/eagle-core/eagle-data-process/eagle-job-common/src/main/java/eagle/job/DefaultJobPartitionerImpl.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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 eagle.job;
-
-public class DefaultJobPartitionerImpl implements JobPartitioner {
-	@Override
-	public int partition(int numTotalParts, String key) {
-		int hash = key.hashCode();
-		hash = Math.abs(hash);
-		return hash % numTotalParts;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-data-process/eagle-job-common/src/main/java/eagle/job/JobFilter.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-data-process/eagle-job-common/src/main/java/eagle/job/JobFilter.java b/eagle-core/eagle-data-process/eagle-job-common/src/main/java/eagle/job/JobFilter.java
deleted file mode 100644
index 96e6b0c..0000000
--- a/eagle-core/eagle-data-process/eagle-job-common/src/main/java/eagle/job/JobFilter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * 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 eagle.job;
-
-public interface JobFilter {
-	public boolean accept(String key);
-}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afe86834/eagle-core/eagle-data-process/eagle-job-common/src/main/java/eagle/job/JobFilterByPartition.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-data-process/eagle-job-common/src/main/java/eagle/job/JobFilterByPartition.java b/eagle-core/eagle-data-process/eagle-job-common/src/main/java/eagle/job/JobFilterByPartition.java
deleted file mode 100644
index 29a73fe..0000000
--- a/eagle-core/eagle-data-process/eagle-job-common/src/main/java/eagle/job/JobFilterByPartition.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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 eagle.job;
-
-public class JobFilterByPartition implements JobFilter {
-	private JobPartitioner partitioner;
-	private int numTotalPartitions;
-	private int partitionId;
-	
-	public JobFilterByPartition(JobPartitioner partitioner, int numTotalPartitions, int partitionId){
-		this.partitioner = partitioner;
-		this.numTotalPartitions = numTotalPartitions;
-		this.partitionId = partitionId;
-	}
-
-	@Override
-	public boolean accept(String key) {
-		int part = partitioner.partition(numTotalPartitions, key);
-		if(part == partitionId)
-			return true;
-		return false;
-	}
-}