Skip to content

Commit

Permalink
Merge pull request #804 from wangqifan/bugfix/socket-stats-tags
Browse files Browse the repository at this point in the history
set empty tag while tag can not get
  • Loading branch information
LanternLee authored May 28, 2024
2 parents 08b055e + 15385ea commit 7389327
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -134,20 +134,37 @@ private MetricData getFrontendMetric(MetricData metric, DefaultTunnelInfo info,
private void setSrcDstHostPorts(MetricData metric, SocketStatsResult socketStatsResult, boolean isFrontend) {
metric.addTag(METRIC_TAG_SOCKET_TYPE, isFrontend ? METRIC_TAG_SOCKET_TYPE_FRONTEND : METRIC_TAG_SOCKET_TYPE_BACKEND);
String[] splits = socketStatsResult.getResult().get(0).split(SOCKET_STATS_SPLITTER);
if (splits.length < 5) return;
if (splits.length < 5) {
setHostPortEmptyTag(metric, PREFIX_DST);
setHostPortEmptyTag(metric, PREFIX_SRC);
return;
}

String[] localSplits = splits[3].split(HOST_SPLITTER);
if (localSplits.length >= 5) setHostPortTag(metric, localSplits[3], Integer.valueOf(localSplits[4]), isFrontend ? PREFIX_DST : PREFIX_SRC);
if (localSplits.length >= 5) {
setHostPortTag(metric, localSplits[3], Integer.valueOf(localSplits[4]), isFrontend ? PREFIX_DST : PREFIX_SRC);
} else {
setHostPortEmptyTag(metric, isFrontend ? PREFIX_DST : PREFIX_SRC);
}

String[] remoteSplits = splits[4].split(HOST_SPLITTER);
if (remoteSplits.length >= 5) setHostPortTag(metric, remoteSplits[3], Integer.valueOf(remoteSplits[4]), isFrontend ? PREFIX_SRC : PREFIX_DST);
if (remoteSplits.length >= 5) {
setHostPortTag(metric, remoteSplits[3], Integer.valueOf(remoteSplits[4]), isFrontend ? PREFIX_SRC : PREFIX_DST);
} else {
setHostPortEmptyTag(metric, isFrontend ? PREFIX_SRC : PREFIX_DST);
}
}

private void setHostPortTag(MetricData metric, String host, int port, String prefix) {
metric.addTag(prefix + "HostPort", new HostPort(host, port / THOUSAND).toString());
metric.addTag(prefix + "PortReminder", String.valueOf(port % THOUSAND));
}

private void setHostPortEmptyTag(MetricData metric, String prefix) {
metric.addTag(prefix + "HostPort", "_");
metric.addTag(prefix + "PortReminder", "_");
}

private MetricData getMetricTemplate(DefaultTunnelInfo info, String clusterId, String shardId) {
ProxyModel proxyModel = info.getProxyModel();
return new MetricData(getType(), proxyModel.getDcName(), clusterId, shardId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@
import com.ctrip.xpipe.redis.core.proxy.monitor.TunnelSocketStatsResult;
import com.ctrip.xpipe.redis.core.proxy.monitor.TunnelStatsResult;
import com.google.common.collect.Lists;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;
import java.util.Map;

public class DefaultTunnelSocketStatsAnalyzerManagerTest extends AbstractConsoleIntegrationTest {

Expand All @@ -34,6 +36,36 @@ public void testAnalyze() {
}
}

@Test
public void testAnalyzeTags() {
List<TunnelSocketStatsAnalyzer.FrontendAndBackendMetrics> result = manager.analyze(new DefaultProxyChain("FRA-AWS", "cluster", "shard", "sharb", Lists.newArrayList(
tunnelInfo3()
)));
int index = 1;

List<String> requireTags = Lists.newArrayList("srcPortReminder", "srcHostPort", "dstHostPort", "dstPortReminder");
for(TunnelSocketStatsAnalyzer.FrontendAndBackendMetrics metric : result) {

logger.info("tunnel-{}", index++);
logger.info("frontend:");
logger.info("{}: {}", metric.getFrontend().getMetricType(), metric.getFrontend().getValue());
Map<String, String> frontendTags = metric.getFrontend().getTags();
for(String tag : requireTags) {
Assert.assertTrue(frontendTags.containsKey(tag));
}

logger.info("backend:");
logger.info("{}: {}", metric.getBackend().getMetricType(), metric.getBackend().getValue());
Map<String, String> backendTags = metric.getBackend().getTags();
for(String tag : requireTags) {
Assert.assertTrue(backendTags.containsKey(tag));
}

}
}



private DefaultTunnelInfo tunnelInfo1() {
DefaultTunnelInfo info = new DefaultTunnelInfo(new ProxyModel().setDcName("oy").setHostPort(HostPort.fromString("10.2.131.201:47082")),
"10.2.131.242:55306-R(10.2.131.200:53868)-L(10.2.131.201:47082)->R(10.2.73.170:6389)-TCP://10.2.73.170:6389");
Expand All @@ -53,4 +85,16 @@ private DefaultTunnelInfo tunnelInfo2() {
info.setTunnelStatsResult(new TunnelStatsResult(info.getTunnelId(), "established", System.currentTimeMillis(), System.currentTimeMillis(), HostPort.fromString("10.2.131.201:47082"), HostPort.fromString("10.2.131.201:47082")));
return info;
}

private DefaultTunnelInfo tunnelInfo3() {
DefaultTunnelInfo info = new DefaultTunnelInfo(new ProxyModel().setDcName("fra-aws").setHostPort(new HostPort("10.2.131.200", 53868)),
"10.2.131.242:55306-R(10.2.131.242:55306)-L(10.2.131.200:53868)->R(10.2.131.201:443-TCP://10.2.73.170:6389");
info.setTunnelSocketStatsResult(new TunnelSocketStatsResult(info.getTunnelId(),
new SocketStatsResult(Lists.newArrayList("ESTAB 0 285 ", "skmem:(r0,rb374400,t0,tb130560,f1251,w2845,o0,bl0) bbr wscale:10,10 rto:459 rtt:258.008/0.348 ato:40 mss:1460 cwnd:11 send 498.0Kbps unacked:2 retrans:0/3119 rcv_rtt:517020 rcv_space:40824")),
new SocketStatsResult(Lists.newArrayList("ESTAB 0 0 ::ffff:10.28.81.65:36190 ::ffff:10.28.97.195:5379 ", "skmem:(r0,rb566888,t0,tb130560,f4096,w0,o0,bl0) bbr wscale:7,10 rto:203 rtt:2.043/3.712 ato:87 mss:1448 cwnd:11 send 62.4Mbps rcv_rtt:1 rcv_space:57729"))));
info.setTunnelStatsResult(new TunnelStatsResult(info.getTunnelId(), "established", System.currentTimeMillis(), System.currentTimeMillis(), HostPort.fromString("10.2.131.201:47082"), HostPort.fromString("10.2.131.201:47082")));
return info;
}


}

0 comments on commit 7389327

Please sign in to comment.