Skip to content
This repository was archived by the owner on Sep 30, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
406baf8
internal/event_logs: optimize ping cte
nathan-downs Aug 3, 2023
383bc92
internal/event_logs: event_logs indexing
nathan-downs Aug 3, 2023
33e60da
internal/event_logs: sg lint
nathan-downs Aug 3, 2023
5ef4c9e
internal/event_logs: sg lint fix
nathan-downs Aug 3, 2023
47965ec
internal/event_logs: bazel configure
nathan-downs Aug 3, 2023
97ce660
Revert "internal/event_logs: bazel configure"
nathan-downs Aug 3, 2023
db9040c
Merge branch 'main' into nd/fix-ping-query-performance
nathan-downs Aug 3, 2023
09ea293
internal/event_logs: schema definition update
nathan-downs Aug 4, 2023
d3e14cc
Merge remote-tracking branch 'origin/nd/fix-ping-query-performance' i…
nathan-downs Aug 4, 2023
ad282b7
internal/event_logs: schema definition update
nathan-downs Aug 4, 2023
0ea51e2
internal/event_logs: bazel update
nathan-downs Aug 4, 2023
8538683
internal/event_logs: manual lint fixes
nathan-downs Aug 4, 2023
78c9018
internal/event_logs: manual lint fixes #2
nathan-downs Aug 4, 2023
d0bb130
internal/event_logs: revert lint breaking commit
nathan-downs Aug 4, 2023
ebd34c4
internal/event_logs: backcompat test drift fix
nathan-downs Aug 4, 2023
98a9bee
internal/event_logs: update name index to lower
nathan-downs Aug 4, 2023
c7b5ac1
internal/event_logs: event log indexs
nathan-downs Aug 4, 2023
adc6f06
internal/event_logs: remove lower index
nathan-downs Aug 4, 2023
0105f13
Merge branch 'main' into nd/fix-ping-query-performance
nathan-downs Aug 4, 2023
f5b43f9
Update down.sql
nathan-downs Aug 4, 2023
bc8be7b
Update event_logs.go
nathan-downs Aug 4, 2023
631df5b
internal/event_logs: add GIN index
nathan-downs Aug 4, 2023
494a448
internal/event_logs: add GIN index
nathan-downs Aug 7, 2023
3012be9
internal/event_logs: query efficiency changes
nathan-downs Aug 8, 2023
487f44b
internal/event_logs: sql logic and lint fixes
nathan-downs Aug 8, 2023
425a67a
Merge branch 'main' into nd/fix-ping-query-performance
nathan-downs Aug 8, 2023
474e301
internal/event_logs: add lookup fuctions
nathan-downs Aug 9, 2023
a62bc06
internal/event_logs: refactor cody usage
nathan-downs Aug 9, 2023
e0fe148
internal/event_logs: revert deletion
nathan-downs Aug 9, 2023
80dcbfa
Merge branch 'main' into nd/fix-ping-query-performance
nathan-downs Aug 9, 2023
89dd5f1
internal/event_logs: lint fixes
nathan-downs Aug 9, 2023
30b4c34
internal/event_logs: lint fixes
nathan-downs Aug 9, 2023
db2d622
Merge branch 'main' into nd/fix-ping-query-performance
nathan-downs Aug 9, 2023
1d4105a
internal/event_logs: lint fixes
nathan-downs Aug 9, 2023
ec866ed
internal/event_logs: lint fixes
nathan-downs Aug 9, 2023
a1b64d1
internal/event_logs: lint fixes
nathan-downs Aug 9, 2023
45810ac
internal/event_logs: lint fixes
nathan-downs Aug 9, 2023
ae25215
internal/event_logs: typo fixes
nathan-downs Aug 9, 2023
83f7062
internal/event_logs: bazel test fixes
nathan-downs Aug 9, 2023
1e3333a
internal/event_logs: bazel test fixes
nathan-downs Aug 9, 2023
2e94fe7
internal/event_logs: backward compatibility fixes
nathan-downs Aug 9, 2023
0836a0b
internal/event_logs: lint format fix
nathan-downs Aug 9, 2023
bd2a187
Merge branch 'main' into nd/fix-ping-query-performance
nathan-downs Aug 9, 2023
e582b18
internal/event_logs: make functions idempotent
nathan-downs Aug 9, 2023
9bafae6
Merge branch 'main' into nd/fix-ping-query-performance
nathan-downs Aug 10, 2023
0be3cb5
internal/event_logs: optimize ping cte
nathan-downs Aug 3, 2023
0f4a5d2
internal/event_logs: event_logs indexing
nathan-downs Aug 3, 2023
1aa5318
internal/event_logs: sg lint
nathan-downs Aug 3, 2023
fed4db6
internal/event_logs: sg lint fix
nathan-downs Aug 3, 2023
de43253
internal/event_logs: bazel configure
nathan-downs Aug 3, 2023
fe2528b
Revert "internal/event_logs: bazel configure"
nathan-downs Aug 3, 2023
708eb7e
internal/event_logs: schema definition update
nathan-downs Aug 4, 2023
a1049b4
internal/event_logs: schema definition update
nathan-downs Aug 4, 2023
74dd672
internal/event_logs: bazel update
nathan-downs Aug 4, 2023
fb46682
internal/event_logs: manual lint fixes
nathan-downs Aug 4, 2023
d16451e
internal/event_logs: manual lint fixes #2
nathan-downs Aug 4, 2023
ed8e9a4
internal/event_logs: revert lint breaking commit
nathan-downs Aug 4, 2023
423b1e6
internal/event_logs: backcompat test drift fix
nathan-downs Aug 4, 2023
2c5e61d
internal/event_logs: update name index to lower
nathan-downs Aug 4, 2023
127af73
internal/event_logs: event log indexs
nathan-downs Aug 4, 2023
d3c1db2
internal/event_logs: remove lower index
nathan-downs Aug 4, 2023
d40d1bf
Update down.sql
nathan-downs Aug 4, 2023
0d52fbb
Update event_logs.go
nathan-downs Aug 4, 2023
2855d83
internal/event_logs: add GIN index
nathan-downs Aug 4, 2023
91b9bea
internal/event_logs: add GIN index
nathan-downs Aug 7, 2023
2e90319
internal/event_logs: query efficiency changes
nathan-downs Aug 8, 2023
e197a41
internal/event_logs: sql logic and lint fixes
nathan-downs Aug 8, 2023
9fb60be
internal/event_logs: add lookup fuctions
nathan-downs Aug 9, 2023
e6990fb
internal/event_logs: refactor cody usage
nathan-downs Aug 9, 2023
034f844
internal/event_logs: revert deletion
nathan-downs Aug 9, 2023
a70cab5
internal/event_logs: lint fixes
nathan-downs Aug 9, 2023
59d0788
internal/event_logs: lint fixes
nathan-downs Aug 9, 2023
370f2a8
internal/event_logs: lint fixes
nathan-downs Aug 9, 2023
da85d83
internal/event_logs: lint fixes
nathan-downs Aug 9, 2023
8a02a4b
internal/event_logs: lint fixes
nathan-downs Aug 9, 2023
c982b5c
internal/event_logs: lint fixes
nathan-downs Aug 9, 2023
6dd80b2
internal/event_logs: typo fixes
nathan-downs Aug 9, 2023
1ec016e
internal/event_logs: bazel test fixes
nathan-downs Aug 9, 2023
ee134b0
internal/event_logs: bazel test fixes
nathan-downs Aug 9, 2023
a2328b5
internal/event_logs: backward compatibility fixes
nathan-downs Aug 9, 2023
210c0a1
internal/event_logs: lint format fix
nathan-downs Aug 9, 2023
f99d211
internal/event_logs: make functions idempotent
nathan-downs Aug 9, 2023
893afde
internal/event_logs: remove gin index
nathan-downs Aug 10, 2023
3005d9e
WIP commit
nathan-downs Aug 10, 2023
dc940c3
internal/event_logs: update event_logs_test
nathan-downs Aug 10, 2023
50bba65
internal/event_logs: remove gin index
nathan-downs Aug 10, 2023
e924cc0
Merge branch 'main' into nd/fix-ping-query-performance
nathan-downs Aug 10, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 13 additions & 56 deletions internal/database/event_logs.go
Original file line number Diff line number Diff line change
Expand Up @@ -1574,27 +1574,11 @@ func (l *eventLogStore) aggregatedSearchEvents(ctx context.Context, queryString
return events, nil
}

