http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/HBaseLogReader.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/HBaseLogReader.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/HBaseLogReader.java index c75b94f..b8cbd20 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/HBaseLogReader.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/HBaseLogReader.java @@ -45,203 +45,207 @@ import org.apache.eagle.common.ByteUtil; import org.apache.eagle.common.EagleBase64Wrapper; public class HBaseLogReader implements LogReader { - private static Logger LOG = LoggerFactory.getLogger(HBaseLogReader.class); - - protected byte[][] qualifiers; - private HTableInterface tbl; - private byte[] startKey; - private byte[] stopKey; - protected Map<String, List<String>> searchTags; - - private ResultScanner rs; - private boolean isOpen = false; - - private Schema schema; - - public HBaseLogReader(Schema schema, Date startTime, Date endTime, - Map<String, List<String>> searchTags, String lastScanKey, - byte[][] outputQualifier){ - this.schema = schema; - this.qualifiers = outputQualifier; - this.startKey = buildRowKey(schema.getPrefix(), startTime); - if (lastScanKey == null) { - this.stopKey = buildRowKey(schema.getPrefix(), endTime); - } else { - // build stop key - this.stopKey = EagleBase64Wrapper.decode(lastScanKey); - // concat byte 0 to exclude this stopKey - this.stopKey = ByteUtil.concat(this.stopKey, new byte[] { 0 }); - } - this.searchTags = searchTags; - } - - /** - * TODO If the required field is null for a row, then this row will not be fetched. That could be a problem for counting - * Need another version of read to strictly get the number of rows which will return all the columns for a column family - */ - public void open() throws IOException { - if (isOpen) - return; // silently return - try { - tbl = EagleConfigFactory.load().getHTable(schema.getTable()); - } catch (RuntimeException ex) { - throw new IOException(ex); - } - - String rowkeyRegex = buildRegex2(searchTags); - RegexStringComparator regexStringComparator = new RegexStringComparator( - rowkeyRegex); - regexStringComparator.setCharset(Charset.forName("ISO-8859-1")); - RowFilter filter = new RowFilter(CompareOp.EQUAL, regexStringComparator); - FilterList filterList = new FilterList(); - filterList.addFilter(filter); - Scan s1 = new Scan(); - // reverse timestamp, startRow is stopKey, and stopRow is startKey - s1.setStartRow(stopKey); - s1.setStopRow(startKey); - s1.setFilter(filterList); - // TODO the # of cached rows should be minimum of (pagesize and 100) - s1.setCaching(100); - // TODO not optimized for all applications - s1.setCacheBlocks(true); - // scan specified columnfamily and qualifiers - for(byte[] qualifier : qualifiers){ - s1.addColumn(schema.getColumnFamily().getBytes(), qualifier); - } - rs = tbl.getScanner(s1); - isOpen = true; - } - - public void close() throws IOException { - if(tbl != null){ - new HTableFactory().releaseHTableInterface(tbl); - } - if(rs != null){ - rs.close(); - } - } - - public void flush() throws IOException { - tbl.flushCommits(); - } - - private byte[] buildRowKey(String appName, Date t){ - byte[] key = new byte[4 + 8]; - byte[] b = ByteUtil.intToBytes(appName.hashCode()); - System.arraycopy(b, 0, key, 0, 4); - // reverse timestamp - long ts = Long.MAX_VALUE - t.getTime(); - System.arraycopy(ByteUtil.longToBytes(ts), 0, key, 4, 8); - return key; - } - - /** - * one search tag may have multiple values which have OR relationship, and relationship between - * different search tags is AND - * the query is like "(TAG1=value11 OR TAG1=value12) AND TAG2=value2" - * @param tags - * @return - */ - protected String buildRegex2(Map<String, List<String>> tags){ - // TODO need consider that \E could be part of tag, refer to https://github.com/OpenTSDB/opentsdb/blob/master/src/core/TsdbQuery.java - SortedMap<Integer, List<Integer>> tagHash = new TreeMap<Integer, List<Integer>>(); - - for(Map.Entry<String, List<String>> entry : tags.entrySet()){ - String tagName = entry.getKey(); - List<String> stringValues = entry.getValue(); - List<Integer> hashValues = new ArrayList<Integer>(1); - for(String value : stringValues){ - hashValues.add(value.hashCode()); - } - tagHash.put(tagName.hashCode(), hashValues); - } - // <tag1:3><value1:3> ... <tagn:3><valuen:3> - StringBuilder sb = new StringBuilder(); - sb.append("(?s)"); - sb.append("^(?:.{12})"); - sb.append("(?:.{").append(8).append("})*"); // for any number of tags - for (Map.Entry<Integer, List<Integer>> entry : tagHash.entrySet()) { - try { - sb.append("\\Q"); - sb.append(new String(ByteUtil.intToBytes(entry.getKey()), "ISO-8859-1")).append("\\E"); - List<Integer> hashValues = entry.getValue(); - sb.append("(?:"); - boolean first = true; - for(Integer value : hashValues){ - if(!first){ - sb.append('|'); - } - sb.append("\\Q"); - sb.append(new String(ByteUtil.intToBytes(value), "ISO-8859-1")); - sb.append("\\E"); - first = false; - } - sb.append(")"); - sb.append("(?:.{").append(8).append("})*"); // for any number of tags - } catch (Exception ex) { - LOG.error("Constructing regex error", ex); - } - } - sb.append("$"); - if (LOG.isDebugEnabled()) { - LOG.debug("Pattern is " + sb.toString()); - } - return sb.toString(); - } - - public InternalLog read() throws IOException { - if (rs == null) - throw new IllegalArgumentException( - "ResultScanner must be initialized before reading"); - - InternalLog t = null; - - Result r = rs.next(); - if (r != null) { - byte[] row = r.getRow(); - // skip the first 4 bytes : prefix - long timestamp = ByteUtil.bytesToLong(row, 4); - // reverse timestamp - timestamp = Long.MAX_VALUE - timestamp; - int count = 0; - if(qualifiers != null){ - count = qualifiers.length; - } - byte[][] values = new byte[count][]; - Map<String, byte[]> allQualifierValues = new HashMap<String, byte[]>(); - for (int i = 0; i < count; i++) { - // TODO if returned value is null, it means no this column for this row, so why set null to the object? - values[i] = r.getValue(schema.getColumnFamily().getBytes(), qualifiers[i]); - allQualifierValues.put(new String(qualifiers[i]), values[i]); - } - t = buildObject(row, timestamp, allQualifierValues); - } - - return t; - } - - public InternalLog buildObject(byte[] row, long timestamp, - Map<String, byte[]> allQualifierValues) { - InternalLog alertDetail = new InternalLog(); - String myRow = EagleBase64Wrapper.encodeByteArray2URLSafeString(row); - alertDetail.setEncodedRowkey(myRow); - alertDetail.setPrefix(schema.getPrefix()); - alertDetail.setSearchTags(searchTags); - alertDetail.setTimestamp(timestamp); - - Map<String, byte[]> logQualifierValues = new HashMap<String, byte[]>(); - Map<String, String> logTags = new HashMap<String, String>(); - for (Map.Entry<String, byte[]> entry : allQualifierValues.entrySet()) { - if (schema.isTag(entry.getKey())) { - if (entry.getValue() != null) { - logTags.put(entry.getKey(), new String(entry.getValue())); - } - } else { - logQualifierValues.put(entry.getKey(),entry.getValue()); - } - } - alertDetail.setQualifierValues(logQualifierValues); - alertDetail.setTags(logTags); - return alertDetail; - } + private static Logger LOG = LoggerFactory.getLogger(HBaseLogReader.class); + + protected byte[][] qualifiers; + private HTableInterface tbl; + private byte[] startKey; + private byte[] stopKey; + protected Map<String, List<String>> searchTags; + + private ResultScanner rs; + private boolean isOpen = false; + + private Schema schema; + + public HBaseLogReader(Schema schema, Date startTime, Date endTime, Map<String, List<String>> searchTags, + String lastScanKey, byte[][] outputQualifier) { + this.schema = schema; + this.qualifiers = outputQualifier; + this.startKey = buildRowKey(schema.getPrefix(), startTime); + if (lastScanKey == null) { + this.stopKey = buildRowKey(schema.getPrefix(), endTime); + } else { + // build stop key + this.stopKey = EagleBase64Wrapper.decode(lastScanKey); + // concat byte 0 to exclude this stopKey + this.stopKey = ByteUtil.concat(this.stopKey, new byte[] { 0 }); + } + this.searchTags = searchTags; + } + + /** + * TODO If the required field is null for a row, then this row will not be fetched. That could be a + * problem for counting Need another version of read to strictly get the number of rows which will return + * all the columns for a column family + */ + @Override + public void open() throws IOException { + if (isOpen) { + return; // silently return + } + try { + tbl = EagleConfigFactory.load().getHTable(schema.getTable()); + } catch (RuntimeException ex) { + throw new IOException(ex); + } + + String rowkeyRegex = buildRegex2(searchTags); + RegexStringComparator regexStringComparator = new RegexStringComparator(rowkeyRegex); + regexStringComparator.setCharset(Charset.forName("ISO-8859-1")); + RowFilter filter = new RowFilter(CompareOp.EQUAL, regexStringComparator); + FilterList filterList = new FilterList(); + filterList.addFilter(filter); + Scan s1 = new Scan(); + // reverse timestamp, startRow is stopKey, and stopRow is startKey + s1.setStartRow(stopKey); + s1.setStopRow(startKey); + s1.setFilter(filterList); + // TODO the # of cached rows should be minimum of (pagesize and 100) + s1.setCaching(100); + // TODO not optimized for all applications + s1.setCacheBlocks(true); + // scan specified columnfamily and qualifiers + for (byte[] qualifier : qualifiers) { + s1.addColumn(schema.getColumnFamily().getBytes(), qualifier); + } + rs = tbl.getScanner(s1); + isOpen = true; + } + + @Override + public void close() throws IOException { + if (tbl != null) { + new HTableFactory().releaseHTableInterface(tbl); + } + if (rs != null) { + rs.close(); + } + } + + public void flush() throws IOException { + tbl.flushCommits(); + } + + private byte[] buildRowKey(String appName, Date t) { + byte[] key = new byte[4 + 8]; + byte[] b = ByteUtil.intToBytes(appName.hashCode()); + System.arraycopy(b, 0, key, 0, 4); + // reverse timestamp + long ts = Long.MAX_VALUE - t.getTime(); + System.arraycopy(ByteUtil.longToBytes(ts), 0, key, 4, 8); + return key; + } + + /** + * one search tag may have multiple values which have OR relationship, and relationship between different + * search tags is AND the query is like "(TAG1=value11 OR TAG1=value12) AND TAG2=value2". + * + * @param tags + * @return + */ + protected String buildRegex2(Map<String, List<String>> tags) { + // TODO need consider that \E could be part of tag, refer to + // https://github.com/OpenTSDB/opentsdb/blob/master/src/core/TsdbQuery.java + SortedMap<Integer, List<Integer>> tagHash = new TreeMap<Integer, List<Integer>>(); + + for (Map.Entry<String, List<String>> entry : tags.entrySet()) { + String tagName = entry.getKey(); + List<String> stringValues = entry.getValue(); + List<Integer> hashValues = new ArrayList<Integer>(1); + for (String value : stringValues) { + hashValues.add(value.hashCode()); + } + tagHash.put(tagName.hashCode(), hashValues); + } + // <tag1:3><value1:3> ... <tagn:3><valuen:3> + StringBuilder sb = new StringBuilder(); + sb.append("(?s)"); + sb.append("^(?:.{12})"); + sb.append("(?:.{").append(8).append("})*"); // for any number of tags + for (Map.Entry<Integer, List<Integer>> entry : tagHash.entrySet()) { + try { + sb.append("\\Q"); + sb.append(new String(ByteUtil.intToBytes(entry.getKey()), "ISO-8859-1")).append("\\E"); + List<Integer> hashValues = entry.getValue(); + sb.append("(?:"); + boolean first = true; + for (Integer value : hashValues) { + if (!first) { + sb.append('|'); + } + sb.append("\\Q"); + sb.append(new String(ByteUtil.intToBytes(value), "ISO-8859-1")); + sb.append("\\E"); + first = false; + } + sb.append(")"); + sb.append("(?:.{").append(8).append("})*"); // for any number of tags + } catch (Exception ex) { + LOG.error("Constructing regex error", ex); + } + } + sb.append("$"); + if (LOG.isDebugEnabled()) { + LOG.debug("Pattern is " + sb.toString()); + } + return sb.toString(); + } + + @Override + public InternalLog read() throws IOException { + if (rs == null) { + throw new IllegalArgumentException("ResultScanner must be initialized before reading"); + } + + InternalLog t = null; + + Result r = rs.next(); + if (r != null) { + byte[] row = r.getRow(); + // skip the first 4 bytes : prefix + long timestamp = ByteUtil.bytesToLong(row, 4); + // reverse timestamp + timestamp = Long.MAX_VALUE - timestamp; + int count = 0; + if (qualifiers != null) { + count = qualifiers.length; + } + byte[][] values = new byte[count][]; + Map<String, byte[]> allQualifierValues = new HashMap<String, byte[]>(); + for (int i = 0; i < count; i++) { + // TODO if returned value is null, it means no this column for this row, so why set null to + // the object? + values[i] = r.getValue(schema.getColumnFamily().getBytes(), qualifiers[i]); + allQualifierValues.put(new String(qualifiers[i]), values[i]); + } + t = buildObject(row, timestamp, allQualifierValues); + } + + return t; + } + + public InternalLog buildObject(byte[] row, long timestamp, Map<String, byte[]> allQualifierValues) { + InternalLog alertDetail = new InternalLog(); + String myRow = EagleBase64Wrapper.encodeByteArray2URLSafeString(row); + alertDetail.setEncodedRowkey(myRow); + alertDetail.setPrefix(schema.getPrefix()); + alertDetail.setSearchTags(searchTags); + alertDetail.setTimestamp(timestamp); + + Map<String, byte[]> logQualifierValues = new HashMap<String, byte[]>(); + Map<String, String> logTags = new HashMap<String, String>(); + for (Map.Entry<String, byte[]> entry : allQualifierValues.entrySet()) { + if (schema.isTag(entry.getKey())) { + if (entry.getValue() != null) { + logTags.put(entry.getKey(), new String(entry.getValue())); + } + } else { + logQualifierValues.put(entry.getKey(), entry.getValue()); + } + } + alertDetail.setQualifierValues(logQualifierValues); + alertDetail.setTags(logTags); + return alertDetail; + } }
http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/LogDeleter.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/LogDeleter.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/LogDeleter.java index c5087e7..022dfc0 100644 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/LogDeleter.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/LogDeleter.java @@ -21,14 +21,15 @@ import java.io.IOException; import org.apache.eagle.log.entity.InternalLog; -public interface LogDeleter extends Closeable{ - public void flush() throws IOException; +public interface LogDeleter extends Closeable { + public void flush() throws IOException; - public void open() throws IOException; + public void open() throws IOException; - public void close() throws IOException; + @Override + public void close() throws IOException; - public void delete(InternalLog log) throws IOException; - - public void deleteRowByRowkey(String encodedRowkey) throws IOException; + public void delete(InternalLog log) throws IOException; + + public void deleteRowByRowkey(String encodedRowkey) throws IOException; } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/RowkeyHelper.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/RowkeyHelper.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/RowkeyHelper.java index f2bdd15..9d08cc1 100644 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/RowkeyHelper.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/RowkeyHelper.java @@ -28,58 +28,59 @@ import org.apache.eagle.common.EagleBase64Wrapper; public final class RowkeyHelper { - public static byte[] getRowkey(TaggedLogAPIEntity entity, EntityDefinition entityDef) throws Exception { - byte[] rowkey = null; - if(entity.getEncodedRowkey() != null && !(entity.getEncodedRowkey().isEmpty())){ - rowkey = EagleBase64Wrapper.decode(entity.getEncodedRowkey()); - }else{ - InternalLog log = HBaseInternalLogHelper.convertToInternalLog(entity, entityDef); - rowkey = RowkeyBuilder.buildRowkey(log); - } - return rowkey; - } + public static byte[] getRowkey(TaggedLogAPIEntity entity, EntityDefinition entityDef) throws Exception { + byte[] rowkey = null; + if (entity.getEncodedRowkey() != null && !(entity.getEncodedRowkey().isEmpty())) { + rowkey = EagleBase64Wrapper.decode(entity.getEncodedRowkey()); + } else { + InternalLog log = HBaseInternalLogHelper.convertToInternalLog(entity, entityDef); + rowkey = RowkeyBuilder.buildRowkey(log); + } + return rowkey; + } - public static List<byte[]> getRowkeysByEntities(List<? extends TaggedLogAPIEntity> entities, EntityDefinition entityDef) throws Exception { - final List<byte[]> result = new ArrayList<byte[]>(entities.size()); - for (TaggedLogAPIEntity entity : entities) { - final byte[] rowkey = getRowkey(entity, entityDef); - result.add(rowkey); - } - return result; - } - + public static byte[] getRowkey(InternalLog log) { + byte[] rowkey = null; + if (log.getEncodedRowkey() != null && !(log.getEncodedRowkey().isEmpty())) { + rowkey = EagleBase64Wrapper.decode(log.getEncodedRowkey()); + } else { + rowkey = RowkeyBuilder.buildRowkey(log); + } + return rowkey; + } - public static byte[] getRowkey(InternalLog log) { - byte[] rowkey = null; - if(log.getEncodedRowkey() != null && !(log.getEncodedRowkey().isEmpty())){ - rowkey = EagleBase64Wrapper.decode(log.getEncodedRowkey()); - }else{ - rowkey = RowkeyBuilder.buildRowkey(log); - } - return rowkey; - } + public static byte[] getRowkey(String encodedRowkey) { + byte[] rowkey = EagleBase64Wrapper.decode(encodedRowkey); + return rowkey; + } - public static List<byte[]> getRowkeysByLogs(List<InternalLog> logs) { - final List<byte[]> result = new ArrayList<byte[]>(logs.size()); - for (InternalLog log : logs) { - final byte[] rowkey = getRowkey(log); - result.add(rowkey); - } - return result; - } + public static List<byte[]> getRowkeysByEntities(List<? extends TaggedLogAPIEntity> entities, + EntityDefinition entityDef) + throws Exception { + final List<byte[]> result = new ArrayList<byte[]>(entities.size()); + for (TaggedLogAPIEntity entity : entities) { + final byte[] rowkey = getRowkey(entity, entityDef); + result.add(rowkey); + } + return result; + } - public static byte[] getRowkey(String encodedRowkey) { - byte[] rowkey = EagleBase64Wrapper.decode(encodedRowkey); - return rowkey; - } + public static List<byte[]> getRowkeysByLogs(List<InternalLog> logs) { + final List<byte[]> result = new ArrayList<byte[]>(logs.size()); + for (InternalLog log : logs) { + final byte[] rowkey = getRowkey(log); + result.add(rowkey); + } + return result; + } - public static List<byte[]> getRowkeysByEncodedRowkeys(List<String> encodedRowkeys) { - final List<byte[]> result = new ArrayList<byte[]>(encodedRowkeys.size()); - for (String encodedRowkey : encodedRowkeys) { - byte[] rowkey = EagleBase64Wrapper.decode(encodedRowkey); - result.add(rowkey); - } - return result; - } + public static List<byte[]> getRowkeysByEncodedRowkeys(List<String> encodedRowkeys) { + final List<byte[]> result = new ArrayList<byte[]>(encodedRowkeys.size()); + for (String encodedRowkey : encodedRowkeys) { + byte[] rowkey = EagleBase64Wrapper.decode(encodedRowkey); + result.add(rowkey); + } + return result; + } } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/Schema.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/Schema.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/Schema.java index 55556bd..2ab0773 100644 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/Schema.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/old/Schema.java @@ -17,8 +17,11 @@ package org.apache.eagle.log.entity.old; public interface Schema { - public boolean isTag(String qualifier); - public String getTable(); - public String getColumnFamily(); - public String getPrefix(); + public boolean isTag(String qualifier); + + public String getTable(); + + public String getColumnFamily(); + + public String getPrefix(); } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/repo/DefaultEntityRepository.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/repo/DefaultEntityRepository.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/repo/DefaultEntityRepository.java index 1d0d398..26ec328 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/repo/DefaultEntityRepository.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/repo/DefaultEntityRepository.java @@ -22,13 +22,11 @@ import org.apache.eagle.log.entity.test.TestTimeSeriesAPIEntity; /** * Default Eagle framework entity repository class. - * - * */ public class DefaultEntityRepository extends EntityRepository { - public DefaultEntityRepository() { - entitySet.add(MetricMetadataEntity.class); - entitySet.add(TestLogAPIEntity.class); - entitySet.add(TestTimeSeriesAPIEntity.class); - } + public DefaultEntityRepository() { + entitySet.add(MetricMetadataEntity.class); + entitySet.add(TestLogAPIEntity.class); + entitySet.add(TestTimeSeriesAPIEntity.class); + } } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/repo/EntityRepository.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/repo/EntityRepository.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/repo/EntityRepository.java index 0c24d30..ab50742 100644 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/repo/EntityRepository.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/repo/EntityRepository.java @@ -27,30 +27,29 @@ import org.apache.eagle.log.base.taggedlog.TaggedLogAPIEntity; import org.apache.eagle.log.entity.meta.EntitySerDeser; /** - * Entity repository is used to store entity definition class. Each domain should define its own entities. Eagle entity - * framework will scan all derived class implementations to get all entity definitions, then register them to EntityDefinitionManager. - * - * + * Entity repository is used to store entity definition class. Each domain should define its own entities. + * Eagle entity framework will scan all derived class implementations to get all entity definitions, then + * register them to EntityDefinitionManager. */ public abstract class EntityRepository { - protected Set<Class<? extends TaggedLogAPIEntity>> entitySet = new HashSet<Class<? extends TaggedLogAPIEntity>>(); - protected Map<Class<?>, EntitySerDeser<?>> serDeserMap = new HashMap<Class<?>, EntitySerDeser<?>>(); - - public synchronized Collection<Class<? extends TaggedLogAPIEntity>> getEntitySet() { - return new ArrayList<Class<? extends TaggedLogAPIEntity>>(entitySet); - } - - public synchronized Map<Class<?>, EntitySerDeser<?>> getSerDeserMap() { - return new HashMap<Class<?>, EntitySerDeser<?>>(serDeserMap); - } - - public synchronized void registerEntity(Class<? extends TaggedLogAPIEntity> clazz) { - entitySet.add(clazz); - } - - public synchronized void registerSerDeser(Class<?> clazz, EntitySerDeser<?> serDeser) { - serDeserMap.put(clazz, serDeser); - } - + protected Set<Class<? extends TaggedLogAPIEntity>> entitySet = new HashSet<Class<? extends TaggedLogAPIEntity>>(); + protected Map<Class<?>, EntitySerDeser<?>> serDeserMap = new HashMap<Class<?>, EntitySerDeser<?>>(); + + public synchronized Collection<Class<? extends TaggedLogAPIEntity>> getEntitySet() { + return new ArrayList<Class<? extends TaggedLogAPIEntity>>(entitySet); + } + + public synchronized Map<Class<?>, EntitySerDeser<?>> getSerDeserMap() { + return new HashMap<Class<?>, EntitySerDeser<?>>(serDeserMap); + } + + public synchronized void registerEntity(Class<? extends TaggedLogAPIEntity> clazz) { + entitySet.add(clazz); + } + + public synchronized void registerSerDeser(Class<?> clazz, EntitySerDeser<?> serDeser) { + serDeserMap.put(clazz, serDeser); + } + } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/repo/EntityRepositoryScanner.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/repo/EntityRepositoryScanner.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/repo/EntityRepositoryScanner.java index 8ccee87..5c2a107 100644 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/repo/EntityRepositoryScanner.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/repo/EntityRepositoryScanner.java @@ -31,26 +31,28 @@ public final class EntityRepositoryScanner { private static final Logger LOG = LoggerFactory.getLogger(EntityRepositoryScanner.class); - // public static void scan() throws InstantiationException, IllegalAccessException { - // // TODO currently extcos 0.3b doesn't support to search packages like "com.*.eagle.*", "org.*.eagle.*". However 0.4b depends on asm-all version 4.0, which is - // // conflicted with jersey server 1.8. We should fix it later - // LOG.info("Scanning all entity repositories with pattern \"org.apache.eagle.*\""); - // final ComponentScanner scanner = new ComponentScanner(); - // final Set<Class<?>> classes = scanner.getClasses(new EntityRepoScanQuery() ); - // for (Class<?> entityClass : classes) { - // LOG.info("Processing entity repository: " + entityClass.getName()); - // if (EntityRepository.class.isAssignableFrom(entityClass)) { - // EntityRepository repo = (EntityRepository)entityClass.newInstance(); - // addRepo(repo); - // } - // } - // } + // public static void scan() throws InstantiationException, IllegalAccessException { + // // TODO currently extcos 0.3b doesn't support to search packages like "com.*.eagle.*", "org.*.eagle.*". + // However 0.4b depends on asm-all version 4.0, which is + // // conflicted with jersey server 1.8. We should fix it later + // LOG.info("Scanning all entity repositories with pattern \"org.apache.eagle.*\""); + // final ComponentScanner scanner = new ComponentScanner(); + // final Set<Class<?>> classes = scanner.getClasses(new EntityRepoScanQuery() ); + // for (Class<?> entityClass : classes) { + // LOG.info("Processing entity repository: " + entityClass.getName()); + // if (EntityRepository.class.isAssignableFrom(entityClass)) { + // EntityRepository repo = (EntityRepository)entityClass.newInstance(); + // addRepo(repo); + // } + // } + // } public static void scan() throws IllegalAccessException, InstantiationException { LOG.info("Scanning all entity repositories"); StopWatch stopWatch = new StopWatch(); stopWatch.start(); - for (Class<? extends EntityRepository> entityRepoClass : ReflectionsHelper.getInstance().getSubTypesOf(EntityRepository.class)) { + for (Class<? extends EntityRepository> entityRepoClass : ReflectionsHelper.getInstance() + .getSubTypesOf(EntityRepository.class)) { if (EntityRepository.class.isAssignableFrom(entityRepoClass)) { EntityRepository repo = entityRepoClass.newInstance(); addRepo(repo); @@ -71,12 +73,12 @@ public final class EntityRepositoryScanner { } } - // public static class EntityRepoScanQuery extends ComponentQuery { + // public static class EntityRepoScanQuery extends ComponentQuery { // - // @Override - // protected void query() { - // select().from("org.apache.eagle").returning( - // allExtending(EntityRepository.class)); - // } - // } -} \ No newline at end of file + // @Override + // protected void query() { + // select().from("org.apache.eagle").returning( + // allExtending(EntityRepository.class)); + // } + // } +} http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/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 7aeffa8..f606a2a 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 @@ -26,82 +26,81 @@ import org.apache.eagle.log.entity.meta.Prefix; import org.apache.eagle.log.entity.meta.Table; /** - * this class is written by customer, but it has some contracts - * 0. This class should conform to java bean conventions - * 1. Annotate this class with hbase table name - * 2. Annotate this class with hbase column family name - * 3. Annotate those qualifier fields with column name - * 4. Fire property change event for all fields' setter method, where field name is mandatory parameter + * this class is written by customer, but it has some contracts 0. This class should conform to java bean + * conventions 1. Annotate this class with hbase table name 2. Annotate this class with hbase column family + * name 3. Annotate those qualifier fields with column name 4. Fire property change event for all fields' + * setter method, where field name is mandatory parameter */ -@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) +@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @Table("alertdetail") @ColumnFamily("f") @Prefix("hadoop") @TimeSeries(true) public class TestEntity extends TaggedLogAPIEntity { - @Column("remediationID") - private String remediationID; - @Column("remediationStatus") - private String remediationStatus; - @Column("c") - private long count; - @Column("d") - private int numHosts; - @Column("e") - private Long numClusters; + @Column("remediationID") + private String remediationID; + @Column("remediationStatus") + private String remediationStatus; + @Column("c") + private long count; + @Column("d") + private int numHosts; + @Column("e") + private Long numClusters; - public Long getNumClusters() { - return numClusters; - } + public Long getNumClusters() { + return numClusters; + } - public void setNumClusters(Long numClusters) { - this.numClusters = numClusters; - pcs.firePropertyChange("numClusters", null, null); - } + public void setNumClusters(Long numClusters) { + this.numClusters = numClusters; + pcs.firePropertyChange("numClusters", null, null); + } - public int getNumHosts() { - return numHosts; - } + public int getNumHosts() { + return numHosts; + } - public void setNumHosts(int numHosts) { - this.numHosts = numHosts; - pcs.firePropertyChange("numHosts", null, null); - } + public void setNumHosts(int numHosts) { + this.numHosts = numHosts; + pcs.firePropertyChange("numHosts", null, null); + } - public long getCount() { - return count; - } + public long getCount() { + return count; + } - public void setCount(long count) { - this.count = count; - pcs.firePropertyChange("count", null, null); - } + public void setCount(long count) { + this.count = count; + pcs.firePropertyChange("count", null, null); + } - public String getRemediationID() { - return remediationID; - } + public String getRemediationID() { + return remediationID; + } - public void setRemediationID(String remediationID) { - this.remediationID = remediationID; - pcs.firePropertyChange("remediationID", null, null); - } + public void setRemediationID(String remediationID) { + this.remediationID = remediationID; + pcs.firePropertyChange("remediationID", null, null); + } - public String getRemediationStatus() { - return remediationStatus; - } + public String getRemediationStatus() { + return remediationStatus; + } - public void setRemediationStatus(String remediationStatus) { - this.remediationStatus = remediationStatus; - pcs.firePropertyChange("remediationStatus", null, null); - } - - public String toString(){ - StringBuffer sb = new StringBuffer(); - sb.append(super.toString()); - sb.append(", remediationID:"); - sb.append(remediationID); - sb.append(", remediationStatus:"); - sb.append(remediationStatus); - return sb.toString(); - } -} \ No newline at end of file + public void setRemediationStatus(String remediationStatus) { + this.remediationStatus = remediationStatus; + pcs.firePropertyChange("remediationStatus", null, null); + } + + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + sb.append(super.toString()); + sb.append(", remediationID:"); + sb.append(remediationID); + sb.append(", remediationStatus:"); + sb.append(remediationStatus); + return sb.toString(); + } +} http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/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 99d6620..5d213b1 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 @@ -20,80 +20,96 @@ import org.apache.eagle.log.base.taggedlog.TaggedLogAPIEntity; import org.apache.eagle.log.entity.meta.*; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) +@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @Table("unittest") @ColumnFamily("f") @Prefix("entityut") @Service("TestLogAPIEntity") @TimeSeries(false) @Indexes({ - @Index(name="jobIdIndex1", columns = { "jobID" }, unique = true), - @Index(name="jobIdNonIndex2", columns = { "hostname" }, unique = false) - }) + @Index(name = "jobIdIndex1", columns = { + "jobID" + }, unique = true), @Index(name = "jobIdNonIndex2", columns = { + "hostname" + }, unique = false) + }) public class TestLogAPIEntity extends TaggedLogAPIEntity { - @Column("a") - private int field1; - @Column("b") - private Integer field2; - @Column("c") - private long field3; - @Column("d") - private Long field4; - @Column("e") - private double field5; - @Column("f") - private Double field6; - @Column("g") - private String field7; - - public int getField1() { - return field1; - } - public void setField1(int field1) { - this.field1 = field1; - pcs.firePropertyChange("field1", null, null); - } - public Integer getField2() { - return field2; - } - public void setField2(Integer field2) { - this.field2 = field2; - pcs.firePropertyChange("field2", null, null); - } - public long getField3() { - return field3; - } - public void setField3(long field3) { - this.field3 = field3; - pcs.firePropertyChange("field3", null, null); - } - public Long getField4() { - return field4; - } - public void setField4(Long field4) { - this.field4 = field4; - pcs.firePropertyChange("field4", null, null); - } - public double getField5() { - return field5; - } - public void setField5(double field5) { - this.field5 = field5; - pcs.firePropertyChange("field5", null, null); - } - public Double getField6() { - return field6; - } - public void setField6(Double field6) { - this.field6 = field6; - pcs.firePropertyChange("field6", null, null); - } - public String getField7() { - return field7; - } - public void setField7(String field7) { - this.field7 = field7; - pcs.firePropertyChange("field7", null, null); - } + @Column("a") + private int field1; + @Column("b") + private Integer field2; + @Column("c") + private long field3; + @Column("d") + private Long field4; + @Column("e") + private double field5; + @Column("f") + private Double field6; + @Column("g") + private String field7; + + public int getField1() { + return field1; + } + + public void setField1(int field1) { + this.field1 = field1; + pcs.firePropertyChange("field1", null, null); + } + + public Integer getField2() { + return field2; + } + + public void setField2(Integer field2) { + this.field2 = field2; + pcs.firePropertyChange("field2", null, null); + } + + public long getField3() { + return field3; + } + + public void setField3(long field3) { + this.field3 = field3; + pcs.firePropertyChange("field3", null, null); + } + + public Long getField4() { + return field4; + } + + public void setField4(Long field4) { + this.field4 = field4; + pcs.firePropertyChange("field4", null, null); + } + + public double getField5() { + return field5; + } + + public void setField5(double field5) { + this.field5 = field5; + pcs.firePropertyChange("field5", null, null); + } + + public Double getField6() { + return field6; + } + + public void setField6(Double field6) { + this.field6 = field6; + pcs.firePropertyChange("field6", null, null); + } + + public String getField7() { + return field7; + } + + public void setField7(String field7) { + this.field7 = field7; + pcs.firePropertyChange("field7", null, null); + } } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/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 72cf5a2..bca195f 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 @@ -21,77 +21,92 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.apache.eagle.log.base.taggedlog.TaggedLogAPIEntity; -@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) +@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @Table("unittest") @ColumnFamily("f") @Prefix("testTSEntity") @Service("TestTimeSeriesAPIEntity") @TimeSeries(true) -@Tags({"cluster","datacenter","random"}) +@Tags({ + "cluster", "datacenter", "random" + }) public class TestTimeSeriesAPIEntity extends TaggedLogAPIEntity { - @Column("a") - private int field1; - @Column("b") - private Integer field2; - @Column("c") - private long field3; - @Column("d") - private Long field4; - @Column("e") - private double field5; - @Column("f") - private Double field6; - @Column("g") - private String field7; - - public int getField1() { - return field1; - } - public void setField1(int field1) { - this.field1 = field1; - pcs.firePropertyChange("field1", null, null); - } - public Integer getField2() { - return field2; - } - public void setField2(Integer field2) { - this.field2 = field2; - pcs.firePropertyChange("field2", null, null); - } - public long getField3() { - return field3; - } - public void setField3(long field3) { - this.field3 = field3; - pcs.firePropertyChange("field3", null, null); - } - public Long getField4() { - return field4; - } - public void setField4(Long field4) { - this.field4 = field4; - pcs.firePropertyChange("field4", null, null); - } - public double getField5() { - return field5; - } - public void setField5(double field5) { - this.field5 = field5; - pcs.firePropertyChange("field5", null, null); - } - public Double getField6() { - return field6; - } - public void setField6(Double field6) { - this.field6 = field6; - pcs.firePropertyChange("field6", null, null); - } - public String getField7() { - return field7; - } - public void setField7(String field7) { - this.field7 = field7; - pcs.firePropertyChange("field7", null, null); - } + @Column("a") + private int field1; + @Column("b") + private Integer field2; + @Column("c") + private long field3; + @Column("d") + private Long field4; + @Column("e") + private double field5; + @Column("f") + private Double field6; + @Column("g") + private String field7; + + public int getField1() { + return field1; + } + + public void setField1(int field1) { + this.field1 = field1; + pcs.firePropertyChange("field1", null, null); + } + + public Integer getField2() { + return field2; + } + + public void setField2(Integer field2) { + this.field2 = field2; + pcs.firePropertyChange("field2", null, null); + } + + public long getField3() { + return field3; + } + + public void setField3(long field3) { + this.field3 = field3; + pcs.firePropertyChange("field3", null, null); + } + + public Long getField4() { + return field4; + } + + public void setField4(Long field4) { + this.field4 = field4; + pcs.firePropertyChange("field4", null, null); + } + + public double getField5() { + return field5; + } + + public void setField5(double field5) { + this.field5 = field5; + pcs.firePropertyChange("field5", null, null); + } + + public Double getField6() { + return field6; + } + + public void setField6(Double field6) { + this.field6 = field6; + pcs.firePropertyChange("field6", null, null); + } + + public String getField7() { + return field7; + } + + public void setField7(String field7) { + this.field7 = field7; + pcs.firePropertyChange("field7", null, null); + } } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/expression/ExpressionParser.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/expression/ExpressionParser.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/expression/ExpressionParser.java index 4f74715..39dd34b 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/expression/ExpressionParser.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/expression/ExpressionParser.java @@ -15,7 +15,7 @@ * limitations under the License. */ /** - * + * */ package org.apache.eagle.log.expression; @@ -37,171 +37,169 @@ import java.util.Map; import java.util.Map.Entry; /** - * <h1>Expression Evaluation</h1> - * - * Given expression in string and set context variables, return value in double - * + * <h1>Expression Evaluation</h1> Given expression in string and set context variables, return value in double * <br/> * <br/> - * For example: - * <code>EXP{(max(a, b)* min(a, b)) / abs(a-b+c-d)} => 600.0</code> - * - * <br/> - * <br/> - * <b>NOTE:</b> Expression variable <b>must</b> be in format: <code>fieldName</code> instead of <code>@fieldName</code> - * + * For example: <code>EXP{(max(a, b)* min(a, b)) / abs(a-b+c-d)} => 600.0</code> <br/> * <br/> + * <b>NOTE:</b> Expression variable <b>must</b> be in format: <code>fieldName</code> instead of + * <code>@fieldName</code> <br/> * <br/> * <h2>Dependencies:</h2> * <ul> - * <li> - * <a href="https://github.com/scireum/parsii">scireum/parsii</a> - * <i>Super fast and simple evaluator for mathematical expressions written in Java</i> - * </li> + * <li><a href="https://github.com/scireum/parsii">scireum/parsii</a> <i>Super fast and simple evaluator for + * mathematical expressions written in Java</i></li> * </ul> - * */ -public class ExpressionParser{ - private final static Logger LOG = LoggerFactory.getLogger(ExpressionParser.class); - - private String exprStr; - private Expression expression; - private Scope scope; - - @SuppressWarnings("unused") - public Scope getScope() { - return scope; - } - - private List<String> dependentFields; - - /** - * @param exprStr expression string in format like: <code>(max(a, b)* min(a, b)) / abs(a-b+c-d)</code> - * - * @throws ParseException - * @throws ParsiiInvalidException - */ - public ExpressionParser(String exprStr) throws ParseException, ParsiiInvalidException{ - this.exprStr = exprStr; - scope = Scope.create(); - expression = Parser.parse(this.exprStr,scope); - } - - @SuppressWarnings("unused") - public ExpressionParser(String exprStr, Map<String, Double> context) throws ParsiiInvalidException, ParseException, ParsiiUnknowVariableException { - this(exprStr); - setVariables(context); - } - - public ExpressionParser setVariables(Map<String, Double> tuple) throws ParsiiUnknowVariableException{ -// for(String valName : tuple.keySet()) { -// Double value = tuple.get(valName); - for(Map.Entry<String,Double> entry : tuple.entrySet()) { +public class ExpressionParser { + private static final Logger LOG = LoggerFactory.getLogger(ExpressionParser.class); + + private String exprStr; + private Expression expression; + private Scope scope; + + private List<String> dependentFields; + + /** + * @param exprStr expression string in format like: <code>(max(a, b)* min(a, b)) / abs(a-b+c-d)</code> + * @throws ParseException + * @throws ParsiiInvalidException + */ + public ExpressionParser(String exprStr) throws ParseException, ParsiiInvalidException { + this.exprStr = exprStr; + scope = Scope.create(); + expression = Parser.parse(this.exprStr, scope); + } + + @SuppressWarnings("unused") + public ExpressionParser(String exprStr, Map<String, Double> context) + throws ParsiiInvalidException, ParseException, ParsiiUnknowVariableException { + this(exprStr); + setVariables(context); + } + + public ExpressionParser setVariables(Map<String, Double> tuple) throws ParsiiUnknowVariableException { + // for(String valName : tuple.keySet()) { + // Double value = tuple.get(valName); + for (Map.Entry<String, Double> entry : tuple.entrySet()) { String valName = entry.getKey(); Double value = entry.getValue(); - Variable variable = scope.getVariable(valName); - if(variable!=null && value !=null) { - variable.setValue(value); - }else{ - if(LOG.isDebugEnabled()) LOG.warn("Variable for "+valName+" is null in scope of expression: "+this.exprStr); - } - } - return this; - } - - @SuppressWarnings("unused") - public ExpressionParser setVariable(Entry<String, Double> tuple) throws ParsiiUnknowVariableException{ - if (getDependentFields().contains(tuple.getKey())) { - scope.getVariable(tuple.getKey()).setValue(tuple.getValue()); - } - else { - throw new ParsiiUnknowVariableException("unknown variable: " + tuple.getKey()); - } - return this; - } - - public ExpressionParser setVariable(String key, Double value) throws ParsiiUnknowVariableException{ - scope.getVariable(key).setValue(value); - return this; - } - - public double eval() throws Exception{ - return expression.evaluate(); - } - - /** - * Thread safe - * - * @param tuple - * @return - * @throws ParsiiUnknowVariableException - */ - public double eval(Map<String, Double> tuple) throws Exception { - synchronized (this){ - this.setVariables(tuple); - return this.eval(); - } - } - - public List<String> getDependentFields() { - if (dependentFields == null) { - dependentFields = new ArrayList<String>(); - for (String variable : scope.getNames()) { - if (!variable.equals("pi") && !variable.equals("E") && !variable.equals("euler")) - dependentFields.add(variable); - } - } - return dependentFields; - } - - private final static Map<String, ExpressionParser> _exprParserCache = new HashMap<String, ExpressionParser>(); - - /** - * Thread safe - * - * @param expr - * @return - * @throws ParsiiInvalidException - * @throws ParseException - */ - public static ExpressionParser parse(String expr) throws ParsiiInvalidException, ParseException { - if(expr == null) throw new IllegalStateException("Expression to parse is null"); - synchronized (_exprParserCache) { - ExpressionParser parser = _exprParserCache.get(expr); - if (parser == null) { - parser = new ExpressionParser(expr); - _exprParserCache.put(expr, parser); - } - return parser; - } - } - public static double eval(String expression,Map<String,Double> context) throws Exception { - ExpressionParser parser = parse(expression); - return parser.eval(context); - } - - private static final Map<String,Method> _entityMethodCache = new HashMap<String, Method>(); - public static double eval(String expression,TaggedLogAPIEntity entity) throws Exception { - ExpressionParser parser = parse(expression); - List<String> dependencies = parser.getDependentFields(); - Map<String,Double> context = new HashMap<String,Double>(); - for(String field:dependencies){ - String methodName = "get"+field.substring(0, 1).toUpperCase() + field.substring(1); - String methodUID = entity.getClass().getName()+"."+methodName; - - Method m; - synchronized (_entityMethodCache) { - m = _entityMethodCache.get(methodUID); - if (m == null) { - m = entity.getClass().getMethod(methodName); - _entityMethodCache.put(methodUID, m); - } - } - Object obj = m.invoke(entity); - Double doubleValue = EntityQualifierUtils.convertObjToDouble(obj); - // if(doubleValue == Double.NaN) throw new IllegalArgumentException("Field "+field+": "+obj+" in expression "+expression+" is not number"); - context.put(field,doubleValue); - } - return parser.eval(context); - } + Variable variable = scope.getVariable(valName); + if (variable != null && value != null) { + variable.setValue(value); + } else { + if (LOG.isDebugEnabled()) { + LOG.warn("Variable for " + valName + " is null in scope of expression: " + this.exprStr); + } + } + } + return this; + } + + @SuppressWarnings("unused") + public ExpressionParser setVariable(Entry<String, Double> tuple) throws ParsiiUnknowVariableException { + if (getDependentFields().contains(tuple.getKey())) { + scope.getVariable(tuple.getKey()).setValue(tuple.getValue()); + } else { + throw new ParsiiUnknowVariableException("unknown variable: " + tuple.getKey()); + } + return this; + } + + public ExpressionParser setVariable(String key, Double value) throws ParsiiUnknowVariableException { + scope.getVariable(key).setValue(value); + return this; + } + + public double eval() throws Exception { + return expression.evaluate(); + } + + public static double eval(String expression, TaggedLogAPIEntity entity) throws Exception { + ExpressionParser parser = parse(expression); + List<String> dependencies = parser.getDependentFields(); + Map<String, Double> context = new HashMap<String, Double>(); + for (String field : dependencies) { + String methodName = "get" + field.substring(0, 1).toUpperCase() + field.substring(1); + String methodUID = entity.getClass().getName() + "." + methodName; + + Method m; + synchronized (_entityMethodCache) { + m = _entityMethodCache.get(methodUID); + if (m == null) { + m = entity.getClass().getMethod(methodName); + _entityMethodCache.put(methodUID, m); + } + } + Object obj = m.invoke(entity); + Double doubleValue = EntityQualifierUtils.convertObjToDouble(obj); + // if(doubleValue == Double.NaN) throw new IllegalArgumentException("Field "+field+": "+obj+" in + // expression "+expression+" is not number"); + context.put(field, doubleValue); + } + return parser.eval(context); + } + + /** + * Thread safe + * + * @param tuple + * @return + * @throws ParsiiUnknowVariableException + */ + public double eval(Map<String, Double> tuple) throws Exception { + synchronized (this) { + this.setVariables(tuple); + return this.eval(); + } + } + + public static double eval(String expression, Map<String, Double> context) throws Exception { + ExpressionParser parser = parse(expression); + return parser.eval(context); + } + + @SuppressWarnings("unused") + public Scope getScope() { + return scope; + } + + public List<String> getDependentFields() { + if (dependentFields == null) { + dependentFields = new ArrayList<String>(); + for (String variable : scope.getNames()) { + if (!variable.equals("pi") && !variable.equals("E") && !variable.equals("euler")) { + dependentFields.add(variable); + } + } + } + return dependentFields; + } + + private static final Map<String, ExpressionParser> _exprParserCache = new HashMap<String, ExpressionParser>(); + + /** + * Thread safe + * + * @param expr + * @return + * @throws ParsiiInvalidException + * @throws ParseException + */ + public static ExpressionParser parse(String expr) throws ParsiiInvalidException, ParseException { + if (expr == null) { + throw new IllegalStateException("Expression to parse is null"); + } + synchronized (_exprParserCache) { + ExpressionParser parser = _exprParserCache.get(expr); + if (parser == null) { + parser = new ExpressionParser(expr); + _exprParserCache.put(expr, parser); + } + return parser; + } + } + + private static final Map<String, Method> _entityMethodCache = new HashMap<String, Method>(); + } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/expression/ParsiiInvalidException.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/expression/ParsiiInvalidException.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/expression/ParsiiInvalidException.java index 22301f8..b53d947 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/expression/ParsiiInvalidException.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/expression/ParsiiInvalidException.java @@ -22,36 +22,36 @@ package org.apache.eagle.log.expression; /** * @since Nov 7, 2014 */ -public class ParsiiInvalidException extends Exception{ - - private static final long serialVersionUID = 1L; +public class ParsiiInvalidException extends Exception { - /** - * Default constructor - */ - public ParsiiInvalidException() { - super(); - } + private static final long serialVersionUID = 1L; - /** - * @param message - * @param cause - */ - public ParsiiInvalidException(String message, Throwable cause) { - super(message, cause); - } + /** + * Default constructor + */ + public ParsiiInvalidException() { + super(); + } - /** - * @param message - */ - public ParsiiInvalidException(String message) { - super(message); - } + /** + * @param message + * @param cause + */ + public ParsiiInvalidException(String message, Throwable cause) { + super(message, cause); + } - /** - * @param cause - */ - public ParsiiInvalidException(Throwable cause) { - super(cause); - } + /** + * @param message + */ + public ParsiiInvalidException(String message) { + super(message); + } + + /** + * @param cause + */ + public ParsiiInvalidException(Throwable cause) { + super(cause); + } } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/expression/ParsiiUnknowVariableException.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/expression/ParsiiUnknowVariableException.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/expression/ParsiiUnknowVariableException.java index 1573a08..bfe5a81 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/expression/ParsiiUnknowVariableException.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/expression/ParsiiUnknowVariableException.java @@ -22,36 +22,36 @@ package org.apache.eagle.log.expression; /** * @since Nov 7, 2014 */ -public class ParsiiUnknowVariableException extends Exception{ - - private static final long serialVersionUID = 1L; +public class ParsiiUnknowVariableException extends Exception { - /** - * Default constructor - */ - public ParsiiUnknowVariableException() { - super(); - } + private static final long serialVersionUID = 1L; - /** - * @param message - * @param cause - */ - public ParsiiUnknowVariableException(String message, Throwable cause) { - super(message, cause); - } + /** + * Default constructor + */ + public ParsiiUnknowVariableException() { + super(); + } - /** - * @param message - */ - public ParsiiUnknowVariableException(String message) { - super(message); - } + /** + * @param message + * @param cause + */ + public ParsiiUnknowVariableException(String message, Throwable cause) { + super(message, cause); + } - /** - * @param cause - */ - public ParsiiUnknowVariableException(Throwable cause) { - super(cause); - } + /** + * @param message + */ + public ParsiiUnknowVariableException(String message) { + super(message); + } + + /** + * @param cause + */ + public ParsiiUnknowVariableException(Throwable cause) { + super(cause); + } } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/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 092ef75..8d1bf22 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 @@ -34,34 +34,40 @@ import java.util.LinkedList; * @since 3/18/15 */ public class TestGenericServiceAPIResponseEntity { - final static Logger LOG = LoggerFactory.getLogger(TestGenericServiceAPIResponseEntity.class); + static final Logger LOG = LoggerFactory.getLogger(TestGenericServiceAPIResponseEntity.class); ObjectMapper objectMapper; @Before - public void setUp(){ + public void setUp() { objectMapper = new ObjectMapper(); } @JsonSerialize - public static class Item{ - public Item(){} - public Item(String name,Double value){ + public static class Item { + public Item() { + } + + public Item(String name, Double value) { this.name = name; this.value = value; } + private String name; private Double value; public String getName() { return name; } + public void setName(String name) { this.name = name; } + public Double getValue() { return value; } + public void setValue(Double value) { this.value = value; } @@ -71,22 +77,25 @@ public class TestGenericServiceAPIResponseEntity { public void testSerDeserialize() throws IOException { // mock up service side to serialize GenericServiceAPIResponseEntity<Item> entity = new GenericServiceAPIResponseEntity<Item>(Item.class); - entity.setObj(Arrays.asList(new Item("a",1.2),new Item("b",1.3),new Item("c",1.4))); - entity.setMeta(new HashMap<String, Object>(){{ - put("tag1","val1"); - put("tag2","val2"); - }}); + entity.setObj(Arrays.asList(new Item("a", 1.2), new Item("b", 1.3), new Item("c", 1.4))); + entity.setMeta(new HashMap<String, Object>() { + { + put("tag1", "val1"); + put("tag2", "val2"); + } + }); -// entity.setTypeByObj(); + // entity.setTypeByObj(); entity.setSuccess(true); String json = objectMapper.writeValueAsString(entity); LOG.info(json); // mock up client side to deserialize - GenericServiceAPIResponseEntity deserEntity = objectMapper.readValue(json,GenericServiceAPIResponseEntity.class); - Assert.assertEquals(json,objectMapper.writeValueAsString(deserEntity)); + GenericServiceAPIResponseEntity deserEntity = objectMapper + .readValue(json, GenericServiceAPIResponseEntity.class); + Assert.assertEquals(json, objectMapper.writeValueAsString(deserEntity)); Assert.assertEquals(3, deserEntity.getObj().size()); - Assert.assertEquals(LinkedList.class,deserEntity.getObj().getClass()); - Assert.assertEquals(Item.class,deserEntity.getObj().get(0).getClass()); + Assert.assertEquals(LinkedList.class, deserEntity.getObj().getClass()); + Assert.assertEquals(Item.class, deserEntity.getObj().get(0).getClass()); } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestDouble2DArraySerDeser.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestDouble2DArraySerDeser.java b/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestDouble2DArraySerDeser.java index 12fba59..85ce8a5 100644 --- a/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestDouble2DArraySerDeser.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestDouble2DArraySerDeser.java @@ -26,23 +26,25 @@ public class TestDouble2DArraySerDeser { private Double2DArraySerDeser double2DArraySerDeser = new Double2DArraySerDeser(); @Test - public void testSerDeser(){ - double[][] data = new double[][]{ - {0,1,2,4}, - {4,2,1,0}, - {4}, - null, - {} + public void testSerDeser() { + double[][] data = new double[][] { + { + 0, 1, 2, 4 + }, { + 4, 2, 1, 0 + }, { + 4 + }, null, {} }; byte[] bytes = double2DArraySerDeser.serialize(data); double[][] data2 = double2DArraySerDeser.deserialize(bytes); - assert data.length == data2.length; + assert data.length == data2.length; assert data[0].length == data2[0].length; assert data[1].length == data2[1].length; assert data[2].length == data2[2].length; assert data[3] == data2[3] && data2[3] == null; assert data[4].length == data2[4].length; } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestDoubleSerDeser.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestDoubleSerDeser.java b/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestDoubleSerDeser.java index 2432e47..641f128 100644 --- a/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestDoubleSerDeser.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestDoubleSerDeser.java @@ -24,35 +24,46 @@ import org.junit.Test; public class TestDoubleSerDeser { - @Test - public void test() { - DoubleSerDeser dsd = new DoubleSerDeser(); - //byte[] t = {'N', 'a', 'N'}; - byte [] t = dsd.serialize(Double.NaN); - - Double d = dsd.deserialize(t); - System.out.println(d); - //Double d = dsd.deserialize(t); - } + @Test + public void test() { + DoubleSerDeser dsd = new DoubleSerDeser(); + // byte[] t = {'N', 'a', 'N'}; + byte[] t = dsd.serialize(Double.NaN); - /** - * @link http://en.wikipedia.org/wiki/Double-precision_floating-point_format - */ - @Test - public void testIEEE754_Binary64_DoublePrecisionFloatingPointFormat(){ - for(Double last = null,i=Math.pow(-2.0,33);i< Math.pow(2.0,33);i+=Math.pow(2.0,10)){ - if(last != null){ - Assert.assertTrue(i > last); - if(last < 0 && i <0){ - Assert.assertTrue("Negative double value and its serialization Binary array have negative correlation", new BinaryComparator(ByteUtil.doubleToBytes(i)).compareTo(ByteUtil.doubleToBytes(last)) < 0); - }else if(last < 0 && i >=0){ - Assert.assertTrue("Binary array for negative double is always greater than any positive doubles' ",new BinaryComparator(ByteUtil.doubleToBytes(i)).compareTo(ByteUtil.doubleToBytes(last)) < 0); - }else if(last >= 0){ - Assert.assertTrue("Positive double value and its serialization Binary array have positive correlation",new BinaryComparator(ByteUtil.doubleToBytes(i)).compareTo(ByteUtil.doubleToBytes(last)) > 0); - } - } - last = i; - } - Assert.assertTrue("Binary array for negative double is always greater than any positive doubles'",new BinaryComparator(ByteUtil.doubleToBytes(-1.0)).compareTo(ByteUtil.doubleToBytes(Math.pow(2.0,32)))>0) ; - } + Double d = dsd.deserialize(t); + System.out.println(d); + // Double d = dsd.deserialize(t); + } + + /** + * @link http://en.wikipedia.org/wiki/Double-precision_floating-point_format + */ + @Test + public void testIEEE754_Binary64_DoublePrecisionFloatingPointFormat() { + for (Double last = null, i = Math.pow(-2.0, 33); i < Math.pow(2.0, 33); i += Math.pow(2.0, 10)) { + if (last != null) { + Assert.assertTrue(i > last); + if (last < 0 && i < 0) { + Assert + .assertTrue("Negative double value and its serialization Binary array have negative correlation", + new BinaryComparator(ByteUtil.doubleToBytes(i)) + .compareTo(ByteUtil.doubleToBytes(last)) < 0); + } else if (last < 0 && i >= 0) { + Assert + .assertTrue("Binary array for negative double is always greater than any positive doubles' ", + new BinaryComparator(ByteUtil.doubleToBytes(i)) + .compareTo(ByteUtil.doubleToBytes(last)) < 0); + } else if (last >= 0) { + Assert + .assertTrue("Positive double value and its serialization Binary array have positive correlation", + new BinaryComparator(ByteUtil.doubleToBytes(i)) + .compareTo(ByteUtil.doubleToBytes(last)) > 0); + } + } + last = i; + } + Assert.assertTrue("Binary array for negative double is always greater than any positive doubles'", + new BinaryComparator(ByteUtil.doubleToBytes(-1.0)) + .compareTo(ByteUtil.doubleToBytes(Math.pow(2.0, 32))) > 0); + } } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestGenericEntityIndexStreamReader.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestGenericEntityIndexStreamReader.java b/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestGenericEntityIndexStreamReader.java index 33aee32..cb1534c 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestGenericEntityIndexStreamReader.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestGenericEntityIndexStreamReader.java @@ -38,15 +38,17 @@ public class TestGenericEntityIndexStreamReader extends TestHBaseBase { @BeforeClass public static void createTable() throws IOException, IllegalAccessException, InstantiationException { - EntityDefinition entityDefinition = EntityDefinitionManager.getEntityDefinitionByEntityClass(TestLogAPIEntity.class); + EntityDefinition entityDefinition = EntityDefinitionManager + .getEntityDefinitionByEntityClass(TestLogAPIEntity.class); hbase.createTable(entityDefinition.getTable(), entityDefinition.getColumnFamily()); } @Test public void testUniqueIndexRead() throws Exception { EntityDefinitionManager.registerEntity(TestLogAPIEntity.class); - final EntityDefinition ed = EntityDefinitionManager.getEntityDefinitionByEntityClass(TestLogAPIEntity.class); - + final EntityDefinition ed = EntityDefinitionManager + .getEntityDefinitionByEntityClass(TestLogAPIEntity.class); + final List<TestLogAPIEntity> list = new ArrayList<TestLogAPIEntity>(); TestLogAPIEntity e = new TestLogAPIEntity(); e.setField1(1); @@ -64,7 +66,7 @@ public class TestGenericEntityIndexStreamReader extends TestHBaseBase { GenericEntityWriter writer = new GenericEntityWriter(ed.getService()); List<String> result = writer.write(list); Assert.assertNotNull(result); - + final IndexDefinition indexDef = ed.getIndexes()[0]; SearchCondition condition = new SearchCondition(); condition.setOutputFields(new ArrayList<String>()); @@ -82,7 +84,7 @@ public class TestGenericEntityIndexStreamReader extends TestHBaseBase { UniqueIndexStreamReader indexReader = new UniqueIndexStreamReader(indexDef, condition); GenericEntityBatchReader batchReader = new GenericEntityBatchReader(indexReader); - List<TestLogAPIEntity> entities = batchReader.read(); + List<TestLogAPIEntity> entities = batchReader.read(); Assert.assertNotNull(entities); Assert.assertTrue(entities.size() >= 1); TestLogAPIEntity e1 = entities.get(0); @@ -93,25 +95,27 @@ public class TestGenericEntityIndexStreamReader extends TestHBaseBase { Assert.assertEquals(e.getField5(), e1.getField5(), 0.001); Assert.assertEquals(e.getField6(), e1.getField6()); Assert.assertEquals(e.getField7(), e1.getField7()); - + GenericDeleter deleter = new GenericDeleter(ed.getTable(), ed.getColumnFamily()); deleter.delete(list); - + indexReader = new UniqueIndexStreamReader(indexDef, condition); batchReader = new GenericEntityBatchReader(indexReader); - entities = batchReader.read(); + entities = batchReader.read(); Assert.assertNotNull(entities); Assert.assertTrue(entities.isEmpty()); } @Test public void testNonClusterIndexRead() throws Exception { - EntityDefinition entityDefinition = EntityDefinitionManager.getEntityDefinitionByEntityClass(TestLogAPIEntity.class); + EntityDefinition entityDefinition = EntityDefinitionManager + .getEntityDefinitionByEntityClass(TestLogAPIEntity.class); // hbase.createTable(entityDefinition.getTable(), entityDefinition.getColumnFamily()); EntityDefinitionManager.registerEntity(TestLogAPIEntity.class); - final EntityDefinition ed = EntityDefinitionManager.getEntityDefinitionByEntityClass(TestLogAPIEntity.class); - + final EntityDefinition ed = EntityDefinitionManager + .getEntityDefinitionByEntityClass(TestLogAPIEntity.class); + final List<TestLogAPIEntity> list = new ArrayList<TestLogAPIEntity>(); TestLogAPIEntity e = new TestLogAPIEntity(); e.setField1(1); @@ -129,7 +133,7 @@ public class TestGenericEntityIndexStreamReader extends TestHBaseBase { GenericEntityWriter writer = new GenericEntityWriter(ed.getService()); List<String> result = writer.write(list); Assert.assertNotNull(result); - + final IndexDefinition indexDef = ed.getIndexes()[1]; SearchCondition condition = new SearchCondition(); condition.setOutputFields(new ArrayList<String>()); @@ -147,7 +151,7 @@ public class TestGenericEntityIndexStreamReader extends TestHBaseBase { NonClusteredIndexStreamReader indexReader = new NonClusteredIndexStreamReader(indexDef, condition); GenericEntityBatchReader batchReader = new GenericEntityBatchReader(indexReader); - List<TestLogAPIEntity> entities = batchReader.read(); + List<TestLogAPIEntity> entities = batchReader.read(); Assert.assertNotNull(entities); Assert.assertTrue(entities.size() >= 1); TestLogAPIEntity e1 = entities.get(0); @@ -159,13 +163,12 @@ public class TestGenericEntityIndexStreamReader extends TestHBaseBase { Assert.assertEquals(e.getField6(), e1.getField6()); Assert.assertEquals(e.getField7(), e1.getField7()); - GenericDeleter deleter = new GenericDeleter(ed.getTable(), ed.getColumnFamily()); deleter.delete(list); - + indexReader = new NonClusteredIndexStreamReader(indexDef, condition); batchReader = new GenericEntityBatchReader(indexReader); - entities = batchReader.read(); + entities = batchReader.read(); // hbase.deleteTable(entityDefinition.getTable()); Assert.assertNotNull(entities); Assert.assertTrue(entities.isEmpty()); http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestHBaseIntegerLogHelper.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestHBaseIntegerLogHelper.java b/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestHBaseIntegerLogHelper.java index a755668..2b9e915 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestHBaseIntegerLogHelper.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestHBaseIntegerLogHelper.java @@ -31,37 +31,37 @@ import java.util.Map; * @since : 11/10/14,2014 */ public class TestHBaseIntegerLogHelper { - @Test - public void testTimeSeriesAPIEntity(){ - InternalLog internalLog = new InternalLog(); - Map<String,byte[]> map = new HashMap<String,byte[]>(); - TestTimeSeriesAPIEntity apiEntity = new TestTimeSeriesAPIEntity(); - EntityDefinition ed = null; - try { - ed = EntityDefinitionManager.getEntityByServiceName("TestTimeSeriesAPIEntity"); - } catch (InstantiationException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - map.put("a", ByteUtil.intToBytes(12)); - map.put("c", ByteUtil.longToBytes(123432432l)); - map.put("cluster", new String("cluster4ut").getBytes()); - map.put("datacenter", new String("datacenter4ut").getBytes()); + @Test + public void testTimeSeriesAPIEntity() { + InternalLog internalLog = new InternalLog(); + Map<String, byte[]> map = new HashMap<String, byte[]>(); + TestTimeSeriesAPIEntity apiEntity = new TestTimeSeriesAPIEntity(); + EntityDefinition ed = null; + try { + ed = EntityDefinitionManager.getEntityByServiceName("TestTimeSeriesAPIEntity"); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + map.put("a", ByteUtil.intToBytes(12)); + map.put("c", ByteUtil.longToBytes(123432432l)); + map.put("cluster", new String("cluster4ut").getBytes()); + map.put("datacenter", new String("datacenter4ut").getBytes()); - internalLog.setQualifierValues(map); - internalLog.setTimestamp(System.currentTimeMillis()); + internalLog.setQualifierValues(map); + internalLog.setTimestamp(System.currentTimeMillis()); - try { - TaggedLogAPIEntity entity = HBaseInternalLogHelper.buildEntity(internalLog, ed); - Assert.assertTrue(entity instanceof TestTimeSeriesAPIEntity); - TestTimeSeriesAPIEntity tsentity = (TestTimeSeriesAPIEntity) entity; - Assert.assertEquals("cluster4ut",tsentity.getTags().get("cluster")); - Assert.assertEquals("datacenter4ut",tsentity.getTags().get("datacenter")); - Assert.assertEquals(12,tsentity.getField1()); - Assert.assertEquals(123432432l,tsentity.getField3()); - } catch (Exception e) { - e.printStackTrace(); - } - } + try { + TaggedLogAPIEntity entity = HBaseInternalLogHelper.buildEntity(internalLog, ed); + Assert.assertTrue(entity instanceof TestTimeSeriesAPIEntity); + TestTimeSeriesAPIEntity tsentity = (TestTimeSeriesAPIEntity)entity; + Assert.assertEquals("cluster4ut", tsentity.getTags().get("cluster")); + Assert.assertEquals("datacenter4ut", tsentity.getTags().get("datacenter")); + Assert.assertEquals(12, tsentity.getField1()); + Assert.assertEquals(123432432l, tsentity.getField3()); + } catch (Exception e) { + e.printStackTrace(); + } + } } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestHBaseWriteEntitiesPerformance.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestHBaseWriteEntitiesPerformance.java b/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestHBaseWriteEntitiesPerformance.java index 4324b73..04a1336 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestHBaseWriteEntitiesPerformance.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/test/java/org/apache/eagle/log/entity/TestHBaseWriteEntitiesPerformance.java @@ -38,7 +38,8 @@ public class TestHBaseWriteEntitiesPerformance extends TestHBaseBase { @Before public void setUp() throws IllegalAccessException, InstantiationException, IOException { - EntityDefinition entityDefinition = EntityDefinitionManager.getEntityDefinitionByEntityClass(TestLogAPIEntity.class); + EntityDefinition entityDefinition = EntityDefinitionManager + .getEntityDefinitionByEntityClass(TestLogAPIEntity.class); hbase.createTable(entityDefinition.getTable(), entityDefinition.getColumnFamily()); EntityDefinitionManager.registerEntity(TestLogAPIEntity.class); @@ -52,7 +53,8 @@ public class TestHBaseWriteEntitiesPerformance extends TestHBaseBase { @After public void cleanUp() throws IllegalAccessException, InstantiationException, IOException { - EntityDefinition entityDefinition = EntityDefinitionManager.getEntityDefinitionByEntityClass(TestLogAPIEntity.class); + EntityDefinition entityDefinition = EntityDefinitionManager + .getEntityDefinitionByEntityClass(TestLogAPIEntity.class); hbase.deleteTable(entityDefinition.getTable()); } @@ -70,15 +72,15 @@ public class TestHBaseWriteEntitiesPerformance extends TestHBaseBase { int wroteCount = 0; List<String> rowkeys = new ArrayList<String>(); List<TestLogAPIEntity> list = new ArrayList<TestLogAPIEntity>(); - for (int i = 0 ; i <= count;i++) { + for (int i = 0; i <= count; i++) { TestLogAPIEntity e = new TestLogAPIEntity(); e.setTimestamp(new Date().getTime()); e.setField1(i); e.setField2(i); e.setField3(i); - e.setField4((long) i); - e.setField5((double) i); - e.setField6((double) i); + e.setField4((long)i); + e.setField5(i); + e.setField6((double)i); e.setField7(String.valueOf(i)); e.setTags(new HashMap<String, String>()); e.getTags().put("jobID", "index_test_job_id"); @@ -87,14 +89,17 @@ public class TestHBaseWriteEntitiesPerformance extends TestHBaseBase { e.getTags().put("class", e.toString()); list.add(e); - if ( list.size() >= 1000) { + if (list.size() >= 1000) { try { StopWatch watch = new StopWatch(); watch.start(); rowkeys.addAll(writer.write(list)); watch.stop(); wroteCount += list.size(); - if (LOG.isDebugEnabled()) LOG.debug("Wrote "+wroteCount+" / "+count+" entities"+" in "+watch.getTime()+" ms"); + if (LOG.isDebugEnabled()) { + LOG.debug("Wrote " + wroteCount + " / " + count + " entities" + " in " + + watch.getTime() + " ms"); + } list.clear(); } catch (Exception e1) { Assert.fail(e1.getMessage()); @@ -105,11 +110,15 @@ public class TestHBaseWriteEntitiesPerformance extends TestHBaseBase { try { rowkeys.addAll(writer.write(list)); wroteCount += list.size(); - if (LOG.isDebugEnabled()) LOG.debug("wrote "+wroteCount+" / "+count+" entities"); + if (LOG.isDebugEnabled()) { + LOG.debug("wrote " + wroteCount + " / " + count + " entities"); + } } catch (Exception e) { Assert.fail(e.getMessage()); } - if (LOG.isDebugEnabled()) LOG.debug("done "+count+" entities"); + if (LOG.isDebugEnabled()) { + LOG.debug("done " + count + " entities"); + } return rowkeys; } @@ -127,4 +136,4 @@ public class TestHBaseWriteEntitiesPerformance extends TestHBaseBase { LOG.info("End time: " + endTime); LOG.info("Totally take " + watch.getTime() * 1.0 / 1000 + " s"); } -} \ No newline at end of file +}
