Skip to content

Commit

Permalink
Fixed paging issue in azure_monitor_activity_log_event table using Az…
Browse files Browse the repository at this point in the history
…ure ARM stable package to populate column values Closes #807 (#810)
  • Loading branch information
ParthaI authored Jul 26, 2024
1 parent bfb7928 commit 8507015
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 31 deletions.
53 changes: 22 additions & 31 deletions azure/table_azure_monitor_activity_log_event.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"github.com/turbot/steampipe-plugin-sdk/v5/plugin"
"github.com/turbot/steampipe-plugin-sdk/v5/plugin/transform"

"github.com/Azure/azure-sdk-for-go/profiles/preview/preview/monitor/mgmt/insights"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor"
)

//// TABLE DEFINITION
Expand Down Expand Up @@ -98,13 +98,13 @@ func tableAzureMonitorActivityLogEvent(_ context.Context) *plugin.Table {
Name: "event_timestamp",
Description: "The timestamp of when the event was generated by the Azure service processing the request corresponding the event.",
Type: proto.ColumnType_TIMESTAMP,
Transform: transform.FromField("EventTimestamp").Transform(convertDateToTime),
Transform: transform.FromField("EventTimestamp").Transform(transform.NullIfZeroValue),
},
{
Name: "submission_timestamp",
Description: "The timestamp of when the event became available for querying via this API.",
Type: proto.ColumnType_TIMESTAMP,
Transform: transform.FromField("SubmissionTimestamp").Transform(convertDateToTime),
Transform: transform.FromField("SubmissionTimestamp").Transform(transform.NullIfZeroValue),
},
{
Name: "event_name",
Expand Down Expand Up @@ -195,40 +195,31 @@ func tableAzureMonitorActivityLogEvent(_ context.Context) *plugin.Table {
//// LIST FUNCTION

func listMonitorActivityLogEvents(ctx context.Context, d *plugin.QueryData, _ *plugin.HydrateData) (interface{}, error) {
session, err := GetNewSession(ctx, d, "MANAGEMENT")
session, err := GetNewSessionUpdated(ctx, d)
if err != nil {
return nil, err
}
subscriptionID := session.SubscriptionID

client := insights.NewActivityLogsClientWithBaseURI(session.ResourceManagerEndpoint, subscriptionID)
client.Authorizer = session.Authorizer

filter := buildActivityLogFilter(d.Quals)

result, err := client.List(ctx, filter, "")
clientFactory, err := armmonitor.NewActivityLogsClient(subscriptionID, session.Cred, session.ClientOptions)
if err != nil {
plugin.Logger(ctx).Error("azure_monitor_activity_log_event.listMonitorActivityLogEvents", "api_error", err)
plugin.Logger(ctx).Error("azure_monitor_activity_log_event.listMonitorActivityLogEvents", "client_error", err)
return nil, err
}

for _, event := range result.Values() {
d.StreamListItem(ctx, event)
options := &armmonitor.ActivityLogsClientListOptions{}

// Check if context has been cancelled or if the limit has been hit (if specified)
// if there is a limit, it will return the number of rows required to reach this limit
if d.RowsRemaining(ctx) == 0 {
return nil, nil
}
}
filter := buildActivityLogFilter(d.Quals)

for result.NotDone() {
err = result.NextWithContext(ctx)
pager := clientFactory.NewListPager(filter, options)

for pager.More() {
page, err := pager.NextPage(ctx)
if err != nil {
plugin.Logger(ctx).Error("azure_monitor_activity_log_event.listMonitorActivityLogEvents", "api_error", err)
return nil, err
}

for _, event := range result.Values() {
for _, event := range page.Value {
d.StreamListItem(ctx, event)

// Check if context has been cancelled or if the limit has been hit (if specified)
Expand Down Expand Up @@ -266,33 +257,33 @@ func buildActivityLogFilter(quals plugin.KeyColumnQualMap) string {
if filter == "" {
switch q.Operator {
case ">", ">=":
filter = filterName + " ge " + evTime
filter = filterName + " ge " + "'" + evTime + "'"
case "<", "<=":
filter = filterName + " le " + evTime
filter = filterName + " le " + "'" + evTime + "'"
}
} else {
switch q.Operator {
case ">", ">=":
filter += " and " + filterName + " ge " + evTime
filter += " and " + filterName + " ge " + "'" + evTime + "'"
case "<", "<=":
filter += " and " + filterName + " le " + evTime
filter += " and " + filterName + " le " + "'" + evTime + "'"
}
}
}
} else if columnName == "event_timestamp" && quals[columnName] == nil {
if filter == "" {
filter = filterName + " ge " + time.Now().AddDate(0, 0, -90).Format(time.RFC3339)
filter = filterName + " ge " + "'" + time.Now().AddDate(0, 0, -90).Format(time.RFC3339) + "'"
} else {
filter = " and " + filterName + " ge " + time.Now().AddDate(0, 0, -90).Format(time.RFC3339)
filter = " and " + filterName + " ge " + "'" + time.Now().AddDate(0, 0, -90).Format(time.RFC3339) + "'"
}
} else {
if quals[columnName] != nil {
for _, q := range quals[columnName].Quals {
if q.Operator == "=" {
if filter == "" {
filter = filterName + " eq " + q.Value.GetStringValue()
filter = filterName + " eq " + "'" + q.Value.GetStringValue() + "'"
} else {
filter += " and " + filterName + " eq " + q.Value.GetStringValue()
filter += " and " + filterName + " eq " + "'" + q.Value.GetStringValue() + "'"
}
}
}
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ require (
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v4 v4.8.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dataprotection/armdataprotection v1.0.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managedservices/armmanagedservices v0.7.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.11.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/recoveryservices/armrecoveryservicesbackup/v3 v3.0.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/sql/armsql v1.2.0
github.com/Azure/azure-storage-blob-go v0.12.0
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,8 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFG
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0/go.mod h1:LRr2FzBTQlONPPa5HREE5+RjSCTXl7BwOvYOaWTqCaI=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managedservices/armmanagedservices v0.7.0 h1:dwmV8G0tLD17J+LcTirpFmNKvZBLLuErtGR0h6h8n2c=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managedservices/armmanagedservices v0.7.0/go.mod h1:UmV8UnyCQ+05EvopWqF6CQsFWI5FWcp/AXGVkJguv9E=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.11.0 h1:Ds0KRF8ggpEGg4Vo42oX1cIt/IfOhHWJBikksZbVxeg=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.11.0/go.mod h1:jj6P8ybImR+5topJ+eH6fgcemSFBmU6/6bFF8KkwuDI=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/recoveryservices/armrecoveryservicesbackup/v3 v3.0.0 h1:BIvscO5ZFKaEHoix9jAV6vbatKLiDNb5pj8XjzQR2g4=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/recoveryservices/armrecoveryservicesbackup/v3 v3.0.0/go.mod h1:4uHLkZ3JvDvacFcEyB0T/cCeVqlvtHHA7DjvpgvlpdA=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 h1:7CBQ+Ei8SP2c6ydQTGCCrS35bDxgTMfoP2miAwK++OU=
Expand Down

0 comments on commit 8507015

Please sign in to comment.