java.lang.Object
org.rrd4j.core.Util

public class Utilextends Object
Class defines various utility functions used in Rrd4j.
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static class 
    Various DOM utility functions.
  • Field Summary

    Modifier and Type
    Field
    Description
    (package private) static final ThreadLocal<NumberFormat>
    Per-thread NumberFormat applying PATTERN and a leading '+' for positives
    (package private) static final String
    The single date pattern getCalendar(String) accepts and names on failure
    private static long
    When the previous lap of the timer ended.
    static final double
    Constant MAX_DOUBLE=Double.MAX_VALUE
    static final long
    Constant MAX_LONG=Long.MAX_VALUE
    static final double
    Constant MIN_DOUBLE=-Double.MAX_VALUE
    static final long
    Constant MIN_LONG=-Long.MAX_VALUE
    (package private) static final String
    DecimalFormat pattern giving the RRDTool-like "+1.234567E+02" rendering
    (package private) static final String
    Name of the directory created under the user home for demo graphs
    private static final Pattern
    Matches a sprintf-style placeholder in a format string.
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    private
    Utility class, not intended for instantiation.
  • Method Summary

    Public Methods
    Modifier and Type
    Method
    Description
    static boolean
    equal(double x, double y)
    Compares two doubles but treats all NaNs as equal.
    static boolean
    fileExists(String filename)
    Checks if the file with the given file name exists
    static String
    formatDouble(double x)
    Formats double as a string using exponential notation (RRDTool like).
    (package private) static String
    formatDouble(double x, boolean forceExponents)
    Formats a double value as a string with default NaN string.
    (package private) static String
    formatDouble(double x, String nanString, boolean forceExponents)
    Formats a double value as a string.
    static Calendar
    getCalendar(long timestamp)
    Returns Calendar object for the given timestamp (in seconds, without milliseconds)
    static Calendar
    Creates Calendar object from a string.
    static Calendar
    Returns Calendar object for the given Date object
    static String
    Returns canonical file path for the given file path
    static Date
    getDate(long timestamp)
    Returns Date object for the given timestamp (in seconds, without milliseconds)
    static String
    Returns file system separator string.
    static String
    Function used for debugging purposes and performance bottlenecks detection.
    static long
    Returns last modification time for the given file.
    (package private) static int
    getMatchingArchiveIndex(RrdDb rrd1, int arcIndex, RrdDb rrd2)
    Looks up in rrd2 the archive whose consolidation function and row count match archive arcIndex of rrd1
    (package private) static int
    getMatchingDatasourceIndex(RrdDb rrd1, int dsIndex, RrdDb rrd2)
    Looks up in rrd2 the datasource sharing the name of datasource dsIndex of rrd1
    static String
    Returns path to directory used for placement of Rrd4j demo graphs and creates it if necessary.
    static String
    Returns full path to the file stored in the demo directory of Rrd4j
    static String
    Returns the root directory of the Rrd4j distribution.
    static long
    Returns current timestamp in seconds (without milliseconds).
    static long
    Just an alias for getTime() method.
    static long
    getTimestamp(int year, int month, int day)
    Returns timestamp (unix epoch) for the given year, month and day.
    static long
    getTimestamp(int year, int month, int day, int hour, int min)
    Returns timestamp (unix epoch) for the given year, month, day, hour and minute.
    static long
    getTimestamp(String atStyleTimeSpec)
    Parses at-style time specification and returns the corresponding timestamp.
    static long
    Returns timestamp (unix epoch) for the given Calendar object
    static long
    Returns timestamp (unix epoch) for the given Date object
    static long[]
    getTimestamps(String atStyleTimeSpec1, String atStyleTimeSpec2)
    Parses two related at-style time specifications and returns corresponding timestamps.
    (package private) static String
    Creates a new empty temporary file with the rrd4j_ prefix and .tmp suffix
    static String
    Returns path to user's home directory.
    static boolean
    Checks if a string can be parsed as double.
    static double
    max(double[] values)
    Finds max value for an array of doubles (NaNs are ignored).
    static double
    max(double x, double y)
    Returns the greater of two double values, but treats NaN as the smallest possible value.
    static double
    min(double[] values)
    Finds min value for an array of doubles (NaNs are ignored).
    static double
    min(double x, double y)
    Returns the smaller of two double values, but treats NaN as the greatest possible value.
    static long
    normalize(long timestamp, long step)
    Rounds the given timestamp to the nearest whole "step".
    static boolean
    parseBoolean(String valueStr)
    Parses input string as a boolean value.
    static Paint
    parseColor(String valueStr)
    Parses input string as color.
    static double
    parseDouble(String valueStr)
    Parses input string as a double value.
    (package private) static boolean
    sameFilePath(String pathname1, String pathname2)
    Tells whether two paths denote the same existing file, resolving symbolic links
    static String
    sprintf(Locale l, String format, Object... args)
    Equivalent of the C-style sprintf function.
    static double
    sum(double x, double y)
    Calculates sum of two doubles, but treats NaNs as zeros.
    static double[]
    toDoubleArray(long[] array)
    Converts an array of long primitives to an array of doubles.

    Methods inherited from class Object

    clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • MAX_LONG

      public static final long MAX_LONG
      Constant MAX_LONG=Long.MAX_VALUE
      See Also:
    • MIN_LONG

      public static final long MIN_LONG
      Constant MIN_LONG=-Long.MAX_VALUE
      See Also:
    • MAX_DOUBLE

      public static final double MAX_DOUBLE
      Constant MAX_DOUBLE=Double.MAX_VALUE
      See Also:
    • MIN_DOUBLE

      public static final double MIN_DOUBLE
      Constant MIN_DOUBLE=-Double.MAX_VALUE
      See Also:
    • PATTERN

      static final String PATTERN
      DecimalFormat pattern giving the RRDTool-like "+1.234567E+02" rendering
      See Also:
    • RRD4J_DIR

      static final String RRD4J_DIR
      Name of the directory created under the user home for demo graphs
      See Also:
    • df

      static final ThreadLocal<NumberFormat> df
      Per-thread NumberFormat applying PATTERN and a leading '+' for positives
    • SPRINTF_PATTERN

      private static final Pattern SPRINTF_PATTERN
      Matches a sprintf-style placeholder in a format string.
    • ISO_DATE_FORMAT

      static final String ISO_DATE_FORMAT
      The single date pattern getCalendar(String) accepts and names on failure
      See Also:
    • lastLap

      private static long lastLap
      When the previous lap of the timer ended.
  • Constructor Details

    • Util

      private Util()
      Utility class, not intended for instantiation.
  • Method Details

    • toDoubleArray

      public static double[] toDoubleArray(long[] array)
      Converts an array of long primitives to an array of doubles.
      Parameters:
      array - input array of long values.
      Returns:
      Same array but with all values as double.
    • getTime

      public static long getTime()
      Returns current timestamp in seconds (without milliseconds). Returned timestamp is obtained with the following expression:

      (System.currentTimeMillis() + 500L) / 1000L

      Returns:
      Current timestamp in seconds, rounded to the nearest whole second
    • getTimestamp

      public static long getTimestamp()
      Just an alias for getTime() method.
      Returns:
      Current timestamp (without milliseconds)
    • normalize

      public static long normalize(long timestamp, long step)
      Rounds the given timestamp to the nearest whole "step". Rounded value is obtained from the following expression:

      timestamp - timestamp % step;

      Parameters:
      timestamp - Timestamp in seconds
      step - Step in seconds
      Returns:
      the timestamp floored to a multiple of step
    • max

      public static double max(double x, double y)
      Returns the greater of two double values, but treats NaN as the smallest possible value. Note that Math.max() behaves differently for NaN arguments.
      Parameters:
      x - the first value, which loses to y when it is NaN
      y - the second value, which loses to x when it is NaN
      Returns:
      the lager of arguments
    • min

      public static double min(double x, double y)
      Returns the smaller of two double values, but treats NaN as the greatest possible value. Note that Math.min() behaves differently for NaN arguments.
      Parameters:
      x - the first value, which loses to y when it is NaN
      y - the second value, which loses to x when it is NaN
      Returns:
      the smaller of arguments
    • sum

      public static double sum(double x, double y)
      Calculates sum of two doubles, but treats NaNs as zeros.
      Parameters:
      x - First double
      y - Second double
      Returns:
      Sum(x,y) calculated as Double.isNaN(x)? y: Double.isNaN(y)? x: x + y;
    • formatDouble

      static String formatDouble(double x, String nanString, boolean forceExponents)
      Formats a double value as a string.
      Parameters:
      x - value to format
      nanString - string to use for NaN values
      forceExponents - whether to force exponential notation
      Returns:
      formatted string
    • formatDouble

      static String formatDouble(double x, boolean forceExponents)
      Formats a double value as a string with default NaN string.
      Parameters:
      x - value to format
      forceExponents - whether to force exponential notation
      Returns:
      formatted string
    • formatDouble

      public static String formatDouble(double x)
      Formats double as a string using exponential notation (RRDTool like). Used for debugging through the project.
      Parameters:
      x - value to be formatted
      Returns:
      string like "+1.234567E+02"
    • getDate

      public static Date getDate(long timestamp)
      Returns Date object for the given timestamp (in seconds, without milliseconds)
      Parameters:
      timestamp - Timestamp in seconds.
      Returns:
      Corresponding Date object.
    • getCalendar

      public static Calendar getCalendar(long timestamp)
      Returns Calendar object for the given timestamp (in seconds, without milliseconds)
      Parameters:
      timestamp - Timestamp in seconds.
      Returns:
      Corresponding Calendar object.
    • getCalendar

      public static Calendar getCalendar(Date date)
      Returns Calendar object for the given Date object
      Parameters:
      date - instant to build the calendar from, in the default time zone
      Returns:
      Corresponding Calendar object.
    • getTimestamp

      public static long getTimestamp(Date date)
      Returns timestamp (unix epoch) for the given Date object
      Parameters:
      date - instant to build the calendar from, in the default time zone
      Returns:
      Corresponding timestamp (without milliseconds)
    • getTimestamp

      public static long getTimestamp(Calendar gc)
      Returns timestamp (unix epoch) for the given Calendar object
      Parameters:
      gc - Calendar object
      Returns:
      Corresponding timestamp (without milliseconds)
    • getTimestamp

      public static long getTimestamp(int year, int month, int day, int hour, int min)
      Returns timestamp (unix epoch) for the given year, month, day, hour and minute.

      The date is resolved in the current time zone

      Parameters:
      year - full year number, such as 2024
      month - zero-based month, 0 for January through 11 for December
      day - Day in month
      hour - hour of day, 0-23
      min - minute within the hour, 0-59
      Returns:
      unix epoch timestamp, resolved in the current time zone
    • getTimestamp

      public static long getTimestamp(int year, int month, int day)
      Returns timestamp (unix epoch) for the given year, month and day.

      The date is resolved in the current time zone

      Parameters:
      year - full year number, such as 2024
      month - zero-based month, 0 for January through 11 for December
      day - Day in month
      Returns:
      unix epoch timestamp for midnight in the current time zone
    • getTimestamp

      public static long getTimestamp(String atStyleTimeSpec)
      Parses at-style time specification and returns the corresponding timestamp. For example:
      long t = Util.getTimestamp("now-1d");
      
      Parameters:
      atStyleTimeSpec - at-style time specification. For the complete explanation of the syntax allowed see RRDTool's rrdfetch man page.
      Returns:
      timestamp in seconds since epoch.
    • getTimestamps

      public static long[] getTimestamps(String atStyleTimeSpec1, String atStyleTimeSpec2)
      Parses two related at-style time specifications and returns corresponding timestamps. For example:
      long[] t = Util.getTimestamps("end-1d","now");
      
      Parameters:
      atStyleTimeSpec1 - Starting at-style time specification. For the complete explanation of the syntax allowed see RRDTool's rrdfetch man page.
      atStyleTimeSpec2 - Ending at-style time specification. For the complete explanation of the syntax allowed see RRDTool's rrdfetch man page.
      Returns:
      An array of two longs representing starting and ending timestamp in seconds since epoch.
    • parseDouble

      public static double parseDouble(String valueStr)
      Parses input string as a double value. If the value cannot be parsed, Double.NaN is returned (NumberFormatException is never thrown).
      Parameters:
      valueStr - String representing double value
      Returns:
      a double corresponding to the input string
    • isDouble

      public static boolean isDouble(String s)
      Checks if a string can be parsed as double.
      Parameters:
      s - Input string
      Returns:
      true if the string can be parsed as double, false otherwise
    • parseBoolean

      public static boolean parseBoolean(String valueStr)
      Parses input string as a boolean value. The parser is case insensitive.
      Parameters:
      valueStr - String representing boolean value
      Returns:
      true, if valueStr equals to 'true', 'on', 'yes', 'y' or '1'; false in all other cases.
    • parseColor

      public static Paint parseColor(String valueStr)
      Parses input string as color. The color string should be of the form #RRGGBB (no alpha specified, opaque color) or #RRGGBBAA (alpa specified, transparent colors). Leading character '#' is optional.
      Parameters:
      valueStr - Input string, for example #FFAA24, #AABBCC33, 010203 or ABC13E4F
      Returns:
      Paint object
      Throws:
      IllegalArgumentException - If the input string is not 6 or 8 characters long (without optional '#')
    • getFileSeparator

      public static String getFileSeparator()
      Returns file system separator string.
      Returns:
      File system separator ("/" on Unix, "\" on Windows)
    • getUserHomeDirectory

      public static String getUserHomeDirectory()
      Returns path to user's home directory.
      Returns:
      Path to users home directory, with file separator appended.
    • getRrd4jDemoDirectory

      public static String getRrd4jDemoDirectory()
      Returns path to directory used for placement of Rrd4j demo graphs and creates it if necessary.
      Returns:
      Path to demo directory (defaults to $HOME/rrd4j/) if directory exists or was successfully created. Null if such directory could not be created.
    • getRrd4jDemoPath

      public static String getRrd4jDemoPath(String filename)
      Returns full path to the file stored in the demo directory of Rrd4j
      Parameters:
      filename - Partial path to the file stored in the demo directory of Rrd4j (just name and extension, without parent directories)
      Returns:
      Full path to the file
    • sameFilePath

      static boolean sameFilePath(String pathname1, String pathname2) throws IOException
      Tells whether two paths denote the same existing file, resolving symbolic links
      Parameters:
      pathname1 - first file path, absolute or relative
      pathname2 - second file path, absolute or relative
      Returns:
      true if both paths exist and resolve to one file, false if their existence differs or neither path exists
      Throws:
      IOException - Thrown if a path cannot be resolved to its canonical form
    • getMatchingDatasourceIndex

      static int getMatchingDatasourceIndex(RrdDb rrd1, int dsIndex, RrdDb rrd2) throws IOException
      Looks up in rrd2 the datasource sharing the name of datasource dsIndex of rrd1
      Parameters:
      rrd1 - database to read the datasource name from
      dsIndex - zero-based datasource index within rrd1
      rrd2 - database to search by name
      Returns:
      matching datasource index in rrd2, or -1 if no datasource has that name
      Throws:
      IOException - Thrown if either database cannot be read
    • getMatchingArchiveIndex

      static int getMatchingArchiveIndex(RrdDb rrd1, int arcIndex, RrdDb rrd2) throws IOException
      Looks up in rrd2 the archive whose consolidation function and row count match archive arcIndex of rrd1
      Parameters:
      rrd1 - database to read the archive properties from
      arcIndex - zero-based archive index within rrd1
      rrd2 - database to search by consolidation function and step count
      Returns:
      matching archive index in rrd2, or -1 if no archive matches
      Throws:
      IOException - Thrown if either database cannot be read
    • getTmpFilename

      static String getTmpFilename() throws IOException
      Creates a new empty temporary file with the rrd4j_ prefix and .tmp suffix
      Returns:
      canonical path to the newly created file
      Throws:
      IOException - Thrown if the file cannot be created or its path not resolved
    • getCalendar

      public static Calendar getCalendar(String timeStr)
      Creates Calendar object from a string. The string should represent either a long integer (UNIX timestamp in seconds without milliseconds, like "1002354657") or a human readable date string in the format "yyyy-MM-dd HH:mm:ss" (like "2004-02-25 12:23:45").
      Parameters:
      timeStr - Input string
      Returns:
      Calendar object
    • getLapTime

      public static String getLapTime()
      Function used for debugging purposes and performance bottlenecks detection. Probably of no use for end users of Rrd4j.
      Returns:
      String representing time in seconds since last getLapTime() method call.
    • getRrd4jHomeDirectory

      public static String getRrd4jHomeDirectory()
      Returns the root directory of the Rrd4j distribution. Useful in some demo applications, probably of no use anywhere else.

      The function assumes that all Rrd4j .class files are placed under the <root>/classes subdirectory and that all jars (libraries) are placed in the <root>/lib subdirectory (the original Rrd4j directory structure).

      Returns:
      absolute path to Rrd4j's home directory
    • equal

      public static boolean equal(double x, double y)
      Compares two doubles but treats all NaNs as equal. In Java (by default) Double.NaN == Double.NaN always returns false
      Parameters:
      x - the first value
      y - the second value
      Returns:
      true if x and y are both equal to Double.NaN, or if x == y. false otherwise
    • getCanonicalPath

      public static String getCanonicalPath(String path) throws IOException
      Returns canonical file path for the given file path
      Parameters:
      path - Absolute or relative file path
      Returns:
      Canonical file path
      Throws:
      IOException - Thrown if canonical file path could not be resolved
    • getLastModifiedTime

      public static long getLastModifiedTime(String file) throws IOException
      Returns last modification time for the given file.
      Parameters:
      file - File object representing file on the disk
      Returns:
      Last modification time in seconds (without milliseconds)
      Throws:
      IOException - Thrown if the file cannot be read or the path cannot be resolved
    • fileExists

      public static boolean fileExists(String filename)
      Checks if the file with the given file name exists
      Parameters:
      filename - File name
      Returns:
      true if file exists, false otherwise
    • max

      public static double max(double[] values)
      Finds max value for an array of doubles (NaNs are ignored). If all values in the array are NaNs, NaN is returned.
      Parameters:
      values - Array of double values
      Returns:
      max value in the array (NaNs are ignored)
    • min

      public static double min(double[] values)
      Finds min value for an array of doubles (NaNs are ignored). If all values in the array are NaNs, NaN is returned.
      Parameters:
      values - Array of double values
      Returns:
      min value in the array (NaNs are ignored)
    • sprintf

      public static String sprintf(Locale l, String format, Object... args)
      Equivalent of the C-style sprintf function.
      Parameters:
      l - a Locale object.
      format - Format string
      args - Arbitrary list of arguments
      Returns:
      Formatted string