feat: more logging
This commit is contained in:
@@ -69,21 +69,42 @@ func (c *RegistryClient) FindFirmwareByNameAndVersion(name, version string) (*Fi
|
||||
func (c *RegistryClient) GetHealth() (map[string]interface{}, error) {
|
||||
url := fmt.Sprintf("%s/health", c.BaseURL)
|
||||
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"endpoint": "/health",
|
||||
}).Debug("Checking registry health")
|
||||
|
||||
resp, err := c.HTTPClient.Get(url)
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to check registry health")
|
||||
return nil, fmt.Errorf("failed to get registry health: %w", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"status_code": resp.StatusCode,
|
||||
}).Debug("Registry health check returned non-OK status")
|
||||
return nil, fmt.Errorf("registry health check failed with status %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
var health map[string]interface{}
|
||||
if err := json.NewDecoder(resp.Body).Decode(&health); err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to decode health response")
|
||||
return nil, fmt.Errorf("failed to decode health response: %w", err)
|
||||
}
|
||||
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
}).Debug("Successfully checked registry health")
|
||||
|
||||
return health, nil
|
||||
}
|
||||
|
||||
@@ -91,6 +112,13 @@ func (c *RegistryClient) GetHealth() (map[string]interface{}, error) {
|
||||
func (c *RegistryClient) UploadFirmware(metadata FirmwareMetadata, firmwareFile io.Reader) (map[string]interface{}, error) {
|
||||
url := fmt.Sprintf("%s/firmware", c.BaseURL)
|
||||
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"endpoint": "/firmware",
|
||||
"name": metadata.Name,
|
||||
"version": metadata.Version,
|
||||
}).Debug("Uploading firmware to registry")
|
||||
|
||||
// Create multipart form data
|
||||
body := &bytes.Buffer{}
|
||||
writer := multipart.NewWriter(body)
|
||||
@@ -98,11 +126,19 @@ func (c *RegistryClient) UploadFirmware(metadata FirmwareMetadata, firmwareFile
|
||||
// Add metadata
|
||||
metadataJSON, err := json.Marshal(metadata)
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to marshal firmware metadata")
|
||||
return nil, fmt.Errorf("failed to marshal metadata: %w", err)
|
||||
}
|
||||
|
||||
metadataPart, err := writer.CreateFormField("metadata")
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to create metadata field")
|
||||
return nil, fmt.Errorf("failed to create metadata field: %w", err)
|
||||
}
|
||||
metadataPart.Write(metadataJSON)
|
||||
@@ -110,10 +146,18 @@ func (c *RegistryClient) UploadFirmware(metadata FirmwareMetadata, firmwareFile
|
||||
// Add firmware file
|
||||
firmwarePart, err := writer.CreateFormFile("firmware", fmt.Sprintf("%s-%s.bin", metadata.Name, metadata.Version))
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to create firmware field")
|
||||
return nil, fmt.Errorf("failed to create firmware field: %w", err)
|
||||
}
|
||||
|
||||
if _, err := io.Copy(firmwarePart, firmwareFile); err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to copy firmware data")
|
||||
return nil, fmt.Errorf("failed to copy firmware data: %w", err)
|
||||
}
|
||||
|
||||
@@ -121,6 +165,10 @@ func (c *RegistryClient) UploadFirmware(metadata FirmwareMetadata, firmwareFile
|
||||
|
||||
req, err := http.NewRequest("POST", url, body)
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to create upload request")
|
||||
return nil, fmt.Errorf("failed to create request: %w", err)
|
||||
}
|
||||
|
||||
@@ -128,20 +176,43 @@ func (c *RegistryClient) UploadFirmware(metadata FirmwareMetadata, firmwareFile
|
||||
|
||||
resp, err := c.HTTPClient.Do(req)
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": metadata.Name,
|
||||
"version": metadata.Version,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to upload firmware to registry")
|
||||
return nil, fmt.Errorf("failed to upload firmware: %w", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
|
||||
body, _ := io.ReadAll(resp.Body)
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": metadata.Name,
|
||||
"version": metadata.Version,
|
||||
"status_code": resp.StatusCode,
|
||||
"error_body": string(body),
|
||||
}).Debug("Firmware upload returned non-OK status")
|
||||
return nil, fmt.Errorf("firmware upload failed with status %d: %s", resp.StatusCode, string(body))
|
||||
}
|
||||
|
||||
var result map[string]interface{}
|
||||
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to decode upload response")
|
||||
return nil, fmt.Errorf("failed to decode upload response: %w", err)
|
||||
}
|
||||
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": metadata.Name,
|
||||
"version": metadata.Version,
|
||||
}).Debug("Successfully uploaded firmware to registry")
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
@@ -149,13 +220,32 @@ func (c *RegistryClient) UploadFirmware(metadata FirmwareMetadata, firmwareFile
|
||||
func (c *RegistryClient) UpdateFirmwareMetadata(name, version string, metadata FirmwareMetadata) (map[string]interface{}, error) {
|
||||
url := fmt.Sprintf("%s/firmware/%s/%s", c.BaseURL, name, version)
|
||||
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"endpoint": fmt.Sprintf("/firmware/%s/%s", name, version),
|
||||
"name": name,
|
||||
"version": version,
|
||||
}).Debug("Updating firmware metadata in registry")
|
||||
|
||||
metadataJSON, err := json.Marshal(metadata)
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": name,
|
||||
"version": version,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to marshal metadata")
|
||||
return nil, fmt.Errorf("failed to marshal metadata: %w", err)
|
||||
}
|
||||
|
||||
req, err := http.NewRequest("PUT", url, bytes.NewBuffer(metadataJSON))
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": name,
|
||||
"version": version,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to create update request")
|
||||
return nil, fmt.Errorf("failed to create request: %w", err)
|
||||
}
|
||||
|
||||
@@ -163,20 +253,45 @@ func (c *RegistryClient) UpdateFirmwareMetadata(name, version string, metadata F
|
||||
|
||||
resp, err := c.HTTPClient.Do(req)
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": name,
|
||||
"version": version,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to update firmware metadata in registry")
|
||||
return nil, fmt.Errorf("failed to update firmware metadata: %w", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
body, _ := io.ReadAll(resp.Body)
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": name,
|
||||
"version": version,
|
||||
"status_code": resp.StatusCode,
|
||||
"error_body": string(body),
|
||||
}).Debug("Firmware metadata update returned non-OK status")
|
||||
return nil, fmt.Errorf("firmware metadata update failed with status %d: %s", resp.StatusCode, string(body))
|
||||
}
|
||||
|
||||
var result map[string]interface{}
|
||||
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": name,
|
||||
"version": version,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to decode update response")
|
||||
return nil, fmt.Errorf("failed to decode update response: %w", err)
|
||||
}
|
||||
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": name,
|
||||
"version": version,
|
||||
}).Debug("Successfully updated firmware metadata in registry")
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
@@ -221,21 +336,43 @@ func (c *RegistryClient) firmwareMatchesLabels(firmwareLabels, rolloutLabels map
|
||||
func (c *RegistryClient) ListFirmware() ([]GroupedFirmware, error) {
|
||||
url := fmt.Sprintf("%s/firmware", c.BaseURL)
|
||||
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"endpoint": "/firmware",
|
||||
}).Debug("Fetching firmware list from registry")
|
||||
|
||||
resp, err := c.HTTPClient.Get(url)
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to fetch firmware list from registry")
|
||||
return nil, fmt.Errorf("failed to get firmware list: %w", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"status_code": resp.StatusCode,
|
||||
}).Debug("Firmware list request returned non-OK status")
|
||||
return nil, fmt.Errorf("firmware list request failed with status %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
var firmwareList []GroupedFirmware
|
||||
if err := json.NewDecoder(resp.Body).Decode(&firmwareList); err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to decode firmware list response")
|
||||
return nil, fmt.Errorf("failed to decode firmware list response: %w", err)
|
||||
}
|
||||
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"firmware_count": len(firmwareList),
|
||||
}).Debug("Successfully fetched firmware list from registry")
|
||||
|
||||
return firmwareList, nil
|
||||
}
|
||||
|
||||
@@ -243,26 +380,52 @@ func (c *RegistryClient) ListFirmware() ([]GroupedFirmware, error) {
|
||||
func (c *RegistryClient) DownloadFirmware(name, version string) ([]byte, error) {
|
||||
url := fmt.Sprintf("%s/firmware/%s/%s", c.BaseURL, name, version)
|
||||
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"endpoint": fmt.Sprintf("/firmware/%s/%s", name, version),
|
||||
"name": name,
|
||||
"version": version,
|
||||
}).Debug("Downloading firmware from registry")
|
||||
|
||||
resp, err := c.HTTPClient.Get(url)
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": name,
|
||||
"version": version,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to download firmware from registry")
|
||||
return nil, fmt.Errorf("failed to download firmware: %w", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": name,
|
||||
"version": version,
|
||||
"status_code": resp.StatusCode,
|
||||
}).Debug("Firmware download request returned non-OK status")
|
||||
return nil, fmt.Errorf("firmware download request failed with status %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
data, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": name,
|
||||
"version": version,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to read firmware data from registry")
|
||||
return nil, fmt.Errorf("failed to read firmware data: %w", err)
|
||||
}
|
||||
|
||||
log.WithFields(log.Fields{
|
||||
"name": name,
|
||||
"version": version,
|
||||
"size": len(data),
|
||||
}).Info("Downloaded firmware from registry")
|
||||
"registry_url": c.BaseURL,
|
||||
"name": name,
|
||||
"version": version,
|
||||
"size": len(data),
|
||||
}).Debug("Successfully downloaded firmware from registry")
|
||||
|
||||
return data, nil
|
||||
}
|
||||
@@ -271,31 +434,64 @@ func (c *RegistryClient) DownloadFirmware(name, version string) ([]byte, error)
|
||||
func (c *RegistryClient) DeleteFirmware(name, version string) (map[string]interface{}, error) {
|
||||
url := fmt.Sprintf("%s/firmware/%s/%s", c.BaseURL, name, version)
|
||||
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"endpoint": fmt.Sprintf("/firmware/%s/%s", name, version),
|
||||
"name": name,
|
||||
"version": version,
|
||||
}).Debug("Deleting firmware from registry")
|
||||
|
||||
req, err := http.NewRequest(http.MethodDelete, url, nil)
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": name,
|
||||
"version": version,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to create delete request")
|
||||
return nil, fmt.Errorf("failed to create delete request: %w", err)
|
||||
}
|
||||
|
||||
resp, err := c.HTTPClient.Do(req)
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": name,
|
||||
"version": version,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to delete firmware from registry")
|
||||
return nil, fmt.Errorf("failed to delete firmware: %w", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
body, _ := io.ReadAll(resp.Body)
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": name,
|
||||
"version": version,
|
||||
"status_code": resp.StatusCode,
|
||||
"error_body": string(body),
|
||||
}).Debug("Firmware delete returned non-OK status")
|
||||
return nil, fmt.Errorf("firmware delete request failed with status %d: %s", resp.StatusCode, string(body))
|
||||
}
|
||||
|
||||
var result map[string]interface{}
|
||||
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"registry_url": c.BaseURL,
|
||||
"name": name,
|
||||
"version": version,
|
||||
"error": err.Error(),
|
||||
}).Debug("Failed to decode delete response")
|
||||
return nil, fmt.Errorf("failed to decode delete response: %w", err)
|
||||
}
|
||||
|
||||
log.WithFields(log.Fields{
|
||||
"name": name,
|
||||
"version": version,
|
||||
}).Info("Deleted firmware from registry")
|
||||
"registry_url": c.BaseURL,
|
||||
"name": name,
|
||||
"version": version,
|
||||
}).Debug("Successfully deleted firmware from registry")
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user