コード例 #1
0
    def test_sscs_override_static_name(self):
        tile_config = {
            'tags': ['ip:192.168.1.1'],
            'tw_type': 'Range',
            'series_spec_list': [
                SeriesSpec(2, 0, dict(op='eq', args=['monique'])),
                SeriesSpec(2, 0, dict(op='eq', args=['john'])),
            ],
            'tile_options': {
                'seconds_back': 86400,
                'tile_title': 'Points by user'
            }
        }
        tile_config['series_spec_list'][0].params['static_name'] = 'monique_points'
        self.assertEqual('monique_points', tile_config['series_spec_list'][0].name())
        tile_config['tile_options']['sscs'] = tile_config['series_spec_list'][0]

        rd = new_report_data('points')

        tile = Tile.insert(rd.owner_id, rd.report.report_id, rd.dashboard_id, tile_config)
        layouts.place_tile(tile)

        d = [OrderedDict([('user_name', 'robert'), ('is_active', True), ('points', 128)]),
             OrderedDict([('user_name', 'monique'), ('is_active', True), ('points', 210)])]
        res = rd.report.process_input(json.dumps(d), tags=tile_config['tags'])
        tile = rd.only_tile_from_layout()
        self.assertEqual(3, len(tile.series_specs()))
        expected_ss = SeriesSpec(2, 0, dict(op='eq', args=['robert']))
        self.assertEqual('robert', expected_ss.name())
        self.assertEqual('robert', tile.series_specs()[-1].name())
コード例 #2
0
    def test_sscreator_as_mod(self):
        owner_id = uuid.uuid4()
        dashboard_id = uuid.uuid4()

        tile_config = {
            'series_spec_list': [
                SeriesSpec(1, 0, dict(op='eq', args=['label1'])),
            ],
            'tile_options': {
                'sscs': SeriesSpec(1, 0, dict(op='eq', args=['label1']))
            }
        }
        r = Report.insert(owner_id, 'r')
        tile = Tile.insert(owner_id, r.report_id, dashboard_id, tile_config)
        layouts.place_tile(tile)
        ri1 = r.process_input('label1 1',
                              handle_sscreator=False).report_instance
        ri2 = r.process_input('label11 11\nlabel12 12',
                              handle_sscreator=False).report_instance
        ri3 = r.process_input('label21 21\nlabel22 22',
                              handle_sscreator=False).report_instance
        layout_rows = c.dao.LayoutDAO.select_layout_by_report_multi(owner_id, r.report_id,
                                                                    [], 'sscs', 100)
        mods = [sscreator.sscreator_mod(ri1, layout_rows[0]),
                sscreator.sscreator_mod(ri2, layout_rows[0]),
                sscreator.sscreator_mod(ri3, layout_rows[0])]
        layouts.apply_mods(mods, owner_id, dashboard_id, None)

        layout = Layout.select(owner_id, dashboard_id)
        tile = layout.tile_dict.keys()[0]
コード例 #3
0
ファイル: sscreator_test.py プロジェクト: ighori/monique
    def test_sscs_different_tag(self):
        rd, tile = self.test_sscs()

        tile_config = {
            'tags': [],
            'tw_type':
            'Range',
            'series_spec_list': [
                SeriesSpec(2, 0, dict(op='eq', args=['monique'])),
                SeriesSpec(2, 0, dict(op='eq', args=['john'])),
            ],
            'tile_options': {
                'seconds_back': 86400,
                'tile_title': 'Points by user'
            }
        }
        tile_config['tile_options']['sscs'] = tile_config['series_spec_list'][
            1]

        tile2 = Tile.insert(rd.owner_id, rd.report.report_id, rd.dashboard_id,
                            tile_config)
        layouts.place_tile(tile2)

        d = [
            OrderedDict([('user_name', 'robert'), ('is_active', True),
                         ('points', 128)]),
            OrderedDict([('user_name', 'monique2'), ('is_active', True),
                         ('points', 210)]),
            OrderedDict([('user_name', 'monique3'), ('is_active', True),
                         ('points', 210)]),
            OrderedDict([('user_name', 'monique4'), ('is_active', True),
                         ('points', 210)]),
            OrderedDict([('user_name', 'robert2'), ('is_active', True),
                         ('points', 210)]),
        ]
        res = rd.report.process_input(json.dumps(d))
        tile2 = rd.tile_from_layout(1, 2)
        self.assertEqual(7, len(tile2.series_specs()))
        self.assertEqual(SeriesSpec(2, 0, dict(op='eq', args=['robert2'])),
                         tile2.series_specs()[-1])

        d = [
            OrderedDict([('user_name', 'monique4'), ('is_active', True),
                         ('points', 128)])
        ]
        res = rd.report.process_input(json.dumps(d), tags=['ip:192.168.1.1'])

        tile2 = rd.tile_from_layout(0, 2)
        self.assertEqual(7, len(tile2.series_specs()))

        tile = rd.tile_from_layout(1, 2)
        self.assertEqual(6, len(tile.series_specs()))
        self.assertEqual(SeriesSpec(2, 0, dict(op='eq', args=['monique4'])),
                         tile.series_specs()[-1])
