blob: 1d38edd1aa040769bc52f3cf7e6a4eafac08acb6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.skywalking.oap.server.core.analysis.manual.trace;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.analysis.Stream;
import org.apache.skywalking.oap.server.core.analysis.record.Record;
import org.apache.skywalking.oap.server.core.analysis.topn.TopN;
import org.apache.skywalking.oap.server.core.analysis.worker.RecordStreamProcessor;
import org.apache.skywalking.oap.server.core.source.ScopeDeclaration;
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.type.Convert2Entity;
import org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.PROCESS_RELATION_CATALOG_NAME;
import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SAMPLED_STATUS_5XX_TRACE;
@Setter
@Getter
@ScopeDeclaration(id = SAMPLED_STATUS_5XX_TRACE, name = "SampledStatus5xxTraceRecord", catalog = PROCESS_RELATION_CATALOG_NAME)
@Stream(name = SampledStatus5xxTraceRecord.INDEX_NAME, scopeId = SAMPLED_STATUS_5XX_TRACE, builder = SampledStatus5xxTraceRecord.Builder.class, processor = RecordStreamProcessor.class)
@BanyanDB.TimestampColumn(SampledStatus5xxTraceRecord.TIMESTAMP)
public class SampledStatus5xxTraceRecord extends Record {
public static final String INDEX_NAME = "sampled_status_5xx_trace_record";
public static final String SCOPE = "scope";
public static final String ENTITY_ID = "entity_id";
public static final String TRACE_ID = TopN.TRACE_ID;
public static final String URI = TopN.STATEMENT;
public static final String LATENCY = "latency";
public static final String TIMESTAMP = "timestamp";
@Column(name = SCOPE)
private int scope;
@Column(name = ENTITY_ID)
@BanyanDB.SeriesID(index = 0)
private String entityId;
@Column(name = TRACE_ID, storageOnly = true)
private String traceId;
@Column(name = URI, storageOnly = true)
private String uri;
@Column(name = LATENCY, dataType = Column.ValueDataType.SAMPLED_RECORD)
private long latency;
@Setter
@Getter
@Column(name = TIMESTAMP)
private long timestamp;
@Override
public StorageID id() {
return new StorageID()
.append(TIME_BUCKET, getTimeBucket())
.append(ENTITY_ID, entityId)
.append(TRACE_ID, traceId);
}
public static class Builder implements StorageBuilder<SampledStatus5xxTraceRecord> {
@Override
public SampledStatus5xxTraceRecord storage2Entity(Convert2Entity converter) {
final SampledStatus5xxTraceRecord record = new SampledStatus5xxTraceRecord();
record.setScope(((Number) converter.get(SCOPE)).intValue());
record.setEntityId((String) converter.get(ENTITY_ID));
record.setTraceId((String) converter.get(TRACE_ID));
record.setUri((String) converter.get(URI));
record.setLatency(((Number) converter.get(LATENCY)).longValue());
record.setTimeBucket(((Number) converter.get(TIME_BUCKET)).longValue());
record.setTimestamp(((Number) converter.get(TIMESTAMP)).longValue());
return record;
}
@Override
public void entity2Storage(SampledStatus5xxTraceRecord entity, Convert2Storage converter) {
converter.accept(SCOPE, entity.getScope());
converter.accept(ENTITY_ID, entity.getEntityId());
converter.accept(TRACE_ID, entity.getTraceId());
converter.accept(URI, entity.getUri());
converter.accept(LATENCY, entity.getLatency());
converter.accept(TIME_BUCKET, entity.getTimeBucket());
converter.accept(TIMESTAMP, entity.getTimestamp());
}
}
}