@@ -85,6 +85,10 @@ def _load_services() -> list[str]:
8585 return unique
8686
8787
88+ def _run_gcloud (args : list [str ]) -> subprocess .CompletedProcess [str ]:
89+ return subprocess .run (args , text = True , capture_output = True , check = False )
90+
91+
8892def _run_gcloud_logging (project : str , log_filter : str , limit : int ) -> list [dict [str , Any ]]:
8993 command = [
9094 "gcloud" ,
@@ -166,10 +170,46 @@ def _summarize(entry: dict[str, Any]) -> str:
166170 return f"- { timestamp } { target or '<unknown>' } severity={ severity } { status_text } { suffix } "
167171
168172
173+
174+
175+ def _telegram_secret_project () -> str | None :
176+ return (
177+ os .environ .get ("RUNTIME_HEARTBEAT_GCP_PROJECT_ID" )
178+ or os .environ .get ("RUNTIME_GUARD_GCP_PROJECT_ID" )
179+ or os .environ .get ("GCP_PROJECT_ID" )
180+ or os .environ .get ("GOOGLE_CLOUD_PROJECT" )
181+ )
182+
183+
184+ def _load_telegram_token_from_secret () -> str :
185+ secret_name = (os .environ .get ("TELEGRAM_TOKEN_SECRET_NAME" ) or "" ).strip ()
186+ if not secret_name :
187+ return ""
188+ command = ["gcloud" , "secrets" , "versions" , "access" , "latest" , "--secret" , secret_name ]
189+ project = _telegram_secret_project ()
190+ if project :
191+ command .extend (["--project" , project ])
192+ result = _run_gcloud (command )
193+ if result .returncode != 0 :
194+ detail = (result .stderr or result .stdout or "" ).strip ()
195+ print (
196+ f"Unable to read Telegram token from Secret Manager: { detail or 'gcloud failed' } " ,
197+ file = sys .stderr ,
198+ )
199+ return ""
200+ return result .stdout .strip ()
201+
202+
203+ def _telegram_token () -> str :
204+ direct_token = (os .environ .get ("TELEGRAM_TOKEN" ) or os .environ .get ("TG_TOKEN" ) or "" ).strip ()
205+ if direct_token :
206+ return direct_token
207+ return _load_telegram_token_from_secret ()
208+
169209def _send_telegram (message : str ) -> bool :
170210 targets : list [tuple [str , str ]] = []
171211
172- token = os . environ . get ( "TELEGRAM_TOKEN" ) or os . environ . get ( "TG_TOKEN" )
212+ token = _telegram_token ( )
173213 for chat_id in _split_values (os .environ .get ("GLOBAL_TELEGRAM_CHAT_ID" )):
174214 if token :
175215 targets .append ((token , chat_id ))
0 commit comments