コード例 #4
0
ファイル: dataseries_test.py プロジェクト: catech-ctd/monique
    def test_series_def_select_or_insert(self):
        ss = SeriesSpec(2, 0, dict(op='eq', args=['monique']))
        ss.promote_colnos_to_headers(report_data('points').instances[-1])
        sd_id = dataseries.SeriesDef.select_id_or_insert(
            report_data('points').report.report_id, [], ss)
        sd = dataseries.SeriesDef.select(
            report_data('points').report.report_id, [], sd_id)
        self.assertEqual([], sd.tags)

        sd2_id = dataseries.SeriesDef.select_id_or_insert(
            report_data('points').report.report_id, [], ss)
        sd2 = dataseries.SeriesDef.select(
            report_data('points').report.report_id, [], sd2_id)
        self.assertEqual(sd, sd2)
        return sd
コード例 #5
0
ファイル: sscreator_test.py プロジェクト: ighori/monique
    def test_sscs_virtual_column(self):
        owner_id = uuid.uuid1()
        od = dashboards.OwnerDashboards(owner_id)
        dashboard_id = od.dashboards[0].dashboard_id

        r = Report.insert(owner_id, 'r')
        tile_config = {
            'tw_type': 'Single',
            'series_spec_list': [
                SeriesSpec(0, -1, dict(op='eq', args=['0'])),
            ],
            'tile_options': {}
        }
        tile_config['tile_options']['sscs'] = tile_config['series_spec_list'][
            0]

        tile = Tile.insert(owner_id, r.report_id, dashboard_id, tile_config)
        layouts.place_tile(tile)

        for inp in ['0', '1', '2\n3', '3\n4\n5\n']:
            res = r.process_input(inp)

        tile = Tile.select(
            dashboard_id,
            Layout.select(owner_id, dashboard_id).layout_dict.keys()[0])
        self.assertEqual(3, len(tile.series_specs()))
        return tile, r
コード例 #6
0
ファイル: createdashboard.py プロジェクト: ighori/monique
def main():
    owner_id = uuid.uuid4()
    report = Report.select_or_insert(owner_id, 'simple_report')
    res = report.process_input('1 2 3')
    assert res.report_instance

    owner_dashboards = OwnerDashboards(
        owner_id, insert_if_no_dashboards='Default Dashboard')
    assert owner_dashboards.dashboards

    tile_config = {
        'series_spec_list': [SeriesSpec(0, -1, {
            'op': 'eq',
            'args': ['0']
        })],
    }
    tile = Tile.insert(owner_id, report.report_id,
                       owner_dashboards.dashboards[0].dashboard_id,
                       tile_config)
    assert tile

    assert tile.get_tile_data()

    print 'Successfully created a dashboard with a tile'

    owner_dashboards.dashboards[0].delete()
コード例 #7
0
ファイル: dataseries_test.py プロジェクト: catech-ctd/monique
 def test_hashing_ss(self):
     ss_list = [
         SeriesSpec(i, 0, {
             'op': 'eq',
             'args': [str(i)]
         }) for i in range(10)
     ]
     for i, ss in enumerate(ss_list):
         ss.set_name('name_%d' % i)
     d = {ss: i for i, ss in enumerate(ss_list)}
     for i, ss in enumerate(ss_list):
         self.assertEqual(i, d[ss])
コード例 #8
0
ファイル: dataseries_test.py プロジェクト: catech-ctd/monique
    def test_get_cell_nopromote(self):
        rd = report_data('points')
        ss = SeriesSpec(2, 0, dict(op='eq', args=['monique']))
        self.assertEqual(2, ss.actual_data_colno(rd.instances[0]))
        self.assertEqual(0, ss.actual_filtering_colno(rd.instances[0]))

        self.assertEqual(210, ss.get_cell(rd.instances[0]).value)
        self.assertEqual(220, ss.get_cell(rd.instances[1]).value)
        self.assertEqual(265, ss.get_cell(rd.instances[2]).value)
        self.assertIsNone(ss.get_cell(rd.instances[3]))
