Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. public class MetricHolder {
  2. private final AtomicReference<ConcurrentHashMap<String, AtomicLongMap<String>>> metricHolderByType =
  3. new AtomicReference<>(new ConcurrentHashMap<String, AtomicLongMap<String>>());
  4. private final ScheduledExecutorService executorService = Executors
  5. .newSingleThreadScheduledExecutor();
  6.  
  7. private static class Holder {
  8. private static final MetricHolder INSTANCE = new MetricHolder();
  9. }
  10.  
  11. public static MetricHolder getInstance() {
  12. return Holder.INSTANCE;
  13. }
  14.  
  15. private MetricHolder() {
  16. executorService.scheduleAtFixedRate(new Runnable() {
  17. @Override
  18. public void run() {
  19. SendToDatabase.getInstance().send(
  20. metricHolderByType
  21. .getAndSet(new ConcurrentHashMap<String, AtomicLongMap<String>>()));
  22. }
  23. }, 0, 30, SECONDS);
  24. }
  25.  
  26. // this is called from multiple threads
  27. public void incrementByType(String type, TypeOfMetrics... metricsType) {
  28. for (TypeOfMetrics metricType : metricsType) {
  29. ConcurrentMap<String, AtomicLongMap<String>> metricsHolderByType =
  30. metricHolderByType.get();
  31. AtomicLongMap<String> metricHolder = metricsHolderByType.get(type);
  32. if (metricHolder == null) {
  33. metricHolder = AtomicLongMap.create();
  34. AtomicLongMap<String> currentMetricHolder =
  35. metricsHolderByType.putIfAbsent(type, metricHolder);
  36. if (currentMetricHolder != null) {
  37. metricHolder = currentMetricHolder;
  38. }
  39. }
  40. metricHolder.incrementAndGet(metricType.value);
  41. }
  42. }
  43.  
  44. // this contains more metrics but for example I have few here
  45. public enum TypeOfMetrics {
  46. RECORDS_DROPPED("records-dropped"), TOTAL_EVENTS("total-events"), ENCODE_ERROR(
  47. "encode-error");
  48. private final String value;
  49.  
  50. private TypeOfMetrics(String value) {
  51. this.value = value;
  52. }
  53.  
  54. public String value() {
  55. return value;
  56. }
  57.  
  58. @Override
  59. public String toString() {
  60. return name() + "=" + value;
  61. }
  62. };
  63. }
  64.  
  65. SlackApi api = new SlackApi("slack-hook-url");
  66. // Send simple message
  67. api.call(new SlackMessage("#test-webhook-java", "Mafagafo", "message"));
  68.  
  69. {"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