Example #1
0
    def parse(cls, config):
        if 'name' not in config:
            raise ConfigError('Dashboard name not specified.')

        name = config['name']
        config.setdefault('title', name)
        name = utils.slugify(name)
        config['name'] = name

        # request interval is converted to milliseconds for client side
        config['poll_interval'] = utils.parse_interval(config['poll_interval'])

        if 'widgets' not in config:
            raise ConfigError("Dashboard '%s' has no widgets" % name)

        widgets = DashboardWidgetConfigs(config.pop('backend', {}))

        for widget in config['widgets']:
            if widget == 'new_row':
                widgets.new_row()
            else:
                widgets.add_widget(widget)

        config['widgets'] = widgets.to_list()
        config['rows'] = widgets.by_row()
        return config
Example #2
0
    def parse(cls, config):
        config = super(GraphiteMetricConfig, cls).parse(config)

        config['bucket_size'] = utils.parse_interval(config['bucket_size'])

        config.setdefault(
            'agg_method',
            guess_aggregation_method(config['target']))

        return config
Example #3
0
    def parse(cls, config):
        super(ChartWidgetConfig, cls).parse(config)

        if "metrics" not in config:
            raise ConfigError("Chart widget '%s' needs metrics." % config["name"])

        config["time_range"] = utils.parse_interval(config["time_range"])
        config["bucket_size"] = utils.parse_interval(config["bucket_size"])

        config["backend"].update(
            {"bucket_size": config["bucket_size"], "metrics": [cls.parse_metric(m) for m in config.pop("metrics")]}
        )

        if "null_filter" in config:
            config["backend"]["null_filter"] = config.pop("null_filter")

        backend_config_cls = cls.for_type(config["backend"]["type"])
        config["backend"] = backend_config_cls(config["backend"])
        config["metrics"] = config["backend"]["metrics"]

        return config
Example #4
0
 def test_parse_interval(self):
     """
     Multiplier-suffixed intervals should be turned into integers correctly.
     """
     self.assertEqual(2, utils.parse_interval(2))
     self.assertEqual(2, utils.parse_interval("2"))
     self.assertEqual(2 * 1000, utils.parse_interval("2s"))
     self.assertEqual(120 * 1000, utils.parse_interval("2m"))
     self.assertEqual(7200 * 1000, utils.parse_interval("2h"))
     self.assertEqual(86400 * 1000 * 2, utils.parse_interval("2d"))
Example #5
0
    def parse(cls, config):
        config = super(LValueWidgetConfig, cls).parse(config)

        if 'target' not in config:
            raise ConfigError("All LValueWidgets need a target")

        config['time_range'] = utils.parse_interval(config['time_range'])

        config['backend'].update({
            'bucket_size': config['time_range'],
            'time_alignment': 'floor',
            'relative_time': True,
            'metrics': [{
                'target': config.pop('target'),
                'null_filter': 'skip',
            }]
        })

        backend_config_cls = cls.for_type(config['backend']['type'])
        config['backend'] = backend_config_cls(config['backend'])

        return config