Skip to content

Commit

Permalink
[pinpoint-apm#10026] Make TraceService, SqlMetaDataService abstract
Browse files Browse the repository at this point in the history
  • Loading branch information
kojandy committed Jun 8, 2023
1 parent a39c034 commit 928a9a4
Show file tree
Hide file tree
Showing 7 changed files with 392 additions and 345 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.navercorp.pinpoint.collector.service.TraceService;
import com.navercorp.pinpoint.common.server.bo.SpanChunkBo;
import com.navercorp.pinpoint.common.server.bo.grpc.GrpcSpanFactory;
import com.navercorp.pinpoint.common.util.CollectionUtils;
import com.navercorp.pinpoint.grpc.Header;
import com.navercorp.pinpoint.grpc.MessageFormatUtils;
import com.navercorp.pinpoint.grpc.server.ServerContext;
Expand All @@ -14,10 +15,11 @@
import com.navercorp.pinpoint.grpc.trace.PTransactionId;
import com.navercorp.pinpoint.io.request.ServerRequest;
import io.grpc.Status;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;

Expand All @@ -30,13 +32,15 @@ public class GrpcSpanChunkHandler implements SimpleHandler<GeneratedMessageV3> {
private final Logger logger = LogManager.getLogger(getClass());
private final boolean isDebug = logger.isDebugEnabled();

private final TraceService traceService;
private final TraceService[] traceServices;

private final GrpcSpanFactory spanFactory;

public GrpcSpanChunkHandler(TraceService traceService, GrpcSpanFactory spanFactory) {
this.traceService = Objects.requireNonNull(traceService, "traceService");
public GrpcSpanChunkHandler(TraceService[] traceServices, GrpcSpanFactory spanFactory) {
this.traceServices = Objects.requireNonNull(traceServices, "traceServices");
this.spanFactory = Objects.requireNonNull(spanFactory, "spanFactory");

logger.info("TraceServices {}", Arrays.toString(traceServices));
}

@Override
Expand All @@ -56,12 +60,15 @@ private void handleSpanChunk(PSpanChunk spanChunk) {
logger.debug("Handle PSpanChunk={}", createSimpleSpanChunkLog(spanChunk));
}

try {
final Header agentInfo = ServerContext.getAgentInfo();
final SpanChunkBo spanChunkBo = spanFactory.buildSpanChunkBo(spanChunk, agentInfo);
this.traceService.insertSpanChunk(spanChunkBo);
} catch (Exception e) {
logger.warn("Failed to handle spanChunk={}", MessageFormatUtils.debugLog(spanChunk), e);

final Header agentInfo = ServerContext.getAgentInfo();
final SpanChunkBo spanChunkBo = spanFactory.buildSpanChunkBo(spanChunk, agentInfo);
for (TraceService traceService : traceServices) {
try {
traceService.insertSpanChunk(spanChunkBo);
} catch (Exception e) {
logger.warn("Failed to handle spanChunk={}", MessageFormatUtils.debugLog(spanChunk), e);
}
}
}

Expand All @@ -70,26 +77,25 @@ private String createSimpleSpanChunkLog(PSpanChunk spanChunk) {
return "";
}

StringBuilder log = new StringBuilder();
StringBuilder log = new StringBuilder(64);

PTransactionId transactionId = spanChunk.getTransactionId();
log.append(" transactionId:");
log.append(MessageFormatUtils.debugLog(transactionId));

log.append(" spanId:").append(spanChunk.getSpanId());


StringBuilder spanEventSequenceLog = new StringBuilder();
List<PSpanEvent> spanEventList = spanChunk.getSpanEventList();
for (PSpanEvent pSpanEvent : spanEventList) {
if (pSpanEvent == null) {
continue;
final List<PSpanEvent> spanEventList = spanChunk.getSpanEventList();
if (CollectionUtils.hasLength(spanEventList)) {
log.append(" spanEventSequence:");
for (PSpanEvent pSpanEvent : spanEventList) {
if (pSpanEvent == null) {
continue;
}
log.append(pSpanEvent.getSequence()).append(" ");
}
spanEventSequenceLog.append(pSpanEvent.getSequence()).append(" ");
}

log.append(" spanEventSequence:").append(spanEventSequenceLog.toString());

return log.toString();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +21,20 @@
import com.navercorp.pinpoint.collector.service.TraceService;
import com.navercorp.pinpoint.common.server.bo.SpanBo;
import com.navercorp.pinpoint.common.server.bo.grpc.GrpcSpanFactory;
import com.navercorp.pinpoint.common.util.CollectionUtils;
import com.navercorp.pinpoint.grpc.Header;
import com.navercorp.pinpoint.grpc.MessageFormatUtils;
import com.navercorp.pinpoint.grpc.server.ServerContext;
import com.navercorp.pinpoint.grpc.trace.PSpan;
import com.navercorp.pinpoint.grpc.trace.PSpanEvent;
import com.navercorp.pinpoint.grpc.trace.PTransactionId;
import com.navercorp.pinpoint.io.request.ServerRequest;

import io.grpc.Status;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;

Expand All @@ -47,13 +48,15 @@ public class GrpcSpanHandler implements SimpleHandler<GeneratedMessageV3> {
private final Logger logger = LogManager.getLogger(getClass());
private final boolean isDebug = logger.isDebugEnabled();

private final TraceService traceService;
private final TraceService[] traceServices;

private final GrpcSpanFactory spanFactory;

public GrpcSpanHandler(TraceService traceService, GrpcSpanFactory spanFactory) {
this.traceService = Objects.requireNonNull(traceService, "traceService");
public GrpcSpanHandler(TraceService[] traceServices, GrpcSpanFactory spanFactory) {
this.traceServices = Objects.requireNonNull(traceServices, "traceServices");
this.spanFactory = Objects.requireNonNull(spanFactory, "spanFactory");

logger.info("TraceServices {}", Arrays.toString(traceServices));
}

@Override
Expand All @@ -72,12 +75,14 @@ private void handleSpan(PSpan span) {
logger.debug("Handle PSpan={}", createSimpleSpanLog(span));
}

try {
Header agentInfo = ServerContext.getAgentInfo();
final SpanBo spanBo = spanFactory.buildSpanBo(span, agentInfo);
traceService.insertSpan(spanBo);
} catch (Exception e) {
logger.warn("Failed to handle span={}", MessageFormatUtils.debugLog(span), e);
final Header agentInfo = ServerContext.getAgentInfo();
final SpanBo spanBo = spanFactory.buildSpanBo(span, agentInfo);
for (TraceService traceService : traceServices) {
try {
traceService.insertSpan(spanBo);
} catch (Throwable e) {
logger.warn("Failed to handle span={}", MessageFormatUtils.debugLog(span), e);
}
}
}

Expand All @@ -86,25 +91,25 @@ private String createSimpleSpanLog(PSpan span) {
return "";
}

StringBuilder log = new StringBuilder();
StringBuilder log = new StringBuilder(64);

PTransactionId transactionId = span.getTransactionId();
log.append(" transactionId:");
log.append(MessageFormatUtils.debugLog(transactionId));

log.append(" spanId:").append(span.getSpanId());

StringBuilder spanEventSequenceLog = new StringBuilder();
List<PSpanEvent> spanEventList = span.getSpanEventList();
for (PSpanEvent pSpanEvent : spanEventList) {
if (pSpanEvent == null) {
continue;
final List<PSpanEvent> spanEventList = span.getSpanEventList();
if (CollectionUtils.hasLength(spanEventList)) {
log.append(" spanEventSequence:");
for (PSpanEvent pSpanEvent : spanEventList) {
if (pSpanEvent == null) {
continue;
}
log.append(pSpanEvent.getSequence()).append(" ");
}
spanEventSequenceLog.append(pSpanEvent.getSequence()).append(" ");
}

log.append(" spanEventSequence:").append(spanEventSequenceLog.toString());

return log.toString();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,11 @@
import com.navercorp.pinpoint.io.request.ServerRequest;
import com.navercorp.pinpoint.io.request.ServerResponse;
import io.grpc.Status;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.Objects;

/**
Expand All @@ -42,10 +43,11 @@ public class GrpcSqlMetaDataHandler implements RequestResponseHandler<GeneratedM
private final Logger logger = LogManager.getLogger(getClass());
private final boolean isDebug = logger.isDebugEnabled();

private final SqlMetaDataService sqlMetaDataService;
private final SqlMetaDataService[] sqlMetaDataServices;

public GrpcSqlMetaDataHandler(SqlMetaDataService sqlMetaDataService) {
this.sqlMetaDataService = Objects.requireNonNull(sqlMetaDataService, "sqlMetaDataService");
public GrpcSqlMetaDataHandler(SqlMetaDataService[] sqlMetaDataServices) {
this.sqlMetaDataServices = Objects.requireNonNull(sqlMetaDataServices, "sqlMetaDataServices");
logger.info("SqlMetaDataServices {}", Arrays.toString(sqlMetaDataServices));
}


Expand All @@ -66,19 +68,33 @@ private PResult handleSqlMetaData(PSqlMetaData sqlMetaData) {
logger.debug("Handle PSqlMetaData={}", MessageFormatUtils.debugLog(sqlMetaData));
}

try {
final Header agentInfo = ServerContext.getAgentInfo();
final String agentId = agentInfo.getAgentId();
final long agentStartTime = agentInfo.getAgentStartTime();
final Header agentInfo = ServerContext.getAgentInfo();
final String agentId = agentInfo.getAgentId();
final long agentStartTime = agentInfo.getAgentStartTime();

final SqlMetaDataBo sqlMetaDataBo = new SqlMetaDataBo(agentId, agentStartTime, sqlMetaData.getSqlId(), sqlMetaData.getSql());
final SqlMetaDataBo sqlMetaDataBo = new SqlMetaDataBo(agentId, agentStartTime, sqlMetaData.getSqlId(), sqlMetaData.getSql());

boolean result = true;
for (SqlMetaDataService sqlMetaDataService : sqlMetaDataServices) {
try {
sqlMetaDataService.insert(sqlMetaDataBo);
} catch (Throwable e) {
// Avoid detailed error messages.
logger.warn("Failed to handle sqlMetaData={}", MessageFormatUtils.debugLog(sqlMetaData), e);
result = false;
}
}

sqlMetaDataService.insert(sqlMetaDataBo);
return PResult.newBuilder().setSuccess(true).build();
} catch (Exception e) {
logger.warn("Failed to handle sqlMetaData={}", MessageFormatUtils.debugLog(sqlMetaData), e);
// Avoid detailed error messages.
return PResult.newBuilder().setSuccess(false).setMessage("Internal Server Error").build();
return newResult(result);
}

private static PResult newResult(boolean success) {
final PResult.Builder builder = PResult.newBuilder();
if (success) {
builder.setSuccess(true);
} else {
builder.setSuccess(false).setMessage("Internal Server Error");
}
return builder.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Copyright 2018 NAVER Corp.
*
* Licensed 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 com.navercorp.pinpoint.collector.service;

import com.navercorp.pinpoint.collector.dao.SqlMetaDataDao;
import com.navercorp.pinpoint.common.server.bo.SqlMetaDataBo;
import org.springframework.stereotype.Service;

import java.util.Objects;

@Service
public class HbaseSqlMetaDataService implements SqlMetaDataService {
private final SqlMetaDataDao sqlMetaDataDao;

public HbaseSqlMetaDataService(SqlMetaDataDao sqlMetaDataDao) {
this.sqlMetaDataDao = Objects.requireNonNull(sqlMetaDataDao, "sqlMetaDataDao");
}

@Override
public void insert(final SqlMetaDataBo sqlMetaDataBo) {
this.sqlMetaDataDao.insert(sqlMetaDataBo);
}
}
Loading

0 comments on commit 928a9a4

Please sign in to comment.