コード例 #9
0
ファイル: reports.py プロジェクト: ighori/monique
def main():
    vars = tutorial.main()
    owner_id = vars['owner_id']
    owner_dashboards = vars['owner_dashboards']
    dashboard = vars['dashboard']

    SECTION('tags')

    cpu_report = Report.select_or_insert(owner_id, 'cpu_usage')
    metrics = [
        ('user', 92.3),
        ('system', 3.4),
        ('io', 4.4),
    ]
    cpu_report.process_input(json.dumps(metrics),
                             tags=['ip:192.168.1.18', 'warning'])

    tile_config_1 = {
        'tags': ['ip:192.168.1.18'],
        'series_spec_list': [
            SeriesSpec(1, 0, {
                'op': 'eq',
                'args': ['user']
            }),
        ],
    }
    tile_1 = Tile.insert(owner_id, cpu_report.report_id,
                         dashboard.dashboard_id, tile_config_1)

    tile_config_2 = {
        'tags': ['ip:192.168.1.18', 'warning'],
        'series_spec_list': [
            SeriesSpec(1, 0, {
                'op': 'eq',
                'args': ['user']
            }),
        ],
    }
    tile_2 = Tile.insert(owner_id, cpu_report.report_id,
                         dashboard.dashboard_id, tile_config_2)
コード例 #10
0
ファイル: dataseries_test.py プロジェクト: catech-ctd/monique
    def test_name_virtual(self):
        ri = report_data('points').instances[-1]
        ss = SeriesSpec(2, -1, dict(op='eq', args=['1']))
        self.assertEqual('col. 2 (1)', ss.name())

        ss.promote_colnos_to_headers(ri)
        self.assertEqual('points (1)', ss.name())
コード例 #11
0
ファイル: serialize_test.py プロジェクト: ighori/monique
    def test_custom_types(self):
        d = {
            'id': uuid.uuid1(),
            'id2': uuid.uuid4(),
            'dt': datetime.datetime.utcnow(),
            'da': datetime.datetime.utcnow(),
            'ss': SeriesSpec(2, 0, dict(op='eq', args=['monique'])),
        }
        self.assertEqual(d, serialize.json_loads(serialize.mjson(d)))

        dt = datetime.datetime.utcnow()
        self.assertEqual(util.datetime_from_date(dt.date()),
                         serialize.json_loads(serialize.mjson(dt.date())))

        ext_d = json.loads(
            serialize.json_dumps_external(util.dictwithout(d, 'ss')))
        self.assertEqual(d['id2'].hex, ext_d['id2'])
コード例 #12
0
ファイル: dataseries_test.py プロジェクト: catech-ctd/monique
    def test_get_cell_promote(self):
        rd = report_data('points')
        ss = SeriesSpec(2, 0, dict(op='eq', args=['monique']))
        ss.promote_colnos_to_headers(rd.instances[0])
        self.assertEqual(2, ss.actual_data_colno(rd.instances[0]))
        self.assertEqual(0, ss.actual_filtering_colno(rd.instances[0]))

        self.assertEqual(210, ss.get_cell(rd.instances[0]).value)
        self.assertEqual(220, ss.get_cell(rd.instances[1]).value)
        self.assertEqual(265, ss.get_cell(rd.instances[2]).value)
        self.assertIsNone(ss.get_cell(rd.instances[3]))

        rep2 = reports.Report.insert(
            report_data('points').owner_id, 'points_colchange')
        res2 = rep2.process_input(
            json.dumps([
                dict(points=300, user_name='john'),
                dict(points=400, user_name='monique'),
            ]))
        self.assertEqual(0, ss.actual_data_colno(res2.report_instance))
        self.assertEqual(1, ss.actual_filtering_colno(res2.report_instance))
        self.assertEqual(400, ss.get_cell(res2.report_instance).value)

        ss = SeriesSpec(2, 0, dict(op='eq', args=['monique']))
        self.assertIsNone(ss.get_cell(res2.report_instance))
