feat: add logging for trace id (#1061)

relates to STACKITTPR-290
This commit is contained in:
Marcel Jacek 2025-11-27 11:06:18 +01:00 committed by GitHub
parent d1e12fcf64
commit 24b7387db9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
140 changed files with 1597 additions and 7 deletions

View file

@ -138,6 +138,8 @@ func (a *alertGroupDataSource) Read(ctx context.Context, req datasource.ReadRequ
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
alertGroupName := model.Name.ValueString()
@ -157,6 +159,8 @@ func (a *alertGroupDataSource) Read(ctx context.Context, req datasource.ReadRequ
return
}
ctx = core.LogResponse(ctx)
err = mapFields(ctx, readAlertGroupResp.Data, &model)
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading alert group", fmt.Sprintf("Error processing API response: %v", err))

View file

@ -239,6 +239,8 @@ func (a *alertGroupResource) Create(ctx context.Context, req resource.CreateRequ
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
alertGroupName := model.Name.ValueString()
@ -258,6 +260,8 @@ func (a *alertGroupResource) Create(ctx context.Context, req resource.CreateRequ
return
}
ctx = core.LogResponse(ctx)
// all alert groups are returned. We have to search the map for the one corresponding to our name
for _, alertGroup := range *createAlertGroupResp.Data {
if model.Name.ValueString() != *alertGroup.Name {
@ -289,6 +293,8 @@ func (a *alertGroupResource) Read(ctx context.Context, req resource.ReadRequest,
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
alertGroupName := model.Name.ValueString()
@ -308,6 +314,8 @@ func (a *alertGroupResource) Read(ctx context.Context, req resource.ReadRequest,
return
}
ctx = core.LogResponse(ctx)
err = mapFields(ctx, readAlertGroupResp.Data, &model)
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading alert group", fmt.Sprintf("Error processing API response: %v", err))
@ -337,6 +345,8 @@ func (a *alertGroupResource) Delete(ctx context.Context, req resource.DeleteRequ
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
alertGroupName := model.Name.ValueString()
@ -350,6 +360,8 @@ func (a *alertGroupResource) Delete(ctx context.Context, req resource.DeleteRequ
return
}
ctx = core.LogResponse(ctx)
tflog.Info(ctx, "Alert group deleted")
}

View file

@ -136,6 +136,8 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
description := model.Description.ValueStringPointer()
@ -149,6 +151,9 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", fmt.Sprintf("Calling API: %v", err))
return
}
ctx = core.LogResponse(ctx)
err = mapFields(got.Credentials, &model)
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", fmt.Sprintf("Processing API payload: %v", err))
@ -193,6 +198,9 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest,
if resp.Diagnostics.HasError() {
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
userName := model.Username.ValueString()
@ -211,6 +219,9 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest,
resp.State.RemoveResource(ctx)
return
}
ctx = core.LogResponse(ctx)
diags = resp.State.Set(ctx, model)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
@ -233,6 +244,9 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ
if resp.Diagnostics.HasError() {
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
userName := model.Username.ValueString()
@ -241,5 +255,8 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ
core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting credential", fmt.Sprintf("Calling API: %v", err))
return
}
ctx = core.LogResponse(ctx)
tflog.Info(ctx, "Observability credential deleted")
}

View file

@ -381,6 +381,9 @@ func (d *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques
if resp.Diagnostics.HasError() {
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
instanceResp, err := d.client.GetInstance(ctx, instanceId, projectId).Execute()
@ -398,6 +401,9 @@ func (d *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques
resp.State.RemoveResource(ctx)
return
}
ctx = core.LogResponse(ctx)
if instanceResp != nil && instanceResp.Status != nil && *instanceResp.Status == observability.GETINSTANCERESPONSESTATUS_DELETE_SUCCEEDED {
resp.State.RemoveResource(ctx)
core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", "Instance was deleted successfully")

View file

@ -897,6 +897,8 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques
return
}
ctx = core.InitProviderContext(ctx)
acl := []string{}
if !(model.ACL.IsNull() || model.ACL.IsUnknown()) {
diags = model.ACL.ElementsAs(ctx, &acl, false)
@ -934,6 +936,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating instance", fmt.Sprintf("Calling API: %v", err))
return
}
ctx = core.LogResponse(ctx)
instanceId := createResp.InstanceId
ctx = tflog.SetField(ctx, "instance_id", instanceId)
waitResp, err := wait.CreateInstanceWaitHandler(ctx, r.client, *instanceId, projectId).WaitWithContext(ctx)
@ -1064,6 +1069,9 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r
if resp.Diagnostics.HasError() {
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
ctx = tflog.SetField(ctx, "project_id", projectId)
@ -1079,6 +1087,9 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r
core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", fmt.Sprintf("Calling API: %v", err))
return
}
ctx = core.LogResponse(ctx)
if instanceResp != nil && instanceResp.Status != nil && *instanceResp.Status == observability.GETINSTANCERESPONSESTATUS_DELETE_SUCCEEDED {
resp.State.RemoveResource(ctx)
return
@ -1215,6 +1226,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques
if resp.Diagnostics.HasError() {
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
@ -1268,6 +1282,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques
core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Calling API: %v", err))
return
}
ctx = core.LogResponse(ctx)
instance, err = wait.UpdateInstanceWaitHandler(ctx, r.client, instanceId, projectId).WaitWithContext(ctx)
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Instance update waiting: %v", err))
@ -1401,6 +1418,8 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
@ -1410,6 +1429,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques
core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Calling API: %v", err))
return
}
ctx = core.LogResponse(ctx)
_, err = wait.DeleteInstanceWaitHandler(ctx, r.client, instanceId, projectId).WaitWithContext(ctx)
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Instance deletion waiting: %v", err))

View file

@ -138,6 +138,8 @@ func (l *logAlertGroupDataSource) Read(ctx context.Context, req datasource.ReadR
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
alertGroupName := model.Name.ValueString()
@ -157,6 +159,8 @@ func (l *logAlertGroupDataSource) Read(ctx context.Context, req datasource.ReadR
return
}
ctx = core.LogResponse(ctx)
err = mapFields(ctx, readAlertGroupResp.Data, &model)
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading log alert group", fmt.Sprintf("Error processing API response: %v", err))

View file

@ -239,6 +239,8 @@ func (l *logAlertGroupResource) Create(ctx context.Context, req resource.CreateR
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
alertGroupName := model.Name.ValueString()
@ -258,6 +260,8 @@ func (l *logAlertGroupResource) Create(ctx context.Context, req resource.CreateR
return
}
ctx = core.LogResponse(ctx)
// all log alert groups are returned. We have to search the map for the one corresponding to our name
for _, alertGroup := range *createAlertGroupResp.Data {
if model.Name.ValueString() != *alertGroup.Name {
@ -289,6 +293,8 @@ func (l *logAlertGroupResource) Read(ctx context.Context, req resource.ReadReque
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
alertGroupName := model.Name.ValueString()
@ -308,6 +314,8 @@ func (l *logAlertGroupResource) Read(ctx context.Context, req resource.ReadReque
return
}
ctx = core.LogResponse(ctx)
err = mapFields(ctx, readAlertGroupResp.Data, &model)
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading log alert group", fmt.Sprintf("Error processing API response: %v", err))
@ -337,6 +345,8 @@ func (l *logAlertGroupResource) Delete(ctx context.Context, req resource.DeleteR
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
alertGroupName := model.Name.ValueString()
@ -350,6 +360,8 @@ func (l *logAlertGroupResource) Delete(ctx context.Context, req resource.DeleteR
return
}
ctx = core.LogResponse(ctx)
tflog.Info(ctx, "log alert group deleted")
}

View file

@ -190,6 +190,9 @@ func (d *scrapeConfigDataSource) Read(ctx context.Context, req datasource.ReadRe
if resp.Diagnostics.HasError() {
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
scName := model.Name.ValueString()
@ -210,6 +213,8 @@ func (d *scrapeConfigDataSource) Read(ctx context.Context, req datasource.ReadRe
return
}
ctx = core.LogResponse(ctx)
err = mapFields(ctx, scResp.Data, &model)
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Mapping fields", err.Error())

View file

@ -305,6 +305,8 @@ func (r *scrapeConfigResource) Create(ctx context.Context, req resource.CreateRe
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
scName := model.Name.ValueString()
@ -347,6 +349,9 @@ func (r *scrapeConfigResource) Create(ctx context.Context, req resource.CreateRe
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating scrape config", fmt.Sprintf("Calling API: %v", err))
return
}
ctx = core.LogResponse(ctx)
_, err = wait.CreateScrapeConfigWaitHandler(ctx, r.client, instanceId, scName, projectId).WaitWithContext(ctx)
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating scrape config", fmt.Sprintf("Scrape config creation waiting: %v", err))
@ -379,6 +384,9 @@ func (r *scrapeConfigResource) Read(ctx context.Context, req resource.ReadReques
if resp.Diagnostics.HasError() {
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
scName := model.Name.ValueString()
@ -394,6 +402,8 @@ func (r *scrapeConfigResource) Read(ctx context.Context, req resource.ReadReques
return
}
ctx = core.LogResponse(ctx)
// Map response body to schema
err = mapFields(ctx, scResp.Data, &model)
if err != nil {
@ -418,6 +428,9 @@ func (r *scrapeConfigResource) Update(ctx context.Context, req resource.UpdateRe
if resp.Diagnostics.HasError() {
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
scName := model.Name.ValueString()
@ -460,6 +473,9 @@ func (r *scrapeConfigResource) Update(ctx context.Context, req resource.UpdateRe
core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating scrape config", fmt.Sprintf("Calling API: %v", err))
return
}
ctx = core.LogResponse(ctx)
// We do not have an update status provided by the observability scrape config api, so we cannot use a waiter here, hence a simple sleep is used.
time.Sleep(15 * time.Second)
@ -492,6 +508,8 @@ func (r *scrapeConfigResource) Delete(ctx context.Context, req resource.DeleteRe
return
}
ctx = core.InitProviderContext(ctx)
projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
scName := model.Name.ValueString()
@ -502,6 +520,9 @@ func (r *scrapeConfigResource) Delete(ctx context.Context, req resource.DeleteRe
core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting scrape config", fmt.Sprintf("Calling API: %v", err))
return
}
ctx = core.LogResponse(ctx)
_, err = wait.DeleteScrapeConfigWaitHandler(ctx, r.client, instanceId, scName, projectId).WaitWithContext(ctx)
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting scrape config", fmt.Sprintf("Scrape config deletion waiting: %v", err))