Skip to content

Commit

Permalink
Merge 64d1d33 into 3aec49f
Browse files Browse the repository at this point in the history
  • Loading branch information
dianaclarke committed Jul 28, 2021
2 parents 3aec49f + 64d1d33 commit d4f3f7d
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 16 deletions.
3 changes: 3 additions & 0 deletions conbench/api/_examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -228,11 +228,13 @@ def _api_distribution_entity(
distribution_id,
case_id,
context_id,
commit_id,
):
result = {
"id": distribution_id,
"case_id": case_id,
"context_id": context_id,
"commit_id": commit_id,
"machine_hash": "diana-2-4-17179869184",
"unit": "s",
"mean_mean": "0.036369",
Expand Down Expand Up @@ -364,6 +366,7 @@ def _api_run_entity(run_id, commit_id, machine_id, now, baseline_id):
"some-distribution-uuid-1",
"some-case-uuid-1",
"some-context-uuid-1",
"some-commit-uuid-1",
)
HISTORY_ENTITY = _api_history_entity(
"some-benchmark-uuid-1",
Expand Down
14 changes: 11 additions & 3 deletions conbench/entities/distribution.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class Distribution(Base, EntityMixin):
repository = NotNull(s.String(100))
case_id = NotNull(s.String(50), s.ForeignKey("case.id", ondelete="CASCADE"))
context_id = NotNull(s.String(50), s.ForeignKey("context.id", ondelete="CASCADE"))
commit_id = Nullable(s.String(50), s.ForeignKey("commit.id", ondelete="CASCADE"))
machine_hash = NotNull(s.String(250))
unit = NotNull(s.Text)
mean_mean = Nullable(s.Numeric, check("mean_mean>=0"))
Expand Down Expand Up @@ -53,6 +54,7 @@ class Distribution(Base, EntityMixin):
s.Index("distribution_repository_index", Distribution.repository)
s.Index("distribution_case_id_index", Distribution.case_id)
s.Index("distribution_context_id_index", Distribution.context_id)
s.Index("distribution_commit_id_index", Distribution.commit_id)
s.Index("distribution_machine_hash_index", Distribution.machine_hash)


Expand All @@ -67,6 +69,7 @@ def _dump(self, distribution):
"repository": distribution.repository,
"case_id": distribution.case_id,
"context_id": distribution.context_id,
"commit_id": distribution.commit_id,
"machine_hash": distribution.machine_hash,
"unit": distribution.unit,
"mean_mean": self.decimal_fmt.format(distribution.mean_mean),
Expand All @@ -90,6 +93,7 @@ def get_distribution_history(case_id, context_id, machine_hash):
Distribution.sha,
Distribution.case_id,
Distribution.context_id,
Distribution.commit_id,
Distribution.machine_hash,
Distribution.unit,
Distribution.mean_mean,
Expand Down Expand Up @@ -127,16 +131,19 @@ def get_commits_up(repository, sha, limit):
return Session.query(index).filter(index.c.row_number >= n).limit(limit)


def get_distribution(repository, sha, case_id, context_id, machine_hash, limit):
def get_distribution(
repository, sha, case_id, context_id, commit_id, machine_hash, limit
):
from ..entities.summary import Summary

commits_up = get_commits_up(repository, sha, limit).subquery().alias("commits_up")
return (
Session.query(
func.text(repository).label("repository"),
func.text(sha).label("sha"),
Summary.case_id,
Summary.context_id,
func.text(case_id).label("case_id"),
func.text(context_id).label("context_id"),
func.text(commit_id).label("commit_id"),
Machine.hash,
func.max(Summary.unit).label("unit"),
func.avg(Summary.mean).label("mean_mean"),
Expand Down Expand Up @@ -179,6 +186,7 @@ def update_distribution(repository, sha, summary, limit):
sha,
summary.case_id,
summary.context_id,
summary.run.commit_id,
summary.run.machine.hash,
limit,
).first()
Expand Down
1 change: 1 addition & 0 deletions conbench/tests/api/_expected_docs.py
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,7 @@
"example": [
{
"case_id": "some-case-uuid-1",
"commit_id": "some-commit-uuid-1",
"context_id": "some-context-uuid-1",
"first_timestamp": "2021-02-25T01:02:51",
"id": "some-distribution-uuid-1",
Expand Down
1 change: 1 addition & 0 deletions conbench/tests/api/test_distribution.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ def _expected_entity(distribution):
distribution.id,
distribution.case_id,
distribution.context_id,
distribution.commit_id,
)


Expand Down
31 changes: 18 additions & 13 deletions conbench/tests/entities/test_distribution.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
(SELECT commit.id AS id, commit.sha AS sha, commit.timestamp AS timestamp
FROM commit
WHERE commit.repository = :repository_1 ORDER BY commit.timestamp DESC)
SELECT text(:text_1) AS repository, text(:text_2) AS sha, summary.case_id, summary.context_id, concat(machine.name, :concat_1, machine.cpu_core_count, :concat_2, machine.cpu_thread_count, :concat_3, machine.memory_bytes) AS hash, max(summary.unit) AS unit, avg(summary.mean) AS mean_mean, stddev(summary.mean) AS mean_sd, avg(summary.min) AS min_mean, stddev(summary.min) AS min_sd, avg(summary.max) AS max_mean, stddev(summary.max) AS max_sd, avg(summary.median) AS median_mean, stddev(summary.median) AS median_sd, min(commits_up.timestamp) AS first_timestamp, max(commits_up.timestamp) AS last_timestamp, count(summary.mean) AS observations
SELECT text(:text_1) AS repository, text(:text_2) AS sha, text(:text_3) AS case_id, text(:text_4) AS context_id, text(:text_5) AS commit_id, concat(machine.name, :concat_1, machine.cpu_core_count, :concat_2, machine.cpu_thread_count, :concat_3, machine.memory_bytes) AS hash, max(summary.unit) AS unit, avg(summary.mean) AS mean_mean, stddev(summary.mean) AS mean_sd, avg(summary.min) AS min_mean, stddev(summary.min) AS min_sd, avg(summary.max) AS max_mean, stddev(summary.max) AS max_sd, avg(summary.median) AS median_mean, stddev(summary.median) AS median_sd, min(commits_up.timestamp) AS first_timestamp, max(commits_up.timestamp) AS last_timestamp, count(summary.mean) AS observations
FROM summary JOIN run ON run.id = summary.run_id JOIN machine ON machine.id = run.machine_id JOIN (SELECT commit_index.id AS id, commit_index.sha AS sha, commit_index.timestamp AS timestamp, commit_index.row_number AS row_number
FROM (SELECT ordered_commits.id AS id, ordered_commits.sha AS sha, ordered_commits.timestamp AS timestamp, row_number() OVER () AS row_number
FROM ordered_commits) AS commit_index
Expand Down Expand Up @@ -132,7 +132,9 @@ def test_distribution_queries():
assert query == ROW_NUMBER
query = str(get_commits_up(REPO, "SHA", 3).statement.compile())
assert query == COMMITS_UP
query = str(get_distribution(REPO, "SHA", "ID", "ID", "ID", 3).statement.compile())
query = str(
get_distribution(REPO, "SHA", "ID", "ID", "ID", "ID", 3).statement.compile()
)
assert query == DISTRIBUTION


Expand Down Expand Up @@ -302,13 +304,14 @@ def test_distribution():
# ----- get_distribution

assert get_distribution(
REPO, "55555", case_id, context_id, machine_hash, 10
REPO, "55555", case_id, context_id, commit_5.id, machine_hash, 10
).all() == [
(
REPO,
"55555",
summary_5.case_id,
summary_5.context_id,
commit_5.id,
MACHINE,
"s",
decimal.Decimal("1.8440000000000000"),
Expand All @@ -325,13 +328,14 @@ def test_distribution():
)
]
assert get_distribution(
REPO, "44444", case_id, context_id, machine_hash, 10
REPO, "44444", case_id, context_id, commit_4.id, machine_hash, 10
).all() == [
(
REPO,
"44444",
summary_4.case_id,
summary_4.context_id,
commit_4.id,
MACHINE,
"s",
decimal.Decimal("1.5475000000000000"),
Expand All @@ -348,13 +352,14 @@ def test_distribution():
)
]
assert get_distribution(
REPO, "33333", case_id, context_id, machine_hash, 10
REPO, "33333", case_id, context_id, commit_3.id, machine_hash, 10
).all() == [
(
REPO,
"33333",
summary_3.case_id,
summary_3.context_id,
commit_3.id,
MACHINE,
"s",
decimal.Decimal("1.6966666666666667"),
Expand All @@ -371,13 +376,14 @@ def test_distribution():
)
]
assert get_distribution(
REPO, "22222", case_id, context_id, machine_hash, 10
REPO, "22222", case_id, context_id, commit_2.id, machine_hash, 10
).all() == [
(
REPO,
"22222",
summary_2.case_id,
summary_2.context_id,
commit_2.id,
MACHINE,
"s",
decimal.Decimal("2.0300000000000000"),
Expand All @@ -394,13 +400,14 @@ def test_distribution():
)
]
assert get_distribution(
REPO, "11111", case_id, context_id, machine_hash, 10
REPO, "11111", case_id, context_id, commit_1.id, machine_hash, 10
).all() == [
(
REPO,
"11111",
summary_1.case_id,
summary_1.context_id,
commit_1.id,
MACHINE,
"s",
decimal.Decimal("2.0300000000000000"),
Expand All @@ -416,10 +423,6 @@ def test_distribution():
1,
)
]
assert (
get_distribution(REPO, "00000", case_id, context_id, machine_hash, 10).all()
== []
)

# ----- set_z_scores

Expand Down Expand Up @@ -500,13 +503,14 @@ def test_distribution_multiple_runs_same_commit():
machine_hash = summary_1.run.machine.hash

assert get_distribution(
REPO, "xxxxx", case_id, context_id, machine_hash, 10
REPO, "xxxxx", case_id, context_id, commit_1.id, machine_hash, 10
).all() == [
(
REPO,
"xxxxx",
case_id,
context_id,
commit_1.id,
MACHINE,
"s",
decimal.Decimal("2.0000000000000000"),
Expand All @@ -524,13 +528,14 @@ def test_distribution_multiple_runs_same_commit():
]

assert get_distribution(
REPO, "yyyyy", case_id, context_id, machine_hash, 10
REPO, "yyyyy", case_id, context_id, commit_2.id, machine_hash, 10
).all() == [
(
REPO,
"yyyyy",
case_id,
context_id,
commit_2.id,
MACHINE,
"s",
decimal.Decimal("2.5000000000000000"),
Expand Down
34 changes: 34 additions & 0 deletions migrations/versions/dc0ed346df63_add_commit_id_to_dist_table.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
"""Add commit id to dist table
Revision ID: dc0ed346df63
Revises: 69493ddc938a
Create Date: 2021-07-28 08:50:54.190008
"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = "dc0ed346df63"
down_revision = "69493ddc938a"
branch_labels = None
depends_on = None


def upgrade():
op.add_column(
"distribution", sa.Column("commit_id", sa.String(length=50), nullable=True)
)
op.create_index(
"distribution_commit_id_index", "distribution", ["commit_id"], unique=False
)
op.create_foreign_key(
None, "distribution", "commit", ["commit_id"], ["id"], ondelete="CASCADE"
)


def downgrade():
op.drop_constraint(None, "distribution", type_="foreignkey")
op.drop_index("distribution_commit_id_index", table_name="distribution")
op.drop_column("distribution", "commit_id")

0 comments on commit d4f3f7d

Please sign in to comment.