Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id C364E200B88 for ; Wed, 7 Sep 2016 19:42:36 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id C20D8160ABF; Wed, 7 Sep 2016 17:42:36 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 77FA0160AC1 for ; Wed, 7 Sep 2016 19:42:34 +0200 (CEST) Received: (qmail 16386 invoked by uid 500); 7 Sep 2016 17:42:33 -0000 Mailing-List: contact commits-help@eagle.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@eagle.incubator.apache.org Delivered-To: mailing list commits@eagle.incubator.apache.org Received: (qmail 16373 invoked by uid 99); 7 Sep 2016 17:42:33 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 07 Sep 2016 17:42:33 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id F2A2F1A016F for ; Wed, 7 Sep 2016 17:42:32 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -4.646 X-Spam-Level: X-Spam-Status: No, score=-4.646 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-1.426] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id qH_tHJRQWQoP for ; Wed, 7 Sep 2016 17:42:03 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with SMTP id 93A7560DA2 for ; Wed, 7 Sep 2016 17:42:00 +0000 (UTC) Received: (qmail 11998 invoked by uid 99); 7 Sep 2016 17:41:59 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 07 Sep 2016 17:41:59 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 100A5E07F4; Wed, 7 Sep 2016 17:41:59 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: yonzhang2012@apache.org To: commits@eagle.incubator.apache.org Date: Wed, 07 Sep 2016 17:42:47 -0000 Message-Id: <5166da41001c4611bdc6a79e5f9f0a25@git.apache.org> In-Reply-To: <7201ad3b09274d489e31c344a4940ff4@git.apache.org> References: <7201ad3b09274d489e31c344a4940ff4@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [51/52] [abbrv] incubator-eagle git commit: [EAGLE-520] Fix and decouple co-processor from eagle aggreation query service archived-at: Wed, 07 Sep 2016 17:42:36 -0000 http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/base/taggedlog/TaggedLogAPIEntity.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/base/taggedlog/TaggedLogAPIEntity.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/base/taggedlog/TaggedLogAPIEntity.java index b001955..b396b06 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/base/taggedlog/TaggedLogAPIEntity.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/base/taggedlog/TaggedLogAPIEntity.java @@ -16,6 +16,21 @@ */ package org.apache.eagle.log.base.taggedlog; +import org.apache.eagle.common.DateTimeUtil; +import org.apache.eagle.log.entity.meta.EntityDefinitionManager; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.FilterProvider; +import com.fasterxml.jackson.databind.ser.PropertyWriter; +import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter; +import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; @@ -26,210 +41,208 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; -import org.apache.eagle.log.entity.meta.EntityDefinitionManager; -import org.codehaus.jackson.JsonFactory; -import org.codehaus.jackson.JsonGenerator; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.map.SerializerProvider; -import org.codehaus.jackson.map.annotate.JsonFilter; -import org.codehaus.jackson.map.ser.BeanPropertyWriter; -import org.codehaus.jackson.map.ser.FilterProvider; -import org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter; -import org.codehaus.jackson.map.ser.impl.SimpleFilterProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import org.apache.eagle.common.DateTimeUtil; - /** * rowkey: prefix + timestamp + tagNameValues * as of now, all tags will be persisted as a column in hbase table * tag name is column qualifier name - * tag value is column value + * tag value is column value. */ @JsonFilter(TaggedLogAPIEntity.PropertyBeanFilterName) -public class TaggedLogAPIEntity implements PropertyChangeListener, Serializable{ - private static final Logger LOG = LoggerFactory.getLogger(TaggedLogAPIEntity.class); - private String prefix; - private long timestamp; - private Map tags; - - public void setExp(Map exp) { - this.exp = exp; - } - - public Map getExp() { - return this.exp; - } - - /** - * Extra dynamic attributes. - * TODO: can we move exp, _serializeAlias, _serializeVerbose to a wrapper class? - */ - private Map exp; - - private String encodedRowkey; - // track what qualifiers are changed - private Set _modifiedProperties = new HashSet(); - protected PropertyChangeSupport _pcs = new PropertyChangeSupport(this); - - - public Map getSerializeAlias() { - return _serializeAlias; - } - - public void setSerializeAlias(Map _serializeAlias) { - this._serializeAlias = _serializeAlias; - } - - private Map _serializeAlias = null; - - public boolean isSerializeVerbose() { - return _serializeVerbose; - } - - public void setSerializeVerbose(boolean _serializeVerbose) { - this._serializeVerbose = _serializeVerbose; - } - - private boolean _serializeVerbose = true; - - public TaggedLogAPIEntity(){ - _pcs.addPropertyChangeListener(this); - } - - public String getPrefix() { - return prefix; - } - public void setPrefix(String prefix) { - this.prefix = prefix; - } - public long getTimestamp() { - return timestamp; - } - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - public Map getTags() { - return tags; - } - public void setTags(Map tags) { - this.tags = tags; - } - public String getEncodedRowkey() { - return encodedRowkey; - } - public void setEncodedRowkey(String encodedRowkey) { - this.encodedRowkey = encodedRowkey; - } - - protected void valueChanged(String fieldModified){ - _pcs.firePropertyChange(fieldModified, null, null); - } - - public void propertyChange(PropertyChangeEvent evt) { - _modifiedProperties.add(evt.getPropertyName()); - } - - public Set modifiedQualifiers(){ - return this._modifiedProperties; - } - - public String toString(){ - StringBuffer sb = new StringBuffer(); - sb.append("prefix:"); - sb.append(prefix); - sb.append(", timestamp:"); - sb.append(timestamp); - sb.append(", humanReadableDate:"); - sb.append(DateTimeUtil.millisecondsToHumanDateWithMilliseconds(timestamp)); - sb.append(", tags: "); - if(tags != null){ - for(Map.Entry entry : tags.entrySet()){ - sb.append(entry.toString()); - sb.append(","); - } - } - sb.append(", encodedRowkey:"); - sb.append(encodedRowkey); - return sb.toString(); - } - - private static Set getPropertyNames(){ - if(_propertyNames == null) { - Field[] fields = TaggedLogAPIEntity.class.getDeclaredFields(); - Set fieldName = new HashSet(); - for (Field f : fields) fieldName.add(f.getName()); - _propertyNames = fieldName; - } - return _propertyNames; - } - - private static class BeanPropertyFilter extends SimpleBeanPropertyFilter { - private final static String prefix = "prefix"; - private final static String encodedRowkey = "encodedRowkey"; - private final static String exp = "exp"; - private final static String timestamp = "timestamp"; - @SuppressWarnings("serial") - private final static Set verboseFields = new HashSet(){{ - add(prefix); - add(encodedRowkey); - }}; - - @Override - public void serializeAsField(Object bean, JsonGenerator jgen, SerializerProvider provider, BeanPropertyWriter writer) throws Exception { - if(bean instanceof TaggedLogAPIEntity){ - TaggedLogAPIEntity entity = (TaggedLogAPIEntity) bean; - Set modified = entity.modifiedQualifiers(); - Set basePropertyNames = getPropertyNames(); - String writerName = writer.getName(); - if(modified.contains(writerName) || basePropertyNames.contains(writerName)){ - if((!entity.isSerializeVerbose() && verboseFields.contains(writerName))|| // skip verbose fields - (timestamp.equals(writerName) && !EntityDefinitionManager.isTimeSeries(entity.getClass())) // skip timestamp for non-timeseries entity - ){ - // log skip - if(LOG.isDebugEnabled()) LOG.debug("skip field"); - }else{ - // if serializeAlias is not null and exp is not null - if (exp.equals(writerName) && entity.getSerializeAlias()!=null && entity.getExp()!=null) { - Map _exp = new HashMap(); - for (Map.Entry entry : entity.getExp().entrySet()) { - String alias = entity.getSerializeAlias().get(entry.getKey()); - if (alias != null) { - _exp.put(alias, entry.getValue()); - } else { - _exp.put(entry.getKey(), entry.getValue()); - } - } - entity.setExp(_exp); - } - // write included field into serialized json output - writer.serializeAsField(bean, jgen, provider); - } - } - }else{ - writer.serializeAsField(bean, jgen, provider); - } - } - } - - public static FilterProvider getFilterProvider(){ - if(_filterProvider == null){ - SimpleFilterProvider _provider = new SimpleFilterProvider(); - _provider.addFilter(PropertyBeanFilterName,new BeanPropertyFilter()); - _filterProvider = _provider; - } - return _filterProvider; - } - - ////////////////////////////////////// - // Static fields - ////////////////////////////////////// - private static Set _propertyNames = null; - private static FilterProvider _filterProvider = null; - final static String PropertyBeanFilterName = "TaggedLogPropertyBeanFilter"; - - public static ObjectMapper buildObjectMapper(){ +public class TaggedLogAPIEntity implements PropertyChangeListener, Serializable { + private static final Logger LOG = LoggerFactory.getLogger(TaggedLogAPIEntity.class); + private String prefix; + private long timestamp; + private Map tags; + + public void setExp(Map exp) { + this.exp = exp; + } + + public Map getExp() { + return this.exp; + } + + /** + * Extra dynamic attributes. + * TODO: can we move exp, serializeAlias, serializeVerbose to a wrapper class? + */ + private Map exp; + + private String encodedRowkey; + // track what qualifiers are changed + private Set modifiedProperties = new HashSet(); + protected PropertyChangeSupport pcs + = new PropertyChangeSupport(this); + + + public Map getSerializeAlias() { + return serializeAlias; + } + + public void setSerializeAlias(Map serializeAlias) { + this.serializeAlias = serializeAlias; + } + + private Map serializeAlias = null; + + public boolean isSerializeVerbose() { + return serializeVerbose; + } + + public void setSerializeVerbose(boolean serializeVerbose) { + this.serializeVerbose = serializeVerbose; + } + + private boolean serializeVerbose = true; + + public TaggedLogAPIEntity() { + pcs.addPropertyChangeListener(this); + } + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + + public Map getTags() { + return tags; + } + + public void setTags(Map tags) { + this.tags = tags; + } + + public String getEncodedRowkey() { + return encodedRowkey; + } + + public void setEncodedRowkey(String encodedRowkey) { + this.encodedRowkey = encodedRowkey; + } + + protected void valueChanged(String fieldModified) { + pcs.firePropertyChange(fieldModified, null, null); + } + + public void propertyChange(PropertyChangeEvent evt) { + modifiedProperties.add(evt.getPropertyName()); + } + + public Set modifiedQualifiers() { + return this.modifiedProperties; + } + + public String toString() { + StringBuffer sb = new StringBuffer(); + sb.append("prefix:"); + sb.append(prefix); + sb.append(", timestamp:"); + sb.append(timestamp); + sb.append(", humanReadableDate:"); + sb.append(DateTimeUtil.millisecondsToHumanDateWithMilliseconds(timestamp)); + sb.append(", tags: "); + if (tags != null) { + for (Map.Entry entry : tags.entrySet()) { + sb.append(entry.toString()); + sb.append(","); + } + } + sb.append(", encodedRowkey:"); + sb.append(encodedRowkey); + return sb.toString(); + } + + private static Set getPropertyNames() { + if (_propertyNames == null) { + Field[] fields = TaggedLogAPIEntity.class.getDeclaredFields(); + Set fieldName = new HashSet(); + for (Field f : fields) { + fieldName.add(f.getName()); + } + _propertyNames = fieldName; + } + return _propertyNames; + } + + private static class BeanPropertyFilter extends SimpleBeanPropertyFilter { + private static final String prefix = "prefix"; + private static final String encodedRowkey = "encodedRowkey"; + private static final String exp = "exp"; + private static final String timestamp = "timestamp"; + @SuppressWarnings("serial") + private static final Set verboseFields = new HashSet() { + { + add(prefix); + add(encodedRowkey); + } + }; + + @Override + public void serializeAsField(Object pojo, JsonGenerator jgen, SerializerProvider provider, PropertyWriter writer) throws Exception { + if (pojo instanceof TaggedLogAPIEntity) { + TaggedLogAPIEntity entity = (TaggedLogAPIEntity) pojo; + Set modified = entity.modifiedQualifiers(); + Set basePropertyNames = getPropertyNames(); + String writerName = writer.getName(); + if (modified.contains(writerName) || basePropertyNames.contains(writerName)) { + if ((!entity.isSerializeVerbose() && verboseFields.contains(writerName)) + || (timestamp.equals(writerName) && !EntityDefinitionManager.isTimeSeries(entity.getClass()))) { + // log skip + if (LOG.isDebugEnabled()) { + LOG.debug("skip field"); + } + } else { + // if serializeAlias is not null and exp is not null + if (exp.equals(writerName) && entity.getSerializeAlias() != null && entity.getExp() != null) { + Map _exp = new HashMap(); + for (Map.Entry entry : entity.getExp().entrySet()) { + String alias = entity.getSerializeAlias().get(entry.getKey()); + if (alias != null) { + _exp.put(alias, entry.getValue()); + } else { + _exp.put(entry.getKey(), entry.getValue()); + } + } + entity.setExp(_exp); + } + // write included field into serialized json output + writer.serializeAsField(pojo, jgen, provider); + } + } + } else { + writer.serializeAsField(pojo, jgen, provider); + } + } + } + + public static FilterProvider getFilterProvider() { + if (_filterProvider == null) { + SimpleFilterProvider _provider = new SimpleFilterProvider(); + _provider.addFilter(PropertyBeanFilterName, new BeanPropertyFilter()); + _filterProvider = _provider; + } + return _filterProvider; + } + + ////////////////////////////////////// + // Static fields + ////////////////////////////////////// + private static Set _propertyNames = null; + private static FilterProvider _filterProvider = null; + static final String PropertyBeanFilterName = "TaggedLogPropertyBeanFilter"; + + public static ObjectMapper buildObjectMapper() { final JsonFactory factory = new JsonFactory(); final ObjectMapper mapper = new ObjectMapper(factory); mapper.setFilters(TaggedLogAPIEntity.getFilterProvider()); http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/GenericMetricEntity.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/GenericMetricEntity.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/GenericMetricEntity.java index 90db780..b7260f8 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/GenericMetricEntity.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/GenericMetricEntity.java @@ -48,6 +48,6 @@ public class GenericMetricEntity extends TaggedLogAPIEntity { public void setValue(double[] value) { this.value = value; - _pcs.firePropertyChange("value", null, null); + pcs.firePropertyChange("value", null, null); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/GenericServiceAPIResponseEntity.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/GenericServiceAPIResponseEntity.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/GenericServiceAPIResponseEntity.java index 2b37d25..6869c7c 100644 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/GenericServiceAPIResponseEntity.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/GenericServiceAPIResponseEntity.java @@ -16,10 +16,10 @@ */ package org.apache.eagle.log.entity; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.apache.eagle.common.EagleExceptionWrapper; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.map.annotate.JsonDeserialize; -import org.codehaus.jackson.map.annotate.JsonSerialize; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; @@ -111,11 +111,8 @@ public class GenericServiceAPIResponseEntity{ public String getException() { return exception; } -// public void setException(String exception) { -// this.exception = exception; -// } public void setException(Exception exceptionObj){ - if(exception!=null) this.exception = EagleExceptionWrapper.wrap(exceptionObj); + this.exception = EagleExceptionWrapper.wrap(exceptionObj); } } http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/GenericServiceAPIResponseEntityDeserializer.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/GenericServiceAPIResponseEntityDeserializer.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/GenericServiceAPIResponseEntityDeserializer.java index 940ee8a..836295b 100644 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/GenericServiceAPIResponseEntityDeserializer.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/GenericServiceAPIResponseEntityDeserializer.java @@ -16,14 +16,15 @@ */ package org.apache.eagle.log.entity; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.JsonParser; -import org.codehaus.jackson.JsonProcessingException; -import org.codehaus.jackson.ObjectCodec; -import org.codehaus.jackson.map.DeserializationContext; -import org.codehaus.jackson.map.JsonDeserializer; -import org.codehaus.jackson.map.type.TypeFactory; -import org.codehaus.jackson.type.JavaType; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.ObjectCodec; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.type.TypeFactory; +import com.google.common.base.Preconditions; import java.io.IOException; import java.util.*; @@ -45,20 +46,20 @@ public class GenericServiceAPIResponseEntityDeserializer extends JsonDeserialize JsonNode rootNode = jp.getCodec().readTree(jp); if(rootNode.isObject()){ - Iterator> fields = rootNode.getFields(); + Iterator> fields = rootNode.fields(); JsonNode objNode = null; while(fields.hasNext()){ Map.Entry field = fields.next(); if (META_FIELD.equals(field.getKey()) && field.getValue() != null) entity.setMeta(objectCodec.readValue(field.getValue().traverse(), Map.class)); else if(SUCCESS_FIELD.equals(field.getKey()) && field.getValue() != null){ - entity.setSuccess(field.getValue().getValueAsBoolean(false)); + entity.setSuccess(field.getValue().booleanValue()); }else if(EXCEPTION_FIELD.equals(field.getKey()) && field.getValue() != null){ -// entity.setException(field.getValue().getTextValue()); - entity.setException(new Exception(field.getValue().getTextValue())); + entity.setException(new Exception(field.getValue().textValue())); }else if(TYPE_FIELD.endsWith(field.getKey()) && field.getValue() != null){ + Preconditions.checkNotNull(field.getValue().textValue(),"Response type class is null"); try { - entity.setType(Class.forName(field.getValue().getTextValue())); + entity.setType(Class.forName(field.getValue().textValue())); } catch (ClassNotFoundException e) { throw new IOException(e); } @@ -82,4 +83,4 @@ public class GenericServiceAPIResponseEntityDeserializer extends JsonDeserialize } return entity; } -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/MetricMetadataEntity.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/MetricMetadataEntity.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/MetricMetadataEntity.java index f655ba0..9a58d35 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/MetricMetadataEntity.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/MetricMetadataEntity.java @@ -62,56 +62,56 @@ public class MetricMetadataEntity extends TaggedLogAPIEntity { } public void setStoreType(String storeType) { this.storeType = storeType; - _pcs.firePropertyChange("storeType", null, null); + pcs.firePropertyChange("storeType", null, null); } public String getDisplayName() { return displayName; } public void setDisplayName(String displayName) { this.displayName = displayName; - _pcs.firePropertyChange("displayName", null, null); + pcs.firePropertyChange("displayName", null, null); } public String getDefaultDownSamplingFunction() { return defaultDownSamplingFunction; } public void setDefaultDownSamplingFunction(String defaultDownSamplingFunction) { this.defaultDownSamplingFunction = defaultDownSamplingFunction; - _pcs.firePropertyChange("defaultDownSamplingFunction", null, null); + pcs.firePropertyChange("defaultDownSamplingFunction", null, null); } public String getDefaultAggregateFunction() { return defaultAggregateFunction; } public void setDefaultAggregateFunction(String defaultAggregateFunction) { this.defaultAggregateFunction = defaultAggregateFunction; - _pcs.firePropertyChange("defaultAggregateFunction", null, null); + pcs.firePropertyChange("defaultAggregateFunction", null, null); } public String getAggFunctions() { return aggFunctions; } public void setAggFunctions(String aggFunctions) { this.aggFunctions = aggFunctions; - _pcs.firePropertyChange("aggFunctions", null, null); + pcs.firePropertyChange("aggFunctions", null, null); } public String getDownSamplingFunctions() { return downSamplingFunctions; } public void setDownSamplingFunctions(String downSamplingFunctions) { this.downSamplingFunctions = downSamplingFunctions; - _pcs.firePropertyChange("downSamplingFunctions", null, null); + pcs.firePropertyChange("downSamplingFunctions", null, null); } public String getResolutions() { return resolutions; } public void setResolutions(String resolutions) { this.resolutions = resolutions; - _pcs.firePropertyChange("resolutions", null, null); + pcs.firePropertyChange("resolutions", null, null); } public String getDrillDownPaths() { return drillDownPaths; } public void setDrillDownPaths(String drillDownPaths) { this.drillDownPaths = drillDownPaths; - _pcs.firePropertyChange("drillDownPaths", null, null); + pcs.firePropertyChange("drillDownPaths", null, null); } } http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/test/TestEntity.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/test/TestEntity.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/test/TestEntity.java index 402e170..af635ec 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/test/TestEntity.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/test/TestEntity.java @@ -56,7 +56,7 @@ public class TestEntity extends TaggedLogAPIEntity { public void setNumClusters(Long numClusters) { this.numClusters = numClusters; - _pcs.firePropertyChange("numClusters", null, null); + pcs.firePropertyChange("numClusters", null, null); } public int getNumHosts() { @@ -65,7 +65,7 @@ public class TestEntity extends TaggedLogAPIEntity { public void setNumHosts(int numHosts) { this.numHosts = numHosts; - _pcs.firePropertyChange("numHosts", null, null); + pcs.firePropertyChange("numHosts", null, null); } public long getCount() { @@ -74,7 +74,7 @@ public class TestEntity extends TaggedLogAPIEntity { public void setCount(long count) { this.count = count; - _pcs.firePropertyChange("count", null, null); + pcs.firePropertyChange("count", null, null); } public String getRemediationID() { @@ -83,7 +83,7 @@ public class TestEntity extends TaggedLogAPIEntity { public void setRemediationID(String remediationID) { this.remediationID = remediationID; - _pcs.firePropertyChange("remediationID", null, null); + pcs.firePropertyChange("remediationID", null, null); } public String getRemediationStatus() { @@ -92,7 +92,7 @@ public class TestEntity extends TaggedLogAPIEntity { public void setRemediationStatus(String remediationStatus) { this.remediationStatus = remediationStatus; - _pcs.firePropertyChange("remediationStatus", null, null); + pcs.firePropertyChange("remediationStatus", null, null); } public String toString(){ http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/test/TestLogAPIEntity.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/test/TestLogAPIEntity.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/test/TestLogAPIEntity.java index ea73f81..d126421 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/test/TestLogAPIEntity.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/test/TestLogAPIEntity.java @@ -52,48 +52,48 @@ public class TestLogAPIEntity extends TaggedLogAPIEntity { } public void setField1(int field1) { this.field1 = field1; - _pcs.firePropertyChange("field1", null, null); + pcs.firePropertyChange("field1", null, null); } public Integer getField2() { return field2; } public void setField2(Integer field2) { this.field2 = field2; - _pcs.firePropertyChange("field2", null, null); + pcs.firePropertyChange("field2", null, null); } public long getField3() { return field3; } public void setField3(long field3) { this.field3 = field3; - _pcs.firePropertyChange("field3", null, null); + pcs.firePropertyChange("field3", null, null); } public Long getField4() { return field4; } public void setField4(Long field4) { this.field4 = field4; - _pcs.firePropertyChange("field4", null, null); + pcs.firePropertyChange("field4", null, null); } public double getField5() { return field5; } public void setField5(double field5) { this.field5 = field5; - _pcs.firePropertyChange("field5", null, null); + pcs.firePropertyChange("field5", null, null); } public Double getField6() { return field6; } public void setField6(Double field6) { this.field6 = field6; - _pcs.firePropertyChange("field6", null, null); + pcs.firePropertyChange("field6", null, null); } public String getField7() { return field7; } public void setField7(String field7) { this.field7 = field7; - _pcs.firePropertyChange("field7", null, null); + pcs.firePropertyChange("field7", null, null); } } http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/test/TestTimeSeriesAPIEntity.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/test/TestTimeSeriesAPIEntity.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/test/TestTimeSeriesAPIEntity.java index 6d5f560..eaa9fd2 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/test/TestTimeSeriesAPIEntity.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/test/TestTimeSeriesAPIEntity.java @@ -50,48 +50,48 @@ public class TestTimeSeriesAPIEntity extends TaggedLogAPIEntity { } public void setField1(int field1) { this.field1 = field1; - _pcs.firePropertyChange("field1", null, null); + pcs.firePropertyChange("field1", null, null); } public Integer getField2() { return field2; } public void setField2(Integer field2) { this.field2 = field2; - _pcs.firePropertyChange("field2", null, null); + pcs.firePropertyChange("field2", null, null); } public long getField3() { return field3; } public void setField3(long field3) { this.field3 = field3; - _pcs.firePropertyChange("field3", null, null); + pcs.firePropertyChange("field3", null, null); } public Long getField4() { return field4; } public void setField4(Long field4) { this.field4 = field4; - _pcs.firePropertyChange("field4", null, null); + pcs.firePropertyChange("field4", null, null); } public double getField5() { return field5; } public void setField5(double field5) { this.field5 = field5; - _pcs.firePropertyChange("field5", null, null); + pcs.firePropertyChange("field5", null, null); } public Double getField6() { return field6; } public void setField6(Double field6) { this.field6 = field6; - _pcs.firePropertyChange("field6", null, null); + pcs.firePropertyChange("field6", null, null); } public String getField7() { return field7; } public void setField7(String field7) { this.field7 = field7; - _pcs.firePropertyChange("field7", null, null); + pcs.firePropertyChange("field7", null, null); } } http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/TestGenericServiceAPIResponseEntity.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/TestGenericServiceAPIResponseEntity.java b/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/TestGenericServiceAPIResponseEntity.java index 6ef9365..092ef75 100644 --- a/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/TestGenericServiceAPIResponseEntity.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/TestGenericServiceAPIResponseEntity.java @@ -16,10 +16,10 @@ */ package org.apache.eagle.log; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.apache.eagle.log.entity.GenericServiceAPIResponseEntity; import org.junit.Assert; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.map.annotate.JsonSerialize; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/base/taggedlog/TestTaggedLogAPIEntity.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/base/taggedlog/TestTaggedLogAPIEntity.java b/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/base/taggedlog/TestTaggedLogAPIEntity.java index 3b14bff..d6db6a2 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/base/taggedlog/TestTaggedLogAPIEntity.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/base/taggedlog/TestTaggedLogAPIEntity.java @@ -17,18 +17,32 @@ package org.apache.eagle.log.entity.base.taggedlog; import java.io.IOException; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; +import java.util.Map; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import org.apache.eagle.log.base.taggedlog.EntityJsonModule; import org.apache.eagle.log.base.taggedlog.TaggedLogAPIEntity; import org.apache.eagle.log.entity.meta.Column; import org.junit.Assert; -import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.annotate.JsonSerialize; +import org.junit.BeforeClass; import org.junit.Test; public class TestTaggedLogAPIEntity { - ObjectMapper objectMapper = new ObjectMapper(); + private static ObjectMapper objectMapper; + + @BeforeClass + public static void setUp(){ + objectMapper = new ObjectMapper(); + objectMapper.setFilters(TaggedLogAPIEntity.getFilterProvider()); + objectMapper.registerModule(new EntityJsonModule()); + } @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) private class MockSubTaggedLogAPIEntity extends TaggedLogAPIEntity { @@ -38,7 +52,7 @@ public class TestTaggedLogAPIEntity { public void setField1(double value) { this.field1 = value; - _pcs.firePropertyChange("field1", null, null); + pcs.firePropertyChange("field1", null, null); } @Column("a") @@ -50,14 +64,14 @@ public class TestTaggedLogAPIEntity { public void setField2(String field2) { this.field2 = field2; - _pcs.firePropertyChange("field2", null, null); + pcs.firePropertyChange("field2", null, null); } @Column("b") private String field2; } - @SuppressWarnings("serial") + @SuppressWarnings("unchecked") @Test public void testJsonSerializeFilter() throws IOException { MockSubTaggedLogAPIEntity mock = new MockSubTaggedLogAPIEntity(); @@ -68,7 +82,7 @@ public class TestTaggedLogAPIEntity { mock.setEncodedRowkey("test_encoded_row_key"); mock.setPrefix("mock"); mock.setField2("ok"); - String json = objectMapper.filteredWriter(TaggedLogAPIEntity.getFilterProvider()).writeValueAsString(mock); + String json = objectMapper.writeValueAsString(mock); System.out.println(json); Assert.assertTrue(json.contains("field2")); Assert.assertTrue(!json.contains("field1")); @@ -83,9 +97,21 @@ public class TestTaggedLogAPIEntity { mock.setExp(new HashMap() {{ put("extra_field", 3.14); }}); - json = objectMapper.filteredWriter(TaggedLogAPIEntity.getFilterProvider()).writeValueAsString(mock); + json = objectMapper.writeValueAsString(mock); System.out.println(json); Assert.assertTrue(json.contains("field2")); Assert.assertTrue(json.contains("field1")); } + + @Test + public void testJsonSerializeMap() throws JsonProcessingException { + Map,List> entries = new HashMap,List>(){ + { + put(Arrays.asList("a","b"),Arrays.asList(1,2,3)); + } + }; + String json = objectMapper.writeValueAsString(entries.entrySet()); + Assert.assertNotNull(json); + System.out.print(json); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-query-base/src/main/java/org/apache/eagle/query/aggregate/raw/GroupbyKey.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-query-base/src/main/java/org/apache/eagle/query/aggregate/raw/GroupbyKey.java b/eagle-core/eagle-query/eagle-query-base/src/main/java/org/apache/eagle/query/aggregate/raw/GroupbyKey.java index 3a54d70..c8ed260 100755 --- a/eagle-core/eagle-query/eagle-query-base/src/main/java/org/apache/eagle/query/aggregate/raw/GroupbyKey.java +++ b/eagle-core/eagle-query/eagle-query-base/src/main/java/org/apache/eagle/query/aggregate/raw/GroupbyKey.java @@ -16,12 +16,15 @@ */ package org.apache.eagle.query.aggregate.raw; +import org.apache.commons.lang3.StringUtils; +import org.apache.hadoop.io.ByteWritable; import org.apache.hadoop.io.BytesWritable; import org.apache.hadoop.io.Writable; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.ListIterator; @@ -90,8 +93,6 @@ public class GroupbyKey implements Writable { return false; } GroupbyKey that = (GroupbyKey)obj; -// ListIterator e1 = this.value.listIterator(); -// ListIterator e2 = that.value.listIterator(); ListIterator e1 = this.value.listIterator(); ListIterator e2 = that.value.listIterator(); while(e1.hasNext() && e2.hasNext()){ @@ -102,6 +103,16 @@ public class GroupbyKey implements Writable { } @Override + public String toString() { + List items = new ArrayList<>(this.value.size()); + ListIterator iterator = this.value.listIterator(); + while(iterator.hasNext()){ + items.add(iterator.next().toString()); + } + return String.format("%s(%s)",this.getClass().getSimpleName(),StringUtils.join(items,",")); + } + + @Override public int hashCode(){ ListIterator e1 = this.value.listIterator(); int hash = 0xFFFFFFFF; http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-query-base/src/test/java/org/apache/eagle/query/aggregate/test/TestBucketQuery.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-query-base/src/test/java/org/apache/eagle/query/aggregate/test/TestBucketQuery.java b/eagle-core/eagle-query/eagle-query-base/src/test/java/org/apache/eagle/query/aggregate/test/TestBucketQuery.java index e2e83ec..e44d73b 100755 --- a/eagle-core/eagle-query/eagle-query-base/src/test/java/org/apache/eagle/query/aggregate/test/TestBucketQuery.java +++ b/eagle-core/eagle-query/eagle-query-base/src/test/java/org/apache/eagle/query/aggregate/test/TestBucketQuery.java @@ -16,11 +16,11 @@ */ package org.apache.eagle.query.aggregate.test; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.eagle.log.base.taggedlog.TaggedLogAPIEntity; import org.apache.eagle.query.aggregate.BucketQuery; import org.junit.Assert; -import org.codehaus.jackson.JsonFactory; -import org.codehaus.jackson.map.ObjectMapper; import org.junit.Test; import java.util.ArrayList; http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-service-base/pom.xml ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-service-base/pom.xml b/eagle-core/eagle-query/eagle-service-base/pom.xml index 92a705a..a3fc2e7 100755 --- a/eagle-core/eagle-query/eagle-service-base/pom.xml +++ b/eagle-core/eagle-query/eagle-service-base/pom.xml @@ -69,9 +69,9 @@ tests test - - org.codehaus.jackson - jackson-mapper-asl - + + + + http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-service-base/src/main/java/org/apache/eagle/service/generic/GenericEntityServiceResource.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-service-base/src/main/java/org/apache/eagle/service/generic/GenericEntityServiceResource.java b/eagle-core/eagle-query/eagle-service-base/src/main/java/org/apache/eagle/service/generic/GenericEntityServiceResource.java index b7f27f5..a0d8143 100644 --- a/eagle-core/eagle-query/eagle-service-base/src/main/java/org/apache/eagle/service/generic/GenericEntityServiceResource.java +++ b/eagle-core/eagle-query/eagle-service-base/src/main/java/org/apache/eagle/service/generic/GenericEntityServiceResource.java @@ -38,6 +38,7 @@ import org.slf4j.LoggerFactory; import javax.ws.rs.*; import javax.ws.rs.core.GenericEntity; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; @@ -456,6 +457,10 @@ public class GenericEntityServiceResource { } catch (Exception e) { response.setException(e); LOG.error(e.getMessage(),e); + throw new WebApplicationException(e, + Response.status(Response.Status.BAD_REQUEST) + .type(MediaType.APPLICATION_JSON_TYPE) + .entity(response).build()); }finally { stopWatch.stop(); } http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-service-base/src/main/java/org/apache/eagle/service/generic/GenericObjectMapperProvider.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-service-base/src/main/java/org/apache/eagle/service/generic/GenericObjectMapperProvider.java b/eagle-core/eagle-query/eagle-service-base/src/main/java/org/apache/eagle/service/generic/GenericObjectMapperProvider.java index 35dd4b7..35b04d1 100755 --- a/eagle-core/eagle-query/eagle-service-base/src/main/java/org/apache/eagle/service/generic/GenericObjectMapperProvider.java +++ b/eagle-core/eagle-query/eagle-service-base/src/main/java/org/apache/eagle/service/generic/GenericObjectMapperProvider.java @@ -16,10 +16,10 @@ */ package org.apache.eagle.service.generic; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ser.FilterProvider; import com.google.inject.Singleton; import org.apache.eagle.log.base.taggedlog.TaggedLogAPIEntity; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.map.ser.FilterProvider; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-service-base/src/main/java/org/apache/eagle/service/selfcheck/ServiceResource.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-service-base/src/main/java/org/apache/eagle/service/selfcheck/ServiceResource.java b/eagle-core/eagle-query/eagle-service-base/src/main/java/org/apache/eagle/service/selfcheck/ServiceResource.java index f108bd5..2db13f5 100644 --- a/eagle-core/eagle-query/eagle-service-base/src/main/java/org/apache/eagle/service/selfcheck/ServiceResource.java +++ b/eagle-core/eagle-query/eagle-service-base/src/main/java/org/apache/eagle/service/selfcheck/ServiceResource.java @@ -33,32 +33,33 @@ import com.sun.jersey.api.json.JSONWithPadding; @Path("services") public class ServiceResource { - private static final Logger LOG = LoggerFactory.getLogger(ServiceResource.class); - - @GET - @Produces({"application/json", "application/xml"}) - public Map getServiceDefinitions(){ - Map result = null; - try{ - result = EntityDefinitionManager.entities(); - }catch(Exception ex){ - LOG.error("Error in getting entity definitions", ex); - } - - return result; - } - - @GET - @Path("/jsonp") - @Produces({"application/x-javascript", "application/json", "application/xml"}) - public JSONWithPadding getServiceDefinitionsWithJsonp(@QueryParam("callback") String callback){ - Map result = null; - try{ - result = EntityDefinitionManager.entities(); - }catch(Exception ex){ - LOG.error("Error in getting entity definitions", ex); - } - - return new JSONWithPadding(new GenericEntity>(result){}, callback); - } + private static final Logger LOG = LoggerFactory.getLogger(ServiceResource.class); + + @GET + @Produces({"application/json", "application/xml"}) + public Map getServiceDefinitions() { + Map result = null; + try { + result = EntityDefinitionManager.entities(); + } catch (Exception ex) { + LOG.error("Error in getting entity definitions", ex); + } + + return result; + } + + @GET + @Path("/jsonp") + @Produces({"application/x-javascript", "application/json", "application/xml"}) + public JSONWithPadding getServiceDefinitionsWithJsonp(@QueryParam("callback") String callback) { + Map result = null; + try { + result = EntityDefinitionManager.entities(); + } catch (Exception ex) { + LOG.error("Error in getting entity definitions", ex); + } + + return new JSONWithPadding(new GenericEntity>(result) { + }, callback); + } } http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-storage-base/pom.xml ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-storage-base/pom.xml b/eagle-core/eagle-query/eagle-storage-base/pom.xml index 536e497..de5d59d 100644 --- a/eagle-core/eagle-query/eagle-storage-base/pom.xml +++ b/eagle-core/eagle-query/eagle-storage-base/pom.xml @@ -33,4 +33,4 @@ ${project.version} - + \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-storage-base/src/test/resources/application.conf ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-storage-base/src/test/resources/application.conf b/eagle-core/eagle-query/eagle-storage-base/src/test/resources/application.conf index dbaac1d..77093bc 100644 --- a/eagle-core/eagle-query/eagle-storage-base/src/test/resources/application.conf +++ b/eagle-core/eagle-query/eagle-storage-base/src/test/resources/application.conf @@ -13,8 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -eagle{ - service{ +storage { env="dev" host="localhost" port=8080 @@ -24,5 +23,4 @@ eagle{ hbase-zookeeper-quorum="localhost" hbase-zookeeper-property-clientPort=2181 zookeeper-znode-parent="/hbase-unsecure" - } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-storage-hbase/pom.xml ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-storage-hbase/pom.xml b/eagle-core/eagle-query/eagle-storage-hbase/pom.xml index 774684c..406494e 100644 --- a/eagle-core/eagle-query/eagle-storage-hbase/pom.xml +++ b/eagle-core/eagle-query/eagle-storage-hbase/pom.xml @@ -22,7 +22,7 @@ eagle-query-parent org.apache.eagle 0.5.0-incubating-SNAPSHOT - ../pom.xml + .. 4.0.0 http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-storage-hbase/src/assembly/hbase-coprocessor.xml ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-storage-hbase/src/assembly/hbase-coprocessor.xml b/eagle-core/eagle-query/eagle-storage-hbase/src/assembly/hbase-coprocessor.xml index fa80c64..e27fcd4 100644 --- a/eagle-core/eagle-query/eagle-storage-hbase/src/assembly/hbase-coprocessor.xml +++ b/eagle-core/eagle-query/eagle-storage-hbase/src/assembly/hbase-coprocessor.xml @@ -44,6 +44,7 @@ org.slf4j:slf4j-api org.slf4j:log4j-over-slf4j org.slf4j:slf4j-log4j12 + com.google.protobuf:protobuf-java http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseEntitySchemaManager.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseEntitySchemaManager.java b/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseEntitySchemaManager.java index 03c0ec2..d7483f5 100644 --- a/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseEntitySchemaManager.java +++ b/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseEntitySchemaManager.java @@ -40,9 +40,10 @@ public class HBaseEntitySchemaManager { private static HBaseEntitySchemaManager instance; private volatile HBaseAdmin admin; - private final int DEFAULT_MAX_VERSIONS = 1; + private static final int DEFAULT_MAX_VERSIONS = 1; - private HBaseEntitySchemaManager() {} + private HBaseEntitySchemaManager() { + } public static HBaseEntitySchemaManager getInstance() { if (instance == null) { http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseStorage.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseStorage.java b/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseStorage.java index 1810401..74c90bc 100644 --- a/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseStorage.java +++ b/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseStorage.java @@ -16,6 +16,11 @@ */ package org.apache.eagle.storage.hbase; +import static org.apache.eagle.audit.common.AuditConstants.AUDIT_EVENT_CREATE; +import static org.apache.eagle.audit.common.AuditConstants.AUDIT_EVENT_DELETE; +import static org.apache.eagle.audit.common.AuditConstants.AUDIT_EVENT_UPDATE; + +import org.apache.eagle.common.EagleBase64Wrapper; import org.apache.eagle.log.base.taggedlog.TaggedLogAPIEntity; import org.apache.eagle.log.entity.GenericEntityWriter; import org.apache.eagle.log.entity.HBaseInternalLogHelper; @@ -29,7 +34,7 @@ import org.apache.eagle.storage.hbase.query.GenericQueryBuilder; import org.apache.eagle.storage.operation.CompiledQuery; import org.apache.eagle.storage.result.ModifyResult; import org.apache.eagle.storage.result.QueryResult; -import org.apache.eagle.common.EagleBase64Wrapper; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,19 +42,13 @@ import java.io.IOException; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import java.util.Map; -import static org.apache.eagle.audit.common.AuditConstants.AUDIT_EVENT_CREATE; -import static org.apache.eagle.audit.common.AuditConstants.AUDIT_EVENT_UPDATE; -import static org.apache.eagle.audit.common.AuditConstants.AUDIT_EVENT_DELETE; - -/** - * @since 3/18/15 - */ public class HBaseStorage extends DataStorageBase { - private final static Logger LOG = LoggerFactory.getLogger(HBaseStorage.class); + private static final Logger LOG = LoggerFactory.getLogger(HBaseStorage.class); private HBaseStorageAudit audit = new HBaseStorageAudit(); - + @Override public void init() throws IOException { HBaseEntitySchemaManager.getInstance().init(); @@ -58,9 +57,9 @@ public class HBaseStorage extends DataStorageBase { @Override public ModifyResult update(List entities, EntityDefinition entityDefinition) throws IOException { - ModifyResult result = create(entities, entityDefinition); - audit.auditOperation(AUDIT_EVENT_UPDATE, entities, null, entityDefinition); // added for jira: EAGLE-47 - return result; + ModifyResult result = create(entities, entityDefinition); + audit.auditOperation(AUDIT_EVENT_UPDATE, entities, null, entityDefinition); // added for jira: EAGLE-47 + return result; } @Override @@ -71,118 +70,85 @@ public class HBaseStorage extends DataStorageBase { result.setIdentifiers(entityWriter.write(entities)); result.setSuccess(true); } catch (Exception e) { - LOG.error(e.getMessage(),e); + LOG.error(e.getMessage(), e); throw new IOException(e); } audit.auditOperation(AUDIT_EVENT_CREATE, entities, null, entityDefinition); // added for jira: EAGLE-47 return result; } - - /** - * @param entities - * @param entityDefinition - * @param - * - * @return ModifyResult - * - * @throws IOException - */ + + @Override - public ModifyResult delete(List entities, EntityDefinition entityDefinition) throws IOException { + public ModifyResult deleteByID(List ids, EntityDefinition entityDefinition) throws IOException { ModifyResult result = new ModifyResult(); - try{ + try { GenericDeleter deleter = new GenericDeleter(entityDefinition.getTable(), entityDefinition.getColumnFamily()); - result.setIdentifiers(deleter.delete(entities)); - }catch(Exception ex){ - LOG.error(ex.getMessage(),ex); + deleter.deleteByEncodedRowkeys(ids); + result.setIdentifiers(ids); + } catch (Exception ex) { + LOG.error(ex.getMessage(), ex); result.setSuccess(false); throw new IOException(ex); } - - audit.auditOperation(AUDIT_EVENT_DELETE, entities, null, entityDefinition); // added for jira: EAGLE-47 + + audit.auditOperation(AUDIT_EVENT_DELETE, null, ids, entityDefinition); // added for jira: EAGLE-47 result.setSuccess(true); return result; } - /** - * TODO: - * - * @param ids - * @param entityDefinition - * @return - * @throws IOException - */ @Override - public ModifyResult deleteByID(List ids, EntityDefinition entityDefinition) throws IOException { + public ModifyResult delete(List entities, EntityDefinition entityDefinition) throws IOException { ModifyResult result = new ModifyResult(); - try{ + try { GenericDeleter deleter = new GenericDeleter(entityDefinition.getTable(), entityDefinition.getColumnFamily()); - deleter.deleteByEncodedRowkeys(ids); - result.setIdentifiers(ids); - }catch(Exception ex){ - LOG.error(ex.getMessage(),ex); + result.setIdentifiers(deleter.delete(entities)); + } catch (Exception ex) { + LOG.error(ex.getMessage(), ex); result.setSuccess(false); throw new IOException(ex); } - - audit.auditOperation(AUDIT_EVENT_DELETE, null, ids, entityDefinition); // added for jira: EAGLE-47 + + audit.auditOperation(AUDIT_EVENT_DELETE, entities, null, entityDefinition); // added for jira: EAGLE-47 result.setSuccess(true); return result; } - /** - * TODO: - * - * @param query - * @param entityDefinition - * @return - * @throws IOException - */ @Override public ModifyResult delete(CompiledQuery query, EntityDefinition entityDefinition) throws IOException { - if(query.isHasAgg()){ + if (query.isHasAgg()) { throw new IOException("delete by aggregation query is not supported"); } ModifyResult result; try { - LOG.info("Querying for deleting: "+query); + LOG.info("Querying for deleting: " + query); GenericQuery reader = GenericQueryBuilder .select(query.getSearchCondition().getOutputFields()) - .from(query.getServiceName(),query.getRawQuery().getMetricName()).where(query.getSearchCondition()) + .from(query.getServiceName(), query.getRawQuery().getMetricName()).where(query.getSearchCondition()) .groupBy(query.isHasAgg(), query.getGroupByFields(), query.getAggregateFunctionTypes(), query.getAggregateFields()) - .timeSeries(query.getRawQuery().isTimeSeries(),query.getRawQuery().getIntervalmin()) + .timeSeries(query.getRawQuery().isTimeSeries(), query.getRawQuery().getIntervalmin()) .treeAgg(query.getRawQuery().isTreeAgg()) - .orderBy(query.getSortOptions(),query.getSortFunctions(),query.getSortFields()) + .orderBy(query.getSortOptions(), query.getSortFunctions(), query.getSortFields()) .top(query.getRawQuery().getTop()) .parallel(query.getRawQuery().getParallel()) .build(); List entities = reader.result(); - if(entities != null){ - LOG.info("Deleting "+entities.size()+" entities"); - result = delete(entities,entityDefinition); - }else{ + if (entities != null) { + LOG.info("Deleting " + entities.size() + " entities"); + result = delete(entities, entityDefinition); + } else { LOG.info("Deleting 0 entities"); result = new ModifyResult(); result.setSuccess(true); } } catch (Exception e) { - LOG.error(e.getMessage(),e); + LOG.error(e.getMessage(), e); throw new IOException(e); } return result; } - /** - * TODO: - * - * @param query - * @param entityDefinition - * @param - * @return - * @throws IOException - */ @Override @SuppressWarnings("unchecked") public QueryResult query(CompiledQuery query, EntityDefinition entityDefinition) throws IOException { @@ -190,52 +156,53 @@ public class HBaseStorage extends DataStorageBase { try { GenericQuery reader = GenericQueryBuilder .select(query.getSearchCondition().getOutputFields()) - .from(query.getServiceName(),query.getRawQuery().getMetricName()).where(query.getSearchCondition()) + .from(query.getServiceName(), query.getRawQuery().getMetricName()).where(query.getSearchCondition()) .groupBy(query.isHasAgg(), query.getGroupByFields(), query.getAggregateFunctionTypes(), query.getAggregateFields()) - .timeSeries(query.getRawQuery().isTimeSeries(),query.getRawQuery().getIntervalmin()) + .timeSeries(query.getRawQuery().isTimeSeries(), query.getRawQuery().getIntervalmin()) .treeAgg(query.getRawQuery().isTreeAgg()) - .orderBy(query.getSortOptions(),query.getSortFunctions(),query.getSortFields()) + .orderBy(query.getSortOptions(), query.getSortFunctions(), query.getSortFields()) .top(query.getRawQuery().getTop()) .parallel(query.getRawQuery().getParallel()) .build(); - List entities = reader.result(); + List entities = reader.result(); result.setData(entities); result.setFirstTimestamp(reader.getFirstTimeStamp()); result.setLastTimestamp(reader.getLastTimestamp()); result.setSize(entities.size()); - if(!query.isHasAgg()) result.setEntityType((Class) entityDefinition.getEntityClass()); + if (!query.isHasAgg()) { + result.setEntityType((Class) entityDefinition.getEntityClass()); + } else { + result.setEntityType((Class) Map.class); + } result.setSuccess(true); } catch (Exception e) { - LOG.error(e.getMessage(),e); + LOG.error(e.getMessage(), e); throw new IOException(e); } return result; } /** - * Query by HBase rowkey - * - * @param ids hbase rowkey list - * @param entityDefinition entity definition - * @param entity type - * @return QueryResult with entity type - * - * @throws IOException + * Query by HBase rowkey. */ @Override public QueryResult queryById(List ids, EntityDefinition entityDefinition) throws IOException { List rowkeys = new ArrayList<>(ids.size()); QueryResult result = new QueryResult(); - for(String id:ids) rowkeys.add(EagleBase64Wrapper.decode(id)); + for (String id : ids) { + rowkeys.add(EagleBase64Wrapper.decode(id)); + } RowKeyLogReader reader = null; try { - reader = new RowKeyLogReader(entityDefinition, rowkeys,null); + reader = new RowKeyLogReader(entityDefinition, rowkeys, null); reader.open(); List entities = new LinkedList<>(); - while(true) { + while (true) { InternalLog log = reader.read(); - if(log == null) break; + if (log == null) { + break; + } TaggedLogAPIEntity entity = HBaseInternalLogHelper.buildEntity(log, entityDefinition); entities.add(entity); } @@ -247,8 +214,10 @@ public class HBaseStorage extends DataStorageBase { } catch (Exception e) { LOG.error(e.getMessage(), e); throw new IOException(e); - } finally{ - if(reader != null) reader.close(); + } finally { + if (reader != null) { + reader.close(); + } } } http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseStorageAudit.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseStorageAudit.java b/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseStorageAudit.java index f6a6180..74a9dc7 100644 --- a/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseStorageAudit.java +++ b/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/HBaseStorageAudit.java @@ -17,11 +17,7 @@ package org.apache.eagle.storage.hbase; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import static org.apache.eagle.audit.common.AuditConstants.*; import org.apache.eagle.audit.common.AuditEvent; import org.apache.eagle.audit.entity.GenericAuditEntity; @@ -33,132 +29,138 @@ import org.apache.eagle.log.entity.meta.EntityDefinition; import org.apache.eagle.storage.DataStorageManager; import org.apache.eagle.storage.exception.IllegalDataStorageTypeException; import org.apache.eagle.storage.operation.CreateStatement; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; -import static org.apache.eagle.audit.common.AuditConstants.AUDIT_SERVICE_ENDPOINT; -import static org.apache.eagle.audit.common.AuditConstants.AUDIT_COLUMN_SERVICE_NAME; -import static org.apache.eagle.audit.common.AuditConstants.AUDIT_COLUMN_USER_ID; -import static org.apache.eagle.audit.common.AuditConstants.AUDIT_COLUMN_OPERATION; -import static org.apache.eagle.audit.common.AuditConstants.AUDIT_COLUMN_TIMESTAMP; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** - * Implementation of AuditListener class. + * Implementation of AuditListener class. * Used in HBaseStorage class for auditing HBase operations performed. */ public class HBaseStorageAudit implements AuditListener { - - private final static Logger LOG = LoggerFactory.getLogger(HBaseStorageAudit.class); - private AuditSupport auditSupport = new AuditSupport(this); - - public HBaseStorageAudit() { - auditSupport.addAuditListener(this); - } - - @Override - public void auditEvent(AuditEvent event) { - LOG.info("firing audit event: " + event.toString()); - persistAuditEntity(event.getAuditEntities()); - } - - /** - * Method to be invoked for firing audit event. - * @param operation: HBase operation. Values like CREATE/UPDATE/DELETE. - * @param entities: List of entities used in HBase operation. - * @param encodedRowKeys: List of encodededRowKeys returned from successful HBase operation. To be passed only from deletebyID method. - * @param entityDefinition: EntityDefinition object used in the HBaseOperation. - */ + + private static final Logger LOG = LoggerFactory.getLogger(HBaseStorageAudit.class); + private AuditSupport auditSupport = new AuditSupport(this); + + public HBaseStorageAudit() { + auditSupport.addAuditListener(this); + } + + @Override + public void auditEvent(AuditEvent event) { + LOG.info("firing audit event: " + event.toString()); + persistAuditEntity(event.getAuditEntities()); + } + + /** + * Method to be invoked for firing audit event. + * + * @param operation HBase operation. Values like CREATE/UPDATE/DELETE. + * @param entities List of entities used in HBase operation. + * @param encodedRowKeys List of encodededRowKeys returned from successful HBase operation. To be passed only from deletebyID method. + * @param entityDefinition EntityDefinition object used in the HBaseOperation. + */ public void auditOperation(String operation, List entities, List encodedRowKeys, EntityDefinition entityDefinition) { - if (isAuditingRequired(entityDefinition.getService())) { - List auditEntities = buildAuditEntities(operation, entities, encodedRowKeys, entityDefinition); - if (null != auditEntities && 0 != auditEntities.size()) - auditSupport.fireAudit(entityDefinition.getService(), auditEntities); - } + if (isAuditingRequired(entityDefinition.getService())) { + List auditEntities = buildAuditEntities(operation, entities, encodedRowKeys, entityDefinition); + if (null != auditEntities && 0 != auditEntities.size()) { + auditSupport.fireAudit(entityDefinition.getService(), auditEntities); + } + } } - + /** * Check if audit is required based on the service names and audit configuration. + * * @param serviceName: Name of the service call. * @return */ - private boolean isAuditingRequired (String serviceName) { - if (EagleConfigFactory.load().isServiceAuditingEnabled() - // As per jira EAGLE-47, HBase operation level audit is done only for Policy, Site and DataSource definitions. - && ("AlertDefinitionService".equals(serviceName) || "AlertDataSourceService".equals(serviceName))) { - return true; - } - - return false; + private boolean isAuditingRequired(String serviceName) { + if (EagleConfigFactory.load().isServiceAuditingEnabled() + // As per jira EAGLE-47, HBase operation level audit is done only for Policy, Site and DataSource definitions. + && ("AlertDefinitionService".equals(serviceName) || "AlertDataSourceService".equals(serviceName))) { + return true; + } + + return false; } - + /** * Build Audit entities based on the available infomration. - * @param operation: HBase operation performed. - * @param entities: List of entities used in HBase operation. - * @param encodedRowKeys: List of encodededRowKeys returned from successful HBase operation. To be passed only from deletebyID method. + * + * @param operation: HBase operation performed. + * @param entities: List of entities used in HBase operation. + * @param encodedRowKeys: List of encodededRowKeys returned from successful HBase operation. To be passed only from deletebyID method. * @param entityDefinition: EntityDefinition object used in the HBaseOperation. * @return */ private List buildAuditEntities(String operation, List entities, List encodedRowKeys, EntityDefinition entityDefinition) { - String serviceName = entityDefinition.getService(); - long timestamp = System.currentTimeMillis()/1000L; - - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - String userID = null != authentication.getName() ? authentication.getName() : "data not available"; // empty user - - List auditEntities = new ArrayList(); - GenericAuditEntity auditEntity = new GenericAuditEntity(); - - if (null != entities && 0 != entities.size()) { - Map auditTags; - for (TaggedLogAPIEntity entity : entities) { - auditTags = entity.getTags(); - auditTags.put(AUDIT_COLUMN_SERVICE_NAME, serviceName); - auditTags.put(AUDIT_COLUMN_USER_ID, userID); - auditTags.put(AUDIT_COLUMN_OPERATION, operation); - auditTags.put(AUDIT_COLUMN_TIMESTAMP, timestamp + ""); - - auditEntity = new GenericAuditEntity(); - auditEntity.setTags(auditTags); - auditEntities.add(auditEntity); - } - - return auditEntities; - } else if (null != encodedRowKeys && 0 != encodedRowKeys.size()) { // conditions yields true only in case of deleteByID - Map auditTags; - for (String encodedRowKey : encodedRowKeys) { - auditTags = new HashMap(); - auditTags.put("encodedRowKey", encodedRowKey); - auditTags.put(AUDIT_COLUMN_SERVICE_NAME, serviceName); - auditTags.put(AUDIT_COLUMN_USER_ID, userID); - auditTags.put(AUDIT_COLUMN_OPERATION, operation); - auditTags.put(AUDIT_COLUMN_TIMESTAMP, timestamp + ""); - - auditEntity = new GenericAuditEntity(); - auditEntity.setTags(auditTags); - auditEntities.add(auditEntity); - } - - return auditEntities; - } else { - return null; - } + String serviceName = entityDefinition.getService(); + long timestamp = System.currentTimeMillis() / 1000L; + + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + String userID = null != authentication.getName() ? authentication.getName() : "data not available"; // empty user + + List auditEntities = new ArrayList(); + GenericAuditEntity auditEntity = new GenericAuditEntity(); + + if (null != entities && 0 != entities.size()) { + Map auditTags; + for (TaggedLogAPIEntity entity : entities) { + auditTags = entity.getTags(); + auditTags.put(AUDIT_COLUMN_SERVICE_NAME, serviceName); + auditTags.put(AUDIT_COLUMN_USER_ID, userID); + auditTags.put(AUDIT_COLUMN_OPERATION, operation); + auditTags.put(AUDIT_COLUMN_TIMESTAMP, timestamp + ""); + + auditEntity = new GenericAuditEntity(); + auditEntity.setTags(auditTags); + auditEntities.add(auditEntity); + } + + return auditEntities; + } else if (null != encodedRowKeys && 0 != encodedRowKeys.size()) { // conditions yields true only in case of deleteByID + Map auditTags; + for (String encodedRowKey : encodedRowKeys) { + auditTags = new HashMap(); + auditTags.put("encodedRowKey", encodedRowKey); + auditTags.put(AUDIT_COLUMN_SERVICE_NAME, serviceName); + auditTags.put(AUDIT_COLUMN_USER_ID, userID); + auditTags.put(AUDIT_COLUMN_OPERATION, operation); + auditTags.put(AUDIT_COLUMN_TIMESTAMP, timestamp + ""); + + auditEntity = new GenericAuditEntity(); + auditEntity.setTags(auditTags); + auditEntities.add(auditEntity); + } + + return auditEntities; + } else { + return null; + } } /** * Persists audit entries into HBase. + * * @param entityList */ private void persistAuditEntity(List entityList) { - try { - if (null != entityList && 0 != entityList.size()) { - CreateStatement createStatement = new CreateStatement(entityList, AUDIT_SERVICE_ENDPOINT); - createStatement.execute(DataStorageManager.newDataStorage("hbase")); - } - } catch (IOException | IllegalDataStorageTypeException exception) { - LOG.error("exception in auditing storage event", exception.getMessage()); - } + try { + if (null != entityList && 0 != entityList.size()) { + CreateStatement createStatement = new CreateStatement(entityList, AUDIT_SERVICE_ENDPOINT); + createStatement.execute(DataStorageManager.newDataStorage("hbase")); + } + } catch (IOException | IllegalDataStorageTypeException exception) { + LOG.error("exception in auditing storage event", exception.getMessage()); + } } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/21187b55/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/query/GenericQueryBuilder.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/query/GenericQueryBuilder.java b/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/query/GenericQueryBuilder.java index 3dd83cf..961a762 100755 --- a/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/query/GenericQueryBuilder.java +++ b/eagle-core/eagle-query/eagle-storage-hbase/src/main/java/org/apache/eagle/storage/hbase/query/GenericQueryBuilder.java @@ -16,143 +16,149 @@ */ package org.apache.eagle.storage.hbase.query; -import java.util.List; +import org.apache.eagle.common.config.EagleConfigFactory; +import org.apache.eagle.log.entity.SearchCondition; import org.apache.eagle.query.GenericEntityQuery; import org.apache.eagle.query.GenericQuery; -import org.apache.eagle.storage.hbase.query.aggregate.GenericAggregateQuery; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import org.apache.eagle.log.entity.SearchCondition; import org.apache.eagle.query.aggregate.AggregateCondition; import org.apache.eagle.query.aggregate.AggregateFunctionType; import org.apache.eagle.query.aggregate.timeseries.SortOption; +import org.apache.eagle.storage.hbase.query.aggregate.GenericCoprocessorAggregateQuery; +import org.apache.eagle.storage.hbase.query.aggregate.GenericInMemoryAggregateQuery; -/** - * TODO: decouple into eagle-query-base module - * - * @since : 10/30/14,2014 - */ -public class GenericQueryBuilder{ - private Logger LOG = LoggerFactory.getLogger(GenericQueryBuilder.class); - - private List outputFields; - private String serviceName; - private String metricName; - private SearchCondition searchCondition; - @Deprecated - private int parallel; - private boolean hasAgg; - private List groupByFields; - private List aggregateFuncTypes; - private List aggregateFields; - @Deprecated - private boolean treeAgg=false; - private boolean timeSeries=false; - private long intervalmin; - private List sortOptions; - private int top; - private List sortFunctionTypes; - private List sortFields; - - public static GenericQueryBuilder select(List outputFields) { - GenericQueryBuilder builder = new GenericQueryBuilder(); - builder.output(outputFields); - return builder; - } - - public GenericQueryBuilder output(List outputFields) { - this.outputFields = outputFields; - return this; - } - public GenericQueryBuilder from(String serviceName, String metricName) { - this.serviceName = serviceName; - this.metricName = metricName; - return this; - } - - public GenericQueryBuilder where(SearchCondition condition) { - this.searchCondition = condition; - return this; - } - - /** - * TODO: Parameter "parallel" no longer supported, ignore - * - * @param parallel - * @return - */ - @Deprecated - public GenericQueryBuilder parallel(int parallel) { -// throw new IllegalArgumentException("Parameter \"parallel\" no longer supported"); - if(parallel > 0) LOG.warn("Parameter \"parallel\" is deprecated, ignore"); - return this; - } - - /** - * @param hasAgg - * @param groupByFields - * @param aggregateFunctionTypes - * @param aggregateFields - * @return - */ - public GenericQueryBuilder groupBy(boolean hasAgg, List groupByFields, List aggregateFunctionTypes, List aggregateFields) { - this.hasAgg = hasAgg; - this.groupByFields = groupByFields; - this.aggregateFuncTypes = aggregateFunctionTypes; - this.aggregateFields = aggregateFields; - return this; - } - - public GenericQueryBuilder timeSeries(boolean timeSeries, long intervalMin) { - this.timeSeries = timeSeries; - this.intervalmin = intervalMin; - return this; - } - - public GenericQueryBuilder orderBy(List sortOptions, List sortFunctionTypes, List sortFields) { - this.sortOptions = sortOptions; - this.sortFunctionTypes = sortFunctionTypes; - this.sortFields = sortFields; - return this; - } - - public GenericQueryBuilder top(int top) { - this.top = top; - return this; - } - - /** - * TODO: Parameter "treeAgg" no longer supported, ignore - * - * @param treeAgg - * @return - */ - @Deprecated - public GenericQueryBuilder treeAgg(boolean treeAgg){ - if(treeAgg) LOG.warn("Parameter \"treeAgg\" is deprecated, ignore"); - return this; - } - - public GenericQuery build() throws Exception { - if(hasAgg){ - if(LOG.isDebugEnabled()) LOG.debug("Build GroupAggregateQuery"); - AggregateCondition aggregateCondition = new AggregateCondition(); - aggregateCondition.setGroupbyFields(this.groupByFields); - aggregateCondition.setAggregateFunctionTypes(this.aggregateFuncTypes); - aggregateCondition.setAggregateFields(this.aggregateFields); - aggregateCondition.setTimeSeries(this.timeSeries); - aggregateCondition.setIntervalMS(this.intervalmin * 60 * 1000); - return new GenericAggregateQuery(this.serviceName, - this.searchCondition, - aggregateCondition, - this.metricName, - this.sortOptions,this.sortFunctionTypes,this.sortFields, - this.top); - } else { - if(LOG.isDebugEnabled()) LOG.debug("Build GenericBatchQuery"); - return new GenericEntityQuery(this.serviceName,this.searchCondition,this.metricName); - } - } +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +public class GenericQueryBuilder { + private static final Logger LOG = LoggerFactory.getLogger(GenericQueryBuilder.class); + + private List outputFields; + private String serviceName; + private String metricName; + private SearchCondition searchCondition; + @Deprecated + private int parallel; + private boolean hasAgg; + private List groupByFields; + private List aggregateFuncTypes; + private List aggregateFields; + @Deprecated + private boolean treeAgg = false; + private boolean timeSeries = false; + private long intervalmin; + private List sortOptions; + private int top; + private List sortFunctionTypes; + private List sortFields; + + public static GenericQueryBuilder select(List outputFields) { + GenericQueryBuilder builder = new GenericQueryBuilder(); + builder.output(outputFields); + return builder; + } + + public GenericQueryBuilder output(List outputFields) { + this.outputFields = outputFields; + return this; + } + + public GenericQueryBuilder from(String serviceName, String metricName) { + this.serviceName = serviceName; + this.metricName = metricName; + return this; + } + + public GenericQueryBuilder where(SearchCondition condition) { + this.searchCondition = condition; + return this; + } + + /** + * @deprecated Parameter "parallel" no longer supported, ignore. + */ + @Deprecated + public GenericQueryBuilder parallel(int parallel) { + if (parallel > 0) { + LOG.warn("Parameter \"parallel\" is deprecated, ignore"); + } + return this; + } + + public GenericQueryBuilder groupBy(boolean hasAgg, List groupByFields, List aggregateFunctionTypes, List aggregateFields) { + this.hasAgg = hasAgg; + this.groupByFields = groupByFields; + this.aggregateFuncTypes = aggregateFunctionTypes; + this.aggregateFields = aggregateFields; + return this; + } + + public GenericQueryBuilder timeSeries(boolean timeSeries, long intervalMin) { + this.timeSeries = timeSeries; + this.intervalmin = intervalMin; + return this; + } + + public GenericQueryBuilder orderBy(List sortOptions, List sortFunctionTypes, List sortFields) { + this.sortOptions = sortOptions; + this.sortFunctionTypes = sortFunctionTypes; + this.sortFields = sortFields; + return this; + } + + public GenericQueryBuilder top(int top) { + this.top = top; + return this; + } + + /** + * @deprecated Parameter "treeAgg" no longer supported, ignore. + */ + @Deprecated + public GenericQueryBuilder treeAgg(boolean treeAgg) { + if (treeAgg) { + LOG.warn("Parameter \"treeAgg\" is deprecated, ignore"); + } + return this; + } + + public GenericQuery build() throws Exception { + if (hasAgg) { + if (LOG.isDebugEnabled()) { + LOG.debug("Build GroupAggregateQuery"); + } + AggregateCondition aggregateCondition = new AggregateCondition(); + aggregateCondition.setGroupbyFields(this.groupByFields); + aggregateCondition.setAggregateFunctionTypes(this.aggregateFuncTypes); + aggregateCondition.setAggregateFields(this.aggregateFields); + aggregateCondition.setTimeSeries(this.timeSeries); + aggregateCondition.setIntervalMS(this.intervalmin * 60 * 1000); + if (EagleConfigFactory.load().isCoprocessorEnabled()) { + return new GenericCoprocessorAggregateQuery(this.serviceName, + this.searchCondition, + aggregateCondition, + this.metricName, + this.sortOptions, + this.sortFunctionTypes, + this.sortFields, + this.top); + } else { + return new GenericInMemoryAggregateQuery(this.serviceName, + this.searchCondition, + aggregateCondition, + this.metricName, + this.sortOptions, + this.sortFunctionTypes, + this.sortFields, + this.top); + } + } else { + if (LOG.isDebugEnabled()) { + LOG.debug("Build GenericBatchQuery"); + } + return new GenericEntityQuery(this.serviceName, this.searchCondition, this.metricName); + } + } }