コード例 #13
0
ファイル: reports_test.py プロジェクト: catech-ctd/monique
    def test_delete_with_tiles(self):
        owner_id = uuid.uuid1()
        r1 = Report.insert(owner_id, 'r1')
        r1.process_input('1')
        r2 = Report.insert(owner_id, 'r2')
        r2.process_input('2')
        r3 = Report.insert(owner_id, 'r3')
        r3.process_input('3')

        tile_config = {
            'series_spec_list': [SeriesSpec(0, -1, {
                'op': 'eq',
                'args': '0'
            })],
        }
        od = OwnerDashboards(owner_id)
        od.insert_dashboard('Second')
        od.insert_dashboard('Third')

        tile1_1 = Tile.insert(owner_id, r1.report_id,
                              od.dashboards[0].dashboard_id, tile_config)
        assert tile1_1.get_tile_data()['series_data']
        tile2_1 = Tile.insert(owner_id, r2.report_id,
                              od.dashboards[1].dashboard_id, tile_config)
        assert tile2_1.get_tile_data()['series_data']
        tile3_1 = Tile.insert(owner_id, r3.report_id,
                              od.dashboards[2].dashboard_id, tile_config)
        assert tile3_1.get_tile_data()['series_data']
        layouts.place_tile(tile1_1)
        layouts.place_tile(tile2_1)
        layouts.place_tile(tile3_1)

        r2.delete()

        reps = reports.fetch_reports_by_name(owner_id, '')
        self.assertEqual([r1, r3], reps)

        self.assertEqual(
            1,
            len(
                layouts.Layout.select(
                    owner_id, od.dashboards[0].dashboard_id).layout_dict))
        self.assertEqual(
            0,
            len(
                layouts.Layout.select(
                    owner_id, od.dashboards[1].dashboard_id).layout_dict))
        self.assertEqual(
            1,
            len(
                layouts.Layout.select(
                    owner_id, od.dashboards[2].dashboard_id).layout_dict))

        tile1_2 = Tile.insert(owner_id, r1.report_id,
                              od.dashboards[0].dashboard_id, tile_config)
        tile1_3 = Tile.insert(owner_id, r1.report_id,
                              od.dashboards[1].dashboard_id, tile_config)
        tile1_4 = Tile.insert(owner_id, r1.report_id,
                              od.dashboards[1].dashboard_id, tile_config)
        tile1_5 = Tile.insert(owner_id, r1.report_id,
                              od.dashboards[2].dashboard_id, tile_config)
        layouts.place_tile(tile1_2)
        layouts.place_tile(tile1_3)
        layouts.place_tile(tile1_4)
        layouts.place_tile(tile1_5)

        r1.delete()

        self.assertEqual(
            0,
            len(
                layouts.Layout.select(
                    owner_id, od.dashboards[0].dashboard_id).layout_dict))
        self.assertEqual(
            0,
            len(
                layouts.Layout.select(
                    owner_id, od.dashboards[1].dashboard_id).layout_dict))
        self.assertEqual(
            1,
            len(
                layouts.Layout.select(
                    owner_id, od.dashboards[2].dashboard_id).layout_dict))

        reps = reports.fetch_reports_by_name(owner_id, '')
        self.assertEqual([r3], reps)
コード例 #14
0
ファイル: tutorial.py プロジェクト: ighori/monique
def main():
    SECTION('Creating a report and report instances')


    import uuid
    from mqe.reports import Report

    owner_id = uuid.uuid4()

    simple_report = Report.insert(owner_id, 'simple')
    res = simple_report.process_input('10 20')
    print res.report_instance.table

    points_report = Report.insert(owner_id, 'points')
    input = """\
    user_name is_active points
    john      true      128
    monique   true      210
    """
    res = points_report.process_input(input)
    print res.report_instance.table


    SECTION('Creating a dashboard and a tile')


    from mqe.dashboards import OwnerDashboards

    owner_dashboards = OwnerDashboards(owner_id)
    dashboard = owner_dashboards.insert_dashboard('My Dashboard')

    from mqe.dataseries import SeriesSpec
    tile_config = {
        'tw_type': 'Range',
        'series_spec_list': [
            SeriesSpec(2, 0, {'op': 'eq', 'args': ['john']}),
            SeriesSpec(2, 0, {'op': 'eq', 'args': ['monique']}),
        ],
        'tile_options': {
            'seconds_back': 86400,
            'tile_title': 'Points by user',
        }
    }

    from mqe.tiles import Tile
    tile = Tile.insert(owner_id, points_report.report_id, dashboard.dashboard_id, tile_config)
    pprint(tile.get_tile_data())


    SECTION('Placing a tile in a dashboard layout')


    from mqe.layouts import place_tile

    res = place_tile(tile)
    if not res:
        raise ValueError('Placing the tile unsuccessful')

    from mqe.layouts import Layout

    layout = Layout.select(owner_id, dashboard.dashboard_id)
    pprint(layout.layout_dict)


    def render_dashboard(owner_id, dashboard):
        print 'Rendering dashboard %r' % dashboard.dashboard_name
        layout = Layout.select(owner_id, dashboard.dashboard_id)
        for tile, visual_options in layout.tile_dict.items():
            tile_data = tile.get_tile_data()
            print 'Rendering tile %r at position %s/%s' % (
                tile_data['generated_tile_title'], visual_options['x'], visual_options['y'])
            # render tile_data['series_data']

    render_dashboard(owner_id, dashboard)

    return locals()