// List of events that don't meet the criteria of "active" usage of Cody.
var nonActiveCodyEvents = []string{
"CodyVSCodeExtension:CodySavedLogin:executed",
"web:codyChat:tryOnPublicCode",
"web:codyEditorWidget:viewed",
"web:codyChat:pageViewed",
"CodyConfigurationPageViewed",
"ClickedOnTryCodySearchCTA",
"TryCodyWebOnboardingDisplayed",
"AboutGetCodyPopover",
"TryCodyWeb",
"CodySurveyToastViewed",
"SiteAdminCodyPageViewed",
"CodyUninstalled",
"SpeakToACodyEngineerCTA",
}

var aggregatedCodyUsageEventsQuery = `
WITH events AS (
WITH
events AS (
SELECT
name AS key,
name,
` + aggregatedUserIDQueryFragment + ` AS user_id,
` + makeDateTruncExpression("month", "timestamp") + ` as month,
` + makeDateTruncExpression("week", "timestamp") + ` as week,
Expand All @@ -1604,36 +1588,11 @@ WITH events AS (
` + makeDateTruncExpression("day", "%s::timestamp") + ` as current_day
FROM event_logs
WHERE
timestamp >= ` + makeDateTruncExpression("month", "%s::timestamp") + `
AND lower(name) like '%%cody%%'
AND name not like '%%CTA%%'
AND name not like '%%Cta%%'
AND (name NOT IN ('` + strings.Join(nonActiveCodyEvents, "','") + `'))
),
code_generation_keys AS (
SELECT * FROM unnest(ARRAY[
'CodyVSCodeExtension:recipe:rewrite-to-functional:executed',
'CodyVSCodeExtension:recipe:improve-variable-names:executed',
'CodyVSCodeExtension:recipe:replace:executed',
'CodyVSCodeExtension:recipe:generate-docstring:executed',
'CodyVSCodeExtension:recipe:generate-unit-test:executed',
'CodyVSCodeExtension:recipe:rewrite-functional:executed',
'CodyVSCodeExtension:recipe:code-refactor:executed',
'CodyVSCodeExtension:recipe:fixup:executed',
'CodyVSCodeExtension:recipe:translate-to-language:executed'
]) AS key
),
explanation_keys AS (
SELECT * FROM unnest(ARRAY[
'CodyVSCodeExtension:recipe:explain-code-high-level:executed',
'CodyVSCodeExtension:recipe:explain-code-detailed:executed',
'CodyVSCodeExtension:recipe:find-code-smells:executed',
'CodyVSCodeExtension:recipe:git-history:executed',
'CodyVSCodeExtension:recipe:rate-code:executed'
]) AS key
timestamp >= %s::timestamp - '1 month'::interval
AND iscodyactiveevent(name)
)
SELECT
key,
name,
current_month,
current_week,
current_day,
Expand All @@ -1643,25 +1602,23 @@ SELECT
COUNT(DISTINCT user_id) FILTER (WHERE month = current_month) AS uniques_month,
COUNT(DISTINCT user_id) FILTER (WHERE week = current_week) AS uniques_week,
COUNT(DISTINCT user_id) FILTER (WHERE day = current_day) AS uniques_day,
SUM(case when month = current_month and key in
(SELECT * FROM code_generation_keys)
SUM(case when month = current_month and iscodygenerationevent(name)
then 1 else 0 end) as code_generation_month,
SUM(case when week = current_week and key in
(SELECT * FROM explanation_keys)
SUM(case when week = current_week and iscodygenerationevent(name)
then 1 else 0 end) as code_generation_week,
SUM(case when day = current_day and key in (SELECT * FROM code_generation_keys)
SUM(case when day = current_day and iscodygenerationevent(name)
then 1 else 0 end) as code_generation_day,
SUM(case when month = current_month and key in (SELECT * FROM explanation_keys)
SUM(case when month = current_month and iscodyexplanationevent(name)
then 1 else 0 end) as explanation_month,
SUM(case when week = current_week and key in (SELECT * FROM explanation_keys)
SUM(case when week = current_week and iscodyexplanationevent(name)
then 1 else 0 end) as explanation_week,
SUM(case when day = current_day and key in (SELECT * FROM explanation_keys)
SUM(case when day = current_day and iscodyexplanationevent(name)
then 1 else 0 end) as explanation_day,
0 as invalid_month,
0 as invalid_week,
0 as invalid_day
FROM events
GROUP BY key, current_month, current_week, current_day
GROUP BY name, current_month, current_week, current_day
`

