Class CompareMetrics


  • public class CompareMetrics
    extends java.lang.Object
    Tools to (1) dump all protocols and the names of their attributes (ManagedAttribute) and properties (Property) to file, (2) read from that file ('old) and compare whether old is a proper subset of new, ie. if all protocols and attributes/properties still have the same names in new.
    To be run before releasing a new version (mainly minor and micro).
    Since:
    5.4.4
    Author:
    Bela Ban
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected static java.lang.String[] PACKAGES  
      protected static java.lang.String ROOT_PACKAGE  
    • Constructor Summary

      Constructors 
      Constructor Description
      CompareMetrics()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      protected static boolean compareAttributes​(java.util.Collection<java.lang.String> new_attrs, java.util.Collection<java.lang.String> old_attrs)  
      protected static void compareMetrics​(java.util.Map<java.lang.String,​java.util.Collection<java.lang.String>> new_metrics, java.util.Map<java.lang.String,​java.util.Collection<java.lang.String>> old_metrics)
      Compares the new to the old metrics by removing 'old' from 'new' (if present in both 'new' and 'old').
      If protocols/attributes remain, then either new protocols or attributes were added in new, or attributes / protocols changed.
      static int copy​(java.io.Reader input, java.io.Writer output)  
      protected static java.util.Collection<java.lang.String> getAttributes​(java.lang.Class<?> clazz, java.lang.String prefix)  
      protected static java.util.Set<java.lang.Class<?>> getProtocols()  
      static void main​(java.lang.String[] args)  
      protected static java.lang.String print​(java.util.Map<java.lang.String,​java.util.Collection<java.lang.String>> map)  
      protected static java.util.Map<java.lang.String,​java.util.Collection<java.lang.String>> readCurrentMetrics()  
      protected static java.util.Map<java.lang.String,​java.util.Collection<java.lang.String>> readOldMetrics​(java.lang.String from_file)  
      protected static java.lang.String readUntilBracket​(java.io.InputStream in)
      Reads until the next bracket '}' and returns the string excluding the bracket, or throws an exception if no bracket has been found
      protected static void replaceVariables​(java.io.InputStream in, java.io.OutputStream out, java.util.Properties p)
      Reads from the input stream and replaces occurrences of ${PROT} with p.get("PROT") and writes this to the output stream.
      protected static void writeMetricsToFile​(java.util.Map<java.lang.String,​java.util.Collection<java.lang.String>> metrics, java.lang.String to_file)  
      protected static void writeVarToStream​(java.lang.String var, java.util.Properties p, java.io.OutputStream out)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • PACKAGES

        protected static final java.lang.String[] PACKAGES
    • Constructor Detail

      • CompareMetrics

        public CompareMetrics()
    • Method Detail

      • main

        public static void main​(java.lang.String[] args)
                         throws java.io.IOException,
                                java.lang.ClassNotFoundException
        Throws:
        java.io.IOException
        java.lang.ClassNotFoundException
      • readOldMetrics

        protected static java.util.Map<java.lang.String,​java.util.Collection<java.lang.String>> readOldMetrics​(java.lang.String from_file)
                                                                                                              throws java.io.IOException
        Throws:
        java.io.IOException
      • readCurrentMetrics

        protected static java.util.Map<java.lang.String,​java.util.Collection<java.lang.String>> readCurrentMetrics()
                                                                                                                  throws java.io.IOException,
                                                                                                                         java.lang.ClassNotFoundException
        Throws:
        java.io.IOException
        java.lang.ClassNotFoundException
      • getProtocols

        protected static java.util.Set<java.lang.Class<?>> getProtocols()
                                                                 throws java.io.IOException,
                                                                        java.lang.ClassNotFoundException
        Throws:
        java.io.IOException
        java.lang.ClassNotFoundException
      • writeMetricsToFile

        protected static void writeMetricsToFile​(java.util.Map<java.lang.String,​java.util.Collection<java.lang.String>> metrics,
                                                 java.lang.String to_file)
                                          throws java.io.IOException
        Throws:
        java.io.IOException
      • compareMetrics

        protected static void compareMetrics​(java.util.Map<java.lang.String,​java.util.Collection<java.lang.String>> new_metrics,
                                             java.util.Map<java.lang.String,​java.util.Collection<java.lang.String>> old_metrics)
        Compares the new to the old metrics by removing 'old' from 'new' (if present in both 'new' and 'old').
        If protocols/attributes remain, then either new protocols or attributes were added in new, or attributes / protocols changed. E.g. an attribute changes from "number_of_messages" -> "num_msgs", then "number_of_attributes" will remain in 'old' and "num_msgs" in 'new'.
        The goal is that all attributes of 'old' also need to be in 'new', or else we have an incompatible change in that an attribute was renamed or removed. If an attribute or protocol is only in 'new', that's acceptable and means that it was added in 'new.
      • compareAttributes

        protected static boolean compareAttributes​(java.util.Collection<java.lang.String> new_attrs,
                                                   java.util.Collection<java.lang.String> old_attrs)
      • print

        protected static java.lang.String print​(java.util.Map<java.lang.String,​java.util.Collection<java.lang.String>> map)
      • getAttributes

        protected static java.util.Collection<java.lang.String> getAttributes​(java.lang.Class<?> clazz,
                                                                              java.lang.String prefix)
                                                                       throws java.io.IOException,
                                                                              java.lang.ClassNotFoundException
        Throws:
        java.io.IOException
        java.lang.ClassNotFoundException
      • replaceVariables

        protected static void replaceVariables​(java.io.InputStream in,
                                               java.io.OutputStream out,
                                               java.util.Properties p)
        Reads from the input stream and replaces occurrences of ${PROT} with p.get("PROT") and writes this to the output stream. If no value is found, then the ${PROT} will simple be omitted from the output. Escaped values of the form \${PROT} are not looked up and the value without the backslash will be written to the output stream.
      • writeVarToStream

        protected static void writeVarToStream​(java.lang.String var,
                                               java.util.Properties p,
                                               java.io.OutputStream out)
                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • readUntilBracket

        protected static java.lang.String readUntilBracket​(java.io.InputStream in)
                                                    throws java.io.IOException
        Reads until the next bracket '}' and returns the string excluding the bracket, or throws an exception if no bracket has been found
        Throws:
        java.io.IOException
      • copy

        public static int copy​(java.io.Reader input,
                               java.io.Writer output)
                        throws java.io.IOException
        Throws:
        java.io.IOException