コード例 #15
0
ファイル: dataseries_test.py プロジェクト: catech-ctd/monique
    def test_guess_series_spec(self):
        ss = guess_series_spec(
            report_data('points').report,
            report_data('points').instances[0], 2, 2)
        ss_expected = SeriesSpec(2, 0, dict(op='eq', args=['monique']))
        ss_expected.promote_colnos_to_headers(
            report_data('points').instances[0])
        self.series_specs_equal(ss_expected, ss)

        ss = guess_series_spec(
            report_data('points').report,
            report_data('points').instances[0], 2, 0)
        ss_expected = SeriesSpec(0, -1, dict(op='eq', args=['2']))
        ss_expected.promote_colnos_to_headers(
            report_data('points').instances[0])
        self.series_specs_equal(ss_expected, ss)

        cd = CustomData([10, 20])
        ss = guess_series_spec(cd.report, cd.instances[-1], 0, 0)
        ss_expected = SeriesSpec(0, -1, dict(op='eq', args=['0']))
        ss_expected.promote_colnos_to_headers(cd.instances[-1])
        self.series_specs_equal(ss_expected, ss)

        cd = CustomData([[1, 2, 3], [4, 5, 6]])
        ss = guess_series_spec(cd.report, cd.instances[-1], 2, 0)
        ss_expected = SeriesSpec(0, -1, dict(op='eq', args=['2']))
        ss_expected.promote_colnos_to_headers(cd.instances[-1])
        self.series_specs_equal(ss_expected, ss)

        cd = CustomData([[["aaa", 10], ["bbb", 20]]])
        ss = guess_series_spec(cd.report, cd.instances[-1], 1, 1)
        ss_expected = SeriesSpec(1, 0, dict(op='eq', args=['bbb']))
        ss_expected.promote_colnos_to_headers(cd.instances[-1])
        self.series_specs_equal(ss_expected, ss)

        cd = CustomData([[["aaa", 10]]])
        ss = guess_series_spec(cd.report, cd.instances[-1], 0, 1)
        ss_expected = SeriesSpec(1, 0, dict(op='eq', args=['aaa']))
        ss_expected.promote_colnos_to_headers(cd.instances[-1])
        self.series_specs_equal(ss_expected, ss)
コード例 #16
0
ファイル: dataseries_test.py プロジェクト: catech-ctd/monique
    def test_tweak_computed_name_single_column(self):
        owner_id = uuid.uuid4()
        rep = reports.Report.insert(owner_id, 'col_report')
        ri = rep.process_input('1\n2').report_instance

        ss = SeriesSpec(0, -1, {'op': 'eq', 'args': ['0']})
        self.assertEqual('col. 0 (0)', ss.name())
        ss.tweak_computed_name(ri)
        self.assertEqual('0', ss.name())

        ss = SeriesSpec(0, -1, {'op': 'eq', 'args': ['1']})
        self.assertEqual('col. 0 (1)', ss.name())
        ss.tweak_computed_name(ri)
        self.assertEqual('1', ss.name())
コード例 #17
0
ファイル: dataseries_test.py プロジェクト: catech-ctd/monique
    def test_tweak_computed_name_headerless(self):
        owner_id = uuid.uuid4()
        rep = reports.Report.insert(owner_id, 'num_report')
        ri = rep.process_input('23').report_instance

        ss = SeriesSpec(0, -1, {'op': 'eq', 'args': ['0']})
        self.assertEqual('col. 0 (0)', ss.name())
        ss.tweak_computed_name(ri)
        self.assertEqual('value', ss.name())

        ri = rep.process_input('1 2\n3 4\n5 6').report_instance
        ss = SeriesSpec(0, -1, {'op': 'eq', 'args': ['0']})
        self.assertEqual('col. 0 (0)', ss.name())
        ss.tweak_computed_name(ri)
        self.assertEqual('col. 0 (0)', ss.name())

        ss = SeriesSpec(0, -1, {'op': 'eq', 'args': ['1']})
        self.assertEqual('col. 0 (1)', ss.name())
        ss.tweak_computed_name(ri)
        self.assertEqual('col. 0 (1)', ss.name())
