Skip to content

Commit

Permalink
[pinpoint-apm#9254] Collects and retrieves URL statistics using Pinot
Browse files Browse the repository at this point in the history
Co-Authored-By: Woonduk Kang <[email protected]>
  • Loading branch information
ga-ram and emeroad committed Oct 19, 2022
1 parent bc17fa3 commit bcd9389
Show file tree
Hide file tree
Showing 98 changed files with 1,881 additions and 2,277 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ public interface Trace extends StackOperation {
@InterfaceAudience.Private
long getStartTime();

@InterfaceAudience.Private
long getEndTime();
//------------------------------------------------

TraceId getTraceId();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ public void destroyed(REQ request, final Throwable throwable, final int statusCo
this.traceContext.removeTraceObject();
trace.close();
boolean status = isNotFailedStatus(statusCode);
uriStatRecorder.record(request, rpcName, status, trace.getStartTime(), System.currentTimeMillis());
uriStatRecorder.record(request, rpcName, status, trace.getStartTime(), trace.getEndTime());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
*/
public class DisabledUriStatRecorder implements UriStatRecorder {

private static final DisabledUriStatRecorder INSTANCE = new DisabledUriStatRecorder();
private static final UriStatRecorder INSTANCE = new DisabledUriStatRecorder();

public static <T> UriStatRecorder<T> create() {
return (UriStatRecorder<T>) INSTANCE;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,18 @@
*/
public class UriExtractorChain<T> implements UriExtractor<T> {

private final List<UriExtractor<T>> uriExtractorList;
private final UriExtractor<T>[] uriExtractorList;

public UriExtractorChain(List<UriExtractor<T>> uriExtractorList) {
if (CollectionUtils.isEmpty(uriExtractorList)) {
throw new IllegalArgumentException("uriExtractorList may not be empty");
}
this.uriExtractorList = uriExtractorList;
this.uriExtractorList = uriExtractorList.toArray(new UriExtractor[0]);
}

@Override
public UriExtractorType getExtractorType() {
return uriExtractorList.get(0).getExtractorType();
return uriExtractorList[0].getExtractorType();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,6 @@
*/
public interface UriExtractorProviderLocator {

<T extends UriExtractorProvider> List<T> get(Class<T> type, UriExtractorType uriExtractorType);
<T extends UriExtractorProvider> List<T> getUriExtractorProvider(Class<T> type, UriExtractorType uriExtractorType);

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ public UriExtractorProviderRegistry(List<UriExtractorProvider> uriExtractorProvi
}

@Override
public <T extends UriExtractorProvider> List<T> get(Class<T> type, UriExtractorType uriExtractorType) {
List<T> result = new ArrayList<T>();
public <T extends UriExtractorProvider> List<T> getUriExtractorProvider(Class<T> type, UriExtractorType uriExtractorType) {
List<T> result = new ArrayList<>();
for (UriExtractorProvider uriExtractorProvider : uriExtractorProviderList) {
if (!type.isInstance(uriExtractorProvider)) {
continue;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@
*/
public interface UriExtractorService<T> {

UriExtractor<T> get(UriExtractorProviderLocator uriExtractorProviderLocator);
UriExtractor<T> getUriExtractor(UriExtractorProviderLocator uriExtractorProviderLocator);

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,18 @@
import com.navercorp.pinpoint.common.util.ArrayUtils;

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

/**
* @author Taejin Koo
*/
public class UriMappingExtractorProvider implements UriExtractorProvider {

private UriExtractorType uriExtractorType;
private String[] mappingKeyCandidates;
private final UriExtractorType uriExtractorType;
private final String[] mappingKeyCandidates;

public UriMappingExtractorProvider(UriExtractorType uriExtractorType, String[] mappingKeyCandidates) {
this.uriExtractorType = uriExtractorType;
this.uriExtractorType = Objects.requireNonNull(uriExtractorType, "uriExtractorType");

if (ArrayUtils.isEmpty(mappingKeyCandidates)) {
throw new IllegalArgumentException("mappingKeyCandidates may not be empty");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,13 @@ public void providerRegistryTest() {


UriExtractorProviderRegistry registry = new UriExtractorProviderRegistry(uriExtractorProviderList);
List<UriMappingExtractorProvider> result = registry.get(UriMappingExtractorProvider.class, UriExtractorType.SERVLET_REQUEST_ATTRIBUTE);
List<UriMappingExtractorProvider> result = registry.getUriExtractorProvider(UriMappingExtractorProvider.class, UriExtractorType.SERVLET_REQUEST_ATTRIBUTE);
Assertions.assertEquals(2, result.size());

result = registry.get(UriMappingExtractorProvider.class, UriExtractorType.NONE);
result = registry.getUriExtractorProvider(UriMappingExtractorProvider.class, UriExtractorType.NONE);
Assertions.assertEquals(0, result.size());

List<MockUriExtractorProvider> result2 = registry.get(MockUriExtractorProvider.class, UriExtractorType.SERVLET_REQUEST_ATTRIBUTE);
List<MockUriExtractorProvider> result2 = registry.getUriExtractorProvider(MockUriExtractorProvider.class, UriExtractorType.SERVLET_REQUEST_ATTRIBUTE);
Assertions.assertEquals(0, result2.size());
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,14 @@ public AgentUriStatBo map(final PAgentUriStat agentUriStat) {
final Header agentInfo = ServerContext.getAgentInfo();

final String agentId = agentInfo.getAgentId();
final long startTimestamp = agentInfo.getAgentStartTime();
final String applicationName = agentInfo.getApplicationName();

long timestamp = agentUriStat.getTimestamp();
int bucketVersion = agentUriStat.getBucketVersion();

AgentUriStatBo agentUriStatBo = new AgentUriStatBo();
agentUriStatBo.setServiceName(""); // TODO: add serviceName when available
agentUriStatBo.setApplicationName(applicationName);
agentUriStatBo.setAgentId(agentId);
agentUriStatBo.setStartTimestamp(startTimestamp);
agentUriStatBo.setTimestamp(timestamp);
agentUriStatBo.setBucketVersion((byte) bucketVersion);

List<PEachUriStat> eachUriStatList = agentUriStat.getEachUriStatList();
Expand All @@ -73,6 +72,8 @@ private EachUriStatBo createEachUriStatBo(PEachUriStat pEachUriStat) {
final UriStatHistogram failedHistogram = convertUriStatHistogram(pFailedHistogram);
eachUriStatBo.setFailedHistogram(failedHistogram);

eachUriStatBo.setTimestamp(pEachUriStat.getTimestamp());

return eachUriStatBo;
}

Expand All @@ -82,7 +83,7 @@ private UriStatHistogram convertUriStatHistogram(PUriHistogram pUriHistogram) {
return null;
}

double avg = pUriHistogram.getAvg();
long total = pUriHistogram.getTotal();
long max = pUriHistogram.getMax();

int histogramCount = pUriHistogram.getHistogramCount();
Expand All @@ -95,7 +96,7 @@ private UriStatHistogram convertUriStatHistogram(PUriHistogram pUriHistogram) {

UriStatHistogram uriStatHistogram = new UriStatHistogram();
uriStatHistogram.setCount(count);
uriStatHistogram.setAvg(avg);
uriStatHistogram.setTotal(total);
uriStatHistogram.setMax(max);
uriStatHistogram.setTimestampHistogram(histogram);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,28 +16,17 @@

package com.navercorp.pinpoint.collector.service;

import com.navercorp.pinpoint.collector.dao.hbase.HbaseAgentUriStatDao;
import com.navercorp.pinpoint.common.server.bo.stat.AgentUriStatBo;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Service;

import java.util.Objects;

/**
* @author Taejin Koo
*/
@Service("hBaseAgentUriStatService")
public class HBaseAgentUriStatService implements AgentUriStatService {

private final HbaseAgentUriStatDao hbaseAgentUriStatDao;

public HBaseAgentUriStatService(HbaseAgentUriStatDao hbaseAgentUriStatDao) {
this.hbaseAgentUriStatDao = Objects.requireNonNull(hbaseAgentUriStatDao, "hbaseAgentUriStatDao");
}

@ConditionalOnMissingBean(value = AgentUriStatService.class, ignored = EmptyAgentUriStatService.class)
@Service
public class EmptyAgentUriStatService implements AgentUriStatService {
@Override
public void save(AgentUriStatBo agentUriStatBo) {
hbaseAgentUriStatDao.insert(agentUriStatBo);
}

public void save(AgentUriStatBo agentUriStatBo) {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ private PAgentUriStat createPAgentUriStat() {
PUriHistogram.Builder histogramBuilder = PUriHistogram.newBuilder();

int totalCount = 0;
for (int i = 0; i < UriStatHistogramBucket.getBucketSize(); i++) {
for (int i = 0; i < UriStatHistogramBucket.getLayout().getBucketSize(); i++) {
int count = ThreadLocalRandom.current().nextInt(0, 10);
totalCount += count;

Expand All @@ -123,10 +123,10 @@ private PAgentUriStat createPAgentUriStat() {
PEachUriStat.Builder eachUriStatBuilder = PEachUriStat.newBuilder();
eachUriStatBuilder.setUri("uri");
eachUriStatBuilder.setTotalHistogram(histogramBuilder.build());
eachUriStatBuilder.setTimestamp(System.currentTimeMillis());

PAgentUriStat.Builder builder = PAgentUriStat.newBuilder();
builder.setBucketVersion(0);
builder.setTimestamp(System.currentTimeMillis());
builder.addEachUriStat(eachUriStatBuilder.build());

return builder.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,16 +162,4 @@ public AgentStatDecoder<TransactionBo> getAgentTransactionDecoder(List<AgentStat
public AgentStatEncoder<TransactionBo> getAgentTransactionEncoder(AgentStatCodec<TransactionBo> codec) {
return new AgentStatEncoder<>(codec);
}

// ----------------

@Bean
public AgentStatDecoder<AgentUriStatBo> getAgentAgentUriStatDecoder(List<AgentStatCodec<AgentUriStatBo>> codecs) {
return new AgentStatDecoder<>(codecs);
}

@Bean
public AgentStatEncoder<AgentUriStatBo> getAgentAgentUriStatEncoder(AgentStatCodec<AgentUriStatBo> codec) {
return new AgentStatEncoder<>(codec);
}
}
Loading

0 comments on commit bcd9389

Please sign in to comment.