fix(CI5): konverter DatetimeWithNanoseconds til str før _parse_ts
This commit is contained in:
parent
29a03c4342
commit
54dd25a90e
|
|
@ -47,30 +47,27 @@ def _list_builds_rest(project_id: str, region: str, trigger_id: str, page_size:
|
|||
return json.loads(resp.read())
|
||||
|
||||
|
||||
def _parse_ts(ts: str):
|
||||
"""Parser RFC3339-tidsstempel robust, returnerer datetime eller None."""
|
||||
def _parse_ts(ts):
|
||||
"""Parser tidsstempel robust — aksepterer str, DatetimeWithNanoseconds eller datetime."""
|
||||
from datetime import datetime, timezone
|
||||
if not ts:
|
||||
if ts is None:
|
||||
return None
|
||||
# Hvis det allerede er et datetime-objekt (inkl. DatetimeWithNanoseconds)
|
||||
if hasattr(ts, 'year'):
|
||||
if getattr(ts, 'tzinfo', None) is None:
|
||||
return ts.replace(tzinfo=timezone.utc)
|
||||
return ts
|
||||
# Konverter til string og parse RFC3339
|
||||
ts = str(ts).rstrip("Z")
|
||||
try:
|
||||
clean_ts = ts[:19] # YYYY-MM-DDTHH:MM:SS
|
||||
if "." in ts:
|
||||
frac = ts[20:26].split("+")[0].split("-")[0] if len(ts) > 20 else "000000"
|
||||
clean_ts = ts[:19] + "." + frac.ljust(6, "0")[:6]
|
||||
return datetime.strptime(clean_ts, "%Y-%m-%dT%H:%M:%S.%f").replace(tzinfo=timezone.utc)
|
||||
return datetime.strptime(clean_ts, "%Y-%m-%dT%H:%M:%S").replace(tzinfo=timezone.utc)
|
||||
except Exception:
|
||||
return None
|
||||
ts = ts.rstrip("Z")
|
||||
# Fjern eventuell timezone-offset (+00:00) og mikrosekunder
|
||||
for fmt in (
|
||||
"%Y-%m-%dT%H:%M:%S.%f",
|
||||
"%Y-%m-%dT%H:%M:%S",
|
||||
):
|
||||
try:
|
||||
# Klipp bort offset-del før parsing
|
||||
clean = ts.split("+")[0].split("-")[:3]
|
||||
# Rekonstruer uten offset
|
||||
clean_ts = ts[:19] # YYYY-MM-DDTHH:MM:SS
|
||||
if "." in ts:
|
||||
frac = ts[20:26].split("+")[0].split("-")[0] if len(ts) > 20 else "000000"
|
||||
clean_ts = ts[:19] + "." + frac.ljust(6, "0")[:6]
|
||||
return datetime.strptime(clean_ts, "%Y-%m-%dT%H:%M:%S.%f").replace(tzinfo=timezone.utc)
|
||||
return datetime.strptime(clean_ts, "%Y-%m-%dT%H:%M:%S").replace(tzinfo=timezone.utc)
|
||||
except Exception:
|
||||
continue
|
||||
return None
|
||||
|
||||
|
||||
class PushStaticRequest(BaseModel):
|
||||
|
|
@ -197,7 +194,8 @@ async def get_logs(lines: int = 50, severity: str = "DEFAULT", _: bool = Depends
|
|||
for entry in entries:
|
||||
payload = entry.payload
|
||||
text = payload.get("message", str(payload)) if isinstance(payload, dict) else str(payload)
|
||||
log_lines.append({"timestamp": str(entry.timestamp), "severity": str(entry.severity), "text": text[:400]})
|
||||
ts = _parse_ts(entry.timestamp)
|
||||
log_lines.append({"timestamp": ts.isoformat() if ts else str(entry.timestamp), "severity": str(entry.severity), "text": text[:400]})
|
||||
return {"service": CLOUD_RUN_SERVICE, "count": len(log_lines), "logs": log_lines}
|
||||
except Exception as e:
|
||||
logger.error(f"[get_logs] {e}", exc_info=True)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user