コード例 #18
0
ファイル: tpcreator.py プロジェクト: ighori/monique
def main():
    vars = tutorial.main()
    owner_id = vars['owner_id']
    owner_dashboards = vars['owner_dashboards']
    dashboard = vars['dashboard']

    SECTION('Using tags for identifying entities')

    from mqe.reports import Report

    cpu_report = Report.select_or_insert(owner_id, 'cpu_usage')
    metrics = [
        ('user', 42.3),
        ('system', 13.4),
        ('io', 8.4),
    ]
    cpu_report.process_input(json.dumps(metrics), tags=['ip:192.168.1.18'])

    SECTION('Creating a master tile')

    from mqe.dataseries import SeriesSpec
    from mqe.tiles import Tile
    from mqe.layouts import place_tile, Layout, replace_tiles

    dashboard = owner_dashboards.insert_dashboard('CPU')

    master_tile_config = {
        'tw_type':
        'Range',
        'tags': ['ip:192.168.1.18'],
        'series_spec_list': [
            SeriesSpec(1, 0, {
                'op': 'eq',
                'args': ['user']
            }),
            SeriesSpec(1, 0, {
                'op': 'eq',
                'args': ['system']
            }),
        ],
        'tile_options': {
            'tile_title': 'CPU usage',
            'tpcreator_uispec': [{
                'tag': 'ip:192.168.1.18',
                'prefix': 'ip:'
            }]
        }
    }
    master_tile = Tile.insert(owner_id, cpu_report.report_id,
                              dashboard.dashboard_id, master_tile_config)
    print place_tile(master_tile)

    SECTION('Creating tiles from a master tile')

    metrics = json.dumps(metrics)

    cpu_report.process_input(metrics, tags=['ip:192.168.1.30'])
    cpu_report.process_input(metrics, tags=['ip:192.168.2.51'])
    cpu_report.process_input(metrics, tags=['ip:192.168.2.51'])

    layout = Layout.select(owner_id, dashboard.dashboard_id)
    for tile in layout.tile_dict:
        print tile.tags

    SECTION('Synchronizing options of tpcreated tiles')

    new_master_tile_config = {
        'tw_type':
        'Range',
        'tags': ['ip:192.168.1.18'],
        'series_spec_list': [
            SeriesSpec(1, 0, {
                'op': 'eq',
                'args': ['user']
            }),
            SeriesSpec(1, 0, {
                'op': 'eq',
                'args': ['system']
            }),
            SeriesSpec(1, 0, {
                'op': 'eq',
                'args': ['io']
            }),
        ],
        'tile_options': {
            'tile_title': 'CPU usage',
            'tpcreator_uispec': [{
                'tag': 'ip:192.168.1.18',
                'prefix': 'ip:'
            }]
        }
    }
    new_master_tile = Tile.insert(owner_id, cpu_report.report_id,
                                  dashboard.dashboard_id,
                                  new_master_tile_config)
    assert replace_tiles({master_tile: new_master_tile}, for_layout_id=None)

    layout = Layout.select(owner_id, dashboard.dashboard_id)
    for tile in layout.tile_dict:
        print len(tile.get_tile_data()['series_data'])

    SECTION('Expiring tiles and promoting new masters')

    from mqe.tpcreator import make_master_from_tpcreated

    old_master = [tile for tile in layout.tile_dict
                  if tile.is_master_tile()][0]
    new_chosen_master = [
        tile for tile in layout.tile_dict if tile.tags == ['ip:192.168.2.51']
    ][0]
    assert not new_chosen_master.is_master_tile()

    new_master = make_master_from_tpcreated(old_master, new_chosen_master)
    res = replace_tiles({
        old_master: new_master,
        new_chosen_master: None
    },
                        for_layout_id=None)
    print 'replaced %d tiles' % len(res.tile_replacement)

    layout = Layout.select(owner_id, dashboard.dashboard_id)
    tile = [
        tile for tile in layout.tile_dict if tile.tags == ['ip:192.168.2.51']
    ][0]
    print tile.is_master_tile()
