Skip to content

Commit d906e6b

Browse files
authored
Merge pull request #6 from TechArtists/multiple-project-source
Multiple project source
2 parents 7a9c797 + cc8c9bf commit d906e6b

File tree

6 files changed

+40
-40
lines changed

6 files changed

+40
-40
lines changed

analyses/measure_dimension_rollup_explosion.sql

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@
55
] -%}
66

77

8-
{%- set miniColumnsToIgnoreInGroupBy = ta_firebase..get_mini_columns_to_ignore_when_rolling_up() -%}
8+
{%- set miniColumnsToIgnoreInGroupBy = ta_firebase.get_mini_columns_to_ignore_when_rolling_up() -%}
99

1010
{# Ignore all time zones except the first & last (they're all the same, just save the computational effort) #}
11-
{%- set timezones = ta_firebase..generate_date_timezone_age_struct('dont care') | map(attribute=0) | list -%}
11+
{%- set timezones = ta_firebase.generate_date_timezone_age_struct('dont care') | map(attribute=0) | list -%}
1212
{%- set timezones = timezones[1:-1] -%}
13-
{%- set miniColumnsToIgnoreInGroupBy = miniColumnsToIgnoreInGroupBy + ta_firebase..list_map_and_add_prefix(timezones, 'event_dates.') + ta_firebase..list_map_and_add_prefix(timezones, 'install_dates.') -%}
13+
{%- set miniColumnsToIgnoreInGroupBy = miniColumnsToIgnoreInGroupBy + ta_firebase.list_map_and_add_prefix(timezones, 'event_dates.') + ta_firebase.list_map_and_add_prefix(timezones, 'install_dates.') -%}
1414

1515

16-
{%- set tmp_res = ta_firebase..get_filtered_columns_for_table("fb_analytics_events_raw", columnNamesEventDimensions, miniColumnsToIgnoreInGroupBy) -%}
16+
{%- set tmp_res = ta_firebase.get_filtered_columns_for_table("fb_analytics_events_raw", columnNamesEventDimensions, miniColumnsToIgnoreInGroupBy) -%}
1717
{%- set columnsForEventDimensions = tmp_res[0] -%}
1818

1919

20-
{%- set minicolumns = ta_firebase..unpack_columns_into_minicolumns_array(columnsForEventDimensions, miniColumnsToIgnoreInGroupBy, [], "", "") -%}
20+
{%- set minicolumns = ta_firebase.unpack_columns_into_minicolumns_array(columnsForEventDimensions, miniColumnsToIgnoreInGroupBy, [], "", "") -%}
2121
{%- set unionAllSelects = [] -%}
2222

2323
WITH

macros/generate_struct_parameters_for_raw.sql

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
{% macro generate_struct_for_raw_user_properties() -%}
2-
{{ overbase_firebase.generate_struct(overbase_firebase.get_user_property_tuples_all(), 'user_properties') }}
2+
{{ ta_firebase.generate_struct(ta_firebase.get_user_property_tuples_all(), 'user_properties') }}
33
{%- endmacro%}
44

55
{% macro generate_struct_for_raw_event_parameters() -%}
6-
{{ overbase_firebase.generate_struct(overbase_firebase.get_event_parameter_tuples_for_raw(), 'event_params') }}
6+
{{ ta_firebase.generate_struct(ta_firebase.get_event_parameter_tuples_for_raw(), 'event_params') }}
77
{%- endmacro%}
88

99
{% macro generate_struct_for_raw_crashlytics_custom_keys() -%}
10-
{{ overbase_firebase.generate_struct(overbase_firebase.get_crashlytics_custom_key_tuples_all(), 'custom_keys') }}
10+
{{ ta_firebase.generate_struct(ta_firebase.get_crashlytics_custom_key_tuples_all(), 'custom_keys') }}
1111
{%- endmacro%}
1212

1313

1414
{% macro generate_struct(all_parameters, firebase_record_name) -%}
15-
{{ return(adapter.dispatch('generate_struct', 'overbase_firebase')(all_parameters, firebase_record_name) ) }}
15+
{{ return(adapter.dispatch('generate_struct', 'ta_firebase')(all_parameters, firebase_record_name) ) }}
1616
{%- endmacro %}
1717

1818

@@ -33,7 +33,7 @@
3333
{% for parameter in all_parameters -%}
3434
{%- set key_name = parameter['key_name'] -%}
3535
{%- set extract_transformation = parameter['extract_transformation'] -%}
36-
{%- set event_name_condition = overbase_firebase.makeListIntoSQLInFilter("event_name", parameter['event_name_filter']) -%}
36+
{%- set event_name_condition = ta_firebase.makeListIntoSQLInFilter("event_name", parameter['event_name_filter']) -%}
3737
{%- set _ = structValues.append("(SELECT IF(" ~ event_name_condition ~ "," ~ extract_transformation ~ ",NULL) FROM UNNEST(" ~ firebase_record_name ~ ") WHERE key = '" ~ key_name + "')") -%}
3838
{%- endfor -%}
3939
{%- if structFieldNames|length > 0 -%}

macros/ta_mandatory_vars.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
-- the default value is meant only to be used within this project, as test values
33
{% macro compile_time_mandatory_var(variable_name, default_value_in_ta) -%}
44
{% if var(variable_name, default_value_in_ta) == default_value_in_ta and env_var('DBT_INSIDE_TA','')|length == 0 -%}
5-
{{ exceptions.raise_compiler_error("Variable '%s' must be overwritten inside your dbt_project.yml. Check the Overbase documentation to see all mandatory variables" % variable_name) }}
5+
{{ exceptions.raise_compiler_error("Variable '%s' must be overwritten inside your dbt_project.yml. Check the TA documentation to see all mandatory variables" % variable_name) }}
66
{% else %}
77
{%- endif %}
88
{%- endmacro %}

models/analytics/fb_analytics_ui_wid.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@
1313

1414
SELECT *
1515
FROM {{ ref("fb_analytics_events_wid") }}
16-
WHERE event_name IN ('ta_ui_view_shown', 'ta_ui_button_tapped', 'ui_view_shown', 'ui_button_tapped')
16+
WHERE event_name IN ('ta_ui_view_show', 'ta_ui_button_tapped', 'ui_view_show', 'ui_button_tapped')
1717
AND {{ ta_firebase.analyticsDateFilterFor('event_date') }}
1818

1919
UNION ALL
2020

2121
SELECT *
2222
FROM {{ ref("fb_analytics_events_wid_forced_nulls") }}
23-
WHERE event_name IN ('ta_ui_view_shown', 'ta_ui_button_tapped', 'ui_view_shown', 'ui_button_tapped')
23+
WHERE event_name IN ('ta_ui_view_show', 'ta_ui_button_tapped', 'ui_view_show', 'ui_button_tapped')
2424
AND {{ ta_firebase.analyticsDateFilterFor('event_date') }}

models/app_health/app_health.sql

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,19 @@
1313
{# mini_measures": ["cnt", "users"] are implicit in all of them, as the default #}
1414
{%- set builtinMeasures = [
1515
{"model": "analytics", "name":"user_engagement" , "agg": "SUM(##)", "event_name": "user_engagement"},
16-
{"model": "analytics", "name":"ob_app_foreground", "agg": "SUM(##)", "event_name": "ob_app_foreground"},
17-
{"model": "analytics", "name":"ob_app_background", "agg": "SUM(##)", "event_name": "ob_app_background"},
16+
{"model": "analytics", "name":"ta_app_foreground", "agg": "SUM(##)", "event_name": "ta_app_foreground"},
17+
{"model": "analytics", "name":"ta_app_background", "agg": "SUM(##)", "event_name": "ta_app_background"},
1818
{"model": "analytics", "name":"app_update" , "agg": "SUM(##)", "event_name": "app_update"},
19-
{"model": "analytics", "name":"ob_app_update", "agg": "SUM(##)", "event_name": "ob_app_update"},
19+
{"model": "analytics", "name":"ta_app_update", "agg": "SUM(##)", "event_name": "ta_app_update"},
2020
{"model": "analytics", "name":"errors" , "agg": "SUM(##)", "event_name": "LIKE 'error_%'"},
21-
{"model": "analytics", "name":"ob_errors" , "agg": "SUM(##)", "event_name": "LIKE 'ob_error_%'"},
21+
{"model": "analytics", "name":"ta_errors" , "agg": "SUM(##)", "event_name": "LIKE 'ta_error_%'"},
2222

2323
{"model": "crashlytics", "name":"crashlytics_all_errors", "agg": "SUM(##)"},
2424
{"model": "crashlytics", "name":"fatal_crashes", "agg": "SUM(##)", "additional_filter": "error_type = 'FATAL'"},
2525
{"model": "crashlytics", "name":"fatal_foreground_crashes", "agg": "SUM(##)", "additional_filter": "error_type = 'FATAL' AND process_state = 'FOREGROUND'"},
2626
{"model": "crashlytics", "name":"fatal_background_crashes", "agg": "SUM(##)", "additional_filter": "error_type = 'FATAL' AND process_state = 'BACKGROUND' "}
2727
] %}
28-
{%- set allUnprocessedHealthMeasures = builtinMeasures + var("OVERBASE:CUSTOM_APP_HEALTH_MEASURES", []) %}
28+
{%- set allUnprocessedHealthMeasures = builtinMeasures + var("TA:CUSTOM_APP_HEALTH_MEASURES", []) %}
2929
{%- set allAnalyticsEventNames = set([]) -%}
3030
{%- set allAnalyticsForcedNullEventNames = set([]) -%}
3131
{%- for customHealthMeasure in allUnprocessedHealthMeasures -%}
@@ -74,8 +74,8 @@ WITH analytics AS (
7474
{% endfor -%}
7575
, {{ custom_summed_measures | selectattr("model", "equalto", "analytics") | map(attribute='agg')|join("\n , ") }}
7676
FROM {{ ref("fb_analytics_events") }}
77-
WHERE {{ overbase_firebase.analyticsDateFilterFor('event_date') }}
78-
AND {{ overbase_firebase.makeListIntoSQLInFilter("event_name", allAnalyticsEventNames| list) }}
77+
WHERE {{ ta_firebase.analyticsDateFilterFor('event_date') }}
78+
AND {{ ta_firebase.makeListIntoSQLInFilter("event_name", allAnalyticsEventNames| list) }}
7979
GROUP BY {{ range(1, 1 + commonDimensionsAndAliases | length) | list | join(",") }}
8080
)
8181
, analyticsForcedNulls AS (
@@ -86,11 +86,11 @@ WITH analytics AS (
8686
, {{ measure }}
8787
{%- endfor %}
8888
FROM {{ ref("fb_analytics_events_forced_nulls") }}
89-
WHERE {{ overbase_firebase.analyticsDateFilterFor('event_date') }}
89+
WHERE {{ ta_firebase.analyticsDateFilterFor('event_date') }}
9090
{% if allAnalyticsForcedNullEventNames | length == 0 -%}
9191
AND False
9292
{%- else -%}
93-
AND {{ overbase_firebase.makeListIntoSQLInFilter("event_name", allAnalyticsForcedNullEventNames| list) }}
93+
AND {{ ta_firebase.makeListIntoSQLInFilter("event_name", allAnalyticsForcedNullEventNames| list) }}
9494
{%- endif %}
9595
GROUP BY {{ range(1, 1 + commonDimensionsAndAliases | length) | list | join(",") }}
9696
)
@@ -100,7 +100,7 @@ WITH analytics AS (
100100
{% endfor -%}
101101
, SUM(users) as users
102102
FROM {{ ref("fb_analytics_installs") }}
103-
WHERE {{ overbase_firebase.analyticsDateFilterFor('event_date') }}
103+
WHERE {{ ta_firebase.analyticsDateFilterFor('event_date') }}
104104
GROUP BY {{ range(1, 1 + commonDimensionsAndAliases | length) | list | join(",") }}
105105
)
106106
, crashlytics AS (
@@ -109,7 +109,7 @@ WITH analytics AS (
109109
{% endfor -%}
110110
, {{ custom_summed_measures | selectattr("model", "equalto", "crashlytics") | map(attribute='agg')|join("\n , ") }}
111111
FROM {{ ref("fb_crashlytics_events") }}
112-
WHERE {{ overbase_firebase.crashlyticsDateFilterFor('event_date') }}
112+
WHERE {{ ta_firebase.crashlyticsDateFilterFor('event_date') }}
113113
GROUP BY {{ range(1, 1 + commonDimensionsAndAliases | length) | list | join(",") }}
114114
)
115115
, joined_unpacked AS (
@@ -136,13 +136,13 @@ SELECT event_date
136136
, platform
137137
, app_id
138138
, reverse_app_id
139-
, {{ overbase_firebase.get_version_record_from_normalized('app_version_join_value') }} AS app_version
140-
, {{ overbase_firebase.get_version_record_from_normalized('platform_version_join_value') }} AS platform_version
139+
, {{ ta_firebase.get_version_record_from_normalized('app_version_join_value') }} AS app_version
140+
, {{ ta_firebase.get_version_record_from_normalized('platform_version_join_value') }} AS platform_version
141141
, STRUCT<type STRING, manufacturer STRING, os_model STRING>(
142142
device_hardware_type, device_hardware_manufacturer, device_hardware_os_model
143143
) as device_hardware
144144
, installs
145-
, {{ overbase_firebase.list_map_and_add_prefix(custom_summed_measures | map(attribute='alias')) | join("\n ,") }}
145+
, {{ ta_firebase.list_map_and_add_prefix(custom_summed_measures | map(attribute='alias')) | join("\n ,") }}
146146

147147
FROM joined_unpacked
148148

models/crashlytics/fb_crashlytics_events_raw.sql

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{{ overbase_firebase.verify_all_overbase_mandatory_variables() }}
1+
{{ ta_firebase.verify_all_ta_mandatory_variables() }}
22

33
{{ config(
44
materialized='incremental',
@@ -13,8 +13,8 @@
1313

1414
-- https://firebase.google.com/docs/crashlytics/bigquery-export#without_stack_traces
1515

16-
{% set projects = var('OVERBASE:SOURCES', []) %}
17-
{% set ready = var('OVERBASE:SOURCES_READY', false) %}
16+
{% set projects = var('TA:SOURCES', []) %}
17+
{% set ready = var('TA:SOURCES_READY', false) %}
1818

1919
{% set first = projects[0] if projects and (projects[0] is mapping) else {} %}
2020
{% set pid0 = first.get('project_id', 'fallback_project') %}
@@ -51,17 +51,17 @@
5151
) as orientation
5252
, STRUCT<firebase_value STRING, build_no STRING, major INT64, minor INT64, bugfix INT64, major_minor FLOAT64, major_minor_bugfix STRING, normalized INT64, join_value STRING>(
5353
{%- set v = "application.display_version" -%}
54-
{{ v }}, application.build_version, {{ overbase_firebase.get_version(v, "major") }}, {{ overbase_firebase.get_version(v, "minor") }}, {{ overbase_firebase.get_version(v, "bugfix") }}, {{ overbase_firebase.get_version(v, "major.minor") }}, {{ overbase_firebase.get_version(v, "major.minor.bugfix") }}, {{ overbase_firebase.get_version(v, "normalized") }}, COALESCE(CAST({{ overbase_firebase.get_version(v, "normalized") }} AS STRING), {{ v }} )
54+
{{ v }}, application.build_version, {{ ta_firebase.get_version(v, "major") }}, {{ ta_firebase.get_version(v, "minor") }}, {{ ta_firebase.get_version(v, "bugfix") }}, {{ ta_firebase.get_version(v, "major.minor") }}, {{ ta_firebase.get_version(v, "major.minor.bugfix") }}, {{ ta_firebase.get_version(v, "normalized") }}, COALESCE(CAST({{ ta_firebase.get_version(v, "normalized") }} AS STRING), {{ v }} )
5555
) AS app_version
5656
, STRUCT<firebase_value STRING, name STRING, major INT64, minor INT64, bugfix INT64, major_minor FLOAT64, major_minor_bugfix STRING, normalized INT64, join_value STRING>(
5757
{%- set v = "operating_system.display_version" -%}
58-
{{ v }}, operating_system.name, {{ overbase_firebase.get_version(v, "major") }}, {{ overbase_firebase.get_version(v, "minor") }}, {{ overbase_firebase.get_version(v, "bugfix") }}, {{ overbase_firebase.get_version(v, "major.minor") }}, {{ overbase_firebase.get_version(v, "major.minor.bugfix") }}, {{ overbase_firebase.get_version(v, "normalized") }}, COALESCE(CAST( {{ overbase_firebase.get_version(v, "normalized") }} AS STRING), {{ v }} )
58+
{{ v }}, operating_system.name, {{ ta_firebase.get_version(v, "major") }}, {{ ta_firebase.get_version(v, "minor") }}, {{ ta_firebase.get_version(v, "bugfix") }}, {{ ta_firebase.get_version(v, "major.minor") }}, {{ ta_firebase.get_version(v, "major.minor.bugfix") }}, {{ ta_firebase.get_version(v, "normalized") }}, COALESCE(CAST( {{ ta_firebase.get_version(v, "normalized") }} AS STRING), {{ v }} )
5959
) AS platform_version
6060
, operating_system.modification_state as jailbroken_state
6161
, STRUCT<type STRING, manufacturer STRING, os_model STRING, architecture STRING>(
6262
LOWER(operating_system.device_type), LOWER(device.manufacturer), LOWER(device.model), device.architecture
6363
) AS device_hardware
64-
, {{ overbase_firebase.generate_struct_for_raw_crashlytics_custom_keys() }} as custom_keys
64+
, {{ ta_firebase.generate_struct_for_raw_crashlytics_custom_keys() }} as custom_keys
6565
, custom_keys as custom_keys_raw
6666
, STRUCT<used_bytes INT64, free_bytes INT64>(memory.used, memory.free) as memory
6767
, STRUCT<used_bytes INT64, free_bytes INT64>(storage.used, storage.free) as storage
@@ -87,14 +87,14 @@
8787
+ screen_refresh_rate
8888
Those values are NULLed for the time being
8989
#}
90-
{{ overbase_firebase.list_map_and_add_prefix([
90+
{{ ta_firebase.list_map_and_add_prefix([
9191
"unity_version","debug_build","processor_type","processor_count",none,none,none,"graphics_device_id","graphics_device_vendor_id","graphics_device_name","graphics_device_vendor","graphics_device_version","graphics_device_type","graphics_shader_level","graphics_render_target_count","graphics_copy_texture_support","graphics_max_texture_size",none,none,none,"processor_frequency_mhz","system_memory_size_mb","graphics_memory_size_mb","screen_size_px","screen_refresh_rate_hz","screen_resolution_dpi"
9292
], "unity_metadata." )| join(", ") }}
9393
) AS unity_metadata
9494
, COUNT(1) OVER (PARTITION BY installation_uuid, event_id, variant_id) as duplicates_cnt
9595
9696
FROM {{ source('firebase_crashlytics__fallback', 'events') }}
97-
WHERE {{ overbase_firebase.crashlyticsTSFilterFor("event_timestamp") }}
97+
WHERE {{ ta_firebase.crashlyticsTSFilterFor("event_timestamp") }}
9898
QUALIFY ROW_NUMBER() OVER (PARTITION BY crashlytics_user_pseudo_id, event_id, variant_id ORDER BY received_ts) = 1
9999
100100
{% else %}
@@ -133,17 +133,17 @@
133133
) as orientation
134134
, STRUCT<firebase_value STRING, build_no STRING, major INT64, minor INT64, bugfix INT64, major_minor FLOAT64, major_minor_bugfix STRING, normalized INT64, join_value STRING>(
135135
{%- set v = "application.display_version" -%}
136-
{{ v }}, application.build_version, {{ overbase_firebase.get_version(v, "major") }}, {{ overbase_firebase.get_version(v, "minor") }}, {{ overbase_firebase.get_version(v, "bugfix") }}, {{ overbase_firebase.get_version(v, "major.minor") }}, {{ overbase_firebase.get_version(v, "major.minor.bugfix") }}, {{ overbase_firebase.get_version(v, "normalized") }}, COALESCE(CAST({{ overbase_firebase.get_version(v, "normalized") }} AS STRING), {{ v }} )
136+
{{ v }}, application.build_version, {{ ta_firebase.get_version(v, "major") }}, {{ ta_firebase.get_version(v, "minor") }}, {{ ta_firebase.get_version(v, "bugfix") }}, {{ ta_firebase.get_version(v, "major.minor") }}, {{ ta_firebase.get_version(v, "major.minor.bugfix") }}, {{ ta_firebase.get_version(v, "normalized") }}, COALESCE(CAST({{ ta_firebase.get_version(v, "normalized") }} AS STRING), {{ v }} )
137137
) AS app_version
138138
, STRUCT<firebase_value STRING, name STRING, major INT64, minor INT64, bugfix INT64, major_minor FLOAT64, major_minor_bugfix STRING, normalized INT64, join_value STRING>(
139139
{%- set v = "operating_system.display_version" -%}
140-
{{ v }}, operating_system.name, {{ overbase_firebase.get_version(v, "major") }}, {{ overbase_firebase.get_version(v, "minor") }}, {{ overbase_firebase.get_version(v, "bugfix") }}, {{ overbase_firebase.get_version(v, "major.minor") }}, {{ overbase_firebase.get_version(v, "major.minor.bugfix") }}, {{ overbase_firebase.get_version(v, "normalized") }}, COALESCE(CAST( {{ overbase_firebase.get_version(v, "normalized") }} AS STRING), {{ v }} )
140+
{{ v }}, operating_system.name, {{ ta_firebase.get_version(v, "major") }}, {{ ta_firebase.get_version(v, "minor") }}, {{ ta_firebase.get_version(v, "bugfix") }}, {{ ta_firebase.get_version(v, "major.minor") }}, {{ ta_firebase.get_version(v, "major.minor.bugfix") }}, {{ ta_firebase.get_version(v, "normalized") }}, COALESCE(CAST( {{ ta_firebase.get_version(v, "normalized") }} AS STRING), {{ v }} )
141141
) AS platform_version
142142
, operating_system.modification_state as jailbroken_state
143143
, STRUCT<type STRING, manufacturer STRING, os_model STRING, architecture STRING>(
144144
LOWER(operating_system.device_type), LOWER(device.manufacturer), LOWER(device.model), device.architecture
145145
) AS device_hardware
146-
, {{ overbase_firebase.generate_struct_for_raw_crashlytics_custom_keys() }} as custom_keys
146+
, {{ ta_firebase.generate_struct_for_raw_crashlytics_custom_keys() }} as custom_keys
147147
, custom_keys as custom_keys_raw
148148
, STRUCT<used_bytes INT64, free_bytes INT64>(memory.used, memory.free) as memory
149149
, STRUCT<used_bytes INT64, free_bytes INT64>(storage.used, storage.free) as storage
@@ -169,14 +169,14 @@
169169
+ screen_refresh_rate
170170
Those values are NULLed for the time being
171171
#}
172-
{{ overbase_firebase.list_map_and_add_prefix([
172+
{{ ta_firebase.list_map_and_add_prefix([
173173
"unity_version","debug_build","processor_type","processor_count",none,none,none,"graphics_device_id","graphics_device_vendor_id","graphics_device_name","graphics_device_vendor","graphics_device_version","graphics_device_type","graphics_shader_level","graphics_render_target_count","graphics_copy_texture_support","graphics_max_texture_size",none,none,none,"processor_frequency_mhz","system_memory_size_mb","graphics_memory_size_mb","screen_size_px","screen_refresh_rate_hz","screen_resolution_dpi"
174174
], "unity_metadata." )| join(", ") }}
175175
) AS unity_metadata
176176
, COUNT(1) OVER (PARTITION BY installation_uuid, event_id, variant_id) as duplicates_cnt
177177

178178
FROM {{ source('firebase_crashlytics__' ~ pid, 'events') }}
179-
WHERE {{ overbase_firebase.crashlyticsTSFilterFor("event_timestamp") }}
179+
WHERE {{ ta_firebase.crashlyticsTSFilterFor("event_timestamp") }}
180180

181181
{% endif %}
182182
QUALIFY ROW_NUMBER() OVER (PARTITION BY crashlytics_user_pseudo_id, event_id, variant_id ORDER BY received_ts) = 1

0 commit comments

Comments
 (0)