Skip to content

Commit 47b1d7a

Browse files
committed
Add some indexes for JSON fields, fix numerous bugs
1 parent 32ef735 commit 47b1d7a

File tree

7 files changed

+25
-12
lines changed

7 files changed

+25
-12
lines changed

backend/ibutsu_server/controllers/widget_config_controller.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def get_widget_config_list(filter_=None, page=1, page_size=25):
7676
offset = (page * page_size) - page_size
7777
total_items = query.count()
7878
total_pages = (total_items // page_size) + (1 if total_items % page_size > 0 else 0)
79-
widgets = query.order_by(WidgetConfig.weight.desc()).offset(offset).limit(page_size)
79+
widgets = query.order_by(WidgetConfig.weight.asc()).offset(offset).limit(page_size)
8080
return {
8181
"widgets": [widget.to_dict() for widget in widgets],
8282
"pagination": {

backend/ibutsu_server/filters.py

+2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ def string_to_column(field, model):
2626
if idx == 0:
2727
continue
2828
column = column[part]
29+
if field not in ARRAY_FIELDS:
30+
column = column.as_string()
2931
else:
3032
column = getattr(model, field)
3133
return column

backend/ibutsu_server/scripts/mongo2postgres.py

+15-5
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
UUID_1_EPOCH = datetime(1582, 10, 15, tzinfo=timezone.utc)
2929
UUID_TICKS = 10000000
3030
UUID_VARIANT_1 = 0b1000000000000000
31-
ROWS_TO_COMMIT_AT_ONCE = 10000
31+
ROWS_TO_COMMIT_AT_ONCE = 1000
3232
MONTHS_TO_KEEP = 1
3333
# To avoid foreign key constraints, just shift the range of artifacts to keep a bit
3434
ARTIFACT_MONTHS_TO_KEEP = 0.75 * MONTHS_TO_KEEP
@@ -69,10 +69,18 @@
6969

7070
# json indexes for the tables
7171
INDEXES = {
72-
# "results": [
73-
# ],
74-
# "runs": [
75-
# ],
72+
"results": [
73+
"CREATE INDEX ix_results_jenkins_job_name ON results((data->'jenkins'->>'job_name'));",
74+
"CREATE INDEX ix_results_jenkins_build_number "
75+
"ON results((data->'jenkins'->>'build_number'));",
76+
"CREATE INDEX ix_results_classification ON results((data->>'classification'));",
77+
"CREATE INDEX ix_results_assignee ON results((data->>'assignee'));",
78+
"CREATE INDEX ix_results_exception_name ON results((data->>'exception_name'));",
79+
],
80+
"runs": [
81+
"CREATE INDEX ix_runs_jenkins_job_name ON runs((data->'jenkins'->>'job_name'));"
82+
"CREATE INDEX ix_runs_jenkins_build_number ON runs((data->'jenkins'->>'build_number'));"
83+
],
7684
}
7785

7886

@@ -195,6 +203,8 @@ def migrate_table(collection, Model, vprint, filter_=None):
195203
if row.get("params") and row["params"].get("sort_field"):
196204
# we no longer use this field
197205
row["params"].pop("sort_field")
206+
if row.get("params") and row["params"].get("group_field") == "metadata.component":
207+
row["params"]["group_field"] = "component"
198208

199209
obj = Model.from_dict(**row)
200210
session.add(obj)

backend/ibutsu_server/widgets/jenkins_heatmap.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from ibutsu_server.db.base import Float
2+
from ibutsu_server.db.base import Integer
23
from ibutsu_server.db.base import session
34
from ibutsu_server.db.models import Run
45
from ibutsu_server.filters import apply_filters
@@ -42,7 +43,7 @@ def _get_builds(job_name, builds, project=None):
4243

4344
# create the query
4445
query = (
45-
session.query(group_field.label("build_number"))
46+
session.query(group_field.cast(Integer).label("build_number"))
4647
.group_by("build_number")
4748
.order_by(desc("build_number"))
4849
)
@@ -51,7 +52,7 @@ def _get_builds(job_name, builds, project=None):
5152
query = apply_filters(query, filters, Run)
5253

5354
# make the query
54-
return [build_number[0] for build_number in query.limit(builds)]
55+
return [str(build_number[0]) for build_number in query.limit(builds)]
5556

5657

5758
def _get_heatmap(job_name, builds, group_field, count_skips, project=None):
@@ -67,7 +68,7 @@ def _get_heatmap(job_name, builds, group_field, count_skips, project=None):
6768
f"{group_field}@y",
6869
]
6970
if project:
70-
filters.append(f"metadata.project={project}")
71+
filters.append(f"project_id={project}")
7172

7273
# generate the group_fields
7374
group_field = string_to_column(group_field, Run)

frontend/src/app.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class App extends React.Component {
9393
let params = {'filter': ['type=view', 'navigable=true']};
9494
let project = getActiveProject();
9595
if (project) {
96-
params['filter'].push('project=' + project.id);
96+
params['filter'].push('project_id=' + project.id);
9797
}
9898
fetch(buildUrl(Settings.serverUrl + '/widget-config', params))
9999
.then(response => response.json())

frontend/src/dashboard.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export class Dashboard extends React.Component {
4040
let params = {"type": "widget"};
4141
let project = getActiveProject();
4242
if (project) {
43-
params['filter'] = 'project=' + project.id;
43+
params['filter'] = 'project_id=' + project.id;
4444
}
4545
fetch(buildUrl(Settings.serverUrl + '/widget-config', params))
4646
.then(response => response.json())

frontend/src/run.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ export class Run extends React.Component {
343343
}
344344

345345
getResultsForTree(page) {
346-
let params = {filter: 'metadata.run=' + this.state.id};
346+
let params = {filter: 'run_id=' + this.state.id};
347347
params['pageSize'] = 500;
348348
params['page'] = page;
349349
fetch(buildUrl(Settings.serverUrl + '/result', params))

0 commit comments

Comments
 (0)