コード例 #19
0
ファイル: tilewidgets.py プロジェクト: ighori/monique
def main():
    vars = tutorial.main()
    points_report = vars['points_report']
    owner_id = vars['owner_id']
    owner_dashboards = vars['owner_dashboards']
    dashboard = vars['dashboard']

    SECTION('Tile_config and tile_options')

    from mqe.dataseries import SeriesSpec
    from mqe.tiles import Tile

    tile_config = {
        'series_spec_list': [
            SeriesSpec(2, 0, {
                'op': 'eq',
                'args': ['john']
            }),
            SeriesSpec(2, 0, {
                'op': 'eq',
                'args': ['monique']
            }),
        ],
        'tile_options': {
            'tile_title': 'Points by user',
        }
    }
    tile = Tile.insert(owner_id, points_report.report_id,
                       dashboard.dashboard_id, tile_config)
    pprint(tile.tile_options)

    tile_options2 = tile.tile_options.copy()
    tile_options2['owner_id'] = uuid.uuid4()
    tile2 = Tile.insert_with_tile_options(dashboard.dashboard_id,
                                          tile_options2)

    SECTION('Updating tile\'s config')

    from mqe.layouts import Layout, replace_tiles

    layout = Layout.select(owner_id, dashboard.dashboard_id)
    tile = layout.tile_dict.keys()[0]

    tile_config = tile.get_tile_config()
    tile_config['tile_options']['seconds_back'] = 3600

    repl_tile = tile.insert_similar(tile_config)
    replace_tiles({tile: repl_tile}, for_layout_id=layout.layout_id)

    SECTION('Formatting tile data - tilewidgets and drawers')

    tile_config = {
        'tw_type':
        'Range',
        'series_spec_list': [
            SeriesSpec(2, 0, {
                'op': 'eq',
                'args': ['john']
            }),
            SeriesSpec(2, 0, {
                'op': 'eq',
                'args': ['monique']
            }),
        ],
        'tile_options': {
            'tile_title': 'Points by user',
            'drawer_type': 'ChartRangeDrawer',
            'colors': ['red', 'blue'],
            'seconds_back': 3600,
        }
    }

    SECTION('Updating tile data')

    tile_data = tile.get_tile_data()

    input = """\
    user_name is_active points
    john      true      144
    monique   true      241
    """
    res = points_report.process_input(input)

    last_report_instance_id = tile_data['series_data'][0]['data_points'][
        -1].rid
    new_tile_data = tile.get_new_tile_data(last_report_instance_id)

    SECTION('Managing colors')

    from mqe.dataseries import update_default_options

    tile_config = {
        'series_spec_list': [
            SeriesSpec(2, 0, {
                'op': 'eq',
                'args': ['john']
            }),
            SeriesSpec(2, 0, {
                'op': 'eq',
                'args': ['monique']
            }),
        ],
        'tile_options': {
            'colors': ['blue', 'red'],
        }
    }
    tile = Tile.insert(owner_id, points_report.report_id,
                       dashboard.dashboard_id, tile_config)
    print tile.get_tile_data()['combined_colors']

    update_default_options(tile)

    tile_config_2 = {
        'series_spec_list': [
            SeriesSpec(2, 0, {
                'op': 'eq',
                'args': ['monique']
            }),
        ],
    }
    tile_2 = Tile.insert(owner_id, points_report.report_id,
                         dashboard.dashboard_id, tile_config_2)
    print tile_2.get_tile_data()['combined_colors']

    SECTION('Data series names')

    series_spec = SeriesSpec(2, 0, {'op': 'eq', 'args': ['monique']})
    series_spec.set_name("monique's points")
    tile_config = {'series_spec_list': [series_spec]}
    tile = Tile.insert(owner_id, points_report.report_id,
                       dashboard.dashboard_id, tile_config)
    print tile.get_tile_data()['series_data'][0]['name']

    SECTION('Creating custom tilewidgets and drawers')

    from mqe.tilewidgets import register_drawer_class, Drawer

    @register_drawer_class
    class MaxNumberDrawer(Drawer):

        drawer_type = 'MaxNumberDrawer'

        def process_tile_data(self, tile_data):
            max_number = 0
            for series_data in tile_data['series_data']:
                for point in series_data['data_points']:
                    if int(point.value) > max_number:
                        max_number = int(point.value)

            tile_data['max_number'] = max_number

    tile_config = {
        'series_spec_list': [
            SeriesSpec(2, 0, {
                'op': 'eq',
                'args': ['john']
            }),
            SeriesSpec(2, 0, {
                'op': 'eq',
                'args': ['monique']
            }),
        ],
        'tile_options': {
            'drawer_type': 'MaxNumberDrawer',
        }
    }
    tile = Tile.insert(owner_id, points_report.report_id,
                       dashboard.dashboard_id, tile_config)
    print tile.get_tile_data()['max_number']
コード例 #20
0
ファイル: dataseries_test.py プロジェクト: catech-ctd/monique
    def test_name(self):
        ss = SeriesSpec(2, 0, dict(op='eq', args=['monique']))
        self.assertEqual('monique', ss.name())
        ss.set_name('xxx')
        self.assertEqual('xxx', ss.name())
        ss.params['static_name'] = 'yyy'
        self.assertEqual('xxx', ss.name())

        ss = SeriesSpec(2, 0, dict(op='eq', args=['monique']))
        ss.params['static_name'] = 'yyy'
        self.assertEqual('yyy', ss.name())

        ss = SeriesSpec(2, 0, dict(op='eq', args=['monique']))
        ss.set_name('xxx')
        self.assertEqual('xxx', ss.name(True))
        ss.set_name('')
        self.assertEqual('monique', ss.name(True))
