未验证 提交 184c6ca2 编写于 作者: K kezhenxu94 提交者: GitHub

Refactor `@Column` annotation (#10367)

* Swap `Column#name` and `ElasticSearch.Column#columnAlias`
* Rename `ElasticSearch.Column#columnAlias` to `ElasticSearch.Column#legacyName`
上级 974cecb6
......@@ -90,6 +90,7 @@
* Avoid Antlr dependencies' versions might be different in compile time and runtime.
* Now `PrometheusMetricConverter#escapedName` also support converting `/` to `_`.
* Add missing TCP throughput metrics.
* Refactor `@Column` annotation, swap `Column#name` and `ElasticSearch.Column#columnAlias` and rename `ElasticSearch.Column#columnAlias` to `ElasticSearch.Column#legacyName`.
#### UI
......
......@@ -20,17 +20,6 @@ package org.apache.skywalking.oal.rt;
import freemarker.template.Configuration;
import freemarker.template.Version;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Reader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
......@@ -77,6 +66,18 @@ import org.apache.skywalking.oap.server.library.module.ModuleStartException;
import org.apache.skywalking.oap.server.library.util.ResourceUtils;
import org.apache.skywalking.oap.server.library.util.StringUtil;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Reader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
/**
* OAL Runtime is the class generation engine, which load the generated classes from OAL scrip definitions. This runtime
* is loaded dynamically.
......@@ -261,10 +262,10 @@ public class OALRuntime implements OALEngine {
AnnotationsAttribute annotationsAttribute = new AnnotationsAttribute(
constPool, AnnotationsAttribute.visibleTag);
/**
* Add @Column(columnName = "${sourceField.columnName}")
* Add @Column(name = "${sourceField.columnName}")
*/
Annotation columnAnnotation = new Annotation(Column.class.getName(), constPool);
columnAnnotation.addMemberValue("columnName", new StringMemberValue(field.getColumnName(), constPool));
columnAnnotation.addMemberValue("name", new StringMemberValue(field.getColumnName(), constPool));
if (field.getType().equals(String.class)) {
columnAnnotation.addMemberValue("length", new IntegerMemberValue(constPool, field.getLength()));
}
......
......@@ -18,11 +18,6 @@
package org.apache.skywalking.oal.rt.parser;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.List;
import org.apache.skywalking.oal.rt.util.ClassMethodUtil;
import org.apache.skywalking.oal.rt.util.TypeCastUtil;
import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
......@@ -31,7 +26,11 @@ import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.ConstOn
import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.Entrance;
import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.SourceFrom;
import org.apache.skywalking.oap.server.core.storage.annotation.Column;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.List;
import static java.util.Objects.isNull;
public class DeepAnalysis {
......@@ -136,7 +135,10 @@ public class DeepAnalysis {
for (Field field : c.getDeclaredFields()) {
Column column = field.getAnnotation(Column.class);
if (column != null) {
result.addPersistentField(field.getName(), column.columnName(), field.getType());
result.addPersistentField(
field.getName(),
column.name(),
field.getType());
}
}
c = c.getSuperclass();
......
......@@ -18,7 +18,6 @@
package org.apache.skywalking.oap.server.core.alarm;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.analysis.Stream;
......@@ -36,6 +35,8 @@ import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import java.util.List;
import static org.apache.skywalking.oap.server.core.analysis.record.Record.TIME_BUCKET;
import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ALARM;
......@@ -68,26 +69,26 @@ public class AlarmRecord extends Record {
.append(ID1, id1);
}
@Column(columnName = SCOPE)
@Column(name = SCOPE)
private int scope;
@Column(columnName = NAME, storageOnly = true, length = 512)
@Column(name = NAME, storageOnly = true, length = 512)
private String name;
@Column(columnName = ID0, storageOnly = true, length = 512)
@Column(name = ID0, storageOnly = true, length = 512)
@BanyanDB.SeriesID(index = 0)
private String id0;
@Column(columnName = ID1, storageOnly = true)
@Column(name = ID1, storageOnly = true)
private String id1;
@Column(columnName = START_TIME)
@Column(name = START_TIME)
private long startTime;
@Column(columnName = ALARM_MESSAGE)
@Column(name = ALARM_MESSAGE)
@ElasticSearch.MatchQuery
private String alarmMessage;
@Column(columnName = RULE_NAME)
@Column(name = RULE_NAME)
private String ruleName;
@Column(columnName = TAGS, indexOnly = true)
@Column(name = TAGS, indexOnly = true)
@SQLDatabase.AdditionalEntity(additionalTables = {ADDITIONAL_TAG_TABLE})
private List<String> tagsInString;
@Column(columnName = TAGS_RAW_DATA, storageOnly = true, length = Tag.TAG_LENGTH)
@Column(name = TAGS_RAW_DATA, storageOnly = true, length = Tag.TAG_LENGTH)
private byte[] tagsRawData;
public static class Builder implements StorageBuilder<AlarmRecord> {
......
......@@ -45,7 +45,7 @@ public class TopNCacheReadCommand extends TopN {
private String id;
@Getter
@Setter
@Column(columnName = STATEMENT, length = 2000, storageOnly = true)
@Column(name = STATEMENT, length = 2000, storageOnly = true)
private String command;
@Override
......
......@@ -45,7 +45,7 @@ public class TopNCacheWriteCommand extends TopN {
private String id;
@Getter
@Setter
@Column(columnName = STATEMENT, length = 2000, storageOnly = true)
@Column(name = STATEMENT, length = 2000, storageOnly = true)
private String command;
@Override
......
......@@ -18,7 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.manual.database;
import java.util.Objects;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.analysis.Stream;
......@@ -32,6 +31,8 @@ import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import java.util.Objects;
/**
* Database TopN statement, including Database SQL statement, mongoDB and Redis commands.
*/
......@@ -44,7 +45,7 @@ public class TopNDatabaseStatement extends TopN {
private String id;
@Getter
@Setter
@Column(columnName = STATEMENT, length = 2000, storageOnly = true)
@Column(name = STATEMENT, length = 2000, storageOnly = true)
private String statement;
@Override
......
......@@ -18,10 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.manual.endpoint;
import com.google.common.base.Strings;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.analysis.IDManager;
import org.apache.skywalking.oap.server.core.analysis.MetricsExtension;
......@@ -39,7 +35,10 @@ import org.apache.skywalking.oap.server.core.storage.annotation.SQLDatabase;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import com.google.common.base.Strings;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import static org.apache.skywalking.oap.server.core.analysis.metrics.Metrics.ID;
import static org.apache.skywalking.oap.server.core.analysis.metrics.Metrics.TIME_BUCKET;
......@@ -53,18 +52,18 @@ public class EndpointTraffic extends Metrics {
public static final String INDEX_NAME = "endpoint_traffic";
public static final String SERVICE_ID = "service_id";
public static final String NAME = "name";
public static final String NAME = "endpoint_traffic_name";
@Setter
@Getter
@Column(columnName = SERVICE_ID)
@Column(name = SERVICE_ID)
@BanyanDB.SeriesID(index = 0)
private String serviceId;
@Setter
@Getter
@Column(columnName = NAME)
@Column(name = NAME)
@ElasticSearch.Column(legacyName = "name")
@ElasticSearch.MatchQuery
@ElasticSearch.Column(columnAlias = "endpoint_traffic_name")
@BanyanDB.SeriesID(index = 1)
private String name = Const.EMPTY_STRING;
......
......@@ -18,11 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.manual.instance;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.analysis.IDManager;
import org.apache.skywalking.oap.server.core.analysis.MetricsExtension;
......@@ -40,7 +35,11 @@ import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import org.apache.skywalking.oap.server.library.util.StringUtil;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SERVICE_INSTANCE;
@Stream(name = InstanceTraffic.INDEX_NAME, scopeId = SERVICE_INSTANCE,
......@@ -54,7 +53,7 @@ import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SE
public class InstanceTraffic extends Metrics {
public static final String INDEX_NAME = "instance_traffic";
public static final String SERVICE_ID = "service_id";
public static final String NAME = "name";
public static final String NAME = "instance_traffic_name";
public static final String LAST_PING_TIME_BUCKET = "last_ping";
public static final String PROPERTIES = "properties";
......@@ -62,25 +61,25 @@ public class InstanceTraffic extends Metrics {
@Setter
@Getter
@Column(columnName = SERVICE_ID)
@Column(name = SERVICE_ID)
@BanyanDB.SeriesID(index = 0)
private String serviceId;
@Setter
@Getter
@Column(columnName = NAME, storageOnly = true)
@ElasticSearch.Column(columnAlias = "instance_traffic_name")
@Column(name = NAME, storageOnly = true)
@ElasticSearch.Column(legacyName = "name")
@BanyanDB.SeriesID(index = 1)
private String name;
@Setter
@Getter
@Column(columnName = LAST_PING_TIME_BUCKET)
@Column(name = LAST_PING_TIME_BUCKET)
private long lastPingTimestamp;
@Setter
@Getter
@Column(columnName = PROPERTIES, storageOnly = true, length = 50000)
@Column(name = PROPERTIES, storageOnly = true, length = 50000)
private JsonObject properties;
@Override
......
......@@ -18,7 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.manual.log;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.UnexpectedException;
......@@ -35,6 +34,8 @@ import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import java.util.List;
public abstract class AbstractLogRecord extends Record {
public static final String ADDITIONAL_TAG_TABLE = "log_tag";
public static final String SERVICE_ID = "service_id";
......@@ -51,46 +52,46 @@ public abstract class AbstractLogRecord extends Record {
@Setter
@Getter
@Column(columnName = SERVICE_ID)
@Column(name = SERVICE_ID)
@BanyanDB.SeriesID(index = 0)
@SQLDatabase.AdditionalEntity(additionalTables = {ADDITIONAL_TAG_TABLE}, reserveOriginalColumns = true)
private String serviceId;
@Setter
@Getter
@Column(columnName = SERVICE_INSTANCE_ID, length = 512)
@Column(name = SERVICE_INSTANCE_ID, length = 512)
@BanyanDB.SeriesID(index = 1)
private String serviceInstanceId;
@Setter
@Getter
@Column(columnName = ENDPOINT_ID, length = 512)
@Column(name = ENDPOINT_ID, length = 512)
private String endpointId;
@Setter
@Getter
@Column(columnName = TRACE_ID, length = 150)
@Column(name = TRACE_ID, length = 150)
@BanyanDB.GlobalIndex
private String traceId;
@Setter
@Getter
@Column(columnName = TRACE_SEGMENT_ID, length = 150)
@Column(name = TRACE_SEGMENT_ID, length = 150)
@BanyanDB.GlobalIndex
private String traceSegmentId;
@Setter
@Getter
@Column(columnName = SPAN_ID)
@Column(name = SPAN_ID)
@BanyanDB.NoIndexing
private int spanId;
@Setter
@Getter
@Column(columnName = CONTENT_TYPE, storageOnly = true)
@Column(name = CONTENT_TYPE, storageOnly = true)
private int contentType = ContentType.NONE.value();
@Setter
@Getter
@Column(columnName = CONTENT, length = 1_000_000)
@Column(name = CONTENT, length = 1_000_000)
@ElasticSearch.MatchQuery(analyzer = ElasticSearch.MatchQuery.AnalyzerType.OAP_LOG_ANALYZER)
private LongText content;
@Setter
@Getter
@Column(columnName = TIMESTAMP)
@Column(name = TIMESTAMP)
private long timestamp;
/**
......@@ -98,11 +99,11 @@ public abstract class AbstractLogRecord extends Record {
*/
@Setter
@Getter
@Column(columnName = TAGS_RAW_DATA, storageOnly = true)
@Column(name = TAGS_RAW_DATA, storageOnly = true)
private byte[] tagsRawData;
@Setter
@Getter
@Column(columnName = TAGS, indexOnly = true, length = Tag.TAG_LENGTH)
@Column(name = TAGS, indexOnly = true, length = Tag.TAG_LENGTH)
@SQLDatabase.AdditionalEntity(additionalTables = {ADDITIONAL_TAG_TABLE})
private List<String> tagsInString;
......
......@@ -47,7 +47,7 @@ public class LogRecord extends AbstractLogRecord {
@Setter
@Getter
@Column(columnName = UNIQUE_ID)
@Column(name = UNIQUE_ID)
private String uniqueId;
@Override
......
......@@ -56,20 +56,20 @@ public class NetworkAddressAlias extends Metrics {
@Setter
@Getter
@Column(columnName = ADDRESS)
@Column(name = ADDRESS)
@BanyanDB.SeriesID(index = 0)
private String address;
@Setter
@Getter
@Column(columnName = REPRESENT_SERVICE_ID)
@Column(name = REPRESENT_SERVICE_ID)
private String representServiceId;
@Setter
@Getter
@Column(columnName = REPRESENT_SERVICE_INSTANCE_ID)
@Column(name = REPRESENT_SERVICE_INSTANCE_ID)
private String representServiceInstanceId;
@Setter
@Getter
@Column(columnName = LAST_UPDATE_TIME_BUCKET)
@Column(name = LAST_UPDATE_TIME_BUCKET)
private long lastUpdateTimeBucket;
@Override
......
......@@ -21,7 +21,6 @@ package org.apache.skywalking.oap.server.core.analysis.manual.process;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.Map;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
......@@ -42,6 +41,8 @@ import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import org.apache.skywalking.oap.server.library.util.StringUtil;
import java.util.Map;
import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.PROCESS;
@Stream(name = ProcessTraffic.INDEX_NAME, scopeId = PROCESS,
......@@ -69,12 +70,12 @@ public class ProcessTraffic extends Metrics {
@Setter
@Getter
@Column(columnName = SERVICE_ID)
@Column(name = SERVICE_ID)
private String serviceId;
@Setter
@Getter
@Column(columnName = INSTANCE_ID, length = 600)
@Column(name = INSTANCE_ID, length = 600)
@BanyanDB.SeriesID(index = 0)
private String instanceId;
......@@ -84,33 +85,33 @@ public class ProcessTraffic extends Metrics {
@Setter
@Getter
@Column(columnName = NAME, length = 500)
@Column(name = NAME, length = 500)
@BanyanDB.SeriesID(index = 1)
private String name;
@Setter
@Getter
@Column(columnName = LAST_PING_TIME_BUCKET)
@Column(name = LAST_PING_TIME_BUCKET)
private long lastPingTimestamp;
@Setter
@Getter
@Column(columnName = DETECT_TYPE)
@Column(name = DETECT_TYPE)
private int detectType = ProcessDetectType.UNDEFINED.value();
@Setter
@Getter
@Column(columnName = AGENT_ID, length = 500)
@Column(name = AGENT_ID, length = 500)
private String agentId;
@Setter
@Getter
@Column(columnName = PROPERTIES, storageOnly = true, length = 50000)
@Column(name = PROPERTIES, storageOnly = true, length = 50000)
private JsonObject properties;
@Setter
@Getter
@Column(columnName = LABELS_JSON, storageOnly = true, length = 500)
@Column(name = LABELS_JSON, storageOnly = true, length = 500)
private String labelsJson;
/**
......@@ -118,7 +119,7 @@ public class ProcessTraffic extends Metrics {
*/
@Setter
@Getter
@Column(columnName = PROFILING_SUPPORT_STATUS)
@Column(name = PROFILING_SUPPORT_STATUS)
private int profilingSupportStatus;
@Override
......
......@@ -58,10 +58,10 @@ public class ServiceLabelRecord extends Metrics {
public static final String LABEL = "label";
@BanyanDB.SeriesID(index = 0)
@Column(columnName = SERVICE_ID)
@Column(name = SERVICE_ID)
private String serviceId;
@BanyanDB.SeriesID(index = 1)
@Column(columnName = LABEL, length = 50)
@Column(name = LABEL, length = 50)
private String label;
@Override
......
......@@ -55,19 +55,19 @@ public class EndpointRelationServerSideMetrics extends Metrics {
@Setter
@Getter
@Column(columnName = SOURCE_ENDPOINT)
@Column(name = SOURCE_ENDPOINT)
private String sourceEndpoint;
@Setter
@Getter
@Column(columnName = DEST_ENDPOINT)
@Column(name = DEST_ENDPOINT)
private String destEndpoint;
@Setter
@Getter
@Column(columnName = COMPONENT_ID, storageOnly = true)
@Column(name = COMPONENT_ID, storageOnly = true)
private int componentId;
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
......
......@@ -56,23 +56,23 @@ public class ServiceInstanceRelationClientSideMetrics extends Metrics {
@Setter
@Getter
@Column(columnName = SOURCE_SERVICE_ID)
@Column(name = SOURCE_SERVICE_ID)
private String sourceServiceId;
@Setter
@Getter
@Column(columnName = SOURCE_SERVICE_INSTANCE_ID)
@Column(name = SOURCE_SERVICE_INSTANCE_ID)
private String sourceServiceInstanceId;
@Setter
@Getter
@Column(columnName = DEST_SERVICE_ID)
@Column(name = DEST_SERVICE_ID)
private String destServiceId;
@Setter
@Getter
@Column(columnName = DEST_SERVICE_INSTANCE_ID)
@Column(name = DEST_SERVICE_INSTANCE_ID)
private String destServiceInstanceId;
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
......
......@@ -56,23 +56,23 @@ public class ServiceInstanceRelationServerSideMetrics extends Metrics {
@Setter
@Getter
@Column(columnName = SOURCE_SERVICE_ID)
@Column(name = SOURCE_SERVICE_ID)
private String sourceServiceId;
@Setter
@Getter
@Column(columnName = SOURCE_SERVICE_INSTANCE_ID)
@Column(name = SOURCE_SERVICE_INSTANCE_ID)
private String sourceServiceInstanceId;
@Setter
@Getter
@Column(columnName = DEST_SERVICE_ID)
@Column(name = DEST_SERVICE_ID)
private String destServiceId;
@Setter
@Getter
@Column(columnName = DEST_SERVICE_INSTANCE_ID)
@Column(name = DEST_SERVICE_INSTANCE_ID)
private String destServiceInstanceId;
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
......
......@@ -55,24 +55,24 @@ public class ProcessRelationClientSideMetrics extends Metrics {
@Setter
@Getter
@Column(columnName = SERVICE_INSTANCE_ID)
@Column(name = SERVICE_INSTANCE_ID)
private String serviceInstanceId;
@Setter
@Getter
@Column(columnName = SOURCE_PROCESS_ID)
@Column(name = SOURCE_PROCESS_ID)
private String sourceProcessId;
@Setter
@Getter
@Column(columnName = DEST_PROCESS_ID)
@Column(name = DEST_PROCESS_ID)
private String destProcessId;
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
@Setter
@Getter
@Column(columnName = COMPONENT_ID, storageOnly = true)
@Column(name = COMPONENT_ID, storageOnly = true)
@BanyanDB.SeriesID(index = 1)
private int componentId;
......
......@@ -54,24 +54,24 @@ public class ProcessRelationServerSideMetrics extends Metrics {
@Setter
@Getter
@Column(columnName = SERVICE_INSTANCE_ID)
@Column(name = SERVICE_INSTANCE_ID)
private String serviceInstanceId;
@Setter
@Getter
@Column(columnName = SOURCE_PROCESS_ID)
@Column(name = SOURCE_PROCESS_ID)
private String sourceProcessId;
@Setter
@Getter
@Column(columnName = DEST_PROCESS_ID)
@Column(name = DEST_PROCESS_ID)
private String destProcessId;
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
@Setter
@Getter
@Column(columnName = COMPONENT_ID, storageOnly = true)
@Column(name = COMPONENT_ID, storageOnly = true)
@BanyanDB.SeriesID(index = 1)
private int componentId;
......
......@@ -55,21 +55,21 @@ public class ServiceRelationClientSideMetrics extends Metrics {
@Setter
@Getter
@Column(columnName = SOURCE_SERVICE_ID)
@Column(name = SOURCE_SERVICE_ID)
private String sourceServiceId;
@Setter
@Getter
@Column(columnName = DEST_SERVICE_ID)
@Column(name = DEST_SERVICE_ID)
private String destServiceId;
@Setter
@Getter
@Column(columnName = COMPONENT_IDS, storageOnly = true)
@Column(name = COMPONENT_IDS, storageOnly = true)
@ElasticSearch.Keyword
@BanyanDB.SeriesID(index = 1)
private IntList componentIds = new IntList(3);
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
......
......@@ -57,21 +57,21 @@ public class ServiceRelationServerSideMetrics extends Metrics {
@Setter
@Getter
@Column(columnName = SOURCE_SERVICE_ID)
@Column(name = SOURCE_SERVICE_ID)
private String sourceServiceId;
@Setter
@Getter
@Column(columnName = DEST_SERVICE_ID)
@Column(name = DEST_SERVICE_ID)
private String destServiceId;
@Setter
@Getter
@Column(columnName = COMPONENT_IDS, storageOnly = true)
@Column(name = COMPONENT_IDS, storageOnly = true)
@ElasticSearch.Keyword
@BanyanDB.SeriesID(index = 1)
private IntList componentIds = new IntList(3);
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
......
......@@ -56,18 +56,18 @@ public class TagAutocompleteData extends Metrics {
@Setter
@Getter
@Column(columnName = TAG_KEY)
@Column(name = TAG_KEY)
@BanyanDB.SeriesID(index = 1)
private String tagKey;
@Setter
@Getter
@Column(columnName = TAG_VALUE, length = Tag.TAG_LENGTH)
@Column(name = TAG_VALUE, length = Tag.TAG_LENGTH)
@BanyanDB.SeriesID(index = 2)
private String tagValue;
@Setter
@Getter
@Column(columnName = TAG_TYPE)
@Column(name = TAG_TYPE)
@BanyanDB.SeriesID(index = 0)
private String tagType;
......
......@@ -62,49 +62,49 @@ public class SegmentRecord extends Record {
@Setter
@Getter
@Column(columnName = SEGMENT_ID, length = 150)
@Column(name = SEGMENT_ID, length = 150)
private String segmentId;
@Setter
@Getter
@Column(columnName = TRACE_ID, length = 150)
@Column(name = TRACE_ID, length = 150)
@BanyanDB.GlobalIndex
@ElasticSearch.Routing
private String traceId;
@Setter
@Getter
@Column(columnName = SERVICE_ID)
@Column(name = SERVICE_ID)
@BanyanDB.SeriesID(index = 0)
@SQLDatabase.AdditionalEntity(additionalTables = {ADDITIONAL_TAG_TABLE}, reserveOriginalColumns = true)
private String serviceId;
@Setter
@Getter
@Column(columnName = SERVICE_INSTANCE_ID, length = 512)
@Column(name = SERVICE_INSTANCE_ID, length = 512)
@BanyanDB.SeriesID(index = 1)
private String serviceInstanceId;
@Setter
@Getter
@Column(columnName = ENDPOINT_ID, length = 512)
@Column(name = ENDPOINT_ID, length = 512)
private String endpointId;
@Setter
@Getter
@Column(columnName = START_TIME)
@Column(name = START_TIME)
private long startTime;
@Setter
@Getter
@Column(columnName = LATENCY)
@Column(name = LATENCY)
private int latency;
@Setter
@Getter
@Column(columnName = IS_ERROR)
@Column(name = IS_ERROR)
@BanyanDB.SeriesID(index = 2)
private int isError;
@Setter
@Getter
@Column(columnName = DATA_BINARY, storageOnly = true)
@Column(name = DATA_BINARY, storageOnly = true)
private byte[] dataBinary;
@Setter
@Getter
@Column(columnName = TAGS, indexOnly = true, length = Tag.TAG_LENGTH)
@Column(name = TAGS, indexOnly = true, length = Tag.TAG_LENGTH)
@SQLDatabase.AdditionalEntity(additionalTables = {ADDITIONAL_TAG_TABLE})
private List<String> tags;
......
......@@ -18,9 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.manual.service;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.analysis.IDManager;
import org.apache.skywalking.oap.server.core.analysis.Layer;
......@@ -39,7 +36,9 @@ import org.apache.skywalking.oap.server.core.storage.annotation.SQLDatabase;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import static org.apache.logging.log4j.util.Base64Util.encode;
import static org.apache.skywalking.oap.server.core.Const.DOUBLE_COLONS_SPLIT;
......@@ -54,7 +53,7 @@ import static org.apache.skywalking.oap.server.core.Const.DOUBLE_COLONS_SPLIT;
public class ServiceTraffic extends Metrics {
public static final String INDEX_NAME = "service_traffic";
public static final String NAME = "name";
public static final String NAME = "service_traffic_name";
public static final String SHORT_NAME = "short_name";
......@@ -66,32 +65,32 @@ public class ServiceTraffic extends Metrics {
@Setter
@Getter
@Column(columnName = NAME)
@Column(name = NAME)
@ElasticSearch.Column(legacyName = "name")
@ElasticSearch.MatchQuery
@ElasticSearch.Column(columnAlias = "service_traffic_name")
@BanyanDB.SeriesID(index = 1)
private String name = Const.EMPTY_STRING;
@Setter
@Getter
@Column(columnName = SHORT_NAME)
@Column(name = SHORT_NAME)
private String shortName = Const.EMPTY_STRING;
/**
* `normal` Base64 encode(serviceName) + ".1" `un-normal` Base64 encode(serviceName) + ".0"
*/
@Setter
@Column(columnName = SERVICE_ID)
@Column(name = SERVICE_ID)
private String serviceId;
@Setter
@Getter
@Column(columnName = GROUP)
@Column(name = GROUP)
private String group;
@Setter
@Getter
@Column(columnName = LAYER)
@Column(name = LAYER)
@BanyanDB.SeriesID(index = 0)
private Layer layer = Layer.UNDEFINED;
......
......@@ -53,31 +53,31 @@ public class SpanAttachedEventRecord extends Record {
public static final String DATA_BINARY = "data_binary";
public static final String TIMESTAMP = "timestamp";
@Column(columnName = START_TIME_SECOND)
@Column(name = START_TIME_SECOND)
private long startTimeSecond;
@Column(columnName = START_TIME_NANOS)
@Column(name = START_TIME_NANOS)
private int startTimeNanos;
@Column(columnName = EVENT)
@Column(name = EVENT)
@BanyanDB.SeriesID(index = 0)
private String event;
@Column(columnName = END_TIME_SECOND)
@Column(name = END_TIME_SECOND)
private long endTimeSecond;
@Column(columnName = END_TIME_NANOS)
@Column(name = END_TIME_NANOS)
private int endTimeNanos;
@Column(columnName = TRACE_REF_TYPE)
@Column(name = TRACE_REF_TYPE)
private int traceRefType;
@Column(columnName = RELATED_TRACE_ID)
@Column(name = RELATED_TRACE_ID)
@BanyanDB.GlobalIndex
private String relatedTraceId;
@Column(columnName = TRACE_SEGMENT_ID)
@Column(name = TRACE_SEGMENT_ID)
private String traceSegmentId;
@Column(columnName = TRACE_SPAN_ID)
@Column(name = TRACE_SPAN_ID)
private String traceSpanId;
@Column(columnName = DATA_BINARY, storageOnly = true)
@Column(name = DATA_BINARY, storageOnly = true)
private byte[] dataBinary;
@Setter
@Getter
@Column(columnName = TIMESTAMP)
@Column(name = TIMESTAMP)
private long timestamp;
@Override
......
......@@ -50,20 +50,20 @@ public class SampledSlowTraceRecord extends Record {
public static final String LATENCY = "latency";
public static final String TIMESTAMP = "timestamp";
@Column(columnName = SCOPE)
@Column(name = SCOPE)
private int scope;
@Column(columnName = ENTITY_ID)
@Column(name = ENTITY_ID)
@BanyanDB.SeriesID(index = 0)
private String entityId;
@Column(columnName = TRACE_ID, storageOnly = true)
@Column(name = TRACE_ID, storageOnly = true)
private String traceId;
@Column(columnName = URI, storageOnly = true)
@Column(name = URI, storageOnly = true)
private String uri;
@Column(columnName = LATENCY, dataType = Column.ValueDataType.SAMPLED_RECORD)
@Column(name = LATENCY, dataType = Column.ValueDataType.SAMPLED_RECORD)
private long latency;
@Setter
@Getter
@Column(columnName = TIMESTAMP)
@Column(name = TIMESTAMP)
private long timestamp;
@Override
......
......@@ -51,20 +51,20 @@ public class SampledStatus4xxTraceRecord extends Record {
public static final String LATENCY = "latency";
public static final String TIMESTAMP = "timestamp";
@Column(columnName = SCOPE)
@Column(name = SCOPE)
private int scope;
@Column(columnName = ENTITY_ID)
@Column(name = ENTITY_ID)
@BanyanDB.SeriesID(index = 0)
private String entityId;
@Column(columnName = TRACE_ID, storageOnly = true)
@Column(name = TRACE_ID, storageOnly = true)
private String traceId;
@Column(columnName = URI, storageOnly = true)
@Column(name = URI, storageOnly = true)
private String uri;
@Column(columnName = LATENCY, dataType = Column.ValueDataType.SAMPLED_RECORD)
@Column(name = LATENCY, dataType = Column.ValueDataType.SAMPLED_RECORD)
private long latency;
@Setter
@Getter
@Column(columnName = TIMESTAMP)
@Column(name = TIMESTAMP)
private long timestamp;
@Override
......
......@@ -51,20 +51,20 @@ public class SampledStatus5xxTraceRecord extends Record {
public static final String LATENCY = "latency";
public static final String TIMESTAMP = "timestamp";
@Column(columnName = SCOPE)
@Column(name = SCOPE)
private int scope;
@Column(columnName = ENTITY_ID)
@Column(name = ENTITY_ID)
@BanyanDB.SeriesID(index = 0)
private String entityId;
@Column(columnName = TRACE_ID, storageOnly = true)
@Column(name = TRACE_ID, storageOnly = true)
private String traceId;
@Column(columnName = URI, storageOnly = true)
@Column(name = URI, storageOnly = true)
private String uri;
@Column(columnName = LATENCY, dataType = Column.ValueDataType.SAMPLED_RECORD)
@Column(name = LATENCY, dataType = Column.ValueDataType.SAMPLED_RECORD)
private long latency;
@Setter
@Getter
@Column(columnName = TIMESTAMP)
@Column(name = TIMESTAMP)
private long timestamp;
@Override
......
......@@ -18,7 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.meter.function;
import java.util.Objects;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
......@@ -37,6 +36,8 @@ import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import java.util.Objects;
/**
* Histogram includes data range buckets and the amount matched/grouped in the buckets. This is for original histogram
* graph visualization
......@@ -49,12 +50,12 @@ public abstract class HistogramFunction extends Meter implements AcceptableValue
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
@Getter
@Setter
@Column(columnName = DATASET, dataType = Column.ValueDataType.HISTOGRAM, storageOnly = true, defaultValue = 0)
@Column(name = DATASET, dataType = Column.ValueDataType.HISTOGRAM, storageOnly = true, defaultValue = 0)
@BanyanDB.MeasureField
private DataTable dataset = new DataTable(30);
......
......@@ -18,14 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.meter.function;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.IntStream;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.oap.server.core.UnexpectedException;
import org.apache.skywalking.oap.server.core.analysis.meter.Meter;
import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity;
......@@ -43,6 +35,14 @@ import org.apache.skywalking.oap.server.core.storage.annotation.ElasticSearch;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.IntStream;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
/**
* PercentileFunction is the implementation of {@link PercentileMetrics} in the meter system. The major difference is
......@@ -53,22 +53,22 @@ import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
public abstract class PercentileFunction extends Meter implements AcceptableValue<PercentileFunction.PercentileArgument>, MultiIntValuesHolder {
public static final String DATASET = "dataset";
public static final String RANKS = "ranks";
public static final String VALUE = "value";
public static final String VALUE = "datatable_value";
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.LABELED_VALUE, storageOnly = true)
@ElasticSearch.Column(columnAlias = "datatable_value")
@Column(name = VALUE, dataType = Column.ValueDataType.LABELED_VALUE, storageOnly = true)
@ElasticSearch.Column(legacyName = "value")
@BanyanDB.MeasureField
private DataTable percentileValues = new DataTable(10);
@Getter
@Setter
@Column(columnName = DATASET, storageOnly = true)
@Column(name = DATASET, storageOnly = true)
@BanyanDB.MeasureField
private DataTable dataset = new DataTable(30);
/**
......@@ -76,7 +76,7 @@ public abstract class PercentileFunction extends Meter implements AcceptableValu
*/
@Getter
@Setter
@Column(columnName = RANKS, storageOnly = true)
@Column(name = RANKS, storageOnly = true)
@BanyanDB.MeasureField
private IntList ranks = new IntList(10);
......
......@@ -18,7 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.meter.function.avg;
import java.util.Objects;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
......@@ -42,6 +41,8 @@ import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import java.util.Objects;
@MeterFunction(functionName = "avg")
@ToString
public abstract class AvgFunction extends Meter implements AcceptableValue<Long>, LongValueHolder {
......@@ -51,7 +52,7 @@ public abstract class AvgFunction extends Meter implements AcceptableValue<Long>
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
......@@ -60,22 +61,22 @@ public abstract class AvgFunction extends Meter implements AcceptableValue<Long>
*/
@Setter
@Getter
@Column(columnName = InstanceTraffic.SERVICE_ID)
@Column(name = InstanceTraffic.SERVICE_ID)
private String serviceId;
@Getter
@Setter
@Column(columnName = SUMMATION, storageOnly = true)
@Column(name = SUMMATION, storageOnly = true)
@BanyanDB.MeasureField
protected long summation;
@Getter
@Setter
@Column(columnName = COUNT, storageOnly = true)
@Column(name = COUNT, storageOnly = true)
@BanyanDB.MeasureField
protected long count;
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@Column(name = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@BanyanDB.MeasureField
private long value;
......
......@@ -18,11 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.meter.function.avg;
import java.util.Objects;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.oap.server.core.UnexpectedException;
import org.apache.skywalking.oap.server.core.analysis.meter.Meter;
import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity;
......@@ -40,6 +35,11 @@ import org.apache.skywalking.oap.server.core.storage.annotation.ElasticSearch;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import java.util.Objects;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
/**
* AvgHistogram intends to aggregate raw values over the interval (minute, hour or day). When users query a value from
......@@ -56,29 +56,29 @@ import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
@ToString
public abstract class AvgHistogramFunction extends Meter implements AcceptableValue<BucketedValues> {
public static final String DATASET = "dataset";
protected static final String SUMMATION = "summation";
protected static final String COUNT = "count";
protected static final String SUMMATION = "datatable_summation";
protected static final String COUNT = "datatable_count";
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
@Getter
@Setter
@Column(columnName = SUMMATION, storageOnly = true)
@ElasticSearch.Column(columnAlias = "datatable_summation")
@Column(name = SUMMATION, storageOnly = true)
@ElasticSearch.Column(legacyName = "summation")
@BanyanDB.MeasureField
protected DataTable summation = new DataTable(30);
@Getter
@Setter
@Column(columnName = COUNT, storageOnly = true)
@ElasticSearch.Column(columnAlias = "datatable_count")
@Column(name = COUNT, storageOnly = true)
@ElasticSearch.Column(legacyName = "count")
@BanyanDB.MeasureField
protected DataTable count = new DataTable(30);
@Getter
@Setter
@Column(columnName = DATASET, dataType = Column.ValueDataType.HISTOGRAM, storageOnly = true, defaultValue = 0)
@Column(name = DATASET, dataType = Column.ValueDataType.HISTOGRAM, storageOnly = true, defaultValue = 0)
@BanyanDB.MeasureField
private DataTable dataset = new DataTable(30);
......
......@@ -18,18 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.meter.function.avg;
import com.google.common.base.Strings;
import io.vavr.Tuple;
import io.vavr.Tuple2;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collector;
import java.util.stream.IntStream;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.oap.server.core.UnexpectedException;
import org.apache.skywalking.oap.server.core.analysis.meter.Meter;
import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity;
......@@ -49,9 +37,20 @@ import org.apache.skywalking.oap.server.core.storage.annotation.ElasticSearch;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import com.google.common.base.Strings;
import io.vavr.Tuple;
import io.vavr.Tuple2;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collector;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.mapping;
import java.util.stream.IntStream;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
/**
* AvgPercentile intends to calculate percentile based on the average of raw values over the interval(minute, hour or day).
......@@ -70,36 +69,36 @@ public abstract class AvgHistogramPercentileFunction extends Meter implements Ac
private static final String DEFAULT_GROUP = "pD";
public static final String DATASET = "dataset";
public static final String RANKS = "ranks";
public static final String VALUE = "value";
protected static final String SUMMATION = "summation";
protected static final String COUNT = "count";
public static final String VALUE = "datatable_value";
protected static final String SUMMATION = "datatable_summation";
protected static final String COUNT = "datatable_count";
@Setter
@Getter
@Column(columnName = ENTITY_ID)
@Column(name = ENTITY_ID)
@BanyanDB.SeriesID(index = 0)
private String entityId;
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.LABELED_VALUE, storageOnly = true)
@ElasticSearch.Column(columnAlias = "datatable_value")
@Column(name = VALUE, dataType = Column.ValueDataType.LABELED_VALUE, storageOnly = true)
@ElasticSearch.Column(legacyName = "name")
@BanyanDB.MeasureField
private DataTable percentileValues = new DataTable(10);
@Getter
@Setter
@Column(columnName = SUMMATION, storageOnly = true)
@ElasticSearch.Column(columnAlias = "datatable_summation")
@Column(name = SUMMATION, storageOnly = true)
@ElasticSearch.Column(legacyName = "summation")
@BanyanDB.MeasureField
protected DataTable summation = new DataTable(30);
@Getter
@Setter
@Column(columnName = COUNT, storageOnly = true)
@ElasticSearch.Column(columnAlias = "datatable_count")
@Column(name = COUNT, storageOnly = true)
@ElasticSearch.Column(legacyName = "count")
@BanyanDB.MeasureField
protected DataTable count = new DataTable(30);
@Getter
@Setter
@Column(columnName = DATASET, storageOnly = true)
@Column(name = DATASET, storageOnly = true)
@BanyanDB.MeasureField
private DataTable dataset = new DataTable(30);
/**
......@@ -107,7 +106,7 @@ public abstract class AvgHistogramPercentileFunction extends Meter implements Ac
*/
@Getter
@Setter
@Column(columnName = RANKS, storageOnly = true)
@Column(name = RANKS, storageOnly = true)
private IntList ranks = new IntList(10);
private boolean isCalculated = false;
......
......@@ -18,11 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.meter.function.avg;
import java.util.Objects;
import java.util.Set;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.apache.skywalking.oap.server.core.UnexpectedException;
import org.apache.skywalking.oap.server.core.analysis.manual.instance.InstanceTraffic;
import org.apache.skywalking.oap.server.core.analysis.meter.Meter;
......@@ -40,17 +35,22 @@ import org.apache.skywalking.oap.server.core.storage.annotation.ElasticSearch;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import java.util.Objects;
import java.util.Set;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@MeterFunction(functionName = "avgLabeled")
@ToString
public abstract class AvgLabeledFunction extends Meter implements AcceptableValue<DataTable>, LabeledValueHolder {
protected static final String SUMMATION = "summation";
protected static final String COUNT = "count";
protected static final String VALUE = "value";
protected static final String SUMMATION = "datatable_summation";
protected static final String COUNT = "datatable_count";
protected static final String VALUE = "datatable_value";
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
......@@ -59,25 +59,25 @@ public abstract class AvgLabeledFunction extends Meter implements AcceptableValu
*/
@Setter
@Getter
@Column(columnName = InstanceTraffic.SERVICE_ID)
@Column(name = InstanceTraffic.SERVICE_ID)
private String serviceId;
@Getter
@Setter
@Column(columnName = SUMMATION, storageOnly = true)
@ElasticSearch.Column(columnAlias = "datatable_summation")
@Column(name = SUMMATION, storageOnly = true)
@ElasticSearch.Column(legacyName = "summation")
@BanyanDB.MeasureField
protected DataTable summation = new DataTable(30);
@Getter
@Setter
@Column(columnName = COUNT, storageOnly = true)
@ElasticSearch.Column(columnAlias = "datatable_count")
@Column(name = COUNT, storageOnly = true)
@ElasticSearch.Column(legacyName = "count")
@BanyanDB.MeasureField
protected DataTable count = new DataTable(30);
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.LABELED_VALUE, storageOnly = true)
@ElasticSearch.Column(columnAlias = "datatable_value")
@Column(name = VALUE, dataType = Column.ValueDataType.LABELED_VALUE, storageOnly = true)
@ElasticSearch.Column(legacyName = "value")
@BanyanDB.MeasureField
private DataTable value = new DataTable(30);
......
......@@ -18,7 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.meter.function.latest;
import java.util.Objects;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
......@@ -41,6 +40,8 @@ import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import java.util.Objects;
@MeterFunction(functionName = "latest")
@ToString
public abstract class LatestFunction extends Meter implements AcceptableValue<Long>, LongValueHolder {
......@@ -48,7 +49,7 @@ public abstract class LatestFunction extends Meter implements AcceptableValue<Lo
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
......@@ -57,12 +58,12 @@ public abstract class LatestFunction extends Meter implements AcceptableValue<Lo
*/
@Setter
@Getter
@Column(columnName = InstanceTraffic.SERVICE_ID)
@Column(name = InstanceTraffic.SERVICE_ID)
private String serviceId;
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Latest)
@Column(name = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Latest)
@BanyanDB.MeasureField
private long value;
......
......@@ -18,7 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.meter.function.sum;
import java.util.Objects;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
......@@ -41,6 +40,8 @@ import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import java.util.Objects;
@ToString
@MeterFunction(functionName = "sum")
public abstract class SumFunction extends Meter implements AcceptableValue<Long>, LongValueHolder {
......@@ -48,18 +49,18 @@ public abstract class SumFunction extends Meter implements AcceptableValue<Long>
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
@Setter
@Getter
@Column(columnName = InstanceTraffic.SERVICE_ID)
@Column(name = InstanceTraffic.SERVICE_ID)
private String serviceId;
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Sum)
@Column(name = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Sum)
@BanyanDB.MeasureField
private long value;
......
......@@ -18,17 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.meter.function.sum;
import com.google.common.base.Strings;
import io.vavr.Tuple;
import io.vavr.Tuple2;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collector;
import java.util.stream.IntStream;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.oap.server.core.UnexpectedException;
import org.apache.skywalking.oap.server.core.analysis.meter.Meter;
import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity;
......@@ -48,9 +37,19 @@ import org.apache.skywalking.oap.server.core.storage.annotation.ElasticSearch;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import com.google.common.base.Strings;
import io.vavr.Tuple;
import io.vavr.Tuple2;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collector;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.mapping;
import java.util.stream.IntStream;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
/**
* SumPercentile intends to calculate percentile based on the summary of raw values over the interval(minute, hour or day).
......@@ -61,24 +60,24 @@ public abstract class SumHistogramPercentileFunction extends Meter implements Ac
private static final String DEFAULT_GROUP = "pD";
public static final String DATASET = "dataset";
public static final String RANKS = "ranks";
public static final String VALUE = "value";
protected static final String SUMMATION = "summation";
public static final String VALUE = "datatable_value";
protected static final String SUMMATION = "datatable_summation";
@Setter
@Getter
@Column(columnName = ENTITY_ID)
@Column(name = ENTITY_ID)
@BanyanDB.SeriesID(index = 0)
private String entityId;
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.LABELED_VALUE, storageOnly = true)
@ElasticSearch.Column(columnAlias = "datatable_value")
@Column(name = VALUE, dataType = Column.ValueDataType.LABELED_VALUE, storageOnly = true)
@ElasticSearch.Column(legacyName = "value")
@BanyanDB.MeasureField
private DataTable percentileValues = new DataTable(10);
@Getter
@Setter
@Column(columnName = SUMMATION, storageOnly = true)
@ElasticSearch.Column(columnAlias = "datatable_summation")
@Column(name = SUMMATION, storageOnly = true)
@ElasticSearch.Column(legacyName = "summation")
@BanyanDB.MeasureField
protected DataTable summation = new DataTable(30);
/**
......@@ -86,7 +85,7 @@ public abstract class SumHistogramPercentileFunction extends Meter implements Ac
*/
@Getter
@Setter
@Column(columnName = RANKS, storageOnly = true)
@Column(name = RANKS, storageOnly = true)
@BanyanDB.MeasureField
private IntList ranks = new IntList(10);
......
......@@ -18,7 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.meter.function.sumpermin;
import java.util.Objects;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
......@@ -41,6 +40,8 @@ import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import java.util.Objects;
@ToString
@MeterFunction(functionName = "sumPerMin")
public abstract class SumPerMinFunction extends Meter implements AcceptableValue<Long>, LongValueHolder {
......@@ -49,24 +50,24 @@ public abstract class SumPerMinFunction extends Meter implements AcceptableValue
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
@Setter
@Getter
@Column(columnName = InstanceTraffic.SERVICE_ID)
@Column(name = InstanceTraffic.SERVICE_ID)
private String serviceId;
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@Column(name = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@BanyanDB.MeasureField
private long value;
@Getter
@Setter
@Column(columnName = TOTAL, storageOnly = true)
@Column(name = TOTAL, storageOnly = true)
@BanyanDB.MeasureField
private long total;
......
......@@ -18,7 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.meter.function.sumpermin;
import java.util.Objects;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.UnexpectedException;
......@@ -40,6 +39,8 @@ import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import java.util.Objects;
@MeterFunction(functionName = "sumPerMinLabeled")
public abstract class SumPerMinLabeledFunction extends Meter implements AcceptableValue<DataTable>, LabeledValueHolder {
......@@ -48,24 +49,24 @@ public abstract class SumPerMinLabeledFunction extends Meter implements Acceptab
@Setter
@Getter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
@Setter
@Getter
@Column(columnName = InstanceTraffic.SERVICE_ID)
@Column(name = InstanceTraffic.SERVICE_ID)
private String serviceId;
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.LABELED_VALUE, storageOnly = true)
@Column(name = VALUE, dataType = Column.ValueDataType.LABELED_VALUE, storageOnly = true)
@BanyanDB.MeasureField
private DataTable value = new DataTable(30);
@Getter
@Setter
@Column(columnName = TOTAL, storageOnly = true)
@Column(name = TOTAL, storageOnly = true)
@BanyanDB.MeasureField
private DataTable total = new DataTable(30);
......@@ -202,4 +203,4 @@ public abstract class SumPerMinLabeledFunction extends Meter implements Acceptab
public int hashCode() {
return Objects.hash(entityId, getTimeBucket());
}
}
\ No newline at end of file
}
......@@ -46,28 +46,28 @@ public abstract class ApdexMetrics extends Metrics implements IntValueHolder {
protected static final String S_NUM = "s_num";
// Level: tolerated
protected static final String T_NUM = "t_num";
protected static final String VALUE = "value";
protected static final String VALUE = "int_value";
@Getter
@Setter
@Column(columnName = TOTAL_NUM, storageOnly = true)
@Column(name = TOTAL_NUM, storageOnly = true)
@BanyanDB.MeasureField
private long totalNum;
@Getter
@Setter
@Column(columnName = S_NUM, storageOnly = true)
@Column(name = S_NUM, storageOnly = true)
@BanyanDB.MeasureField
private long sNum;
@Getter
@Setter
@Column(columnName = T_NUM, storageOnly = true)
@Column(name = T_NUM, storageOnly = true)
@BanyanDB.MeasureField
private long tNum;
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@Column(name = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@ElasticSearch.Column(legacyName = "value")
@BanyanDB.MeasureField
@ElasticSearch.Column(columnAlias = "int_value")
private int value;
@Entrance
......
......@@ -35,12 +35,12 @@ public abstract class CPMMetrics extends Metrics implements LongValueHolder {
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@Column(name = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@BanyanDB.MeasureField
private long value;
@Getter
@Setter
@Column(columnName = TOTAL, storageOnly = true)
@Column(name = TOTAL, storageOnly = true)
@BanyanDB.MeasureField
private long total;
......
......@@ -34,7 +34,7 @@ public abstract class CountMetrics extends Metrics implements LongValueHolder {
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Sum)
@Column(name = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Sum)
@BanyanDB.MeasureField
private long value;
......
......@@ -32,25 +32,25 @@ import org.apache.skywalking.oap.server.core.storage.annotation.ElasticSearch;
@MetricsFunction(functionName = "doubleAvg")
public abstract class DoubleAvgMetrics extends Metrics implements DoubleValueHolder {
protected static final String SUMMATION = "summation";
protected static final String SUMMATION = "double_summation";
protected static final String COUNT = "count";
protected static final String VALUE = "value";
protected static final String VALUE = "double_value";
@Getter
@Setter
@Column(columnName = SUMMATION, storageOnly = true)
@ElasticSearch.Column(columnAlias = "double_summation")
@Column(name = SUMMATION, storageOnly = true)
@ElasticSearch.Column(legacyName = "summation")
@BanyanDB.MeasureField
private double summation;
@Getter
@Setter
@Column(columnName = COUNT, storageOnly = true)
@Column(name = COUNT, storageOnly = true)
@BanyanDB.MeasureField
private long count;
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@ElasticSearch.Column(columnAlias = "double_value")
@Column(name = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@ElasticSearch.Column(legacyName = "value")
@BanyanDB.MeasureField
private double value;
......
......@@ -84,38 +84,38 @@ public class Event extends Metrics {
return new StorageID().append(UUID, getUuid());
}
@Column(columnName = UUID)
@Column(name = UUID)
@BanyanDB.SeriesID(index = 0)
private String uuid;
@Column(columnName = SERVICE)
@Column(name = SERVICE)
private String service;
@Column(columnName = SERVICE_INSTANCE)
@Column(name = SERVICE_INSTANCE)
private String serviceInstance;
@Column(columnName = ENDPOINT)
@Column(name = ENDPOINT)
private String endpoint;
@Column(columnName = NAME)
@Column(name = NAME)
private String name;
@Column(columnName = TYPE)
@Column(name = TYPE)
private String type;
@Column(columnName = MESSAGE)
@Column(name = MESSAGE)
private String message;
@Column(columnName = PARAMETERS, storageOnly = true, length = PARAMETER_MAX_LENGTH)
@Column(name = PARAMETERS, storageOnly = true, length = PARAMETER_MAX_LENGTH)
private String parameters;
@Column(columnName = START_TIME)
@Column(name = START_TIME)
private long startTime;
@Column(columnName = END_TIME)
@Column(name = END_TIME)
private long endTime;
@Column(columnName = LAYER)
@Column(name = LAYER)
private Layer layer;
@Override
......
......@@ -42,7 +42,7 @@ public abstract class HistogramMetrics extends Metrics {
@Getter
@Setter
@Column(columnName = DATASET, dataType = Column.ValueDataType.HISTOGRAM, storageOnly = true, defaultValue = 0)
@Column(name = DATASET, dataType = Column.ValueDataType.HISTOGRAM, storageOnly = true, defaultValue = 0)
@BanyanDB.MeasureField
private DataTable dataset = new DataTable(30);
......
......@@ -37,17 +37,17 @@ public abstract class LongAvgMetrics extends Metrics implements LongValueHolder
@Getter
@Setter
@Column(columnName = SUMMATION, storageOnly = true)
@Column(name = SUMMATION, storageOnly = true)
@BanyanDB.MeasureField
protected long summation;
@Getter
@Setter
@Column(columnName = COUNT, storageOnly = true)
@Column(name = COUNT, storageOnly = true)
@BanyanDB.MeasureField
protected long count;
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@Column(name = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@BanyanDB.MeasureField
private long value;
......
......@@ -33,7 +33,7 @@ public abstract class MaxDoubleMetrics extends Metrics implements DoubleValueHol
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.COMMON_VALUE)
@Column(name = VALUE, dataType = Column.ValueDataType.COMMON_VALUE)
@BanyanDB.MeasureField
private double value;
......
......@@ -33,7 +33,7 @@ public abstract class MaxLongMetrics extends Metrics implements LongValueHolder
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.COMMON_VALUE)
@Column(name = VALUE, dataType = Column.ValueDataType.COMMON_VALUE)
@BanyanDB.MeasureField
private long value;
......
......@@ -49,7 +49,7 @@ public abstract class Metrics extends StreamData implements StorageData {
*/
@Getter
@Setter
@Column(columnName = TIME_BUCKET)
@Column(name = TIME_BUCKET)
private long timeBucket;
/**
......
......@@ -33,7 +33,7 @@ public abstract class MinDoubleMetrics extends Metrics implements DoubleValueHol
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.COMMON_VALUE)
@Column(name = VALUE, dataType = Column.ValueDataType.COMMON_VALUE)
@BanyanDB.MeasureField
private double value = Double.MAX_VALUE;
......
......@@ -33,7 +33,7 @@ public abstract class MinLongMetrics extends Metrics implements LongValueHolder
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.COMMON_VALUE)
@Column(name = VALUE, dataType = Column.ValueDataType.COMMON_VALUE)
@BanyanDB.MeasureField
private long value = Long.MAX_VALUE;
......
......@@ -35,17 +35,17 @@ public abstract class PercentMetrics extends Metrics implements IntValueHolder {
@Getter
@Setter
@Column(columnName = TOTAL, storageOnly = true)
@Column(name = TOTAL, storageOnly = true)
@BanyanDB.MeasureField
private long total;
@Getter
@Setter
@Column(columnName = PERCENTAGE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@Column(name = PERCENTAGE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@BanyanDB.MeasureField
private int percentage;
@Getter
@Setter
@Column(columnName = MATCH, storageOnly = true)
@Column(name = MATCH, storageOnly = true)
private long match;
@Entrance
......
......@@ -18,11 +18,6 @@
package org.apache.skywalking.oap.server.core.analysis.metrics;
import java.util.Comparator;
import java.util.List;
import java.util.stream.IntStream;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.Arg;
import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.Entrance;
import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.MetricsFunction;
......@@ -30,6 +25,11 @@ import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.SourceF
import org.apache.skywalking.oap.server.core.storage.annotation.BanyanDB;
import org.apache.skywalking.oap.server.core.storage.annotation.Column;
import org.apache.skywalking.oap.server.core.storage.annotation.ElasticSearch;
import java.util.Comparator;
import java.util.List;
import java.util.stream.IntStream;
import lombok.Getter;
import lombok.Setter;
/**
* Percentile is a better implementation than deprecated PxxMetrics in older releases.
......@@ -40,7 +40,7 @@ import org.apache.skywalking.oap.server.core.storage.annotation.ElasticSearch;
@MetricsFunction(functionName = "percentile")
public abstract class PercentileMetrics extends Metrics implements MultiIntValuesHolder {
protected static final String DATASET = "dataset";
protected static final String VALUE = "value";
protected static final String VALUE = "datatable_value";
protected static final String PRECISION = "precision";
private static final int[] RANKS = {
......@@ -53,18 +53,18 @@ public abstract class PercentileMetrics extends Metrics implements MultiIntValue
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.LABELED_VALUE, storageOnly = true)
@ElasticSearch.Column(columnAlias = "datatable_value")
@Column(name = VALUE, dataType = Column.ValueDataType.LABELED_VALUE, storageOnly = true)
@ElasticSearch.Column(legacyName = "value")
@BanyanDB.MeasureField
private DataTable percentileValues;
@Getter
@Setter
@Column(columnName = PRECISION, storageOnly = true)
@Column(name = PRECISION, storageOnly = true)
@BanyanDB.MeasureField
private int precision;
@Getter
@Setter
@Column(columnName = DATASET, storageOnly = true)
@Column(name = DATASET, storageOnly = true)
@BanyanDB.MeasureField
private DataTable dataset;
......
......@@ -34,17 +34,17 @@ public abstract class RateMetrics extends Metrics implements IntValueHolder {
@Getter
@Setter
@Column(columnName = DENOMINATOR)
@Column(name = DENOMINATOR)
@BanyanDB.MeasureField
private long denominator;
@Getter
@Setter
@Column(columnName = PERCENTAGE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@Column(name = PERCENTAGE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Avg)
@BanyanDB.MeasureField
private int percentage;
@Getter
@Setter
@Column(columnName = NUMERATOR)
@Column(name = NUMERATOR)
@BanyanDB.MeasureField
private long numerator;
......
......@@ -34,7 +34,7 @@ public abstract class SumMetrics extends Metrics implements LongValueHolder {
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Sum)
@Column(name = VALUE, dataType = Column.ValueDataType.COMMON_VALUE, function = Function.Sum)
@BanyanDB.MeasureField
private long value;
......
......@@ -34,6 +34,6 @@ public abstract class Record implements StorageData {
*/
@Getter
@Setter
@Column(columnName = TIME_BUCKET)
@Column(name = TIME_BUCKET)
private long timeBucket;
}
......@@ -37,21 +37,21 @@ public abstract class TopN extends Record implements ComparableStorageData {
@Getter
@Setter
@Column(columnName = LATENCY, dataType = Column.ValueDataType.SAMPLED_RECORD)
@Column(name = LATENCY, dataType = Column.ValueDataType.SAMPLED_RECORD)
@BanyanDB.IndexRule(indexType = BanyanDB.IndexRule.IndexType.TREE)
private long latency;
@Getter
@Setter
@Column(columnName = TRACE_ID, storageOnly = true)
@Column(name = TRACE_ID, storageOnly = true)
private String traceId;
@Getter
@Setter
@Column(columnName = ENTITY_ID, length = 512)
@Column(name = ENTITY_ID, length = 512)
@BanyanDB.SeriesID(index = 0)
private String entityId;
@Getter
@Setter
@Column(columnName = TIMESTAMP)
@Column(name = TIMESTAMP)
private long timestamp;
@Override
......
......@@ -57,38 +57,38 @@ public class BrowserErrorLogRecord extends Record {
@Setter
@Getter
@Column(columnName = UNIQUE_ID)
@Column(name = UNIQUE_ID)
private String uniqueId;
@Setter
@Getter
@Column(columnName = SERVICE_ID)
@Column(name = SERVICE_ID)
@BanyanDB.SeriesID(index = 0)
private String serviceId;
@Setter
@Getter
@Column(columnName = SERVICE_VERSION_ID, length = 512)
@Column(name = SERVICE_VERSION_ID, length = 512)
private String serviceVersionId;
@Setter
@Getter
@Column(columnName = PAGE_PATH_ID, length = 512)
@Column(name = PAGE_PATH_ID, length = 512)
private String pagePathId;
@Setter
@Getter
@Column(columnName = TIMESTAMP)
@Column(name = TIMESTAMP)
private long timestamp;
@Setter
@Getter
@Column(columnName = ERROR_CATEGORY)
@Column(name = ERROR_CATEGORY)
private int errorCategory;
@Setter
@Getter
@Column(columnName = DATA_BINARY)
@Column(name = DATA_BINARY)
private byte[] dataBinary;
public static class Builder implements StorageBuilder<BrowserErrorLogRecord> {
......
......@@ -47,16 +47,16 @@ public class UITemplate extends ManagementData {
public static final String UPDATE_TIME = "update_time";
public static final String DISABLED = "disabled";
@Column(columnName = TEMPLATE_ID)
@Column(name = TEMPLATE_ID)
private String templateId;
/**
* Configuration in JSON format.
*/
@Column(columnName = CONFIGURATION, storageOnly = true, length = 1_000_000)
@Column(name = CONFIGURATION, storageOnly = true, length = 1_000_000)
private String configuration;
@Column(columnName = UPDATE_TIME)
@Column(name = UPDATE_TIME)
private long updateTime;
@Column(columnName = DISABLED)
@Column(name = DISABLED)
private int disabled;
@Override
......
......@@ -50,18 +50,18 @@ public class EBPFProfilingDataRecord extends Record {
public static final String DATA_BINARY = "dump_binary";
public static final String UPLOAD_TIME = "upload_time";
@Column(columnName = TASK_ID, length = 600)
@Column(name = TASK_ID, length = 600)
@BanyanDB.SeriesID(index = 0)
private String taskId;
@Column(columnName = SCHEDULE_ID, length = 600)
@Column(name = SCHEDULE_ID, length = 600)
private String scheduleId;
@Column(columnName = STACK_ID_LIST)
@Column(name = STACK_ID_LIST)
private String stackIdList;
@Column(columnName = TARGET_TYPE)
@Column(name = TARGET_TYPE)
private int targetType;
@Column(columnName = DATA_BINARY, storageOnly = true)
@Column(name = DATA_BINARY, storageOnly = true)
private byte[] dataBinary;
@Column(columnName = UPLOAD_TIME)
@Column(name = UPLOAD_TIME)
private long uploadTime;
@Override
......
......@@ -62,15 +62,15 @@ public class EBPFProfilingScheduleRecord extends Metrics {
public static final String END_TIME = "end_time";
public static final String EBPF_PROFILING_SCHEDULE_ID = "ebpf_profiling_schedule_id";
@Column(columnName = TASK_ID, length = 600)
@Column(name = TASK_ID, length = 600)
private String taskId;
@Column(columnName = PROCESS_ID, length = 600)
@Column(name = PROCESS_ID, length = 600)
private String processId;
@Column(columnName = START_TIME)
@Column(name = START_TIME)
private long startTime;
@Column(columnName = END_TIME)
@Column(name = END_TIME)
private long endTime;
@Column(columnName = EBPF_PROFILING_SCHEDULE_ID)
@Column(name = EBPF_PROFILING_SCHEDULE_ID)
@BanyanDB.SeriesID(index = 0)
private String scheduleId;
......
......@@ -59,28 +59,28 @@ public class EBPFProfilingTaskRecord extends NoneStream {
public static final int PROCESS_LABELS_JSON_MAX_LENGTH = 1000;
public static final int EXTENSION_CONFIG_JSON_MAX_LENGTH = 1000;
@Column(columnName = LOGICAL_ID)
@Column(name = LOGICAL_ID)
private String logicalId;
@Column(columnName = SERVICE_ID)
@Column(name = SERVICE_ID)
@BanyanDB.SeriesID(index = 0)
private String serviceId;
@Column(columnName = PROCESS_LABELS_JSON, length = PROCESS_LABELS_JSON_MAX_LENGTH)
@Column(name = PROCESS_LABELS_JSON, length = PROCESS_LABELS_JSON_MAX_LENGTH)
private String processLabelsJson;
@Column(columnName = INSTANCE_ID, length = 512)
@Column(name = INSTANCE_ID, length = 512)
private String instanceId;
@Column(columnName = START_TIME)
@Column(name = START_TIME)
private long startTime;
@Column(columnName = TRIGGER_TYPE)
@Column(name = TRIGGER_TYPE)
private int triggerType = EBPFProfilingTriggerType.UNKNOWN.value();
@Column(columnName = FIXED_TRIGGER_DURATION)
@Column(name = FIXED_TRIGGER_DURATION)
private long fixedTriggerDuration;
@Column(columnName = TARGET_TYPE)
@Column(name = TARGET_TYPE)
private int targetType = EBPFProfilingTargetType.UNKNOWN.value();
@Column(columnName = CREATE_TIME)
@Column(name = CREATE_TIME)
private long createTime;
@Column(columnName = LAST_UPDATE_TIME)
@Column(name = LAST_UPDATE_TIME)
private long lastUpdateTime;
@Column(columnName = EXTENSION_CONFIG_JSON, length = EXTENSION_CONFIG_JSON_MAX_LENGTH, storageOnly = true)
@Column(name = EXTENSION_CONFIG_JSON, length = EXTENSION_CONFIG_JSON_MAX_LENGTH, storageOnly = true)
private String extensionConfigJson;
@Override
......
......@@ -50,18 +50,18 @@ public class ProfileTaskLogRecord extends Record {
public static final String OPERATION_TIME = "operation_time";
public static final String TIMESTAMP = "timestamp";
@Column(columnName = TASK_ID)
@Column(name = TASK_ID)
private String taskId;
@Column(columnName = INSTANCE_ID)
@Column(name = INSTANCE_ID)
@BanyanDB.SeriesID(index = 0)
private String instanceId;
@Column(columnName = OPERATION_TYPE, storageOnly = true)
@Column(name = OPERATION_TYPE, storageOnly = true)
private int operationType;
@Column(columnName = OPERATION_TIME)
@Column(name = OPERATION_TIME)
private long operationTime;
@Getter
@Setter
@Column(columnName = TIMESTAMP)
@Column(name = TIMESTAMP)
private long timestamp;
@Override
......
......@@ -59,24 +59,24 @@ public class ProfileTaskRecord extends NoneStream {
return new StorageID().append(TASK_ID, taskId);
}
@Column(columnName = SERVICE_ID)
@Column(name = SERVICE_ID)
@BanyanDB.SeriesID(index = 0)
private String serviceId;
@Column(columnName = ENDPOINT_NAME, length = 512)
@Column(name = ENDPOINT_NAME, length = 512)
private String endpointName;
@Column(columnName = TASK_ID)
@Column(name = TASK_ID)
private String taskId;
@Column(columnName = START_TIME)
@Column(name = START_TIME)
private long startTime;
@Column(columnName = DURATION)
@Column(name = DURATION)
private int duration;
@Column(columnName = MIN_DURATION_THRESHOLD)
@Column(name = MIN_DURATION_THRESHOLD)
private int minDurationThreshold;
@Column(columnName = DUMP_PERIOD)
@Column(name = DUMP_PERIOD)
private int dumpPeriod;
@Column(columnName = CREATE_TIME)
@Column(name = CREATE_TIME)
private long createTime;
@Column(columnName = MAX_SAMPLING_COUNT)
@Column(name = MAX_SAMPLING_COUNT)
private int maxSamplingCount;
public static class Builder implements StorageBuilder<ProfileTaskRecord> {
......
......@@ -51,19 +51,19 @@ public class ProfileThreadSnapshotRecord extends Record {
public static final String SEQUENCE = "sequence";
public static final String STACK_BINARY = "stack_binary";
@Column(columnName = TASK_ID)
@Column(name = TASK_ID)
@SQLDatabase.QueryUnifiedIndex(withColumns = {SEGMENT_ID})
private String taskId;
@Column(columnName = SEGMENT_ID)
@Column(name = SEGMENT_ID)
@SQLDatabase.QueryUnifiedIndex(withColumns = {SEQUENCE})
@SQLDatabase.QueryUnifiedIndex(withColumns = {DUMP_TIME})
@BanyanDB.SeriesID(index = 0)
private String segmentId;
@Column(columnName = DUMP_TIME)
@Column(name = DUMP_TIME)
private long dumpTime;
@Column(columnName = SEQUENCE)
@Column(name = SEQUENCE)
private int sequence;
@Column(columnName = STACK_BINARY)
@Column(name = STACK_BINARY)
private byte[] stackBinary;
@Override
......
......@@ -18,13 +18,13 @@
package org.apache.skywalking.oap.server.core.storage.annotation;
import org.apache.skywalking.oap.server.core.query.sql.Function;
import org.apache.skywalking.oap.server.core.storage.model.ModelManipulator;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import lombok.Getter;
import org.apache.skywalking.oap.server.core.query.sql.Function;
import org.apache.skywalking.oap.server.core.storage.model.ModelManipulator;
/**
* Data column of all persistent entity.
......@@ -33,10 +33,14 @@ import org.apache.skywalking.oap.server.core.storage.model.ModelManipulator;
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
/**
* column name in the storage. Most of the storage will keep the name consistently. But in same cases, this name
* Column name in the storage. Most of the storage will keep the name consistently. But in same cases, this name
* could be a keyword, then, the implementation will use {@link ModelManipulator} to replace the column name.
* <p>
* Be careful not to use the same column name for two models with the same type (metrics/record), which causes
* column conflicts in storage implementations that merge all metrics/records models into a single table/index.
* Also check {@code legacyName()}.
*/
String columnName();
String name();
/**
* The function is used in aggregation query.
......
......@@ -18,12 +18,12 @@
package org.apache.skywalking.oap.server.core.storage.annotation;
import org.apache.skywalking.oap.server.core.analysis.record.Record;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import lombok.Getter;
import org.apache.skywalking.oap.server.core.analysis.record.Record;
/**
* ElasticSearch annotation is a holder including all annotations for ElasticSearch storage
......@@ -95,7 +95,7 @@ public @interface ElasticSearch {
* between these 2 storage modes rather than use this alias.
*/
@Deprecated
String columnAlias();
String legacyName();
}
......
......@@ -18,39 +18,28 @@
package org.apache.skywalking.oap.server.core.storage.model;
import lombok.Getter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.oap.server.core.storage.annotation.Column;
/**
* Short column name unsupported for now. No define in @Column annotation. The storage implementation need to use name
* to do match.
*/
@Slf4j
@Getter
@ToString
public class ColumnName {
private final String modelName;
private String fullName;
private String storageName = null;
private final String name;
private String storageName;
public ColumnName(String modelName, String fullName) {
this.modelName = modelName;
this.fullName = fullName;
}
public String getName() {
return fullName;
}
public String getStorageName() {
return storageName != null ? storageName : fullName;
public ColumnName(Column column) {
storageName = name = column.name();
}
public void overrideName(String oldName, String storageName) {
if (fullName.equals(oldName)) {
log.debug(
"Model {} column {} has been override. The new column name is {}.",
modelName, oldName, storageName
);
if (name.equals(oldName)) {
this.storageName = storageName;
}
}
......
......@@ -36,7 +36,7 @@ public class ElasticSearchExtension {
*/
private final ElasticSearch.MatchQuery.AnalyzerType analyzer;
private final String columnAlias;
private final String legacyColumnName;
private final boolean isKeyword;
......
......@@ -185,7 +185,7 @@ public class StorageModels implements IModelManager, ModelCreator, ModelManipula
indexDefinitions.forEach(indexDefinition -> {
sqlDatabaseExtension.appendIndex(new SQLDatabaseExtension.MultiColumnsIndex(
column.columnName(),
column.name(),
indexDefinition.withColumns()
));
});
......@@ -198,7 +198,7 @@ public class StorageModels implements IModelManager, ModelCreator, ModelManipula
final ElasticSearch.Routing routingColumn = field.getAnnotation(ElasticSearch.Routing.class);
ElasticSearchExtension elasticSearchExtension = new ElasticSearchExtension(
elasticSearchAnalyzer == null ? null : elasticSearchAnalyzer.analyzer(),
elasticSearchColumn == null ? null : elasticSearchColumn.columnAlias(),
elasticSearchColumn == null ? null : elasticSearchColumn.legacyName(),
keywordColumn != null,
routingColumn != null
);
......@@ -223,10 +223,7 @@ public class StorageModels implements IModelManager, ModelCreator, ModelManipula
);
final ModelColumn modelColumn = new ModelColumn(
new ColumnName(
modelName,
column.columnName()
),
new ColumnName(column),
field.getType(),
field.getGenericType(),
column.storageOnly(),
......@@ -253,12 +250,12 @@ public class StorageModels implements IModelManager, ModelCreator, ModelManipula
modelColumns.add(modelColumn);
if (log.isDebugEnabled()) {
log.debug("The field named [{}] with the [{}] type", column.columnName(), field.getType());
log.debug("The field named [{}] with the [{}] type", column.name(), field.getType());
}
if (column.dataType().isValue()) {
ValueColumnMetadata.INSTANCE.putIfAbsent(
modelName, column.columnName(), column.dataType(), column.function(),
column.defaultValue(), scopeId
modelName, column.name(),
column.dataType(), column.function(), column.defaultValue(), scopeId
);
}
}
......@@ -290,6 +287,7 @@ public class StorageModels implements IModelManager, ModelCreator, ModelManipula
private void followColumnNameRules(Model model) {
columnNameOverrideRule.forEach((oldName, newName) -> {
model.getColumns().forEach(column -> {
log.debug("Override model column name: [{}] {} -> {}.", model.getName(), oldName, newName);
column.getColumnName().overrideName(oldName, newName);
column.getSqlDatabaseExtension()
.getIndices()
......@@ -317,8 +315,8 @@ public class StorageModels implements IModelManager, ModelCreator, ModelManipula
return models;
}
private class ShardingKeyChecker {
private ArrayList<ModelColumn> keys = new ArrayList<>();
private static class ShardingKeyChecker {
private final ArrayList<ModelColumn> keys = new ArrayList<>();
/**
* @throws IllegalStateException if sharding key indices are conflicting.
......
......@@ -52,12 +52,12 @@ public class ZipkinServiceRelationTraffic extends Metrics {
@Setter
@Getter
@Column(columnName = SERVICE_NAME)
@Column(name = SERVICE_NAME)
@BanyanDB.SeriesID(index = 0)
private String serviceName;
@Setter
@Getter
@Column(columnName = REMOTE_SERVICE_NAME)
@Column(name = REMOTE_SERVICE_NAME)
@BanyanDB.SeriesID(index = 1)
private String remoteServiceName;
......
......@@ -54,12 +54,12 @@ public class ZipkinServiceSpanTraffic extends Metrics {
@Setter
@Getter
@Column(columnName = SERVICE_NAME)
@Column(name = SERVICE_NAME)
@BanyanDB.SeriesID(index = 0)
private String serviceName;
@Setter
@Getter
@Column(columnName = SPAN_NAME)
@Column(name = SPAN_NAME)
@BanyanDB.SeriesID(index = 1)
private String spanName = Const.EMPTY_STRING;
......
......@@ -51,7 +51,7 @@ public class ZipkinServiceTraffic extends Metrics {
@Setter
@Getter
@Column(columnName = SERVICE_NAME)
@Column(name = SERVICE_NAME)
@BanyanDB.SeriesID(index = 0)
private String serviceName = Const.EMPTY_STRING;
......
......@@ -21,8 +21,6 @@ package org.apache.skywalking.oap.server.core.zipkin;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.List;
import java.util.Map;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.Const;
......@@ -34,9 +32,9 @@ import org.apache.skywalking.oap.server.core.storage.ShardingAlgorithm;
import org.apache.skywalking.oap.server.core.storage.StorageID;
import org.apache.skywalking.oap.server.core.storage.annotation.BanyanDB;
import org.apache.skywalking.oap.server.core.storage.annotation.Column;
import org.apache.skywalking.oap.server.core.storage.annotation.ElasticSearch;
import org.apache.skywalking.oap.server.core.storage.annotation.SQLDatabase;
import org.apache.skywalking.oap.server.core.storage.annotation.SuperDataset;
import org.apache.skywalking.oap.server.core.storage.annotation.ElasticSearch;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
......@@ -45,6 +43,9 @@ import org.apache.skywalking.oap.server.library.util.StringUtil;
import zipkin2.Endpoint;
import zipkin2.Span;
import java.util.List;
import java.util.Map;
import static org.apache.skywalking.oap.server.core.analysis.manual.segment.SegmentRecord.TRACE_ID;
import static org.apache.skywalking.oap.server.core.analysis.record.Record.TIME_BUCKET;
......@@ -82,91 +83,91 @@ public class ZipkinSpanRecord extends Record {
@Setter
@Getter
@Column(columnName = TRACE_ID)
@Column(name = TRACE_ID)
@SQLDatabase.AdditionalEntity(additionalTables = {ADDITIONAL_QUERY_TABLE}, reserveOriginalColumns = true)
@BanyanDB.SeriesID(index = 0)
@ElasticSearch.Routing
private String traceId;
@Setter
@Getter
@Column(columnName = SPAN_ID)
@Column(name = SPAN_ID)
@BanyanDB.SeriesID(index = 1)
private String spanId;
@Setter
@Getter
@Column(columnName = PARENT_ID)
@Column(name = PARENT_ID)
private String parentId;
@Setter
@Getter
@Column(columnName = NAME)
@Column(name = NAME)
private String name;
@Setter
@Getter
@Column(columnName = DURATION)
@Column(name = DURATION)
private long duration;
@Setter
@Getter
@Column(columnName = KIND)
@Column(name = KIND)
private String kind;
@Setter
@Getter
@Column(columnName = TIMESTAMP_MILLIS)
@Column(name = TIMESTAMP_MILLIS)
private long timestampMillis;
@Setter
@Getter
@Column(columnName = TIMESTAMP)
@Column(name = TIMESTAMP)
private long timestamp;
@Setter
@Getter
@Column(columnName = LOCAL_ENDPOINT_SERVICE_NAME)
@Column(name = LOCAL_ENDPOINT_SERVICE_NAME)
private String localEndpointServiceName;
@Setter
@Getter
@Column(columnName = LOCAL_ENDPOINT_IPV4, storageOnly = true)
@Column(name = LOCAL_ENDPOINT_IPV4, storageOnly = true)
private String localEndpointIPV4;
@Setter
@Getter
@Column(columnName = LOCAL_ENDPOINT_IPV6, storageOnly = true)
@Column(name = LOCAL_ENDPOINT_IPV6, storageOnly = true)
private String localEndpointIPV6;
@Setter
@Getter
@Column(columnName = LOCAL_ENDPOINT_PORT, storageOnly = true)
@Column(name = LOCAL_ENDPOINT_PORT, storageOnly = true)
private int localEndpointPort;
@Setter
@Getter
@Column(columnName = REMOTE_ENDPOINT_SERVICE_NAME)
@Column(name = REMOTE_ENDPOINT_SERVICE_NAME)
private String remoteEndpointServiceName;
@Setter
@Getter
@Column(columnName = REMOTE_ENDPOINT_IPV4, storageOnly = true)
@Column(name = REMOTE_ENDPOINT_IPV4, storageOnly = true)
private String remoteEndpointIPV4;
@Setter
@Getter
@Column(columnName = REMOTE_ENDPOINT_IPV6, storageOnly = true)
@Column(name = REMOTE_ENDPOINT_IPV6, storageOnly = true)
private String remoteEndpointIPV6;
@Setter
@Getter
@Column(columnName = REMOTE_ENDPOINT_PORT, storageOnly = true)
@Column(name = REMOTE_ENDPOINT_PORT, storageOnly = true)
private int remoteEndpointPort;
@Setter
@Getter
@Column(columnName = ANNOTATIONS, storageOnly = true, length = 50000)
@Column(name = ANNOTATIONS, storageOnly = true, length = 50000)
private JsonObject annotations;
@Setter
@Getter
@Column(columnName = TAGS, storageOnly = true, length = 50000)
@Column(name = TAGS, storageOnly = true, length = 50000)
private JsonObject tags;
@Setter
@Getter
@Column(columnName = DEBUG)
@Column(name = DEBUG)
private int debug;
@Setter
@Getter
@Column(columnName = SHARED)
@Column(name = SHARED)
private int shared;
@Setter
@Getter
@Column(columnName = QUERY, indexOnly = true, length = QUERY_LENGTH)
@Column(name = QUERY, indexOnly = true, length = QUERY_LENGTH)
@SQLDatabase.AdditionalEntity(additionalTables = {ADDITIONAL_QUERY_TABLE})
private List<String> query;
......
......@@ -20,37 +20,52 @@ package org.apache.skywalking.oap.server.core.storage.model;
import org.apache.skywalking.oap.server.core.analysis.metrics.DataTable;
import org.apache.skywalking.oap.server.core.storage.annotation.BanyanDB;
import org.apache.skywalking.oap.server.core.storage.annotation.Column;
import org.apache.skywalking.oap.server.core.storage.annotation.ElasticSearch;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class ModelColumnTest {
@Mock
private Column c;
@Before
public void before() {
when(c.name()).thenReturn("abc");
}
@Test
public void testColumnDefine() {
ModelColumn column = new ModelColumn(new ColumnName("", "abc"), byte[].class, byte[].class,
ModelColumn column = new ModelColumn(new ColumnName(c), byte[].class, byte[].class,
false, false, true, 0,
new SQLDatabaseExtension(),
new ElasticSearchExtension(
ElasticSearch.MatchQuery.AnalyzerType.OAP_ANALYZER, "abc", false, false),
ElasticSearch.MatchQuery.AnalyzerType.OAP_ANALYZER, null, false, false),
new BanyanDBExtension(-1, false, true, BanyanDB.IndexRule.IndexType.INVERTED, false)
);
Assert.assertEquals(true, column.isStorageOnly());
Assert.assertEquals("abc", column.getColumnName().getName());
column = new ModelColumn(new ColumnName("", "abc"), DataTable.class, DataTable.class,
column = new ModelColumn(new ColumnName(c), DataTable.class, DataTable.class,
false, false, true, 200,
new SQLDatabaseExtension(),
new ElasticSearchExtension(ElasticSearch.MatchQuery.AnalyzerType.OAP_ANALYZER, "abc", false, false),
new ElasticSearchExtension(ElasticSearch.MatchQuery.AnalyzerType.OAP_ANALYZER, null, false, false),
new BanyanDBExtension(-1, false, true, BanyanDB.IndexRule.IndexType.INVERTED, false)
);
Assert.assertEquals(true, column.isStorageOnly());
Assert.assertEquals("abc", column.getColumnName().getName());
Assert.assertEquals(200, column.getLength());
column = new ModelColumn(new ColumnName("", "abc"), String.class, String.class,
column = new ModelColumn(new ColumnName(c), String.class, String.class,
false, false, true, 200,
new SQLDatabaseExtension(),
new ElasticSearchExtension(ElasticSearch.MatchQuery.AnalyzerType.OAP_ANALYZER, "abc", false, false),
new ElasticSearchExtension(ElasticSearch.MatchQuery.AnalyzerType.OAP_ANALYZER, null, false, false),
new BanyanDBExtension(-1, false, true, BanyanDB.IndexRule.IndexType.INVERTED, false)
);
Assert.assertEquals(false, column.isStorageOnly());
......@@ -59,22 +74,22 @@ public class ModelColumnTest {
@Test(expected = IllegalArgumentException.class)
public void testConflictDefinition() {
ModelColumn column = new ModelColumn(new ColumnName("", "abc"), String.class, String.class,
ModelColumn column = new ModelColumn(new ColumnName(c), String.class, String.class,
true, false, true, 200,
new SQLDatabaseExtension(),
new ElasticSearchExtension(
ElasticSearch.MatchQuery.AnalyzerType.OAP_ANALYZER, "abc", false, false),
ElasticSearch.MatchQuery.AnalyzerType.OAP_ANALYZER, null, false, false),
new BanyanDBExtension(-1, false, true, BanyanDB.IndexRule.IndexType.INVERTED, false)
);
}
@Test(expected = IllegalArgumentException.class)
public void testConflictDefinitionIndexOnly() {
ModelColumn column = new ModelColumn(new ColumnName("", "abc"), String.class, String.class,
ModelColumn column = new ModelColumn(new ColumnName(c), String.class, String.class,
true, true, false, 200,
new SQLDatabaseExtension(),
new ElasticSearchExtension(
ElasticSearch.MatchQuery.AnalyzerType.OAP_ANALYZER, "abc", false, false),
ElasticSearch.MatchQuery.AnalyzerType.OAP_ANALYZER, null, false, false),
new BanyanDBExtension(-1, false, true, BanyanDB.IndexRule.IndexType.INVERTED, false)
);
}
......
......@@ -18,7 +18,6 @@
package org.apache.skywalking.oap.server.core.storage.model;
import java.util.List;
import org.apache.skywalking.oap.server.core.analysis.DownSampling;
import org.apache.skywalking.oap.server.core.analysis.Stream;
import org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor;
......@@ -40,6 +39,8 @@ import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import java.util.List;
@RunWith(PowerMockRunner.class)
@PrepareForTest({DefaultScopeDefine.class})
@PowerMockIgnore({
......@@ -82,19 +83,19 @@ public class StorageModelsTest {
@Stream(name = "StorageModelsTest", scopeId = -1, builder = TestModel.Builder.class, processor = MetricsStreamProcessor.class)
private static class TestModel {
@Column(columnName = "column")
@Column(name = "column")
private String column;
@Column(columnName = "column1")
@Column(name = "column1")
@SQLDatabase.QueryUnifiedIndex(withColumns = {"column2"})
private String column1;
@Column(columnName = "column2")
@Column(name = "column2")
@SQLDatabase.QueryUnifiedIndex(withColumns = {"column1"})
@SQLDatabase.QueryUnifiedIndex(withColumns = {"column"})
private String column2;
@Column(columnName = "column", storageOnly = true)
@Column(name = "column", storageOnly = true)
private String column4;
static class Builder implements StorageBuilder<StorageData> {
......
......@@ -18,14 +18,6 @@
package org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.analysis.FunctionCategory;
import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
......@@ -34,6 +26,15 @@ import org.apache.skywalking.oap.server.core.storage.model.Model;
import org.apache.skywalking.oap.server.core.storage.model.ModelColumn;
import org.apache.skywalking.oap.server.library.util.CollectionUtils;
import org.apache.skywalking.oap.server.library.util.StringUtil;
import com.google.common.base.Strings;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
/**
* The metrics data, that generated by OAL or MAL, would be partitioned to storage by the functions of the OAL or MAL.
......@@ -131,7 +132,7 @@ public enum IndexController {
private static final Map<String/*physical index name*/, Map<String/*column name*/, ModelColumn>> PHYSICAL_INDICES_COLUMNS = new HashMap<>();
private static final Map<String/*logic index name*/, Map<String/*column name*/, String/*alias*/>> LOGIC_INDICES_COLUMNS_ALIAS = new HashMap<>();
private static final Map<String/*logic index name*/, Map<String/*column name*/, String/*alias*/>> LEGACY_COLUMNS_NAMES = new HashMap<>();
/**
* The metric table name in aggregation physical storage.
......@@ -154,13 +155,6 @@ public enum IndexController {
if (!IndexController.INSTANCE.logicSharding) {
model.getColumns().forEach(modelColumn -> {
String columnName = modelColumn.getColumnName().getName();
String alias = modelColumn.getElasticSearchExtension().getColumnAlias();
if (alias != null) {
Map<String, String> aliasMap = LOGIC_INDICES_COLUMNS_ALIAS.computeIfAbsent(
model.getName(), v -> new HashMap<>());
aliasMap.put(modelColumn.getColumnName().getName(), alias);
columnName = alias;
}
if (columns.containsKey(columnName)) {
checkModelColumnConflicts(columns.get(columnName), modelColumn, physicalName);
} else {
......@@ -170,6 +164,13 @@ public enum IndexController {
} else {
model.getColumns().forEach(modelColumn -> {
String columnName = modelColumn.getColumnName().getName();
String legacyName = modelColumn.getElasticSearchExtension().getLegacyColumnName();
if (!Strings.isNullOrEmpty(legacyName)) {
Map<String, String> legacyNames = LEGACY_COLUMNS_NAMES.computeIfAbsent(
model.getName(), v -> new HashMap<>());
legacyNames.put(modelColumn.getColumnName().getName(), legacyName);
columnName = legacyName;
}
if (columns.containsKey(columnName)) {
checkModelColumnConflicts(columns.get(columnName), modelColumn, physicalName);
} else {
......@@ -195,16 +196,16 @@ public enum IndexController {
*/
@Deprecated
public static String getPhysicalColumnName(String modelName, String columnName) {
if (IndexController.INSTANCE.logicSharding) {
if (!IndexController.INSTANCE.logicSharding) {
return columnName;
}
Map<String, String> aliasMap = LOGIC_INDICES_COLUMNS_ALIAS.get(modelName);
if (CollectionUtils.isEmpty(aliasMap)) {
Map<String, String> legacyNames = LEGACY_COLUMNS_NAMES.get(modelName);
if (CollectionUtils.isEmpty(legacyNames)) {
return columnName;
}
return aliasMap.getOrDefault(columnName, columnName);
return legacyNames.getOrDefault(columnName, columnName);
}
/**
......
......@@ -18,16 +18,6 @@
package org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base;
import com.fasterxml.jackson.core.type.TypeReference;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.library.elasticsearch.response.Index;
import org.apache.skywalking.library.elasticsearch.response.IndexTemplate;
import org.apache.skywalking.library.elasticsearch.response.Mappings;
......@@ -43,6 +33,17 @@ import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.util.CollectionUtils;
import org.apache.skywalking.oap.server.library.util.StringUtil;
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.StorageModuleElasticsearchConfig;
import com.fasterxml.jackson.core.type.TypeReference;
import com.google.common.base.Strings;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class StorageEsInstaller extends ModelInstaller {
......@@ -304,9 +305,9 @@ public class StorageEsInstaller extends ModelInstaller {
for (ModelColumn columnDefine : model.getColumns()) {
final String type = columnTypeEsMapping.transform(columnDefine.getType(), columnDefine.getGenericType(), columnDefine.getElasticSearchExtension());
String columnName = columnDefine.getColumnName().getName();
String alias = columnDefine.getElasticSearchExtension().getColumnAlias();
if (!config.isLogicSharding() && alias != null) {
columnName = alias;
String legacyName = columnDefine.getElasticSearchExtension().getLegacyColumnName();
if (config.isLogicSharding() && !Strings.isNullOrEmpty(legacyName)) {
columnName = legacyName;
}
if (columnDefine.getElasticSearchExtension().needMatchQuery()) {
String matchCName = MatchCNameBuilder.INSTANCE.build(columnName);
......
......@@ -45,7 +45,7 @@ public class ServiceCpmMetrics extends CPMMetrics {
@Setter
@Getter
@Column(
columnName = "entity_id",
name = "entity_id",
length = 512
)
private String entityId;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册