2121
2222import httpx
2323import xarray as xr
24+ from metrics import STAC_HTTP_REQUEST_DURATION , STAC_REGISTRATION_TOTAL
2425from tenacity import retry , stop_after_attempt , wait_exponential
2526
2627# Config: override via env vars
@@ -395,7 +396,8 @@ def register_item(
395396 with httpx .Client (timeout = TIMEOUT ) as client :
396397 # Check if item exists
397398 try :
398- response = client .get (item_url , headers = headers )
399+ with STAC_HTTP_REQUEST_DURATION .labels (operation = "get" , endpoint = "item" ).time ():
400+ response = client .get (item_url , headers = headers )
399401 exists = response .status_code == 200
400402 except httpx .HTTPError :
401403 exists = False
@@ -405,34 +407,59 @@ def register_item(
405407
406408 if mode == "create-or-skip" :
407409 logger .info ("Skipping (mode=create-or-skip)" )
410+ STAC_REGISTRATION_TOTAL .labels (
411+ collection = collection_id , operation = "skip" , status = "success"
412+ ).inc ()
408413 return
409414 elif mode in ("upsert" , "update" ):
410415 logger .info ("Updating existing item (mode=upsert)" )
411- response = client .put (item_url , json = item , headers = headers )
416+ with STAC_HTTP_REQUEST_DURATION .labels (operation = "put" , endpoint = "item" ).time ():
417+ response = client .put (item_url , json = item , headers = headers )
412418 if response .status_code >= 400 :
413419 logger .error (f" { response .status_code } { response .reason_phrase } " )
414420 logger .info (f"Response body: { response .text } " )
421+ STAC_REGISTRATION_TOTAL .labels (
422+ collection = collection_id , operation = "update" , status = "error"
423+ ).inc ()
415424 response .raise_for_status ()
416425 logger .info (f"Successfully updated item { item_id } " )
426+ STAC_REGISTRATION_TOTAL .labels (
427+ collection = collection_id , operation = "update" , status = "success"
428+ ).inc ()
417429 elif mode in ("force" , "replace" ):
418430 logger .info ("Deleting and recreating (mode=replace)" )
419- client .delete (item_url , headers = headers )
420- response = client .post (items_url , json = item , headers = headers )
431+ with STAC_HTTP_REQUEST_DURATION .labels (operation = "delete" , endpoint = "item" ).time ():
432+ client .delete (item_url , headers = headers )
433+ with STAC_HTTP_REQUEST_DURATION .labels (operation = "post" , endpoint = "items" ).time ():
434+ response = client .post (items_url , json = item , headers = headers )
421435 if response .status_code >= 400 :
422436 logger .error (f" { response .status_code } { response .reason_phrase } " )
423437 logger .info (f"Response body: { response .text } " )
438+ STAC_REGISTRATION_TOTAL .labels (
439+ collection = collection_id , operation = "replace" , status = "error"
440+ ).inc ()
424441 response .raise_for_status ()
425442 logger .info (f"Successfully replaced item { item_id } " )
443+ STAC_REGISTRATION_TOTAL .labels (
444+ collection = collection_id , operation = "replace" , status = "success"
445+ ).inc ()
426446 else :
427447 raise ValueError (f"Unknown mode: { mode } " )
428448 else :
429449 logger .info (f"Creating new item { item_id } " )
430- response = client .post (items_url , json = item , headers = headers )
450+ with STAC_HTTP_REQUEST_DURATION .labels (operation = "post" , endpoint = "items" ).time ():
451+ response = client .post (items_url , json = item , headers = headers )
431452 if response .status_code >= 400 :
432453 logger .error (f" { response .status_code } { response .reason_phrase } " )
433454 logger .info (f"Response body: { response .text } " )
455+ STAC_REGISTRATION_TOTAL .labels (
456+ collection = collection_id , operation = "create" , status = "error"
457+ ).inc ()
434458 response .raise_for_status ()
435459 logger .info (f"Successfully created item { item_id } " )
460+ STAC_REGISTRATION_TOTAL .labels (
461+ collection = collection_id , operation = "create" , status = "success"
462+ ).inc ()
436463
437464
438465def main () -> int :
0 commit comments