@@ -39,13 +39,14 @@ class GleanPing(GenericPing):
3939 "glean_client_info" ,
4040 }
4141
42- def __init__ (self , repo , app_id , ** kwargs ): # TODO: Make env-url optional
42+ def __init__ (self , repo , ** kwargs ): # TODO: Make env-url optional
4343 self .repo = repo
44- self .app_id = app_id
44+ self .repo_name = repo ["name" ]
45+ self .app_id = repo ["app_id" ]
4546 super ().__init__ (
4647 self .schema_url ,
4748 self .schema_url ,
48- self .probes_url_template .format (repo ),
49+ self .probes_url_template .format (self . repo_name ),
4950 ** kwargs ,
5051 )
5152
@@ -57,10 +58,10 @@ def get_dependencies(self):
5758 # map those back to the name of the repository in the repository file.
5859 try :
5960 dependencies = self ._get_json (
60- self .dependencies_url_template .format (self .repo )
61+ self .dependencies_url_template .format (self .repo_name )
6162 )
6263 except HTTPError :
63- logging .info (f"For { self .repo } , using default Glean dependencies" )
64+ logging .info (f"For { self .repo_name } , using default Glean dependencies" )
6465 return self .default_dependencies
6566
6667 dependency_library_names = list (dependencies .keys ())
@@ -77,10 +78,10 @@ def get_dependencies(self):
7778 dependencies .append (repos_by_dependency_name [name ])
7879
7980 if len (dependencies ) == 0 :
80- logging .info (f"For { self .repo } , using default Glean dependencies" )
81+ logging .info (f"For { self .repo_name } , using default Glean dependencies" )
8182 return self .default_dependencies
8283
83- logging .info (f"For { self .repo } , found Glean dependencies: { dependencies } " )
84+ logging .info (f"For { self .repo_name } , found Glean dependencies: { dependencies } " )
8485 return dependencies
8586
8687 def get_probes (self ) -> List [GleanProbe ]:
@@ -109,7 +110,7 @@ def get_probes(self) -> List[GleanProbe]:
109110 "firefox-android-release" ,
110111 }
111112 if (
112- self .repo in issue_118_affected
113+ self .repo_name in issue_118_affected
113114 and probe .get_name () == "installation.timestamp"
114115 ):
115116 logging .info (f"Writing column { probe .get_name ()} for compatibility." )
@@ -134,7 +135,7 @@ def get_probes(self) -> List[GleanProbe]:
134135 return processed
135136
136137 def get_pings (self ) -> Set [str ]:
137- url = self .ping_url_template .format (self .repo )
138+ url = self .ping_url_template .format (self .repo_name )
138139 pings = GleanPing ._get_json (url ).keys ()
139140
140141 for dependency in self .get_dependencies ():
@@ -156,14 +157,19 @@ def generate_schema(
156157 for matcher in matchers .values ():
157158 matcher .matcher ["send_in_pings" ]["contains" ] = ping
158159 new_config = Config (ping , matchers = matchers )
160+ retention_days = self .repo .get ("retention_days" , None )
159161
160- defaults = {
161- "mozPipelineMetadata" : {
162- "bq_dataset_family" : self .app_id .replace ("-" , "_" ),
163- "bq_table" : ping .replace ("-" , "_" ) + "_v1" ,
164- "bq_metadata_format" : "structured" ,
165- }
162+ pipeline_meta = {
163+ "bq_dataset_family" : self .app_id .replace ("-" , "_" ),
164+ "bq_table" : ping .replace ("-" , "_" ) + "_v1" ,
165+ "bq_metadata_format" : "structured" ,
166166 }
167+ if retention_days is not None :
168+ expiration = pipeline_meta .get ("expiration_policy" , {})
169+ expiration ["delete_after_days" ] = int (retention_days )
170+ pipeline_meta ["expiration_policy" ] = expiration
171+
172+ defaults = {"mozPipelineMetadata" : pipeline_meta }
167173
168174 if generic_schema : # Use the generic glean ping schema
169175 schema = self .get_schema ()
@@ -181,11 +187,7 @@ def generate_schema(
181187 @staticmethod
182188 def get_repos ():
183189 """
184- Retrieve name and app_id for Glean repositories
190+ Retrieve metadata for all non-library Glean repositories
185191 """
186192 repos = GleanPing ._get_json (GleanPing .repos_url )
187- return [
188- (repo ["name" ], repo ["app_id" ])
189- for repo in repos
190- if "library_names" not in repo
191- ]
193+ return [repo for repo in repos if "library_names" not in repo ]
0 commit comments