Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class MetricHolder {
- private final AtomicReference<ConcurrentHashMap<String, AtomicLongMap<String>>> metricHolderByType =
- new AtomicReference<>(new ConcurrentHashMap<String, AtomicLongMap<String>>());
- private final ScheduledExecutorService executorService = Executors
- .newSingleThreadScheduledExecutor();
- private static class Holder {
- private static final MetricHolder INSTANCE = new MetricHolder();
- }
- public static MetricHolder getInstance() {
- return Holder.INSTANCE;
- }
- private MetricHolder() {
- executorService.scheduleAtFixedRate(new Runnable() {
- @Override
- public void run() {
- SendToDatabase.getInstance().send(
- metricHolderByType
- .getAndSet(new ConcurrentHashMap<String, AtomicLongMap<String>>()));
- }
- }, 0, 30, SECONDS);
- }
- // this is called from multiple threads
- public void incrementByType(String type, TypeOfMetrics... metricsType) {
- for (TypeOfMetrics metricType : metricsType) {
- ConcurrentMap<String, AtomicLongMap<String>> metricsHolderByType =
- metricHolderByType.get();
- AtomicLongMap<String> metricHolder = metricsHolderByType.get(type);
- if (metricHolder == null) {
- metricHolder = AtomicLongMap.create();
- AtomicLongMap<String> currentMetricHolder =
- metricsHolderByType.putIfAbsent(type, metricHolder);
- if (currentMetricHolder != null) {
- metricHolder = currentMetricHolder;
- }
- }
- metricHolder.incrementAndGet(metricType.value);
- }
- }
- // this contains more metrics but for example I have few here
- public enum TypeOfMetrics {
- RECORDS_DROPPED("records-dropped"), TOTAL_EVENTS("total-events"), ENCODE_ERROR(
- "encode-error");
- private final String value;
- private TypeOfMetrics(String value) {
- this.value = value;
- }
- public String value() {
- return value;
- }
- @Override
- public String toString() {
- return name() + "=" + value;
- }
- };
- }
- SlackApi api = new SlackApi("slack-hook-url");
- // Send simple message
- api.call(new SlackMessage("#test-webhook-java", "Mafagafo", "message"));
- {"type":"whatever is the key for the map where RECORDS_DROPPED is greater than zero", "metric":"name of metric for eg: it can be records-dropped", "count":"whatever is the count which is greater than zero for records-dropped example"}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement