Skip to content

Commit 15385ea

Browse files
author
qifanwang
committed
set empty tag while tag can not get
add unit test
1 parent 08b055e commit 15385ea

File tree

2 files changed

+64
-3
lines changed

2 files changed

+64
-3
lines changed

redis/redis-console/src/main/java/com/ctrip/xpipe/redis/console/proxy/impl/AbstractTunnelSocketStatsAnalyzer.java

+20-3
Original file line numberDiff line numberDiff line change
@@ -134,20 +134,37 @@ private MetricData getFrontendMetric(MetricData metric, DefaultTunnelInfo info,
134134
private void setSrcDstHostPorts(MetricData metric, SocketStatsResult socketStatsResult, boolean isFrontend) {
135135
metric.addTag(METRIC_TAG_SOCKET_TYPE, isFrontend ? METRIC_TAG_SOCKET_TYPE_FRONTEND : METRIC_TAG_SOCKET_TYPE_BACKEND);
136136
String[] splits = socketStatsResult.getResult().get(0).split(SOCKET_STATS_SPLITTER);
137-
if (splits.length < 5) return;
137+
if (splits.length < 5) {
138+
setHostPortEmptyTag(metric, PREFIX_DST);
139+
setHostPortEmptyTag(metric, PREFIX_SRC);
140+
return;
141+
}
138142

139143
String[] localSplits = splits[3].split(HOST_SPLITTER);
140-
if (localSplits.length >= 5) setHostPortTag(metric, localSplits[3], Integer.valueOf(localSplits[4]), isFrontend ? PREFIX_DST : PREFIX_SRC);
144+
if (localSplits.length >= 5) {
145+
setHostPortTag(metric, localSplits[3], Integer.valueOf(localSplits[4]), isFrontend ? PREFIX_DST : PREFIX_SRC);
146+
} else {
147+
setHostPortEmptyTag(metric, isFrontend ? PREFIX_DST : PREFIX_SRC);
148+
}
141149

142150
String[] remoteSplits = splits[4].split(HOST_SPLITTER);
143-
if (remoteSplits.length >= 5) setHostPortTag(metric, remoteSplits[3], Integer.valueOf(remoteSplits[4]), isFrontend ? PREFIX_SRC : PREFIX_DST);
151+
if (remoteSplits.length >= 5) {
152+
setHostPortTag(metric, remoteSplits[3], Integer.valueOf(remoteSplits[4]), isFrontend ? PREFIX_SRC : PREFIX_DST);
153+
} else {
154+
setHostPortEmptyTag(metric, isFrontend ? PREFIX_SRC : PREFIX_DST);
155+
}
144156
}
145157

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

163+
private void setHostPortEmptyTag(MetricData metric, String prefix) {
164+
metric.addTag(prefix + "HostPort", "_");
165+
metric.addTag(prefix + "PortReminder", "_");
166+
}
167+
151168
private MetricData getMetricTemplate(DefaultTunnelInfo info, String clusterId, String shardId) {
152169
ProxyModel proxyModel = info.getProxyModel();
153170
return new MetricData(getType(), proxyModel.getDcName(), clusterId, shardId);

redis/redis-console/src/test/java/com/ctrip/xpipe/redis/console/proxy/impl/DefaultTunnelSocketStatsAnalyzerManagerTest.java

+44
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88
import com.ctrip.xpipe.redis.core.proxy.monitor.TunnelSocketStatsResult;
99
import com.ctrip.xpipe.redis.core.proxy.monitor.TunnelStatsResult;
1010
import com.google.common.collect.Lists;
11+
import org.junit.Assert;
1112
import org.junit.Test;
1213
import org.springframework.beans.factory.annotation.Autowired;
1314

1415
import java.util.List;
16+
import java.util.Map;
1517

1618
public class DefaultTunnelSocketStatsAnalyzerManagerTest extends AbstractConsoleIntegrationTest {
1719

@@ -34,6 +36,36 @@ public void testAnalyze() {
3436
}
3537
}
3638

39+
@Test
40+
public void testAnalyzeTags() {
41+
List<TunnelSocketStatsAnalyzer.FrontendAndBackendMetrics> result = manager.analyze(new DefaultProxyChain("FRA-AWS", "cluster", "shard", "sharb", Lists.newArrayList(
42+
tunnelInfo3()
43+
)));
44+
int index = 1;
45+
46+
List<String> requireTags = Lists.newArrayList("srcPortReminder", "srcHostPort", "dstHostPort", "dstPortReminder");
47+
for(TunnelSocketStatsAnalyzer.FrontendAndBackendMetrics metric : result) {
48+
49+
logger.info("tunnel-{}", index++);
50+
logger.info("frontend:");
51+
logger.info("{}: {}", metric.getFrontend().getMetricType(), metric.getFrontend().getValue());
52+
Map<String, String> frontendTags = metric.getFrontend().getTags();
53+
for(String tag : requireTags) {
54+
Assert.assertTrue(frontendTags.containsKey(tag));
55+
}
56+
57+
logger.info("backend:");
58+
logger.info("{}: {}", metric.getBackend().getMetricType(), metric.getBackend().getValue());
59+
Map<String, String> backendTags = metric.getBackend().getTags();
60+
for(String tag : requireTags) {
61+
Assert.assertTrue(backendTags.containsKey(tag));
62+
}
63+
64+
}
65+
}
66+
67+
68+
3769
private DefaultTunnelInfo tunnelInfo1() {
3870
DefaultTunnelInfo info = new DefaultTunnelInfo(new ProxyModel().setDcName("oy").setHostPort(HostPort.fromString("10.2.131.201:47082")),
3971
"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");
@@ -53,4 +85,16 @@ private DefaultTunnelInfo tunnelInfo2() {
5385
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")));
5486
return info;
5587
}
88+
89+
private DefaultTunnelInfo tunnelInfo3() {
90+
DefaultTunnelInfo info = new DefaultTunnelInfo(new ProxyModel().setDcName("fra-aws").setHostPort(new HostPort("10.2.131.200", 53868)),
91+
"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");
92+
info.setTunnelSocketStatsResult(new TunnelSocketStatsResult(info.getTunnelId(),
93+
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")),
94+
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"))));
95+
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")));
96+
return info;
97+
}
98+
99+
56100
}

0 commit comments

Comments
 (0)