diff --git a/services/libs/tinybird/datasources/top_member_org_copy_ds.datasource b/services/libs/tinybird/datasources/top_member_org_copy_ds.datasource deleted file mode 100644 index 99a5d9c760..0000000000 --- a/services/libs/tinybird/datasources/top_member_org_copy_ds.datasource +++ /dev/null @@ -1,13 +0,0 @@ -DESCRIPTION > - Top 100 members and organizations - -SCHEMA > - `entityId` String, - `displayName` String, - `avatar` String, - `activityCount` UInt64, - `roles` Array(String), - `entityType` LowCardinality(String) - -ENGINE MergeTree -ENGINE_SORTING_KEY entityType, activityCount, entityId diff --git a/services/libs/tinybird/pipes/leaderboards_copy.pipe b/services/libs/tinybird/pipes/leaderboards_copy.pipe index 52aeec6418..70c16d58e7 100644 --- a/services/libs/tinybird/pipes/leaderboards_copy.pipe +++ b/services/libs/tinybird/pipes/leaderboards_copy.pipe @@ -34,6 +34,12 @@ SQL > UNION ALL SELECT *, 0.0 as previousPeriodValue, 'resolution-rate' as leaderboardType FROM leaderboards_resolution_rate + UNION ALL + SELECT *, 'members' as leaderboardType + FROM leaderboards_members + UNION ALL + SELECT *, 'organizations' as leaderboardType + FROM leaderboards_organizations TYPE COPY TARGET_DATASOURCE leaderboards_copy_ds diff --git a/services/libs/tinybird/pipes/leaderboards_members.pipe b/services/libs/tinybird/pipes/leaderboards_members.pipe new file mode 100644 index 0000000000..4839f36123 --- /dev/null +++ b/services/libs/tinybird/pipes/leaderboards_members.pipe @@ -0,0 +1,65 @@ +DESCRIPTION > + Leaderboard ranking members by total number of contribution activities. Counts all + contribution activities (collaboration or code contributions) per member. Compares the + current period (last 12 months) with the previous period (12-24 months ago). + +NODE leaderboards_members_data +DESCRIPTION > + Retrieves all members from the populated datasource + +SQL > + SELECT id, displayName, avatar FROM members_sorted + +NODE leaderboards_member_activity_types +DESCRIPTION > + Filters activity types to include only collaboration and code contribution activities + +SQL > + SELECT activityType, platform FROM activityTypes FINAL WHERE isCollaboration or isCodeContribution + +NODE leaderboards_members_current_period +DESCRIPTION > + Counts total contribution activities per member for the last 12 months + +SQL > + SELECT memberId, count(*) AS memberActivityCount + FROM activityRelations_deduplicated_cleaned_ds ar + INNER JOIN + leaderboards_member_activity_types at ON ar.type = at.activityType AND ar.platform = at.platform + WHERE memberId != '' AND timestamp >= now() - INTERVAL 12 MONTH AND timestamp < now() + GROUP BY memberId + +NODE leaderboards_members_previous_period +DESCRIPTION > + Counts total contribution activities per member for the previous 12 months (12-24 months ago) + +SQL > + SELECT memberId, count(*) AS memberActivityCount + FROM activityRelations_deduplicated_cleaned_ds ar + INNER JOIN + leaderboards_member_activity_types at ON ar.type = at.activityType AND ar.platform = at.platform + WHERE + memberId != '' + AND timestamp >= now() - INTERVAL 24 MONTH + AND timestamp < now() - INTERVAL 12 MONTH + GROUP BY memberId + +NODE leaderboards_members_results +DESCRIPTION > + Joins member metadata with current and previous period activity counts, ranks by most activities + +SQL > + SELECT + row_number() OVER (ORDER BY coalesce(c.memberActivityCount, 0) DESC) as rank, + p.id as id, + '' as segmentId, + p.displayName as name, + '' as slug, + p.avatar as logoUrl, + cast(coalesce(c.memberActivityCount, 0) as Float64) as value, + cast(coalesce(pp.memberActivityCount, 0) as Float64) as previousPeriodValue + FROM leaderboards_members_data p + INNER JOIN leaderboards_members_current_period c ON p.id = c.memberId + LEFT JOIN leaderboards_members_previous_period pp ON p.id = pp.memberId + WHERE c.memberActivityCount > 0 + ORDER BY value DESC diff --git a/services/libs/tinybird/pipes/leaderboards_organizations.pipe b/services/libs/tinybird/pipes/leaderboards_organizations.pipe new file mode 100644 index 0000000000..faff37368b --- /dev/null +++ b/services/libs/tinybird/pipes/leaderboards_organizations.pipe @@ -0,0 +1,69 @@ +DESCRIPTION > + Leaderboard ranking organizations by total number of contribution activities. Counts all + contribution activities (collaboration or code contributions) per organization. Compares the + current period (last 12 months) with the previous period (12-24 months ago). + +NODE leaderboards_organizations_data +DESCRIPTION > + Retrieves all organizations from the populated datasource + +SQL > + SELECT id, displayName, logo FROM organizations FINAL + +NODE leaderboards_organizations_activity_types +DESCRIPTION > + Filters activity types to include only collaboration and code contribution activities + +SQL > + SELECT activityType, platform FROM activityTypes FINAL WHERE isCollaboration or isCodeContribution + +NODE leaderboards_organizations_current_period +DESCRIPTION > + Counts total contribution activities per organization for the last 12 months + +SQL > + SELECT organizationId, count(*) AS organizationActivityCount + FROM activityRelations_deduplicated_cleaned_ds ar + INNER JOIN + leaderboards_organizations_activity_types at + ON ar.type = at.activityType + AND ar.platform = at.platform + WHERE organizationId != '' AND timestamp >= now() - INTERVAL 12 MONTH AND timestamp < now() + GROUP BY organizationId + +NODE leaderboards_organizations_previous_period +DESCRIPTION > + Counts total contribution activities per organization for the previous 12 months (12-24 months ago) + +SQL > + SELECT organizationId, count(*) AS organizationActivityCount + FROM activityRelations_deduplicated_cleaned_ds ar + INNER JOIN + leaderboards_organizations_activity_types at + ON ar.type = at.activityType + AND ar.platform = at.platform + WHERE + organizationId != '' + AND timestamp >= now() - INTERVAL 24 MONTH + AND timestamp < now() - INTERVAL 12 MONTH + GROUP BY organizationId + +NODE leaderboards_organizations_results +DESCRIPTION > + Joins organization metadata with current and previous period activity counts, ranks by most activities + +SQL > + SELECT + row_number() OVER (ORDER BY coalesce(c.organizationActivityCount, 0) DESC) as rank, + p.id as id, + '' as segmentId, + p.displayName as name, + '' as slug, + p.logo as logoUrl, + cast(coalesce(c.organizationActivityCount, 0) as Float64) as value, + cast(coalesce(pp.organizationActivityCount, 0) as Float64) as previousPeriodValue + FROM leaderboards_organizations_data p + INNER JOIN leaderboards_organizations_current_period c ON p.id = c.organizationId + LEFT JOIN leaderboards_organizations_previous_period pp ON p.id = pp.organizationId + WHERE c.organizationActivityCount > 0 + ORDER BY value DESC diff --git a/services/libs/tinybird/pipes/top_active_contributors.pipe b/services/libs/tinybird/pipes/top_active_contributors.pipe deleted file mode 100644 index 11e0d6bdfd..0000000000 --- a/services/libs/tinybird/pipes/top_active_contributors.pipe +++ /dev/null @@ -1,21 +0,0 @@ -DESCRIPTION > - - `top_active_contributors.pipe` serves top active contributors widget showing contributors ranked by activity count. - - Uses pre-calculated data from `top_member_org_copy_ds` datasource for optimized performance. - - Filters for member entities only (excludes organizations) and orders by activity count descending. - - Primary use case: displaying top contributor rankings in dashboard widgets and leaderboards. - - Parameters: - - `pageSize`: Optional integer for result limit, defaults to 10 - - `page`: Optional integer for pagination offset calculation, defaults to 0 - - Response: `id`, `displayName`, `avatar`, `roles`, `activityCount` - -TAGS "Widget", "Contributors", "Top performers" - -NODE top_active_contributors_result -SQL > - % - SELECT entityId as id, displayName, avatar, roles, activityCount - FROM top_member_org_copy_ds - WHERE entityType = 'member' - ORDER BY activityCount DESC - LIMIT {{ Int32(pageSize, 10) }} - OFFSET {{ Int32(page, 0) * Int32(pageSize, 10) }} diff --git a/services/libs/tinybird/pipes/top_active_organizations.pipe b/services/libs/tinybird/pipes/top_active_organizations.pipe deleted file mode 100644 index c3c31849ff..0000000000 --- a/services/libs/tinybird/pipes/top_active_organizations.pipe +++ /dev/null @@ -1,21 +0,0 @@ -DESCRIPTION > - - `top_active_organizations.pipe` serves top active organizations widget showing organizations ranked by activity count. - - Uses pre-calculated data from `top_member_org_copy_ds` datasource for optimized performance. - - Filters for organization entities only (excludes members) and orders by activity count descending. - - Primary use case: displaying top organization rankings in dashboard widgets and leaderboards. - - Parameters: - - `pageSize`: Optional integer for result limit, defaults to 10 - - `page`: Optional integer for pagination offset calculation, defaults to 0 - - Response: `id`, `displayName`, `logo`, `activityCount` - -TAGS "Widget", "Organizations", "Top performers" - -NODE top_active_organizations_results -SQL > - % - SELECT entityId as id, displayName, avatar as logo, activityCount - FROM top_member_org_copy_ds - WHERE entityType = 'organization' - ORDER BY activityCount DESC - LIMIT {{ Int32(pageSize, 10) }} - OFFSET {{ Int32(page, 0) * Int32(pageSize, 10) }} diff --git a/services/libs/tinybird/pipes/top_member_org_copy.pipe b/services/libs/tinybird/pipes/top_member_org_copy.pipe deleted file mode 100644 index 223f30a6f3..0000000000 --- a/services/libs/tinybird/pipes/top_member_org_copy.pipe +++ /dev/null @@ -1,96 +0,0 @@ -DESCRIPTION > - Returns top 100 members and organizations based on activity count in the last 10 years. - -NODE top_member_org_copy_members_deduplicated -SQL > - SELECT id, displayName, avatar FROM members_sorted - -NODE top_member_org_copy_organizations_deduplicated -SQL > - SELECT id, displayName, logo FROM organizations FINAL - -NODE top_member_org_copy_roles -SQL > - SELECT memberId, roles FROM member_roles - -NODE top_member_org_copy_member_activity_count -SQL > - SELECT memberId, count(*) AS activityCount - FROM activityRelations_deduplicated_cleaned_ds - WHERE - (timestamp >= (now() - toIntervalYear(10))) - AND (timestamp < now()) - AND (type, platform) IN ( - SELECT activityType, platform - FROM activityTypes - WHERE isCodeContribution = 1 OR isCollaboration = 1 - ) - GROUP BY memberId - ORDER BY activityCount DESC - LIMIT 100 - -NODE top_member_org_copy_top_members -SQL > - SELECT - id as id, - displayName as displayName, - avatar as avatar, - roles as roles, - activityCount as activityCount - FROM top_member_org_copy_member_activity_count - LEFT JOIN - top_member_org_copy_members_deduplicated - ON top_member_org_copy_members_deduplicated.id - = top_member_org_copy_member_activity_count.memberId - LEFT JOIN top_member_org_copy_roles USING (memberId) - -NODE top_member_org_copy_organization_activity_count -SQL > - SELECT organizationId, count(*) AS activityCount - FROM activityRelations_deduplicated_cleaned_ds - WHERE - (timestamp >= (now() - toIntervalYear(10))) - AND (timestamp < now()) - AND organizationId != '' - AND (type, platform) IN ( - SELECT activityType, platform - FROM activityTypes - WHERE isCodeContribution = 1 OR isCollaboration = 1 - ) - GROUP BY organizationId - ORDER BY activityCount DESC - LIMIT 100 - -NODE top_member_org_copy_top_organizations -SQL > - SELECT id as id, displayName as displayName, logo as avatar, activityCount as activityCount - FROM top_member_org_copy_organization_activity_count - LEFT JOIN - top_member_org_copy_organizations_deduplicated - ON top_member_org_copy_organizations_deduplicated.id - = top_member_org_copy_organization_activity_count.organizationId - -NODE top_member_org_copy_result -SQL > - SELECT - top_member_org_copy_top_members.id as entityId, - top_member_org_copy_top_members.displayName as displayName, - top_member_org_copy_top_members.avatar as avatar, - top_member_org_copy_top_members.activityCount as activityCount, - top_member_org_copy_top_members.roles as roles, - 'member' as entityType - FROM top_member_org_copy_top_members - UNION ALL - SELECT - top_member_org_copy_top_organizations.id as entityId, - top_member_org_copy_top_organizations.displayName as displayName, - top_member_org_copy_top_organizations.avatar as avatar, - top_member_org_copy_top_organizations.activityCount as activityCount, - [] as roles, - 'organization' as entityType - FROM top_member_org_copy_top_organizations - -TYPE COPY -TARGET_DATASOURCE top_member_org_copy_ds -COPY_MODE replace -COPY_SCHEDULE 50 0 * * *