Example #1
0
def get_aggregation_group_trees():
    # Here we have to deal with weird legacy
    # aggregation group definitions:
    # - "GROUP"
    # - ["GROUP_1", "GROUP2", ..]
    bi_packs.load_config()
    return bi_packs.get_aggregation_group_trees()
Example #2
0
def get_bi_pack(params):
    """Get BI Pack"""
    bi_packs.load_config()
    bi_pack = bi_packs.get_pack(params["pack_id"])
    if bi_pack is None:
        _bailout_with_message("Unknown bi_pack: %s" % params["pack_id"])
    assert bi_pack is not None

    uri = constructors.object_href('bi_pack', bi_pack.id)
    domain_members = {}
    for (name, entities) in [("aggregation", bi_pack.get_aggregations()),
                             ("rule", bi_pack.get_rules())]:
        elements = entities.values()  # type: ignore[attr-defined]
        domain_members["%ss" % name] = constructors.object_collection(
            name=name,
            domain_type="bi_" + name,  # type: ignore[arg-type]
            entries=[
                constructors.link_rel(
                    rel='.../value',
                    parameters={'collection': "items"},
                    href=constructors.object_href(
                        "bi_" + name  # type: ignore[arg-type]
                        ,
                        element.id),
                ) for element in elements
            ],
            base=uri,
        )

    domain_object = constructors.domain_object(domain_type='bi_pack',
                                               identifier=bi_pack.id,
                                               title=bi_pack.title,
                                               members=domain_members)

    return constructors.serve_json(domain_object)
Example #3
0
def get_bi_rule(params):
    """Get BI Rule"""
    bi_packs.load_config()
    bi_rule = bi_packs.get_rule(params["rule_id"])
    if bi_rule is None:
        _bailout_with_message("Unknown bi_rule: %s" % params["rule_id"])
    assert bi_rule is not None

    data = {"pack_id": bi_rule.pack_id}
    data.update(BIRuleSchema().dump(bi_rule).data)
    return constructors.serve_json(data)
Example #4
0
def get_bi_aggregation(params):
    """Get BI Aggregation"""
    bi_packs.load_config()
    bi_aggregation = bi_packs.get_aggregation(params["aggregation_id"])
    if bi_aggregation is None:
        _bailout_with_message("Unknown bi_aggregation: %s" %
                              params["aggregation_id"])
    assert bi_aggregation is not None

    data = {"pack_id": bi_aggregation.pack_id}
    data.update(BIAggregationSchema().dump(bi_aggregation).data)
    return constructors.serve_json(data)
Example #5
0
def put_bi_rule(params):
    """Save BI Rule"""
    bi_packs.load_config()
    target_pack = bi_packs.get_pack(params["body"]["pack_id"])
    if target_pack is None:
        _bailout_with_message("Unknown bi_pack: %s" %
                              params["body"]["pack_id"])
    assert target_pack is not None

    bi_rule = BIRule(params["body"])
    target_pack.add_rule(bi_rule)
    bi_packs.save_config()

    data = {"pack_id": bi_rule.pack_id}
    data.update(bi_rule.schema()().dump(bi_rule).data)
    return constructors.serve_json(data)
Example #6
0
def singlehost_table(view, columns, query, only_sites, limit,
                     all_active_filters, joinbyname, bygroup):
    bi_packs.load_config()
    filter_code = ""
    for filt in all_active_filters:
        header = filt.filter("bi_host_aggregations")
        filter_code += header
    host_columns = [c for c in columns if c.startswith("host_")]

    bi_packs.load_config()

    rows = []
    with aggregation_compute_auto_cleanup():
        bi_status_fetcher.set_assumed_states(config.user.bi_assumptions)
        bi_aggregation_filter = compute_bi_aggregation_filter(
            all_active_filters)
        required_aggregations = bi_computer.get_required_aggregations(
            bi_aggregation_filter)
        bi_status_fetcher.update_states_filtered(filter_code, only_sites,
                                                 limit, host_columns, bygroup,
                                                 required_aggregations)

        aggregation_results = bi_computer.compute_results(
            required_aggregations)
        legacy_results = bi_computer.convert_to_legacy_results(
            aggregation_results, bi_aggregation_filter)

        for site_host_name, values in bi_status_fetcher.states.items():
            for legacy_result in legacy_results:
                if site_host_name in legacy_result["aggr_hosts"]:
                    # Combine bi columns + extra livestatus columns + bi computation columns into one row
                    row = values._asdict()
                    row.update(row["remaining_row_keys"])
                    del row["remaining_row_keys"]
                    row.update(legacy_result)
                    row["site"] = site_host_name[0]
                    rows.append(row)
    return rows
Example #7
0
def get_bi_packs(params):
    """Show all BI Packs"""

    bi_packs.load_config()
    packs = [
        constructors.collection_item(
            domain_type='bi_pack',
            obj={
                'id': pack.id,
                'title': pack.title,
            },
        ) for pack in bi_packs.packs.values()
    ]

    collection_object = constructors.collection_object(
        domain_type='bi_pack',
        value=packs,
        links=[
            constructors.link_rel('self',
                                  constructors.collection_href('bi_pack'))
        ],
    )
    return constructors.serve_json(collection_object)
Example #8
0
 def prepare_for_compilation(self, online_sites: Set[SiteProgramStart]):
     bi_packs.load_config()
     bi_structure_fetcher.update_data(online_sites)
     bi_searcher.set_hosts(bi_structure_fetcher.hosts)
Example #9
0
def aggregation_group_choices() -> List[DropdownChoiceEntry]:
    """ Returns a sorted list of aggregation group names """
    bi_packs.load_config()
    return bi_packs.get_aggregation_group_choices()