secuencia
En este trabajo, nos fijamos skywalking de HTTPAccessLog
HTTPAccessLog
skywalking-6.6.0 / OAP-servidor / servidor-core / src / main / java / org / apache / skywalking / oap / servidor / núcleo / fuente / HTTPAccessLog.java
@ScopeDeclaration(id = HTTP_ACCESS_LOG, name = "HTTPAccessLog")
public class HTTPAccessLog extends AbstractLog {
@Override public int scope() {
return HTTP_ACCESS_LOG;
}
}
复制代码
- HTTPAccessLog heredaron AbstractLog, sus devuelve el método alcance HTTP_ACCESS_LOG
AbstractLog
skywalking-6.6.0 / OAP-servidor / servidor-core / src / main / java / org / apache / skywalking / oap / servidor / núcleo / fuente / AbstractLog.java
@Setter
@Getter
public abstract class AbstractLog extends Source {
private long timeBucket;
private long timestamp;
private int serviceId;
private int serviceInstanceId;
private int endpointId;
private String traceId;
private int isError;
private String statusCode;
private ContentType contentType = ContentType.NONE;
private String content;
@Override public String getEntityId() {
throw new UnexpectedException("getEntityId is not supported in AbstractLog source");
}
}
复制代码
- AbstractLog heredó la Fuente, que define timeBucket, marca de tiempo, serviceId, serviceInstanceId, endpointId, traceid, isError, statusCode, contentType, las propiedades de contenido
HTTPAccessLogDispatcher
skywalking-6.6.0 / OAP-servidor / servidor-core / src / main / java / org / apache / skywalking / oap / servidor / core / análisis / log / manual / HTTPAccessLogDispatcher.java
public class HTTPAccessLogDispatcher implements SourceDispatcher<HTTPAccessLog> {
@Override public void dispatch(HTTPAccessLog source) {
HTTPAccessLogRecord record = new HTTPAccessLogRecord();
record.setTimestamp(source.getTimestamp());
record.setTimeBucket(source.getTimeBucket());
record.setServiceId(source.getServiceId());
record.setServiceInstanceId(source.getServiceInstanceId());
record.setEndpointId(source.getEndpointId());
record.setTraceId(source.getTraceId());
record.setIsError(source.getIsError());
record.setStatusCode(source.getStatusCode());
record.setContentType(source.getContentType().value());
record.setContent(source.getContent());
RecordStreamProcessor.getInstance().in(record);
}
}
复制代码
- HTTPAccessLogDispatcher interfaz SourceDispatcher dado cuenta de que conversos HTTPAccessLog envío a HTTPAccessLogRecord, a continuación, realizar RecordStreamProcessor.getInstance (). En (registro)
RecordStreamProcessor
skywalking-6.6.0 / OAP-servidor / servidor-core / src / main / java / org / apache / skywalking / oap / servidor / core / análisis / trabajador / RecordStreamProcessor.java
public class RecordStreamProcessor implements StreamProcessor<Record> {
private final static RecordStreamProcessor PROCESSOR = new RecordStreamProcessor();
private Map<Class<? extends Record>, RecordPersistentWorker> workers = new HashMap<>();
public static RecordStreamProcessor getInstance() {
return PROCESSOR;
}
public void in(Record record) {
RecordPersistentWorker worker = workers.get(record.getClass());
if (worker != null) {
worker.in(record);
}
}
@SuppressWarnings("unchecked")
public void create(ModuleDefineHolder moduleDefineHolder, Stream stream, Class<? extends Record> recordClass) {
if (DisableRegister.INSTANCE.include(stream.name())) {
return;
}
StorageDAO storageDAO = moduleDefineHolder.find(StorageModule.NAME).provider().getService(StorageDAO.class);
IRecordDAO recordDAO;
try {
recordDAO = storageDAO.newRecordDao(stream.builder().newInstance());
} catch (InstantiationException | IllegalAccessException e) {
throw new UnexpectedException("Create " + stream.builder().getSimpleName() + " record DAO failure.", e);
}
IModelSetter modelSetter = moduleDefineHolder.find(CoreModule.NAME).provider().getService(IModelSetter.class);
Model model = modelSetter.putIfAbsent(recordClass, stream.scopeId(), new Storage(stream.name(), true, true, Downsampling.Second), true);
RecordPersistentWorker persistentWorker = new RecordPersistentWorker(moduleDefineHolder, model, recordDAO);
workers.put(recordClass, persistentWorker);
}
}
复制代码
- RecordStreamProcessor StreamProcessor implementa la interfaz, para identificar un método en el que record.getClass () a partir de los correspondientes trabajadores RecordPersistentWorker realiza entonces en cuyo método
RecordPersistentWorker
skywalking-6.6.0 / OAP-servidor / servidor-core / src / main / java / org / apache / skywalking / oap / servidor / core / análisis / trabajador / RecordPersistentWorker.java
public class RecordPersistentWorker extends AbstractWorker<Record> {
private static final Logger logger = LoggerFactory.getLogger(RecordPersistentWorker.class);
private final Model model;
private final IRecordDAO recordDAO;
private final IBatchDAO batchDAO;
RecordPersistentWorker(ModuleDefineHolder moduleDefineHolder, Model model, IRecordDAO recordDAO) {
super(moduleDefineHolder);
this.model = model;
this.recordDAO = recordDAO;
this.batchDAO = moduleDefineHolder.find(StorageModule.NAME).provider().getService(IBatchDAO.class);
}
@Override public void in(Record record) {
try {
InsertRequest insertRequest = recordDAO.prepareBatchInsert(model, record);
batchDAO.asynchronous(insertRequest);
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
}
复制代码
- RecordPersistentWorker heredó AbstractWorker, en su método de recordDAO.prepareBatchInsert ejecución (modelo, ficha), a continuación, realizar batchDAO.asynchronous (insertRequest) vuelto con insertRequest
resumen
HTTPAccessLog heredado AbstractLog, su ámbito de aplicación el procedimiento vuelve HTTP_ACCESS_LOG; HTTPAccessLogDispatcher SourceDispatcher implementa una interfaz que convierte HTTPAccessLog a despacho HTTPAccessLogRecord, a continuación, realizar RecordStreamProcessor.getInstance () en (registro).