Skip to content

Commit 9b324fc

Browse files
authored
feat: allow filtering by collection slug on leaderboards (#3636)
Signed-off-by: Gašper Grom <gasper.grom@gmail.com>
1 parent 489d95b commit 9b324fc

13 files changed

Lines changed: 80 additions & 27 deletions

services/libs/tinybird/datasources/leaderboards_copy_ds.datasource

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ DESCRIPTION >
1212
- `leaderboardType` identifies the ranking category (e.g., 'commit-activity', 'active-contributors').
1313
- `value` is the primary metric value used for ranking (interpretation depends on leaderboardType).
1414
- `previousPeriodValue` is the comparison metric from the previous period (0 for non-temporal leaderboards).
15+
- `collectionsSlugs` list of collection slugs the project belongs to.
16+
- `isLF` indicates whether the project is a LF project (1 = true, 0 = false).
1517

1618
TAGS "Analytics, Leaderboards, Project rankings"
1719

@@ -24,7 +26,9 @@ SCHEMA >
2426
`logoUrl` String,
2527
`leaderboardType` String,
2628
`value` Float64,
27-
`previousPeriodValue` Float64
29+
`previousPeriodValue` Float64,
30+
`collectionsSlugs` Array(String),
31+
`isLF` UInt8
2832

2933
ENGINE MergeTree
3034
ENGINE_SORTING_KEY leaderboardType, rank, slug, id

services/libs/tinybird/pipes/leaderboards.pipe

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ SQL >
1919
AND leaderboardType
2020
= {{ String(leaderboardType, description="Leaderboard type", required=False) }}
2121
{% end %}
22+
{% if defined(collectionSlug) %}
23+
AND has(
24+
collectionsSlugs,
25+
{{ String(collectionSlug, description="Filter collection by slug", required=False) }}
26+
)
27+
{% end %}
2228
{% if defined(search) %}
2329
AND name
2430
ilike '%'

services/libs/tinybird/pipes/leaderboards_avg_commits_per_author.pipe

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ DESCRIPTION >
88
Retrieves all projects that have git integration enabled
99

1010
SQL >
11-
SELECT id, name, slug, segmentId, logoUrl
11+
SELECT id, name, slug, segmentId, logoUrl, collectionsSlugs, isLF
1212
FROM insights_projects_populated_ds
1313
WHERE has(connectedPlatforms, 'git')
14-
GROUP BY id, name, slug, segmentId, logoUrl
14+
GROUP BY id, name, slug, segmentId, logoUrl, collectionsSlugs, isLF
1515

1616
NODE leaderboards_avg_commits_per_author_activities
1717
DESCRIPTION >
@@ -44,6 +44,8 @@ SQL >
4444
p.name as name,
4545
p.slug as slug,
4646
p.logoUrl as logoUrl,
47+
p.collectionsSlugs as collectionsSlugs,
48+
p.isLF as isLF,
4749
(coalesce(c.commits, 0) / coalesce(c.unique_authors, 1)) as value
4850
FROM leaderboards_avg_commits_per_author_projects p
4951
INNER JOIN leaderboards_avg_commits_per_author_activities c ON p.segmentId = c.segmentId

services/libs/tinybird/pipes/leaderboards_codebase_size.pipe

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ DESCRIPTION >
88
Retrieves all projects that have git integration enabled
99

1010
SQL >
11-
SELECT id, name, slug, segmentId, logoUrl
11+
SELECT id, name, slug, segmentId, logoUrl, collectionsSlugs, isLF
1212
FROM insights_projects_populated_ds
1313
WHERE has(connectedPlatforms, 'git')
14-
GROUP BY id, name, slug, segmentId, logoUrl
14+
GROUP BY id, name, slug, segmentId, logoUrl, collectionsSlugs, isLF
1515

1616
NODE leaderboards_codebase_size_activities
1717
DESCRIPTION >
@@ -38,6 +38,8 @@ SQL >
3838
p.name as name,
3939
p.slug as slug,
4040
p.logoUrl as logoUrl,
41+
p.collectionsSlugs as collectionsSlugs,
42+
p.isLF as isLF,
4143
CAST(coalesce(o.lineDifference, 0) as Float64) as value
4244
FROM leaderboards_codebase_size_projects p
4345
INNER JOIN leaderboards_codebase_size_activities o ON p.segmentId = o.segmentId

services/libs/tinybird/pipes/leaderboards_commits.pipe

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ DESCRIPTION >
88
Retrieves all projects from the populated datasource
99

1010
SQL >
11-
SELECT id, name, slug, segmentId, logoUrl
11+
SELECT id, name, slug, segmentId, logoUrl, collectionsSlugs, isLF
1212
FROM insights_projects_populated_ds
13-
GROUP BY id, name, slug, segmentId, logoUrl
13+
GROUP BY id, name, slug, segmentId, logoUrl, collectionsSlugs, isLF
1414

1515
NODE leaderboards_commits_current_period
1616
DESCRIPTION >
@@ -56,6 +56,8 @@ SQL >
5656
p.name as name,
5757
p.slug as slug,
5858
p.logoUrl as logoUrl,
59+
p.collectionsSlugs as collectionsSlugs,
60+
p.isLF as isLF,
5961
cast(coalesce(o.commits, 0) as Float64) as value,
6062
cast(coalesce(pp.commits, 0) as Float64) as previousPeriodValue
6163
FROM leaderboards_commits_projects p

services/libs/tinybird/pipes/leaderboards_issue_response.pipe

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ DESCRIPTION >
88
Retrieves all projects that have GitHub or GitLab integration enabled
99

1010
SQL >
11-
SELECT id, name, slug, segmentId, logoUrl
11+
SELECT id, name, slug, segmentId, logoUrl, collectionsSlugs, isLF
1212
FROM insights_projects_populated_ds
1313
WHERE arrayExists(x -> x IN ('github', 'gitlab'), connectedPlatforms)
14-
GROUP BY id, name, slug, segmentId, logoUrl
14+
GROUP BY id, name, slug, segmentId, logoUrl, collectionsSlugs, isLF
1515

1616
NODE leaderboards_issue_response_current_period
1717
DESCRIPTION >
@@ -55,6 +55,8 @@ SQL >
5555
p.name as name,
5656
p.slug as slug,
5757
p.logoUrl as logoUrl,
58+
p.collectionsSlugs as collectionsSlugs,
59+
p.isLF as isLF,
5860
coalesce(o.averageResponseTimeSeconds, 0) as value,
5961
coalesce(pp.averageResponseTimeSeconds, 0) as previousPeriodValue
6062
FROM leaderboards_issue_response_projects p

services/libs/tinybird/pipes/leaderboards_members.pipe

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ SQL >
1919

2020
NODE leaderboards_members_current_period
2121
DESCRIPTION >
22-
Counts total contribution activities per member for the last 12 months
22+
Counts total contribution activities per member for the last 12 months and collects segment IDs
2323

2424
SQL >
25-
SELECT memberId, count(*) AS memberActivityCount
25+
SELECT memberId, count(*) AS memberActivityCount, groupUniqArray(segmentId) as segmentIds
2626
FROM activityRelations_deduplicated_cleaned_ds ar
2727
INNER JOIN
2828
leaderboards_member_activity_types at ON ar.type = at.activityType AND ar.platform = at.platform
@@ -49,9 +49,16 @@ SQL >
4949
AND timestamp < now() - INTERVAL 12 MONTH
5050
GROUP BY memberId
5151

52+
NODE leaderboards_members_projects
53+
DESCRIPTION >
54+
Get project details for collection slugs lookup
55+
56+
SQL >
57+
SELECT segmentId, collectionsSlugs FROM insights_projects_populated_ds WHERE segmentId != ''
58+
5259
NODE leaderboards_members_results
5360
DESCRIPTION >
54-
Joins member metadata with current and previous period activity counts, ranks by most activities
61+
Joins member metadata with current and previous period activity counts, ranks by most activities, and aggregates collection slugs
5562

5663
SQL >
5764
SELECT
@@ -61,11 +68,16 @@ SQL >
6168
p.displayName as name,
6269
'' as slug,
6370
p.avatar as logoUrl,
71+
arrayDistinct(arrayFlatten(groupArray(proj.collectionsSlugs))) as collectionSlugs,
72+
0 as isLF,
6473
cast(coalesce(c.memberActivityCount, 0) as Float64) as value,
6574
cast(coalesce(pp.memberActivityCount, 0) as Float64) as previousPeriodValue
6675
FROM leaderboards_members_data p
6776
INNER JOIN leaderboards_members_current_period c ON p.id = c.memberId
68-
LEFT JOIN leaderboards_members_previous_period pp ON p.id = pp.memberId
77+
LEFT JOIN leaderboards_members_previous_period pp ON p.id = pp.memberId ARRAY
78+
JOIN c.segmentIds as sid
79+
LEFT JOIN leaderboards_members_projects proj ON proj.segmentId = sid
6980
WHERE c.memberActivityCount > 0
81+
GROUP BY p.id, p.displayName, p.avatar, c.memberActivityCount, pp.memberActivityCount
7082
ORDER BY value DESC
7183
LIMIT 100

services/libs/tinybird/pipes/leaderboards_merge_time.pipe

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ DESCRIPTION >
88
Retrieves all projects that have GitHub or GitLab integration enabled
99

1010
SQL >
11-
SELECT id, name, slug, segmentId, logoUrl
11+
SELECT id, name, slug, segmentId, logoUrl, collectionsSlugs, isLF
1212
FROM insights_projects_populated_ds
1313
WHERE arrayExists(x -> x IN ('github', 'gitlab'), connectedPlatforms)
14-
GROUP BY id, name, slug, segmentId, logoUrl
14+
GROUP BY id, name, slug, segmentId, logoUrl, collectionsSlugs, isLF
1515

1616
NODE leaderboards_merge_time_current_period
1717
DESCRIPTION >
@@ -50,6 +50,8 @@ SQL >
5050
p.name as name,
5151
p.slug as slug,
5252
p.logoUrl as logoUrl,
53+
p.collectionsSlugs as collectionsSlugs,
54+
p.isLF as isLF,
5355
cast(coalesce(o.averageMergeTimeSeconds, 0) as Float64) as value,
5456
cast(coalesce(pp.averageMergeTimeSeconds, 0) as Float64) as previousPeriodValue
5557
FROM leaderboards_merge_time_projects p

services/libs/tinybird/pipes/leaderboards_organizations.pipe

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ SQL >
1919

2020
NODE leaderboards_organizations_current_period
2121
DESCRIPTION >
22-
Counts total contribution activities per organization for the last 12 months
22+
Counts total contribution activities per organization for the last 12 months and collects segment IDs
2323

2424
SQL >
25-
SELECT organizationId, count(*) AS organizationActivityCount
25+
SELECT
26+
organizationId, count(*) AS organizationActivityCount, groupUniqArray(segmentId) as segmentIds
2627
FROM activityRelations_deduplicated_cleaned_ds ar
2728
INNER JOIN
2829
leaderboards_organizations_activity_types at
@@ -53,9 +54,16 @@ SQL >
5354
AND timestamp < now() - INTERVAL 12 MONTH
5455
GROUP BY organizationId
5556

57+
NODE leaderboards_organizations_projects
58+
DESCRIPTION >
59+
Get project details for collection slugs lookup
60+
61+
SQL >
62+
SELECT segmentId, collectionsSlugs FROM insights_projects_populated_ds WHERE segmentId != ''
63+
5664
NODE leaderboards_organizations_results
5765
DESCRIPTION >
58-
Joins organization metadata with current and previous period activity counts, ranks by most activities
66+
Joins organization metadata with current and previous period activity counts, ranks by most activities, and aggregates collection slugs
5967

6068
SQL >
6169
SELECT
@@ -65,11 +73,16 @@ SQL >
6573
p.displayName as name,
6674
'' as slug,
6775
p.logo as logoUrl,
76+
arrayDistinct(arrayFlatten(groupArray(proj.collectionsSlugs))) as collectionSlugs,
77+
0 as isLF,
6878
cast(coalesce(c.organizationActivityCount, 0) as Float64) as value,
6979
cast(coalesce(pp.organizationActivityCount, 0) as Float64) as previousPeriodValue
7080
FROM leaderboards_organizations_data p
7181
INNER JOIN leaderboards_organizations_current_period c ON p.id = c.organizationId
72-
LEFT JOIN leaderboards_organizations_previous_period pp ON p.id = pp.organizationId
82+
LEFT JOIN leaderboards_organizations_previous_period pp ON p.id = pp.organizationId ARRAY
83+
JOIN c.segmentIds as sid
84+
LEFT JOIN leaderboards_organizations_projects proj ON proj.segmentId = sid
7385
WHERE c.organizationActivityCount > 0
86+
GROUP BY p.id, p.displayName, p.logo, c.organizationActivityCount, pp.organizationActivityCount
7487
ORDER BY value DESC
7588
LIMIT 100

services/libs/tinybird/pipes/leaderboards_project_active_contributors.pipe

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ DESCRIPTION >
88
Retrieves all projects from the populated datasource
99

1010
SQL >
11-
SELECT id, name, slug, segmentId, logoUrl
11+
SELECT id, name, slug, segmentId, logoUrl, collectionsSlugs, isLF
1212
FROM insights_projects_populated_ds
13-
GROUP BY id, name, slug, segmentId, logoUrl
13+
GROUP BY id, name, slug, segmentId, logoUrl, collectionsSlugs, isLF
1414

1515
NODE leaderboards_project_active_contributors_activity_types
1616
DESCRIPTION >
@@ -65,6 +65,8 @@ SQL >
6565
p.name as name,
6666
p.slug as slug,
6767
p.logoUrl as logoUrl,
68+
p.collectionsSlugs as collectionsSlugs,
69+
p.isLF as isLF,
6870
cast(coalesce(c.contributor_count, 0) as Float64) as value,
6971
cast(coalesce(pp.contributor_count, 0) as Float64) as previousPeriodValue
7072
FROM leaderboards_project_active_contributors_projects p

0 commit comments

Comments
 (0)