Skip to content

workload_profile_scores

sc_crawler.workload_profile_scores #

Workload profile score computation and database persistence.

This module computes precomputed compound benchmark scores for all servers across all vendors and stores them as synthetic BenchmarkScore rows.

Functions:

Name Description
recompute_workload_profiles

Recompute workload-profile scores for all servers and persist them.

recompute_workload_profiles #

recompute_workload_profiles(session)

Recompute workload-profile scores for all servers and persist them.

Marks all existing workload-profile BenchmarkScore rows inactive, then loads all active raw benchmark scores from the database (excluding workload-profile rows to avoid circularity), computes normalised composite scores across all vendors, and inserts fresh rows.

Parameters:

Name Type Description Default
session Session

Active SQLModel session connected to the crawler database.

required

Returns:

Type Description
int

The number of workload-profile rows inserted.

Source code in sc_crawler/workload_profile_scores.py
def recompute_workload_profiles(session: Session) -> int:
    """Recompute workload-profile scores for all servers and persist them.

    Marks all existing workload-profile BenchmarkScore rows inactive, then
    loads all active raw benchmark scores from the database (excluding
    workload-profile rows to avoid circularity), computes normalised composite
    scores across all vendors, and inserts fresh rows.

    Args:
        session: Active SQLModel session connected to the crawler database.

    Returns:
        The number of workload-profile rows inserted.
    """
    workload_keys = list(WORKLOADS.keys())
    benchmark_ids = _collect_benchmark_ids(workload_keys)
    entries = _collect_entries(workload_keys)

    benchmark_meta = _load_benchmark_metadata(session)
    per_server, entry_minmax = _load_scores(
        session, benchmark_ids, entries, benchmark_meta
    )

    if not per_server:
        return 0

    profile_rows = _compute_workload_score_rows(
        per_server, entry_minmax, entries, benchmark_meta, workload_keys
    )

    if not profile_rows:
        return 0

    session.execute(
        update(BenchmarkScore)
        .where(BenchmarkScore.benchmark_id.like("workload_profile:%"))
        .values(status=Status.INACTIVE)
    )
    insert_items(BenchmarkScore, profile_rows, session=session)
    return len(profile_rows)