var searchLatencyEventNames = []string{
Expand Down
61 changes: 36 additions & 25 deletions internal/database/event_logs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1317,7 +1317,7 @@ func TestEventLogs_AggregatedCodyEvents(t *testing.T) {

codyEventNames := []string{"CodyVSCodeExtension:recipe:rewrite-to-functional:executed",
"CodyVSCodeExtension:recipe:explain-code-high-level:executed"}
users := []uint32{1, 2}
users := []uint32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}

days := []time.Time{
now, // Today
Expand All @@ -1332,7 +1332,7 @@ func TestEventLogs_AggregatedCodyEvents(t *testing.T) {
for _, user := range users {
for _, name := range codyEventNames {
for _, day := range days {
for i := 0; i < 25; i++ {
for i := 0; i < 250; i++ {
e := &Event{
UserID: user,
Name: name,
Expand Down Expand Up @@ -1361,35 +1361,46 @@ func TestEventLogs_AggregatedCodyEvents(t *testing.T) {

expectedEvents := []types.CodyAggregatedEvent{
{
Name: "CodyVSCodeExtension:recipe:explain-code-high-level:executed",
Month: time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, time.UTC),
Week: now.Truncate(time.Hour * 24).Add(-time.Hour * 24 * 5),
Day: now.Truncate(time.Hour * 24),
TotalMonth: 200,
TotalWeek: 150,
TotalDay: 50,
UniquesMonth: 2,
UniquesWeek: 2,
UniquesDay: 2,
CodeGenerationWeek: 150,
CodeGenerationDay: 0,
ExplanationMonth: 200,
ExplanationWeek: 150,
ExplanationDay: 50,
Name: "CodyVSCodeExtension:recipe:explain-code-high-level:executed",
Month: time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, time.UTC),
Week: now.Truncate(time.Hour * 24).Add(-time.Hour * 24 * 5),
Day: now.Truncate(time.Hour * 24),
TotalMonth: 20000,
TotalWeek: 15000,
TotalDay: 5000,
UniquesMonth: 20,
UniquesWeek: 20,
UniquesDay: 20,
CodeGenerationMonth: 0,
CodeGenerationWeek: 0,
CodeGenerationDay: 0,
ExplanationMonth: 20000,
ExplanationWeek: 15000,
ExplanationDay: 5000,
InvalidMonth: 0,
InvalidWeek: 0,
InvalidDay: 0,
},
{
Name: "CodyVSCodeExtension:recipe:rewrite-to-functional:executed",
Month: time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, time.UTC),
Week: now.Truncate(time.Hour * 24).Add(-time.Hour * 24 * 5),
Day: now.Truncate(time.Hour * 24),
TotalMonth: 200,
TotalWeek: 150,
TotalDay: 50,
UniquesMonth: 2,
UniquesWeek: 2,
UniquesDay: 2,
CodeGenerationMonth: 200,
CodeGenerationDay: 50,
TotalMonth: 20000,
TotalWeek: 15000,
TotalDay: 5000,
UniquesMonth: 20,
UniquesWeek: 20,
UniquesDay: 20,
CodeGenerationMonth: 20000,
CodeGenerationWeek: 15000,
CodeGenerationDay: 5000,
ExplanationMonth: 0,
ExplanationWeek: 0,
ExplanationDay: 0,
InvalidMonth: 0,
InvalidWeek: 0,
InvalidDay: 0,
},
}

Expand Down
42 changes: 42 additions & 0 deletions internal/database/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,18 @@
"Name": "invalidate_session_for_userid_on_password_change",
"Definition": "CREATE OR REPLACE FUNCTION public.invalidate_session_for_userid_on_password_change()\n RETURNS trigger\n LANGUAGE plpgsql\nAS $function$\n BEGIN\n IF OLD.passwd != NEW.passwd THEN\n NEW.invalidated_sessions_at = now() + (1 * interval '1 second');\n RETURN NEW;\n END IF;\n RETURN NEW;\n END;\n$function$\n"
},
{
"Name": "iscodyactiveevent",
"Definition": "CREATE OR REPLACE FUNCTION public.iscodyactiveevent(name text)\n RETURNS boolean\n LANGUAGE plpgsql\n IMMUTABLE\nAS $function$\nBEGIN\n RETURN\n (name LIKE '%%cody%%' OR name LIKE '%%Cody%%')\n AND name NOT IN (\n '%completion:started%',\n '%completion:suggested%',\n '%cta%',\n '%Cta%',\n 'CodyVSCodeExtension:CodySavedLogin:executed',\n 'web:codyChat:tryOnPublicCode',\n 'web:codyEditorWidget:viewed',\n 'web:codyChat:pageViewed',\n 'CodyConfigurationPageViewed',\n 'ClickedOnTryCodySearchCTA',\n 'TryCodyWebOnboardingDisplayed',\n 'AboutGetCodyPopover',\n 'TryCodyWeb',\n 'CodySurveyToastViewed',\n 'SiteAdminCodyPageViewed',\n 'CodyUninstalled',\n 'SpeakToACodyEngineerCTA'\n );\nEND;\n$function$\n"
},
{
"Name": "iscodyexplanationevent",
"Definition": "CREATE OR REPLACE FUNCTION public.iscodyexplanationevent(name text)\n RETURNS boolean\n LANGUAGE plpgsql\n IMMUTABLE\nAS $function$\nBEGIN\n RETURN name = ANY(ARRAY[\n 'CodyVSCodeExtension:recipe:explain-code-high-level:executed',\n 'CodyVSCodeExtension:recipe:explain-code-detailed:executed',\n 'CodyVSCodeExtension:recipe:find-code-smells:executed',\n 'CodyVSCodeExtension:recipe:git-history:executed',\n 'CodyVSCodeExtension:recipe:rate-code:executed'\n ]);\nEND;\n$function$\n"
},
{
"Name": "iscodygenerationevent",
"Definition": "CREATE OR REPLACE FUNCTION public.iscodygenerationevent(name text)\n RETURNS boolean\n LANGUAGE plpgsql\n IMMUTABLE\nAS $function$\nBEGIN\n RETURN name = ANY(ARRAY[\n 'CodyVSCodeExtension:recipe:rewrite-to-functional:executed',\n 'CodyVSCodeExtension:recipe:improve-variable-names:executed',\n 'CodyVSCodeExtension:recipe:replace:executed',\n 'CodyVSCodeExtension:recipe:generate-docstring:executed',\n 'CodyVSCodeExtension:recipe:generate-unit-test:executed',\n 'CodyVSCodeExtension:recipe:rewrite-functional:executed',\n 'CodyVSCodeExtension:recipe:code-refactor:executed',\n 'CodyVSCodeExtension:recipe:fixup:executed',\n\t'CodyVSCodeExtension:recipe:translate-to-language:executed'\n ]);\nEND;\n$function$\n"
},
{
"Name": "merge_audit_log_transitions",
"Definition": "CREATE OR REPLACE FUNCTION public.merge_audit_log_transitions(internal hstore, arrayhstore hstore[])\n RETURNS hstore\n LANGUAGE plpgsql\n IMMUTABLE\nAS $function$\n DECLARE\n trans hstore;\n BEGIN\n FOREACH trans IN ARRAY arrayhstore\n LOOP\n internal := internal || hstore(trans-\u003e'column', trans-\u003e'new');\n END LOOP;\n\n RETURN internal;\n END;\n$function$\n"
Expand Down Expand Up @@ -10595,6 +10607,36 @@
"ConstraintType": "",
"ConstraintDefinition": ""
},
{
"Name": "event_logs_name_is_cody_active_event",
"IsPrimaryKey": false,
"IsUnique": false,
"IsExclusion": false,
"IsDeferrable": false,
"IndexDefinition": "CREATE INDEX event_logs_name_is_cody_active_event ON event_logs USING btree (iscodyactiveevent(name))",
"ConstraintType": "",
"ConstraintDefinition": ""
},
{
"Name": "event_logs_name_is_cody_explanation_event",
"IsPrimaryKey": false,
"IsUnique": false,
"IsExclusion": false,
"IsDeferrable": false,
"IndexDefinition": "CREATE INDEX event_logs_name_is_cody_explanation_event ON event_logs USING btree (iscodyexplanationevent(name))",
"ConstraintType": "",
"ConstraintDefinition": ""
},
{
"Name": "event_logs_name_is_cody_generation_event",
"IsPrimaryKey": false,
"IsUnique": false,
"IsExclusion": false,
"IsDeferrable": false,
"IndexDefinition": "CREATE INDEX event_logs_name_is_cody_generation_event ON event_logs USING btree (iscodygenerationevent(name))",
"ConstraintType": "",
"ConstraintDefinition": ""
},
{
"Name": "event_logs_name_timestamp",
"IsPrimaryKey": false,
Expand Down
3 changes: 3 additions & 0 deletions internal/database/schema.md
Original file line number Diff line number Diff line change
Expand Up @@ -1379,6 +1379,9 @@ Referenced by:
Indexes:
"event_logs_pkey" PRIMARY KEY, btree (id)
"event_logs_anonymous_user_id" btree (anonymous_user_id)
"event_logs_name_is_cody_active_event" btree (iscodyactiveevent(name))
"event_logs_name_is_cody_explanation_event" btree (iscodyexplanationevent(name))
"event_logs_name_is_cody_generation_event" btree (iscodygenerationevent(name))
"event_logs_name_timestamp" btree (name, "timestamp" DESC)
"event_logs_source" btree (source)
"event_logs_timestamp" btree ("timestamp")
Expand Down
3 changes: 3 additions & 0 deletions migrations/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -1114,6 +1114,9 @@ go_library(
"frontend/1690323910_add_chunks_excluded_embeddings_stats/down.sql",
"frontend/1690323910_add_chunks_excluded_embeddings_stats/metadata.yaml",
"frontend/1690323910_add_chunks_excluded_embeddings_stats/up.sql",
"frontend/1691043630_event_logs_indexing/down.sql",
"frontend/1691043630_event_logs_indexing/metadata.yaml",
"frontend/1691043630_event_logs_indexing/up.sql",
],
importpath = "github.com/sourcegraph/sourcegraph/migrations",
visibility = ["//visibility:public"],
Expand Down
11 changes: 11 additions & 0 deletions migrations/frontend/1691043630_event_logs_indexing/down.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
DROP INDEX IF EXISTS event_logs_name_is_cody_explanation_event;

DROP INDEX IF EXISTS event_logs_name_is_cody_generation_event;

DROP INDEX IF EXISTS event_logs_name_is_cody_active_event;

DROP FUNCTION IF EXISTS isCodyGenerationEvent(name text);

DROP FUNCTION IF EXISTS isCodyExplanationEvent(name text);

DROP FUNCTION IF EXISTS isCodyActiveEvent(name text);
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
name: event_logs_indexing
parents: [1690460411, 1690323910]
65 changes: 65 additions & 0 deletions migrations/frontend/1691043630_event_logs_indexing/up.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
CREATE OR REPLACE FUNCTION iscodyactiveevent(name text) RETURNS boolean
LANGUAGE plpgsql IMMUTABLE
AS $$
BEGIN
RETURN
(name LIKE '%%cody%%' OR name LIKE '%%Cody%%')
AND name NOT IN (
'%completion:started%',
'%completion:suggested%',
'%cta%',
'%Cta%',
'CodyVSCodeExtension:CodySavedLogin:executed',
'web:codyChat:tryOnPublicCode',
'web:codyEditorWidget:viewed',
'web:codyChat:pageViewed',
'CodyConfigurationPageViewed',
'ClickedOnTryCodySearchCTA',
'TryCodyWebOnboardingDisplayed',
'AboutGetCodyPopover',
'TryCodyWeb',
'CodySurveyToastViewed',
'SiteAdminCodyPageViewed',
'CodyUninstalled',
'SpeakToACodyEngineerCTA'
);
END;
$$;

CREATE OR REPLACE FUNCTION iscodyexplanationevent(name text) RETURNS boolean
LANGUAGE plpgsql IMMUTABLE
AS $$
BEGIN
RETURN name = ANY(ARRAY[
'CodyVSCodeExtension:recipe:explain-code-high-level:executed',
'CodyVSCodeExtension:recipe:explain-code-detailed:executed',
'CodyVSCodeExtension:recipe:find-code-smells:executed',
'CodyVSCodeExtension:recipe:git-history:executed',
'CodyVSCodeExtension:recipe:rate-code:executed'
]);
END;
$$;

CREATE OR REPLACE FUNCTION iscodygenerationevent(name text) RETURNS boolean
LANGUAGE plpgsql IMMUTABLE
AS $$
BEGIN
RETURN name = ANY(ARRAY[
'CodyVSCodeExtension:recipe:rewrite-to-functional:executed',
'CodyVSCodeExtension:recipe:improve-variable-names:executed',
'CodyVSCodeExtension:recipe:replace:executed',
'CodyVSCodeExtension:recipe:generate-docstring:executed',
'CodyVSCodeExtension:recipe:generate-unit-test:executed',
'CodyVSCodeExtension:recipe:rewrite-functional:executed',
'CodyVSCodeExtension:recipe:code-refactor:executed',
'CodyVSCodeExtension:recipe:fixup:executed',
'CodyVSCodeExtension:recipe:translate-to-language:executed'
Comment on lines +48 to +56
Copy link
Member

@camdencheek camdencheek Aug 9, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How static are these lists? will they need to be updated frequently? Because every time we update, it will require a migration and a re-index, which will be pretty expensive for the event logs table.

Copy link
Contributor Author

@nathan-downs nathan-downs Aug 9, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It depends, we may have to modify these to add logic for categorizing events that don't follow the specific active usage patterns. More than likely the isactivecodyevent(text)

]);
END;
$$;

CREATE INDEX IF NOT EXISTS event_logs_name_is_cody_explanation_event ON event_logs USING btree (iscodyexplanationevent(name));

CREATE INDEX IF NOT EXISTS event_logs_name_is_cody_generation_event ON event_logs USING btree (iscodygenerationevent(name));

CREATE INDEX IF NOT EXISTS event_logs_name_is_cody_active_event ON event_logs USING btree (iscodyactiveevent(name));
Loading