|
|
|
@ -15,28 +15,44 @@ |
|
|
|
*/ |
|
|
|
package org.thingsboard.server.common.stats; |
|
|
|
|
|
|
|
import io.micrometer.core.instrument.Timer; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.thingsboard.server.common.data.FstStatsService; |
|
|
|
|
|
|
|
import java.util.concurrent.ConcurrentHashMap; |
|
|
|
import java.util.concurrent.TimeUnit; |
|
|
|
|
|
|
|
@Service |
|
|
|
public class FstStatsServiceImpl implements FstStatsService { |
|
|
|
private final ConcurrentHashMap<String, StatsCounter> encodeCounters = new ConcurrentHashMap<>(); |
|
|
|
private final ConcurrentHashMap<String, StatsCounter> decodeCounters = new ConcurrentHashMap<>(); |
|
|
|
private final ConcurrentHashMap<String, Timer> encodeTimers = new ConcurrentHashMap<>(); |
|
|
|
private final ConcurrentHashMap<String, Timer> decodeTimer = new ConcurrentHashMap<>(); |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private StatsFactory statsFactory; |
|
|
|
|
|
|
|
@Override |
|
|
|
public void incrementEncode(Class<?> clazz) { |
|
|
|
encodeCounters.computeIfAbsent(clazz.getSimpleName(), key -> statsFactory.createStatsCounter("fstEncode", key)).increment(); |
|
|
|
encodeCounters.computeIfAbsent(clazz.getSimpleName(), key -> statsFactory.createStatsCounter("fst_encode", key)).increment(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void incrementDecode(Class<?> clazz) { |
|
|
|
decodeCounters.computeIfAbsent(clazz.getSimpleName(), key -> statsFactory.createStatsCounter("fstDecode", key)).increment(); |
|
|
|
decodeCounters.computeIfAbsent(clazz.getSimpleName(), key -> statsFactory.createStatsCounter("fst_decode", key)).increment(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void recordEncodeTime(Class<?> clazz, long startTime) { |
|
|
|
encodeTimers.computeIfAbsent(clazz.getSimpleName(), |
|
|
|
key -> statsFactory.createTimer("fst_encode_time", "statsName", key)).record(System.nanoTime() - startTime, TimeUnit.NANOSECONDS); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void recordDecodeTime(Class<?> clazz, long startTime) { |
|
|
|
decodeTimer.computeIfAbsent(clazz.getSimpleName(), |
|
|
|
key -> statsFactory.createTimer("fst_decode_time", "statsName", key)).record(System.nanoTime() - startTime, TimeUnit.NANOSECONDS); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|