-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain.go
More file actions
97 lines (77 loc) · 2.17 KB
/
main.go
File metadata and controls
97 lines (77 loc) · 2.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package main
import (
"context"
"log"
"sync"
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/renderinc/render-auditlogs/pkg/auditlogs"
"github.com/renderinc/render-auditlogs/pkg/aws"
"github.com/renderinc/render-auditlogs/pkg/env"
"github.com/renderinc/render-auditlogs/pkg/logger"
"github.com/renderinc/render-auditlogs/pkg/processor"
"github.com/renderinc/render-auditlogs/pkg/render"
)
const (
renderAPIBaseURL = "https://api.render.com/v1"
)
func main() {
ctx := context.Background()
ctx, l := logger.New(ctx)
var cfg env.Config
err := env.LoadConfig(ctx, &cfg)
if err != nil {
log.Fatal("Error loading config:", err)
}
// Create S3 uploader
uploader, err := aws.NewUploaderWithOptions(ctx, s3.NewFromConfig(cfg.AWSConfig), cfg.S3Bucket, cfg.AWSRegion, aws.UploaderOptions{
UseKMS: cfg.S3UseKMS,
KMSKeyID: cfg.S3KMSKeyID,
BucketKeyEnabled: cfg.S3BucketKeyEnabled,
})
if err != nil {
log.Fatal("Error creating S3 uploader:", err)
}
client := render.NewClient(renderAPIBaseURL, cfg.RenderAPIKey)
workspaceLogs := auditlogs.NewWorkspaceSvc(client)
organizationLogs := auditlogs.NewOrganizationSvc(client)
semaphore := make(chan int, 5)
var wg sync.WaitGroup
for _, workspaceID := range cfg.WorkspaceIDS {
semaphore <- 1
wg.Add(1)
go func(workspaceID string) {
defer func() {
<-semaphore
wg.Done()
}()
ctx, l := logger.With(ctx, "workspaceID", workspaceID)
l.Info("processing workspace")
err := processor.NewLogProcessor(
uploader, workspaceLogs,
).Process(ctx, workspaceID)
if err != nil {
l.Error("Error processing workspace", "error", err)
}
}(workspaceID)
}
if cfg.OrganizationID != "" {
semaphore <- 1
wg.Add(1)
go func(organizationID string) {
defer func() {
<-semaphore
wg.Done()
}()
ctx, l := logger.With(ctx, "organizationID", cfg.OrganizationID)
l.Info("processing enterprise")
err = processor.NewLogProcessor(
uploader, organizationLogs,
).Process(ctx, cfg.OrganizationID)
if err != nil {
l.Error("Error processing organization audit logs", "error", err)
}
}(cfg.OrganizationID)
}
wg.Wait()
l.Info("all workspaces processed")
}