From afe6b9b1453f6845a0987c7b059b9a22b499c6e9 Mon Sep 17 00:00:00 2001 From: Openreplay Date: Tue, 8 Mar 2022 00:52:43 +0000 Subject: [PATCH 01/22] core relise changes --- scripts/helmcharts/init.sh | 2 +- scripts/helmcharts/openreplay/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/alerts/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/assets/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/chalice/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/db/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/ender/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/http/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/integrations/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/sink/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/storage/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/utilities/Chart.yaml | 2 +- scripts/helmcharts/vars.yaml | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/scripts/helmcharts/init.sh b/scripts/helmcharts/init.sh index 6e4f70613..2df3b8450 100644 --- a/scripts/helmcharts/init.sh +++ b/scripts/helmcharts/init.sh @@ -15,7 +15,7 @@ fatal() exit 1 } -version="v1.5.3" +version="v1.5.2" usr=`whoami` # Installing k3s diff --git a/scripts/helmcharts/openreplay/Chart.yaml b/scripts/helmcharts/openreplay/Chart.yaml index f0b5ef469..e621e543d 100644 --- a/scripts/helmcharts/openreplay/Chart.yaml +++ b/scripts/helmcharts/openreplay/Chart.yaml @@ -22,4 +22,4 @@ version: 0.1.0 # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. # Ref: https://github.com/helm/helm/issues/7858#issuecomment-608114589 -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml b/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml index b39fb2e99..0bfe8b4bc 100644 --- a/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/assets/Chart.yaml b/scripts/helmcharts/openreplay/charts/assets/Chart.yaml index b1be7b726..9b8c32623 100644 --- a/scripts/helmcharts/openreplay/charts/assets/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/assets/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml b/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml index 755fb8648..1d0441f7e 100644 --- a/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/db/Chart.yaml b/scripts/helmcharts/openreplay/charts/db/Chart.yaml index 796e1ef76..0aa5f39e3 100644 --- a/scripts/helmcharts/openreplay/charts/db/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/db/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/ender/Chart.yaml b/scripts/helmcharts/openreplay/charts/ender/Chart.yaml index 571ef34c0..8a7ce610e 100644 --- a/scripts/helmcharts/openreplay/charts/ender/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/ender/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/http/Chart.yaml b/scripts/helmcharts/openreplay/charts/http/Chart.yaml index 166b3e22d..5422d1f3d 100644 --- a/scripts/helmcharts/openreplay/charts/http/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/http/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml b/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml index 710f7ffe5..e8fc92887 100644 --- a/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml b/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml index b0baf2637..2c473b4b4 100644 --- a/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/sink/Chart.yaml b/scripts/helmcharts/openreplay/charts/sink/Chart.yaml index fea7646a4..7ece0a5bf 100644 --- a/scripts/helmcharts/openreplay/charts/sink/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/sink/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/storage/Chart.yaml b/scripts/helmcharts/openreplay/charts/storage/Chart.yaml index 879a077c6..9e1c06d8c 100644 --- a/scripts/helmcharts/openreplay/charts/storage/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/storage/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml b/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml index e432835d0..acc73d941 100644 --- a/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/vars.yaml b/scripts/helmcharts/vars.yaml index 25d6a67d6..a09b0647d 100644 --- a/scripts/helmcharts/vars.yaml +++ b/scripts/helmcharts/vars.yaml @@ -1,4 +1,4 @@ -fromVersion: "v1.5.3" +fromVersion: "v1.5.2" # Databases specific variables postgresql: &postgres # For generating passwords From 5247d4939009eae9db012c7d113f5a582a21b72e Mon Sep 17 00:00:00 2001 From: Openreplay Date: Tue, 8 Mar 2022 00:52:43 +0000 Subject: [PATCH 02/22] chore(release): v1.5.3 --- scripts/helmcharts/init.sh | 2 +- scripts/helmcharts/openreplay/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/alerts/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/assets/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/chalice/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/db/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/ender/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/http/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/integrations/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/sink/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/storage/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/utilities/Chart.yaml | 2 +- scripts/helmcharts/vars.yaml | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/scripts/helmcharts/init.sh b/scripts/helmcharts/init.sh index 6e4f70613..2df3b8450 100644 --- a/scripts/helmcharts/init.sh +++ b/scripts/helmcharts/init.sh @@ -15,7 +15,7 @@ fatal() exit 1 } -version="v1.5.3" +version="v1.5.2" usr=`whoami` # Installing k3s diff --git a/scripts/helmcharts/openreplay/Chart.yaml b/scripts/helmcharts/openreplay/Chart.yaml index f0b5ef469..e621e543d 100644 --- a/scripts/helmcharts/openreplay/Chart.yaml +++ b/scripts/helmcharts/openreplay/Chart.yaml @@ -22,4 +22,4 @@ version: 0.1.0 # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. # Ref: https://github.com/helm/helm/issues/7858#issuecomment-608114589 -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml b/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml index b39fb2e99..0bfe8b4bc 100644 --- a/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/assets/Chart.yaml b/scripts/helmcharts/openreplay/charts/assets/Chart.yaml index b1be7b726..9b8c32623 100644 --- a/scripts/helmcharts/openreplay/charts/assets/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/assets/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml b/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml index 755fb8648..1d0441f7e 100644 --- a/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/db/Chart.yaml b/scripts/helmcharts/openreplay/charts/db/Chart.yaml index 796e1ef76..0aa5f39e3 100644 --- a/scripts/helmcharts/openreplay/charts/db/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/db/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/ender/Chart.yaml b/scripts/helmcharts/openreplay/charts/ender/Chart.yaml index 571ef34c0..8a7ce610e 100644 --- a/scripts/helmcharts/openreplay/charts/ender/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/ender/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/http/Chart.yaml b/scripts/helmcharts/openreplay/charts/http/Chart.yaml index 166b3e22d..5422d1f3d 100644 --- a/scripts/helmcharts/openreplay/charts/http/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/http/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml b/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml index 710f7ffe5..e8fc92887 100644 --- a/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml b/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml index b0baf2637..2c473b4b4 100644 --- a/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/sink/Chart.yaml b/scripts/helmcharts/openreplay/charts/sink/Chart.yaml index fea7646a4..7ece0a5bf 100644 --- a/scripts/helmcharts/openreplay/charts/sink/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/sink/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/storage/Chart.yaml b/scripts/helmcharts/openreplay/charts/storage/Chart.yaml index 879a077c6..9e1c06d8c 100644 --- a/scripts/helmcharts/openreplay/charts/storage/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/storage/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml b/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml index e432835d0..acc73d941 100644 --- a/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/vars.yaml b/scripts/helmcharts/vars.yaml index 25d6a67d6..a09b0647d 100644 --- a/scripts/helmcharts/vars.yaml +++ b/scripts/helmcharts/vars.yaml @@ -1,4 +1,4 @@ -fromVersion: "v1.5.3" +fromVersion: "v1.5.2" # Databases specific variables postgresql: &postgres # For generating passwords From 53e5a78308de2e2b9b2eddc7c8bb36bd975957cc Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Tue, 8 Mar 2022 17:45:35 +0100 Subject: [PATCH 03/22] feat(api): support old funnels --- api/chalicelib/core/funnels.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/api/chalicelib/core/funnels.py b/api/chalicelib/core/funnels.py index 6e4553134..cdd6cec20 100644 --- a/api/chalicelib/core/funnels.py +++ b/api/chalicelib/core/funnels.py @@ -19,6 +19,12 @@ ALLOW_UPDATE_FOR = ["name", "filter"] # events.event_type.VIEW_IOS.ui_type, events.event_type.CUSTOM_IOS.ui_type, ] # return [s for s in stages if s["type"] in ALLOW_TYPES and s.get("value") is not None] +def __transform_old_funnels(events): + for e in events: + if not isinstance(e.get("value"), list): + e["value"] = [e["value"]] + return events + def create(project_id, user_id, name, filter: schemas.FunnelSearchPayloadSchema, is_public): helper.delete_keys_from_dict(filter, REMOVE_KEYS) @@ -97,6 +103,9 @@ def get_by_user(project_id, user_id, range_value=None, start_date=None, end_date row["createdAt"] = TimeUTC.datetime_to_timestamp(row["createdAt"]) if details: # row["filter"]["events"] = filter_stages(row["filter"]["events"]) + if row.get("filter") is not None and row["filter"].get("events") is not None: + row["filter"]["events"] = __transform_old_funnels(row["filter"]["events"]) + get_start_end_time(filter_d=row["filter"], range_value=range_value, start_date=start_date, end_date=end_date) counts = sessions.search2_pg(data=schemas.SessionsSearchPayloadSchema.parse_obj(row["filter"]), @@ -248,7 +257,8 @@ def get(funnel_id, project_id, user_id, flatten=True): f = helper.dict_to_camel_case(cur.fetchone()) if f is None: return None - + if f.get("filter") is not None and f["filter"].get("events") is not None: + f["filter"]["events"] = __transform_old_funnels(f["filter"]["events"]) f["createdAt"] = TimeUTC.datetime_to_timestamp(f["createdAt"]) # f["filter"]["events"] = filter_stages(stages=f["filter"]["events"]) if flatten: From b2f3455ebd3a4a518b1311c8a98f71693d1e7a3c Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Tue, 8 Mar 2022 18:23:53 +0100 Subject: [PATCH 04/22] change(ui) - changed table options --- frontend/app/constants/filterOptions.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/app/constants/filterOptions.js b/frontend/app/constants/filterOptions.js index 03df3ab51..7f6a12e03 100644 --- a/frontend/app/constants/filterOptions.js +++ b/frontend/app/constants/filterOptions.js @@ -74,10 +74,10 @@ export const metricOf = [ { text: 'Session Count', value: 'sessionCount', type: 'timeseries' }, { text: 'Users', value: FilterKey.USERID, type: 'table' }, { text: 'Issues', value: FilterKey.ISSUE, type: 'table' }, - { text: 'Browser', value: FilterKey.USER_BROWSER, type: 'table' }, - { text: 'Device', value: FilterKey.USER_DEVICE, type: 'table' }, - { text: 'Country', value: FilterKey.USER_COUNTRY, type: 'table' }, - { text: 'URL', value: FilterKey.LOCATION, type: 'table' }, + { text: 'Browsers', value: FilterKey.USER_BROWSER, type: 'table' }, + { text: 'Devices', value: FilterKey.USER_DEVICE, type: 'table' }, + { text: 'Countries', value: FilterKey.USER_COUNTRY, type: 'table' }, + { text: 'URLs', value: FilterKey.LOCATION, type: 'table' }, ] export const methodOptions = [ From 8b6066fc36e9f29eaa51f200b57c9d97e6d51aeb Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Tue, 8 Mar 2022 18:44:40 +0100 Subject: [PATCH 05/22] feat(api): funnels support missing events --- api/chalicelib/core/significance.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/chalicelib/core/significance.py b/api/chalicelib/core/significance.py index 67b00c74a..ab242d7e8 100644 --- a/api/chalicelib/core/significance.py +++ b/api/chalicelib/core/significance.py @@ -545,7 +545,7 @@ def get_issues(stages, rows, first_stage=None, last_stage=None, drop_only=False) @dev.timed def get_top_insights(filter_d, project_id): output = [] - stages = filter_d["events"] + stages = filter_d.get("events", []) # TODO: handle 1 stage alone if len(stages) == 0: print("no stages found") From a289223225d023c3e31dff00a970cddc7b4954d5 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Tue, 8 Mar 2022 19:23:02 +0100 Subject: [PATCH 06/22] feat(api): autocomplete for graphql --- api/routers/core.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/api/routers/core.py b/api/routers/core.py index 07af1fb45..73ae5fc20 100644 --- a/api/routers/core.py +++ b/api/routers/core.py @@ -103,13 +103,16 @@ def comment_assignment(projectId: int, sessionId: int, issueId: str, data: schem @app.get('/{projectId}/events/search', tags=["events"]) def events_search(projectId: int, q: str, type: Union[schemas.FilterType, schemas.EventType, - schemas.PerformanceEventType, schemas.FetchFilterType] = None, + schemas.PerformanceEventType, schemas.FetchFilterType, + schemas.GraphqlFilterType] = None, key: str = None, source: str = None, context: schemas.CurrentContext = Depends(OR_context)): if len(q) == 0: return {"data": []} if type in [schemas.FetchFilterType._url]: type = schemas.EventType.request + elif type in [schemas.GraphqlFilterType._name]: + type = schemas.EventType.graphql elif isinstance(type, schemas.PerformanceEventType): if type in [schemas.PerformanceEventType.location_dom_complete, schemas.PerformanceEventType.location_largest_contentful_paint_time, From 9399a7343fee5af08977945969d36fa09ee37f0f Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Tue, 8 Mar 2022 20:15:10 +0100 Subject: [PATCH 07/22] fix(ui) - oss review and fixes --- .../Funnels/FunnelDetails/FunnelDetails.js | 2 +- .../Funnels/FunnelHeader/FunnelHeader.js | 6 +- .../ProjectCodeSnippet/ProjectCodeSnippet.js | 48 ++++++++------- .../ProjectCodeSnippet/ProjectCodeSnippet.js | 59 +++++++++++-------- frontend/app/duck/funnelFilters.js | 2 +- frontend/app/duck/search.js | 1 + frontend/app/duck/site.js | 9 +-- frontend/app/types/filter/filterType.ts | 6 ++ frontend/app/types/filter/newFilter.js | 25 ++++---- 9 files changed, 94 insertions(+), 64 deletions(-) diff --git a/frontend/app/components/Funnels/FunnelDetails/FunnelDetails.js b/frontend/app/components/Funnels/FunnelDetails/FunnelDetails.js index a00ea34e5..48142ef13 100644 --- a/frontend/app/components/Funnels/FunnelDetails/FunnelDetails.js +++ b/frontend/app/components/Funnels/FunnelDetails/FunnelDetails.js @@ -78,7 +78,7 @@ const FunnelDetails = (props) => { const showEmptyMessage = hasNoStages && activeTab === TAB_ISSUES && !loading; return ( -
+
{ } else {} } - const onDateChange = (e) => { + const onDateChange = (e) => { props.applyFilter(e, funnel.funnelId) } const options = funnels.map(({ funnelId, name }) => ({ text: name, value: funnelId })).toJS(); - const selectedFunnel = funnels.filter(i => i.funnelId === parseInt(funnelId)).first() || {}; + const selectedFunnel = funnels.filter(i => i.funnelId === parseInt(funnelId)).first() || {}; return (
@@ -117,5 +117,5 @@ const FunnelHeader = (props) => { } export default connect(state => ({ - funnelFilters: state.getIn([ 'funnels', 'instance', 'filter' ]), + funnelFilters: state.getIn([ 'funnels', 'instance' ]), }), { applyFilter, deleteFunnel, fetch, fetchInsights, fetchIssuesFiltered, fetchSessionsFiltered })(FunnelHeader) diff --git a/frontend/app/components/Onboarding/components/OnboardingTabs/ProjectCodeSnippet/ProjectCodeSnippet.js b/frontend/app/components/Onboarding/components/OnboardingTabs/ProjectCodeSnippet/ProjectCodeSnippet.js index bf0e83791..7002ed604 100644 --- a/frontend/app/components/Onboarding/components/OnboardingTabs/ProjectCodeSnippet/ProjectCodeSnippet.js +++ b/frontend/app/components/Onboarding/components/OnboardingTabs/ProjectCodeSnippet/ProjectCodeSnippet.js @@ -15,32 +15,40 @@ const inputModeOptions = [ { text: 'Obscure all inputs', value: 'hidden' }, ]; -const codeSnippet = ` -`; - +const inputModeOptionsMap = {} +inputModeOptions.forEach((o, i) => inputModeOptionsMap[o.value] = i) const ProjectCodeSnippet = props => { const { site, gdpr } = props; const [changed, setChanged] = useState(false) const [copied, setCopied] = useState(false) + const codeSnippet = ` +`; + const saveGDPR = (value) => { setChanged(true) props.saveGDPR(site.id, GDPR({...value})); diff --git a/frontend/app/components/shared/TrackingCodeModal/ProjectCodeSnippet/ProjectCodeSnippet.js b/frontend/app/components/shared/TrackingCodeModal/ProjectCodeSnippet/ProjectCodeSnippet.js index e269c2cc7..50ca97823 100644 --- a/frontend/app/components/shared/TrackingCodeModal/ProjectCodeSnippet/ProjectCodeSnippet.js +++ b/frontend/app/components/shared/TrackingCodeModal/ProjectCodeSnippet/ProjectCodeSnippet.js @@ -14,25 +14,8 @@ const inputModeOptions = [ { text: 'Obscure all inputs', value: 'hidden' }, ]; -const codeSnippet = ` -`; +const inputModeOptionsMap = {} +inputModeOptions.forEach((o, i) => inputModeOptionsMap[o.value] = i) const ProjectCodeSnippet = props => { @@ -40,6 +23,32 @@ const ProjectCodeSnippet = props => { const [changed, setChanged] = useState(false) const [copied, setCopied] = useState(false) + const codeSnippet = ` +`; + const saveGDPR = (value) => { setChanged(true) props.saveGDPR(site.id, GDPR({...value})); @@ -47,11 +56,11 @@ const ProjectCodeSnippet = props => { const onChangeSelect = (event, { name, value }) => { const { gdpr } = site; - const _gdpr = { ...gdpr.toData() }; + // const _gdpr = { ...gdpr.toData() }; + // props.editGDPR({ [ name ]: value }); + // _gdpr[name] = value; props.editGDPR({ [ name ]: value }); - _gdpr[name] = value; - props.editGDPR({ [ name ]: value }); - saveGDPR(_gdpr) + saveGDPR({ ...gdpr, [ name ]: value }); }; const onChangeOption = (event, { name, checked }) => { @@ -74,8 +83,8 @@ const ProjectCodeSnippet = props => { snippet = snippet.replace('PROJECT_KEY', site.projectKey); } return snippet - .replace('XXX', getOptionValues()) - .replace('HOST', site && site.host); + //.replace('XXX', getOptionValues()) + //.replace('HOST', site && site.host); } const copyHandler = (code) => { diff --git a/frontend/app/duck/funnelFilters.js b/frontend/app/duck/funnelFilters.js index 294ba2039..468887afb 100644 --- a/frontend/app/duck/funnelFilters.js +++ b/frontend/app/duck/funnelFilters.js @@ -114,7 +114,7 @@ const reducer = (state = initialState, action = {}) => { Filter(action.filter) .set('events', state.getIn([ 'appliedFilter', 'events' ])) ) - : state.mergeIn([ 'appliedFilter' ], action.filter); + : state.mergeIn(['instance'], action.filter); case ADD_CUSTOM_FILTER: return state.update('customFilters', vars => vars.set(action.filter, action.value)); case REMOVE_CUSTOM_FILTER: diff --git a/frontend/app/duck/search.js b/frontend/app/duck/search.js index 3d15ae950..cf742e556 100644 --- a/frontend/app/duck/search.js +++ b/frontend/app/duck/search.js @@ -60,6 +60,7 @@ function reducer(state = initialState, action = {}) { case EDIT: return state.mergeIn(['instance'], action.instance); case APPLY: + console.log('APPLY', action.filter); return action.fromUrl ? state.set('instance', Filter(action.filter)) : state.mergeIn(['instance'], action.filter); diff --git a/frontend/app/duck/site.js b/frontend/app/duck/site.js index e5783b147..7e911c477 100644 --- a/frontend/app/duck/site.js +++ b/frontend/app/duck/site.js @@ -43,10 +43,11 @@ const reducer = (state = initialState, action = {}) => { return state.mergeIn([ 'instance', 'gdpr' ], action.data); case SAVE_GDPR_SUCCESS: const gdpr = GDPR(action.data); - return state.update('list', itemInListUpdater({ - [ idKey ] : state.getIn([ 'instance', idKey ]), - gdpr, - })).setIn([ 'instance', 'gdpr' ], gdpr); + return state.setIn([ 'instance', 'gdpr' ], gdpr); + // return state.update('list', itemInListUpdater({ + // [ idKey ] : state.getIn([ 'instance', idKey ]), + // gdpr, + // })).setIn([ 'instance', 'gdpr' ], gdpr); } return state; }; diff --git a/frontend/app/types/filter/filterType.ts b/frontend/app/types/filter/filterType.ts index ccb5156cd..2958f10e2 100644 --- a/frontend/app/types/filter/filterType.ts +++ b/frontend/app/types/filter/filterType.ts @@ -63,6 +63,7 @@ export enum FilterKey { AVG_CPU_LOAD = "AVG_CPU_LOAD", AVG_MEMORY_USAGE = "AVG_MEMORY_USAGE", FETCH_FAILED = "FETCH_FAILED", + FETCH = "FETCH", FETCH_URL = "FETCH_URL", FETCH_STATUS_CODE = "FETCH_STATUS_CODE", @@ -70,4 +71,9 @@ export enum FilterKey { FETCH_DURATION = "FETCH_DURATION", FETCH_REQUEST_BODY = "FETCH_REQUEST_BODY", FETCH_RESPONSE_BODY = "FETCH_RESPONSE_BODY", + + GRAPHQL_NAME = "GRAPHQL_NAME", + GRAPHQL_METHOD = "GRAPHQL_METHOD", + GRAPHQL_REQUEST_BODY = "GRAPHQL_REQUEST_BODY", + GRAPHQL_RESPONSE_BODY = "GRAPHQL_RESPONSE_BODY", } \ No newline at end of file diff --git a/frontend/app/types/filter/newFilter.js b/frontend/app/types/filter/newFilter.js index dedc4a7c5..29cb324b1 100644 --- a/frontend/app/types/filter/newFilter.js +++ b/frontend/app/types/filter/newFilter.js @@ -12,8 +12,21 @@ export const filtersMap = { [FilterKey.INPUT]: { key: FilterKey.INPUT, type: FilterType.MULTIPLE, category: FilterCategory.INTERACTIONS, label: 'Input', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/input', isEvent: true }, [FilterKey.LOCATION]: { key: FilterKey.LOCATION, type: FilterType.MULTIPLE, category: FilterCategory.INTERACTIONS, label: 'Page', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/location', isEvent: true }, [FilterKey.CUSTOM]: { key: FilterKey.CUSTOM, type: FilterType.MULTIPLE, category: FilterCategory.JAVASCRIPT, label: 'Custom Events', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/custom', isEvent: true }, - [FilterKey.REQUEST]: { key: FilterKey.REQUEST, type: FilterType.MULTIPLE, category: FilterCategory.JAVASCRIPT, label: 'Fetch', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch', isEvent: true }, - [FilterKey.GRAPHQL]: { key: FilterKey.GRAPHQL, type: FilterType.MULTIPLE, category: FilterCategory.JAVASCRIPT, label: 'GraphQL', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/graphql', isEvent: true }, + // [FilterKey.REQUEST]: { key: FilterKey.REQUEST, type: FilterType.MULTIPLE, category: FilterCategory.JAVASCRIPT, label: 'Fetch', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch', isEvent: true }, + [FilterKey.FETCH]: { key: FilterKey.FETCH, type: FilterType.SUB_FILTERS, category: FilterCategory.JAVASCRIPT, operator: 'is', label: 'Network Request', filters: [ + { key: FilterKey.FETCH_URL, type: FilterType.MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'with URL', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, + { key: FilterKey.FETCH_STATUS_CODE, type: FilterType.NUMBER_MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'with status code', operator: '=', operatorOptions: filterOptions.customOperators, icon: 'filters/fetch' }, + { key: FilterKey.FETCH_METHOD, type: FilterType.MULTIPLE_DROPDOWN, category: FilterCategory.PERFORMANCE, label: 'with method', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch', options: filterOptions.methodOptions }, + { key: FilterKey.FETCH_DURATION, type: FilterType.NUMBER, category: FilterCategory.PERFORMANCE, label: 'with duration', operator: '=', operatorOptions: filterOptions.customOperators, icon: 'filters/fetch' }, + { key: FilterKey.FETCH_REQUEST_BODY, type: FilterType.STRING, category: FilterCategory.PERFORMANCE, label: 'with request body', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, + { key: FilterKey.FETCH_RESPONSE_BODY, type: FilterType.STRING, category: FilterCategory.PERFORMANCE, label: 'with response body', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, + ], icon: 'filters/fetch', isEvent: true }, + [FilterKey.GRAPHQL]: { key: FilterKey.GRAPHQL, type: FilterType.SUB_FILTERS, category: FilterCategory.JAVASCRIPT, label: 'GraphQL', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/graphql', isEvent: true, filters: [ + { key: FilterKey.GRAPHQL_NAME, type: FilterType.MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'with name', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, + { key: FilterKey.GRAPHQL_METHOD, type: FilterType.MULTIPLE_DROPDOWN, category: FilterCategory.PERFORMANCE, label: 'with method', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch', options: filterOptions.methodOptions }, + { key: FilterKey.GRAPHQL_REQUEST_BODY, type: FilterType.STRING, category: FilterCategory.PERFORMANCE, label: 'with request body', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, + { key: FilterKey.GRAPHQL_RESPONSE_BODY, type: FilterType.STRING, category: FilterCategory.PERFORMANCE, label: 'with response body', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, + ]}, [FilterKey.STATEACTION]: { key: FilterKey.STATEACTION, type: FilterType.MULTIPLE, category: FilterCategory.JAVASCRIPT, label: 'StateAction', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/state-action', isEvent: true }, [FilterKey.ERROR]: { key: FilterKey.ERROR, type: FilterType.MULTIPLE, category: FilterCategory.JAVASCRIPT, label: 'Error', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/error', isEvent: true }, // [FilterKey.METADATA]: { key: FilterKey.METADATA, type: FilterType.MULTIPLE, category: FilterCategory.METADATA, label: 'Metadata', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/metadata', isEvent: true }, @@ -33,14 +46,6 @@ export const filtersMap = { [FilterKey.USERANONYMOUSID]: { key: FilterKey.USERANONYMOUSID, type: FilterType.MULTIPLE, category: FilterCategory.USER, label: 'User AnonymousId', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/userid' }, // PERFORMANCE - [FilterKey.FETCH]: { key: FilterKey.FETCH, type: FilterType.SUB_FILTERS, category: FilterCategory.PERFORMANCE, operator: 'is', label: 'Network Request', filters: [ - { key: FilterKey.FETCH_URL, type: FilterType.MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'with URL', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, - { key: FilterKey.FETCH_STATUS_CODE, type: FilterType.NUMBER_MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'with status code', operator: '=', operatorOptions: filterOptions.customOperators, icon: 'filters/fetch' }, - { key: FilterKey.FETCH_METHOD, type: FilterType.MULTIPLE_DROPDOWN, category: FilterCategory.PERFORMANCE, label: 'with method', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch', options: filterOptions.methodOptions }, - { key: FilterKey.FETCH_DURATION, type: FilterType.NUMBER, category: FilterCategory.PERFORMANCE, label: 'with duration', operator: '=', operatorOptions: filterOptions.customOperators, icon: 'filters/fetch' }, - { key: FilterKey.FETCH_REQUEST_BODY, type: FilterType.STRING, category: FilterCategory.PERFORMANCE, label: 'with request body', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, - { key: FilterKey.FETCH_RESPONSE_BODY, type: FilterType.STRING, category: FilterCategory.PERFORMANCE, label: 'with response body', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, - ], icon: 'filters/perfromance-network-request', isEvent: true }, [FilterKey.DOM_COMPLETE]: { key: FilterKey.DOM_COMPLETE, type: FilterType.MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'DOM Complete', operator: 'isAny', operatorOptions: filterOptions.stringOperators, source: [], icon: 'filters/dom-complete', isEvent: true, hasSource: true, sourceOperator: '=', sourceType: FilterType.NUMBER, sourceOperatorOptions: filterOptions.customOperators }, [FilterKey.LARGEST_CONTENTFUL_PAINT_TIME]: { key: FilterKey.LARGEST_CONTENTFUL_PAINT_TIME, type: FilterType.MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'Largest Contentful Paint', operator: 'isAny', operatorOptions: filterOptions.stringOperators, source: [], icon: 'filters/lcpt', isEvent: true, hasSource: true, sourceOperator: '=', sourceType: FilterType.NUMBER, sourceOperatorOptions: filterOptions.customOperators }, [FilterKey.TTFB]: { key: FilterKey.TTFB, type: FilterType.MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'Time to First Byte', operator: 'isAny', operatorOptions: filterOptions.stringOperators, source: [], icon: 'filters/ttfb', isEvent: true, hasSource: true, sourceOperator: '=', sourceType: FilterType.NUMBER, sourceOperatorOptions: filterOptions.customOperators }, From 5b8046773dc9cb6febcbdad842380dc4bb69d352 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Tue, 8 Mar 2022 20:15:23 +0100 Subject: [PATCH 08/22] feat(api): fixed math-oprators for requests search --- api/chalicelib/core/sessions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/chalicelib/core/sessions.py b/api/chalicelib/core/sessions.py index dead72c21..6fbc149be 100644 --- a/api/chalicelib/core/sessions.py +++ b/api/chalicelib/core/sessions.py @@ -837,7 +837,7 @@ def search_query_parts(data, error_status, errors_only, favorite_only, issue, pr apply = True elif f.type == schemas.FetchFilterType._status_code: event_where.append( - _multiple_conditions(f"main.status_code {op} %({e_k_f})s", f.value, value_key=e_k_f)) + _multiple_conditions(f"main.status_code {f.operator} %({e_k_f})s", f.value, value_key=e_k_f)) apply = True elif f.type == schemas.FetchFilterType._method: event_where.append( @@ -845,7 +845,7 @@ def search_query_parts(data, error_status, errors_only, favorite_only, issue, pr apply = True elif f.type == schemas.FetchFilterType._duration: event_where.append( - _multiple_conditions(f"main.duration {op} %({e_k_f})s", f.value, value_key=e_k_f)) + _multiple_conditions(f"main.duration {f.operator} %({e_k_f})s", f.value, value_key=e_k_f)) apply = True elif f.type == schemas.FetchFilterType._request_body: event_where.append( From bfd1d05e076a9b04902421254bf41a2e904da33d Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Tue, 8 Mar 2022 20:23:12 +0100 Subject: [PATCH 09/22] fix(ui) - oss review and fixes --- .../CustomMetricPercentage/CustomMetricPercentage.tsx | 3 ++- .../CustomMetricPieChart/CustomMetricPieChart.tsx | 3 ++- .../CustomMetricTable/CustomMetricTable.tsx | 3 ++- frontend/app/components/Dashboard/Widgets/common/Table.js | 2 +- frontend/app/utils.js | 2 +- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPercentage/CustomMetricPercentage.tsx b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPercentage/CustomMetricPercentage.tsx index ed4f3cc85..177dccf9a 100644 --- a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPercentage/CustomMetricPercentage.tsx +++ b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPercentage/CustomMetricPercentage.tsx @@ -1,4 +1,5 @@ import React from 'react' +import { numberWithCommas } from 'App/utils'; interface Props { data: any; @@ -10,7 +11,7 @@ function CustomMetriPercentage(props: Props) { const { data = {} } = props; return (
-
{data.count}
+
{numberWithCommas(data.count)}
{`${data.previousCount} ( ${data.countProgress}% )`}
from previous period.
diff --git a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPieChart/CustomMetricPieChart.tsx b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPieChart/CustomMetricPieChart.tsx index 219f4cc98..e48dd20dd 100644 --- a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPieChart/CustomMetricPieChart.tsx +++ b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPieChart/CustomMetricPieChart.tsx @@ -4,6 +4,7 @@ import { PieChart, Pie, Cell } from 'recharts'; import { Styles } from '../../common'; import { NoContent } from 'UI'; import { filtersMap } from 'Types/filter/newFilter'; +import { numberWithCommas } from 'App/utils'; interface Props { metric: any, data: any; @@ -107,7 +108,7 @@ function CustomMetricPieChart(props: Props) { dominantBaseline="central" fill='#666' > - {name || 'Unidentified'} {value} + {name || 'Unidentified'} {numberWithCommas(value)} ); }} diff --git a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricTable/CustomMetricTable.tsx b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricTable/CustomMetricTable.tsx index 6a9481077..a43a35fc8 100644 --- a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricTable/CustomMetricTable.tsx +++ b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricTable/CustomMetricTable.tsx @@ -4,6 +4,7 @@ import { List } from 'immutable'; import { filtersMap } from 'Types/filter/newFilter'; import { NoContent } from 'UI'; import { tableColumnName } from 'App/constants/filterOptions'; +import { numberWithCommas } from 'App/utils'; const getColumns = (metric) => { return [ @@ -16,7 +17,7 @@ const getColumns = (metric) => { { key: 'sessionCount', title: 'Sessions', - toText: sessions => sessions, + toText: sessions => numberWithCommas(sessions), width: '30%', }, ] diff --git a/frontend/app/components/Dashboard/Widgets/common/Table.js b/frontend/app/components/Dashboard/Widgets/common/Table.js index e1b6a503c..e3d88502f 100644 --- a/frontend/app/components/Dashboard/Widgets/common/Table.js +++ b/frontend/app/components/Dashboard/Widgets/common/Table.js @@ -33,7 +33,7 @@ export default class Table extends React.PureComponent { }
- { rows.take(showAll ? 10 : (small ? 3 : 5)).map(row => ( + { rows.take(showAll ? rows.size : (small ? 3 : 5)).map(row => (
!list.some((item2, j) => j < i && keys.every(key => item[ key ] === item2[ key ] && item[ key ] !== undefined)); -export const numberWithCommas = (x) => x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); +export const numberWithCommas = (x) => x ? x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') : 0; export const numberCompact = (x) => x >= 1000 ? x / 1000 + 'k': x; From 3c194ef8c70a7971961b03dec2e771a49b3fdbb2 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Tue, 8 Mar 2022 20:32:13 +0100 Subject: [PATCH 10/22] feat(api): fixed string-operators for requests search --- api/chalicelib/core/sessions.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/api/chalicelib/core/sessions.py b/api/chalicelib/core/sessions.py index 6fbc149be..58ce4936f 100644 --- a/api/chalicelib/core/sessions.py +++ b/api/chalicelib/core/sessions.py @@ -827,6 +827,7 @@ def search_query_parts(data, error_status, errors_only, favorite_only, issue, pr is_any = _isAny_opreator(f.operator) if is_any or len(f.value) == 0: continue + f.value = helper.values_for_operator(value=f.value, op=f.operator) op = __get_sql_operator(f.operator) e_k_f = e_k + f"_fetch{j}" full_args = {**full_args, **_multiple_values(f.value, value_key=e_k_f)} @@ -837,7 +838,8 @@ def search_query_parts(data, error_status, errors_only, favorite_only, issue, pr apply = True elif f.type == schemas.FetchFilterType._status_code: event_where.append( - _multiple_conditions(f"main.status_code {f.operator} %({e_k_f})s", f.value, value_key=e_k_f)) + _multiple_conditions(f"main.status_code {f.operator} %({e_k_f})s", f.value, + value_key=e_k_f)) apply = True elif f.type == schemas.FetchFilterType._method: event_where.append( From 6722f845376b11a663368b56380ca3ed5947c886 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Tue, 8 Mar 2022 20:33:21 +0100 Subject: [PATCH 11/22] feat(api): fixed string-operators for graphQL search --- api/chalicelib/core/sessions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/api/chalicelib/core/sessions.py b/api/chalicelib/core/sessions.py index 58ce4936f..5aca83ab3 100644 --- a/api/chalicelib/core/sessions.py +++ b/api/chalicelib/core/sessions.py @@ -867,6 +867,7 @@ def search_query_parts(data, error_status, errors_only, favorite_only, issue, pr is_any = _isAny_opreator(f.operator) if is_any or len(f.value) == 0: continue + f.value = helper.values_for_operator(value=f.value, op=f.operator) op = __get_sql_operator(f.operator) e_k_f = e_k + f"_graphql{j}" full_args = {**full_args, **_multiple_values(f.value, value_key=e_k_f)} From 386fa7e243b6bb1cfe7275cd588e408c7f3ebc32 Mon Sep 17 00:00:00 2001 From: Openreplay Date: Tue, 8 Mar 2022 00:52:43 +0000 Subject: [PATCH 12/22] chore(release): v1.5.3 --- scripts/helmcharts/init.sh | 2 +- scripts/helmcharts/openreplay/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/alerts/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/assets/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/chalice/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/db/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/ender/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/http/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/integrations/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/sink/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/storage/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/utilities/Chart.yaml | 2 +- scripts/helmcharts/vars.yaml | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/scripts/helmcharts/init.sh b/scripts/helmcharts/init.sh index 6e4f70613..2df3b8450 100644 --- a/scripts/helmcharts/init.sh +++ b/scripts/helmcharts/init.sh @@ -15,7 +15,7 @@ fatal() exit 1 } -version="v1.5.3" +version="v1.5.2" usr=`whoami` # Installing k3s diff --git a/scripts/helmcharts/openreplay/Chart.yaml b/scripts/helmcharts/openreplay/Chart.yaml index f0b5ef469..e621e543d 100644 --- a/scripts/helmcharts/openreplay/Chart.yaml +++ b/scripts/helmcharts/openreplay/Chart.yaml @@ -22,4 +22,4 @@ version: 0.1.0 # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. # Ref: https://github.com/helm/helm/issues/7858#issuecomment-608114589 -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml b/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml index b39fb2e99..0bfe8b4bc 100644 --- a/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/assets/Chart.yaml b/scripts/helmcharts/openreplay/charts/assets/Chart.yaml index b1be7b726..9b8c32623 100644 --- a/scripts/helmcharts/openreplay/charts/assets/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/assets/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml b/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml index 755fb8648..1d0441f7e 100644 --- a/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/db/Chart.yaml b/scripts/helmcharts/openreplay/charts/db/Chart.yaml index 796e1ef76..0aa5f39e3 100644 --- a/scripts/helmcharts/openreplay/charts/db/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/db/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/ender/Chart.yaml b/scripts/helmcharts/openreplay/charts/ender/Chart.yaml index 571ef34c0..8a7ce610e 100644 --- a/scripts/helmcharts/openreplay/charts/ender/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/ender/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/http/Chart.yaml b/scripts/helmcharts/openreplay/charts/http/Chart.yaml index 166b3e22d..5422d1f3d 100644 --- a/scripts/helmcharts/openreplay/charts/http/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/http/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml b/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml index 710f7ffe5..e8fc92887 100644 --- a/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml b/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml index b0baf2637..2c473b4b4 100644 --- a/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/sink/Chart.yaml b/scripts/helmcharts/openreplay/charts/sink/Chart.yaml index fea7646a4..7ece0a5bf 100644 --- a/scripts/helmcharts/openreplay/charts/sink/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/sink/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/storage/Chart.yaml b/scripts/helmcharts/openreplay/charts/storage/Chart.yaml index 879a077c6..9e1c06d8c 100644 --- a/scripts/helmcharts/openreplay/charts/storage/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/storage/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml b/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml index e432835d0..acc73d941 100644 --- a/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.3" +AppVersion: "v1.5.2" diff --git a/scripts/helmcharts/vars.yaml b/scripts/helmcharts/vars.yaml index 25d6a67d6..a09b0647d 100644 --- a/scripts/helmcharts/vars.yaml +++ b/scripts/helmcharts/vars.yaml @@ -1,4 +1,4 @@ -fromVersion: "v1.5.3" +fromVersion: "v1.5.2" # Databases specific variables postgresql: &postgres # For generating passwords From 2371eb02bbb6b89569c8c8e4ae77c0ab9b3f208f Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Tue, 8 Mar 2022 18:23:53 +0100 Subject: [PATCH 13/22] change(ui) - changed table options --- frontend/app/constants/filterOptions.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/app/constants/filterOptions.js b/frontend/app/constants/filterOptions.js index 03df3ab51..7f6a12e03 100644 --- a/frontend/app/constants/filterOptions.js +++ b/frontend/app/constants/filterOptions.js @@ -74,10 +74,10 @@ export const metricOf = [ { text: 'Session Count', value: 'sessionCount', type: 'timeseries' }, { text: 'Users', value: FilterKey.USERID, type: 'table' }, { text: 'Issues', value: FilterKey.ISSUE, type: 'table' }, - { text: 'Browser', value: FilterKey.USER_BROWSER, type: 'table' }, - { text: 'Device', value: FilterKey.USER_DEVICE, type: 'table' }, - { text: 'Country', value: FilterKey.USER_COUNTRY, type: 'table' }, - { text: 'URL', value: FilterKey.LOCATION, type: 'table' }, + { text: 'Browsers', value: FilterKey.USER_BROWSER, type: 'table' }, + { text: 'Devices', value: FilterKey.USER_DEVICE, type: 'table' }, + { text: 'Countries', value: FilterKey.USER_COUNTRY, type: 'table' }, + { text: 'URLs', value: FilterKey.LOCATION, type: 'table' }, ] export const methodOptions = [ From 292d467371eea31384bcbb7d1f77d2057478278e Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Tue, 8 Mar 2022 20:15:10 +0100 Subject: [PATCH 14/22] fix(ui) - oss review and fixes --- .../Funnels/FunnelDetails/FunnelDetails.js | 2 +- .../Funnels/FunnelHeader/FunnelHeader.js | 6 +- .../ProjectCodeSnippet/ProjectCodeSnippet.js | 48 ++++++++------- .../ProjectCodeSnippet/ProjectCodeSnippet.js | 59 +++++++++++-------- frontend/app/duck/funnelFilters.js | 2 +- frontend/app/duck/search.js | 1 + frontend/app/duck/site.js | 9 +-- frontend/app/types/filter/filterType.ts | 6 ++ frontend/app/types/filter/newFilter.js | 25 ++++---- 9 files changed, 94 insertions(+), 64 deletions(-) diff --git a/frontend/app/components/Funnels/FunnelDetails/FunnelDetails.js b/frontend/app/components/Funnels/FunnelDetails/FunnelDetails.js index a00ea34e5..48142ef13 100644 --- a/frontend/app/components/Funnels/FunnelDetails/FunnelDetails.js +++ b/frontend/app/components/Funnels/FunnelDetails/FunnelDetails.js @@ -78,7 +78,7 @@ const FunnelDetails = (props) => { const showEmptyMessage = hasNoStages && activeTab === TAB_ISSUES && !loading; return ( -
+
{ } else {} } - const onDateChange = (e) => { + const onDateChange = (e) => { props.applyFilter(e, funnel.funnelId) } const options = funnels.map(({ funnelId, name }) => ({ text: name, value: funnelId })).toJS(); - const selectedFunnel = funnels.filter(i => i.funnelId === parseInt(funnelId)).first() || {}; + const selectedFunnel = funnels.filter(i => i.funnelId === parseInt(funnelId)).first() || {}; return (
@@ -117,5 +117,5 @@ const FunnelHeader = (props) => { } export default connect(state => ({ - funnelFilters: state.getIn([ 'funnels', 'instance', 'filter' ]), + funnelFilters: state.getIn([ 'funnels', 'instance' ]), }), { applyFilter, deleteFunnel, fetch, fetchInsights, fetchIssuesFiltered, fetchSessionsFiltered })(FunnelHeader) diff --git a/frontend/app/components/Onboarding/components/OnboardingTabs/ProjectCodeSnippet/ProjectCodeSnippet.js b/frontend/app/components/Onboarding/components/OnboardingTabs/ProjectCodeSnippet/ProjectCodeSnippet.js index bf0e83791..7002ed604 100644 --- a/frontend/app/components/Onboarding/components/OnboardingTabs/ProjectCodeSnippet/ProjectCodeSnippet.js +++ b/frontend/app/components/Onboarding/components/OnboardingTabs/ProjectCodeSnippet/ProjectCodeSnippet.js @@ -15,32 +15,40 @@ const inputModeOptions = [ { text: 'Obscure all inputs', value: 'hidden' }, ]; -const codeSnippet = ` -`; - +const inputModeOptionsMap = {} +inputModeOptions.forEach((o, i) => inputModeOptionsMap[o.value] = i) const ProjectCodeSnippet = props => { const { site, gdpr } = props; const [changed, setChanged] = useState(false) const [copied, setCopied] = useState(false) + const codeSnippet = ` +`; + const saveGDPR = (value) => { setChanged(true) props.saveGDPR(site.id, GDPR({...value})); diff --git a/frontend/app/components/shared/TrackingCodeModal/ProjectCodeSnippet/ProjectCodeSnippet.js b/frontend/app/components/shared/TrackingCodeModal/ProjectCodeSnippet/ProjectCodeSnippet.js index e269c2cc7..50ca97823 100644 --- a/frontend/app/components/shared/TrackingCodeModal/ProjectCodeSnippet/ProjectCodeSnippet.js +++ b/frontend/app/components/shared/TrackingCodeModal/ProjectCodeSnippet/ProjectCodeSnippet.js @@ -14,25 +14,8 @@ const inputModeOptions = [ { text: 'Obscure all inputs', value: 'hidden' }, ]; -const codeSnippet = ` -`; +const inputModeOptionsMap = {} +inputModeOptions.forEach((o, i) => inputModeOptionsMap[o.value] = i) const ProjectCodeSnippet = props => { @@ -40,6 +23,32 @@ const ProjectCodeSnippet = props => { const [changed, setChanged] = useState(false) const [copied, setCopied] = useState(false) + const codeSnippet = ` +`; + const saveGDPR = (value) => { setChanged(true) props.saveGDPR(site.id, GDPR({...value})); @@ -47,11 +56,11 @@ const ProjectCodeSnippet = props => { const onChangeSelect = (event, { name, value }) => { const { gdpr } = site; - const _gdpr = { ...gdpr.toData() }; + // const _gdpr = { ...gdpr.toData() }; + // props.editGDPR({ [ name ]: value }); + // _gdpr[name] = value; props.editGDPR({ [ name ]: value }); - _gdpr[name] = value; - props.editGDPR({ [ name ]: value }); - saveGDPR(_gdpr) + saveGDPR({ ...gdpr, [ name ]: value }); }; const onChangeOption = (event, { name, checked }) => { @@ -74,8 +83,8 @@ const ProjectCodeSnippet = props => { snippet = snippet.replace('PROJECT_KEY', site.projectKey); } return snippet - .replace('XXX', getOptionValues()) - .replace('HOST', site && site.host); + //.replace('XXX', getOptionValues()) + //.replace('HOST', site && site.host); } const copyHandler = (code) => { diff --git a/frontend/app/duck/funnelFilters.js b/frontend/app/duck/funnelFilters.js index 294ba2039..468887afb 100644 --- a/frontend/app/duck/funnelFilters.js +++ b/frontend/app/duck/funnelFilters.js @@ -114,7 +114,7 @@ const reducer = (state = initialState, action = {}) => { Filter(action.filter) .set('events', state.getIn([ 'appliedFilter', 'events' ])) ) - : state.mergeIn([ 'appliedFilter' ], action.filter); + : state.mergeIn(['instance'], action.filter); case ADD_CUSTOM_FILTER: return state.update('customFilters', vars => vars.set(action.filter, action.value)); case REMOVE_CUSTOM_FILTER: diff --git a/frontend/app/duck/search.js b/frontend/app/duck/search.js index 3d15ae950..cf742e556 100644 --- a/frontend/app/duck/search.js +++ b/frontend/app/duck/search.js @@ -60,6 +60,7 @@ function reducer(state = initialState, action = {}) { case EDIT: return state.mergeIn(['instance'], action.instance); case APPLY: + console.log('APPLY', action.filter); return action.fromUrl ? state.set('instance', Filter(action.filter)) : state.mergeIn(['instance'], action.filter); diff --git a/frontend/app/duck/site.js b/frontend/app/duck/site.js index e5783b147..7e911c477 100644 --- a/frontend/app/duck/site.js +++ b/frontend/app/duck/site.js @@ -43,10 +43,11 @@ const reducer = (state = initialState, action = {}) => { return state.mergeIn([ 'instance', 'gdpr' ], action.data); case SAVE_GDPR_SUCCESS: const gdpr = GDPR(action.data); - return state.update('list', itemInListUpdater({ - [ idKey ] : state.getIn([ 'instance', idKey ]), - gdpr, - })).setIn([ 'instance', 'gdpr' ], gdpr); + return state.setIn([ 'instance', 'gdpr' ], gdpr); + // return state.update('list', itemInListUpdater({ + // [ idKey ] : state.getIn([ 'instance', idKey ]), + // gdpr, + // })).setIn([ 'instance', 'gdpr' ], gdpr); } return state; }; diff --git a/frontend/app/types/filter/filterType.ts b/frontend/app/types/filter/filterType.ts index ccb5156cd..2958f10e2 100644 --- a/frontend/app/types/filter/filterType.ts +++ b/frontend/app/types/filter/filterType.ts @@ -63,6 +63,7 @@ export enum FilterKey { AVG_CPU_LOAD = "AVG_CPU_LOAD", AVG_MEMORY_USAGE = "AVG_MEMORY_USAGE", FETCH_FAILED = "FETCH_FAILED", + FETCH = "FETCH", FETCH_URL = "FETCH_URL", FETCH_STATUS_CODE = "FETCH_STATUS_CODE", @@ -70,4 +71,9 @@ export enum FilterKey { FETCH_DURATION = "FETCH_DURATION", FETCH_REQUEST_BODY = "FETCH_REQUEST_BODY", FETCH_RESPONSE_BODY = "FETCH_RESPONSE_BODY", + + GRAPHQL_NAME = "GRAPHQL_NAME", + GRAPHQL_METHOD = "GRAPHQL_METHOD", + GRAPHQL_REQUEST_BODY = "GRAPHQL_REQUEST_BODY", + GRAPHQL_RESPONSE_BODY = "GRAPHQL_RESPONSE_BODY", } \ No newline at end of file diff --git a/frontend/app/types/filter/newFilter.js b/frontend/app/types/filter/newFilter.js index dedc4a7c5..29cb324b1 100644 --- a/frontend/app/types/filter/newFilter.js +++ b/frontend/app/types/filter/newFilter.js @@ -12,8 +12,21 @@ export const filtersMap = { [FilterKey.INPUT]: { key: FilterKey.INPUT, type: FilterType.MULTIPLE, category: FilterCategory.INTERACTIONS, label: 'Input', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/input', isEvent: true }, [FilterKey.LOCATION]: { key: FilterKey.LOCATION, type: FilterType.MULTIPLE, category: FilterCategory.INTERACTIONS, label: 'Page', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/location', isEvent: true }, [FilterKey.CUSTOM]: { key: FilterKey.CUSTOM, type: FilterType.MULTIPLE, category: FilterCategory.JAVASCRIPT, label: 'Custom Events', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/custom', isEvent: true }, - [FilterKey.REQUEST]: { key: FilterKey.REQUEST, type: FilterType.MULTIPLE, category: FilterCategory.JAVASCRIPT, label: 'Fetch', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch', isEvent: true }, - [FilterKey.GRAPHQL]: { key: FilterKey.GRAPHQL, type: FilterType.MULTIPLE, category: FilterCategory.JAVASCRIPT, label: 'GraphQL', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/graphql', isEvent: true }, + // [FilterKey.REQUEST]: { key: FilterKey.REQUEST, type: FilterType.MULTIPLE, category: FilterCategory.JAVASCRIPT, label: 'Fetch', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch', isEvent: true }, + [FilterKey.FETCH]: { key: FilterKey.FETCH, type: FilterType.SUB_FILTERS, category: FilterCategory.JAVASCRIPT, operator: 'is', label: 'Network Request', filters: [ + { key: FilterKey.FETCH_URL, type: FilterType.MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'with URL', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, + { key: FilterKey.FETCH_STATUS_CODE, type: FilterType.NUMBER_MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'with status code', operator: '=', operatorOptions: filterOptions.customOperators, icon: 'filters/fetch' }, + { key: FilterKey.FETCH_METHOD, type: FilterType.MULTIPLE_DROPDOWN, category: FilterCategory.PERFORMANCE, label: 'with method', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch', options: filterOptions.methodOptions }, + { key: FilterKey.FETCH_DURATION, type: FilterType.NUMBER, category: FilterCategory.PERFORMANCE, label: 'with duration', operator: '=', operatorOptions: filterOptions.customOperators, icon: 'filters/fetch' }, + { key: FilterKey.FETCH_REQUEST_BODY, type: FilterType.STRING, category: FilterCategory.PERFORMANCE, label: 'with request body', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, + { key: FilterKey.FETCH_RESPONSE_BODY, type: FilterType.STRING, category: FilterCategory.PERFORMANCE, label: 'with response body', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, + ], icon: 'filters/fetch', isEvent: true }, + [FilterKey.GRAPHQL]: { key: FilterKey.GRAPHQL, type: FilterType.SUB_FILTERS, category: FilterCategory.JAVASCRIPT, label: 'GraphQL', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/graphql', isEvent: true, filters: [ + { key: FilterKey.GRAPHQL_NAME, type: FilterType.MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'with name', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, + { key: FilterKey.GRAPHQL_METHOD, type: FilterType.MULTIPLE_DROPDOWN, category: FilterCategory.PERFORMANCE, label: 'with method', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch', options: filterOptions.methodOptions }, + { key: FilterKey.GRAPHQL_REQUEST_BODY, type: FilterType.STRING, category: FilterCategory.PERFORMANCE, label: 'with request body', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, + { key: FilterKey.GRAPHQL_RESPONSE_BODY, type: FilterType.STRING, category: FilterCategory.PERFORMANCE, label: 'with response body', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, + ]}, [FilterKey.STATEACTION]: { key: FilterKey.STATEACTION, type: FilterType.MULTIPLE, category: FilterCategory.JAVASCRIPT, label: 'StateAction', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/state-action', isEvent: true }, [FilterKey.ERROR]: { key: FilterKey.ERROR, type: FilterType.MULTIPLE, category: FilterCategory.JAVASCRIPT, label: 'Error', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/error', isEvent: true }, // [FilterKey.METADATA]: { key: FilterKey.METADATA, type: FilterType.MULTIPLE, category: FilterCategory.METADATA, label: 'Metadata', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/metadata', isEvent: true }, @@ -33,14 +46,6 @@ export const filtersMap = { [FilterKey.USERANONYMOUSID]: { key: FilterKey.USERANONYMOUSID, type: FilterType.MULTIPLE, category: FilterCategory.USER, label: 'User AnonymousId', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/userid' }, // PERFORMANCE - [FilterKey.FETCH]: { key: FilterKey.FETCH, type: FilterType.SUB_FILTERS, category: FilterCategory.PERFORMANCE, operator: 'is', label: 'Network Request', filters: [ - { key: FilterKey.FETCH_URL, type: FilterType.MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'with URL', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, - { key: FilterKey.FETCH_STATUS_CODE, type: FilterType.NUMBER_MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'with status code', operator: '=', operatorOptions: filterOptions.customOperators, icon: 'filters/fetch' }, - { key: FilterKey.FETCH_METHOD, type: FilterType.MULTIPLE_DROPDOWN, category: FilterCategory.PERFORMANCE, label: 'with method', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch', options: filterOptions.methodOptions }, - { key: FilterKey.FETCH_DURATION, type: FilterType.NUMBER, category: FilterCategory.PERFORMANCE, label: 'with duration', operator: '=', operatorOptions: filterOptions.customOperators, icon: 'filters/fetch' }, - { key: FilterKey.FETCH_REQUEST_BODY, type: FilterType.STRING, category: FilterCategory.PERFORMANCE, label: 'with request body', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, - { key: FilterKey.FETCH_RESPONSE_BODY, type: FilterType.STRING, category: FilterCategory.PERFORMANCE, label: 'with response body', operator: 'is', operatorOptions: filterOptions.stringOperators, icon: 'filters/fetch' }, - ], icon: 'filters/perfromance-network-request', isEvent: true }, [FilterKey.DOM_COMPLETE]: { key: FilterKey.DOM_COMPLETE, type: FilterType.MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'DOM Complete', operator: 'isAny', operatorOptions: filterOptions.stringOperators, source: [], icon: 'filters/dom-complete', isEvent: true, hasSource: true, sourceOperator: '=', sourceType: FilterType.NUMBER, sourceOperatorOptions: filterOptions.customOperators }, [FilterKey.LARGEST_CONTENTFUL_PAINT_TIME]: { key: FilterKey.LARGEST_CONTENTFUL_PAINT_TIME, type: FilterType.MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'Largest Contentful Paint', operator: 'isAny', operatorOptions: filterOptions.stringOperators, source: [], icon: 'filters/lcpt', isEvent: true, hasSource: true, sourceOperator: '=', sourceType: FilterType.NUMBER, sourceOperatorOptions: filterOptions.customOperators }, [FilterKey.TTFB]: { key: FilterKey.TTFB, type: FilterType.MULTIPLE, category: FilterCategory.PERFORMANCE, label: 'Time to First Byte', operator: 'isAny', operatorOptions: filterOptions.stringOperators, source: [], icon: 'filters/ttfb', isEvent: true, hasSource: true, sourceOperator: '=', sourceType: FilterType.NUMBER, sourceOperatorOptions: filterOptions.customOperators }, From c1560c9e57b3a32a1a769eefe9ef55092be78317 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Tue, 8 Mar 2022 20:23:12 +0100 Subject: [PATCH 15/22] fix(ui) - oss review and fixes --- .../CustomMetricPercentage/CustomMetricPercentage.tsx | 3 ++- .../CustomMetricPieChart/CustomMetricPieChart.tsx | 3 ++- .../CustomMetricTable/CustomMetricTable.tsx | 3 ++- frontend/app/components/Dashboard/Widgets/common/Table.js | 2 +- frontend/app/utils.js | 2 +- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPercentage/CustomMetricPercentage.tsx b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPercentage/CustomMetricPercentage.tsx index ed4f3cc85..177dccf9a 100644 --- a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPercentage/CustomMetricPercentage.tsx +++ b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPercentage/CustomMetricPercentage.tsx @@ -1,4 +1,5 @@ import React from 'react' +import { numberWithCommas } from 'App/utils'; interface Props { data: any; @@ -10,7 +11,7 @@ function CustomMetriPercentage(props: Props) { const { data = {} } = props; return (
-
{data.count}
+
{numberWithCommas(data.count)}
{`${data.previousCount} ( ${data.countProgress}% )`}
from previous period.
diff --git a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPieChart/CustomMetricPieChart.tsx b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPieChart/CustomMetricPieChart.tsx index 219f4cc98..e48dd20dd 100644 --- a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPieChart/CustomMetricPieChart.tsx +++ b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricPieChart/CustomMetricPieChart.tsx @@ -4,6 +4,7 @@ import { PieChart, Pie, Cell } from 'recharts'; import { Styles } from '../../common'; import { NoContent } from 'UI'; import { filtersMap } from 'Types/filter/newFilter'; +import { numberWithCommas } from 'App/utils'; interface Props { metric: any, data: any; @@ -107,7 +108,7 @@ function CustomMetricPieChart(props: Props) { dominantBaseline="central" fill='#666' > - {name || 'Unidentified'} {value} + {name || 'Unidentified'} {numberWithCommas(value)} ); }} diff --git a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricTable/CustomMetricTable.tsx b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricTable/CustomMetricTable.tsx index 6a9481077..a43a35fc8 100644 --- a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricTable/CustomMetricTable.tsx +++ b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricTable/CustomMetricTable.tsx @@ -4,6 +4,7 @@ import { List } from 'immutable'; import { filtersMap } from 'Types/filter/newFilter'; import { NoContent } from 'UI'; import { tableColumnName } from 'App/constants/filterOptions'; +import { numberWithCommas } from 'App/utils'; const getColumns = (metric) => { return [ @@ -16,7 +17,7 @@ const getColumns = (metric) => { { key: 'sessionCount', title: 'Sessions', - toText: sessions => sessions, + toText: sessions => numberWithCommas(sessions), width: '30%', }, ] diff --git a/frontend/app/components/Dashboard/Widgets/common/Table.js b/frontend/app/components/Dashboard/Widgets/common/Table.js index e1b6a503c..e3d88502f 100644 --- a/frontend/app/components/Dashboard/Widgets/common/Table.js +++ b/frontend/app/components/Dashboard/Widgets/common/Table.js @@ -33,7 +33,7 @@ export default class Table extends React.PureComponent { }
- { rows.take(showAll ? 10 : (small ? 3 : 5)).map(row => ( + { rows.take(showAll ? rows.size : (small ? 3 : 5)).map(row => (
!list.some((item2, j) => j < i && keys.every(key => item[ key ] === item2[ key ] && item[ key ] !== undefined)); -export const numberWithCommas = (x) => x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); +export const numberWithCommas = (x) => x ? x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') : 0; export const numberCompact = (x) => x >= 1000 ? x / 1000 + 'k': x; From 4df30d9916a729f0f843513a72379d46cf35e88b Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Tue, 8 Mar 2022 20:56:32 +0100 Subject: [PATCH 16/22] feat(api): fixed custom_metrics progress time --- api/chalicelib/core/custom_metrics.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/chalicelib/core/custom_metrics.py b/api/chalicelib/core/custom_metrics.py index 6c8e7ddc3..e0b0ed432 100644 --- a/api/chalicelib/core/custom_metrics.py +++ b/api/chalicelib/core/custom_metrics.py @@ -20,8 +20,8 @@ def __try_live(project_id, data: schemas.CreateCustomMetricsSchema): if data.view_type == schemas.MetricTimeseriesViewType.progress: r = {"count": results[-1]} diff = s.filter.endDate - s.filter.startDate - s.filter.startDate = data.endDate - s.filter.endDate = data.endDate - diff + s.filter.endDate = s.filter.startDate + s.filter.startDate = s.filter.endDate - diff r["previousCount"] = sessions.search2_series(data=s.filter, project_id=project_id, density=data.density, view_type=data.view_type, metric_type=data.metric_type, metric_of=data.metric_of, metric_value=data.metric_value) From 665e1952c7352f23fd23cd75e4cee0eff60045da Mon Sep 17 00:00:00 2001 From: KRAIEM Taha Yassine Date: Tue, 8 Mar 2022 20:38:13 +0000 Subject: [PATCH 17/22] v1.5.3 --- scripts/helmcharts/init.sh | 2 +- scripts/helmcharts/openreplay/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/alerts/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/assets/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/chalice/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/db/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/ender/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/http/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/integrations/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/sink/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/storage/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/utilities/Chart.yaml | 2 +- scripts/helmcharts/vars.yaml | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/scripts/helmcharts/init.sh b/scripts/helmcharts/init.sh index 2df3b8450..6e4f70613 100644 --- a/scripts/helmcharts/init.sh +++ b/scripts/helmcharts/init.sh @@ -15,7 +15,7 @@ fatal() exit 1 } -version="v1.5.2" +version="v1.5.3" usr=`whoami` # Installing k3s diff --git a/scripts/helmcharts/openreplay/Chart.yaml b/scripts/helmcharts/openreplay/Chart.yaml index e621e543d..f0b5ef469 100644 --- a/scripts/helmcharts/openreplay/Chart.yaml +++ b/scripts/helmcharts/openreplay/Chart.yaml @@ -22,4 +22,4 @@ version: 0.1.0 # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. # Ref: https://github.com/helm/helm/issues/7858#issuecomment-608114589 -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml b/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml index 0bfe8b4bc..b39fb2e99 100644 --- a/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/assets/Chart.yaml b/scripts/helmcharts/openreplay/charts/assets/Chart.yaml index 9b8c32623..b1be7b726 100644 --- a/scripts/helmcharts/openreplay/charts/assets/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/assets/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml b/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml index 1d0441f7e..755fb8648 100644 --- a/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/db/Chart.yaml b/scripts/helmcharts/openreplay/charts/db/Chart.yaml index 0aa5f39e3..796e1ef76 100644 --- a/scripts/helmcharts/openreplay/charts/db/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/db/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/ender/Chart.yaml b/scripts/helmcharts/openreplay/charts/ender/Chart.yaml index 8a7ce610e..571ef34c0 100644 --- a/scripts/helmcharts/openreplay/charts/ender/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/ender/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/http/Chart.yaml b/scripts/helmcharts/openreplay/charts/http/Chart.yaml index 5422d1f3d..166b3e22d 100644 --- a/scripts/helmcharts/openreplay/charts/http/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/http/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml b/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml index e8fc92887..710f7ffe5 100644 --- a/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml b/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml index 2c473b4b4..b0baf2637 100644 --- a/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/sink/Chart.yaml b/scripts/helmcharts/openreplay/charts/sink/Chart.yaml index 7ece0a5bf..fea7646a4 100644 --- a/scripts/helmcharts/openreplay/charts/sink/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/sink/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/storage/Chart.yaml b/scripts/helmcharts/openreplay/charts/storage/Chart.yaml index 9e1c06d8c..879a077c6 100644 --- a/scripts/helmcharts/openreplay/charts/storage/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/storage/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml b/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml index acc73d941..e432835d0 100644 --- a/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/vars.yaml b/scripts/helmcharts/vars.yaml index a09b0647d..25d6a67d6 100644 --- a/scripts/helmcharts/vars.yaml +++ b/scripts/helmcharts/vars.yaml @@ -1,4 +1,4 @@ -fromVersion: "v1.5.2" +fromVersion: "v1.5.3" # Databases specific variables postgresql: &postgres # For generating passwords From e70dbc0d3a2e42b02456e10434793e392c31202f Mon Sep 17 00:00:00 2001 From: Openreplay Date: Tue, 8 Mar 2022 22:04:32 +0000 Subject: [PATCH 18/22] v1.5.3 --- scripts/helmcharts/init.sh | 2 +- scripts/helmcharts/openreplay/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/alerts/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/assets/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/chalice/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/db/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/ender/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/http/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/integrations/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/sink/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/storage/Chart.yaml | 2 +- scripts/helmcharts/openreplay/charts/utilities/Chart.yaml | 2 +- scripts/helmcharts/vars.yaml | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/scripts/helmcharts/init.sh b/scripts/helmcharts/init.sh index 2df3b8450..6e4f70613 100644 --- a/scripts/helmcharts/init.sh +++ b/scripts/helmcharts/init.sh @@ -15,7 +15,7 @@ fatal() exit 1 } -version="v1.5.2" +version="v1.5.3" usr=`whoami` # Installing k3s diff --git a/scripts/helmcharts/openreplay/Chart.yaml b/scripts/helmcharts/openreplay/Chart.yaml index e621e543d..f0b5ef469 100644 --- a/scripts/helmcharts/openreplay/Chart.yaml +++ b/scripts/helmcharts/openreplay/Chart.yaml @@ -22,4 +22,4 @@ version: 0.1.0 # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. # Ref: https://github.com/helm/helm/issues/7858#issuecomment-608114589 -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml b/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml index 0bfe8b4bc..b39fb2e99 100644 --- a/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/alerts/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/assets/Chart.yaml b/scripts/helmcharts/openreplay/charts/assets/Chart.yaml index 9b8c32623..b1be7b726 100644 --- a/scripts/helmcharts/openreplay/charts/assets/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/assets/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml b/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml index 1d0441f7e..755fb8648 100644 --- a/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/chalice/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/db/Chart.yaml b/scripts/helmcharts/openreplay/charts/db/Chart.yaml index 0aa5f39e3..796e1ef76 100644 --- a/scripts/helmcharts/openreplay/charts/db/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/db/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/ender/Chart.yaml b/scripts/helmcharts/openreplay/charts/ender/Chart.yaml index 8a7ce610e..571ef34c0 100644 --- a/scripts/helmcharts/openreplay/charts/ender/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/ender/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/http/Chart.yaml b/scripts/helmcharts/openreplay/charts/http/Chart.yaml index 5422d1f3d..166b3e22d 100644 --- a/scripts/helmcharts/openreplay/charts/http/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/http/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml b/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml index e8fc92887..710f7ffe5 100644 --- a/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/integrations/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml b/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml index 2c473b4b4..b0baf2637 100644 --- a/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/nginx-ingress/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/sink/Chart.yaml b/scripts/helmcharts/openreplay/charts/sink/Chart.yaml index 7ece0a5bf..fea7646a4 100644 --- a/scripts/helmcharts/openreplay/charts/sink/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/sink/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/storage/Chart.yaml b/scripts/helmcharts/openreplay/charts/storage/Chart.yaml index 9e1c06d8c..879a077c6 100644 --- a/scripts/helmcharts/openreplay/charts/storage/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/storage/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml b/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml index acc73d941..e432835d0 100644 --- a/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml +++ b/scripts/helmcharts/openreplay/charts/utilities/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -AppVersion: "v1.5.2" +AppVersion: "v1.5.3" diff --git a/scripts/helmcharts/vars.yaml b/scripts/helmcharts/vars.yaml index a09b0647d..25d6a67d6 100644 --- a/scripts/helmcharts/vars.yaml +++ b/scripts/helmcharts/vars.yaml @@ -1,4 +1,4 @@ -fromVersion: "v1.5.2" +fromVersion: "v1.5.3" # Databases specific variables postgresql: &postgres # For generating passwords From 235093cf539308fc55769ebe16a4629cdaad781a Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Wed, 9 Mar 2022 12:49:45 +0100 Subject: [PATCH 19/22] fix(ui) - save funnel from sessions --- .../SaveFunnelButton/SaveFunnelButton.tsx | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/frontend/app/components/shared/SaveFunnelButton/SaveFunnelButton.tsx b/frontend/app/components/shared/SaveFunnelButton/SaveFunnelButton.tsx index c68c451d0..2dfd76ee3 100644 --- a/frontend/app/components/shared/SaveFunnelButton/SaveFunnelButton.tsx +++ b/frontend/app/components/shared/SaveFunnelButton/SaveFunnelButton.tsx @@ -1,14 +1,24 @@ import React, { useState } from 'react'; import { IconButton } from 'UI'; import FunnelSaveModal from 'App/components/Funnels/FunnelSaveModal'; - -export default function SaveFunnelButton() { +import { connect } from 'react-redux'; +import { init } from 'Duck/funnels'; +interface Props { + filter: any + init: (instance: any) => void +} +function SaveFunnelButton(props: Props) { const [showModal, setshowModal] = useState(false) + + const handleClick = () => { + props.init({ filter: props.filter }) + setshowModal(true) + } return (
setshowModal(true)} primaryText label="SAVE FUNNEL" icon="funnel" + onClick={handleClick} primaryText label="SAVE FUNNEL" icon="funnel" /> ) } + +export default connect(state => ({ + filter: state.getIn(['search', 'instance']), +}), { init })(SaveFunnelButton); \ No newline at end of file From 5e940c6adb5d1e4a9ec7183a025038d1f611dce4 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Wed, 9 Mar 2022 13:09:00 +0100 Subject: [PATCH 20/22] fix(ui) - funnel data range and data reload on funnel change --- .../Funnels/FunnelHeader/FunnelHeader.js | 31 ++++++++----------- frontend/app/duck/funnelFilters.js | 4 +-- frontend/app/duck/search.js | 1 - 3 files changed, 15 insertions(+), 21 deletions(-) diff --git a/frontend/app/components/Funnels/FunnelHeader/FunnelHeader.js b/frontend/app/components/Funnels/FunnelHeader/FunnelHeader.js index 5d4f6adf6..a94845294 100644 --- a/frontend/app/components/Funnels/FunnelHeader/FunnelHeader.js +++ b/frontend/app/components/Funnels/FunnelHeader/FunnelHeader.js @@ -1,7 +1,7 @@ import React, { useEffect, useState } from 'react'; import { Icon, BackLink, IconButton, Dropdown, Popup, TextEllipsis, Button } from 'UI'; import { remove as deleteFunnel, fetch, fetchInsights, fetchIssuesFiltered, fetchSessionsFiltered } from 'Duck/funnels'; -import { applyFilter } from 'Duck/funnelFilters'; +import { editFilter, addFilter } from 'Duck/funnels'; import DateRange from 'Shared/DateRange'; import { connect } from 'react-redux'; import { confirm } from 'UI/Confirmation'; @@ -18,23 +18,18 @@ const Info = ({ label = '', value = '', className = 'mx-4' }) => { } const FunnelHeader = (props) => { - const { funnelFilters, funnel, insights, funnels, onBack, funnelId, showFilters = false, renameHandler } = props; + const { funnel, insights, funnels, onBack, funnelId, showFilters = false, renameHandler } = props; const [showSaveModal, setShowSaveModal] = useState(false) - const writeOption = (e, { name, value }) => { + const writeOption = (e, { name, value }) => { props.fetch(value) + props.fetchInsights(value, {}) + props.fetchIssuesFiltered(value, {}) + props.fetchSessionsFiltered(value, {}) props.redirect(value) } - useEffect(() => { - if (funnel.funnelId && funnel.funnelId !== funnelId) { - props.fetchInsights(funnel.funnelId, {}) - props.fetchIssuesFiltered(funnel.funnelId, {}) - props.fetchSessionsFiltered(funnel.funnelId, {}) - } - }, [funnel]) - const deleteFunnel = async (e, funnel) => { e.preventDefault(); e.stopPropagation(); @@ -49,7 +44,7 @@ const FunnelHeader = (props) => { } const onDateChange = (e) => { - props.applyFilter(e, funnel.funnelId) + props.editFilter(e, funnel.funnelId); } const options = funnels.map(({ funnelId, name }) => ({ text: name, value: funnelId })).toJS(); @@ -75,7 +70,7 @@ const FunnelHeader = (props) => { className={ stl.dropdown } name="funnel" value={ parseInt(funnelId) } - icon={null} + // icon={null} onChange={ writeOption } selectOnBlur={false} icon={ } @@ -104,9 +99,9 @@ const FunnelHeader = (props) => { />
@@ -117,5 +112,5 @@ const FunnelHeader = (props) => { } export default connect(state => ({ - funnelFilters: state.getIn([ 'funnels', 'instance' ]), -}), { applyFilter, deleteFunnel, fetch, fetchInsights, fetchIssuesFiltered, fetchSessionsFiltered })(FunnelHeader) + funnel: state.getIn([ 'funnels', 'instance' ]), +}), { editFilter, deleteFunnel, fetch, fetchInsights, fetchIssuesFiltered, fetchSessionsFiltered })(FunnelHeader) diff --git a/frontend/app/duck/funnelFilters.js b/frontend/app/duck/funnelFilters.js index 468887afb..298cdd445 100644 --- a/frontend/app/duck/funnelFilters.js +++ b/frontend/app/duck/funnelFilters.js @@ -112,9 +112,9 @@ const reducer = (state = initialState, action = {}) => { return action.fromUrl ? state.set('appliedFilter', Filter(action.filter) - .set('events', state.getIn([ 'appliedFilter', 'events' ])) + // .set('events', state.getIn([ 'appliedFilter', 'events' ])) ) - : state.mergeIn(['instance'], action.filter); + : state.mergeIn(['instance', 'filter'], action.filter); case ADD_CUSTOM_FILTER: return state.update('customFilters', vars => vars.set(action.filter, action.value)); case REMOVE_CUSTOM_FILTER: diff --git a/frontend/app/duck/search.js b/frontend/app/duck/search.js index cf742e556..3d15ae950 100644 --- a/frontend/app/duck/search.js +++ b/frontend/app/duck/search.js @@ -60,7 +60,6 @@ function reducer(state = initialState, action = {}) { case EDIT: return state.mergeIn(['instance'], action.instance); case APPLY: - console.log('APPLY', action.filter); return action.fromUrl ? state.set('instance', Filter(action.filter)) : state.mergeIn(['instance'], action.filter); From a99d32c8f1fdb0db566d861dc06c1e45f799072a Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Wed, 9 Mar 2022 13:15:21 +0100 Subject: [PATCH 21/22] feat(api): optimized errors-stats query --- api/chalicelib/core/errors.py | 32 +++++++++++++++----------------- ee/api/chalicelib/core/errors.py | 30 ++++++++++++++---------------- 2 files changed, 29 insertions(+), 33 deletions(-) diff --git a/api/chalicelib/core/errors.py b/api/chalicelib/core/errors.py index 2bd4a8d80..48e6b7bd9 100644 --- a/api/chalicelib/core/errors.py +++ b/api/chalicelib/core/errors.py @@ -754,22 +754,20 @@ def format_first_stack_frame(error): def stats(project_id, user_id, startTimestamp=TimeUTC.now(delta_days=-7), endTimestamp=TimeUTC.now()): with pg_client.PostgresClient() as cur: query = cur.mogrify( - """ - SELECT COUNT(errors.*) AS unresolved_and_unviewed - FROM public.errors - INNER JOIN (SELECT root_error.error_id - FROM events.errors - INNER JOIN public.errors AS root_error USING (error_id) - WHERE project_id = %(project_id)s - AND timestamp >= %(startTimestamp)s - AND timestamp <= %(endTimestamp)s - AND source = 'js_exception') AS timed_errors USING (error_id) - LEFT JOIN (SELECT error_id FROM public.user_viewed_errors WHERE user_id = %(user_id)s) AS user_viewed - USING (error_id) - WHERE user_viewed.error_id ISNULL - AND errors.project_id = %(project_id)s - AND errors.status = 'unresolved' - AND errors.source = 'js_exception';""", + """WITH user_viewed AS (SELECT error_id FROM public.user_viewed_errors WHERE user_id = %(user_id)s) + SELECT COUNT(timed_errors.*) AS unresolved_and_unviewed + FROM (SELECT root_error.error_id + FROM events.errors + INNER JOIN public.errors AS root_error USING (error_id) + LEFT JOIN user_viewed USING (error_id) + WHERE project_id = %(project_id)s + AND timestamp >= %(startTimestamp)s + AND timestamp <= %(endTimestamp)s + AND source = 'js_exception' + AND root_error.status = 'unresolved' + AND user_viewed.error_id ISNULL + LIMIT 1 + ) AS timed_errors;""", {"project_id": project_id, "user_id": user_id, "startTimestamp": startTimestamp, "endTimestamp": endTimestamp}) cur.execute(query=query) @@ -777,4 +775,4 @@ def stats(project_id, user_id, startTimestamp=TimeUTC.now(delta_days=-7), endTim return { "data": helper.dict_to_camel_case(row) - } \ No newline at end of file + } diff --git a/ee/api/chalicelib/core/errors.py b/ee/api/chalicelib/core/errors.py index b25efee7b..04efdbb32 100644 --- a/ee/api/chalicelib/core/errors.py +++ b/ee/api/chalicelib/core/errors.py @@ -766,22 +766,20 @@ def format_first_stack_frame(error): def stats(project_id, user_id, startTimestamp=TimeUTC.now(delta_days=-7), endTimestamp=TimeUTC.now()): with pg_client.PostgresClient() as cur: query = cur.mogrify( - """ - SELECT COUNT(errors.*) AS unresolved_and_unviewed - FROM public.errors - INNER JOIN (SELECT root_error.error_id - FROM events.errors - INNER JOIN public.errors AS root_error USING (error_id) - WHERE project_id = %(project_id)s - AND timestamp >= %(startTimestamp)s - AND timestamp <= %(endTimestamp)s - AND source = 'js_exception') AS timed_errors USING (error_id) - LEFT JOIN (SELECT error_id FROM public.user_viewed_errors WHERE user_id = %(user_id)s) AS user_viewed - USING (error_id) - WHERE user_viewed.error_id ISNULL - AND errors.project_id = %(project_id)s - AND errors.status = 'unresolved' - AND errors.source = 'js_exception';""", + """WITH user_viewed AS (SELECT error_id FROM public.user_viewed_errors WHERE user_id = %(user_id)s) + SELECT COUNT(timed_errors.*) AS unresolved_and_unviewed + FROM (SELECT root_error.error_id + FROM events.errors + INNER JOIN public.errors AS root_error USING (error_id) + LEFT JOIN user_viewed USING (error_id) + WHERE project_id = %(project_id)s + AND timestamp >= %(startTimestamp)s + AND timestamp <= %(endTimestamp)s + AND source = 'js_exception' + AND root_error.status = 'unresolved' + AND user_viewed.error_id ISNULL + LIMIT 1 + ) AS timed_errors;""", {"project_id": project_id, "user_id": user_id, "startTimestamp": startTimestamp, "endTimestamp": endTimestamp}) cur.execute(query=query) From cd20003a45e9f5ad4205a898ff2c7418118c6a5a Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Wed, 9 Mar 2022 13:27:56 +0100 Subject: [PATCH 22/22] feat(api): upgrade python base image feat(alerts): upgrade python base image --- api/Dockerfile | 2 +- api/Dockerfile.alerts | 2 +- api/Dockerfile.bundle | 2 +- ee/api/Dockerfile | 2 +- ee/api/Dockerfile.alerts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/Dockerfile b/api/Dockerfile index a8d6210a0..780518ff3 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9.7-slim +FROM python:3.9.10-slim LABEL Maintainer="Rajesh Rajendran" LABEL Maintainer="KRAIEM Taha Yassine" WORKDIR /work diff --git a/api/Dockerfile.alerts b/api/Dockerfile.alerts index 7bff6a9dc..ed8f06eac 100644 --- a/api/Dockerfile.alerts +++ b/api/Dockerfile.alerts @@ -1,4 +1,4 @@ -FROM python:3.9.7-slim +FROM python:3.9.10-slim LABEL Maintainer="Rajesh Rajendran" LABEL Maintainer="KRAIEM Taha Yassine" WORKDIR /work diff --git a/api/Dockerfile.bundle b/api/Dockerfile.bundle index a1577d8c3..e5ccd23f6 100644 --- a/api/Dockerfile.bundle +++ b/api/Dockerfile.bundle @@ -1,4 +1,4 @@ -FROM python:3.9.7-slim +FROM python:3.9.10-slim LABEL Maintainer="Rajesh Rajendran" WORKDIR /work COPY . . diff --git a/ee/api/Dockerfile b/ee/api/Dockerfile index 284d752ff..cca6e6806 100644 --- a/ee/api/Dockerfile +++ b/ee/api/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9.7-slim +FROM python:3.9.10-slim LABEL Maintainer="Rajesh Rajendran" LABEL Maintainer="KRAIEM Taha Yassine" RUN apt-get update && apt-get install -y pkg-config libxmlsec1-dev gcc && rm -rf /var/lib/apt/lists/* diff --git a/ee/api/Dockerfile.alerts b/ee/api/Dockerfile.alerts index 5809de5e6..9be6ebc93 100644 --- a/ee/api/Dockerfile.alerts +++ b/ee/api/Dockerfile.alerts @@ -1,4 +1,4 @@ -FROM python:3.9.7-slim +FROM python:3.9.10-slim LABEL Maintainer="Rajesh Rajendran" LABEL Maintainer="KRAIEM Taha Yassine" RUN apt-get update && apt-get install -y pkg-config libxmlsec1-dev gcc && rm -rf /var/lib/apt/lists/*