Skip to content

Commit

Permalink
[ci] show weekly green metric on go/flaky (#51)
Browse files Browse the repository at this point in the history
Compute the weekly green metric and show it on go/flaky. See attached
green shot, the newly added data is the 'Daily green metric'

<img width="1853" alt="Screenshot 2024-01-24 at 1 56 59 PM"
src="https://github.com/ray-project/travis-tracker-v2/assets/128072568/5d17f8a1-0e07-49b3-8cb8-64154b1d3a2c">

---------

Signed-off-by: can <[email protected]>
  • Loading branch information
can-anyscale authored Jan 24, 2024
1 parent 35c91b9 commit 2fa8936
Show file tree
Hide file tree
Showing 5 changed files with 114 additions and 1 deletion.
48 changes: 48 additions & 0 deletions js/src/components/weeklygreen.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import React from "react";
import { Col, Row, Tooltip } from "antd";
import { SiteWeeklyGreenMetric } from "../interface";
import "./segment.css";

interface Prop {
data: Array<SiteWeeklyGreenMetric>;
}

const WeeklyGreenMetric: React.FC<Prop> = ({ data }) => {
return (
<>
<button
style={{
backgroundColor: "rgba(220,220,220,0.3)",
margin: "8px",
marginTop: "16px",
padding: "8px",
paddingLeft: "16px",
borderRadius: "4px",
fontSize: "1.2em",
textAlign: "left",
width: "100%",
border: "none",
cursor: "pointer",
}}
>
<Row><Col>{"Daily green metric"}</Col></Row>
</button>
<div style={{ display: "flex", width: "90%", margin: "0 auto" }}>
{data.map((c) => {
let className = "item";
if (c.num_of_blockers > 0) {
className = `item failed`;
}

return (
<Tooltip key={c.date} title={<p>{c.date}</p>}>
<div className={className} />
</Tooltip>
);
})}
</div>
</>
);
};

export default WeeklyGreenMetric;
6 changes: 6 additions & 0 deletions js/src/interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,15 @@ export interface SiteFailedTest {
owner: string;
}

export interface SiteWeeklyGreenMetric {
date: string;
num_of_blockers: number;
}

export interface SiteDisplayRoot {
failed_tests: Array<SiteFailedTest>;
stats: Array<SiteStatItem>;
weekly_green_metric: Array<SiteWeeklyGreenMetric>;
test_owners: Array<string>;
table_stat: string;
}
Expand Down
5 changes: 5 additions & 0 deletions js/src/pages/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import LayoutWrapper from "../components/layout";
import BuildTimeFooter from "../components/time";
import Title from "../components/title";
import TestCase from "../components/case";
import WeeklyGreenMetric from "../components/weeklygreen";
import StatsPane from "../components/stat";
import { SiteDisplayRoot } from "../interface";
import rawData from "../data.json";
Expand Down Expand Up @@ -62,6 +63,8 @@ const App: React.FC<PageProps<DataProps>> = ({ data, location }) => {


const { dataSource, columns } = JSON.parse(displayData.table_stat);

let weeklyGreenMetric = displayData.weekly_green_metric;

let testsToDisplay = displayData.failed_tests;
testsToDisplay = testsToDisplay.filter(
Expand Down Expand Up @@ -95,6 +98,8 @@ const App: React.FC<PageProps<DataProps>> = ({ data, location }) => {
pagination={false}
></Table>

<WeeklyGreenMetric data={weeklyGreenMetric}></WeeklyGreenMetric>

<Radio.Group
style={{ paddingTop: "1%" }}
>
Expand Down
7 changes: 7 additions & 0 deletions ray_ci_tracker/interfaces.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,17 @@ class SiteFailedTest(Mixin):
owner: str


@dataclass
class SiteWeeklyGreenMetric(Mixin):
date: str
num_of_blockers: int


@dataclass
class SiteDisplayRoot(Mixin):
failed_tests: List[SiteFailedTest]
stats: List[SiteStatItem]
weekly_green_metric: List[SiteWeeklyGreenMetric]
test_owners: List[str]
table_stat: str

Expand Down
49 changes: 48 additions & 1 deletion ray_ci_tracker/scripts.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from pathlib import Path

import boto3
import click
import ujson as json

Expand All @@ -9,7 +10,12 @@
from ray_ci_tracker.data_source.github import GithubDataSource
from ray_ci_tracker.data_source.s3 import S3DataSource
from ray_ci_tracker.database import ResultsDBReader, ResultsDBWriter
from ray_ci_tracker.interfaces import SiteDisplayRoot, SiteFailedTest
from ray_ci_tracker.interfaces import SiteDisplayRoot, SiteFailedTest, SiteWeeklyGreenMetric


AWS_ROLE = "arn:aws:iam::029272617770:role/go-flaky-dashboard"
AWS_BUCKET = "ray-ci-results"
AWS_WEEKLY_GREEN_METRIC_PREFIX = "ray_weekly_green_metric/blocker_"


@click.group()
Expand Down Expand Up @@ -107,6 +113,46 @@ async def etl_process(ctx, cache_dir, db_path):
)
db.write_build_results(buildkite_release_result)
del buildkite_release_result


def get_weekly_green_metric():
role = boto3.client('sts').assume_role(
RoleArn=AWS_ROLE,
RoleSessionName="SessionOne",
)
credentials = role['Credentials']
session = boto3.Session(
aws_access_key_id=credentials['AccessKeyId'],
aws_secret_access_key=credentials['SecretAccessKey'],
aws_session_token=credentials['SessionToken']
)
s3_client = session.client("s3")
files = sorted(
s3_client.list_objects_v2(
Bucket=AWS_BUCKET,
Prefix=AWS_WEEKLY_GREEN_METRIC_PREFIX,
).get("Contents", []),
key=lambda file: int(file["LastModified"].strftime("%s")),
reverse=True,
)[:100]

metrics = []
for file in files:
blockers = json.loads(
s3_client.get_object(
Bucket=AWS_BUCKET,
Key=file["Key"],
)
.get("Body")
.read()
.decode("utf-8")
)
metrics.append(SiteWeeklyGreenMetric(
date=file["LastModified"].strftime("%Y-%m-%d"),
num_of_blockers=sum(blockers.values())
))

return metrics


@cli.command("analysis")
Expand All @@ -131,6 +177,7 @@ def perform_analysis(db_path, frontend_json_path):
root_display = SiteDisplayRoot(
failed_tests=data_to_display,
stats=db.get_stats(),
weekly_green_metric=get_weekly_green_metric(),
test_owners=db.get_all_owners(),
table_stat=db.get_table_stat(),
)
Expand Down

0 comments on commit 2fa8936

Please sign in to comment.