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
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
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
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"))
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