public static function validateConstructorArgs($name, $globalThreshold, $metric,
                                                 $metricFactor, $componentThreshold,
                                                 $components, $validMetrics)
  {
    if (!self::validateName($name))
      throw new \Franzip\Throttler\Exceptions\InvalidArgumentException('Invalid Throttler $name: please supply a valid non-empty string.');

    if (!self::validateGlobalThreshold($globalThreshold))
      throw new \Franzip\Throttler\Exceptions\InvalidArgumentException('Invalid Throttler $globalThreshold: please supply a positive integer.');

    if (!self::validateMetric($metric, $validMetrics))
      throw new \Franzip\Throttler\Exceptions\InvalidArgumentException('Invalid Throttler $metric. Valid choices are "sec", "min", "hrs".');

    if (!self::validateMetricFactor($metricFactor))
      throw new \Franzip\Throttler\Exceptions\InvalidArgumentException('Invalid Throttler $metricFactor: please supply a positive integer.');

    if (!self::validateComponentThreshold($componentThreshold))
      throw new \Franzip\Throttler\Exceptions\InvalidArgumentException('Invalid Throttler $componentThreshold: please supply a positive integer or null.');

    if (!self::compareThresholds($componentThreshold, $globalThreshold))
      throw new \Franzip\Throttler\Exceptions\InvalidArgumentException('Invalid Throttler $componentThreshold: $componentThreshold must be lower than $globalThreshold.');

    if (!self::validateComponents($components))
      throw new \Franzip\Throttler\Exceptions\InvalidArgumentException('Invalid Throttler $components: $components must be an array.');

    if (!self::validateComponentsName($components))
      throw new \Franzip\Throttler\Exceptions\InvalidArgumentException('Invalid Throttler $components: $components entries must be non empty strings.');
    }