Socorro:Rapid Betas:Database Work: Difference between revisions
| Line 214: | Line 214: | ||
For product/versions with a rapid beta, we will: | For product/versions with a rapid beta, we will: | ||
# add a product_version with just a "b" | # add a product_version with just a "b" | ||
# summarize crashes for this "b" version as the total of all crashes for all betas in that series, for: | # summarize crashes for this "b" version as the total of all crashes for all betas in that series, for: | ||
#* home_page_graph | #* home_page_graph | ||
Revision as of 16:56, 27 June 2012
Outline of tasks to be performed:
- migrate productdims to product_versions
- select versions to migrate
- test migrating all versions after FF 3.0, first
- if that doesn't work, select versions
- copy versions into product_versions
- modify product_info, similar views
- modify update_products()
- modify update_reports_clean()
- select versions to migrate
- purge oldtcbs
- disable old cron jobs -- rhelmer
- drop oldtcbs tables
- alexa_topsites
- builds
- frames
- osdims
- product_visibility
- productdims
- productdims_version_sort
- release_build_type_map
- signature_build
- signature_first
- signature_bugs_rollup
- signature_productdims
- top_crashes_by_signature
- top_crashes_by_url
- top_crashes_by_url_signature
- urldims
- create testable dump of database
- create per-object dump of above
- clean up per-object dump
- create automated load script for the database
- create test data for automated load script
- add test framework loader (pgtap).
- overhaul tcbs, daily crash views
- create home_page_graph view
- combine/normalize product_adu + daily_crashes.
- add remaining TCBS data to tcbs view
- use set-returning function?
- modify cron jobs
- Accomodate rapid beta versions
- add column to products
- modify update_products()
- modify update_reports_clean()
- Create new by-build views
- create home_page_graph_build & SPs
- create daily_graph_build & SPs
- create tcbs_build & SPs
Table Changes
-- table of adus by product+build_date. not used directly by the UI.
create table build_adu (
product_version_id int not null, build_date date not null, adu_date DATE not null, adu_count INT not null, constraint build_adu_key primary key ( product_version_id, build_date, adu_date )
);
-- new home page graph table. used directly by the UI
CREATE TABLE home_page_graph (
product_version_id int not null, report_date date not null, report_count int not null default 0, adu int not null default 0, crash_hadu numeric not null default 0.0, constraint home_page_graph_key primary key ( product_version_id, report_date )
);
CREATE OR REPLACE VIEW home_page_graph_view AS SELECT product_version_id,
product_name, version_string, report_date, report_count, adu, crash_hadu
FROM home_page_graph
JOIN product_versions USING (product_version_id);
-- home page graph table by build. used directly by the UI to show graph -- by build date for nightly, aurora, rapid beta
CREATE TABLE home_page_graph_build (
product_version_id int not null, report_date date not null, build_date date not null, report_count int not null default 0, adu int not null default 0, crash_hadu numeric not null default 0.0, constraint home_page_graph_key primary key ( product_version_id, report_date )
);
CREATE OR REPLACE VIEW home_page_graph_build_view AS SELECT product_version_id,
product_name, version_string, build_date, sum(report_count) as report_count, sum(adu) as adu, ( sum(report_count) * throttle * 100 ) / sum(adu) as crash_hadu
FROM home_page_graph_build
JOIN product_versions USING (product_version_id)
JOIN product_release_channels ON
product_versions.product_name = product_release_channels.product_name
AND product_versions.build_type = product_release_channels.release_channel;
-- new "daily graph" table, i.e. "crashes per user" searchable graph
CREATE TABLE crashes_by_user (
product_version_id int not null, os_short_name citext not null, crash_type_id int not null references crash_types(crash_type_id), report_date date not null, report_count int not null, adu int not null, CONSTRAINT crashes_by_user_key PRIMARY KEY ( product_version_id, report_date, os_short_name, crash_type_id )
-- view on top of that to support easy querying CREATE OR REPLACE VIEW crashes_by_user_view AS SELECT crashes_by_user.product_version_id,
product_versions.product_name, version_string, os_short_name, os_name, crash_type, crash_type_short, report_date, report_count, (report_count / throttle) as adjusted_report_count, adu, throttle
FROM crashes_by_user
JOIN product_versions USING (product_version_id) JOIN product_release_channels ON product_versions.product_name = product_release_channels.product_name AND product_versions.build_type = product_release_channels.release_channel JOIN os_names USING (os_short_name) JOIN crash_types USING (crash_type_id);
-- same thing, except by build
CREATE TABLE crash_graph_build (
product_version_id int not null, os_short_name citext not null, crash_type crash_type not null, build_date date not null, report_count int not null, adu int not null
);
-- view on top of that to support easy querying -- note that this is based on a aggregate, so its -- a bit slower
CREATE OR REPLACE VIEW crashes_by_user_build_view AS SELECT crashes_by_user_build.product_version_id,
product_versions.product_name, version_string, os_short_name, os_name, crash_type, crash_type_short, build_date, sum(report_count) as report_count, sum(report_count / throttle) as adjusted_report_count, sum(adu) as adu, throttle
FROM crashes_by_user_build
JOIN product_versions USING (product_version_id) JOIN product_release_channels ON product_versions.product_name = product_release_channels.product_name AND product_versions.build_type = product_release_channels.release_channel JOIN os_names USING (os_short_name) JOIN crash_types USING (crash_type_id)
GROUP BY crashes_by_user_build.product_version_id,
product_versions.product_name, version_string, os_short_name, os_name, crash_type, crash_type_short, build_date, throttle;
-- tcbs, only by build: CREATE TABLE tcbs_build ( signature_id integer NOT NULL, build_date date NOT NULL, report_date date NOT NULL, product_version_id integer NOT NULL, process_type citext NOT NULL, release_channel citext NOT NULL, report_count integer DEFAULT 0 NOT NULL, win_count integer DEFAULT 0 NOT NULL, mac_count integer DEFAULT 0 NOT NULL, lin_count integer DEFAULT 0 NOT NULL, hang_count integer DEFAULT 0 NOT NULL, startup_count integer, CONSTRAINT tcbs_build_key PRIMARY KEY (product_version_id, report_date, build_date, process_type, signature_id) );
-- other table changes, not visible to UI products:
add "rapid_beta_version" column
product_info, product_selector:
add "has_builds" column
this column allows you to determine which product/versions are available for "by build date" views.
-- useful functions
crash_hadu (
crashes bigint, adu bigint, throttle numeric optional (1.0) );
does the math for producing "crashes per hundred ADU" for you, rounding to 3 decimal places.
Plan for Handling Rapid and Individual Betas
For product/versions with a rapid beta, we will:
- add a product_version with just a "b"
- summarize crashes for this "b" version as the total of all crashes for all betas in that series, for:
- home_page_graph
- crash_graph
- tcbs
- if a user clicks on a signature in tcbs, the UI will do a multiselect in order to display signature_summary.