コード例 #21
0
ファイル: sscreator.py プロジェクト: ighori/monique
def main():
    vars = tutorial.main()
    points_report = vars['points_report']
    tile = vars['tile']
    owner_id = vars['owner_id']
    owner_dashboards = vars['owner_dashboards']

    SECTION('Auto-creating new data series')

    input = """\
    user_name is_active points
    john      true      128
    monique   true      210
    alex      true      12
    """
    points_report.process_input(input)

    series_names = [
        series_data['name']
        for series_data in tile.get_tile_data()['series_data']
    ]
    print series_names

    new_dashboard = owner_dashboards.insert_dashboard('Points')

    tile_config = {
        'tw_type':
        'Range',
        'series_spec_list': [
            SeriesSpec(2, 0, {
                'op': 'eq',
                'args': ['john']
            }),
            SeriesSpec(2, 0, {
                'op': 'eq',
                'args': ['monique']
            }),
        ],
        'tile_options': {
            'seconds_back': 86400,
            'tile_title': 'Points by user',
            'sscs': SeriesSpec(2, 0, {
                'op': 'eq',
                'args': ['john']
            })
        }
    }
    new_tile = Tile.insert(owner_id, points_report.report_id,
                           new_dashboard.dashboard_id, tile_config)
    place_tile(new_tile)

    input = """\
    user_name is_active points
    john      true      133
    monique   true      220
    alex      true      18
    andrew    true      6
    """
    points_report.process_input(input)

    layout = Layout.select(owner_id, new_dashboard.dashboard_id)
    tile_id = layout.layout_dict.keys()[0]
    tile = Tile.select(new_dashboard.dashboard_id, tile_id)

    series_names = [
        series_data['name']
        for series_data in tile.get_tile_data()['series_data']
    ]
    print series_names
コード例 #22
0
ファイル: dataseries_test.py プロジェクト: catech-ctd/monique
    def test_tweak_computed_name(self):
        owner_id = uuid.uuid4()
        rep = reports.Report.insert(owner_id, 'json_report')
        inst = [OrderedDict([('c1', 10), ('c2', 20)])]
        ri = rep.process_input(json.dumps(inst)).report_instance

        ss = SeriesSpec(1, -1, {'op': 'eq', 'args': ['1']})
        ss.promote_colnos_to_headers(ri)
        self.assertEqual('c2 (1)', ss.name())
        ss.tweak_computed_name(ri)
        self.assertEqual('c2', ss.name())

        inst = [
            OrderedDict([('c1', 10), ('c2', 20)]),
            OrderedDict([('c1', 11), ('c2', 21)])
        ]
        ri = rep.process_input(json.dumps(inst)).report_instance
        ss2 = SeriesSpec(1, -1, {'op': 'eq', 'args': ['1']})
        ss2.promote_colnos_to_headers(ri)
        self.assertEqual('c2 (1)', ss2.name())
        ss2.tweak_computed_name(ri)
        self.assertEqual('c2 (1)', ss2.name())

        inst = [OrderedDict([('c1', 'monique'), ('c2', 20)])]
        ri = rep.process_input(json.dumps(inst)).report_instance
        ss3 = SeriesSpec(1, 0, {'op': 'eq', 'args': ['monique']})
        ss3.promote_colnos_to_headers(ri)
        ss3.tweak_computed_name(ri)
        self.assertEqual('monique', ss3.name())
コード例 #23
0
def main():
    vars = tutorial.main()
    owner_id = vars['owner_id']
    owner_dashboards = vars['owner_dashboards']
    dashboard = vars['dashboard']
    points_report = vars['points_report']

    SECTION('Label-less report instances')

    numbers = Report.select_or_insert(owner_id, 'numbers')
    input = """\
    10 20 30
    40 50 60
    """
    res = numbers.process_input(input)

    series_spec = SeriesSpec(1, -1, {'op': 'eq', 'args': ['1']})
    print series_spec.get_cell(res.report_instance)

    metric = Report.select_or_insert(owner_id, 'metric')
    res = metric.process_input('32.4')

    series_spec = SeriesSpec(0, -1, {'op': 'eq', 'args': ['0']})
    print series_spec.get_cell(res.report_instance)

    SECTION('Handling reordering of columns')

    input = """\
    user_name is_active points
    john      true      128
    monique   true      210
    """
    res = points_report.process_input(input, force_header=[0])

    series_spec = SeriesSpec(2, 0, {'op': 'eq', 'args': ['monique']})
    print series_spec.get_cell(res.report_instance)

    input_2 = """\
    user_name points is_active
    john      128    true     
    monique   210    true     
    """
    res_2 = points_report.process_input(input_2, force_header=[0])
    print series_spec.get_cell(res_2.report_instance)

    series_spec.promote_colnos_to_headers(res.report_instance)
    print series_spec.get_cell(res_2.report_instance)

    SECTION('A lower-level interface to data series')

    from mqe.dataseries import SeriesDef, get_series_values
    from datetime import datetime

    series_spec = SeriesSpec(2, 0, {'op': 'eq', 'args': ['monique']})
    series_id = SeriesDef.insert(points_report.report_id, [], series_spec)
    series_def = SeriesDef.select(points_report.report_id, [], series_id)
    series_values = get_series_values(series_def,
                                      points_report,
                                      from_dt=datetime(2017, 1, 1),
                                      to_dt=datetime(2018, 1, 1))
    point_values = [sv.value for sv in series_values]